forked from extern/egroupware
fixed the schema-retrival functions for MySql, Postges and MaxDB
This commit is contained in:
parent
27e84db7e4
commit
2740acc03e
@ -29,6 +29,7 @@ class ADODB2_mysql extends ADODB_DataDict {
|
|||||||
$t = $fieldobj->type;
|
$t = $fieldobj->type;
|
||||||
$len = $fieldobj->max_length;
|
$len = $fieldobj->max_length;
|
||||||
}
|
}
|
||||||
|
$is_serial = is_object($fieldobj) && $fieldobj->primary_key && $fieldobj->auto_increment;
|
||||||
|
|
||||||
$len = -1; // mysql max_length is not accurate
|
$len = -1; // mysql max_length is not accurate
|
||||||
switch (strtoupper($t)) {
|
switch (strtoupper($t)) {
|
||||||
@ -66,11 +67,11 @@ class ADODB2_mysql extends ADODB_DataDict {
|
|||||||
return 'F';
|
return 'F';
|
||||||
|
|
||||||
case 'INT':
|
case 'INT':
|
||||||
case 'INTEGER': return (!empty($fieldobj->primary_key)) ? 'R' : 'I';
|
case 'INTEGER': return $is_serial ? 'R' : 'I';
|
||||||
case 'TINYINT': return (!empty($fieldobj->primary_key)) ? 'R' : 'I1';
|
case 'TINYINT': return $is_serial ? 'R' : 'I1';
|
||||||
case 'SMALLINT': return (!empty($fieldobj->primary_key)) ? 'R' : 'I2';
|
case 'SMALLINT': return $is_serial ? 'R' : 'I2';
|
||||||
case 'MEDIUMINT': return (!empty($fieldobj->primary_key)) ? 'R' : 'I4';
|
case 'MEDIUMINT': return $is_serial ? 'R' : 'I4';
|
||||||
case 'BIGINT': return (!empty($fieldobj->primary_key)) ? 'R' : 'I8';
|
case 'BIGINT': return $is_serial ? 'R' : 'I8';
|
||||||
default: return 'N';
|
default: return 'N';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,9 @@ class ADODB2_postgres extends ADODB_DataDict {
|
|||||||
$t = $fieldobj->type;
|
$t = $fieldobj->type;
|
||||||
$len = $fieldobj->max_length;
|
$len = $fieldobj->max_length;
|
||||||
}
|
}
|
||||||
|
$is_serial = is_object($fieldobj) && $fieldobj->primary_key && $fieldobj->unique &&
|
||||||
|
$fieldobj->has_default && substr($fieldobj->default_value,0,8) == 'nextval(';
|
||||||
|
|
||||||
switch (strtoupper($t)) {
|
switch (strtoupper($t)) {
|
||||||
case 'INTERVAL':
|
case 'INTERVAL':
|
||||||
case 'CHAR':
|
case 'CHAR':
|
||||||
@ -61,12 +64,12 @@ class ADODB2_postgres extends ADODB_DataDict {
|
|||||||
case 'TIMESTAMPTZ':
|
case 'TIMESTAMPTZ':
|
||||||
return 'T';
|
return 'T';
|
||||||
|
|
||||||
case 'INTEGER': return (empty($fieldobj->primary_key) && empty($fieldobj->unique))? 'I' : 'R';
|
case 'INTEGER': return !$is_serial ? 'I' : 'R';
|
||||||
case 'SMALLINT':
|
case 'SMALLINT':
|
||||||
case 'INT2': return (empty($fieldobj->primary_key) && empty($fieldobj->unique))? 'I2' : 'R';
|
case 'INT2': return !$is_serial ? 'I2' : 'R';
|
||||||
case 'INT4': return (empty($fieldobj->primary_key) && empty($fieldobj->unique))? 'I4' : 'R';
|
case 'INT4': return !$is_serial ? 'I4' : 'R';
|
||||||
case 'BIGINT':
|
case 'BIGINT':
|
||||||
case 'INT8': return (empty($fieldobj->primary_key) && empty($fieldobj->unique))? 'I8' : 'R';
|
case 'INT8': return !$is_serial ? 'I8' : 'R';
|
||||||
|
|
||||||
case 'OID':
|
case 'OID':
|
||||||
case 'SERIAL':
|
case 'SERIAL':
|
||||||
|
@ -392,7 +392,15 @@ class ADODB_mysql extends ADOConnection {
|
|||||||
|
|
||||||
// split type into type(length):
|
// split type into type(length):
|
||||||
$fld->scale = null;
|
$fld->scale = null;
|
||||||
if (strpos($type,',') && preg_match("/^(.+)\((\d+),(\d+)/", $type, $query_array)) {
|
if (preg_match('/^enum\((.+)\)$/',$type,$enum_vals)) { // convert enum to varchar
|
||||||
|
$fld->type = 'varchar';
|
||||||
|
$fld->max_length = 1;
|
||||||
|
$enum_vals = explode(',',$enum_vals[1]);
|
||||||
|
foreach($enum_vals as $val)
|
||||||
|
{
|
||||||
|
if ($fld->max_length < strlen($val)-2) $fld->max_length = strlen($val)-2;
|
||||||
|
}
|
||||||
|
} elseif (strpos($type,',') && preg_match("/^(.+)\((\d+),(\d+)/", $type, $query_array)) {
|
||||||
$fld->type = $query_array[1];
|
$fld->type = $query_array[1];
|
||||||
$fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;
|
$fld->max_length = is_numeric($query_array[2]) ? $query_array[2] : -1;
|
||||||
$fld->scale = is_numeric($query_array[3]) ? $query_array[3] : -1;
|
$fld->scale = is_numeric($query_array[3]) ? $query_array[3] : -1;
|
||||||
@ -668,7 +676,7 @@ class ADORecordSet_mysql extends ADORecordSet{
|
|||||||
case 'MEDIUMINT':
|
case 'MEDIUMINT':
|
||||||
case 'SMALLINT':
|
case 'SMALLINT':
|
||||||
|
|
||||||
if (!empty($fieldobj->primary_key)) return 'R';
|
if (is_object($fieldobj) && $fieldobj->primary_key && $fieldobj->auto_increment) return 'R';
|
||||||
else return 'I';
|
else return 'I';
|
||||||
|
|
||||||
default: return 'N';
|
default: return 'N';
|
||||||
|
@ -443,10 +443,8 @@ select viewname,'V' from pg_views where viewname like $mask";
|
|||||||
$num = $rsdef->fields['num'];
|
$num = $rsdef->fields['num'];
|
||||||
$s = $rsdef->fields['def'];
|
$s = $rsdef->fields['def'];
|
||||||
if (strpos($s,'::')===false && substr($s, 0, 1) == "'") { /* quoted strings hack... for now... fixme */
|
if (strpos($s,'::')===false && substr($s, 0, 1) == "'") { /* quoted strings hack... for now... fixme */
|
||||||
$s = substr($s, 1);
|
$s = substr($s, 1,-1);
|
||||||
$s = substr($s, 0, strlen($s) - 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$rsdefa[$num] = $s;
|
$rsdefa[$num] = $s;
|
||||||
$rsdef->MoveNext();
|
$rsdef->MoveNext();
|
||||||
}
|
}
|
||||||
@ -457,14 +455,17 @@ select viewname,'V' from pg_views where viewname like $mask";
|
|||||||
}
|
}
|
||||||
|
|
||||||
$retarr = array();
|
$retarr = array();
|
||||||
while (!$rs->EOF) {
|
while (!$rs->EOF) {
|
||||||
$fld = new ADOFieldObject();
|
$fld = new ADOFieldObject();
|
||||||
$fld->name = $rs->fields[0];
|
$fld->name = $rs->fields[0];
|
||||||
$fld->type = $rs->fields[1];
|
$fld->type = $rs->fields[1];
|
||||||
$fld->max_length = $rs->fields[2];
|
$fld->max_length = $rs->fields[2];
|
||||||
if ($fld->max_length <= 0) $fld->max_length = $rs->fields[3]-4;
|
if ($fld->max_length <= 0) $fld->max_length = $rs->fields[3]-4;
|
||||||
if ($fld->max_length <= 0) $fld->max_length = -1;
|
if ($fld->max_length <= 0) $fld->max_length = -1;
|
||||||
|
if ($fld->type == 'numeric') {
|
||||||
|
$fld->scale = $fld->max_length & 0xFFFF;
|
||||||
|
$fld->max_length >>= 16;
|
||||||
|
}
|
||||||
// dannym
|
// dannym
|
||||||
// 5 hasdefault; 6 num-of-column
|
// 5 hasdefault; 6 num-of-column
|
||||||
$fld->has_default = ($rs->fields[5] == 't');
|
$fld->has_default = ($rs->fields[5] == 't');
|
||||||
@ -944,8 +945,8 @@ class ADORecordSet_postgres64 extends ADORecordSet{
|
|||||||
case 'INT8':
|
case 'INT8':
|
||||||
case 'INT4':
|
case 'INT4':
|
||||||
case 'INT2':
|
case 'INT2':
|
||||||
if (isset($fieldobj) &&
|
if (!is_object($fieldobj) || !$fieldobj->primary_key || !$fieldobj->unique ||
|
||||||
empty($fieldobj->primary_key) && empty($fieldobj->unique)) return 'I';
|
!$fieldobj->has_default || substr($fieldobj->default_value,0,8) != 'nextval(') return 'I';
|
||||||
|
|
||||||
case 'OID':
|
case 'OID':
|
||||||
case 'SERIAL':
|
case 'SERIAL':
|
||||||
|
@ -26,8 +26,8 @@ class ADODB_SAPDB extends ADODB_odbc {
|
|||||||
var $concat_operator = '||';
|
var $concat_operator = '||';
|
||||||
var $sysDate = 'DATE';
|
var $sysDate = 'DATE';
|
||||||
var $sysTimeStamp = 'TIMESTAMP';
|
var $sysTimeStamp = 'TIMESTAMP';
|
||||||
var $fmtDate = "\\D\\A\\T\\E('Y-m-d')"; /// used by DBDate() as the default date format used by the database
|
var $fmtDate = "'Y-m-d'"; /// used by DBDate() as the default date format used by the database
|
||||||
var $fmtTimeStamp = "\\T\\I\\M\\E\\S\\T\\A\\M\\P('Y-m-d','H:i:s')"; /// used by DBTimeStamp as the default timestamp fmt.
|
var $fmtTimeStamp = "'Y-m-d H:i:s'"; /// used by DBTimeStamp as the default timestamp fmt.
|
||||||
var $hasInsertId = true;
|
var $hasInsertId = true;
|
||||||
var $_bindInputArray = true;
|
var $_bindInputArray = true;
|
||||||
|
|
||||||
@ -118,6 +118,16 @@ class ADODB_SAPDB extends ADODB_odbc {
|
|||||||
$fld->has_default = false;
|
$fld->has_default = false;
|
||||||
} else {
|
} else {
|
||||||
$fld->default_value = $column[6];
|
$fld->default_value = $column[6];
|
||||||
|
switch($fld->type) {
|
||||||
|
case 'VARCHAR':
|
||||||
|
case 'CHARACTER':
|
||||||
|
case 'LONG':
|
||||||
|
$fld->default_value = $column[6];
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$fld->default_value = trim($column[6]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$retarr[$fld->name] = $fld;
|
$retarr[$fld->name] = $fld;
|
||||||
|
Loading…
Reference in New Issue
Block a user