]> Kevux Git Server - koopa/commitdiff
Progress: continue development on database abstraction
authorKevin Day <thekevinday@gmail.com>
Thu, 13 Dec 2018 00:28:42 +0000 (18:28 -0600)
committerKevin Day <thekevinday@gmail.com>
Fri, 28 Dec 2018 22:11:41 +0000 (16:11 -0600)
51 files changed:
common/database/classes/database_alter_foreign_table.php
common/database/classes/database_alter_index.php
common/database/classes/database_alter_language.php
common/database/classes/database_alter_large_object.php
common/database/classes/database_alter_materialized_view.php
common/database/classes/database_string.php
common/database/enumerations/database_attribute_option.php [new file with mode: 0644]
common/database/enumerations/database_cascade.php
common/database/enumerations/database_set_storage.php [new file with mode: 0644]
common/database/enumerations/database_user.php
common/database/traits/database_add_user.php
common/database/traits/database_argument_type.php
common/database/traits/database_cascade.php
common/database/traits/database_column_reset.php [new file with mode: 0644]
common/database/traits/database_column_set.php [new file with mode: 0644]
common/database/traits/database_column_set_statistics.php [new file with mode: 0644]
common/database/traits/database_column_set_storage.php [new file with mode: 0644]
common/database/traits/database_constraint.php
common/database/traits/database_depends_on_extension.php
common/database/traits/database_enable_trigger.php
common/database/traits/database_for_role.php
common/database/traits/database_function_action.php
common/database/traits/database_grant_option_for.php
common/database/traits/database_handler.php
common/database/traits/database_in_schema.php
common/database/traits/database_inherit.php
common/database/traits/database_name.php
common/database/traits/database_no_wait.php
common/database/traits/database_oid.php [new file with mode: 0644]
common/database/traits/database_on.php
common/database/traits/database_options.php
common/database/traits/database_order_by.php
common/database/traits/database_owned_by.php
common/database/traits/database_owner_to.php
common/database/traits/database_privilege.php
common/database/traits/database_procedural.php [new file with mode: 0644]
common/database/traits/database_rename_column.php
common/database/traits/database_rename_to.php
common/database/traits/database_reset.php
common/database/traits/database_reset_storage_parameter.php
common/database/traits/database_restrict.php
common/database/traits/database_role_specification.php
common/database/traits/database_set.php
common/database/traits/database_set_schema.php
common/database/traits/database_set_storage_parameter.php
common/database/traits/database_set_tablespace.php
common/database/traits/database_set_with_oids.php
common/database/traits/database_set_without_cluster.php [new file with mode: 0644]
common/database/traits/database_to_role.php
common/database/traits/database_validator.php
common/database/traits/database_with_grant_option.php

index 5deb5a93328a8309194318bebe4bc6d1aa4b4d40..113beb57e143f27d11ca8a01b7df2312987da4c1 100644 (file)
@@ -319,7 +319,7 @@ class c_database_alter_foreign_table extends c_database_query {
 
       $value .= ' ' . $this->p_do_build_rename_column();
     }
