diff options
author | Jacques Nadeau <jacques@apache.org> | 2014-07-05 08:57:59 -0700 |
---|---|---|
committer | Jacques Nadeau <jacques@apache.org> | 2014-07-26 21:40:33 -0700 |
commit | e52d2b66bdd2750dc2bb3c98fa937e8984b93c12 (patch) | |
tree | 141871e3ba8513137cb04f204e1164925382ea46 /exec/jdbc | |
parent | caa8b78c5c31c44e59b5ff1bdf6f1900d14b1a1a (diff) |
move to optiq 0.9
Diffstat (limited to 'exec/jdbc')
-rw-r--r-- | exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillColumnMetaDataList.java | 91 | ||||
-rw-r--r-- | exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillCursor.java | 26 |
2 files changed, 101 insertions, 16 deletions
diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillColumnMetaDataList.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillColumnMetaDataList.java index 25d6226e9..51722eafd 100644 --- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillColumnMetaDataList.java +++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillColumnMetaDataList.java @@ -28,6 +28,8 @@ import org.apache.drill.exec.record.BatchSchema; import org.apache.drill.exec.record.MaterializedField; import net.hydromatic.avatica.ColumnMetaData; +import net.hydromatic.avatica.ColumnMetaData.AvaticaType; +import net.hydromatic.avatica.ColumnMetaData.Rep; public class DrillColumnMetaDataList extends BasicList<ColumnMetaData>{ static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(DrillColumnMetaDataList.class); @@ -66,16 +68,97 @@ public class DrillColumnMetaDataList extends BasicList<ColumnMetaData>{ t.hasScale() ? t.getScale() : 0, // scale null, // tablename is null so sqlline doesn't try to retrieve primary keys. catalogName, // catalogname - Types.getSqlType(t), // sql type - t.getMinorType().name()+":" + t.getMode().name(), // typename + getAvaticaType(t), // sql type true, // readonly false, // writable false, // definitely writable - "none", // column class name - ColumnMetaData.Rep.BOOLEAN // Dummy value for representation as it doesn't apply in drill's case. + "none" // column class name ); columns[i] =col; } } + private static AvaticaType getAvaticaType(MajorType t){ + int sqlTypeId = Types.getSqlType(t); + return ColumnMetaData.scalar(sqlTypeId, getSqlTypeName(sqlTypeId), Rep.BOOLEAN /* dummy value, unused */); + } + + private static String getSqlTypeName(int type) { + switch (type) { + case java.sql.Types.BIT: + return "BIT"; + case java.sql.Types.TINYINT: + return "TINYINT"; + case java.sql.Types.SMALLINT: + return "SMALLINT"; + case java.sql.Types.INTEGER: + return "INTEGER"; + case java.sql.Types.BIGINT: + return "BIGINT"; + case java.sql.Types.FLOAT: + return "FLOAT"; + case java.sql.Types.REAL: + return "REAL"; + case java.sql.Types.DOUBLE: + return "DOUBLE"; + case java.sql.Types.NUMERIC: + return "NUMERIC"; + case java.sql.Types.DECIMAL: + return "DECIMAL"; + case java.sql.Types.CHAR: + return "CHAR"; + case java.sql.Types.VARCHAR: + return "VARCHAR"; + case java.sql.Types.LONGVARCHAR: + return "LONGVARCHAR"; + case java.sql.Types.DATE: + return "DATE"; + case java.sql.Types.TIME: + return "TIME"; + case java.sql.Types.TIMESTAMP: + return "TIMESTAMP"; + case java.sql.Types.BINARY: + return "BINARY"; + case java.sql.Types.VARBINARY: + return "VARBINARY"; + case java.sql.Types.LONGVARBINARY: + return "LONGVARBINARY"; + case java.sql.Types.NULL: + return "NULL"; + case java.sql.Types.OTHER: + return "OTHER"; + case java.sql.Types.JAVA_OBJECT: + return "JAVA_OBJECT"; + case java.sql.Types.DISTINCT: + return "DISTINCT"; + case java.sql.Types.STRUCT: + return "STRUCT"; + case java.sql.Types.ARRAY: + return "ARRAY"; + case java.sql.Types.BLOB: + return "BLOB"; + case java.sql.Types.CLOB: + return "CLOB"; + case java.sql.Types.REF: + return "REF"; + case java.sql.Types.DATALINK: + return "DATALINK"; + case java.sql.Types.BOOLEAN: + return "BOOLEAN"; + case java.sql.Types.ROWID: + return "ROWID"; + case java.sql.Types.NCHAR: + return "NCHAR"; + case java.sql.Types.NVARCHAR: + return "NVARCHAR"; + case java.sql.Types.LONGNVARCHAR: + return "LONGNVARCHAR"; + case java.sql.Types.NCLOB: + return "NCLOB"; + case java.sql.Types.SQLXML: + return "SQLXML"; + } + + return "?"; +} } diff --git a/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillCursor.java b/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillCursor.java index c2c9dd88a..380ee9947 100644 --- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillCursor.java +++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillCursor.java @@ -21,8 +21,10 @@ import java.sql.SQLException; import java.util.Calendar; import java.util.List; +import net.hydromatic.avatica.ArrayImpl.Factory; import net.hydromatic.avatica.ColumnMetaData; import net.hydromatic.avatica.Cursor; +import net.hydromatic.avatica.Cursor.Accessor; import org.apache.drill.exec.exception.SchemaChangeException; import org.apache.drill.exec.record.BatchSchema; @@ -34,23 +36,23 @@ public class DrillCursor implements Cursor{ static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(DrillCursor.class); private static final String UNKNOWN = "--UNKNOWN--"; - + private boolean started = false; private boolean finished = false; private final RecordBatchLoader currentBatch; private final DrillResultSet.Listener listener; private boolean redoFirstNext = false; private boolean first = true; - + private DrillColumnMetaDataList columnMetaDataList; private BatchSchema schema; - + final DrillResultSet results; int currentRecord = 0; private long recordBatchCount; private final DrillAccessorList accessors = new DrillAccessorList(); - + public DrillCursor(DrillResultSet results) { super(); this.results = results; @@ -59,7 +61,7 @@ public class DrillCursor implements Cursor{ } @Override - public List<Accessor> createAccessors(List<ColumnMetaData> types, Calendar localCalendar) { + public List<Accessor> createAccessors(List<ColumnMetaData> types, Calendar localCalendar, Factory factory) { columnMetaDataList = (DrillColumnMetaDataList) types; return accessors; } @@ -73,9 +75,9 @@ public class DrillCursor implements Cursor{ redoFirstNext = false; return true; } - + if(finished) return false; - + if(currentRecord+1 < currentBatch.getRecordCount()){ currentRecord++; return true; @@ -90,7 +92,7 @@ public class DrillCursor implements Cursor{ } first = false; - + if(qrb == null){ finished = true; return false; @@ -107,16 +109,16 @@ public class DrillCursor implements Cursor{ } catch (RpcException | InterruptedException | SchemaChangeException e) { throw new SQLException("Failure while trying to get next result batch.", e); } - + } } - + void updateColumns(){ accessors.generateAccessors(this, currentBatch); columnMetaDataList.updateColumnMetaData(UNKNOWN, UNKNOWN, UNKNOWN, schema); if(results.changeListener != null) results.changeListener.schemaChanged(schema); } - + public long getRecordBatchCount(){ return recordBatchCount; } @@ -130,5 +132,5 @@ public class DrillCursor implements Cursor{ public boolean wasNull() throws SQLException { return accessors.wasNull(); } - + } |