summary refs log tree commit diff stats
path: root/tests/stdlib
diff options
context:
space:
mode:
authortreeform <starplant@gmail.com>2017-12-14 18:31:43 +0000
committertreeform <starplant@gmail.com>2017-12-14 18:36:18 +0000
commitee5a76fd9d463b7c7628e2c6625238febc513401 (patch)
tree7ac4d4111008b728ad1c38dab1d34ca3ac71dcc2 /tests/stdlib
parent08d7b5d0317b9192ebb721c0e1abafac6f2853ec (diff)
downloadNim-ee5a76fd9d463b7c7628e2c6625238febc513401.tar.gz
fix
Diffstat (limited to 'tests/stdlib')
-rw-r--r--tests/stdlib/tparsesql.nim407
1 files changed, 111 insertions, 296 deletions
diff --git a/tests/stdlib/tparsesql.nim b/tests/stdlib/tparsesql.nim
index fe64d3416..3dc949ea1 100644
--- a/tests/stdlib/tparsesql.nim
+++ b/tests/stdlib/tparsesql.nim
@@ -1,346 +1,149 @@
 discard """
   file: "tparsesql.nim"
-  output: '''select
-  foo
-from
-  table;
-select
-  foo
-from
-  table;
-select
-  foo
-from
-  table
-limit
-  10;
-select
-  foo,
-  bar,
-  baz
-from
-  table
-limit
-  10;
-select
-  foo as bar
-from
-  table;
-select
-  foo as foo_prime,
-  bar as bar_prime,
-  baz as baz_prime
-from
-  table;
-select
-  *
-from
-  table;
-select
-  *
-from
-  table
-where
-  ((a = b) and (c = d));
-select
-  *
-from
-  table
-where
-  (not b);
-select
-  *
-from
-  table
-where
-  (a and (not b));
-select
-  *
-from
-  table
-where
-  (((a = b) and (c = d)) or ((n is null) and (((not b) + 1) = 3)));
-select
-  *
-from
-  table
-having
-  ((a = b) and (c = d));
-select
-  a,
-  b
-from
-  table
-group by
-  a;
-select
-  a,
-  b
-from
-  table
-group by
-  1, 2;
-select
-  t.a
-from
-  t as t;
-select
-  a,
-  b
-from
-  (
-    select
-      *
-    from
-      t
-  );
-select
-  a,
-  b
-from
-  (
-    select
-      *
-    from
-      t
-  ) as foo;
-select
-  a,
-  b
-from
-  (
-    select
-      *
-    from
-      (
-        select
-          *
-        from
-          (
-            select
-              *
-            from
-              (
-                select
-                  *
-                from
-                  inner as inner1
-              ) as inner2
-          ) as inner3
-      ) as inner4
-  ) as inner5;
-select
-  a,
-  b
-from
-  (
-    select
-      *
-    from
-      a
-  ), (
-    select
-      *
-    from
-      b
-  ), (
-    select
-      *
-    from
-      c
-  );
-select
-  *
-from
-  Products
-where
-  (Price BETWEEN (10 AND 20));
-select
-  id
-from
-  a
-join
-  b
-on
-  (a.id == b.id);
-select
-  id
-from
-  a
-join
-  (
-    select
-      id
-    from
-      c
-  ) as b
-on
-  (a.id == b.id);
-select
-  id
-from
-  a
-INNER join
-  b
-on
-  (a.id == b.id);
-select
-  id
-from
-  a
-OUTER join
-  b
-on
-  (a.id == b.id);
-select
-  id
-from
-  a
-CROSS join
-  b
-on
-  (a.id == b.id);
-create type happiness as enum ('happy', 'very happy', 'ecstatic');
-create table holidays(
-  num_weeks int,
-  happiness happiness);
-create index table1_attr1 on table1(attr1);
-select
-  *
-from
-  myTab
-where
-  (col1 = 'happy');
-
-insert into Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
-values ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');
-insert into TableName default values;
-
-update
-  Customers
-set
-  ContactName = 'Alfred Schmidt', City = 'Frankfurt'
-where
-  (CustomerID = 1);
-delete from table_name;
-delete from table_name;
-select
-  *
-from
-  Customers;
-select
-  *
-from
-  Customers
-where
-  ((((CustomerName LIKE 'L%') OR (CustomerName LIKE 'R%')) OR (CustomerName LIKE 'W%')) AND (Country = 'USA'))
-order by
-  CustomerName;
-
-'''
 """
 
 import parsesql
 
