test for between
[dbsrgits/Data-Query.git] / t / expr-helpers.t
index 1f0bff4..a64c9f3 100644 (file)
@@ -21,14 +21,30 @@ dq_sql_is
   ['SELECT * FROM foo'],
   'simple select';
 
-dq_sql_is
-  Join(
-    Select([ Identifier('*') ], Identifier('foo')),
-    Identifier('bar'),
-    perl_operator('==', Identifier('foo', 'x'), Identifier('bar', 'y'))
-  ),
-  ['SELECT * FROM foo JOIN bar ON foo.x = bar.y'],
-  'join on with dots';
+{
+  # should these both be allowed, and result in the same SQL?
+
+  dq_sql_is
+    Join(
+      Select([ Identifier('*') ], Identifier('foo')),
+      Identifier('bar'),
+      perl_operator('==', Identifier('foo', 'x'), Identifier('bar', 'y')),
+    ),
+    ['SELECT * FROM foo JOIN bar ON foo.x = bar.y'],
+    'join on with dots (Join Select)';
+
+  dq_sql_is
+    Select(
+      [ Identifier('*') ],
+      Join(
+        Identifier('foo'),
+        Identifier('bar'),
+        perl_operator('==', Identifier('foo', 'x'), Identifier('bar', 'y')),
+      ),
+    ),
+    ['SELECT * FROM foo JOIN bar ON foo.x = bar.y'],
+    'join on with dots (Select Join)';
+}
 
 dq_sql_is
   Where(
@@ -42,3 +58,42 @@ dq_sql_is
   ['SELECT * FROM foo WHERE x = ?', binding(1)],
   'simple select with where and bind';
 
+dq_sql_is
+  Group (
+    [ Identifier('x') ],
+    Select([ Identifier('*') ], Identifier('foo')),
+  ),
+  ['SELECT * FROM foo GROUP BY x'],
+  'simple group by';
+
+dq_sql_is
+  Select(
+    [ Identifier('*') ],
+    Join(
+      Identifier('foo'),
+      Identifier('bar'),
+      perl_operator('==', Identifier('foo', 'x'), Identifier('bar', 'y')),
+      'left outer',
+    ),
+  ),
+  ['SELECT * FROM foo LEFT OUTER JOIN bar ON foo.x = bar.y'],
+  'left outer join';
+
+dq_sql_is
+  Select(
+    [ Operator({ 'SQL.Naive' => 'apply' }, [ Identifier('COUNT'), Identifier('*') ]) ],
+    Identifier('foo'),
+  ),
+  ['SELECT COUNT( * ) FROM foo'],
+  'count';
+
+dq_sql_is
+  Where(
+    Operator({ 'SQL.Naive' => 'BETWEEN' }, [
+      Identifier('x'),
+      map Literal('SQL', '?', [ binding($_) ]), (1,2),
+    ]),
+    Select([ Identifier('*') ], Identifier('foo')),
+  ),
+  [ 'SELECT * FROM foo WHERE ( x BETWEEN ? AND ? )', map binding($_), 1, 2, ],
+  'between';