From: stronk7 Date: Wed, 16 Aug 2006 22:58:51 +0000 (+0000) Subject: Initial commit of oci8po generator X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=d7444bfce3cf2b4c0eec67228d07cfdef452fd28;p=moodle.git Initial commit of oci8po generator --- diff --git a/lib/xmldb/classes/generators/oci8po/oci8po.class.php b/lib/xmldb/classes/generators/oci8po/oci8po.class.php new file mode 100644 index 0000000000..bf92ab744b --- /dev/null +++ b/lib/xmldb/classes/generators/oci8po/oci8po.class.php @@ -0,0 +1,185 @@ +prefix = ''; + $this->reserved_words = $this->getReservedWords(); + } + + /** + * Given one XMLDB Type, lenght and decimals, returns the DB proper SQL type + */ + function getTypeSQL ($xmldb_type, $xmldb_length=null, $xmldb_decimals=null) { + + switch ($xmldb_type) { + case XMLDB_TYPE_INTEGER: // From http://www.postgresql.org/docs/7.4/interactive/datatype.html + if (empty($xmldb_length)) { + $xmldb_length = 10; + } + $dbtype = 'NUMBER(' . $xmldb_length . ')'; + break; + case XMLDB_TYPE_NUMBER: + $dbtype = $this->number_type; + if (!empty($xmldb_length)) { + $dbtype .= '(' . $xmldb_length; + if (!empty($xmldb_decimals)) { + $dbtype .= ',' . $xmldb_decimals; + } + $dbtype .= ')'; + } + break; + case XMLDB_TYPE_FLOAT: + $dbtype = 'NUMBER'; + break; + case XMLDB_TYPE_CHAR: + $dbtype = 'VARCHAR2'; + if (empty($xmldb_length)) { + $xmldb_length='255'; + } + $dbtype .= '(' . $xmldb_length . ')'; + break; + case XMLDB_TYPE_TEXT: + $dbtype = 'CLOB'; + break; + case XMLDB_TYPE_BINARY: + $dbtype = 'BLOB'; + break; + case XMLDB_TYPE_DATETIME: + $dbtype = 'DATE'; + break; + } + return $dbtype; + } + + /** + * Returns the code needed to create one enum for the xmldb_table and xmldb_field passes + */ + function getEnumExtraSQL ($xmldb_table, $xmldb_field) { + + $sql = 'CONSTRAINT ' . $this->getNameForObject($xmldb_table->getName(), $xmldb_field->getName(), 'ck'); + $sql.= ' CHECK (' . $this->getEncQuoted($xmldb_field->getName()) . ' IN (' . implode(', ', $xmldb_field->getEnumValues()) . ')),'; + + return $sql; + } + + /** + * Returns the code needed to create one sequence for the xmldb_table and xmldb_field passes + */ + function getCreateSequenceSQL ($xmldb_table, $xmldb_field) { + + $sequence = "\nCREATE SEQUENCE "; + $sequence.= $this->getNameForObject($xmldb_table->getName(), $xmldb_field->getName(), 'seq'); + $sequence.= "\n START WITH 1"; + $sequence.= "\n INCREMENT BY 1"; + $sequence.= "\n NOMAXVALUE;"; + + $trigger_name = $this->getNameForObject($xmldb_table->getName(), $xmldb_field->getName(), 'trg'); + + $trigger = "\nCREATE OR REPLACE TRIGGER " . $trigger_name; + $trigger.= "\n BEFORE INSERT"; + $trigger.= "\nON " . $this->getEncQuoted($this->prefix . $xmldb_table->getName()); + $trigger.= "\n FOR EACH ROW"; + $trigger.= "\nBEGIN"; + $trigger.= "\n SELECT " . $trigger_name . '.nextval INTO :new.' . $this->getEncQuoted($xmldb_field->getName()) . " FROM dual;"; + $trigger.= "\nEND;"; + return $sequence . "\n" . $trigger; + } + + /** + * Returns the code needed to add one comment to the table + */ + function getCommentSQL ($xmldb_table) { + + $comment = ";\n\nCOMMENT ON TABLE " . $this->getEncQuoted($this->prefix . $xmldb_table->getName()); + $comment.= " IS '" . substr($xmldb_table->getComment(), 0, 250) . "'"; + + return $comment; + } + + /** + * Returns an array of reserved words (lowercase) for this DB + */ + function getReservedWords() { + /// This file contains the reserved words for MySQL databases + /// from http://www.postgresql.org/docs/7.3/static/sql-keywords-appendix.html + $reserved_words = array ( + 'access', 'add', 'all', 'alter', 'and', 'any', + 'as', 'asc', 'audit', 'between', 'by', 'char', + 'check', 'cluster', 'column', 'comment', + 'compress', 'connect', 'create', 'current', + 'date', 'decimal', 'default', 'delete', 'desc', + 'distinct', 'drop', 'else', 'exclusive', 'exists', + 'file', 'float', 'for', 'from', 'grant', 'group', + 'having', 'identified', 'immediate', 'in', + 'increment', 'index', 'initial', 'insert', + 'integer', 'intersect', 'into', 'is', 'level', + 'like', 'lock', 'long', 'maxextents', 'minus', + 'mlslabel', 'mode', 'modify', 'noaudit', + 'nocompress', 'not', 'nowait', 'null', 'number', + 'of', 'offline', 'on', 'online', 'option', 'or', + 'order', 'pctfree', 'prior', 'privileges', + 'public', 'raw', 'rename', 'resource', 'revoke', + 'row', 'rowid', 'rownum', 'rows', 'select', + 'session', 'set', 'share', 'size', 'smallint', + 'start', 'successful', 'synonym', 'sysdate', + 'table', 'then', 'to', 'trigger', 'uid', 'union', + 'unique', 'update', 'user', 'validate', 'values', + 'varchar', 'varchar2', 'view', 'whenever', + 'where', 'with' + ); + return $reserved_words; + } +} + +?>