@@ -672,22 +672,29 @@ protected boolean like(String value, String[] parts) {
672
672
@ Override
673
673
public ResultSet getTables (String catalog , String schemaPattern , String tableNamePattern , String [] types )
674
674
throws SQLException {
675
- if (types != null && !Arrays .asList (types ).contains ("TABLE" )) {
676
- return new SQLResultSet (JDBCBridge .EMPTY );
677
- }
678
- String [] parts = tableNamePattern == null ? new String []{"" } : tableNamePattern .split ("%" );
679
- List <List <Object >> spaces = (List <List <Object >>) connection .connection .select (_VSPACE , 0 , Arrays .asList (), 0 , SPACES_MAX , 0 );
680
- List <List <Object >> rows = new ArrayList <List <Object >>();
681
- for (List <Object > space : spaces ) {
682
- String name = (String ) space .get (NAME_IDX );
683
- Map flags = (Map ) space .get (FLAGS_IDX );
684
- if (flags != null && flags .containsKey ("sql" ) && like (name , parts )) {
685
- rows .add (Arrays .asList (name , "TABLE" , flags .get ("sql" )));
675
+ connection .checkNotClosed ();
676
+ try {
677
+ if (types != null && !Arrays .asList (types ).contains ("TABLE" )) {
678
+ return new SQLResultSet (JDBCBridge .EMPTY );
679
+ }
680
+ String [] parts = tableNamePattern == null ? new String []{"" } : tableNamePattern .split ("%" );
681
+ List <List <Object >> spaces = (List <List <Object >>) connection .connection .select (_VSPACE , 0 , Arrays .asList (), 0 , SPACES_MAX , 0 );
682
+ List <List <Object >> rows = new ArrayList <List <Object >>();
683
+ for (List <Object > space : spaces ) {
684
+ String name = (String ) space .get (NAME_IDX );
685
+ Map flags = (Map ) space .get (FLAGS_IDX );
686
+ if (flags != null && flags .containsKey ("sql" ) && like (name , parts )) {
687
+ rows .add (Arrays .asList (name , "TABLE" , flags .get ("sql" )));
688
+ }
686
689
}
690
+ return new SQLNullResultSet (JDBCBridge .mock (Arrays .asList ("TABLE_NAME" , "TABLE_TYPE" , "REMARKS" ,
691
+ //nulls
692
+ "TABLE_CAT" , "TABLE_SCHEM" , "TABLE_TYPE" , "TYPE_CAT" , "TYPE_SCHEM" , "TYPE_NAME" , "SELF_REFERENCING_COL_NAME" , "REF_GENERATION" ), rows ));
693
+ } catch (Exception e ) {
694
+ connection .handleException (e );
695
+ throw new SQLException ("Failed to retrieve table(s) description: " +
696
+ "tableNamePattern=" + tableNamePattern , e );
687
697
}
688
- return new SQLNullResultSet (JDBCBridge .mock (Arrays .asList ("TABLE_NAME" , "TABLE_TYPE" , "REMARKS" ,
689
- //nulls
690
- "TABLE_CAT" , "TABLE_SCHEM" , "TABLE_TYPE" , "TYPE_CAT" , "TYPE_SCHEM" , "TYPE_NAME" , "SELF_REFERENCING_COL_NAME" , "REF_GENERATION" ), rows ));
691
698
}
692
699
693
700
@ Override
@@ -712,32 +719,41 @@ public ResultSet getTableTypes() throws SQLException {
712
719
@ Override
713
720
public ResultSet getColumns (String catalog , String schemaPattern , String tableNamePattern , String columnNamePattern )
714
721
throws SQLException {
715
- String [] tableParts = tableNamePattern == null ? new String []{"" } : tableNamePattern .split ("%" );
716
- String [] colParts = columnNamePattern == null ? new String []{"" } : columnNamePattern .split ("%" );
717
- List <List <Object >> spaces = (List <List <Object >>) connection .connection .select (_VSPACE , 0 , Arrays .asList (), 0 , SPACES_MAX , 0 );
718
- List <List <Object >> rows = new ArrayList <List <Object >>();
719
- for (List <Object > space : spaces ) {
720
- String tableName = (String ) space .get (NAME_IDX );
721
- Map flags = (Map ) space .get (FLAGS_IDX );
722
- if (flags != null && flags .containsKey ("sql" ) && like (tableName , tableParts )) {
723
- List <Map <String , Object >> format = (List <Map <String , Object >>) space .get (FORMAT_IDX );
724
- for (int columnIdx = 1 ; columnIdx <= format .size (); columnIdx ++) {
725
- Map <String , Object > f = format .get (columnIdx - 1 );
726
- String columnName = (String ) f .get ("name" );
727
- String dbType = (String ) f .get ("type" );
728
- if (like (columnName , colParts )) {
729
- rows .add (Arrays .<Object >asList (tableName , columnName , columnIdx , Types .OTHER , dbType , 10 , 1 , "YES" , Types .OTHER , "NO" , "NO" ));
722
+ connection .checkNotClosed ();
723
+ try {
724
+ String [] tableParts = tableNamePattern == null ? new String []{"" } : tableNamePattern .split ("%" );
725
+ String [] colParts = columnNamePattern == null ? new String []{"" } : columnNamePattern .split ("%" );
726
+ List <List <Object >> spaces = (List <List <Object >>) connection .connection .select (_VSPACE , 0 , Arrays .asList (), 0 , SPACES_MAX , 0 );
727
+ List <List <Object >> rows = new ArrayList <List <Object >>();
728
+ for (List <Object > space : spaces ) {
729
+ String tableName = (String ) space .get (NAME_IDX );
730
+ Map flags = (Map ) space .get (FLAGS_IDX );
731
+ if (flags != null && flags .containsKey ("sql" ) && like (tableName , tableParts )) {
732
+ List <Map <String , Object >> format = (List <Map <String , Object >>) space .get (FORMAT_IDX );
733
+ for (int columnIdx = 1 ; columnIdx <= format .size (); columnIdx ++) {
734
+ Map <String , Object > f = format .get (columnIdx - 1 );
735
+ String columnName = (String ) f .get ("name" );
736
+ String dbType = (String ) f .get ("type" );
737
+ if (like (columnName , colParts )) {
738
+ rows .add (Arrays .<Object >asList (tableName , columnName , columnIdx , Types .OTHER , dbType , 10 , 1 , "YES" , Types .OTHER , "NO" , "NO" ));
739
+ }
730
740
}
731
741
}
732
742
}
733
- }
734
743
735
- return new SQLNullResultSet ((JDBCBridge .mock (
736
- Arrays .asList ("TABLE_NAME" , "COLUMN_NAME" , "ORDINAL_POSITION" , "DATA_TYPE" , "TYPE_NAME" , "NUM_PREC_RADIX" , "NULLABLE" , "IS_NULLABLE" , "SOURCE_DATA_TYPE" , "IS_AUTOINCREMENT" , "IS_GENERATEDCOLUMN" ,
737
- //nulls
738
- "TABLE_CAT" , "TABLE_SCHEM" , "COLUMN_SIZE" , "BUFFER_LENGTH" , "DECIMAL_DIGITS" , "REMARKS" , "COLUMN_DEF" , "SQL_DATA_TYPE" , "SQL_DATETIME_SUB" , "CHAR_OCTET_LENGTH" , "SCOPE_CATALOG" , "SCOPE_SCHEMA" , "SCOPE_TABLE"
739
- ),
740
- rows )));
744
+ return new SQLNullResultSet ((JDBCBridge .mock (
745
+ Arrays .asList ("TABLE_NAME" , "COLUMN_NAME" , "ORDINAL_POSITION" , "DATA_TYPE" , "TYPE_NAME" , "NUM_PREC_RADIX" , "NULLABLE" , "IS_NULLABLE" , "SOURCE_DATA_TYPE" , "IS_AUTOINCREMENT" , "IS_GENERATEDCOLUMN" ,
746
+ //nulls
747
+ "TABLE_CAT" , "TABLE_SCHEM" , "COLUMN_SIZE" , "BUFFER_LENGTH" , "DECIMAL_DIGITS" , "REMARKS" , "COLUMN_DEF" , "SQL_DATA_TYPE" , "SQL_DATETIME_SUB" , "CHAR_OCTET_LENGTH" , "SCOPE_CATALOG" , "SCOPE_SCHEMA" , "SCOPE_TABLE"
748
+ ),
749
+ rows )));
750
+ } catch (Exception e ) {
751
+ connection .handleException (e );
752
+ throw new SQLException (
753
+ "Failed to retrieve column(s) description: " +
754
+ "tableNamePattern=" + tableNamePattern +
755
+ "columnNamePattern=" + columnNamePattern , e );
756
+ }
741
757
}
742
758
743
759
@ Override
@@ -765,29 +781,35 @@ public ResultSet getVersionColumns(String catalog, String schema, String table)
765
781
766
782
@ Override
767
783
public ResultSet getPrimaryKeys (String catalog , String schema , String table ) throws SQLException {
768
- List <List <Object >> spaces = (List <List <Object >>) connection .connection .select (_VSPACE , 2 , Arrays .asList (table ), 0 , 1 , 0 );
769
-
770
- List <List <Object >> rows = new ArrayList <List <Object >>();
771
-
772
- if (spaces != null && spaces .size () > 0 ) {
773
- List <Object > space = spaces .get (0 );
774
- List <Map <String , Object >> fields = (List <Map <String , Object >>) space .get (FORMAT_IDX );
775
- List <List <Object >> indexes = (List <List <Object >>) connection .connection .select (_VINDEX , 0 , Arrays .asList (space .get (SPACE_ID_IDX ), 0 ), 0 , 1 , 0 );
776
- List <Object > primaryKey = indexes .get (0 );
777
- List <List <Object >> parts = (List <List <Object >>) primaryKey .get (INDEX_FORMAT_IDX );
778
- for (int i = 0 ; i < parts .size (); i ++) {
779
- List <Object > part = parts .get (i );
780
- int ordinal = ((Number ) part .get (0 )).intValue ();
781
- String column = (String ) fields .get (ordinal ).get ("name" );
782
- rows .add (Arrays .asList (table , column , i + 1 , "primary" , primaryKey .get (NAME_IDX )));
784
+ connection .checkNotClosed ();
785
+ try {
786
+ List <List <Object >> spaces = (List <List <Object >>) connection .connection .select (_VSPACE , 2 , Arrays .asList (table ), 0 , 1 , 0 );
787
+
788
+ List <List <Object >> rows = new ArrayList <List <Object >>();
789
+
790
+ if (spaces != null && spaces .size () > 0 ) {
791
+ List <Object > space = spaces .get (0 );
792
+ List <Map <String , Object >> fields = (List <Map <String , Object >>) space .get (FORMAT_IDX );
793
+ List <List <Object >> indexes = (List <List <Object >>) connection .connection .select (_VINDEX , 0 , Arrays .asList (space .get (SPACE_ID_IDX ), 0 ), 0 , 1 , 0 );
794
+ List <Object > primaryKey = indexes .get (0 );
795
+ List <List <Object >> parts = (List <List <Object >>) primaryKey .get (INDEX_FORMAT_IDX );
796
+ for (int i = 0 ; i < parts .size (); i ++) {
797
+ List <Object > part = parts .get (i );
798
+ int ordinal = ((Number ) part .get (0 )).intValue ();
799
+ String column = (String ) fields .get (ordinal ).get ("name" );
800
+ rows .add (Arrays .asList (table , column , i + 1 , "primary" , primaryKey .get (NAME_IDX )));
801
+ }
783
802
}
803
+ return new SQLNullResultSet ((JDBCBridge .mock (
804
+ Arrays .asList ("TABLE_NAME" , "COLUMN_NAME" , "KEY_SEQ" , "PK_NAME" ,
805
+ //nulls
806
+ "TABLE_CAT" , "TABLE_SCHEM"
807
+ ),
808
+ rows )));
809
+ } catch (Exception e ) {
810
+ connection .handleException (e );
811
+ throw new SQLException ("Failed to retrieve primary key(s) description: table=" + table , e );
784
812
}
785
- return new SQLNullResultSet ((JDBCBridge .mock (
786
- Arrays .asList ("TABLE_NAME" , "COLUMN_NAME" , "KEY_SEQ" , "PK_NAME" ,
787
- //nulls
788
- "TABLE_CAT" , "TABLE_SCHEM"
789
- ),
790
- rows )));
791
813
}
792
814
793
815
@ Override
0 commit comments