BASE . LOG, 'log_file_id' => $LOG_FILE_ID, 'log_per_date' => true, ]); // db connection and attach logger $db = new CoreLibs\DB\IO(DB_CONFIG, $log); $db->log->debug('START', '=============================>'); $PAGE_NAME = 'TEST CLASS: DB'; print ""; print "" . $PAGE_NAME . ""; print ""; print '
Class Test Master
'; print '
Class Test DB row type convert to PHP type
'; print '
Class Test DB Query Placeholder convert
'; print '
Class Test DB dbReturn
'; print '
Class Test DB Single Query tests
'; print '

' . $PAGE_NAME . '

'; print "LOGFILE NAME: " . $db->log->getLogFile() . "
"; print "LOGFILE ID: " . $db->log->getLogFileId() . "
"; print "DBINFO: " . $db->dbInfo() . "
"; echo "DB_CONFIG_SET constant:
" . print_r(DB_CONFIG, true) . "

"; // DB client encoding print "DB client encoding: " . $db->dbGetEncoding() . "
"; print "DB search path: " . $db->dbGetSchema() . "
"; $to_db_version = '15.2'; print "VERSION DB: " . $db->dbVersion() . "
"; print "VERSION LONG DB: " . $db->dbVersionInfo('server', false) . "
"; print "VERSION NUMERIC DB: " . $db->dbVersionNumeric() . "
"; print "SERVER ENCODING: " . $db->dbVersionInfo('server_encoding') . "
"; print "ALL PG VERSION PARAMETERS:
" . print_r($db->dbVersionInfoParameters(), true) . "

"; if (($dbh = $db->dbGetDbh()) instanceof \PgSql\Connection) { print "ALL OUTPUT [TEST]:
" . print_r(pg_version($dbh), true) . "

"; } else { print "NO DB HANDLER
"; } print "DB Version smaller $to_db_version: " . $db->dbCompareVersion('<' . $to_db_version) . "
"; print "DB Version smaller than $to_db_version: " . $db->dbCompareVersion('<=' . $to_db_version) . "
"; print "DB Version equal $to_db_version: " . $db->dbCompareVersion('=' . $to_db_version) . "
"; print "DB Version bigger than $to_db_version: " . $db->dbCompareVersion('>=' . $to_db_version) . "
"; print "DB Version bigger $to_db_version: " . $db->dbCompareVersion('>' . $to_db_version) . "
"; $db->dbSetEncoding('SJIS'); print "ENCODING TEST: " . $db->dbVersionInfo('client_encoding') . "/" . $db->dbGetEncoding() . "
"; $db->dbResetEncoding(); // empty calls, none of the below should fail // $db->dbGetCursor(); // $db->dbGetCursorExt(); // $db->dbGetCursorPos('SELECT foo', ['bar']); // $db->dbGetCursorNumRows('SELECT foo', ['bar']); // $db->dbGetInsertPKName(); // $db->dbGetInsertPK(); // $db->dbGetReturningExt(); $db->dbGetReturningExt('foo'); $db->dbGetReturningExt('foo', 0); $db->dbGetReturningExt(pos:0); // $db->dbGetReturningArray(); // $db->dbGetNumRows(); // $db->dbGetNumFields(); // $db->dbGetFieldNames(); // $db->dbGetFieldTypes(); // $db->dbGetFieldNameTypes(); // $db->dbGetFieldName(0); // $db->dbGetFieldType(0); $db->dbGetFieldType('foo'); // $db->dbGetPrepareCursorValue('foo', 'bar'); // TEST CACHE READS $res = $db->dbReturn("SELECT * FROM max_test"); print "DB RETURN ROWS: " . $db->dbGetNumRows() . "
"; while (is_array($res = $db->dbReturn("SELECT * FROM max_test", DbIo::USE_CACHE, true))) { print "UUD/TIME: " . $res['uid'] . "/" . $res['time'] . "
"; } print "CACHED DATA:
" . print_r($db->dbGetCursorExt(), true) . "

