Added example and fleshed out ORDER BY and GROUP BY. This finishes all mandatory...
[dbsrgits/SQL-Abstract-2.0-ish.git] / lib / SQL / Abstract / Manual / Examples.pod
index c684127..a9760be 100644 (file)
@@ -158,8 +158,14 @@ one. The SQL used is from the MySQL dialect.
           {
               type  => 'SelectComponent',
               value => {
-                  type     => 'Identifier',
-                  element1 => '*',
+                  type => 'Operator',
+                  op   => 'COUNT',
+                  args => [
+                      {
+                          type     => 'Identifier',
+                          element1 => '*',
+                      },
+                  ],
               },
           },
       ],
@@ -190,41 +196,36 @@ one. The SQL used is from the MySQL dialect.
                   ],
               },
               {
-                  type => 'Nesting',
+                  type => 'Operator',
+                  op   => 'OR',
                   args => [
                       {
                           type => 'Operator',
-                          op   => 'OR',
+                          op   => '=',
+                          args => [
+                              {
+                                  type     => 'Identifier',
+                                  element1 => 'title',
+                              },
+                              {
+                                  type     => 'Value',
+                                  subtype  => 'String',
+                                  element1 => 'Mr',
+                              },
+                          ],
+                      },
+                      {
+                          type => 'Operator',
+                          op   => '=',
                           args => [
                               {
-                                  type => 'Operator',
-                                  op   => '=',
-                                  args => [
-                                      {
-                                          type     => 'Identifier',
-                                          element1 => 'title',
-                                      },
-                                      {
-                                          type     => 'Value',
-                                          subtype  => 'String',
-                                          element1 => 'Mr',
-                                      },
-                                  ],
+                                  type     => 'Identifier',
+                                  element1 => 'abbrev',
                               },
                               {
-                                  type => 'Operator',
-                                  op   => '=',
-                                  args => [
-                                      {
-                                          type     => 'Identifier',
-                                          element1 => 'abbrev',
-                                      },
-                                      {
-                                          type     => 'Value',
-                                          subtype  => 'String',
-                                          element1 => 'Dr',
-                                      },
-                                  ],
+                                  type     => 'Value',
+                                  subtype  => 'String',
+                                  element1 => 'Dr',
                               },
                           ],
                       },
@@ -234,6 +235,176 @@ one. The SQL used is from the MySQL dialect.
       },
   }
  
+=item SELECT COUNT(DISTINCT(*)) FROM foo WHERE ( name = 'John' AND title = 'Mr' ) OR abbrev = 'Dr'
+
+  {
+      type => 'select',
+      ast_version => 0.0001,
+      select => [
+        {
+              type  => 'SelectComponent',
+              value => {
+                  type => 'Operator',
+                  op   => 'COUNT',
+                  args => [
+                      {
+                          type => 'Operator',
+                          op   => 'DISTINCT',
+                          args => [
+                              {
+                                  type     => 'Identifier',
+                                  element1 => '*',
+                              },
+                          ],
+                      },
+                  ],
+              },
+          },
+      ],
+      tables => {
+          type => 'TableIdentifier',
+          value => {
+              type => 'Identifier',
+              element1 => 'foo',
+          },
+      },
+      where => {
+          type => 'Operator',
+          op   => 'OR',
+          args => [
+              {
+                  type => 'Operator',
+                  op   => 'AND',
+                  args => [
+                      {
+                          type => 'Operator',
+                          op   => '=',
+                          args => [
+                              {
+                                  type     => 'Identifier',
+                                  element1 => 'name',
+                              },
+                              {
+                                  type     => 'Value',
+                                  subtype  => 'String',
+                                  element1 => 'John',
+                              },
+                          ],
+                      },
+                      {
+                          type => 'Operator',
+                          op   => '=',
+                          args => [
+                              {
+                                  type     => 'Identifier',
+                                  element1 => 'title',
+                              },
+                              {
+                                  type     => 'Value',
+                                  subtype  => 'String',
+                                  element1 => 'Mr',
+                              },
+                          ],
+                      },
+                  ],
+              },
+              {
+                  type => 'Operator',
+                  op   => '=',
+                  args => [
+                      {
+                          type     => 'Identifier',
+                          element1 => 'abbrev',
+                      },
+                      {
+                          type     => 'Value',
+                          subtype  => 'String',
+                          element1 => 'Dr',
+                      },
+                  ],
+              },
+          ],
+      },
+  }
+
+=item * SELECT foo, bar baz FROM foo ORDER BY bar, baz DESC GROUP BY 1,3,2
+
+  {
+      type => 'select',
+      ast_version => 0.0001,
+      select => [
+          {
+              type  => 'SelectComponent',
+              value => {
+                  type => 'Identifier',
+                  element1 => 'foo',
+              },
+          },
+          {
+              type  => 'SelectComponent',
+              value => {
+                  type => 'Identifier',
+                  elements => 'bar',
+              },
+          },
+          {
+              type  => 'SelectComponent',
+              value => {
+                  type => 'Identifier',
+                  element1 => 'baz',
+              },
+          },
+      ],
+      tables => {
+          type => 'TableIdentifier',
+          value => {
+              type => 'Identifier',
+              element1 => 'foo',
+          },
+      },
+      orderby => [
+          {
+              type  => 'OrderbyComponent',
+              value => {
+                  type => 'Identifier',
+                  element1 => 'bar',
+              },
+              dir => 'ASC',
+          },
+          {
+              type  => 'OrderbyComponent',
+              value => {
+                  type => 'Identifier',
+                  element1 => 'baz',
+              },
+              dir => 'DESC',
+          },
+      ],
+      groupby => [
+          {
+              type  => 'GroupbyComponent',
+              value => {
+                  type => 'Number',
+                  value => 1,
+              },
+          },
+          {
+              type  => 'GroupbyComponent',
+              value => {
+                  type => 'Number',
+                  value => 3,
+              },
+          },
+          {
+              type  => 'GroupbyComponent',
+              value => {
+                  type => 'Number',
+                  value => 2,
+              },
+          },
+      ],
+  }
+
 =back
 
 =head1 AUTHORS