aboutsummaryrefslogtreecommitdiff
path: root/exec/jdbc
diff options
context:
space:
mode:
authorJacques Nadeau <jacques@apache.org>2014-07-05 08:57:59 -0700
committerJacques Nadeau <jacques@apache.org>2014-07-26 21:40:33 -0700
commite52d2b66bdd2750dc2bb3c98fa937e8984b93c12 (patch)
tree141871e3ba8513137cb04f204e1164925382ea46 /exec/jdbc
parentcaa8b78c5c31c44e59b5ff1bdf6f1900d14b1a1a (diff)
move to optiq 0.9
Diffstat (limited to 'exec/jdbc')
-rw-r--r--exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillColumnMetaDataList.java91
-rw-r--r--exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillCursor.java26
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();
}
-
+
}