"; while (is_array($res = $db->dbReturn("SELECT * FROM max_test", DbIo::USE_CACHE))) { print "[CACHED] UID/TIME: " . $res['uid'] . "/" . $res['time'] . "
"; // print "****RES:
" . print_r($res, true) . "

"; } // print "CACHED REREAD DATA:
" . print_r($db->dbGetCursorExt(), true) . "

"; while (is_array($res = $db->dbReturn("SELECT * FROM max_test", DbIo::NO_CACHE))) { print "[NO CACHE] UID.TIME: " . $res['uid'] . "/" . $res['time'] . "
"; // print "****RES:
" . print_r($res, true) . "

"; } print "NO CACHED DATA:
" . print_r($db->dbGetCursorExt(), true) . "

"; // alternate check for valid data // while (($res = $db->dbReturn("SELECT * FROM max_test")) !== false) { // print "[CACHED] TIME: " . $res['time'] . "
"; // } // while (is_array($res = $db->dbReturn("SELECT * FROM max_test", DbIo::USE_CACHE))) { // print "UUD/TIME: " . $res['uid'] . "/" . $res['time'] . "
"; // } // dbReturn tests on separate page print "
"; print "dbReturn CACHE tests
"; print 'Class Test DB dbReturn
'; print "
"; print "
";

