|
25 | 25 | import org.opensearch.sql.spark.dispatcher.model.IndexQueryActionType; |
26 | 26 | import org.opensearch.sql.spark.dispatcher.model.IndexQueryDetails; |
27 | 27 | import org.opensearch.sql.spark.flint.FlintIndexType; |
| 28 | +import org.opensearch.sql.spark.utils.SQLQueryUtils.TableExtractionResult; |
28 | 29 |
|
29 | 30 | @ExtendWith(MockitoExtension.class) |
30 | 31 | public class SQLQueryUtilsTest { |
@@ -444,6 +445,69 @@ void testRecoverIndex() { |
444 | 445 | assertEquals(IndexQueryActionType.RECOVER, indexDetails.getIndexQueryActionType()); |
445 | 446 | } |
446 | 447 |
|
| 448 | + @Test |
| 449 | + void testExtractFullyQualifiedTableNamesWithMetadata() { |
| 450 | + // Test CREATE TABLE queries |
| 451 | + String createTableQuery = |
| 452 | + "CREATE EXTERNAL TABLE\n" |
| 453 | + + "myS3.default.alb_logs\n" |
| 454 | + + "[ PARTITIONED BY (col_name [, … ] ) ]\n" |
| 455 | + + "[ ROW FORMAT DELIMITED row_format ]\n" |
| 456 | + + "STORED AS file_format\n" |
| 457 | + + "LOCATION { 's3://bucket/folder/' }"; |
| 458 | + |
| 459 | + TableExtractionResult result = |
| 460 | + SQLQueryUtils.extractFullyQualifiedTableNamesWithMetadata(createTableQuery); |
| 461 | + assertTrue(result.isCreateTableQuery()); |
| 462 | + assertEquals(1, result.getFullyQualifiedTableNames().size()); |
| 463 | + assertFullyQualifiedTableName( |
| 464 | + "myS3", "default", "alb_logs", result.getFullyQualifiedTableNames().get(0)); |
| 465 | + |
| 466 | + String createTableQuery2 = |
| 467 | + "CREATE TABLE myS3.default.new_table (id INT, name STRING) USING PARQUET"; |
| 468 | + result = SQLQueryUtils.extractFullyQualifiedTableNamesWithMetadata(createTableQuery2); |
| 469 | + assertTrue(result.isCreateTableQuery()); |
| 470 | + assertEquals(1, result.getFullyQualifiedTableNames().size()); |
| 471 | + assertFullyQualifiedTableName( |
| 472 | + "myS3", "default", "new_table", result.getFullyQualifiedTableNames().get(0)); |
| 473 | + |
| 474 | + // Test SELECT queries |
| 475 | + String selectQuery = "SELECT * FROM myS3.default.alb_logs"; |
| 476 | + result = SQLQueryUtils.extractFullyQualifiedTableNamesWithMetadata(selectQuery); |
| 477 | + assertFalse(result.isCreateTableQuery()); |
| 478 | + assertEquals(1, result.getFullyQualifiedTableNames().size()); |
| 479 | + assertFullyQualifiedTableName( |
| 480 | + "myS3", "default", "alb_logs", result.getFullyQualifiedTableNames().get(0)); |
| 481 | + |
| 482 | + // Test DROP TABLE queries |
| 483 | + String dropTableQuery = "DROP TABLE myS3.default.alb_logs"; |
| 484 | + result = SQLQueryUtils.extractFullyQualifiedTableNamesWithMetadata(dropTableQuery); |
| 485 | + assertFalse(result.isCreateTableQuery()); |
| 486 | + assertEquals(1, result.getFullyQualifiedTableNames().size()); |
| 487 | + assertFullyQualifiedTableName( |
| 488 | + "myS3", "default", "alb_logs", result.getFullyQualifiedTableNames().get(0)); |
| 489 | + |
| 490 | + // Test DESCRIBE TABLE queries |
| 491 | + String describeTableQuery = "DESCRIBE TABLE myS3.default.alb_logs"; |
| 492 | + result = SQLQueryUtils.extractFullyQualifiedTableNamesWithMetadata(describeTableQuery); |
| 493 | + assertFalse(result.isCreateTableQuery()); |
| 494 | + assertEquals(1, result.getFullyQualifiedTableNames().size()); |
| 495 | + assertFullyQualifiedTableName( |
| 496 | + "myS3", "default", "alb_logs", result.getFullyQualifiedTableNames().get(0)); |
| 497 | + |
| 498 | + // Test JOIN queries |
| 499 | + String joinQuery = |
| 500 | + "SELECT * FROM myS3.default.alb_logs JOIN myS3.default.http_logs ON alb_logs.id =" |
| 501 | + + " http_logs.id"; |
| 502 | + result = SQLQueryUtils.extractFullyQualifiedTableNamesWithMetadata(joinQuery); |
| 503 | + assertFalse(result.isCreateTableQuery()); |
| 504 | + assertEquals(2, result.getFullyQualifiedTableNames().size()); |
| 505 | + assertFullyQualifiedTableName( |
| 506 | + "myS3", "default", "alb_logs", result.getFullyQualifiedTableNames().get(0)); |
| 507 | + assertFullyQualifiedTableName( |
| 508 | + "myS3", "default", "http_logs", result.getFullyQualifiedTableNames().get(1)); |
| 509 | + } |
| 510 | + |
447 | 511 | @Getter |
448 | 512 | protected static class IndexQuery { |
449 | 513 | private String query; |
|
0 commit comments