Added further examples
[dbsrgits/SQL-Abstract-2.0-ish.git] / lib / SQL / Abstract / Manual / Examples.pod
index 1080cc1..8a62de3 100644 (file)
@@ -20,12 +20,9 @@ one. The SQL used is from the MySQL dialect.
       ast_version => 0.0001,
       select => [
           {
-              type  => 'SelectComponent',
-              value => {
-                  type    => 'Value',
-                  subtype => 'number',
-                  value   => 1,
-              },
+              type    => 'Value',
+              subtype => 'Number',
+              value   => 1,
           },
       ],
   }
@@ -37,24 +34,27 @@ one. The SQL used is from the MySQL dialect.
       ast_version => 0.0001,
       select => [
           {
-              type  => 'SelectComponent',
+              type  => 'Alias',
               value => {
                   type     => 'Function',
                   function => 'NOW',
               },
               as => {
-                  type     => 'Identifier',
+                  type => 'Identifier',
                   element1 => 'time',
               },
           },
       ],
       tables => {
-          type => 'TableIdentifier',
+          type => 'Alias',
           value => {
               type => 'Identifier',
               element1 => 'dual',
           },
-          as => 'duality',
+          as => {
+              type => 'Identifier',
+              element1 => 'duality',
+          },
       },
   }
 
