@@ -1320,12 +1320,21 @@ AdbcStatusCode StatementSetOption(struct AdbcStatement *statement, const char *k
13201320 return ADBC_STATUS_INVALID_ARGUMENT;
13211321}
13221322
1323+ std::string createFilter (const char *input) {
1324+ if (input) {
1325+ auto quoted = duckdb::KeywordHelper::WriteQuoted (input, ' \' ' );
1326+ return quoted;
1327+ }
1328+ return " '%'" ;
1329+ }
1330+
13231331AdbcStatusCode ConnectionGetObjects (struct AdbcConnection *connection, int depth, const char *catalog,
13241332 const char *db_schema, const char *table_name, const char **table_type,
13251333 const char *column_name, struct ArrowArrayStream *out, struct AdbcError *error) {
1326- std::string catalog_filter = catalog ? catalog : " %" ;
1327- std::string db_schema_filter = db_schema ? db_schema : " %" ;
1328- std::string table_name_filter = table_name ? table_name : " %" ;
1334+ std::string catalog_filter = createFilter (catalog);
1335+ std::string db_schema_filter = createFilter (db_schema);
1336+ std::string table_name_filter = createFilter (table_name);
1337+ std::string column_name_filter = createFilter (column_name);
13291338 std::string table_type_condition = " " ;
13301339 if (table_type && table_type[0 ]) {
13311340 table_type_condition = " AND table_type IN (" ;
@@ -1341,13 +1350,10 @@ AdbcStatusCode ConnectionGetObjects(struct AdbcConnection *connection, int depth
13411350 if (i > 0 ) {
13421351 table_type_condition += " , " ;
13431352 }
1344- table_type_condition += " '" ;
1345- table_type_condition += table_type[i];
1346- table_type_condition += " '" ;
1353+ table_type_condition += createFilter (table_type[i]);
13471354 }
13481355 table_type_condition += " )" ;
13491356 }
1350- std::string column_name_filter = column_name ? column_name : " %" ;
13511357
13521358 std::string query;
13531359 switch (depth) {
@@ -1392,7 +1398,7 @@ AdbcStatusCode ConnectionGetObjects(struct AdbcConnection *connection, int depth
13921398 )[] catalog_db_schemas
13931399 FROM
13941400 information_schema.schemata
1395- WHERE catalog_name LIKE '%s'
1401+ WHERE catalog_name LIKE %s
13961402 GROUP BY catalog_name
13971403 )" ,
13981404 catalog_filter);
@@ -1405,7 +1411,7 @@ AdbcStatusCode ConnectionGetObjects(struct AdbcConnection *connection, int depth
14051411 catalog_name,
14061412 schema_name,
14071413 FROM information_schema.schemata
1408- WHERE schema_name LIKE '%s'
1414+ WHERE schema_name LIKE %s
14091415 )
14101416
14111417 SELECT
@@ -1448,7 +1454,7 @@ AdbcStatusCode ConnectionGetObjects(struct AdbcConnection *connection, int depth
14481454 information_schema.schemata
14491455 LEFT JOIN db_schemas dbs
14501456 USING (catalog_name, schema_name)
1451- WHERE catalog_name LIKE '%s'
1457+ WHERE catalog_name LIKE %s
14521458 GROUP BY catalog_name
14531459 )" ,
14541460 db_schema_filter, catalog_filter);
@@ -1492,7 +1498,7 @@ AdbcStatusCode ConnectionGetObjects(struct AdbcConnection *connection, int depth
14921498 )[],
14931499 }) db_schema_tables
14941500 FROM information_schema.tables
1495- WHERE table_name LIKE '%s' %s
1501+ WHERE table_name LIKE %s %s
14961502 GROUP BY table_catalog, table_schema
14971503 ),
14981504 db_schemas AS (
@@ -1503,7 +1509,7 @@ AdbcStatusCode ConnectionGetObjects(struct AdbcConnection *connection, int depth
15031509 FROM information_schema.schemata
15041510 LEFT JOIN tables
15051511 USING (catalog_name, schema_name)
1506- WHERE schema_name LIKE '%s'
1512+ WHERE schema_name LIKE %s
15071513 )
15081514
15091515 SELECT
@@ -1516,7 +1522,7 @@ AdbcStatusCode ConnectionGetObjects(struct AdbcConnection *connection, int depth
15161522 information_schema.schemata
15171523 LEFT JOIN db_schemas dbs
15181524 USING (catalog_name, schema_name)
1519- WHERE catalog_name LIKE '%s'
1525+ WHERE catalog_name LIKE %s
15201526 GROUP BY catalog_name
15211527 )" ,
15221528 table_name_filter, table_type_condition, db_schema_filter, catalog_filter);
@@ -1551,7 +1557,7 @@ AdbcStatusCode ConnectionGetObjects(struct AdbcConnection *connection, int depth
15511557 xdbc_is_generatedcolumn: NULL::BOOLEAN,
15521558 }) table_columns
15531559 FROM information_schema.columns
1554- WHERE column_name LIKE '%s'
1560+ WHERE column_name LIKE %s
15551561 GROUP BY table_catalog, table_schema, table_name
15561562 ),
15571563 constraints AS (
@@ -1580,7 +1586,7 @@ AdbcStatusCode ConnectionGetObjects(struct AdbcConnection *connection, int depth
15801586 constraint_column_names,
15811587 list_filter(
15821588 constraint_column_names,
1583- lambda name: name LIKE '%s'
1589+ lambda name: name LIKE %s
15841590 )
15851591 )
15861592 GROUP BY database_name, schema_name, table_name
@@ -1600,7 +1606,7 @@ AdbcStatusCode ConnectionGetObjects(struct AdbcConnection *connection, int depth
16001606 USING (table_catalog, table_schema, table_name)
16011607 LEFT JOIN constraints
16021608 USING (table_catalog, table_schema, table_name)
1603- WHERE table_name LIKE '%s' %s
1609+ WHERE table_name LIKE %s %s
16041610 GROUP BY table_catalog, table_schema
16051611 ),
16061612 db_schemas AS (
@@ -1611,7 +1617,7 @@ AdbcStatusCode ConnectionGetObjects(struct AdbcConnection *connection, int depth
16111617 FROM information_schema.schemata
16121618 LEFT JOIN tables
16131619 USING (catalog_name, schema_name)
1614- WHERE schema_name LIKE '%s'
1620+ WHERE schema_name LIKE %s
16151621 )
16161622
16171623 SELECT
@@ -1624,7 +1630,7 @@ AdbcStatusCode ConnectionGetObjects(struct AdbcConnection *connection, int depth
16241630 information_schema.schemata
16251631 LEFT JOIN db_schemas dbs
16261632 USING (catalog_name, schema_name)
1627- WHERE catalog_name LIKE '%s'
1633+ WHERE catalog_name LIKE %s
16281634 GROUP BY catalog_name
16291635 )" ,
16301636 column_name_filter, column_name_filter, table_name_filter,
0 commit comments