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

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