Support OCI (Create table)
This commit is contained in:
parent
ee99952d90
commit
6a489d35ab
1 changed files with 58 additions and 13 deletions
|
@ -572,7 +572,7 @@ class Database extends AbstractData
|
|||
);
|
||||
if (count($rows)) {
|
||||
foreach ($rows as $row) {
|
||||
$pastes[] = $row['dataid'];
|
||||
$pastes[] = $row[self::_sanitizeIdentifier('dataid')];
|
||||
}
|
||||
}
|
||||
return $pastes;
|
||||
|
@ -710,6 +710,18 @@ class Database extends AbstractData
|
|||
return $row ? $row[self::_sanitizeColumn('value')] : '';
|
||||
}
|
||||
|
||||
/**
|
||||
* OCI cannot accept semicolons
|
||||
*
|
||||
* @access private
|
||||
* @static
|
||||
* @return string
|
||||
*/
|
||||
private static function _getSemicolon()
|
||||
{
|
||||
return self::$_type === 'oci' ? "" : ";";
|
||||
}
|
||||
|
||||
/**
|
||||
* get the primary key clauses, depending on the database driver
|
||||
*
|
||||
|
@ -721,7 +733,7 @@ class Database extends AbstractData
|
|||
private static function _getPrimaryKeyClauses($key = 'dataid')
|
||||
{
|
||||
$main_key = $after_key = '';
|
||||
if (self::$_type === 'mysql') {
|
||||
if (self::$_type === 'mysql' || self::$_type === 'oci') {
|
||||
$after_key = ", PRIMARY KEY ($key)";
|
||||
} else {
|
||||
$main_key = ' PRIMARY KEY';
|
||||
|
@ -740,13 +752,13 @@ class Database extends AbstractData
|
|||
*/
|
||||
private static function _getDataType()
|
||||
{
|
||||
return self::$_type === 'pgsql' ? 'TEXT' : 'BLOB';
|
||||
return self::$_type === 'pgsql' ? 'TEXT' : (self::$_type === 'oci' ? 'VARCHAR2(4000)' : 'BLOB');
|
||||
}
|
||||
|
||||
/**
|
||||
* get the attachment type, depending on the database driver
|
||||
*
|
||||
* PostgreSQL uses a different API for BLOBs then SQL, hence we use TEXT
|
||||
* PostgreSQL and OCI use different APIs for BLOBs then SQL, hence we use TEXT and CLOB
|
||||
*
|
||||
* @access private
|
||||
* @static
|
||||
|
@ -754,7 +766,21 @@ class Database extends AbstractData
|
|||
*/
|
||||
private static function _getAttachmentType()
|
||||
{
|
||||
return self::$_type === 'pgsql' ? 'TEXT' : 'MEDIUMBLOB';
|
||||
return self::$_type === 'pgsql' ? 'TEXT' : (self::$_type === 'oci' ? 'CLOB' : 'MEDIUMBLOB');
|
||||
}
|
||||
|
||||
/**
|
||||
* get the meta type, depending on the database driver
|
||||
*
|
||||
* OCI can't even accept TEXT so it has to be VARCHAR2(200)
|
||||
*
|
||||
* @access private
|
||||
* @static
|
||||
* @return string
|
||||
*/
|
||||
private static function _getMetaType()
|
||||
{
|
||||
return self::$_type === 'oci' ? 'VARCHAR2(4000)' : 'TEXT';
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -768,6 +794,7 @@ class Database extends AbstractData
|
|||
list($main_key, $after_key) = self::_getPrimaryKeyClauses();
|
||||
$dataType = self::_getDataType();
|
||||
$attachmentType = self::_getAttachmentType();
|
||||
$metaType = self::_getMetaType();
|
||||
self::$_db->exec(
|
||||
'CREATE TABLE ' . self::_sanitizeIdentifier('paste') . ' ( ' .
|
||||
"dataid CHAR(16) NOT NULL$main_key, " .
|
||||
|
@ -776,12 +803,26 @@ class Database extends AbstractData
|
|||
'expiredate INT, ' .
|
||||
'opendiscussion INT, ' .
|
||||
'burnafterreading INT, ' .
|
||||
'meta TEXT, ' .
|
||||
"meta $metaType, " .
|
||||
"attachment $attachmentType, " .
|
||||
"attachmentname $dataType$after_key );"
|
||||
"attachmentname $dataType$after_key )" . self::_getSemicolon()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* get the nullable text type, depending on the database driver
|
||||
*
|
||||
* OCI will pad CHAR columns with spaces, hence VARCHAR2
|
||||
*
|
||||
* @access private
|
||||
* @static
|
||||
* @return string
|
||||
*/
|
||||
private static function _getParentType()
|
||||
{
|
||||
return self::$_type === 'oci' ? 'VARCHAR2(16)' : 'CHAR(16)';
|
||||
}
|
||||
|
||||
/**
|
||||
* create the paste table
|
||||
*
|
||||
|
@ -792,19 +833,21 @@ class Database extends AbstractData
|
|||
{
|
||||
list($main_key, $after_key) = self::_getPrimaryKeyClauses();
|
||||
$dataType = self::_getDataType();
|
||||
$parentType = self::_getParentType();
|
||||
$attachmentType = self::_getAttachmentType();
|
||||
self::$_db->exec(
|
||||
'CREATE TABLE ' . self::_sanitizeIdentifier('comment') . ' ( ' .
|
||||
"dataid CHAR(16) NOT NULL$main_key, " .
|
||||
'pasteid CHAR(16), ' .
|
||||
'parentid CHAR(16), ' .
|
||||
"data $dataType, " .
|
||||
"parentid $parentType, " .
|
||||
"data $attachmentType, " .
|
||||
"nickname $dataType, " .
|
||||
"vizhash $dataType, " .
|
||||
"postdate INT$after_key );"
|
||||
"postdate INT$after_key )" . self::_getSemicolon()
|
||||
);
|
||||
self::$_db->exec(
|
||||
'CREATE INDEX IF NOT EXISTS comment_parent ON ' .
|
||||
self::_sanitizeIdentifier('comment') . '(pasteid);'
|
||||
'CREATE INDEX comment_parent ON ' .
|
||||
self::_sanitizeIdentifier('comment') . '(pasteid)' . self::_getSemicolon()
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -817,9 +860,11 @@ class Database extends AbstractData
|
|||
private static function _createConfigTable()
|
||||
{
|
||||
list($main_key, $after_key) = self::_getPrimaryKeyClauses('id');
|
||||
$charType = self::$_type === 'oci' ? 'VARCHAR2(16)' : 'CHAR(16)';
|
||||
$textType = self::$_type === 'oci' ? 'VARCHAR2(4000)' : 'TEXT';
|
||||
self::$_db->exec(
|
||||
'CREATE TABLE ' . self::_sanitizeIdentifier('config') .
|
||||
" ( id CHAR(16) NOT NULL$main_key, value TEXT$after_key );"
|
||||
" ( id $charType NOT NULL$main_key, value $textType$after_key )" . self::_getSemicolon()
|
||||
);
|
||||
self::_exec(
|
||||
'INSERT INTO ' . self::_sanitizeIdentifier('config') .
|
||||
|
|
Loading…
Reference in a new issue