if (($dbh = $db->dbGetDbh()) instanceof \PgSql\Connection) {
	print "SOCKET: " . pg_socket($dbh) . "
"; } else { print "NO SOCKET
"; } // truncate test_foo table before testing print "TRUNCATE test_foo
"; $query = "TRUNCATE test_foo"; $db->dbExec($query); print "TRUNCATE test_foobar
"; $query = "TRUNCATE test_foobar"; $db->dbExec($query); $status = $db->dbExec("INSERT INTO test_foo (test, number_a) VALUES " . "('FOO TEST " . time() . "', 1) RETURNING test, number_a"); print "DIRECT INSERT STATUS: " . Support::printToString($status) . " |
" . "QUERY: " . $db->dbGetQuery() . " |
" . "DB OBJECT:
" . print_r($status, true) . "
| " . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING EXT[test]: " . print_r($db->dbGetReturningExt('test'), true) . " | " . "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "
"; var_dump($db->dbGetReturningExt()); // same as above but use an EOM string $some_time = time(); $query = <<dbExec($query); print "EOM STRING DIRECT INSERT STATUS: " . Support::printToString($status) . " |
" . "QUERY: " . $db->dbGetQuery() . " |
" . "DB OBJECT:
" . print_r($status, true) . "
| " . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING EXT[test]: " . print_r($db->dbGetReturningExt('test'), true) . " | " . "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "
"; var_dump($db->dbGetReturningExt()); // should throw deprecated error // $db->getReturningExt(); $last_insert_pk = $db->dbGetInsertPK(); print "DIRECT INSERT PREVIOUS INSERTED: " . print_r($db->dbReturnRow("SELECT test_foo_id, test FROM test_foo " . "WHERE test_foo_id = " . (int)$last_insert_pk), true) . "
"; $__last_insert_pk = (int)$last_insert_pk; $query = <<dbReturnRow($query), true) . "
"; print "LAST ERROR: " . $db->dbGetLastError() . "
"; print "
"; $query = <<dbReturnRowParams( $query, [$__last_insert_pk] ), true ) . "
"; // PREPARED INSERT $db->dbPrepare("ins_test_foo", "INSERT INTO test_foo (test) VALUES ($1) RETURNING test"); $status = $db->dbExecute("ins_test_foo", ['BAR TEST ' . time()]); print "PREPARE INSERT[ins_test_foo] STATUS: " . Support::printToString($status) . " |
" . "QUERY: " . Support::printToString($db->dbGetPrepareCursorValue('ins_test_foo', 'query')) . " |
" . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING RETURN: " . print_r($db->dbGetReturningArray(), true) . "
"; print "PREPARE INSERT PREVIOUS INSERTED: " . print_r($db->dbReturnRow("SELECT test_foo_id, test FROM test_foo " . "WHERE test_foo_id = " . (int)$db->dbGetInsertPK()), true) . "
"; print "PREPARE CURSOR RETURN:
"; foreach (['pk_name', 'count', 'query', 'returning_id'] as $key) { print "KEY: " . $key . ': ' . Support::prAr($db->dbGetPrepareCursorValue('ins_test_foo', $key)) . "
"; } $query = <<dbPrepare("ins_test_foo_eom", $query); $status = $db->dbExecute("ins_test_foo_eom", ['EOM BAR TEST ' . time()]); print "EOM STRING PREPARE INSERT[ins_test_foo_eom] STATUS: " . Support::printToString($status) . " |
" . "QUERY: " . Support::printToString($db->dbGetPrepareCursorValue('ins_test_foo_eom', 'query')) . " |
" . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING RETURN: " . print_r($db->dbGetReturningArray(), true) . "
"; echo "*
"; $status = $db->dbExecParams($query, ['EOM BAR TEST PARAMS ' . time()]); print "EOM STRING EXEC PARAMS INSERT STATUS: " . Support::printToString($status) . " |
" . " |
" . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING RETURN: " . print_r($db->dbGetReturningArray(), true) . "
"; // I/S Query $query_insert = <<dbExecParams( $query_insert, [ 'EOM BAR TEST PARAMS MULTI ' . time(), true, 'string a', 1, 1.5, '1h', '2023-01-01 12:12:12', json_encode(['a' => 'b', 'c' => 1]) ] ); $__last_insert_id = $db->dbGetInsertPK(); echo "*
"; print "EOM STRING EXEC PARAMS MULTI INSERT STATUS: " . Support::printToString($status) . " |
" . " |
" . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING RETURN: " . print_r($db->dbGetReturningArray(), true) . "
"; print "EOM STRING EXEC RETURN TEST: " . print_r( $db->dbReturnRowParams( $query_select, [$__last_insert_id] ), true ) . "
"; // B $status = $db->dbExecParams( $query_insert, [ 'EOM BAR TEST PARAMS MULTI NULL ' . time(), true, 'string a', null, null, '1h', null, null ] ); $__last_insert_id = $db->dbGetInsertPK(); echo "*
"; print "EOM STRING EXEC PARAMS MULTI NULL INSERT STATUS: " . Support::printToString($status) . " |
" . " |
" . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING RETURN: " . print_r($db->dbGetReturningArray(), true) . "ERROR: " . $db->dbGetLastError(true) . "
"; print "EOM STRING EXEC RETURN TEST: " . print_r( $db->dbReturnRowParams( $query_select, [$__last_insert_id] ), true ) . "
"; // params > 10 for debug // error catcher $query_insert = <<dbExecParams($query_insert, $query_params); echo "*
"; echo "EOM STRING WITH MORE THAN 10 PARAMETERS: " . Support::printToString($query_params) . " |
" . "QUERY: " . $db->dbGetQuery() . " |
" . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " |
" . "RETURNING EXT:
" . print_r($db->dbGetReturningExt(), true) . "
|
" . "RETURNING RETURN:
" . print_r($db->dbGetReturningArray(), true) . "
|
" . "ERROR: " . $db->dbGetLastError(true) . "
"; echo "
"; // binary insert tests $filename = $db->dbEscapeLiteral('class_test.db.php'); $rand_bin_uid = $db->dbEscapeLiteral(\CoreLibs\Create\Uids::uniqIdShort()); $binary_data = $db->dbEscapeBytea(file_get_contents('class_test.db.php') ?: ''); $query = <<dbExec($query); $__last_insert_id = $db->dbGetInsertPK(); print "BINARY DATA INSERT: " . Support::printToString($status) . " |
" . "QUERY: " . $db->dbGetQuery() . " |
" . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " |
" . "RETURNING EXT:
" . print_r($db->dbGetReturningExt(), true) . "
|
" . "RETURNING RETURN:
" . print_r($db->dbGetReturningArray(), true) . "
|
" . "ERROR: " . $db->dbGetLastError(true) . "
"; echo "*
"; $query = <<dbExecParams($query, [ 'class_test.db.php', $uniqid, $binary_data ]); $__last_insert_id = $db->dbGetInsertPK(); print "BINARY DATA INSERT PARAMS: " . Support::printToString($status) . " |
" . " |
" . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING RETURN: " . print_r($db->dbGetReturningArray(), true) . "ERROR: " . $db->dbGetLastError(true) . "
"; print "BINARY READER: "; $query = <<dbReturnRowParams($query, [$uniqid]); if (is_array($res)) { var_dump($res); $file = $db->dbUnescapeBytea($res['binary_data']); // var_dump($file); } else { print "Execute error"; } echo "
"; // returning test with multiple entries // $status = $db->db_exec( // "INSERT INTO test_foo (test) VALUES " // . "('BAR 1 " . time() . "'), " // . "('BAR 2 " . time() . "'), " // . "('BAR 3 " . time() . "') " // . "RETURNING test_foo_id" // ); $status = $db->dbExec( "INSERT INTO test_foo (test) VALUES " . "('BAR 1 " . time() . "'), " . "('BAR 2 " . time() . "'), " . "('BAR 3 " . time() . "') " . "RETURNING test_foo_id, test" ); print "DIRECT MULTIPLE INSERT WITH RETURN STATUS: " . Support::printToString($status) . " |
" . "QUERY: " . $db->dbGetQuery() . " |
" . "PRIMARY KEYS: " . print_r($db->dbGetInsertPK(), true) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING EXT[test]: " . print_r($db->dbGetReturningExt('test'), true) . " | " . "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "
"; $t_1 = time(); $t_2 = time(); $t_3 = time(); $query = <<dbExec($query); print "EOM STRING DIRECT MULTIPLE INSERT WITH RETURN STATUS: " . Support::printToString($status) . " |
" . "QUERY: " . $db->dbGetQuery() . " |
" . "PRIMARY KEYS: " . print_r($db->dbGetInsertPK(), true) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING EXT[test]: " . print_r($db->dbGetReturningExt('test'), true) . " | " . "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "
"; // no returning, but not needed ; $status = $db->dbExec("INSERT INTO test_foo (test) VALUES ('FOO; TEST " . time() . "')"); print "DIRECT INSERT NO RETURN STATUS: " . Support::printToString($status) . " |
" . "QUERY: " . $db->dbGetQuery() . " |
" . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "
"; $last_insert_pk = $db->dbGetInsertPK(); // is_array read test $q = "SELECT test_foo_id, test FROM test_foo WHERE test_foo_id = " . (int)$last_insert_pk; if (is_array($s_res = $db->dbReturnRow($q)) && !empty($s_res['test'])) { print "WE HAVE DATA FOR: " . Support::printToString($last_insert_pk) . " WITH: " . $s_res['test'] . "
"; } // UPDATE WITH RETURNING $status = $db->dbExec("UPDATE test_foo SET test = 'SOMETHING DIFFERENT', string_a = '" . (string)rand(1, 100) . "' " . "WHERE test_foo_id = " . (int)$last_insert_pk . " RETURNING test_foo.test, string_a"); print "UPDATE WITH PK " . Support::printToString($last_insert_pk) . " RETURN STATUS: " . Support::printToString($status) . " |
" . "QUERY: " . $db->dbGetQuery() . " |
" . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "
"; // UPDATE BUT EOM STYLE $status = $db->dbExecParams( <<" . "QUERY: " . $db->dbGetQuery() . " |
" . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "
"; // a stand alone insert? $db->dbExec("INSERT INTO test_foo (test) VALUES ('STAND ALONE')"); // INSERT WITH NO RETURNING $status = $db->dbExec("INSERT INTO test_foobar (type, integer) VALUES ('WITHOUT DATA', 456)"); print "INSERT WITH NO PRIMARY KEY NO RETURNING STATUS: " . Support::printToString($status) . " |
" . "QUERY: " . $db->dbGetQuery() . " |
" . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "
"; $status = $db->dbExec("INSERT INTO test_foobar (type, integer) VALUES ('WITH DATA', 123) RETURNING type, integer"); print "INSERT WITH NO PRIMARY KEY WITH RETURNING STATUS: " . Support::printToString($status) . " |
" . "QUERY: " . $db->dbGetQuery() . " |
" . "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | " . "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | " . "RETURNING ARRAY: " . print_r($db->dbGetReturningArray(), true) . "
"; print "
"; print "PREPARE QUERIES
"; // READ PREPARE $q_prep = <<dbPrepare('sel_test_foo', $q_prep) === false) { print "Error in sel_test_foo prepare
"; } else { // do not run this in dbFetchArray directly as // dbFetchArray(dbExecute(...)) // this will end in an endless loop $i = 1; $cursor = $db->dbExecute('sel_test_foo', ['SOMETHING DIFFERENT']); while (is_array($res = $db->dbFetchArray($cursor, true))) { print "DB PREP EXEC FETCH ARR: " . $i . ":
" . print_r($res, true) . "

"; $i++; } } // prepre a second time on normal connection if ($db->dbPrepare('sel_test_foo', $q_prep) === false) { print "Error prepareing
"; print "ERROR (dbPrepare on same query): " . $db->dbGetLastError() . "/" . $db->dbGetLastWarning() . "/" . "
" . print_r($db->dbGetCombinedErrorHistory(), true) . "

"; } // sel test with ANY () type $q_prep = "SELECT test_foo_id, test, some_bool, string_a, number_a, " . "number_a_numeric, some_time " . "FROM test_foo " . "WHERE test = ANY($1) " . "ORDER BY test_foo_id DESC LIMIT 5"; if ($db->dbPrepare('sel_test_foo_any', $q_prep) === false) { print "Error in sel_test_foo_any prepare
"; } else { // do not run this in dbFetchArray directly as // dbFetchArray(dbExecute(...)) // this will end in an endless loop $values = [ 'SOMETHING DIFFERENT', 'STAND ALONE', 'I DO NOT EXIST' ]; $query_value = '{' . join(',', $values) . '}'; print "Read: $query_value
"; $cursor = $db->dbExecute('sel_test_foo_any', [ $query_value ]); $i = 1; while (($res = $db->dbFetchArray($cursor, true)) !== false) { print "DB PREP EXEC FETCH ANY ARR: " . $i . ":
" . print_r($res, true) . "

"; $i++; } } echo "
"; print "EOM STYLE STRINGS
"; $test_bar = $db->dbEscapeLiteral('SOMETHING DIFFERENT'); // Test EOM block $q = <<dbReturn($q))) { print "ROW:
" . print_r($res, true) . "

"; } echo "
"; print "DB RETURN PARAMS
"; $q = <<dbReturnParams($q, ['SOMETHING DIFFERENT'])) ) { print "ROW:
" . print_r($res, true) . "

"; } echo "
"; print "DB RETURN PARAMS LIKE
"; $q = <<dbReturnParams($q, ['%string%'])) ) { print "ROW:
" . print_r($res, true) . "

"; } echo "
"; print "DB RETURN PARAMS ANY
"; $q = <<dbReturnParams($q, [$query_value])) ) { print "ROW:
" . print_r($res, true) . "

"; } echo "
"; print "COMPOSITE ELEMENT READ
"; $res = $db->dbReturnRow("SELECT item, count, (item).name, (item).price, (item).supplier_id FROM on_hand"); print "ROW:
" . print_r($res, true) . "
"; var_dump($res); print "Field Name/Types:
" . print_r($db->dbGetFieldNameTypes(), true) . "
"; echo "
"; // NOTE: try to replacate connection still exists if script is run a second time // open pg bouncer connection $db_pgb = new CoreLibs\DB\IO($DB_CONFIG['test_pgbouncer'] ?? [], $log); print "[PGB] DBINFO: " . $db_pgb->dbInfo() . "
"; if ($db->dbPrepare('pgb_sel_test_foo', $q_prep) === false) { print "[PGB] [1] Warning in pgb_sel_test_foo prepare
"; } else { print "[PGB] [1] pgb_sel_test_foo prepare OK
"; } // second prepare if ($db->dbPrepare('pgb_sel_test_foo', $q_prep) === false) { print "[PGB] [2] Warning in pgb_sel_test_foo prepare
"; } else { print "[PGB] [2] pgb_sel_test_foo prepare OK
"; } // same statment name, different query if ( $db->dbPrepare('pgb_sel_test_foo', <<"; } else { print "[PGB] [3] pgb_sel_test_foo prepare OK
"; } $db_pgb->dbClose(); # db write class test $table = 'test_foo'; print "TABLE META DATA: " . DgS::printAr(SetVarType::setArray( $db->dbShowTableMetaData($table) )) . "
"; // insert first, then use primary key to update $primary_key = ''; # unset $db_write_table = ['test', 'string_a', 'number_a', 'some_bool']; $object_fields_not_touch = []; $object_fields_not_update = []; $data = [ 'test' => 'dbWriteDataExt: BOOL TEST SOMETHING ' . time(), 'string_a' => 'SOME TEXT', 'number_a' => 5 ]; $primary_key = $db->dbWriteDataExt( $db_write_table, $primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data ); print "Wrote to DB tabel $table with data " . print_r($data, true) . " and got primary key $primary_key
"; $data = [ 'test' => 'dbWriteDataExt: BOOL TEST ON ' . time(), 'string_a' => '', 'number_a' => 0, 'some_bool' => 1 ]; $primary_key = $db->dbWriteDataExt( $db_write_table, (int)$primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data ); print "Wrote to DB tabel $table with data " . print_r($data, true) . " and got primary key $primary_key
"; $data = [ 'test' => 'dbWriteDataExt: BOOL TEST OFF ' . time(), 'string_a' => null, 'number_a' => null, 'some_bool' => 0 ]; $primary_key = $db->dbWriteDataExt( $db_write_table, (int)$primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data ); print "Wrote to DB tabel $table with data " . print_r($data, true) . " and got primary key $primary_key
"; $data = [ 'test' => 'dbWriteDataExt: BOOL TEST UNSET ' . time() ]; $primary_key = $db->dbWriteDataExt( $db_write_table, (int)$primary_key, $table, $object_fields_not_touch, $object_fields_not_update, $data ); print "Wrote to DB tabel $table with data " . print_r($data, true) . " and got primary key $primary_key
"; // return Array Test $query = "SELECT type, sdate, integer FROM foobar"; $data = $db->dbReturnArray($query, true); print "RETURN ARRAY: " . $db->dbGetNumRows() . ", Full foobar list:
" . print_r($data, true) . "

"; $query = <<dbReturnArrayParams($query, ['schmalz'], true); print "RETURN ARRAY PARAMS: " . $db->dbGetNumRows() . ", Full foobar list:
"
	. print_r($data, true) . "

"; // trigger a warning print "WARNING NEXT
"; // trigger an error print "ERROR NEXT
"; $query = "INSERT invalid FROM invalid"; $data = $db->dbReturnArray($query); print "ERROR (INS ON dbExec): " . $db->dbGetLastError() . "/" . $db->dbGetLastWarning() . "/" . "
" . print_r($db->dbGetCombinedErrorHistory(), true) . "

"; $query = "SELECT invalid FROM invalid"; $data = $db->dbReturnArray($query); print "ERROR (HARD ERROR): " . $db->dbGetLastError() . "/" . $db->dbGetLastWarning() . "/" . "
" . print_r($db->dbGetCombinedErrorHistory(), true) . "

"; // Now a good query will fail $query = "SELECT type, sdate, integer FROM foobar"; $data = $db->dbReturnRow($query, true); print "GOOD SELECT AFTER ERROR: " . $db->dbGetLastError() . "/" . $db->dbGetLastWarning() . "/" . "
" . print_r($db->dbGetCombinedErrorHistory(), true) . "

"; print "GOOD SELECT AFTER ERROR:
" . print_r($data, true) . "

"; /* set error id in dbPrepare dbExecute dbExecAsync dbWriteDataExt dbReturnArray dbReturnRow dbFetchArray (?) dbExec (if not set before) dbReturn dbShowTableMetaData */ // how to handle HARD errors # async test queries /* $db->dbExecAsync( "SELECT test FROM test_foo, (SELECT pg_sleep(10)) as sub " . "WHERE test_foo_id IN (27, 50, 67, 44, 10)" ); echo "WAITING FOR ASYNC: "; $chars = ['|', '/', '-', '\\']; while (($ret = $db->dbCheckAsync()) === true) { if ((list($_, $char) = each($chars)) === FALSE) { reset($chars); list($_, $char) = each($chars); } print $char; sleep(1); flush(); } print "
END STATUS: " . $ret . "
"; // while ($res = $db->dbFetchArray($ret)) while ($res = $db->dbFetchArray()) { echo "RES: " . $res['test'] . "
"; } # test async insert $db->dbExecAsync("INSERT INTO test_foo (Test) VALUES ('ASYNC TEST " . time() . "')"); echo "WAITING FOR ASYNC INSERT: "; while (($ret = $db->dbCheckAsync()) === true) { print " . "; sleep(1); flush(); } print "
END STATUS: " . $ret . " | PK: " . $db->insert_id . "
"; print "ASYNC PREVIOUS INSERTED: " . print_r( $db->dbReturnRow("SELECT test_foo_id, test FROM test_foo WHERE test_foo_id = " . $db->insert_id), true ) . "
"; */ /* $q = "Select * from test_foo"; $test_foo = $db->dbExecAsync($q); print "[ERR] Query: " . $q . "
"; print "[ERR] RESOURCE: $test_foo
"; while (($ret = $db->dbCheckAsync()) === true) { print "[ERR]: $ret
"; sleep(5); } */ // search path check $q = "SHOW search_path"; $cursor = $db->dbExec($q); $data = $db->dbFetchArray($cursor)['search_path'] ?? ''; print "RETURN DATA FOR search_path: " . $data . "
"; // print "RETURN DATA FOR search_path: " . DgS::printAr($data) . "
"; // insert something into test.schema_test and see if we get the PK back $status = $db->dbExec( "INSERT INTO test.schema_test (contents, id) VALUES " . "('TIME: " . (string)time() . "', " . (string)rand(1, 10) . ")" ); print "OTHER SCHEMA INSERT STATUS: " . Support::printToString($status) . " | PK NAME: " . $db->dbGetInsertPKName() . ", PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . "
"; print "NULL TEST DB READ
"; $q = "SELECT uid, null_varchar, null_int FROM test_null_data WHERE uid = 'A'"; $res = $db->dbReturnRow($q); var_dump($res); print "RES: " . DgS::printAr(SetVarType::setArray($res)) . "
"; print "ISSET: " . isset($res['null_varchar']) . "
"; print "EMPTY: " . empty($res['null_varchar']) . "
"; print ""; // __END__