@@ -65,12 +65,9 @@ one. The SQL used is from the MySQL dialect.
       ast_version => 0.0001,
       select => [
           {
-              type  => 'SelectComponent',
-              value => {
-                  type     => 'Value',
-                  subtype => 'number',
-                  value   => 1,
-              },
+              type     => 'Value',
+              subtype => 'Number',
+              value   => 1,
           },
       ],
       tables => {
@@ -78,18 +75,12 @@ one. The SQL used is from the MySQL dialect.
           op   => 'LEFT OUTER',
           args => [
               {
-                  type => 'TableIdentifier',
-                  value => {
-                      type => 'Identifier',
-                      element1 => 'foo',
-                  },
+                  type => 'Identifier',
+                  element1 => 'foo',
               },
               {
-                  type => 'TableIdentifier',
-                  value => {
-                      type => 'Identifier',
-                      element1 => 'bar',
-                  },
+                  type => 'Identifier',
+                  element1 => 'bar',
               },
           ],
           on => {
@@ -118,19 +109,13 @@ one. The SQL used is from the MySQL dialect.
       ast_version => 0.0001,
       select => [
           {
-              type  => 'SelectComponent',
-              value => {
-                  type     => 'Identifier',
-                  element1 => '*',
-              },
+              type     => 'Identifier',
+              element1 => '*',
           },
       ],
       tables => {
-          type => 'TableIdentifier',
-          value => {
-              type => 'Identifier',
-              element1 => 'foo',
-          },
+          type => 'Identifier',
+          element1 => 'foo',
       },
       where => {
           type => 'Operator',
@@ -156,25 +141,19 @@ one. The SQL used is from the MySQL dialect.
       ast_version => 0.0001,
       select => [
           {
-              type  => 'SelectComponent',
-              value => {
-                  type => 'Operator',
-                  op   => 'COUNT',
-                  args => [
-                      {
-                          type     => 'Identifier',
-                          element1 => '*',
-                      },
-                  ],
-              },
+              type => 'Operator',
+              op   => 'COUNT',
+              args => [
+                  {
+                      type     => 'Identifier',
+                      element1 => '*',
+                  },
+              ],
           },
       ],
       tables => {
-          type => 'TableIdentifier',
-          value => {
-              type => 'Identifier',
-              element1 => 'foo',
-          },
+          type => 'Identifier',
+          element1 => 'foo',
       },
       where => {
           type => 'Operator',
@@ -242,31 +221,25 @@ one. The SQL used is from the MySQL dialect.
       ast_version => 0.0001,
       select => [
         {
-              type  => 'SelectComponent',
-              value => {
-                  type => 'Operator',
-                  op   => 'COUNT',
-                  args => [
-                      {
-                          type => 'Operator',
-                          op   => 'DISTINCT',
-                          args => [
-                              {
-                                  type     => 'Identifier',
-                                  element1 => '*',
-                              },
-                          ],
-                      },
-                  ],
-              },
+              type => 'Operator',
+              op   => 'COUNT',
+              args => [
+                  {
+                      type => 'Operator',
+                      op   => 'DISTINCT',
+                      args => [
+                          {
+                              type     => 'Identifier',
+                              element1 => '*',
+                          },
+                      ],
+                  },
+              ],
           },
       ],
       tables => {
-          type => 'TableIdentifier',
-          value => {
-              type => 'Identifier',
-              element1 => 'foo',
-          },
+          type => 'Identifier',
+          element1 => 'foo',
       },
       where => {
           type => 'Operator',
@@ -334,33 +307,21 @@ one. The SQL used is from the MySQL dialect.
       ast_version => 0.0001,
       select => [
           {
-              type  => 'SelectComponent',
-              value => {
-                  type => 'Identifier',
-                  element1 => 'foo',
-              },
+              type => 'Identifier',
+              element1 => 'foo',
           },
           {
-              type  => 'SelectComponent',
-              value => {
-                  type => 'Identifier',
-                  elements => 'bar',
-              },
+              type => 'Identifier',
+              elements => 'bar',
           },
           {
-              type  => 'SelectComponent',
-              value => {
-                  type => 'Identifier',
-                  element1 => 'baz',
-              },
+              type => 'Identifier',
+              element1 => 'baz',
           },
       ],
       tables => {
-          type => 'TableIdentifier',
-          value => {
-              type => 'Identifier',
-              element1 => 'foo',
-          },
+          type => 'Identifier',
+          element1 => 'foo',
       },
       orderby => [
           {
@@ -384,88 +345,231 @@ one. The SQL used is from the MySQL dialect.
           {
               type  => 'GroupbyComponent',
               value => {
-                  type => 'Number',
+                  type => 'Value',
+                  subtype => 'Number',
                   value => 1,
               },
           },
           {
               type  => 'GroupbyComponent',
               value => {
-                  type => 'Number',
+                  type => 'Value',
+                  subtype => 'Number',
                   value => 3,
               },
           },
           {
               type  => 'GroupbyComponent',
               value => {
-                  type => 'Number',
+                  type => 'Value',
+                  subtype => 'Number',
                   value => 2,
               },
           },
       ],
   }
 
-=item * UPDATE foo SET col1 = 1
+=item * SELECT * FROM ( SELECT 1 ) AS foo
 
   {
-      type => 'update',
+      type => 'select',
       ast_version => 0.0001,
+      select => [
+          {
+              type => 'Identifier',
+              element1 => '*',
+          },
+      ],
       tables => {
-          type => 'TableIdentifier',
+          type => 'Identifier',
+          element1 => 'foo',
           value => {
+              type => 'select',
+              ast_version => 0.0001,
+              select => [
+                  {
+                      type    => 'Value',
+                      subtype => 'Number',
+                      value   => 1,
+                  },
+              ],
+          },
+          as => {
               type => 'Identifier',
               element1 => 'foo',
           },
       },
+  }
+
+=item * INSERT INTO foo ( col1, col2 ) VALUES ( 1, 3 )
+
+  {
+      type => 'insert',
+      ast_version => 0.0001,
+      tables => {
+          type => 'Identifier',
+          element1 => 'foo',
+      },
       set => [
-          {
-              type => 'SetComponent',
-              col  => {
+          [
+              {
                   type => 'Identifier,
                   element1 => 'col1',
               },
-              value => {
-                  type => 'Number',
-                  value => 1,
+              {
+                  type => 'Identifier,
+                  element1 => 'col2',
               },
-          },
+          ],
+          [
+              {
+                  type => 'Value',
+                  subtype => 'Number',
+                  value => '1',
+              },
+              {
+                  type => 'Value',
+                  subtype => 'Number',
+                  value => '3',
+              },
+          ],
       ],
   }
 
-=item * INSERT INTO foo ( col1, col2 ) VALUES ( 1, 3 )
+=item * INSERT INTO foo ( col1, col2 ) VALUES ( 1, 3 ), ( 2, 4 )
 
   {
       type => 'insert',
       ast_version => 0.0001,
       tables => {
-          type => 'TableIdentifier',
-          value => {
-              type => 'Identifier',
-              element1 => 'foo',
-          },
+          type => 'Identifier',
+          element1 => 'foo',
       },
-      columns => [
-          {
-              type => 'Identifier,
-              element1 => 'col1',
-          },
-          {
-              type => 'Identifier,
-              element1 => 'col2',
-          },
+      set => [
+          [
+              {
+                  type => 'Identifier,
+                  element1 => 'col1',
+              },
+              {
+                  type => 'Identifier,
+                  element1 => 'col2',
+              },
+          ],
+          [
+              {
+                  type => 'Value',
+                  subtype => 'Number',
+                  value => '1',
+              },
+              {
+                  type => 'Value',
+                  subtype => 'Number',
+                  value => '3',
+              },
+          ],
+          [
+              {
+                  type => 'Value',
+                  subtype => 'Number',
+                  value => '2',
+              },
+              {
+                  type => 'Value',
+                  subtype => 'Number',
+                  value => '3',
+              },
+          ],
       ],
-      values => [
-          {
-              type => 'Number,
-              value => '1',
-          },
-          {
-              type => 'Number,
-              value => '3',
-          },
+  }
+
+=item * UPDATE foo SET col1 = 1
+
+  {
+      type => 'update',
+      ast_version => 0.0001,
+      tables => {
+          type => 'Identifier',
+          element1 => 'foo',
+      },
+      set => [
+          [
+              {
+                  type => 'Identifier,
+                  element1 => 'col1',
+              },
+          ],
+          [
+              {
+                  type => 'Value',
+                  subtype => 'Number',
+                  value => 1,
+              },
+          ],
       ],
   }
 
+=item * UPDATE foo SET col1 = 1, col2 = 6
+
+  {
+      type => 'update',
+      ast_version => 0.0001,
+      tables => {
+          type => 'Identifier',
+          element1 => 'foo',
+      },
+      set => [
+          [
+              {
+                  type => 'Identifier,
+                  element1 => 'col1',
+              },
+              {
+                  type => 'Identifier,
+                  element1 => 'col2',
+              },
+          ],
+          [
+              {
+                  type => 'Value',
+                  subtype => 'Number',
+                  value => 1,
+              },
+              {
+                  type => 'Value',
+                  subtype => 'Number',
+                  value => 6,
+              },
+          ],
+      ],
+  }
+
+=item * DELETE FROM foo WHERE col1 = 10
+
+  {
+      type => 'delete',
+      ast_version => 0.0001,
+      tables => {
+          type => 'Identifier',
+          element1 => 'foo',
+      },
+      where => {
+          type => 'Operator',
+          op   => '=',
+          args => [
+              {
+                  type     => 'Identifier',
+                  element1 => 'col1',
+              },
+              {
+                  type     => 'Value',
+                  subtype  => 'Number',
+                  value => 10,
+              },
+          ],
+      },
+  }
+
 =back
 
 =head1 AUTHORS