-    else if (is_array($this->rename_to)) {
+    else if (is_string($this->rename_to)) {
       $value .= is_null($value) ? '' : ' ';
       $value .= $this->p_do_build_rename_to();
     }
index 5383ba00da0e4ecf5ee9dc50f16c8953e7047daf..15158048aba9bba32fc8f68d958b33063c18dba0 100644 (file)
@@ -33,8 +33,8 @@ class c_database_alter_index extends c_database_query {
   use t_database_no_wait;
   use t_database_owned_by;
   use t_database_rename_to;
-  use t_database_reset_index_storage_parameter;
-  use t_database_set_index_storage_parameter;
+  use t_database_reset_storage_parameter;
+  use t_database_set_storage_parameter; // @todo: override the storage parameter to limit/restrict parameters to index storage parameters.
   use t_database_set_tablespace;
 
   protected const p_QUERY_COMMAND = 'alter index';
@@ -108,7 +108,7 @@ class c_database_alter_index extends c_database_query {
       $if_exists = ' ' . $this->p_do_build_if_exists();
     }
 
-    $value = $this->name;
+    $value = $this->p_do_build_name();
     if (is_string($this->rename_to)) {
       $value .= ' ' . $this->p_do_build_rename_to();
     }
@@ -129,7 +129,7 @@ class c_database_alter_index extends c_database_query {
       $if_exists = NULL;
       $value = c_database_string::ALL_IN_TABLESPACE . ' ' . $value;
 
-      if (is_array($this->owned_by)) {
+      if (!is_null($this->owned_by)) {
         $value .= ' ' . $this->p_do_build_owned_by();
       }
 
index 1cd88877a2f5b162720840e38faae8b0108b0304..047981bf383f3b8e9be65d45d34f4ca11b46b9e7 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 /**
  * @file
- * Provides a class for specific Postgesql query: ALTER COALATION.
+ * Provides a class for specific Postgesql query: ALTER LANGUAGE.
  */
 namespace n_koopa;
 
@@ -10,14 +10,24 @@ require_once('common/base/classes/base_return.php');
 
 require_once('common/database/classes/database_query.php');
 
+require_once('common/database/traits/database_name.php');
+require_once('common/database/traits/database_owner_to.php');
+require_once('common/database/traits/database_procedural.php');
+require_once('common/database/traits/database_rename_to.php');
+
 
 /**
- * The class for building and returning a Postgresql ALTER COALATION query string.
+ * The class for building and returning a Postgresql ALTER LANGUAGE query string.
  *
  * @see: https://www.postgresql.org/docs/current/static/sql-alteraggregate.html
  */
-class c_database_alter_coalation extends c_database_query {
-  protected const p_QUERY_COMMAND = 'alter coalation';
+class c_database_alter_language extends c_database_query {
+  use t_database_name;
+  use t_database_owner_to;
+  use t_database_procedural;
+  use t_database_rename_to;
+
+  protected const p_QUERY_COMMAND = 'alter language';
 
 
   /**
@@ -25,12 +35,22 @@ class c_database_alter_coalation extends c_database_query {
    */
   public function __construct() {
     parent::__construct();
+
+    $this->name       = NULL;
+    $this->owner_to   = NULL;
+    $this->procedural = NULL;
+    $this->rename_to  = NULL;
   }
 
   /**
    * Class destructor.
    */
   public function __destruct() {
+    unset($this->name);
+    unset($this->owner_to);
+    unset($this->procedural);
+    unset($this->rename_to);
+
     parent::__destruct();
   }
 
@@ -63,10 +83,28 @@ class c_database_alter_coalation extends c_database_query {
       return new c_base_return_false();
     }
 
-    // @todo
+    $value = $this->p_do_build_name();
+    if (is_string($this->rename_to)) {
+      $value .= ' ' . $this->p_do_build_rename_to();
+    }
+    else if (is_array($this->owner_to)) {
+      $value .= ' ' . $this->p_do_build_owner_to();
+    }
+    else {
+      unset($value);
+      return new c_base_return_false();
+    }
+
+    if (is_bool($this->procedural)) {
+      $this->value = c_database_string::ALTER . ' ' . $this->p_do_build_procedural() . ' ' . c_database_string::LANGUAGE;
+    }
+    else {
+      $this->value = static::p_QUERY_COMMAND;
+    }
 
-    $this->value = static::p_QUERY_COMMAND;
     $this->value .= ' ' . $value;
     unset($value);
+
+    return new c_base_return_true();
   }
 }
index 54885a78e40eb319f679ce49d2db285b60047332..ca4171c9e6e3c96ead694a671dbcf8bbeca574ee 100644 (file)
@@ -10,14 +10,19 @@ require_once('common/base/classes/base_return.php');
 
 require_once('common/database/classes/database_query.php');
 
+require_once('common/database/traits/database_oid.php');
+require_once('common/database/traits/database_owner_to.php');
 
 /**
- * The class for building and returning a Postgresql ALTER COALATION query string.
+ * The class for building and returning a Postgresql ALTER LARGE OBJECT query string.
  *
- * @see: https://www.postgresql.org/docs/current/static/sql-alteraggregate.html
+ * @see: https://www.postgresql.org/docs/current/static/sql-alterlargeobject.html
  */
-class c_database_alter_coalation extends c_database_query {
-  protected const p_QUERY_COMMAND = 'alter coalation';
+class c_database_alter_large_object extends c_database_query {
+  use t_database_oid;
+  use t_database_owner_to;
+
+  protected const p_QUERY_COMMAND = 'alter large object';
 
 
   /**
@@ -25,12 +30,18 @@ class c_database_alter_coalation extends c_database_query {
    */
   public function __construct() {
     parent::__construct();
+
+    $this->oid      = NULL;
+    $this->owner_to = NULL;
   }
 
   /**
    * Class destructor.
    */
   public function __destruct() {
+    unset($this->oid);
+    unset($this->owner_to);
+
     parent::__destruct();
   }
 
@@ -59,9 +70,14 @@ class c_database_alter_coalation extends c_database_query {
    * Implements do_build().
    */
   public function do_build() {
-    $this->value = NULL;
+    if (!is_string($this->oid) || !is_array($this->owner_to)) {
+      return new c_base_return_false();
+    }
 
-    // @todo
+    $this->value = static::p_QUERY_COMMAND;
+    $this->value .= ' ' . $this->p_do_build_oid();
+    $this->value .= ' ' . $this->p_do_build_owner_to();
+    unset($value);
 
     return new c_base_return_true();
   }
index 54885a78e40eb319f679ce49d2db285b60047332..7faa5753e176eebe5585b53c5b48af4a7d614751 100644 (file)
@@ -10,14 +10,54 @@ require_once('common/base/classes/base_return.php');
 
 require_once('common/database/classes/database_query.php');
 
+require_once('common/database/traits/database_all_in_tablespace.php');
+require_once('common/database/traits/database_cluster_on.php');
+require_once('common/database/traits/database_column_reset.php');
+require_once('common/database/traits/database_column_set.php');
+require_once('common/database/traits/database_column_set_statistics.php');
+require_once('common/database/traits/database_column_set_storage.php');
+require_once('common/database/traits/database_depends_on_extension.php');
+require_once('common/database/traits/database_if_exists.php');
+require_once('common/database/traits/database_name.php');
+require_once('common/database/traits/database_no_wait.php');
+require_once('common/database/traits/database_owned_by.php');
+require_once('common/database/traits/database_owner_to.php');
+require_once('common/database/traits/database_rename_column.php');
+require_once('common/database/traits/database_rename_to.php');
+require_once('common/database/traits/database_reset_storage_parameter.php');
+require_once('common/database/traits/database_set_schema.php');
+require_once('common/database/traits/database_set_storage_parameter.php');
+require_once('common/database/traits/database_set_tablespace.php');
+require_once('common/database/traits/database_set_without_cluster.php');
+
 
 /**
- * The class for building and returning a Postgresql ALTER COALATION query string.
+ * The class for building and returning a Postgresql ALTER MATERIALIZED VIEW query string.
  *
- * @see: https://www.postgresql.org/docs/current/static/sql-alteraggregate.html
+ * @see: https://www.postgresql.org/docs/current/static/sql-altermaterializedview.html
  */
-class c_database_alter_coalation extends c_database_query {
-  protected const p_QUERY_COMMAND = 'alter coalation';
+class c_database_alter_materialized_view extends c_database_query {
+  use t_database_all_in_tablespace;
+  use t_database_cluster_on;
+  use t_database_column_reset;
+  use t_database_column_set;
+  use t_database_column_set_statistics;
+  use t_database_column_set_storage;
+  use t_database_depends_on_extension;
+  use t_database_if_exists;
+  use t_database_name;
+  use t_database_no_wait;
+  use t_database_owned_by;
+  use t_database_owner_to;
+  use t_database_rename_column;
+  use t_database_rename_to;
+  use t_database_reset_storage_parameter;
+  use t_database_set_schema;
+  use t_database_set_storage_parameter;
+  use t_database_set_tablespace;
+  use t_database_set_without_cluster;
+
+  protected const p_QUERY_COMMAND = 'alter materialized view';
 
 
   /**
@@ -25,12 +65,52 @@ class c_database_alter_coalation extends c_database_query {
    */
   public function __construct() {
     parent::__construct();
+
+    $this->all_in_tablespace       = NULL;
+    $this->cluster_on              = NULL;
+    $this->column_reset            = NULL;
+    $this->column_set              = NULL;
+    $this->column_set_statistics   = NULL;
+    $this->column_set_storage      = NULL;
+    $this->depends_on_extension    = NULL;
+    $this->if_exists               = NULL;
+    $this->name                    = NULL;
+    $this->no_wait                 = NULL;
+    $this->owned_by                = NULL;
+    $this->owner_to                = NULL;
+    $this->rename_column           = NULL;
+    $this->rename_to               = NULL;
+    $this->reset_storage_parameter = NULL;
+    $this->set_schema              = NULL;
+    $this->set_storage_parameter   = NULL;
+    $this->set_tablespace          = NULL;
+    $this->set_without_cluster     = NULL;
   }
 
   /**
    * Class destructor.
    */
   public function __destruct() {
+    unset($this->all_in_tablespace);
+    unset($this->cluster_on);
+    unset($this->column_reset);
+    unset($this->column_set);
+    unset($this->column_set_statistics);
+    unset($this->column_set_storage);
+    unset($this->depends_on_extension);
+    unset($this->if_exists);
+    unset($this->name);
+    unset($this->no_wait);
+    unset($this->owner_to);
+    unset($this->owned_by);
+    unset($this->rename_column);
+    unset($this->rename_to);
+    unset($this->reset_storage_parameter);
+    unset($this->set_schema);
+    unset($this->set_storage_parameter);
+    unset($this->set_tablespace);
+    unset($this->set_without_cluster);
+
     parent::__destruct();
   }
 
@@ -59,9 +139,85 @@ class c_database_alter_coalation extends c_database_query {
    * Implements do_build().
    */
   public function do_build() {
-    $this->value = NULL;
+    if (!is_string($this->name)) {
+      return new c_base_return_false();
+    }
+
+    $if_exists = NULL;
+    if (is_bool($this->if_exists)) {
+      $if_exists = ' ' . $this->p_do_build_if_exists();
+    }
+
+    $value = $this->p_do_build_name();
+    if (is_string($this->depends_on_extension)) {
+      $value .= ' ' . $this->p_do_build_depends_on_extension();
+      $if_exists = NULL;
+    }
+    else if (is_array($this->rename_column)) {
+      $value .= ' ' . $this->p_do_build_rename_column();
+    }
+    else if (is_string($this->rename_to)) {
+      $value .= ' ' . $this->p_do_build_rename_to();
+    }
+    else if (is_string($this->set_schema)) {
+      $value .= ' ' . $this->p_do_build_set_schema();
+    }
+    else if (is_string($this->set_tablespace)) {
+      $if_exists = NULL;
+      $value = c_database_string::ALL_IN_TABLESPACE . ' ' . $value;
+
+      if (!is_null($this->owned_by)) {
+        $value .= ' ' . $this->p_do_build_owned_by();
+      }
+
+      $value .= ' ' . $this->p_do_build_set_tablespace();
+
+      if (is_bool($this->no_wait)) {
+        $value .= ' ' . $this->p_do_build_no_wait();
+      }
+    }
+    else if (is_array($this->column_set_statistics)) {
+      $value .= ' ' . $this->p_do_build_column_set_statistics();
+    }
+    else if (is_array($this->column_set)) {
+      $value .= ' ' . $this->p_do_build_column_set();
+    }
+    else if (is_array($this->column_reset)) {
+      $value .= ' ' . $this->p_do_build_column_reset();
+    }
+    else if (is_array($this->column_set_storage)) {
+      $value .= ' ' . $this->p_do_build_column_set_storage();
+    }
+    else if (is_string($this->cluster_on)) {
+      $value .= ' ' . $this->p_do_build_cluster_on();
+    }
+    else if (is_string($this->set_without_cluster)) {
+      $value .= ' ' . $this->p_do_build_set_without_cluster();
+    }
+    else if (is_string($this->set_storage_parameter)) {
+      $value .= ' ' . $this->p_do_build_set_storage_parameter();
+    }
+    else if (is_string($this->reset_storage_parameter)) {
+      $value .= ' ' . $this->p_do_build_reset_storage_parameter();
+    }
+    else if (is_string($this->owner_to)) {
+      $value .= ' ' . $this->p_do_build_owner_to();
+    }
+    else {
+      unset($value);
+      unset($if_exists);
+      return new c_base_return_false();
+    }
+
+    $this->value = static::p_QUERY_COMMAND;
+
+    if (is_string($if_exists)) {
+      $this->value .= ' ' . $if_exists;
+    }
+    unset($if_exists);
 
-    // @todo
+    $this->value .= ' ' . $value;
+    unset($value);
 
     return new c_base_return_true();
   }
index 4ae49112437b43c1e99c9824750275792458f45b..0d7703931b00b86208815455bc44a8d05bca5202 100644 (file)
@@ -16,6 +16,7 @@ class c_database_string {
   public const AGGREGATE                             = 'aggregate';
   public const ALL                                   = 'all';
   public const ALLOW_CONNECTIONS                     = 'allow_connections';
+  public const ALTER                                 = 'alter';
   public const AS                                    = 'as';
   public const ASCEND                                = 'asc';
   public const AUTOSUMMARIZE                         = 'autosummarize';
@@ -35,7 +36,9 @@ class c_database_string {
   public const CALLED_ON_NULL_INPUT                  = 'called on null input';
   public const CASCADE                               = 'cascade';
   public const CAST                                  = 'cast';
+  public const CLUSTER_ON                            = 'cluster on';
   public const COLLATION                             = 'collation';
+  public const COLUMN                                = 'column';
   public const CONNECTION_LIMIT                      = 'connection limit';
   public const CONVERSION                            = 'conversion';
   public const COST                                  = 'cost';
@@ -54,6 +57,7 @@ class c_database_string {
   public const ENABLE_TRIGGER                        = 'enable trigger';
   public const EVENT_TRIGGER                         = 'event trigger';
   public const EXECUTE                               = 'execute';
+  public const EXTENDED                              = 'extended';
   public const EXTERNAL                              = 'external';
   public const FALSE                                 = 'false';
   public const FAST_UPDATE                           = 'fastupdate';
@@ -81,11 +85,14 @@ class c_database_string {
   public const LANGUAGE                              = 'language';
   public const LEAKPROOF                             = 'leakproof';
   public const LOG_AUTOVACUUM_MIN_DURATION           = 'log_autovacuum_min_duration';
+  public const MAIN                                  = 'main';
   public const MATERIALIZED_VIEW                     = 'materialized view';
+  public const N_DISTINCT                            = 'n_distinct';
+  public const N_DISTINCT_INHERITED                  = 'n_distinct_inherited';
   public const NO_HANDLER                            = 'no handler';
   public const NO_INHERIT                            = 'no inherit';
   public const NO_VALIDATOR                          = 'no validator';
-  public const NO_WAIT                               = 'no wait';
+  public const NO_WAIT                               = 'nowait';
   public const NOT_LEAKPROOF                         = 'not leakproof';
   public const NOT_NULL                              = 'not null';
   public const NOT_VALID                             = 'not valid';
@@ -105,6 +112,7 @@ class c_database_string {
   public const PAGES_PER_RANGE                       = 'pages_per_range';
   public const PARALLEL                              = 'parallel';
   public const PARALLEL_WORKERS                      = 'parallel_workers';
+  public const PLAIN                                 = 'plain';
   public const PROCEDURAL                            = 'procedural';
   public const PUBLIC                                = 'public';
   public const REFERENCES                            = 'references';
@@ -130,8 +138,11 @@ class c_database_string {
   public const SET                                   = 'set';
   public const SET_DEFAULT                           = 'set default';
   public const SET_SCHEMA                            = 'set schema';
+  public const SET_STATISTICS                        = 'set statistics';
+  public const SET_STORAGE                           = 'set storage';
   public const SET_TABLESPACE                        = 'set tablespace';
   public const SET_WITH_OIDS                         = 'set with oids';
+  public const SET_WITHOUT_CLUSTER                   = 'set without cluster';
   public const SET_WITHOUT_OIDS                      = 'set without oids';
   public const STABLE                                = 'stable';
   public const STRICT                                = 'strict';
diff --git a/common/database/enumerations/database_attribute_option.php b/common/database/enumerations/database_attribute_option.php
new file mode 100644 (file)
index 0000000..8e895a3
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+/**
+ * @file
+ * Provides enumeration classes for managing codes used for generating specific Postgesql Queries.
+ *
+ * @see: https://www.postgresql.org/docs/current/static/sql-commands.html
+ */
+namespace n_koopa;
+
+/**
+ * Codes associated with database attribute option.
+ */
+class e_database_attribute_option {
+  public const NONE                 = 0;
+  public const N_DISTINCT           = 1;
+  public const N_DISTINCT_INHERITED = 2;
+}
index 6bf6190c118ae137980314733fb3b2b987c38c99..265733c4ffffa4ec7d32a25c096125806ab5cf8c 100644 (file)
@@ -10,7 +10,7 @@ namespace n_koopa;
 /**
  * Codes associated with database cascade/restrict.
  */
-class e_database_on {
+class e_database_cascade {
   public const NONE     = 0;
   public const CASCADE  = 1;
   public const RESTRICT = 2;
diff --git a/common/database/enumerations/database_set_storage.php b/common/database/enumerations/database_set_storage.php
new file mode 100644 (file)
index 0000000..561fa52
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+/**
+ * @file
+ * Provides enumeration classes for managing codes used for generating specific Postgesql Queries.
+ *
+ * @see: https://www.postgresql.org/docs/current/static/sql-commands.html
+ */
+namespace n_koopa;
+
+/**
+ * Codes associated with database set storage.
+ */
+class e_database_set_storage {
+  public const NONE     = 0;
+  public const EXTENDED = 1;
+  public const EXTERNAL = 2;
+  public const MAIN     = 3;
+  public const PLAIN    = 4;
+}
index 71f4d82dd3ac3b34665dfb1a87a003b3c2af1e17..208bae855f58795b2c173a306d6db2be52289ded 100644 (file)
@@ -15,4 +15,5 @@ class e_database_user {
   public const CURRENT = 1;
   public const SESSION = 2;
   public const NAME    = 3;
+  public const ALL     = 4;
 }
index 0a2f25695f27735af26a48e44985547e754fa5c9..117d51e8b5bb9f2b864ee14c80eca23b814df8a1 100644 (file)
@@ -96,10 +96,6 @@ trait t_database_add_user {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_add_user() {
-    if (is_null($this->add_user)) {
-      return NULL;
-    }
-
     $values = [];
     foreach ($this->add_user['names'] as $name) {
       if ($name === e_database_user::CURRENT) {
index 2db6c666b5ae46a4cfa10ee5358d41d9866256d1..d2b431dd2c80473c2ab104767c12b918ac1be085 100644 (file)
@@ -120,10 +120,6 @@ trait t_database_argument_type {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_argument_type() {
-    if (is_null($this->argument_type)) {
-      return NULL;
-    }
-
     $values = [];
     foreach ($this->argument_type as $argument_type) {
       $value = '';
index eed1f6c777e2fd42134153811a27218b1a2f09e8..da059312488e7ba985b67f3109ac8f76a41fbac4 100644 (file)
@@ -24,7 +24,7 @@ trait t_database_cascade {
    * Set the HANDLER settings.
    *
    * @param int|null $cascade
-   *   The intege representing cascade/no-cascade.
+   *   The integer representing cascade/no-cascade.
    *   Set to NULL to disable.
    *
    * @return c_base_return_status
@@ -77,10 +77,6 @@ trait t_database_cascade {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_cascade() {
-    if (is_null($this->cascade)) {
-      return NULL;
-    }
-
     $value = NULL;
     if ($this->cascade['type'] === e_database_cascade::CASCADE) {
       if (isset($this->cascade['name'])) {
diff --git a/common/database/traits/database_column_reset.php b/common/database/traits/database_column_reset.php
new file mode 100644 (file)
index 0000000..53a3da7
--- /dev/null
@@ -0,0 +1,137 @@
+<?php
+/**
+ * @file
+ * Provides traits for specific Postgesql Queries.
+ *
+ * These traits are associated with COLUMN_RESET attribute_option.
+ *
+ * @see: https://www.postgresql.org/docs/current/static/sql-commands.html
+ */
+namespace n_koopa;
+
+require_once('common/base/classes/base_error.php');
+require_once('common/base/classes/base_return.php');
+
+require_once('common/database/classes/database_string.php');
+
+require_once('common/database/enumerations/database_attribute_option.php');
+
+/**
+ * Provide the sql COLUMN .. RESET (attribute_option ...) functionality.
+ */
+trait t_database_column_reset {
+  protected $column_reset;
+
+  /**
+   * Set the COLUMN_RESET (attribute_option ...) settings.
+   *
+   * @param int|null $attribute_option
+   *   The attribute option code to assign.
+   *   Should be one of: e_database_attribute_option.
+   *   When both this and $name are NULL, then column reset is disabled.
+   * @param string|null $name
+   *   The column name.
+   *   Must be specified before any attributes may be assigned.
+   *
+   * @return c_base_return_status
+   *   TRUE on success, FALSE otherwise.
+   *   FALSE with the error bit set is returned on error.
+   */
+  public function set_column_reset($attribute_option, $name = NULL) {
+    if (is_null($name) && is_null($attribute_option)) {
+      $this->column_reset = NULL;
+      return new c_base_return_true();
+    }
+
+    if (!is_string($name) && !isset($this->column_reset['name'])) {
+      $error = c_base_error::s_log(NULL, ['arguments' => [':{argument_name}' => 'name', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_ARGUMENT);
+      return c_base_return_error::s_false($error);
+    }
+
+    switch ($attribute_option) {
+      case e_database_attribute_option::N_DISTINCT:
+      case e_database_attribute_option::N_DISTINCT_INHERITED:
+        break;
+      default:
+        $error = c_base_error::s_log(NULL, ['arguments' => [':{argument_name}' => 'attribute_option', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_ARGUMENT);
+        return c_base_return_error::s_false($error);
+    }
+
+    if (is_string($name)) {
+      if (is_array($this->column_reset)) {
+        $this->column_reset['name'] = $name;
+      }
+      else {
+        $this->column_reset = [
+          'name' => $name,
+          'values' => [],
+        ];
+      }
+    }
+
+    if (!is_null($attribute_option)) {
+      $this->column_reset['values'][] = $attribute_option;
+    }
+
+    return new c_base_return_true();
+  }
+
+  /**
+   * Get the currently assigned COLUMN_RESET attribute option at the specified index.
+   *
+   * @param int|null $index
+   *   (optional) Get the index attribute option type at the specified index.
+   *   When NULL, all index attribute option types are returned.
+   *
+   * @return c_base_return_array|c_base_return_int|c_base_return_null
+   *   A code or an array of codes representing the argument_type on success.
+   *   NULL is returned if not set (column_reset tablespace is not to be used).
+   *   NULL with the error bit set is returned on error.
+   */
+  public function get_column_reset($index = NULL) {
+    if (is_null($this->column_reset)) {
+      return new c_base_return_null();
+    }
+
+    if (is_null($index)) {
+      if (is_array($this->column_reset)) {
+        return c_base_return_array::s_new($this->column_reset);
+      }
+    }
+    else {
+      if (is_int($index) && isset($this->column_reset['values'][$index]) && is_int($this->column_reset['values'][$index])) {
+        return c_base_return_int::s_new($this->column_reset['values'][$index]);
+      }
+
+      $error = c_base_error::s_log(NULL, ['arguments' => [':{variable_name}' => 'column_reset[index]', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_VARIABLE);
+      return c_base_return_error::s_null($error);
+    }
+
+    $error = c_base_error::s_log(NULL, ['arguments' => [':{variable_name}' => 'column_reset', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_VARIABLE);
+    return c_base_return_error::s_null($error);
+  }
+
+  /**
+   * Perform the common build process for this trait.
+   *
+   * As an internal trait method, the caller is expected to perform any appropriate validation.
+   *
+   * @return string|null
+   *   A string is returned on success.
+   *   NULL is returned if there is nothing to process or there is an error.
+   */
+  protected function p_do_build_column_reset() {
+    $values = [];
+    foreach ($this->column_reset['values'] as $attribute_option) {
+      if ($attribute_option === e_database_attribute_option::N_DISTINCT) {
+        $values[] = c_database_string::N_DISTINCT;
+      }
+      else if ($attribute_option === e_database_attribute_option::N_DISTINCT_INHERITED) {
+        $values[] = c_database_string::N_DISTINCT_INHERITED;
+      }
+    }
+    unset($attribute_option);
+
+    return c_database_string::COLUMN . ' ' . $this->column_reset['name'] . ' ' . c_database_string::RESET . ' ' . implode(', ', $values);
+  }
+}
diff --git a/common/database/traits/database_column_set.php b/common/database/traits/database_column_set.php
new file mode 100644 (file)
index 0000000..dcf82b7
--- /dev/null
@@ -0,0 +1,149 @@
+<?php
+/**
+ * @file
+ * Provides traits for specific Postgesql Queries.
+ *
+ * These traits are associated with SET index attribute_option.
+ *
+ * @see: https://www.postgresql.org/docs/current/static/sql-commands.html
+ */
+namespace n_koopa;
+
+require_once('common/base/classes/base_error.php');
+require_once('common/base/classes/base_return.php');
+
+require_once('common/database/enumerations/database_attribute_option.php');
+
+require_once('common/database/classes/database_string.php');
+
+/**
+ * Provide the sql COLUMN .. SET functionality.
+ */
+trait t_database_column_set {
+  protected $column_set;
+
+  /**
+   * Set the SET index (attribute_option ...) settings.
+   *
+   * @param int|null $attribute_option
+   *   The attribute option code to assign.
+   *   Should be one of: e_database_attribute_option.
+   *   When both this and $name are NULL, then column reset is disabled.
+   * @param string|null $value
+   *   The value associated with the parameter.
+   *   May be NULL only when $attribute_option or $name is NULL.
+   * @param string|null $name
+   *   The column name.
+   *   Must be specified before any attributes may be assigned.
+   *
+   * @return c_base_return_status
+   *   TRUE on success, FALSE otherwise.
+   *   FALSE with the error bit set is returned on error.
+   */
+  public function set_column_set($attribute_option, $value = NULL, $name = NULL) {
+    if (is_null($name) && is_null($attribute_option)) {
+      $this->column_set = NULL;
+      return new c_base_return_true();
+    }
+
+    if (!is_string($name) && !isset($this->column_set['name'])) {
+      $error = c_base_error::s_log(NULL, ['arguments' => [':{argument_name}' => 'name', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_ARGUMENT);
+      return c_base_return_error::s_false($error);
+    }
+
+    switch ($attribute_option) {
+      case e_database_attribute_option::N_DISTINCT:
+      case e_database_attribute_option::N_DISTINCT_INHERITED:
+        break;
+      default:
+        $error = c_base_error::s_log(NULL, ['arguments' => [':{argument_name}' => 'attribute_option', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_ARGUMENT);
+        return c_base_return_error::s_false($error);
+    }
+
+    if (!is_null($attribute_option) && !is_string($value)) {
+      $error = c_base_error::s_log(NULL, ['arguments' => [':{argument_name}' => 'value', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_ARGUMENT);
+      return c_base_return_error::s_false($error);
+    }
+
+    if (is_string($name)) {
+      if (is_array($this->column_set)) {
+        $this->column_set['name'] = $name;
+      }
+      else {
+        $this->column_set = [
+          'name' => $name,
+          'values' => [],
+        ];
+      }
+    }
+
+    if (!is_null($attribute_option)) {
+      $this->column_set['values'][] = [
+        'type' => $attribute_option,
+        'value' => $value,
+      ];
+    }
+
+    return new c_base_return_true();
+  }
+
+  /**
+   * Get the currently assigned COLUMN .. SET index attribute option at the specified index.
+   *
+   * @param int|null $index
+   *   (optional) Get the index attribute option type at the specified index.
+   *   When NULL, all index attribute option types are returned.
+   *
+   * @return c_base_return_array|c_base_return_null
+   *   An array containing the set index attribute option settings on success.
+   *   NULL is returned if not set (set index attribute option not to be used).
+   *   NULL with the error bit set is returned on error.
+   */
+  public function get_column_set($index = NULL) {
+    if (is_null($this->column_set)) {
+      return new c_base_return_null();
+    }
+
+    if (is_null($index)) {
+      if (is_array($this->column_set)) {
+        return c_base_return_array::s_new($this->column_set);
+      }
+    }
+    else {
+      if (is_int($index) && isset($index, $this->column_set['values']) && is_array($this->column_set['values'][$index])) {
+        return c_base_return_array::s_new($this->column_set['values'][$index]);
+      }
+
+      $error = c_base_error::s_log(NULL, ['arguments' => [':{variable_name}' => 'column_set[values][index]', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_VARIABLE);
+      return c_base_return_error::s_null($error);
+    }
+
+    $error = c_base_error::s_log(NULL, ['arguments' => [':{variable_name}' => 'column_set', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_VARIABLE);
+    return c_base_return_error::s_null($error);
+  }
+
+  /**
+   * Perform the common build process for this trait.
+   *
+   * As an internal trait method, the caller is expected to perform any appropriate validation.
+   *
+   * @return string|null
+   *   A string is returned on success.
+   *   NULL is returned if there is nothing to process or there is an error.
+   */
+  protected function p_do_build_column_set() {
+    $values = [];
+    foreach ($this->column_set['values'] as $attribute_option => $value) {
+      if ($attribute_option === e_database_attribute_option::N_DISTINCT) {
+        $values[] = c_database_string::N_DISTINCT . ' = ' . $value;
+      }
+      else if ($attribute_option === e_database_attribute_option::N_DISTINCT_INHERITED) {
+        $values[] = c_database_string::N_DISTINCT_INHERITED . ' = ' . $value;
+      }
+    }
+    unset($attribute_option);
+    unset($value);
+
+    return c_database_string::COLUMN . ' ' . $this->column_set['name'] . ' ' . c_database_string::SET . ' ' . implode(', ', $values);
+  }
+}
diff --git a/common/database/traits/database_column_set_statistics.php b/common/database/traits/database_column_set_statistics.php
new file mode 100644 (file)
index 0000000..490ed65
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+/**
+ * @file
+ * Provides traits for specific Postgesql Queries.
+ *
+ * These traits are associated with actions.
+ *
+ * @see: https://www.postgresql.org/docs/current/static/sql-commands.html
+ */
+namespace n_koopa;
+
+require_once('common/base/classes/base_error.php');
+require_once('common/base/classes/base_return.php');
+
+require_once('common/database/classes/database_string.php');
+
+/**
+ * Provide the sql COLUMN SET STATISTICS functionality.
+ */
+trait t_database_column_set_statistics {
+  protected $column_set_statistics;
+
+  /**
+   * Set the COLUMN .. SET STATISTICS settings.
+   *
+   * @param string|null $name
+   *   The column name.
+   *   Set to NULL to disable.
+   * @param int|null $value
+   *   The integer representing the statistics setting.
+   *   May be NULL only when column name is NULL.
+   *
+   * @return c_base_return_status
+   *   TRUE on success, FALSE otherwise.
+   *   FALSE with the error bit set is returned on error.
+   */
+  public function set_column_set_statistics($name, $value = NULL) {
+    if (is_null($name)) {
+      $this->column_set_storage = NULL;
+      return new c_base_return_true();
+    }
+
+    if (!is_string($name)) {
+      $error = c_base_error::s_log(NULL, ['arguments' => [':{argument_name}' => 'name', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_ARGUMENT);
+      return c_base_return_error::s_false($error);
+    }
+
+    if (is_int($column_set_statistics)) {
+      $this->column_set_statistics = [
+        'name' => $name,
+        'value' => $value,
+      ];
+
+      return new c_base_return_true();
+    }
+
+    $error = c_base_error::s_log(NULL, ['arguments' => [':{argument_name}' => 'value', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_ARGUMENT);
+    return c_base_return_error::s_false($error);
+  }
+
+  /**
+   * Get the currently assigned set statistics integer.
+   *
+   * @return c_base_return_array|c_base_return_null
+   *   An array containing the column_set_statistics setting on success.on success.
+   *   NULL is returned if not set (is not to be used).
+   *   NULL with the error bit set is returned on error.
+   */
+  public function get_column_set_statistics() {
+    if (is_null($this->column_set_statistics)) {
+      return new c_base_return_null();
+    }
+
+    if (is_array($this->column_set_statistics)) {
+      return c_base_return_array::s_new($this->column_set_statistics);
+    }
+
+    $error = c_base_error::s_log(NULL, ['arguments' => [':{variable_name}' => 'column_set_statistics', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_VARIABLE);
+    return c_base_return_error::s_null($error);
+  }
+
+  /**
+   * Perform the common build process for this trait.
+   *
+   * As an internal trait method, the caller is expected to perform any appropriate validation.
+   *
+   * @return string|null
+   *   A string is returned on success.
+   *   NULL is returned if there is nothing to process or there is an error.
+   */
+  protected function p_do_build_column_set_statistics() {
+    return c_database_string::COLUMN . ' ' . $this->column_set_statistics['name'] . ' ' . c_database_string::SET_STATISTICS . ' ' . $this->column_set_statistics['value'];
+  }
+}
diff --git a/common/database/traits/database_column_set_storage.php b/common/database/traits/database_column_set_storage.php
new file mode 100644 (file)
index 0000000..103d921
--- /dev/null
@@ -0,0 +1,115 @@
+<?php
+/**
+ * @file
+ * Provides traits for specific Postgesql Queries.
+ *
+ * These traits are associated with column set storage.
+ *
+ * @see: https://www.postgresql.org/docs/current/static/sql-commands.html
+ */
+namespace n_koopa;
+
+require_once('common/base/classes/base_error.php');
+require_once('common/base/classes/base_return.php');
+
+require_once('common/database/enumerations/database_column_set_storage.php');
+
+/**
+ * Provide the sql COLUMN .. SET STORAGE functionality.
+ */
+trait t_database_column_set_storage {
+  protected $column_set_storage;
+
+  /**
+   * Set the COLUMN .. SET STORAGE settings.
+   *
+   * @param string|null $name
+   *   The column name.
+   *   Set to NULL to disable.
+   * @param int|null $type
+   *   The integer representing the storage setting.
+   *   May be NULL only when column name is NULL.
+   *
+   * @return c_base_return_status
+   *   TRUE on success, FALSE otherwise.
+   *   FALSE with the error bit set is returned on error.
+   */
+  public function set_column_set_storage($name, $type = NULL) {
+    if (is_null($name)) {
+      $this->column_set_storage = NULL;
+      return new c_base_return_true();
+    }
+
+    if (!is_string($name)) {
+      $error = c_base_error::s_log(NULL, ['arguments' => [':{argument_name}' => 'name', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_ARGUMENT);
+      return c_base_return_error::s_false($error);
+    }
+
+    switch ($type) {
+      case e_database_set_storage::EXTENDED:
+      case e_database_set_storage::EXTERNAL:
+      case e_database_set_storage::MAIN:
+      case e_database_set_storage::PLAIN:
+        break;
+      default:
+        $error = c_base_error::s_log(NULL, ['arguments' => [':{argument_name}' => 'type', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_ARGUMENT);
+        return c_base_return_error::s_false($error);
+    }
+
+    $this->column_set_storage = [
+      'type' => $type,
+      'name' => $name,
+    ];
+
+    return new c_base_return_true();
+  }
+
+  /**
+   * Get the currently assigned column_set_storage.
+   *
+   * @return c_base_return_array|c_base_return_null
+   *   An array containing the column_set_storage setting on success.
+   *   NULL is returned if not set.
+   *   NULL with the error bit set is returned on error.
+   */
+  public function get_column_set_storage() {
+    if (is_null($this->column_set_storage)) {
+      return new c_base_return_null();
+    }
+
+    if (is_array($this->column_set_storage)) {
+      return c_base_return_array::s_new($this->column_set_storage);
+    }
+
+    $error = c_base_error::s_log(NULL, ['arguments' => [':{variable_name}' => 'column_set_storage', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_VARIABLE);
+    return c_base_return_error::s_null($error);
+  }
+
+  /**
+   * Perform the common build process for this trait.
+   *
+   * As an internal trait method, the caller is expected to perform any appropriate validation.
+   *
+   * @return string|null
+   *   A string is returned on success.
+   *   NULL is returned if there is nothing to process or there is an error.
+   */
+  protected function p_do_build_column_set_storage() {
+    $value = c_database_string::COLUMN . ' ' . $this->column_set_storage['name'] . ' ' . c_database_string::SET_STORAGE . ' ';
+    if ($this->column_set_storage['type'] === e_database_column_set_storage::EXTENDED) {
+      return $value . c_database_string::EXTENDED;
+    }
+    else if ($this->column_set_storage['type'] === e_database_column_set_storage::EXTERNAL) {
+      return $value . c_database_string::EXTERNAL;
+    }
+    else if ($this->column_set_storage['type'] === e_database_column_set_storage::MAIN) {
+      return $value . c_database_string::MAIN;
+    }
+    else if ($this->column_set_storage['type'] === e_database_column_set_storage::PLAIN) {
+      return $value . c_database_string::PLAIN;
+    }
+    unset($value);
+
+    return NULL;
+  }
+}
index bc4655aefe697b38a1d31ff90aba82f0b5764c58..54789f0fd7bca3500c85d836dc9248a9a702157e 100644 (file)
@@ -134,10 +134,6 @@ trait t_database_constraint {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_constraint() {
-    if (is_null($this->constraint)) {
-      return NULL;
-    }
-
     $value = NULL;
     if ($this->constraint['type'] === e_database_constraint::ADD) {
       if (is_string($this->constraint['name'])) {
index 3f5141c6a7ccd9984da620d28b52cb7d45948d85..20449e63841a715645924c128123842f7ae1c745 100644 (file)
@@ -72,10 +72,6 @@ trait t_database_depends_on_extension {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_depends_on_extension() {
-    if (is_null($this->depends_on_extension)) {
-      return NULL;
-    }
-
     return c_database_string::DEPENDS_ON_EXTENSION . ' ' . $this->depends_on_extension;
   }
 }
index 11640c5976febc9bdd2fba4a892fc11c225edb8a..7610db4ec1a585792ce3a3467d80ec0042b5f188 100644 (file)
@@ -115,10 +115,6 @@ trait t_database_enable_trigger {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_enable_trigger() {
-    if (is_null($this->enable_trigger)) {
-      return NULL;
-    }
-
     $value = NULL;
     switch ($this->enable_trigger['type']) {
       case e_database_enable_trigger::ALWAYS:
index c1216dd10bb5ba7b61811a7485922ad17c7ed1eb..279acb4c9665643057100ed42bd4d06910f3d86c 100644 (file)
@@ -96,10 +96,6 @@ trait t_database_for_role {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_for_role() {
-    if (is_null($this->for_role)) {
-      return NULL;
-    }
-
     return c_database_string::FOR_ROLE . ' ' . implode(', ', $this->for_role);
   }
 }
index 35b7a0a872f63d73da31836ea45d4a1410235bad..9a3b2625f2fc707a5c307f462ea4abee13db9e70 100644 (file)
@@ -153,10 +153,6 @@ trait t_database_function_action {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_function_action() {
-    if (is_null($this->function_action)) {
-      return NULL;
-    }
-
     $values = [];
     foreach ($this->function_action as $function_action) {
       if ($function_action['type'] === e_database_function_action::CALLED_ON_NULL_INPUT) {
index 01c3755db88b1d55e73228e01169e4250cb955cc..28eb80b34740e85537725e7887cfee25740f16b2 100644 (file)
@@ -78,10 +78,6 @@ trait t_database_grant_option_for {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_grant_option_for() {
-    if (is_null($this->grant_option_for)) {
-      return NULL;
-    }
-
     return $this->grant_option_for ? c_database_string::GRANT_OPTION_FOR : NULL;
   }
 }
index 554f0df40b5aa9c522743ccf60e35436e48e1808..0bd4b54c0fc303d7e615dec49a7447928fa4afcd 100644 (file)
@@ -24,7 +24,7 @@ trait t_database_handler {
    * Set the HANDLER settings.
    *
    * @param int|null $handler
-   *   The intege representing handler/no-handler.
+   *   The integer representing handler/no-handler.
    *   Set to NULL to disable.
    * @param string|null $handler_function
    *   The handler function name or null when NO_HANDLER is specified.
@@ -96,10 +96,6 @@ trait t_database_handler {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_handler() {
-    if (is_null($this->handler)) {
-      return NULL;
-    }
-
     $value = NULL;
     if ($this->handler['type'] === e_database_handler::HANDLER) {
       if (isset($this->handler['name'])) {
index b977774b9be07717695805f32812d3ec9656995d..edf041ec6b917c0a6d562bccbc57cbf7855716ae 100644 (file)
@@ -96,10 +96,6 @@ trait t_database_in_schema {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_in_schema() {
-    if (is_null($this->in_schema)) {
-      return NULL;
-    }
-
     return c_database_string::IN_SCHEMA . ' ' . implode(', ', $this->in_schema);
   }
 }
index 863c61ac87b4ecf2a1200724d4e194254934cbfd..ce2370c128dacd2b9c19e69bf3239e789b2b9111 100644 (file)
@@ -84,10 +84,6 @@ trait t_database_inherit {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_inherit() {
-    if (is_null($this->inherit)) {
-      return NULL;
-    }
-
     $value = $this->inherit['inherit'] ? c_database_string::INHERIT : c_database_string::NO_INHERIT;
     $value .= ' ' . $this->inherit['name'];
     return $value;
index 2e0b16208f6f78fd567ef7949332481ed974c63b..401f59a338ed570f1161f12d07821f15cd968614 100644 (file)
@@ -75,10 +75,6 @@ trait t_database_name {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_name() {
-    if (is_null($this->name)) {
-      return NULL;
-    }
-
     return $this->name;
   }
 }
index 3e0b274e1dde6bcc32bd676623ba62f3811c66ff..666230d279204b454251d850e6712039dc7bbb3a 100644 (file)
@@ -78,10 +78,6 @@ trait t_database_no_wait {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_no_wait() {
-    if (is_null($this->no_wait)) {
-      return NULL;
-    }
-
     return $this->no_wait ? c_database_string::NO_WAIT : NULL;
   }
 }
diff --git a/common/database/traits/database_oid.php b/common/database/traits/database_oid.php
new file mode 100644 (file)
index 0000000..c5c862e
--- /dev/null
@@ -0,0 +1,80 @@
+<?php
+/**
+ * @file
+ * Provides traits for specific Postgesql Queries.
+ *
+ * These traits are associated with actions.
+ *
+ * @see: https://www.postgresql.org/docs/current/static/sql-commands.html
+ */
+namespace n_koopa;
+
+require_once('common/base/classes/base_error.php');
+require_once('common/base/classes/base_return.php');
+
+/**
+ * Provide the sql NAME functionality.
+ */
+trait t_database_oid {
+  protected $oid;
+
+  /**
+   * Set the OID settings.
+   *
+   * @param string|null $oid
+   *   The oid to use.
+   *   Set to NULL to disable.
+   *
+   * @return c_base_return_status
+   *   TRUE on success, FALSE otherwise.
+   *   FALSE with the error bit set is returned on error.
+   */
+  public function set_oid($oid) {
+    if (is_null($oid)) {
+      $this->oid = NULL;
+      return new c_base_return_true();
+    }
+
+    if (is_string($oid)) {
+      $this->oid = $oid;
+      return new c_base_return_true();
+    }
+
+    $error = c_base_error::s_log(NULL, ['arguments' => [':{argument_name}' => 'oid', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_ARGUMENT);
+    return c_base_return_error::s_false($error);
+  }
+
+  /**
+   * Get the currently assigned oid.
+   *
+   * @return c_base_return_string|c_base_return_null
+   *   A oid on success.
+   *   NULL is returned if not set.
+   *   NULL with the error bit set is returned on error.
+   */
+  public function get_oid() {
+    if (is_null($this->oid)) {
+      return new c_base_return_null();
+    }
+
+    if (is_string($this->oid)) {
+      return c_base_return_string::s_new($this->oid);
+    }
+
+    $error = c_base_error::s_log(NULL, ['arguments' => [':{variable_name}' => 'oid', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_VARIABLE);
+    return c_base_return_error::s_null($error);
+  }
+
+  /**
+   * Perform the common build process for this trait.
+   *
+   * As an internal trait method, the caller is expected to perform any appropriate validation.
+   *
+   * @return string|null
+   *   A string is returned on success.
+   *   NULL is returned if there is nothing to process or there is an error.
+   */
+  protected function p_do_build_oid() {
+    return $this->oid;
+  }
+}
index b7b1477f2f95d64a0e8869b36f496f37b594a71c..37f53601ed7bb502884c5ccda065e2f0774b29f8 100644 (file)
@@ -83,10 +83,6 @@ trait t_database_on {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_on() {
-    if (is_null($this->on)) {
-      return NULL;
-    }
-
     $value = NULL;
     switch($this->on) {
       case e_database_on::TABLES_TO:
index 389d00e964f96043485d70db6ec29f215946f2bb..c3816ea6de2ab842bcd98cbb507cf038e423b9b0 100644 (file)
@@ -113,10 +113,6 @@ trait t_database_options {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_options() {
-    if (is_null($this->options)) {
-      return NULL;
-    }
-
     $options = [];
     foreach ($this->options as $options_value) {
       if ($options_value['type'] == e_database_options::ADD) {
index 9ef74045e5e6cd9f4374b40a3839cdcac1f14974..80ee53ee248233f2ebe7526c37ea3e6e5ee38d87 100644 (file)
@@ -78,10 +78,6 @@ trait t_database_order_by {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_order_by() {
-    if (is_null($this->order_by)) {
-      return NULL;
-    }
-
     return c_database_string::ORDER_BY . ' ' . $this->order_by;
   }
 }
index 196a9538f426450a69ec85a430ff79c622f74e92..b2dd05541d6a1996f93ca63b6e8595a02da9abe3 100644 (file)
@@ -23,8 +23,8 @@ trait t_database_owned_by {
   /**
    * Assigns the SQL owned_by.
    *
-   * @param int|null $owned_by
-   *   Set a owned_by code.
+   * @param int|string|null $owned_by
+   *   Set a owned_by code or name.
    *   Set to NULL to disable.
    *   When NULL, this will remove all values.
    *
@@ -39,23 +39,18 @@ trait t_database_owned_by {
     }
 
     if (is_int($owned_by)) {
-      // no reason to add any owned_by once ALL is present.
-      if ($this->owned_by === e_database_owned_by::ALL) {
-        return new c_base_return_true();
-      }
+      if ($owned_by === e_database_user::ALL) {
+        $this->owned_by = e_database_user::ALL;
 
-      if ($owned_by === e_database_owned_by::ALL) {
-        $this->owned_by = e_database_owned_by::ALL;
+        return new c_base_return_true();
       }
-      else {
-        if (!is_array($this->owned_by)) {
-          $this->owned_by = [];
-        }
-
-        $this->owned_by[] = $owned_by;
+    }
+    else if (is_string($owned_by)) {
+      if (!is_array($this->owned_by)) {
+        $this->owned_by = [];
       }
 
-      return new c_base_return_true();
+      $this->owned_by[] = $owned_by;
     }
 
     $error = c_base_error::s_log(NULL, ['arguments' => [':{argument_name}' => 'owned_by', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_ARGUMENT);
@@ -69,7 +64,7 @@ trait t_database_owned_by {
    *   (optional) Get the owned_by at the specified index.
    *   When NULL, all owned_by are returned.
    *
-   * @return c_base_return_int|c_base_return_array|c_base_return_null
+   * @return c_base_return_int|c_base_return_string|c_base_return_array|c_base_return_null
    *   An array of owned_by or NULL if not defined.
    *   A single owned_by is returned if $index is an integer.
    *   NULL with the error bit set is returned on error.
@@ -80,20 +75,26 @@ trait t_database_owned_by {
     }
 
     if (is_null($index)) {
-      if ($this->owned_by === e_database_owned_by::ALL) {
+      if ($this->owned_by === e_database_user::ALL) {
         return c_base_return_array::s_new([$this->owned_by]);
       }
       else if (is_array($this->owned_by)) {
         return c_base_return_array::s_new($this->owned_by);
       }
     }
-    else {
-      if (is_int($index) && array_key_exists($index, $this->owned_by) && is_int($this->owned_by[$index])) {
-        return clone($this->owned_by[$index]);
+    else if (is_int($index)) {
+      if (array_key_exists($index, $this->owned_by)) {
+        if (is_int($this->owned_by[$index])) {
+          return c_base_return_int::s_new($this->owned_by[$index]);
+        }
+        else if (is_string($this->owned_by[$index])) {
+          return c_base_return_string::s_new($this->owned_by[$index]);
+        }
+      }
+      else {
+        $error = c_base_error::s_log(NULL, ['arguments' => [':{variable_name}' => 'owned_by[index]', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_VARIABLE);
+        return c_base_return_error::s_null($error);
       }
-
-      $error = c_base_error::s_log(NULL, ['arguments' => [':{variable_name}' => 'owned_by[index]', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_VARIABLE);
-      return c_base_return_error::s_null($error);
     }
 
     $error = c_base_error::s_log(NULL, ['arguments' => [':{variable_name}' => 'owned_by', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_VARIABLE);
@@ -110,10 +111,15 @@ trait t_database_owned_by {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_owned_by() {
-    if (is_null($this->owned_by)) {
-      return NULL;
+    $owned_by = c_database_string::OWNED_BY . ' ';
+
+    if ($this->owned_by === e_database_user::ALL) {
+      $owned_by .= c_database_string::ALL;
+    }
+    else {
+      $owned_by .= implode(', ', $this->owned_by);
     }
 
-    return c_database_string::OWNED_BY . ' ' . implode(', ', $this->owned_by);
+    return $owned_by;
   }
 }
index 326aaaf3c5d6101ca0f78153ae80f3b896ffbf84..7d8770c0b12cf7569281ce5ea56226cd387ffcd5 100644 (file)
@@ -113,10 +113,6 @@ trait t_database_owner_to {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_owner_to() {
-    if (is_null($this->owner_to)) {
-      return NULL;
-    }
-
     return c_database_string::OWNER_TO . ' ' . $this->owner_to['value'];
   }
 }
index b1bc7788da7fd55b04fcbbfb9433cc396c8e526c..1908f021bf6c6c5716a074298ab44e3eaad229fe 100644 (file)
@@ -110,10 +110,6 @@ trait t_database_privilege {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_privilege() {
-    if (is_null($this->privilege)) {
-      return NULL;
-    }
-
     if ($this->privilege === e_database_privilege::ALL) {
       return c_database_string::ALL;
     }
diff --git a/common/database/traits/database_procedural.php b/common/database/traits/database_procedural.php
new file mode 100644 (file)
index 0000000..a6017db
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+/**
+ * @file
+ * Provides traits for specific Postgesql Queries.
+ *
+ * These traits are associated with actions.
+ *
+ * @see: https://www.postgresql.org/docs/current/static/sql-commands.html
+ */
+namespace n_koopa;
+
+require_once('common/base/classes/base_error.php');
+require_once('common/base/classes/base_return.php');
+
+require_once('common/database/classes/database_string.php');
+
+/**
+ * Provide the sql PROCEDURAL functionality.
+ */
+trait t_database_procedural {
+  protected $procedural;
+
+  /**
+   * Set the PROCEDURAL value.
+   *
+   * @param bool|null $procedural
+   *   Set to TRUE for PROCEDURAL.
+   *   Set to FALSE for nothing.
+   *   Set to NULL to disable.
+   *
+   * @return c_base_return_status
+   *   TRUE on success, FALSE otherwise.
+   *   FALSE with the error bit set is returned on error.
+   */
+  public function set_procedural($procedural) {
+    if (is_null($procedural)) {
+      $this->procedural = NULL;
+      return new c_base_return_true();
+    }
+
+    if (!is_bool($procedural)) {
+      $error = c_base_error::s_log(NULL, ['arguments' => [':{argument_name}' => 'procedural', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_ARGUMENT);
+      return c_base_return_error::s_false($error);
+    }
+
+    $this->procedural = $procedural;
+    return new c_base_return_true();
+  }
+
+  /**
+   * Get the currently assigned with grant option value.
+   *
+   * @return c_base_return_bool|c_base_return_null
+   *   TRUE for PROCEDURAL on success.
+   *   NULL is returned if not set.
+   *   NULL with the error bit set is returned on error.
+   */
+  public function get_procedural() {
+    if (is_null($this->procedural)) {
+      return new c_base_return_null();
+    }
+
+    if (is_bool($this->procedural)) {
+      return c_base_return_bool::s_new($this->procedural);
+    }
+
+    $error = c_base_error::s_log(NULL, ['arguments' => [':{variable_name}' => 'procedural', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_VARIABLE);
+    return c_base_return_error::s_null($error);
+  }
+
+  /**
+   * Perform the common build process for this trait.
+   *
+   * As an internal trait method, the caller is expected to perform any appropriate validation.
+   *
+   * @return string|null
+   *   A string is returned on success.
+   *   NULL is returned if there is nothing to process or there is an error.
+   */
+  protected function p_do_build_procedural() {
+    return $this->procedural ? c_database_string::PROCEDURAL : NULL;
+  }
+}
index 29906af73e413db72b0a75d7c7a3371ca3cbe4c5..eab1ca0e83d1452d2a14464dbfb741fd4f6d9f99 100644 (file)
@@ -87,10 +87,6 @@ trait t_database_rename_column {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_rename_column() {
-    if (is_null($this->rename_column)) {
-      return NULL;
-    }
-
     return c_database_string::RENAME_COLUMN . ' ' . $this->rename_column['from'] . ' ' . c_database_string::TO . $this->rename_column['to'];
   }
 }
index ebfc6fbab1a21b18a566983f9d05bdce4c8d0f1b..009baabd7a891b95a6252757caa82147d0727192 100644 (file)
@@ -72,10 +72,6 @@ trait t_database_rename_to {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_rename_to() {
-    if (is_null($this->rename_to)) {
-      return NULL;
-    }
-
     return c_database_string::RENAME_TO . ' ' . $this->rename_to;
   }
 }
index fb026af6ea71530f5a9173140aa008e383a4e155..6179936231cec487354c3d33102c31d48a79d903 100644 (file)
@@ -104,10 +104,6 @@ trait t_database_reset {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_reset() {
-    if (is_null($this->reset)) {
-      return NULL;
-    }
-
     $value = NULL;
     if ($this->reset['type'] === e_database_reset::PARAMETER) {
       if (is_string($this->reset['value'])) {
index 660c8552269bb6f7f7fec6bafadade2f26cb543b..8dcfe5dee5b32d6d1f41416d60b422cfffb64b16 100644 (file)
@@ -106,10 +106,6 @@ trait t_database_reset_storage_parameter {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_reset_storage_parameter() {
-    if (is_null($this->reset_storage_parameter)) {
-      return NULL;
-    }
-
     $values = [];
     foreach ($this->reset_storage_parameter as $storage_parameter) {
       if ($storage_parameter === e_database_storage_parameter::AUTOSUMMARIZE) {
index 9e670e0f4e72ab10be589de52440a37850492d79..126f4b81e2e37ed6f175d68916c5abfb1ee16fa3 100644 (file)
@@ -78,10 +78,6 @@ trait t_database_restrict {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_restrict() {
-    if (is_null($this->restrict)) {
-      return NULL;
-    }
-
     return $this->restrict ? c_database_string::RESTRICT : NULL;
   }
 }
index adb824eff49802b6b21df4f41cc6f4b586d2a997..b49f7759500087ebde66972bdc364f6115528e22 100644 (file)
@@ -84,10 +84,6 @@ trait t_database_role_specification {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_role_specification() {
-    if (is_null($this->role_specification)) {
-      return NULL;
-    }
-
     $value = NULL;
     if (is_string($this->role_specification)) {
       $value = $this->role_specification;
index dbdf4bf330b291a6100dcf013c9538d5faa11ab9..1c83d7cf2c300db8db3da359758ac5badd777d13 100644 (file)
@@ -113,10 +113,6 @@ trait t_database_set {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_set() {
-    if (is_null($this->set)) {
-      return NULL;
-    }
-
     $value = NULL;
     if ($this->set['type'] === e_database_set::TO) {
       if (is_null($this->set['parameter'])) {
index bd99ec87f5fb3a61a423874688512c1ffeb87350..52df4674dd8ff19d7d0b597d99d00c0dd4c36855 100644 (file)
@@ -72,10 +72,6 @@ trait t_database_set_schema {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_set_schema() {
-    if (is_null($this->set_schema)) {
-      return NULL;
-    }
-
     return c_database_string::SET_SCHEMA . ' ' . $this->set_schema;
   }
 }
index 8679990c1f14d49ce4c9dea16592c8cad60295a1..44f96b4c9959c17a233931cba48ee4ab116cfa31 100644 (file)
@@ -118,10 +118,6 @@ trait t_database_set_storage_parameter {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_set_storage_parameter() {
-    if (is_null($this->set_storage_parameter)) {
-      return NULL;
-    }
-
     $values = [];
     foreach ($this->set_storage_parameter as $storage_parameter => $value) {
       if ($storage_parameter === e_database_storage_parameter::AUTOSUMMARIZE) {
index ff8dfbc3e043220d019b867dd63a20aa5700dc73..98c13b4839a9da2f2bf4602d650e6c2e57cf6fbe 100644 (file)
@@ -72,10 +72,6 @@ trait t_database_set_tablespace {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_set_tablespace() {
-    if (is_null($this->set_tablespace)) {
-      return NULL;
-    }
-
     return c_database_string::SET_TABLESPACE . ' ' . $this->set_tablespace;
   }
 }
index c24aa8630b098b540c92d678eecbbb432c4a46cd..e8dd20b37cd079e3d5b48f98c1c7a739f35c4512 100644 (file)
@@ -78,10 +78,6 @@ trait t_database_set_with_oids {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_set_with_oids() {
-    if (is_null($this->set_with_oids)) {
-      return NULL;
-    }
-
     return $this->set_with_oids ? c_database_string::SET_WITH_OIDS : c_database_string::SET_WITHOUT_OIDS;
   }
 }
diff --git a/common/database/traits/database_set_without_cluster.php b/common/database/traits/database_set_without_cluster.php
new file mode 100644 (file)
index 0000000..766204d
--- /dev/null
@@ -0,0 +1,83 @@
+<?php
+/**
+ * @file
+ * Provides traits for specific Postgesql Queries.
+ *
+ * These traits are associated with actions.
+ *
+ * @see: https://www.postgresql.org/docs/current/static/sql-commands.html
+ */
+namespace n_koopa;
+
+require_once('common/base/classes/base_error.php');
+require_once('common/base/classes/base_return.php');
+
+require_once('common/database/classes/database_string.php');
+
+/**
+ * Provide the sql SET WITHOUT CLUSTER functionality.
+ */
+trait t_database_set_without_cluster {
+  protected $set_without_cluster;
+
+  /**
+   * Set the SET WITHOUT CLUSTER value.
+   *
+   * @param bool|null $set_without_cluster
+   *   Set to TRUE for SET WITHOUT CLUSTER.
+   *   Set to FALSE for nothing.
+   *   Set to NULL to disable.
+   *
+   * @return c_base_return_status
+   *   TRUE on success, FALSE otherwise.
+   *   FALSE with the error bit set is returned on error.
+   */
+  public function set_set_without_cluster($set_without_cluster) {
+    if (is_null($set_without_cluster)) {
+      $this->set_without_cluster = NULL;
+      return new c_base_return_true();
+    }
+
+    if (!is_bool($set_without_cluster)) {
+      $error = c_base_error::s_log(NULL, ['arguments' => [':{argument_name}' => 'set_without_cluster', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_ARGUMENT);
+      return c_base_return_error::s_false($error);
+    }
+
+    $this->set_without_cluster = $set_without_cluster;
+    return new c_base_return_true();
+  }
+
+  /**
+   * Get the currently assigned with grant option value.
+   *
+   * @return c_base_return_bool|c_base_return_null
+   *   TRUE for SET WITHOUT CLUSTER on success.
+   *   NULL is returned if not set.
+   *   NULL with the error bit set is returned on error.
+   */
+  public function get_set_without_cluster() {
+    if (is_null($this->set_without_cluster)) {
+      return new c_base_return_null();
+    }
+
+    if (is_bool($this->set_without_cluster)) {
+      return c_base_return_bool::s_new($this->set_without_cluster);
+    }
+
+    $error = c_base_error::s_log(NULL, ['arguments' => [':{variable_name}' => 'set_without_cluster', ':{function_name}' => __CLASS__ . '->' . __FUNCTION__]], i_base_error_messages::INVALID_VARIABLE);
+    return c_base_return_error::s_null($error);
+  }
+
+  /**
+   * Perform the common build process for this trait.
+   *
+   * As an internal trait method, the caller is expected to perform any appropriate validation.
+   *
+   * @return string|null
+   *   A string is returned on success.
+   *   NULL is returned if there is nothing to process or there is an error.
+   */
+  protected function p_do_build_set_without_cluster() {
+    return $this->set_without_cluster ? c_database_string::SET_WITHOUT_CLUSTER : NULL;
+  }
+}
index 93e6e82ce44464ea89e7d423d92b9971acf17b13..724935c019938e5acd2500c57d7b69fb542d8ce2 100644 (file)
@@ -113,10 +113,6 @@ trait t_database_to_role {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_to_role() {
-    if (is_null($this->to_role)) {
-      return NULL;
-    }
-
     $values = [];
     foreach ($this->to_role as $to_role) {
       if ($this->to_role['type'] === e_database_role::PUBLIC) {
index 823ec75589cb13ffb5a46fdc670331482cfb5de9..6a8ebb9ed26d198d3951158a011b52a84806233b 100644 (file)
@@ -24,7 +24,7 @@ trait t_database_validator {
    * Set the VALIDATOR settings.
    *
    * @param int|null $validator
-   *   The intege representing validator/no-validator.
+   *   The integer representing validator/no-validator.
    *   Set to NULL to disable.
    * @param string|null $validator_function
    *   The validator function name or null when NO_VALIDATOR is specified.
@@ -96,10 +96,6 @@ trait t_database_validator {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_validator() {
-    if (is_null($this->validator)) {
-      return NULL;
-    }
-
     $value = NULL;
     if ($this->validator['type'] == e_database_validator::VALIDATOR) {
       if (isset($this->validator['name'])) {
index 1e78dd1d726f4b41f3d3384015d8f780a33032ac..70b60ab2e5cc096563c86a93bc6337416dfa918f 100644 (file)
@@ -15,7 +15,7 @@ require_once('common/base/classes/base_return.php');
 require_once('common/database/classes/database_string.php');
 
 /**
- * Provide the sql WITH GANT OPTION functionality.
+ * Provide the sql WITH GRANT OPTION functionality.
  */
 trait t_database_with_grant_option {
   protected $with_grant_option;
@@ -24,7 +24,7 @@ trait t_database_with_grant_option {
    * Set the WITH GRANT OPTION value.
    *
    * @param bool|null $with_grant_option
-   *   Set to TRUE for WITH GANT OPTION.
+   *   Set to TRUE for WITH GRANT OPTION.
    *   Set to FALSE for nothing.
    *   Set to NULL to disable.
    *
@@ -51,7 +51,7 @@ trait t_database_with_grant_option {
    * Get the currently assigned with grant option value.
    *
    * @return c_base_return_bool|c_base_return_null
-   *   TRUE for WITH GANT OPTION on success.
+   *   TRUE for WITH GRANT OPTION on success.
    *   NULL is returned if not set.
    *   NULL with the error bit set is returned on error.
    */
@@ -78,10 +78,6 @@ trait t_database_with_grant_option {
    *   NULL is returned if there is nothing to process or there is an error.
    */
   protected function p_do_build_with_grant_option() {
-    if (is_null($this->with_grant_option)) {
-      return NULL;
-    }
-
     return $this->with_grant_option ? c_database_string::WITH_GRANT_OPTION : NULL;
   }
 }