From 3a33f07ae7cb5509434954b87c6e16c886e7f7c4 Mon Sep 17 00:00:00 2001 From: Clemens Schwaighofer Date: Fri, 18 Sep 2026 18:56:43 +0900 Subject: [PATCH] Add DB:IO strip non assoc entries from result if we have a mixed result, strip all int key (non assoc) entries from the result --- 4dev/tests/DB/CoreLibsDBIOTest.php | 53 +++++++++++++++++++++++++++ www/lib/CoreLibs/DB/IO.php | 58 ++++++++++++++++++------------ 2 files changed, 89 insertions(+), 22 deletions(-) diff --git a/4dev/tests/DB/CoreLibsDBIOTest.php b/4dev/tests/DB/CoreLibsDBIOTest.php index fdbd45d3..f521ba57 100644 --- a/4dev/tests/DB/CoreLibsDBIOTest.php +++ b/4dev/tests/DB/CoreLibsDBIOTest.php @@ -1007,6 +1007,59 @@ final class CoreLibsDBIOTest extends TestCase $db->dbClose(); } + // MARK: stripAssocOnly + + /** + * Data provider for stripAssocOnly tests + * + * @return array + */ + public function stripAssocOnlyProvider(): array + { + return [ + 'empty' => [ + [], + [] + ], + 'int only' => [ + [0 => 'foo', 1 => 'bar'], + [], + ], + 'mixed' => [ + [0 => 'foo', 'col_a' => 'foo', 1 => 'bar', 'col_b' => 'bar'], + ['col_a' => 'foo', 'col_b' => 'bar'], + ], + 'key only' => [ + ['col_a' => 'foo', 'col_b' => 'bar'], + ['col_a' => 'foo', 'col_b' => 'bar'], + ] + ]; + } + + /** + * Test for stripAssocOnly function + * + * @covers ::stripAssocOnly + * @dataProvider stripAssocOnlyProvider + * @testdox strip assoc non string entries from return [$_dataName] + * + * @param array $input + * @param array $expected + * @return void + */ + public function testStripAssocOnly(array $input, array $expected): void + { + $db = new \CoreLibs\DB\IO( + self::$db_config['valid'], + self::$log + ); + $this->assertEquals( + $expected, + $db->stripAssocOnly($input) + ); + $db->dbClose(); + } + // - string escape tests // dbEscapeString, dbEscapeLiteral, dbEscapeIdentifier, diff --git a/www/lib/CoreLibs/DB/IO.php b/www/lib/CoreLibs/DB/IO.php index 5c083dc4..6f1f598b 100644 --- a/www/lib/CoreLibs/DB/IO.php +++ b/www/lib/CoreLibs/DB/IO.php @@ -520,7 +520,7 @@ class IO } // ************************************************************* - // PRIVATE METHODS + // MARK: PRIVATE METHODS // ************************************************************* /** @@ -1703,11 +1703,11 @@ class IO } // ************************************************************* - // PUBLIC METHODS + // MARK: PUBLIC METHODS // ************************************************************* // *************************** - // CLOSE, STATUS, SETTINGS VARIABLE READ + // MARK: CLOSE, STATUS, SETTINGS VARIABLE READ // *************************** /** @@ -1950,7 +1950,7 @@ class IO } // *************************** - // DEBUG DATA DUMP + // MARK: DEBUG DATA DUMP // *************************** /** @@ -1978,7 +1978,7 @@ class IO } // *************************** - // CHECK QUERY TYPE + // MARK: CHECK QUERY TYPE // *************************** /** @@ -2035,7 +2035,7 @@ class IO } // *************************** - // DATA WRITE CONVERSION + // MARK: DATA WRITE CONVERSION // *************************** /** @@ -2156,7 +2156,7 @@ class IO } // *************************** - // DATA READ/WRITE CONVERSION + // MARK: DATA READ/WRITE CONVERSION // *************************** /** @@ -2194,7 +2194,7 @@ class IO } // *************************** - // DATA READ CONVERSION + // MARK: DATA READ CONVERSION // *************************** /** @@ -2263,8 +2263,22 @@ class IO return is_array($__db_array_parse) ? $__db_array_parse : []; } + /** + * Will strip all single numberic entries from the array. + * This is for database return + * + * @param array $res + * @return array + */ + public function stripAssocOnly(array $res): array + { + return array_filter($res, function ($key) { + return !is_numeric($key); + }, ARRAY_FILTER_USE_KEY); + } + // *************************** - // TABLE META DATA READ + // MARK: TABLE META DATA READ // *************************** /** @@ -2290,7 +2304,7 @@ class IO } // *************************** - // QUERY EXECUSION AND DATA READ + // MARK: QUERY EXECUSION AND DATA READ // *************************** /** @@ -2927,7 +2941,7 @@ class IO } // *************************** - // CURSOR RETURN + // MARK: CURSOR RETURN // *************************** /** @@ -2941,7 +2955,7 @@ class IO } // *************************** - // CURSOR EXT CACHE RESET + // MARK: CURSOR EXT CACHE RESET // *************************** /** @@ -2971,7 +2985,7 @@ class IO } // *************************** - // CURSOR EXT DATA CHECK + // MARK: CURSOR EXT DATA CHECK // *************************** /** @@ -3066,7 +3080,7 @@ class IO } // *************************** - // MAXIMUM QUERY EXECUTION CHECK HELPERS + // MARK: MAXIMUM QUERY EXECUTION CHECK HELPERS // *************************** /** @@ -3102,7 +3116,7 @@ class IO } // *************************** - // PREPARED QUERY WORK + // MARK: PREPARED QUERY WORK // *************************** /** @@ -3379,7 +3393,7 @@ class IO } // *************************** - // ASYNCHRONUS EXECUTION/CHECK + // MARK: ASYNCHRONUS EXECUTION/CHECK // *************************** /** @@ -3539,7 +3553,7 @@ class IO } // *************************** - // COMPLEX WRITE WITH CONFIG ARRAYS + // MARK: COMPLEX WRITE WITH CONFIG ARRAYS // *************************** // ** REMARK ** @@ -3720,7 +3734,7 @@ class IO } // *************************** - // INTERNAL SETTINGS READ/CHANGE + // MARK: INTERNAL SETTINGS READ/CHANGE // *************************** /** @@ -4048,7 +4062,7 @@ class IO } // *************************** - // QUERY DATA AND DB HANDLER + // MARK: QUERY DATA AND DB HANDLER // *************************** /** @@ -4151,7 +4165,7 @@ class IO } // *************************** - // INTERNAL VARIABLES READ POST QUERY RUN + // MARK: INTERNAL VARIABLES READ POST QUERY RUN // *************************** /** @@ -4442,7 +4456,7 @@ class IO } // *************************** - // ERROR AND WARNING DATA + // MARK: ERROR AND WARNING DATA // *************************** /** @@ -4499,7 +4513,7 @@ class IO } // *************************** - // DEPEREACTED CALLS + // MARK: DEPEREACTED CALLS // all call below are no longer in use and throw deprecated errors // ***************************