-echo $parseSQL "SELECT foo FROM table;"
-echo $parseSQL "SELECT foo FROM table"
-echo $parseSQL "SELECT foo FROM table limit 10"
-echo $parseSQL "SELECT foo, bar, baz FROM table limit 10"
-echo $parseSQL "SELECT foo AS bar FROM table"
-echo $parseSQL "SELECT foo AS foo_prime, bar AS bar_prime, baz AS baz_prime FROM table"
-echo $parseSQL "SELECT * FROM table"
+doAssert $parseSQL("SELECT foo FROM table;") == "select foo from table;"
+doAssert $parseSQL("""
+SELECT
+  CustomerName,
+  ContactName,
+  Address,
+  City,
+  PostalCode,
+  Country,
+  CustomerName,
+  ContactName,
+  Address,
+  City,
+  PostalCode,
+  Country
+FROM table;""") == "select CustomerName, ContactName, Address, City, PostalCode, Country, CustomerName, ContactName, Address, City, PostalCode, Country from table;"
+
+doAssert $parseSQL("SELECT foo FROM table limit 10") == "select foo from table limit 10;"
+doAssert $parseSQL("SELECT foo, bar, baz FROM table limit 10") == "select foo, bar, baz from table limit 10;"
+doAssert $parseSQL("SELECT foo AS bar FROM table") == "select foo as bar from table;"
+doAssert $parseSQL("SELECT foo AS foo_prime, bar AS bar_prime, baz AS baz_prime FROM table") == "select foo as foo_prime, bar as bar_prime, baz as baz_prime from table;"
+doAssert $parseSQL("SELECT * FROM table") == "select * from table;"
+
+
 #TODO add count(*)
-#echo $parseSQL "SELECT COUNT(*) FROM table"
-echo $parseSQL """
+#doAssert $parseSQL("SELECT COUNT(*) FROM table"
+
+doAssert $parseSQL("""
 SELECT * FROM table
 WHERE a = b and c = d
-"""
-echo $parseSQL """
+""") == "select * from table where a = b and c = d;"
+
+doAssert $parseSQL("""
 SELECT * FROM table
 WHERE not b
-"""
-echo $parseSQL """
+""") == "select * from table where not b;"
+
+doAssert $parseSQL("""
 SELECT
   *
 FROM
   table
 WHERE
   a and not b
-"""
-echo $parseSQL """
+""") == "select * from table where a and not b;"
+
+doAssert $parseSQL("""
 SELECT * FROM table
 WHERE a = b and c = d or n is null and not b + 1 = 3
-"""
-echo $parseSQL """
+""") == "select * from table where a = b and c = d or n is null and not b + 1 = 3;"
+
+doAssert $parseSQL("""
+SELECT * FROM table
+WHERE (a = b and c = d) or (n is null and not b + 1 = 3)
+""") == "select * from table where(a = b and c = d) or (n is null and not b + 1 = 3);"
+
+doAssert $parseSQL("""
 SELECT * FROM table
 HAVING a = b and c = d
-"""
-echo $parseSQL """
+""") == "select * from table having a = b and c = d;"
+
+doAssert $parseSQL("""
 SELECT a, b FROM table
 GROUP BY a
-"""
-echo $parseSQL """
+""") == "select a, b from table group by a;"
+
+doAssert $parseSQL("""
 SELECT a, b FROM table
 GROUP BY 1, 2
-"""
-echo $parseSQL "SELECT t.a FROM t as t"
-echo $parseSQL """
+""") == "select a, b from table group by 1, 2;"
+
+doAssert $parseSQL("SELECT t.a FROM t as t") == "select t.a from t as t;"
+
+doAssert $parseSQL("""
 SELECT a, b FROM (
   SELECT * FROM t
 )
-"""
-echo $parseSQL """
+""") == "select a, b from(select * from t);"
+
+doAssert $parseSQL("""
 SELECT a, b FROM (
   SELECT * FROM t
 ) as foo
-"""
-echo $parseSQL """
+""") == "select a, b from(select * from t) as foo;"
+
+doAssert $parseSQL("""
 SELECT a, b FROM (
   SELECT * FROM (
     SELECT * FROM (
       SELECT * FROM (
-        SELECT * FROM inner as inner1
+        SELECT * FROM innerTable as inner1
       ) as inner2
     ) as inner3
   ) as inner4
 ) as inner5
