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

Documentation generated on Mon, 11 Mar 2019 13:52:54 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.