48require_once 
'MDB2/Driver/Reverse/Common.php';
 
   76        $result = $db->loadModule(
'Datatype', 
null, 
true);
 
   81        $query = 
'SELECT column_name name, data_type "type", nullable, data_default "default"';
 
   82        $query.= 
', COALESCE(data_precision, data_length) "length", data_scale "scale"';
 
   83        $query.= 
' FROM user_tab_columns';
 
   84        $query.= 
' WHERE (table_name='.$db->quote(
$table, 
'text').
' OR table_name='.$db->quote(strtoupper(
$table), 
'text').
')';
 
   85        $query.= 
' AND (column_name='.$db->quote($field_name, 
'text').
' OR column_name='.$db->quote(strtoupper($field_name), 
'text').
')';
 
   86        $query.= 
' ORDER BY column_id';
 
   94                'it was not specified an existing table column', __FUNCTION__);
 
   99            if ($db->options[
'field_case'] == CASE_LOWER) {
 
  105        $mapped_datatype = $db->datatype->mapNativeDatatype(
$column);
 
  106        if (PEAR::IsError($mapped_datatype)) {
 
  107            return $mapped_datatype;
 
  109        list($types, $length, $unsigned, $fixed) = $mapped_datatype;
 
  115        if (array_key_exists(
'default', 
$column)) {
 
  117            if ($default === 
'NULL') {
 
  120            if (is_null($default) && $notnull) {
 
  125        $definition[0] = array(
'notnull' => $notnull, 
'nativetype' => 
$column[
'type']);
 
  126        if (!is_null($length)) {
 
  127            $definition[0][
'length'] = $length;
 
  129        if (!is_null($unsigned)) {
 
  130            $definition[0][
'unsigned'] = $unsigned;
 
  132        if (!is_null($fixed)) {
 
  133            $definition[0][
'fixed'] = $fixed;
 
  135        if ($default !== 
false) {
 
  136            $definition[0][
'default'] = $default;
 
  139            $definition[
$key] = $definition[0];
 
  141                unset($definition[
$key][
'default']);
 
  146        if (
$type == 
'integer') {
 
  147            $query = 
"SELECT DISTINCT name 
  150                         AND UPPER(text) like '%ON ". strtoupper($db->escape(
$table, 
'text')) .
"%'";
 
  154                    $row = array_change_key_case(
$row, CASE_LOWER);
 
  155                    $trquery = 
'SELECT text 
  157                                 WHERE name=' . $db->quote(
$row[
'name'],
'text')
 
  159                    $triggersth = $db->query($trquery);
 
  162                        $triggerline = array_change_key_case($triggerline,CASE_LOWER);
 
  163                        $triggerstr .= $triggerline[
'text']. 
' ';
 
  166                    if (preg_match(
'/.*\W(.+)\.nextval into :NEW\.'.$field_name.
' FROM dual/i', $triggerstr, $matches)) {
 
  169                        $definition[0][
'autoincrement'] = $matches[1];
 
  196        $query = 
"SELECT column_name, 
  199                    FROM user_ind_columns 
  200                   WHERE (table_name=".$db->quote(
$table, 
'text').
' OR table_name='.$db->quote(strtoupper(
$table), 
'text').
') 
  201                     AND (index_name=%s OR index_name=%s) 
  202                     AND index_name NOT IN ( 
  203                           SELECT constraint_name 
  205                            WHERE (table_name = '.$db->quote(
$table, 
'text').
' OR table_name='.$db->quote(strtoupper(
$table), 
'text').
") 
  206                              AND constraint_type in ('P','U') 
  208                ORDER BY column_position";
 
  209        $index_name_mdb2 = $db->getIndexName($index_name);
 
  211            $db->quote($index_name_mdb2, 
'text'),
 
  212            $db->quote(strtoupper($index_name_mdb2), 
'text')
 
  218            $index_name = $index_name_mdb2;
 
  221            $db->quote($index_name, 
'text'),
 
  222            $db->quote(strtoupper($index_name), 
'text')
 
  229        $definition = array();
 
  231            $row = array_change_key_case(
$row, CASE_LOWER);
 
  232            $column_name = 
$row[
'column_name'];
 
  234                if ($db->options[
'field_case'] == CASE_LOWER) {
 
  235                    $column_name = strtolower($column_name);
 
  237                    $column_name = strtoupper($column_name);
 
  240            $definition[
'fields'][$column_name] = array(
 
  241                'position' => (
int)
$row[
'column_position'],
 
  243            if (!empty(
$row[
'descend'])) {
 
  244                $definition[
'fields'][$column_name][
'sorting'] =
 
  245                    (
$row[
'descend'] == 
'ASC' ? 
'ascending' : 
'descending');
 
  249        if (empty($definition[
'fields'])) {
 
  251                'it was not specified an existing table index', __FUNCTION__);
 
  274        $query = 
'SELECT alc.constraint_name,  
  276                         alc.search_condition, 
  277                         alc.r_constraint_name, 
  278                         alc.search_condition, 
  281                    FROM all_constraints alc, 
  282                         all_cons_columns cols 
  283                   WHERE (alc.constraint_name=%s OR alc.constraint_name=%s) 
  284                     AND alc.constraint_name = cols.constraint_name 
  285                     AND alc.owner = '.$db->quote(strtoupper($db->dsn[
'username']), 
'text');
 
  287             $query.= 
' AND (alc.table_name='.$db->quote(
$table, 
'text').
' OR alc.table_name='.$db->quote(strtoupper(
$table), 
'text').
')';
 
  289        if (strtolower($constraint_name) != 
'primary') {
 
  290            $constraint_name_mdb2 = $db->getIndexName($constraint_name);
 
  292                $db->quote($constraint_name_mdb2, 
'text'),
 
  293                $db->quote(strtoupper($constraint_name_mdb2), 
'text')
 
  299                $constraint_name = $constraint_name_mdb2;
 
  303            $db->quote($constraint_name, 
'text'),
 
  304            $db->quote(strtoupper($constraint_name), 
'text')
 
  310        $definition = array();
 
  312            $row = array_change_key_case(
$row, CASE_LOWER);
 
  313            $column_name = 
$row[
'column_name'];
 
  315                if ($db->options[
'field_case'] == CASE_LOWER) {
 
  316                    $column_name = strtolower($column_name);
 
  318                    $column_name = strtoupper($column_name);
 
  321            $definition[
'fields'][$column_name] = array(
 
  322                'position' => (
int)
$row[
'position']
 
  328        if (empty($definition)) {
 
  330                $constraint_name . 
' is not an existing table constraint', __FUNCTION__);
 
  332        if ($lastrow[
'constraint_type'] === 
'P') {
 
  333            $definition[
'primary'] = 
true;
 
  334        } elseif ($lastrow[
'constraint_type'] === 
'U') {
 
  335            $definition[
'unique'] = 
true;
 
  336        } elseif ($lastrow[
'constraint_type'] === 
'R') {
 
  337            $definition[
'foreign'] = $lastrow[
'r_constraint_name'];
 
  338        } elseif ($lastrow[
'constraint_type'] === 
'C') {
 
  339            $definition[
'check'] = 
true;
 
  341                        $enumregex = 
'/'.$lastrow[
'column_name'].
' in \((.+?)\)/i';
 
  342                        if (preg_match($enumregex, $lastrow[
'search_condition'], $rangestr)) {
 
  343                                $definition[
'fields'][$column_name] = array();
 
  344                                $allowed = explode(
',', $rangestr[1]);
 
  345                                foreach ($allowed as $val) {
 
  347                                        $val = preg_replace(
'/^\'/', 
'', $val);
 
  348                                        $val = preg_replace(
'/\'$/', 
'', $val);
 
  349                                        array_push($definition[
'fields'][$column_name], $val);
 
  373        $sequence_name = $db->getSequenceName($sequence);
 
  374        $query = 
'SELECT last_number FROM user_sequences';
 
  375        $query.= 
' WHERE sequence_name='.$db->quote($sequence_name, 
'text');
 
  376        $query.= 
' OR sequence_name='.$db->quote(strtoupper($sequence_name), 
'text');
 
  377        $start = $db->queryOne(
$query, 
'integer');
 
  381        $definition = array();
 
  383            $definition = array(
'start' => $start);
 
  410        $query = 
'SELECT trigger_name, 
  414                         triggering_event trigger_event, 
  415                         description trigger_comment, 
  419                   WHERE trigger_name = \''. strtoupper($trigger).
'\'';
 
  421            'trigger_name'    => 
'text',
 
  422            'table_name'      => 
'text',
 
  423            'trigger_body'    => 
'text',
 
  424            'trigger_type'    => 
'text',
 
  425            'trigger_event'   => 
'text',
 
  426            'trigger_comment' => 
'text',
 
  427            'trigger_enabled' => 
'boolean',
 
  428            'when_clause'     => 
'text',
 
  434        if (!empty(
$result[
'trigger_type'])) {
 
  436            $result[
'trigger_type'] = preg_replace(
'/(\S+).*/', 
'\\1', 
$result[
'trigger_type']);
 
  467           return parent::tableInfo(
$result, $mode);
 
  476        if (!is_resource($resource)) {
 
  478                'Could not generate result resource', __FUNCTION__);
 
  482            if ($db->options[
'field_case'] == CASE_LOWER) {
 
  483                $case_func = 
'strtolower';
 
  485                $case_func = 
'strtoupper';
 
  488            $case_func = 
'strval';
 
  491        $count = @OCINumCols($resource);
 
  495            $res[
'num_fields'] = $count;
 
  498        $db->loadModule(
'Datatype', 
null, 
true);
 
  499        for (
$i = 0; 
$i < $count; 
$i++) {
 
  502                'name'   => $case_func(@OCIColumnName($resource, 
$i+1)),
 
  503                'type'   => @OCIColumnType($resource, 
$i+1),
 
  504                'length' => @OCIColumnSize($resource, 
$i+1),
 
  508            $res[
$i][
'mdb2type'] = $db->datatype->mapNativeDatatype(
$res[
$i]);
 
sprintf('%.4f', $callTime)
const MDB2_PORTABILITY_FIX_CASE
Portability: convert names of tables and fields to case defined in the "field_case" option when using...
const MDB2_ERROR_NOT_FOUND
const MDB2_ERROR_NEED_MORE_DATA
const MDB2_FETCHMODE_ASSOC
Column data indexed by column names.
const MDB2_TABLEINFO_ORDERTABLE
const MDB2_TABLEINFO_ORDER
These are constants for the tableInfo-function they are bitwised or'ed.
An exception for terminatinating execution or to throw for unit testing.
getTableFieldDefinition($table, $field_name)
Get the structure of a field into an array.
tableInfo($result, $mode=null)
Returns information about a table or a result set.
getTableIndexDefinition($table, $index_name)
Get the structure of an index into an array.
getTableConstraintDefinition($table, $constraint_name)
Get the structure of a constraint into an array.
getSequenceDefinition($sequence)
Get the structure of a sequence into an array.
getTriggerDefinition($trigger)
Get the structure of a trigger into an array.
& getDBInstance()
Get the instance of MDB2 associated with the module instance.
isResultCommon($value)
Tell whether a value is a MDB2 result implementing the common interface.
isError($data, $code=null)
Tell whether a value is a PEAR error.
if(empty($password)) $table
foreach($_POST as $key=> $value) $res