From 90edcbf8c8ff8c8328763b719b3b325b93583513 Mon Sep 17 00:00:00 2001 From: Clemens Schwaighofer Date: Mon, 16 Oct 2023 16:11:34 +0900 Subject: [PATCH] Admin pages updates --- www/admin/class_test.db.php | 32 ++- www/admin/class_test.db.query-placeholder.php | 208 ++++++++++++++++++ www/admin/class_test.db.single.php | 61 +---- www/admin/class_test.php | 5 +- 4 files changed, 236 insertions(+), 70 deletions(-) create mode 100644 www/admin/class_test.db.query-placeholder.php diff --git a/www/admin/class_test.db.php b/www/admin/class_test.db.php index c791d8a9..848d0f13 100644 --- a/www/admin/class_test.db.php +++ b/www/admin/class_test.db.php @@ -38,9 +38,10 @@ print ""; print "" . $PAGE_NAME . ""; print ""; print '
Class Test Master
'; -print '
Class Test DB Types
'; +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 Aciont
'; +print '
Class Test DB Single Query tests
'; print '

' . $PAGE_NAME . '

'; print "LOGFILE NAME: " . $db->log->getLogFile() . "
"; @@ -549,11 +550,13 @@ print ""; print "PREPARE QUERIES
"; // READ PREPARE -$q_prep = "SELECT test_foo_id, test, some_bool, string_a, number_a, " - . "number_a_numeric, some_time " - . "FROM test_foo " - . "WHERE test = $1 " - . "ORDER BY test_foo_id DESC LIMIT 5"; +$q_prep = <<dbPrepare('sel_test_foo', $q_prep) === false) { print "Error in sel_test_foo prepare
"; } else { @@ -681,16 +684,27 @@ echo "
"; $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] Error in pgb_sel_test_foo prepare
"; + 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] Error in pgb_sel_test_foo prepare
"; + 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 diff --git a/www/admin/class_test.db.query-placeholder.php b/www/admin/class_test.db.query-placeholder.php new file mode 100644 index 00000000..6da93482 --- /dev/null +++ b/www/admin/class_test.db.query-placeholder.php @@ -0,0 +1,208 @@ + 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 QUERY PLACEHOLDER'; +print ""; +print "" . $PAGE_NAME . ""; +print ""; +print '
Class Test Master
'; +print '

' . $PAGE_NAME . '

'; + +print "LOGFILE NAME: " . $db->log->getLogFile() . "
"; +print "LOGFILE ID: " . $db->log->getLogFileId() . "
"; +print "DBINFO: " . $db->dbInfo() . "
"; +// 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 "SERVER ENCODING: " . $db->dbVersionInfo('server_encoding') . "
"; +if (($dbh = $db->dbGetDbh()) instanceof \PgSql\Connection) { + print "ALL OUTPUT [TEST]:
" . print_r(pg_version($dbh), true) . "

