DB_Table
[ class tree: DB_Table ] [ index: DB_Table ] [ all elements ]

Source for file Manager.php

Documentation is available at Manager.php

  1. <?php
  2.  
  3. require_once 'DB/Table.php';
  4.  
  5.  
  6. /**
  7. * Creates tables from DB_Table definitions.
  8. * DB_Table_Manager provides database automated table creation
  9. * facilities (and eventually table alteration as well).
  10. * $Id: Manager.php,v 1.12 2004/04/23 15:18:59 pmjones Exp $
  11. @author Paul M. Jones <pmjones@ciaweb.net>
  12. @package DB_Table
  13. */
  14.  
  15.     
  16.     
  17.     /**
  18.     * 
  19.     * Create the table based on DB_Table column and index arrays.
  20.     * 
  21.     * @static
  22.     * 
  23.     * @access public
  24.     * 
  25.     * @param object &$db A PEAR DB object.
  26.     * 
  27.     * @param string $table The table name to connect to in the database.
  28.     * 
  29.     * @param mixed $column_set A DB_Table $this->col array.
  30.     * 
  31.     * @param mixed $index_set A DB_Table $this->idx array.
  32.     * 
  33.     * @return mixed Boolean false if there was no attempt to create the
  34.     *  table, boolean true if the attempt succeeded, and a PEAR_Error if
  35.     *  the attempt failed.
  36.     * 
  37.     */
  38.     
  39.     function create(&$db$table$column_set$index_set)
  40.     {
  41.         // columns to be created
  42.         $column = array();
  43.         
  44.         // indexes to be created
  45.         $index = array();
  46.         
  47.         
  48.         // -------------------------------------------------------------
  49.         // 
  50.         // validate each column mapping and build the individual
  51.         // definitions, and note column indexes as we go.
  52.         //
  53.         
  54.         foreach ($column_set as $colname => $val{
  55.             
  56.             $colname trim($colname);
  57.             
  58.             // column name cannot be a reserved keyword
  59.             $reserved in_array(
  60.                 strtoupper($colname),
  61.                 $GLOBALS['_DB_TABLE']['reserved']
  62.             );
  63.             
  64.             if ($reserved{
  65.                 return DB_Table::throwError(
  66.                     DB_TABLE_ERR_DECLARE_COLNAME,
  67.                     " ('$colname')"
  68.                 );
  69.             }
  70.             
  71.             // prepare variables
  72.             $type    (isset($val['type']))    $val['type']    : null;
  73.             $size    (isset($val['size']))    $val['size']    : null;
  74.             $scope   (isset($val['scope']))   $val['scope']   : null;
  75.             $require (isset($val['require'])) $val['require': null;
  76.             $default (isset($val['default'])) $val['default': null;
  77.             
  78.             // get the declaration string
  79.             $result DB_Table_Manager::getDeclare($db->phptype$type$size
  80.                 $scope$require$default);
  81.             
  82.             // did it work?
  83.             if (PEAR::isError($result)) {
  84.                 $result->userinfo .= " ('$colname')";
  85.                 return $result;
  86.             }
  87.             
  88.             // add the declaration to the array of all columns
  89.             $column[= "$colname $result";
  90.         }
  91.         
  92.         
  93.         // -------------------------------------------------------------
  94.         // 
  95.         // validate the indexes.
  96.         //
  97.         
  98.         foreach ($index_set as $idxname => $val{
  99.             
  100.             if (is_string($val)) {
  101.                 // shorthand for index names: colname => index_type
  102.                 $type trim($val);
  103.                 $cols trim($idxname);
  104.             elseif (is_array($val)) {
  105.                 // normal: index_name => array('type' => ..., 'cols' => ...)
  106.                 $type (isset($val['type'])) $val['type''normal';
  107.                 $cols (isset($val['cols'])) $val['cols': null;
  108.             }
  109.             
  110.             // index name cannot be a reserved keyword
  111.             $reserved in_array(
  112.                 strtoupper($idxname),
  113.                 $GLOBALS['_DB_TABLE']['reserved']
  114.             );
  115.             
  116.             if ($reserved{
  117.                 return DB_Table::throwError(
  118.                     DB_TABLE_ERR_DECLARE_IDXNAME,
  119.                     "('$idxname')"
  120.                 );
  121.             }
  122.             
  123.             // are there any columns for the index?
  124.             if ($cols{
  125.                 return DB_Table::throwError(
  126.                     DB_TABLE_ERR_IDX_NO_COLS,
  127.                     "('$idxname')"
  128.                 );
  129.             }
  130.             
  131.             // are there any columns not in the schema?
  132.             settype($cols'array');
  133.             $valid_cols array_keys($column_set);
  134.             foreach ($cols as $colname{
  135.                 if (in_array($colname$valid_cols)) {
  136.                     return DB_Table::throwError(
  137.                         DB_TABLE_ERR_IDX_COL_UNDEF,
  138.                         "'$idxname' ('$colname')"
  139.                     );
  140.                 }
  141.             }
  142.             
  143.             // string of column names
  144.             $colstring implode(', '$cols);
  145.             
  146.             // we prefix all index names with the table name,
  147.             // and suffix all index names with '_index'.  this
  148.             // is to soothe PostgreSQL, which demands that index
  149.             // names not collide, even when they indexes are on
  150.             // different tables.
  151.             $newIdxName $table '_' $idxname '_index';
  152.             
  153.             // create index entry
  154.             if ($type == 'unique'{
  155.                 $index[= "CREATE UNIQUE INDEX $newIdxName ON $table ($colstring)";
  156.             elseif ($type == 'normal'{
  157.                 $index[= "CREATE INDEX $newIdxName ON $table ($colstring)";
  158.             else {
  159.                 return DB_Table::throwError(
  160.                     DB_TABLE_ERR_IDX_TYPE,
  161.                     "'$idxname' ('$type')"
  162.                 );
  163.             }
  164.             
  165.         }
  166.         
  167.         
  168.         // -------------------------------------------------------------
  169.         // 
  170.         // now for the real action: create the table and indexes!
  171.         //
  172.         
  173.         // build the CREATE TABLE command
  174.         $cmd = "CREATE TABLE $table (\n\t";
  175.         $cmd .= implode(",\n\t"$column);
  176.         $cmd .= "\n)";
  177.         
  178.         // attempt to create the table
  179.         $result $db->query($cmd);
  180.         if (PEAR::isError($result)) {
  181.             return $result;
  182.         }
  183.         
  184.         // attempt to create the indexes
  185.         foreach ($index as $cmd{
  186.             $result $db->query($cmd);
  187.             if (PEAR::isError($result)) {
  188.                 return $result;
  189.             }
  190.         }
  191.         
  192.         // we're done!
  193.         return true;
  194.     }
  195.     
  196.     
  197.     /**
  198.     * 
  199.     * Get the column declaration string for a DB_Table column.
  200.     * 
  201.     * @static
  202.     * 
  203.     * @access public
  204.     * 
  205.     * @param string $phptype The DB phptype key.
  206.     * 
  207.     * @param string $coltype The DB_Table column type.
  208.     * 
  209.     * @param int $size The size for the column (needed for string and
  210.     *  decimal).
  211.     * 
  212.     * @param int $scope The scope for the column (needed for decimal).
  213.     * 
  214.     * @param bool $require True if the column should be NOT NULL, false
  215.     *  allowed to be NULL.
  216.     * 
  217.     * @param string $default The SQL calculation for a default value.
  218.     * 
  219.     * @return string|object  declaration string on success, or a
  220.     *  PEAR_Error on failure.
  221.     * 
  222.     */
  223.     
  224.     function getDeclare($phptype$coltype$size = null$scope = null,
  225.         $require = null$default = null)
  226.     {
  227.         // validate char and varchar: does it have a size?
  228.         if (($coltype == 'char' || $coltype == 'varchar'&&
  229.             ($size < 1 || $size > 255) ) {
  230.             return DB_Table::throwError(
  231.                 DB_TABLE_ERR_DECLARE_STRING,
  232.                 "(size='$size')"
  233.             );
  234.         }
  235.         
  236.         // validate decimal: does it have a size and scope?
  237.         if ($coltype == 'decimal' &&
  238.             ($size < 1 || $size > 255 || $scope < 0 || $scope $size)) {
  239.             return DB_Table::throwError(
  240.                 DB_TABLE_ERR_DECLARE_DECIMAL,
  241.                 "(size='$size' scope='$scope')"
  242.             );
  243.         }
  244.         
  245.         // map of column types and declarations for this RDBMS
  246.         $map $GLOBALS['_DB_TABLE']['type'][$phptype];
  247.         
  248.         // is it a recognized column type?
  249.         $types array_keys($map);
  250.         if (in_array($coltype$types)) {
  251.             return DB_Table::throwError(
  252.                 DB_TABLE_ERR_DECLARE_TYPE,
  253.                 "('$coltype')"
  254.             );
  255.         }
  256.         
  257.         // basic declaration
  258.         switch ($coltype{
  259.     
  260.         case 'char':
  261.         case 'varchar':
  262.             $declare $map[$coltype. "($size)";
  263.             break;
  264.         
  265.         case 'decimal':
  266.             $declare $map[$coltype. "($size,$scope)";
  267.             break;
  268.         
  269.         default:
  270.             $declare $map[$coltype];
  271.             break;
  272.         
  273.         }
  274.         
  275.         // set the "NULL"/"NOT NULL" portion
  276.         $declare .= ($require' NOT NULL' ' NULL';
  277.         
  278.         // set the "DEFAULT" portion
  279.         $declare .= ($default? " DEFAULT $default" : '';
  280.         
  281.         // done
  282.         return $declare;
  283.     }
  284. }
  285.  
  286.  
  287. /**
  288. * List of all reserved words for all supported databases. Yes, this is a
  289. * monster of a list.
  290. */
  291. if (isset($GLOBALS['_DB_TABLE']['reserved'])) {
  292.     $GLOBALS['_DB_TABLE']['reserved'= array(
  293.         '_ROWID_',
  294.         'ABSOLUTE',
  295.         'ACCESS',
  296.         'ACTION',
  297.         'ADD',
  298.         'ADMIN',
  299.         'AFTER',
  300.         'AGGREGATE',
  301.         'ALIAS',
  302.         'ALL',
  303.         'ALLOCATE',
  304.         'ALTER',
  305.         'ANALYSE',
  306.         'ANALYZE',
  307.         'AND',
  308.         'ANY',
  309.         'ARE',
  310.         'ARRAY',
  311.         'AS',
  312.         'ASC',
  313.         'ASENSITIVE',
  314.         'ASSERTION',
  315.         'AT',
  316.         'AUDIT',
  317.         'AUTHORIZATION',
  318.         'AUTO_INCREMENT',
  319.         'AVG',
  320.         'BACKUP',
  321.         'BDB',
  322.         'BEFORE',
  323.         'BEGIN',
  324.         'BERKELEYDB',
  325.         'BETWEEN',
  326.         'BIGINT',
  327.         'BINARY',
  328.         'BIT',
  329.         'BIT_LENGTH',
  330.         'BLOB',
  331.         'BOOLEAN',
  332.         'BOTH',
  333.         'BREADTH',
  334.         'BREAK',
  335.         'BROWSE',
  336.         'BULK',
  337.         'BY',
  338.         'CALL',
  339.         'CASCADE',
  340.         'CASCADED',
  341.         'CASE',
  342.         'CAST',
  343.         'CATALOG',
  344.         'CHANGE',
  345.         'CHAR',
  346.         'CHAR_LENGTH',
  347.         'CHARACTER',
  348.         'CHARACTER_LENGTH',
  349.         'CHECK',
  350.         'CHECKPOINT',
  351.         'CLASS',
  352.         'CLOB',
  353.         'CLOSE',
  354.         'CLUSTER',
  355.         'CLUSTERED',
  356.         'COALESCE',
  357.         'COLLATE',
  358.         'COLLATION',
  359.         'COLUMN',
  360.         'COLUMNS',
  361.         'COMMENT',
  362.         'COMMIT',
  363.         'COMPLETION',
  364.         'COMPRESS',
  365.         'COMPUTE',
  366.         'CONDITION',
  367.         'CONNECT',
  368.         'CONNECTION',
  369.         'CONSTRAINT',
  370.         'CONSTRAINTS',
  371.         'CONSTRUCTOR',
  372.         'CONTAINS',
  373.         'CONTAINSTABLE',
  374.         'CONTINUE',
  375.         'CONVERT',
  376.         'CORRESPONDING',
  377.         'COUNT',
  378.         'CREATE',
  379.         'CROSS',
  380.         'CUBE',
  381.         'CURRENT',
  382.         'CURRENT_DATE',
  383.         'CURRENT_PATH',
  384.         'CURRENT_ROLE',
  385.         'CURRENT_TIME',
  386.         'CURRENT_TIMESTAMP',
  387.         'CURRENT_USER',
  388.         'CURSOR',
  389.         'CYCLE',
  390.         'DATA',
  391.         'DATABASE',
  392.         'DATABASES',
  393.         'DATE',
  394.         'DAY',
  395.         'DAY_HOUR',
  396.         'DAY_MICROSECOND',
  397.         'DAY_MINUTE',
  398.         'DAY_SECOND',
  399.         'DBCC',
  400.         'DEALLOCATE',
  401.         'DEC',
  402.         'DECIMAL',
  403.         'DECLARE',
  404.         'DEFAULT',
  405.         'DEFERRABLE',
  406.         'DEFERRED',
  407.         'DELAYED',
  408.         'DELETE',
  409.         'DENY',
  410.         'DEPTH',
  411.         'DEREF',
  412.         'DESC',
  413.         'DESCRIBE',
  414.         'DESCRIPTOR',
  415.         'DESTROY',
  416.         'DESTRUCTOR',
  417.         'DETERMINISTIC',
  418.         'DIAGNOSTICS',
  419.         'DICTIONARY',
  420.         'DISCONNECT',
  421.         'DISK',
  422.         'DISTINCT',
  423.         'DISTINCTROW',
  424.         'DISTRIBUTED',
  425.         'DIV',
  426.         'DO',
  427.         'DOMAIN',
  428.         'DOUBLE',
  429.         'DROP',
  430.         'DUMMY',
  431.         'DUMP',
  432.         'DYNAMIC',
  433.         'EACH',
  434.         'ELSE',
  435.         'ELSEIF',
  436.         'ENCLOSED',
  437.         'END',
  438.         'END-EXEC',
  439.         'EQUALS',
  440.         'ERRLVL',
  441.         'ESCAPE',
  442.         'ESCAPED',
  443.         'EVERY',
  444.         'EXCEPT',
  445.         'EXCEPTION',
  446.         'EXCLUSIVE',
  447.         'EXEC',
  448.         'EXECUTE',
  449.         'EXISTS',
  450.         'EXIT',
  451.         'EXPLAIN',
  452.         'EXTERNAL',
  453.         'EXTRACT',
  454.         'FALSE',
  455.         'FETCH',
  456.         'FIELDS',
  457.         'FILE',
  458.         'FILLFACTOR',
  459.         'FIRST',
  460.         'FLOAT',
  461.         'FOR',
  462.         'FORCE',
  463.         'FOREIGN',
  464.         'FOUND',
  465.         'FRAC_SECOND',
  466.         'FREE',
  467.         'FREETEXT',
  468.         'FREETEXTTABLE',
  469.         'FREEZE',
  470.         'FROM',
  471.         'FULL',
  472.         'FULLTEXT',
  473.         'FUNCTION',
  474.         'GENERAL',
  475.         'GET',
  476.         'GLOB',
  477.         'GLOBAL',
  478.         'GO',
  479.         'GOTO',
  480.         'GRANT',
  481.         'GROUP',
  482.         'GROUPING',
  483.         'HAVING',
  484.         'HIGH_PRIORITY',
  485.         'HOLDLOCK',
  486.         'HOST',
  487.         'HOUR',
  488.         'HOUR_MICROSECOND',
  489.         'HOUR_MINUTE',
  490.         'HOUR_SECOND',
  491.         'IDENTIFIED',
  492.         'IDENTITY',
  493.         'IDENTITY_INSERT',
  494.         'IDENTITYCOL',
  495.         'IF',
  496.         'IGNORE',
  497.         'ILIKE',
  498.         'IMMEDIATE',
  499.         'IN',
  500.         'INCREMENT',
  501.         'INDEX',
  502.         'INDICATOR',
  503.         'INFILE',
  504.         'INITIAL',
  505.         'INITIALIZE',
  506.         'INITIALLY',
  507.         'INNER',
  508.         'INNODB',
  509.         'INOUT',
  510.         'INPUT',
  511.         'INSENSITIVE',
  512.         'INSERT',
  513.         'INT',
  514.         'INTEGER',
  515.         'INTERSECT',
  516.         'INTERVAL',
  517.         'INTO',
  518.         'IO_THREAD',
  519.         'IS',
  520.         'ISNULL',
  521.         'ISOLATION',
  522.         'ITERATE',
  523.         'JOIN',
  524.         'KEY',
  525.         'KEYS',
  526.         'KILL',
  527.         'LANGUAGE',
  528.         'LARGE',
  529.         'LAST',
  530.         'LATERAL',
  531.         'LEADING',
  532.         'LEAVE',
  533.         'LEFT',
  534.         'LESS',
  535.         'LEVEL',
  536.         'LIKE',
  537.         'LIMIT',
  538.         'LINENO',
  539.         'LINES',
  540.         'LOAD',
  541.         'LOCAL',
  542.         'LOCALTIME',
  543.         'LOCALTIMESTAMP',
  544.         'LOCATOR',
  545.         'LOCK',
  546.         'LONG',
  547.         'LONGBLOB',
  548.         'LONGTEXT',
  549.         'LOOP',
  550.         'LOW_PRIORITY',
  551.         'LOWER',
  552.         'MAIN',
  553.         'MAP',
  554.         'MASTER_SERVER_ID',
  555.         'MATCH',
  556.         'MAX',
  557.         'MAXEXTENTS',
  558.         'MEDIUMBLOB',
  559.         'MEDIUMINT',
  560.         'MEDIUMTEXT',
  561.         'MIDDLEINT',
  562.         'MIN',
  563.         'MINUS',
  564.         'MINUTE',
  565.         'MINUTE_MICROSECOND',
  566.         'MINUTE_SECOND',
  567.         'MLSLABEL',
  568.         'MOD',
  569.         'MODE',
  570.         'MODIFIES',
  571.         'MODIFY',
  572.         'MODULE',
  573.         'MONTH',
  574.         'NAMES',
  575.         'NATIONAL',
  576.         'NATURAL',
  577.         'NCHAR',
  578.         'NCLOB',
  579.         'NEW',
  580.         'NEXT',
  581.         'NO',
  582.         'NO_WRITE_TO_BINLOG',
  583.         'NOAUDIT',
  584.         'NOCHECK',
  585.         'NOCOMPRESS',
  586.         'NONCLUSTERED',
  587.         'NONE',
  588.         'NOT',
  589.         'NOTNULL',
  590.         'NOWAIT',
  591.         'NULL',
  592.         'NULLIF',
  593.         'NUMBER',
  594.         'NUMERIC',
  595.         'OBJECT',
  596.         'OCTET_LENGTH',
  597.         'OF',
  598.         'OFF',
  599.         'OFFLINE',
  600.         'OFFSET',
  601.         'OFFSETS',
  602.         'OID',
  603.         'OLD',
  604.         'ON',
  605.         'ONLINE',
  606.         'ONLY',
  607.         'OPEN',
  608.         'OPENDATASOURCE',
  609.         'OPENQUERY',
  610.         'OPENROWSET',
  611.         'OPENXML',
  612.         'OPERATION',
  613.         'OPTIMIZE',
  614.         'OPTION',
  615.         'OPTIONALLY',
  616.         'OR',
  617.         'ORDER',
  618.         'ORDINALITY',
  619.         'OUT',
  620.         'OUTER',
  621.         'OUTFILE',
  622.         'OUTPUT',
  623.         'OVER',
  624.         'OVERLAPS',
  625.         'PAD',
  626.         'PARAMETER',
  627.         'PARAMETERS',
  628.         'PARTIAL',
  629.         'PATH',
  630.         'PCTFREE',
  631.         'PERCENT',
  632.         'PLACING',
  633.         'PLAN',
  634.         'POSITION',
  635.         'POSTFIX',
  636.         'PRECISION',
  637.         'PREFIX',
  638.         'PREORDER',
  639.         'PREPARE',
  640.         'PRESERVE',
  641.         'PRIMARY',
  642.         'PRINT',
  643.         'PRIOR',
  644.         'PRIVILEGES',
  645.         'PROC',
  646.         'PROCEDURE',
  647.         'PUBLIC',
  648.         'PURGE',
  649.         'RAISERROR',
  650.         'RAW',
  651.         'READ',
  652.         'READS',
  653.         'READTEXT',
  654.         'REAL',
  655.         'RECONFIGURE',
  656.         'RECURSIVE',
  657.         'REF',
  658.         'REFERENCES',
  659.         'REFERENCING',
  660.         'REGEXP',
  661.         'RELATIVE',
  662.         'RENAME',
  663.         'REPEAT',
  664.         'REPLACE',
  665.         'REPLICATION',
  666.         'REQUIRE',
  667.         'RESOURCE',
  668.         'RESTORE',
  669.         'RESTRICT',
  670.         'RESULT',
  671.         'RETURN',
  672.         'RETURNS',
  673.         'REVOKE',
  674.         'RIGHT',
  675.         'RLIKE',
  676.         'ROLE',
  677.         'ROLLBACK',
  678.         'ROLLUP',
  679.         'ROUTINE',
  680.         'ROW',
  681.         'ROWCOUNT',
  682.         'ROWGUIDCOL',
  683.         'ROWID',
  684.         'ROWNUM',
  685.         'ROWS',
  686.         'RULE',
  687.         'SAVE',
  688.         'SAVEPOINT',
  689.         'SCHEMA',
  690.         'SCOPE',
  691.         'SCROLL',
  692.         'SEARCH',
  693.         'SECOND',
  694.         'SECOND_MICROSECOND',
  695.         'SECTION',
  696.         'SELECT',
  697.         'SENSITIVE',
  698.         'SEPARATOR',
  699.         'SEQUENCE',
  700.         'SESSION',
  701.         'SESSION_USER',
  702.         'SET',
  703.         'SETS',
  704.         'SETUSER',
  705.         'SHARE',
  706.         'SHOW',
  707.         'SHUTDOWN',
  708.         'SIMILAR',
  709.         'SIZE',
  710.         'SMALLINT',
  711.         'SOME',
  712.         'SONAME',
  713.         'SPACE',
  714.         'SPATIAL',
  715.         'SPECIFIC',
  716.         'SPECIFICTYPE',
  717.         'SQL',
  718.         'SQL_BIG_RESULT',
  719.         'SQL_CALC_FOUND_ROWS',
  720.         'SQL_SMALL_RESULT',
  721.         'SQL_TSI_DAY',
  722.         'SQL_TSI_FRAC_SECOND',
  723.         'SQL_TSI_HOUR',
  724.         'SQL_TSI_MINUTE',
  725.         'SQL_TSI_MONTH',
  726.         'SQL_TSI_QUARTER',
  727.         'SQL_TSI_SECOND',
  728.         'SQL_TSI_WEEK',
  729.         'SQL_TSI_YEAR',
  730.         'SQLCODE',
  731.         'SQLERROR',
  732.         'SQLEXCEPTION',
  733.         'SQLITE_MASTER',
  734.         'SQLITE_TEMP_MASTER',
  735.         'SQLSTATE',
  736.         'SQLWARNING',
  737.         'SSL',
  738.         'START',
  739.         'STARTING',
  740.         'STATE',
  741.         'STATEMENT',
  742.         'STATIC',
  743.         'STATISTICS',
  744.         'STRAIGHT_JOIN',
  745.         'STRIPED',
  746.         'STRUCTURE',
  747.         'SUBSTRING',
  748.         'SUCCESSFUL',
  749.         'SUM',
  750.         'SYNONYM',
  751.         'SYSDATE',
  752.         'SYSTEM_USER',
  753.         'TABLE',
  754.         'TABLES',
  755.         'TEMPORARY',
  756.         'TERMINATE',
  757.         'TERMINATED',
  758.         'TEXTSIZE',
  759.         'THAN',
  760.         'THEN',
  761.         'TIME',
  762.         'TIMESTAMP',
  763.         'TIMESTAMPADD',
  764.         'TIMESTAMPDIFF',
  765.         'TIMEZONE_HOUR',
  766.         'TIMEZONE_MINUTE',
  767.         'TINYBLOB',
  768.         'TINYINT',
  769.         'TINYTEXT',
  770.         'TO',
  771.         'TOP',
  772.         'TRAILING',
  773.         'TRAN',
  774.         'TRANSACTION',
  775.         'TRANSLATE',
  776.         'TRANSLATION',
  777.         'TREAT',
  778.         'TRIGGER',
  779.         'TRIM',
  780.         'TRUE',
  781.         'TRUNCATE',
  782.         'TSEQUAL',
  783.         'UID',
  784.         'UNDER',
  785.         'UNDO',
  786.         'UNION',
  787.         'UNIQUE',
  788.         'UNKNOWN',
  789.         'UNLOCK',
  790.         'UNNEST',
  791.         'UNSIGNED',
  792.         'UPDATE',
  793.         'UPDATETEXT',
  794.         'UPPER',
  795.         'USAGE',
  796.         'USE',
  797.         'USER',
  798.         'USER_RESOURCES',
  799.         'USING',
  800.         'UTC_DATE',
  801.         'UTC_TIME',
  802.         'UTC_TIMESTAMP',
  803.         'VALIDATE',
  804.         'VALUE',
  805.         'VALUES',
  806.         'VARBINARY',
  807.         'VARCHAR',
  808.         'VARCHAR2',
  809.         'VARCHARACTER',
  810.         'VARIABLE',
  811.         'VARYING',
  812.         'VERBOSE',
  813.         'VIEW',
  814.         'WAITFOR',
  815.         'WHEN',
  816.         'WHENEVER',
  817.         'WHERE',
  818.         'WHILE',
  819.         'WITH',
  820.         'WITHOUT',
  821.         'WORK',
  822.         'WRITE',
  823.         'WRITETEXT',
  824.         'XOR',
  825.         'YEAR',
  826.         'YEAR_MONTH',
  827.         'ZEROFILL',
  828.         'ZONE',
  829.     );
  830. }
  831.         
  832. ?>

Documentation generated on Mon, 11 Mar 2019 10:15:33 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.