From 93b3409c3e85d9983f502f338ec7e8834ab69c55 Mon Sep 17 00:00:00 2001 From: candido dessanti Date: Mon, 25 Feb 2019 15:43:59 +0100 Subject: [PATCH] Revert "Revert "Correction of issues #311, #310, #164, #163"" This reverts commit e8195070cccad84e5a89840abb8af5ca21682927. --- .../com/omnisci/jdbc/OmniSciConnection.java | 1 + .../java/com/omnisci/jdbc/OmniSciData.java | 1 + .../omnisci/jdbc/OmniSciDatabaseMetaData.java | 138 ++++++++++++++---- 3 files changed, 114 insertions(+), 26 deletions(-) diff --git a/java/omniscijdbc/src/main/java/com/omnisci/jdbc/OmniSciConnection.java b/java/omniscijdbc/src/main/java/com/omnisci/jdbc/OmniSciConnection.java index 6a0d8c5760b..3eb7216ab9a 100644 --- a/java/omniscijdbc/src/main/java/com/omnisci/jdbc/OmniSciConnection.java +++ b/java/omniscijdbc/src/main/java/com/omnisci/jdbc/OmniSciConnection.java @@ -229,6 +229,7 @@ public OmniSciConnection(String url, Properties info) (String) this.cP.get(Connection_enums.user_passwd), (String) this.cP.get(Connection_enums.db_name)); + catalog = (String) this.cP.get(Connection_enums.db_name); logger.debug("Connected session is " + session); } catch (TTransportException ex) { diff --git a/java/omniscijdbc/src/main/java/com/omnisci/jdbc/OmniSciData.java b/java/omniscijdbc/src/main/java/com/omnisci/jdbc/OmniSciData.java index b19ce42ba97..8d1c186d539 100644 --- a/java/omniscijdbc/src/main/java/com/omnisci/jdbc/OmniSciData.java +++ b/java/omniscijdbc/src/main/java/com/omnisci/jdbc/OmniSciData.java @@ -48,6 +48,7 @@ void add(int value) { } void setNull(boolean b) { + if (colType == TDatumType.STR) tcolumn.data.addToStr_col(null); else tcolumn.data.addToInt_col(0); tcolumn.addToNulls(b); } diff --git a/java/omniscijdbc/src/main/java/com/omnisci/jdbc/OmniSciDatabaseMetaData.java b/java/omniscijdbc/src/main/java/com/omnisci/jdbc/OmniSciDatabaseMetaData.java index 2f4adf9696c..7f38b911874 100644 --- a/java/omniscijdbc/src/main/java/com/omnisci/jdbc/OmniSciDatabaseMetaData.java +++ b/java/omniscijdbc/src/main/java/com/omnisci/jdbc/OmniSciDatabaseMetaData.java @@ -865,6 +865,14 @@ public ResultSet getTables( throw new SQLException("get_tables failed " + ex.toString()); } + List views; + try { + views = con.client.get_views(con.session); + } catch (TException ex) { + throw new SQLException("get_views failed " + ex.toString()); + } + + TTypeInfo strTTI = new TTypeInfo(TDatumType.STR, TEncodingType.NONE, false, false, 0, 0, 0); TColumnType columns[] = {createTColumnType("TABLE_CAT", new TTypeInfo(strTTI)), @@ -889,23 +897,31 @@ public ResultSet getTables( dataMap.put(col.col_name, new ArrayList()); nullMap.put(col.col_name, new ArrayList()); } - - // Now add some actual details for table name - for (String x : tables) { - dataMap.get("TABLE_NAME").add(x); - nullMap.get("TABLE_NAME").add(false); - nullMap.get("TABLE_SCHEM").add(true); - nullMap.get("TABLE_CAT").add(true); - dataMap.get("TABLE_TYPE").add("TABLE"); - nullMap.get("TABLE_TYPE").add(false); - nullMap.get("REMARKS").add(true); - nullMap.get("TYPE_CAT").add(true); - nullMap.get("TYPE_SCHEM").add(true); - nullMap.get("TYPE_NAME").add(true); - nullMap.get("SELF_REFERENCING_COL_NAME").add(true); - nullMap.get("REF_GENERATION").add(true); + if (schemaPattern == null || schemaPattern.toLowerCase().equals(con.getCatalog().toLowerCase())) + { + // Now add some actual details for table name + for (String x : tables) { + dataMap.get("TABLE_NAME").add(x); + nullMap.get("TABLE_NAME").add(false); + nullMap.get("TABLE_SCHEM").add(true); + nullMap.get("TABLE_CAT").add(true); + if ( views.contains(x) == true ) + { + dataMap.get("TABLE_TYPE").add("VIEW"); + } + else + { + dataMap.get("TABLE_TYPE").add("TABLE"); + } + nullMap.get("TABLE_TYPE").add(false); + nullMap.get("REMARKS").add(true); + nullMap.get("TYPE_CAT").add(true); + nullMap.get("TYPE_SCHEM").add(true); + nullMap.get("TYPE_NAME").add(true); + nullMap.get("SELF_REFERENCING_COL_NAME").add(true); + nullMap.get("REF_GENERATION").add(true); + } } - List columnsList = new ArrayList(columns.length); for (TColumnType col : columns) { @@ -1012,6 +1028,7 @@ public ResultSet getTableTypes() throws SQLException { // Now add some actual details for table name dataMap.get("TABLE_TYPE").add("TABLE"); + dataMap.get("TABLE_TYPE").add("VIEW"); List columnsList = new ArrayList(columns.length); @@ -1239,6 +1256,26 @@ public ResultSet getEmptyResultSet() { return new OmniSciResultSet(); } + // this method is needed to build an empty resultset with columns names and datatypes + public ResultSet getEmptyResultSetWithDesc(TColumnType columns[] ) throws SQLException { // for compatibility and future + Map dataMap = new HashMap(columns.length); + List rowDesc = new ArrayList(columns.length); + for (TColumnType col : columns) { + rowDesc.add(col); + dataMap.put(col.col_name, new OmniSciData(col.col_type.type)); + } + List columnsList = new ArrayList(columns.length); + for (TColumnType col : columns) { + TColumn schemaCol = dataMap.get(col.col_name).getTColumn(); + columnsList.add(schemaCol); + } + TRowSet rowSet = new TRowSet(rowDesc, null, columnsList, true); + TQueryResult result = new TQueryResult(rowSet, 0, 0, null); + OmniSciResultSet cols = new OmniSciResultSet(result, "getColumns"); + return cols; + } + + private void tablePermProcess( List tables, Map dataMap, String tableNamePattern) throws TException { @@ -1377,27 +1414,76 @@ public ResultSet getVersionColumns(String catalog, String schema, String table) public ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException { MAPDLOGGER.debug("Entered"); - return getEmptyResultSet(); + + TTypeInfo strTTI = new TTypeInfo(TDatumType.STR, TEncodingType.NONE, false, false, 0, 0, 0); + TTypeInfo intTTI = new TTypeInfo(TDatumType.INT, TEncodingType.NONE, false, false, 0, 0, 0); + TTypeInfo smallIntTTI = new TTypeInfo(TDatumType.SMALLINT, TEncodingType.NONE, false, false, 0, 0, 0); + TColumnType columns[] = { + createTColumnType("TABLE_CAT", new TTypeInfo(strTTI)), + createTColumnType("TABLE_SCHEM", new TTypeInfo(strTTI)), + createTColumnType("TABLE_NAME", new TTypeInfo(strTTI)), + createTColumnType("COLUMN_NAME", new TTypeInfo(strTTI)), + createTColumnType("KEY_SEQ", new TTypeInfo(smallIntTTI)), + createTColumnType("PK_NAME", new TTypeInfo(strTTI)) + }; + + return getEmptyResultSetWithDesc(columns); } @Override public ResultSet getImportedKeys(String catalog, String schema, String table) throws SQLException { - MAPDLOGGER.debug("Entered"); - throw new UnsupportedOperationException("Not supported yet," - + " line:" + new Throwable().getStackTrace()[0].getLineNumber() - + " class:" + new Throwable().getStackTrace()[0].getClassName() - + " method:" + new Throwable().getStackTrace()[0].getMethodName()); + MAPDLOGGER.debug("Entered"); + + TTypeInfo strTTI = new TTypeInfo(TDatumType.STR, TEncodingType.NONE, false, false, 0, 0, 0); + TTypeInfo intTTI = new TTypeInfo(TDatumType.INT, TEncodingType.NONE, false, false, 0, 0, 0); + TTypeInfo smallIntTTI = new TTypeInfo(TDatumType.SMALLINT, TEncodingType.NONE, false, false, 0, 0, 0); + TColumnType columns[] = { + createTColumnType("PKTABLE_CAT", new TTypeInfo(strTTI)), + createTColumnType("PKTABLE_SCHEM", new TTypeInfo(strTTI)), + createTColumnType("PKTABLE_NAME", new TTypeInfo(strTTI)), + createTColumnType("PKCOLUMN_NAME", new TTypeInfo(strTTI)), + createTColumnType("FKTABLE_CAT", new TTypeInfo(strTTI)), + createTColumnType("FKTABLE_SCHEM", new TTypeInfo(strTTI)), + createTColumnType("FKTABLE_NAME", new TTypeInfo(strTTI)), + createTColumnType("FKCOLUMN_NAME", new TTypeInfo(strTTI)), + createTColumnType("KEY_SEQ", new TTypeInfo(smallIntTTI)), + createTColumnType("UPDATE_RULE", new TTypeInfo(smallIntTTI)), + createTColumnType("DELETE_RULE", new TTypeInfo(smallIntTTI)), + createTColumnType("FK_NAME", new TTypeInfo(strTTI)), + createTColumnType("PK_NAME", new TTypeInfo(strTTI)), + createTColumnType("DEFERRABILITY", new TTypeInfo(smallIntTTI)) + }; + + return getEmptyResultSetWithDesc(columns); } @Override public ResultSet getExportedKeys(String catalog, String schema, String table) throws SQLException { MAPDLOGGER.debug("Entered"); - throw new UnsupportedOperationException("Not supported yet," - + " line:" + new Throwable().getStackTrace()[0].getLineNumber() - + " class:" + new Throwable().getStackTrace()[0].getClassName() - + " method:" + new Throwable().getStackTrace()[0].getMethodName()); + + TTypeInfo strTTI = new TTypeInfo(TDatumType.STR, TEncodingType.NONE, false, false, 0, 0, 0); + TTypeInfo intTTI = new TTypeInfo(TDatumType.INT, TEncodingType.NONE, false, false, 0, 0, 0); + TTypeInfo smallIntTTI = new TTypeInfo(TDatumType.SMALLINT, TEncodingType.NONE, false, false, 0, 0, 0); + TColumnType columns[] = { + createTColumnType("FKTABLE_CAT", new TTypeInfo(strTTI)), + createTColumnType("FKTABLE_SCHEM", new TTypeInfo(strTTI)), + createTColumnType("FKTABLE_NAME", new TTypeInfo(strTTI)), + createTColumnType("FKCOLUMN_NAME", new TTypeInfo(strTTI)), + createTColumnType("PKTABLE_CAT", new TTypeInfo(strTTI)), + createTColumnType("PKTABLE_SCHEM", new TTypeInfo(strTTI)), + createTColumnType("PKTABLE_NAME", new TTypeInfo(strTTI)), + createTColumnType("PKCOLUMN_NAME", new TTypeInfo(strTTI)), + createTColumnType("KEY_SEQ", new TTypeInfo(smallIntTTI)), + createTColumnType("UPDATE_RULE", new TTypeInfo(smallIntTTI)), + createTColumnType("DELETE_RULE", new TTypeInfo(smallIntTTI)), + createTColumnType("PK_NAME", new TTypeInfo(strTTI)), + createTColumnType("FK_NAME", new TTypeInfo(strTTI)), + createTColumnType("DEFERRABILITY", new TTypeInfo(smallIntTTI)) + }; + + return getEmptyResultSetWithDesc(columns); } @Override