"; +} else { + print "NO DB HANDLER
"; +} +// turn on debug replace for placeholders +$db->dbSetDebugReplacePlaceholder(true); + +print "TRUNCATE test_foo
"; +$db->dbExec("TRUNCATE test_foo"); + +$uniqid = \CoreLibs\Create\Uids::uniqIdShort(); +$binary_data = $db->dbEscapeBytea(file_get_contents('class_test.db.php') ?: ''); +$query_params = [ + $uniqid, + true, + 'STRING A', + 2, + 2.5, + 1, + date('H:m:s'), + date('Y-m-d H:i:s'), + json_encode(['a' => 'string', 'b' => 1, 'c' => 1.5, 'f' => true, 'g' => ['a', 1, 1.5]]), + null, + '{"a", "b"}', + '{1,2}', + '{"(array Text A, 5, 8.8)","(array Text B, 10, 15.2)"}', + '("Text", 4, 6.3)', + $binary_data +]; + +$query_insert = <<dbExecParams($query_insert, $query_params); +echo "*
"; +echo "INSERT ALL COLUMN TYPES: " + . 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 "
"; + +// convert placeholder tests +// ? -> $n +// :name -> $n + +// other way around (just visual) +$test_queries = [ + 'skip' => [ + 'query' => << [], + 'direction' => 'pg', + ], + 'a?' => [ + 'query' => << [\CoreLibs\Create\Uids::uniqIdShort(), 'string A-1', 1234], + 'direction' => 'pg', + ], + 'b:' => [ + 'query' => << [ + ':test' => \CoreLibs\Create\Uids::uniqIdShort(), + ':string_a' => 'string B-1', + ':number_a' => 5678 + ], + 'direction' => 'pg', + ], +]; + +$db->dbSetConvertPlaceholder(true); +foreach ($test_queries as $info => $data) { + $query = $data['query']; + $params = $data['params']; + $direction = $data['direction']; + // print "[$info] Convert: " + // . Support::printAr(ConvertPlaceholder::convertPlaceholderInQuery($query, $params, $direction)) + // . "
"; + if ($db->dbCheckQueryForSelect($query)) { + $row = $db->dbReturnRowParams($query, $params); + print "[$info] SELECT: " . Support::prAr($row) . "
"; + } else { + $db->dbExecParams($query, $params); + } + print "[$info] " . Support::printAr($db->dbGetPlaceholderConverted()) . "
"; + echo "
"; +} + +echo "dbReturn read:
"; +while ( + is_array($res = $db->dbReturnParams( + <<"; +} + +print "CursorExt: " . Support::prAr($db->dbGetCursorExt(<<dbReturnRowParams(<<dbGetPlaceholderConverted()) . "
"; + +print ""; +$db->log->debug('DEBUGEND', '==================================== [END]'); + +// __END__ diff --git a/www/admin/class_test.db.single.php b/www/admin/class_test.db.single.php index 256dc902..ea196ff0 100644 --- a/www/admin/class_test.db.single.php +++ b/www/admin/class_test.db.single.php @@ -16,7 +16,7 @@ define('USE_DATABASE', true); // sample config require 'config.php'; // define log file id -$LOG_FILE_ID = 'classTest-db-single'; +$LOG_FILE_ID = 'classTest-db-query-placeholders'; ob_end_flush(); use CoreLibs\Debug\Support; @@ -30,7 +30,7 @@ $log = new CoreLibs\Logging\Logging([ $db = new CoreLibs\DB\IO(DB_CONFIG, $log); $db->log->debug('START', '=============================>'); -$PAGE_NAME = 'TEST CLASS: DB SINGLE'; +$PAGE_NAME = 'TEST CLASS: DB QUERY PLACEHOLDERS'; print ""; print "" . $PAGE_NAME . ""; print ""; @@ -65,63 +65,6 @@ function testDBS(\CoreLibs\DB\IO $dbc): void $dbc->dbReturnRow("SELECT test FROM test_foo LIMIT 1"); } -$uniqid = \CoreLibs\Create\Uids::uniqIdShort(); -$binary_data = $db->dbEscapeBytea(file_get_contents('class_test.db.php') ?: ''); -$query_params = [ - $uniqid, - true, - 'STRING A', - 2, - 2.5, - 1, - date('H:m:s'), - date('Y-m-d H:m:s'), - json_encode(['a' => 'string', 'b' => 1, 'c' => 1.5, 'f' => true, 'g' => ['a', 1, 1.5]]), - null, - '{"a", "b"}', - '{1,2}', - '{"(array Text A, 5, 8.8)","(array Text B, 10, 15.2)"}', - '("Text", 4, 6.3)', - $binary_data -]; - -$query_insert = <<dbExecParams($query_insert, $query_params); -$query_select = <<dbReturnRowParams($query_select, [$uniqid]); -if (is_array($res)) { - var_dump($res); -} - testDBS($db); print ""; diff --git a/www/admin/class_test.php b/www/admin/class_test.php index c8f528f3..75c9e516 100644 --- a/www/admin/class_test.php +++ b/www/admin/class_test.php @@ -69,9 +69,10 @@ print ""; // key: file name, value; name $test_files = [ 'class_test.db.php' => 'Class Test: DB', - 'class_test.db.types.php' => 'Class Test: DB COLUMN TYPES', - 'class_test.db.single.php' => 'Class Test: DB SINGLE', + 'class_test.db.types.php' => 'Class Test: DB column type convert', + 'class_test.db.query-placeholder.php' => 'Class Test: DB query placeholder convert', 'class_test.db.dbReturn.php' => 'Class Test: DB dbReturn', + 'class_test.db.single.php' => 'Class Test: DB single query tests', 'class_test.convert.colors.php' => 'Class Test: CONVERT COLORS', 'class_test.check.colors.php' => 'Class Test: CHECK COLORS', 'class_test.mime.php' => 'Class Test: MIME',