-"""
-echo $parseSQL """
+""") == "select a, b from(select * from(select * from(select * from(select * from innerTable as inner1) as inner2) as inner3) as inner4) as inner5;"
+
+doAssert $parseSQL("""
 SELECT a, b FROM
   (SELECT * FROM a),
   (SELECT * FROM b),
   (SELECT * FROM c)
-"""
-echo $parseSQL """
+""") == "select a, b from(select * from a),(select * from b),(select * from c);"
+
+doAssert $parseSQL("""
 SELECT * FROM Products
 WHERE Price BETWEEN 10 AND 20;
-"""
-echo $parseSQL """
+""") == "select * from Products where Price between 10 and 20;"
+
+doAssert $parseSQL("""
 SELECT id FROM a
 JOIN b
 ON a.id == b.id
-"""
-echo $parseSQL """
+""") == "select id from a join b on a.id == b.id;"
+
+doAssert $parseSQL("""
 SELECT id FROM a
 JOIN (SELECT id from c) as b
 ON a.id == b.id
-"""
-echo $parseSQL """
+""") == "select id from a join(select id from c) as b on a.id == b.id;"
+
+doAssert $parseSQL("""
 SELECT id FROM a
 INNER JOIN b
 ON a.id == b.id
-"""
-echo $parseSQL """
+""") == "select id from a inner join b on a.id == b.id;"
+
+doAssert $parseSQL("""
 SELECT id FROM a
 OUTER JOIN b
 ON a.id == b.id
-"""
-echo $parseSQL """
+""") == "select id from a outer join b on a.id == b.id;"
+
+doAssert $parseSQL("""
 SELECT id FROM a
 CROSS JOIN b
 ON a.id == b.id
-"""
-echo $parseSQL """
+""") == "select id from a cross join b on a.id == b.id;"
+
+doAssert $parseSQL("""
 CREATE TYPE happiness AS ENUM ('happy', 'very happy', 'ecstatic');
 CREATE TABLE holidays (
   num_weeks int,
@@ -348,29 +151,41 @@ CREATE TABLE holidays (
 );
 CREATE INDEX table1_attr1 ON table1(attr1);
 SELECT * FROM myTab WHERE col1 = 'happy';
-"""
-echo $parseSQL """
+""") == "create type happiness as enum ('happy' , 'very happy' , 'ecstatic' ); create table holidays(num_weeks  int , happiness  happiness );; create index table1_attr1 on table1(attr1 );; select * from myTab where col1 = 'happy';"
+
+doAssert $parseSQL("""
 INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
 VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');
-"""
-echo $parseSQL """
+""") == "insert into Customers (CustomerName , ContactName , Address , City , PostalCode , Country ) values ('Cardinal' , 'Tom B. Erichsen' , 'Skagen 21' , 'Stavanger' , '4006' , 'Norway' );"
+
+doAssert $parseSQL("""
 INSERT INTO TableName DEFAULT VALUES
-"""
-echo $parseSQL """
+""") == "insert into TableName default values;"
+
+doAssert $parseSQL("""
 UPDATE Customers
 SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
 WHERE CustomerID = 1;
-"""
-echo $parseSQL "DELETE FROM table_name;"
-echo $parseSQL "DELETE * FROM table_name;"
-echo $parseSQL """
+""") == "update Customers set ContactName  = 'Alfred Schmidt' , City  = 'Frankfurt' where CustomerID = 1;"
+
+doAssert $parseSQL("DELETE FROM table_name;") == "delete from table_name;"
+
+doAssert $parseSQL("DELETE * FROM table_name;") == "delete from table_name;"
+
+doAssert $parseSQL("""
 --Select all:
 SELECT * FROM Customers;
-"""
-echo $parseSQL """
+""") == "select * from Customers;"
+
+doAssert $parseSQL("""
 SELECT * FROM Customers WHERE (CustomerName LIKE 'L%'
 OR CustomerName LIKE 'R%' /*OR CustomerName LIKE 'S%'
 OR CustomerName LIKE 'T%'*/ OR CustomerName LIKE 'W%')
 AND Country='USA'
 ORDER BY CustomerName;
-"""
+""") == "select * from Customers where(CustomerName like 'L%' or CustomerName like 'R%' or CustomerName like 'W%') and Country = 'USA' order by CustomerName;"
+
+# parse keywords as identifires
+doAssert $parseSQL("""
+SELECT `SELECT`, `FROM` as `GROUP` FROM `WHERE`;
+""") == """select "SELECT", "FROM" as "GROUP" from "WHERE";"""