@@ -304,35 +304,39 @@ public function verifyColumns($parameters, $sql_driver, $table, $cols)
304
304
*/
305
305
public function verifyTable ($ parameters , $ sql_driver , $ table )
306
306
{
307
- $ tables = $ this ->getTables ($ parameters , $ sql_driver );
308
- return in_array ($ table , $ tables , true );
307
+ $ tablesWithSchema = $ this ->getTables ($ parameters , $ sql_driver , true );
308
+ $ tablesWithoutSchema = $ this ->getTables ($ parameters , $ sql_driver , false );
309
+ return in_array ($ table , $ tablesWithSchema , true ) || in_array ($ table , $ tablesWithoutSchema , true );
309
310
}
310
311
311
312
/**
312
313
* Retrieve a list of tables for the given connection parameters
313
314
* @param array $parameters The connection parameters
314
315
* @param string $sql_driver The SQL driver to use
315
- * @return array The found tables, empty if an error occured
316
+ * @param boolean $schema Return table name with schema
317
+ * @return array The found tables, empty if an error occurred
316
318
*/
317
- public function getTables ($ parameters , $ sql_driver )
319
+ public function getTables ($ parameters , $ sql_driver, $ schema = true )
318
320
{
319
321
$ cm = new \OC \DB \ConnectionFactory (\OC ::$ server ->getSystemConfig ());
320
322
try {
321
323
$ conn = $ cm -> getConnection ($ sql_driver , $ parameters );
322
324
$ platform = $ conn -> getDatabasePlatform ();
323
325
324
- $ queries = array (
325
- 'Tables_in_ ' .$ parameters ['dbname ' ] => $ platform -> getListTablesSQL (),
326
- 'TABLE_NAME ' => $ platform -> getListViewsSQL ($ parameters ['dbname ' ]));
326
+ $ queryTables = $ platform ->getListTablesSQL ();
327
+ $ queryViews = $ platform ->getListViewsSQL ($ parameters ['dbname ' ]);
327
328
$ ret = array ();
328
- foreach ($ queries as $ field => $ query )
329
- {
330
- $ result = $ conn -> executeQuery ($ query );
331
- while ($ row = $ result -> fetch ())
332
- {
333
- $ name = $ row [$ field ];
334
- $ ret [] = $ name ;
335
- }
329
+
330
+ $ result = $ conn ->executeQuery ($ queryTables );
331
+ while ($ row = $ result ->fetch ()) {
332
+ $ name = $ this ->getTableNameFromRow ($ sql_driver , $ parameters ['dbname ' ], $ row , $ schema );
333
+ $ ret [] = $ name ;
334
+ }
335
+
336
+ $ result = $ conn ->executeQuery ($ queryViews );
337
+ while ($ row = $ result ->fetch ()) {
338
+ $ name = $ this ->getViewNameFromRow ($ sql_driver , $ row , $ schema );
339
+ $ ret [] = $ name ;
336
340
}
337
341
return $ ret ;
338
342
}
@@ -341,7 +345,54 @@ public function getTables($parameters, $sql_driver)
341
345
return array ();
342
346
}
343
347
}
344
-
348
+
349
+ /**
350
+ * Retrieve table name from database list table SQL
351
+ * @param string $sql_driver The SQL driver to use
352
+ * @param string $dbname The database name
353
+ * @param array $row Query result row
354
+ * @param boolean $schema Return table name with schema
355
+ * @return string Table name
356
+ */
357
+ public function getTableNameFromRow ($ sql_driver , $ dbname , $ row , $ schema )
358
+ {
359
+ switch ($ sql_driver ) {
360
+ case 'mysql ' :
361
+ return $ row ['Tables_in_ ' . $ dbname ];
362
+ case 'pgsql ' :
363
+ if ($ schema ) {
364
+ return $ row ['schema_name ' ] . '. ' . $ row ['table_name ' ];
365
+ } else {
366
+ return $ row ['table_name ' ];
367
+ }
368
+ default :
369
+ return null ;
370
+ }
371
+ }
372
+
373
+ /**
374
+ * Retrieve view name from database list table SQL
375
+ * @param string $sql_driver The SQL driver to use
376
+ * @param array $row Query result row
377
+ * @param boolean $schema Return table name with schema
378
+ * @return string Table name
379
+ */
380
+ public function getViewNameFromRow ($ sql_driver , $ row , $ schema )
381
+ {
382
+ switch ($ sql_driver ) {
383
+ case 'mysql ' :
384
+ return $ row ['TABLE_NAME ' ];
385
+ case 'pgsql ' :
386
+ if ($ schema ) {
387
+ return $ row ['schemaname ' ] . '. ' . $ row ['viewname ' ];
388
+ } else {
389
+ return $ row ['viewname ' ];
390
+ }
391
+ default :
392
+ return null ;
393
+ }
394
+ }
395
+
345
396
/**
346
397
* Retrieve a list of columns for the given connection parameters
347
398
* @param array $parameters The connection parameters
@@ -360,7 +411,16 @@ public function getColumns($parameters, $sql_driver, $table)
360
411
$ ret = array ();
361
412
while ($ row = $ result -> fetch ())
362
413
{
363
- $ name = $ row ['Field ' ];
414
+ switch ($ sql_driver ) {
415
+ case 'mysql ' :
416
+ $ name = $ row ['Field ' ];
417
+ break ;
418
+ case 'pgsql ' :
419
+ $ name = $ row ['field ' ];
420
+ break ;
421
+ default :
422
+ return $ ret ;
423
+ }
364
424
$ ret [] = $ name ;
365
425
}
366
426
return $ ret ;
0 commit comments