function get_fk_lookups_data($tablename, $fk_lookups)
{
    $lookups_data = array();
    $fk_defs = get_foreignkeys($tablename, 'S');
    foreach ($fk_defs as $colname => $defs) {
        // skip foreign keys with more than FKLOOKUP_ENTRIES values
        if (!isset($GLOBALS['s_tables'][$defs['table']]['count'])) {
            $GLOBALS['s_tables'][$defs['table']]['count'] = get_table_count($defs['table']);
        }
        if ($GLOBALS['s_tables'][$defs['table']]['count'] > FKLOOKUP_ENTRIES) {
            continue;
        }
        $value_field = ifsetor($fk_lookups[$colname], $defs['column']);
        if ($value_field != $defs['column']) {
            $value_field = "COALESCE(" . $value_field . ", '')" . " || ' - '" . ' || ' . $defs['column'];
        }
        $sql = 'SELECT ' . $defs['column'] . ', ' . $value_field . ' FROM ' . $defs['table'] . ' ORDER BY ' . $value_field . ' ASC';
        $res = fbird_query($GLOBALS['dbhandle'], $sql) or ib_error(__FILE__, __LINE__, $sql);
        $data = array();
        while ($row = fbird_fetch_row($res)) {
            $data[trim($row[0])] = trim($row[1]);
        }
        fbird_free_result($res);
        $lookups_data[$colname] = array('table' => $defs['table'], 'column' => $defs['column'], 'data' => $data);
    }
    return $lookups_data;
}
Exemplo n.º 2
0
function drop_udf($name)
{
    global $s_udfs, $dbhandle;
    global $ib_error, $lsql;
    $lsql = 'DROP EXTERNAL FUNCTION ' . $name;
    if (DEBUG) {
        add_debug('lsql', __FILE__, __LINE__);
    }
    if (!@fbird_query($dbhandle, $lsql)) {
        $ib_error = fbird_errmsg();
        return FALSE;
    } else {
        unset($s_udfs[$name]);
        return TRUE;
    }
}
function get_table_count($tablename)
{
    $quote = identifier_quote($GLOBALS['s_login']['dialect']);
    $sql = 'SELECT COUNT(*) AS CNT FROM ' . $quote . $tablename . $quote;
    $res = fbird_query($GLOBALS['dbhandle'], $sql) or $ib_error .= fbird_errmsg() . "<br>\n";
    $count = FALSE;
    if (is_resource($res)) {
        $row = fbird_fetch_row($res);
        $count = $row[0];
        fbird_free_result($res);
    }
    return $count;
}
function get_procedure_parameters($name)
{
    global $dbhandle, $s_charsets;
    $sql = 'SELECT P.RDB$PARAMETER_NAME PNAME,' . ' P.RDB$PARAMETER_TYPE PTYPE,' . ' F.RDB$FIELD_NAME AS DNAME,' . ' F.RDB$FIELD_TYPE AS FTYPE,' . ' F.RDB$FIELD_SUB_TYPE AS STYPE,' . ' F.RDB$FIELD_LENGTH AS FLEN,' . ' F.RDB$FIELD_PRECISION AS FPREC,' . ' F.RDB$FIELD_SCALE AS FSCALE,' . ' F.RDB$SEGMENT_LENGTH AS SEGLEN,' . ' F.RDB$CHARACTER_SET_ID AS CHARID,' . ' F.RDB$COLLATION_ID AS COLLID' . ' FROM RDB$PROCEDURE_PARAMETERS P' . ' INNER JOIN RDB$FIELDS F ON P.RDB$FIELD_SOURCE=F.RDB$FIELD_NAME' . " WHERE P.RDB\$PROCEDURE_NAME='" . $name . "'";
    $res = fbird_query($dbhandle, $sql) or ib_error(__FILE__, __LINE__, $sql);
    $in = $out = array();
    while ($obj = fbird_fetch_object($res)) {
        $ptype = $obj->PTYPE == 0 ? 'in' : 'out';
        $stype = isset($obj->STYPE) ? $obj->STYPE : NULL;
        $type = get_datatype($obj->FTYPE, $stype);
        if (in_array($type, array('DECIMAL', 'NUMERIC'))) {
            $prec = $obj->FPREC;
            $scale = -$obj->FSCALE;
            $stype = NULL;
        } else {
            $prec = $scale = NULL;
        }
        ${$ptype}[] = array('name' => trim($obj->PNAME), 'type' => $type, 'stype' => $stype, 'size' => in_array($type, array('VARCHAR', 'CHARACTER')) ? $obj->FLEN : NULL, 'charset' => isset($obj->CHARID) ? $s_charsets[$obj->CHARID]['name'] : NULL, 'collate' => isset($obj->COLLID) && $obj->COLLID != 0 ? $s_charsets[$obj->CHARID]['collations'][$obj->COLLID] : NULL, 'prec' => $prec, 'scale' => $scale, 'segsize' => $type == 'BLOB' ? $obj->SEGLEN : NULL);
    }
    return array($in, $out);
}
Exemplo n.º 5
0
function export_data($export)
{
    global $s_fields, $warning;
    ini_set('ibase.dateformat', $export['general']['date']);
    ini_set('ibase.timeformat', $export['general']['time']);
    ini_set('ibase.timestampformat', $export['general']['date'] . ' ' . $export['general']['time']);
    if ($export['format'] == 'sql' && $export['sql']['info']) {
        echo sql_export_info($export, replace_escape_sequences($export['sql']['lineend']));
    }
    foreach (export_queries($export) as $query) {
        if (DEBUG) {
            add_debug($query, __FILE__, __LINE__);
        }
        $trans = fbird_trans(TRANS_READ, $dbhandle);
        $res = @fbird_query($trans, $query);
        if ($res === FALSE) {
            $ib_error = fbird_errmsg();
            $warning = '';
            return FALSE;
        }
        $columns = $col_types = $num_fields = array();
        $num = fbird_num_fields($res);
        for ($idx = 0; $idx < $num; $idx++) {
            $info = fbird_field_info($res, $idx);
            $columns[] = $info['name'];
            $col_types[] = $info['type'];
            $num_fields[] = is_number_type(substr($info['type'], 0, strcspn($info['type'], '(')));
        }
        $tablename = $info['relation'];
        $export['query'] = array('source' => $query, 'columns' => $columns, 'col_types' => $col_types, 'num_fields' => $num_fields, 'result' => $res);
        switch ($export['format']) {
            case 'csv':
                export_csv_data($export);
                break;
            case 'sql':
                export_sql_data($export, $tablename);
                break;
            case 'ext':
                printf('Export data to %s is still not implemented!', $export['format']);
                break;
            default:
                echo 'Unsupported export format!';
        }
        fbird_free_result($res);
        fbird_commit($trans);
    }
}
function systable_value_select($table, $field, $value = NULL)
{
    global $dbhandle, $db_strings;
    $sql = 'SELECT DISTINCT ' . $field . ' AS FNAME FROM ' . $table;
    $res = fbird_query($dbhandle, $sql) or ib_error(__FILE__, __LINE__, $sql);
    $values = array();
    while ($row = fbird_fetch_object($res)) {
        $values[] = trim($row->FNAME);
    }
    fbird_free_result($res);
    return '<b>' . $db_strings['FValue'] . "</b><br>\n" . get_selectlist('db_sysvalue', $values, $value, TRUE);
}
Exemplo n.º 7
0
function init_edit_values($edit_where, $fields)
{
    $values = array();
    $quote = identifier_quote($GLOBALS['s_login']['dialect']);
    $sql = 'SELECT * FROM ' . $quote . $edit_where['table'] . $quote . ' ' . $edit_where['where'];
    $res = fbird_query($GLOBALS['dbhandle'], $sql) or ib_error();
    if ($row = fbird_fetch_assoc($res, IBASE_TEXT)) {
        fbird_free_result($res);
        foreach ($fields as $field) {
            if (isset($field['comp'])) {
                $values[] = $field['csource'];
            } else {
                $values[] = $row[$field['name']];
            }
        }
    } else {
        $GLOBALS['ib_error'] = "Query didn't return a result: " . $sql;
    }
    return $values;
}
Exemplo n.º 8
0
function get_indices($order, $dir)
{
    global $dbhandle;
    $order_field = $order == 'name' ? 'I.RDB$INDEX_NAME' : 'I.RDB$RELATION_NAME';
    $sql = 'SELECT I.RDB$INDEX_NAME AS INAME, ' . 'I.RDB$RELATION_NAME AS RNAME, ' . 'I.RDB$UNIQUE_FLAG AS UFLAG, ' . 'I.RDB$INDEX_INACTIVE AS IFLAG, ' . 'I.RDB$INDEX_TYPE AS ITYPE, ' . 'S.RDB$FIELD_NAME AS FNAME, ' . 'S.RDB$FIELD_POSITION AS POS ' . 'FROM RDB$INDICES I ' . 'JOIN RDB$INDEX_SEGMENTS S ' . 'ON S.RDB$INDEX_NAME=I.RDB$INDEX_NAME ' . 'WHERE (I.RDB$SYSTEM_FLAG IS NULL  OR  I.RDB$SYSTEM_FLAG=0)' . 'AND I.RDB$FOREIGN_KEY IS NULL ' . "AND I.RDB\$INDEX_NAME NOT STARTING WITH 'RDB\$' " . 'ORDER BY ' . $order_field . ' ' . $dir;
    $trans = fbird_trans(TRANS_READ, $dbhandle);
    $res = fbird_query($trans, $sql) or ib_error();
    $indices = array();
    while ($obj = fbird_fetch_object($res)) {
        if (!isset($indices[$obj->INAME])) {
            $iname = trim($obj->INAME);
            $indices[$iname]['table'] = trim($obj->RNAME);
            $indices[$iname]['dir'] = isset($obj->ITYPE) && $obj->ITYPE == 1 ? 'DESC' : 'ASC';
            $indices[$iname]['uniq'] = isset($obj->UFLAG) ? TRUE : FALSE;
            $indices[$iname]['active'] = isset($obj->IFLAG) && $obj->IFLAG == 1 ? FALSE : TRUE;
            $indices[$iname]['pos'] = $obj->POS;
        }
        $indices[$iname]['seg'][$obj->POS] = trim($obj->FNAME);
    }
    fbird_commit($trans);
    return $indices;
}
Exemplo n.º 9
0
function get_view_source($name)
{
    global $dbhandle;
    $vsource = '';
    $sql = 'SELECT R.RDB$VIEW_SOURCE VSOURCE' . ' FROM RDB$RELATIONS R' . " WHERE R.RDB\$RELATION_NAME='" . $name . "'";
    $res = fbird_query($dbhandle, $sql) or ib_error(__FILE__, __LINE__, $sql);
    $obj = fbird_fetch_object($res);
    if (is_object($obj)) {
        $bid = fbird_blob_open($obj->VSOURCE);
        $arr = fbird_blob_info($obj->VSOURCE);
        // $arr[0] holds the blob length
        $vsource = trim(fbird_blob_get($bid, $arr[0]));
        fbird_blob_close($bid);
    }
    fbird_free_result($res);
    return $vsource;
}
Exemplo n.º 10
0
function modify_domain($olddef, $domdef)
{
    global $dbhandle, $ib_error;
    $lsql = array();
    if ($domdef['name'] != $olddef['name']) {
        $lsql[] = 'ALTER DOMAIN ' . $olddef['name'] . ' TO ' . $domdef['name'];
    }
    if (datatype_is_modified($olddef, $domdef)) {
        $lsql[] = 'ALTER DOMAIN ' . $domdef['name'] . ' TYPE ' . build_datatype($domdef);
    }
    if (isset($olddef['default']) && $olddef['default'] != '' && $domdef['default'] == '') {
        $lsql[] = 'ALTER DOMAIN ' . $domdef['name'] . ' DROP DEFAULT';
    }
    if (isset($olddef['default']) && $domdef['default'] != '' && $olddef['default'] != $domdef['default']) {
        $lsql[] = 'ALTER DOMAIN ' . $domdef['name'] . ' SET DEFAULT ' . $domdef['default'];
    }
    if (isset($olddef['check']) && !empty($olddef['check']) && (empty($domdef['check']) || $olddef['check'] != $domdef['check'])) {
        $lsql[] = 'ALTER DOMAIN ' . $domdef['name'] . ' DROP CONSTRAINT';
    }
    if (isset($olddef['check']) && $olddef['check'] != $domdef['check']) {
        $lsql[] = 'ALTER DOMAIN ' . $domdef['name'] . ' ADD CHECK ' . $domdef['check'];
    }
    foreach ($lsql as $sql) {
        if (DEBUG) {
            add_debug($sql, __FILE__, __LINE__);
        }
        if (!@fbird_query($dbhandle, $sql)) {
            $ib_error = fbird_errmsg() . "<br>\n>";
            return FALSE;
        }
    }
    return TRUE;
}
Exemplo n.º 11
0
function get_tables()
{
    global $dbhandle, $ib_error, $s_tables, $s_fields, $s_foreigns, $s_primaries, $s_uniques, $s_login;
    global $s_charsets, $s_tables_counts, $s_views_counts, $s_tables_def, $s_tables_comp;
    $previous = $s_tables;
    $s_tables = array();
    $s_fields = array();
    // get the tablenames, owner and view flag
    $sql = 'SELECT RDB$RELATION_NAME AS RNAME,' . ' RDB$VIEW_BLR AS VBLR,' . ' RDB$OWNER_NAME AS OWNER' . ' FROM RDB$RELATIONS' . ' WHERE RDB$SYSTEM_FLAG=0' . ' ORDER BY RDB$RELATION_NAME';
    $res = @fbird_query($dbhandle, $sql) or ib_error(__FILE__, __LINE__, $sql);
    if (!is_resource($res)) {
        return FALSE;
    }
    // initialize $s_tables[]
    while ($row = fbird_fetch_object($res)) {
        $tablename = trim($row->RNAME);
        $s_tables[$tablename]['status'] = isset($previous[$tablename]) ? $previous[$tablename]['status'] : 'close';
        $s_tables[$tablename]['is_view'] = isset($row->VBLR) && $row->VBLR !== NULL ? TRUE : FALSE;
        $s_tables[$tablename]['owner'] = trim($row->OWNER);
        $s_tables[$tablename]['privileges'] = array();
    }
    fbird_free_result($res);
    unset($previous);
    // get privileges on tables for the current user and for the role used at login
    $sql = 'SELECT R.RDB$RELATION_NAME AS RNAME,' . ' P1.RDB$PRIVILEGE AS PRIV' . ' FROM RDB$RELATIONS R' . ' INNER JOIN RDB$USER_PRIVILEGES P1' . ' ON R.RDB$RELATION_NAME=P1.RDB$RELATION_NAME' . ' WHERE R.RDB$SYSTEM_FLAG=0' . " AND (P1.RDB\$USER='******'user'] . "' OR P1.RDB\$USER='******')";
    if (!empty($s_login['role'])) {
        $sql .= ' UNION' . ' SELECT R.RDB$RELATION_NAME AS RNAME,' . ' P2.RDB$PRIVILEGE AS PRIV' . ' FROM RDB$USER_PRIVILEGES P1' . ' INNER JOIN RDB$USER_PRIVILEGES P2 ON P1.RDB$RELATION_NAME=P2.RDB$USER' . ' INNER JOIN RDB$RELATIONS R ON R.RDB$RELATION_NAME=P2.RDB$RELATION_NAME' . " WHERE P1.RDB\$PRIVILEGE='M'" . ' AND R.RDB$SYSTEM_FLAG=0' . " AND P1.RDB\$RELATION_NAME='" . $s_login['role'] . "'" . " AND (P1.RDB\$USER='******'user'] . "' OR P1.RDB\$USER='******')";
    }
    $res = @fbird_query($dbhandle, $sql) or ib_error(__FILE__, __LINE__, $sql);
    while ($row = fbird_fetch_object($res)) {
        $s_tables[trim($row->RNAME)]['privileges'][] = trim($row->PRIV);
    }
    fbird_free_result($res);
    // find the check, not null, unique, pk and fk and  constraints
    $sql = 'SELECT RC.RDB$RELATION_NAME TNAME,' . ' RC.RDB$CONSTRAINT_TYPE RTYPE,' . ' RC.RDB$CONSTRAINT_NAME CNAME,' . ' RC.RDB$INDEX_NAME INAME,' . ' CC.RDB$TRIGGER_NAME TRIGNAME,' . ' SE.RDB$FIELD_NAME SENAME,' . ' SE.RDB$FIELD_POSITION POS,' . ' DP.RDB$FIELD_NAME DPNAME' . ' FROM RDB$RELATION_CONSTRAINTS RC' . ' LEFT JOIN RDB$CHECK_CONSTRAINTS CC' . ' ON RC.RDB$CONSTRAINT_NAME=CC.RDB$CONSTRAINT_NAME' . " AND RC.RDB\$CONSTRAINT_TYPE='CHECK'" . ' LEFT JOIN RDB$INDEX_SEGMENTS SE' . ' ON RC.RDB$INDEX_NAME=SE.RDB$INDEX_NAME' . ' LEFT JOIN RDB$DEPENDENCIES DP' . ' ON CC.RDB$TRIGGER_NAME=DP.RDB$DEPENDENT_NAME' . ' ORDER BY RC.RDB$RELATION_NAME';
    $res = @fbird_query($dbhandle, $sql) or ib_error(__FILE__, __LINE__, $sql);
    // reset the index infos
    $s_foreigns = array();
    $s_primaries = array();
    $s_uniques = array();
    $constraints = array();
    while ($row = fbird_fetch_object($res)) {
        $cname = trim($row->CNAME);
        switch (trim($row->RTYPE)) {
            case 'CHECK':
                $constraints[trim($row->TNAME)][trim($row->DPNAME)]['check'] = $cname;
                break;
            case 'UNIQUE':
                $constraints[trim($row->TNAME)][trim($row->SENAME)]['unique'] = $cname;
                $s_uniques[$cname]['index'] = trim($row->INAME);
                $s_uniques[$cname]['cols'] = isset($s_uniques[$cname]['cols']) ? $s_uniques[$cname]['cols']++ : 1;
                break;
            case 'FOREIGN KEY':
                $constraints[trim($row->TNAME)][trim($row->SENAME)]['foreign'] = $cname;
                $s_foreigns[$cname]['index'] = trim($row->INAME);
                $s_foreigns[$cname]['cols'] = isset($s_foreigns[$cname]['cols']) ? $s_foreigns[$cname]['cols']++ : 1;
                break;
            case 'PRIMARY KEY':
                $constraints[trim($row->TNAME)][trim($row->SENAME)]['primary'] = $cname;
                $s_primaries[$cname]['index'] = trim($row->INAME);
                $s_primaries[$cname]['cols'] = isset($s_primaries[$cname]['cols']) ? $s_primaries[$cname]['cols']++ : 1;
                break;
        }
    }
    fbird_free_result($res);
    //     debug_var($sql);
    //     debug_var($constraints);
    //     debug_var($s_foreigns);
    //     debug_var($s_primaries);
    // find the field properties for all non-system tables
    $sql = 'SELECT DISTINCT R.RDB$FIELD_NAME AS FNAME,' . ' R.RDB$NULL_FLAG AS NFLAG,' . ' R.RDB$DEFAULT_SOURCE AS DSOURCE,' . ' R.RDB$FIELD_POSITION,' . ' R.RDB$RELATION_NAME AS TNAME,' . ' R.RDB$COLLATION_ID AS COLLID,' . ' F.RDB$FIELD_NAME AS DNAME,' . ' F.RDB$FIELD_TYPE AS FTYPE,' . ' F.RDB$FIELD_SUB_TYPE AS STYPE,' . ' F.RDB$FIELD_LENGTH AS FLEN,' . ' F.RDB$COMPUTED_SOURCE AS CSOURCE,' . ' F.RDB$FIELD_PRECISION AS FPREC,' . ' F.RDB$FIELD_SCALE AS FSCALE,' . ' F.RDB$SEGMENT_LENGTH AS SEGLEN,' . ' F.RDB$CHARACTER_SET_ID AS CHARID,' . ' D.RDB$LOWER_BOUND AS LBOUND,' . ' D.RDB$UPPER_BOUND AS UBOUND' . ' FROM RDB$RELATION_FIELDS R ' . ' JOIN RDB$FIELDS F ON R.RDB$FIELD_SOURCE=F.RDB$FIELD_NAME' . ' LEFT JOIN RDB$FIELD_DIMENSIONS D ON R.RDB$FIELD_SOURCE=D.RDB$FIELD_NAME' . ' WHERE F.RDB$SYSTEM_FLAG=0' . ' ORDER BY R.RDB$FIELD_POSITION';
    $res = @fbird_query($dbhandle, $sql) or ib_error(__FILE__, __LINE__, $sql);
    //initialize $s_fields[]
    $idx = 0;
    while ($row = fbird_fetch_object($res)) {
        $tname = trim($row->TNAME);
        $field = $s_fields[$tname][$idx]['name'] = trim($row->FNAME);
        if (strpos($row->DNAME, 'RDB$') !== 0) {
            $s_fields[$tname][$idx]['domain'] = 'Yes';
            $s_fields[$tname][$idx]['type'] = trim($row->DNAME);
        } else {
            $s_fields[$tname][$idx]['stype'] = isset($row->STYPE) ? $row->STYPE : NULL;
            $s_fields[$tname][$idx]['type'] = get_datatype($row->FTYPE, $s_fields[$tname][$idx]['stype']);
        }
        if ($s_fields[$tname][$idx]['type'] == 'VARCHAR' || $s_fields[$tname][$idx]['type'] == 'CHARACTER') {
            $s_fields[$tname][$idx]['size'] = $row->FLEN;
        }
        // field is defined as NOT NULL
        if (!empty($row->NFLAG)) {
            $s_fields[$tname][$idx]['notnull'] = 'Yes';
        }
        // this field is computed
        if (isset($row->CSOURCE)) {
            $s_fields[$tname][$idx]['comp'] = 'Yes';
            $s_fields[$tname][$idx]['csource'] = FALSE;
        }
        // this field has a default value
        if (isset($row->DSOURCE)) {
            $s_fields[$tname][$idx]['default'] = 'Yes';
            $s_fields[$tname][$idx]['dsource'] = FALSE;
        }
        if ($s_fields[$tname][$idx]['type'] == 'DECIMAL' or $s_fields[$tname][$idx]['type'] == 'NUMERIC') {
            $s_fields[$tname][$idx]['prec'] = $row->FPREC;
            $s_fields[$tname][$idx]['scale'] = -$row->FSCALE;
        }
        if ($s_fields[$tname][$idx]['type'] == 'BLOB') {
            $s_fields[$tname][$idx]['segsize'] = $row->SEGLEN;
        }
        $s_fields[$tname][$idx]['charset'] = isset($row->CHARID) ? $s_charsets[$row->CHARID]['name'] : NULL;
        $s_fields[$tname][$idx]['collate'] = isset($row->COLLID) && $row->COLLID != 0 && isset($s_charsets[$row->CHARID]['collations'][$row->COLLID]) ? $s_charsets[$row->CHARID]['collations'][$row->COLLID] : NULL;
        // optional array dimensions
        if (isset($row->LBOUND)) {
            $s_fields[$tname][$idx]['lower_bound'] = $row->LBOUND;
            $s_fields[$tname][$idx]['upper_bound'] = $row->UBOUND;
        }
        // column constraints
        foreach (array('check', 'unique', 'foreign', 'primary') as $ctype) {
            if (isset($constraints[$tname][$field][$ctype])) {
                $s_fields[$tname][$idx][$ctype] = $constraints[$tname][$field][$ctype];
            }
        }
        $idx++;
    }
    //     debug_var($s_fields);
    $quote = identifier_quote($s_login['dialect']);
    foreach ($s_tables as $name => $properties) {
        if ($s_tables_def == TRUE) {
            $s_fields = get_table_defaults_sources($name, $s_fields);
        }
        if ($s_tables_comp == TRUE) {
            $s_fields = get_table_computed_sources($name, $s_fields);
        }
        if (!in_array('S', $properties['privileges'])) {
            continue;
        }
        if ($properties['is_view'] == FALSE && $s_tables_counts == TRUE || $properties['is_view'] == TRUE && $s_views_counts == TRUE) {
            $sql = 'SELECT COUNT(*) AS CNT FROM ' . $quote . $name . $quote;
            $res = fbird_query($dbhandle, $sql) or $ib_error .= fbird_errmsg() . "<br>\n";
            if (is_resource($res)) {
                $row = fbird_fetch_object($res);
                $s_tables[$name]['count'] = $row->CNT;
                fbird_free_result($res);
            }
        }
    }
    return TRUE;
}
Exemplo n.º 12
0
 // execute command/script by isql
 if (isset($isql_flag) && empty($error)) {
     list($binary_output, $binary_error) = isql_execute($sql_script);
     $s_sql['buffer'] = '';
     array_shift($binary_output);
     // discard the first line
     foreach ($binary_output as $line) {
         $s_sql['buffer'] .= nl2br(str_replace(' ', '&nbsp;', $line)) . "<br>\n";
     }
 } elseif ($s_connected == TRUE && empty($error)) {
     $s_sql['more'] = FALSE;
     $results = array();
     foreach ($lines as $lnr => $cmd) {
         $cnt = 0;
         $trans = fbird_trans(TRANS_WRITE, $dbhandle);
         $res = @fbird_query($trans, $cmd) or $ib_error = fbird_errmsg();
         // if sql_output-panel is open
         $idx = get_panel_index($s_sql_panels, 'sql_output');
         if ($s_sql_panels[$idx][2] == 'open') {
             // if the query have result rows
             if (is_resource($res) && @fbird_num_fields($res) > 0) {
                 $fieldinfo[$lnr] = get_field_info($res);
                 // save the rows for the output in the sql_output panel
                 while ($row = fbird_fetch_object($res)) {
                     $results[$lnr][] = get_object_vars($row);
                     $cnt++;
                     if ($cnt >= SHOW_OUTPUT_ROWS && !isset($_POST['sql_display_all'])) {
                         $s_sql['more'] = TRUE;
                         break;
                     }
                 }
Exemplo n.º 13
0
function get_roles()
{
    global $dbhandle;
    $sql = 'SELECT R.RDB$ROLE_NAME AS NAME,' . ' R.RDB$OWNER_NAME AS OWNER,' . ' P.RDB$USER AS MEMBER' . ' FROM RDB$ROLES R' . ' LEFT JOIN RDB$USER_PRIVILEGES P' . ' ON R.RDB$ROLE_NAME=P.RDB$RELATION_NAME' . " AND P.RDB\$PRIVILEGE='M'" . 'ORDER BY R.RDB$ROLE_NAME';
    $res = fbird_query($dbhandle, $sql) or ib_error();
    $roles = array();
    $lastone = '';
    while ($obj = fbird_fetch_object($res)) {
        $rname = trim($obj->NAME);
        $member = isset($obj->MEMBER) ? trim($obj->MEMBER) : '';
        if ($rname == $lastone) {
            $roles[$rname]['members'][] = $member;
            continue;
        }
        $roles[$rname]['owner'] = trim($obj->OWNER);
        $roles[$rname]['members'] = !empty($member) ? array($member) : array();
        $lastone = $rname;
    }
    return $roles;
}
function fk_values($table, $column, $value)
{
    $sql = sprintf("SELECT * FROM %s WHERE %s='%s'", $table, $column, $value);
    $res = fbird_query($GLOBALS['dbhandle'], $sql) or ib_error(__FILE__, __LINE__, $sql);
    if ($row = fbird_fetch_object($res)) {
        $close = "<a href='javascript:hide(\"fk\");'>[C]</a>";
        $html = "<table class=\"table table-bordered tsep\">\n<tr align=\"left\">\n<th colspan=\"2\"><nobr>" . $close . '&nbsp;&nbsp;' . $sql . "</nobr></th></tr>\n";
        foreach ($GLOBALS['s_fields'][$table] as $field) {
            $value = $field['type'] == 'BLOB' ? '<i>BLOB</i>' : trim($row->{$field}['name']);
            $html .= sprintf("<tr>\n<td class=\"wttr wttr1\">%s:</td><td class=\"wttr2\"><nobr>%s</nobr></td>\n</tr>\n", $field['name'], $value);
        }
        $html .= "</table>\n";
    } else {
        $html = "Error!\n";
    }
    fbird_free_result($res);
    header('Content-Type: text/html;charset=' . $GLOBALS['charset']);
    echo $html;
}
Exemplo n.º 15
0
function drop_generator($name)
{
    global $generators, $dbhandle, $ib_error;
    $lsql = 'DELETE FROM RDB$GENERATORS WHERE RDB$GENERATOR_NAME=\'' . fb_escape_string($name) . "'";
    if (!@fbird_query($dbhandle, $lsql)) {
        $ib_error = fbird_errmsg();
    } else {
        // remove the dropped generator from the array
        $idx = get_generator_idx($name);
        array_splice($generators, $idx, 1);
    }
}
function print_rows_nosp($wt)
{
    global $dbhandle;
    $types = get_column_types($wt['table'], $wt['columns']);
    $class = 'wttr2';
    $quote = identifier_quote($GLOBALS['s_login']['dialect']);
    $sql = 'SELECT ';
    $sql .= $quote . implode($quote . ',' . $quote, $wt['columns']) . $quote . ' FROM ' . $quote . $wt['table'] . $quote;
    $sql .= $wt['condition'] != '' ? ' WHERE ' . $wt['condition'] : '';
    if (!empty($wt['order'])) {
        $sql .= ' ORDER BY ' . $wt['order'] . ' ' . $wt['direction'];
    }
    $sql .= ' ROWS ' . $wt['start'] . ' TO ' . ($wt['start'] + $wt['rows'] - 1);
    $res = @fbird_query($dbhandle, $sql) or ib_error(__FILE__, __LINE__, $sql);
    $col_count = count($wt['columns']);
    echo "  <tbody>\n";
    for ($i = 0; $i < $wt['rows']; $i++) {
        $obj = fbird_fetch_object($res);
        // stop, if there are no more rows
        if (!is_object($obj)) {
            break;
        }
        $class = $class == 'wttr1' ? 'wttr2' : 'wttr1';
        echo '    <tr class="wttr ' . $class . '">';
        $arr = get_object_vars($obj);
        for ($k = 0; $k < $col_count; $k++) {
            if (!isset($arr[$wt['columns'][$k]])) {
                print_value($wt, NULL, NULL);
            } else {
                print_value($wt, $arr[$wt['columns'][$k]], $types[$wt['columns'][$k]], $wt['columns'][$k], $obj);
            }
        }
        // get parameter for the edit and/or del link
        if ($wt['edit'] == TRUE || $wt['delete'] == TRUE) {
            build_editdel_links($obj, $wt['edit'], $wt['delete']);
        }
        echo "    </tr>\n";
    }
    echo "  </tbody>\n";
    fbird_free_result($res);
}
Exemplo n.º 17
0
function get_trigger_source($name)
{
    global $dbhandle;
    $tsource = '';
    $lsql = 'SELECT RDB$TRIGGER_SOURCE AS TSOURCE' . ' FROM RDB$TRIGGERS' . " WHERE RDB\$TRIGGER_NAME='" . $name . "'";
    $res = fbird_query($dbhandle, $lsql) or ib_error(__FILE__, __LINE__, $lsql);
    $obj = fbird_fetch_object($res);
    if (is_object($obj)) {
        $bid = fbird_blob_open($obj->TSOURCE);
        $arr = fbird_blob_info($obj->TSOURCE);
        // $arr[0] holds the blob length
        $tsource = trim(fbird_blob_get($bid, $arr[0]));
        fbird_blob_close($bid);
        // discard the 'AS ' from the source-string
        $tsource = substr($tsource, 3);
    }
    fbird_free_result($res);
    return $tsource;
}
Exemplo n.º 18
0
function get_column_fk_defs($cname, $iname)
{
    global $dbhandle;
    $defs = array('fk_name' => $cname);
    $trans = fbird_trans(TRANS_READ, $dbhandle);
    $sql = 'SELECT RDB$UPDATE_RULE,' . ' RDB$DELETE_RULE' . ' FROM RDB$REF_CONSTRAINTS' . " WHERE RDB\$CONSTRAINT_NAME='" . $cname . "'";
    $res = @fbird_query($trans, $sql) or ib_error(__FILE__, __LINE__, $sql);
    if ($res && ($row = fbird_fetch_row($res))) {
        fbird_free_result($res);
    }
    $defs['on_update'] = trim($row[0]);
    $defs['on_delete'] = trim($row[1]);
    $sql = 'SELECT I2.RDB$RELATION_NAME,' . ' SE.RDB$FIELD_NAME' . ' FROM RDB$INDICES I1' . ' INNER JOIN RDB$INDICES I2 ON I1.RDB$FOREIGN_KEY=I2.RDB$INDEX_NAME' . ' INNER JOIN RDB$INDEX_SEGMENTS SE ON I2.RDB$INDEX_NAME=SE.RDB$INDEX_NAME' . " WHERE I1.RDB\$INDEX_NAME='" . $iname . "'";
    $res = @fbird_query($trans, $sql) or ib_error(__FILE__, __LINE__, $sql);
    if ($res && ($row = fbird_fetch_row($res))) {
        fbird_free_result($res);
    }
    $defs['fk_table'] = trim($row[0]);
    $defs['fk_column'] = trim($row[1]);
    fbird_commit($trans);
    return $defs;
}