You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by kh...@apache.org on 2020/09/08 06:39:03 UTC

[incubator-pinot] branch master updated: Return datatypes along with column names (#5946)

This is an automated email from the ASF dual-hosted git repository.

kharekartik pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 024dfc2  Return datatypes along with column names (#5946)
024dfc2 is described below

commit 024dfc2082538bfd38cc7686aeb95b404baefdec
Author: Kartik Khare <kh...@gmail.com>
AuthorDate: Tue Sep 8 12:07:12 2020 +0530

    Return datatypes along with column names (#5946)
    
    * Return datatypes along with column names
    
    * Add test for result data type
    
    * Fix style checks
---
 .../apache/pinot/client/PinotResultMetadata.java   |  4 +-
 .../org/apache/pinot/client/PinotResultSet.java    |  5 +-
 .../org/apache/pinot/client/utils/Constants.java   | 18 ++++----
 .../apache/pinot/client/PinotResultSetTest.java    | 53 ++++++++++++++--------
 .../src/test/resources/result_table.json           | 48 ++++++++++++++++++++
 5 files changed, 95 insertions(+), 33 deletions(-)

diff --git a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotResultMetadata.java b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotResultMetadata.java
index 138292c..12a2d9e 100644
--- a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotResultMetadata.java
+++ b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotResultMetadata.java
@@ -19,7 +19,6 @@
 package org.apache.pinot.client;
 
 import java.sql.SQLException;
-import java.sql.Types;
 import java.util.HashMap;
 import java.util.Map;
 import org.apache.pinot.client.base.AbstractBaseResultSetMetadata;
@@ -31,8 +30,9 @@ public class PinotResultMetadata extends AbstractBaseResultSetMetadata {
   private Map<Integer, String> _columns = new HashMap<>();
   private Map<Integer, String> _columnDataTypes = new HashMap<>();
 
-  public PinotResultMetadata(int totalColumns, Map<String, Integer> columnsNameToIndex) {
+  public PinotResultMetadata(int totalColumns, Map<String, Integer> columnsNameToIndex, Map<Integer, String> columnDataTypes) {
     _totalColumns = totalColumns;
+    _columnDataTypes = columnDataTypes;
     for (Map.Entry<String, Integer> entry : columnsNameToIndex.entrySet()) {
       _columns.put(entry.getValue(), entry.getKey());
     }
diff --git a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotResultSet.java b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotResultSet.java
index 1f36044..cf3ddbc 100644
--- a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotResultSet.java
+++ b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotResultSet.java
@@ -32,7 +32,6 @@ import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 import java.sql.Time;
 import java.sql.Timestamp;
-import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.HashMap;
 import java.util.Map;
@@ -51,6 +50,7 @@ public class PinotResultSet extends AbstractBaseResultSet {
   private int _currentRow;
   private int _totalColumns;
   private Map<String, Integer> _columns = new HashMap<>();
+  private Map<Integer, String> _columnDataTypes = new HashMap<>();
   private boolean _closed;
   private boolean _wasNull = false;
 
@@ -62,6 +62,7 @@ public class PinotResultSet extends AbstractBaseResultSet {
     _closed = false;
     for (int i = 0; i < _totalColumns; i++) {
       _columns.put(_resultSet.getColumnName(i), i + 1);
+      _columnDataTypes.put(i + 1, _resultSet.getColumnDataType(i));
     }
   }
 
@@ -167,7 +168,7 @@ public class PinotResultSet extends AbstractBaseResultSet {
   public ResultSetMetaData getMetaData()
       throws SQLException {
     validateState();
-    return new PinotResultMetadata(_totalColumns, _columns);
+    return new PinotResultMetadata(_totalColumns, _columns, _columnDataTypes);
   }
 
   @Override
diff --git a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/utils/Constants.java b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/utils/Constants.java
index b86a1d2..425bec9 100644
--- a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/utils/Constants.java
+++ b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/utils/Constants.java
@@ -18,8 +18,6 @@
  */
 package org.apache.pinot.client.utils;
 
-
-
 public class Constants {
   public static final String DRIVER_NAME = "APACHE_PINOT_DRIVER";
   public static final String DRIVER_VERSION = "1.0";
@@ -32,11 +30,15 @@ public class Constants {
   public static final String[] SCHEMA_COLUMNS = {"TABLE_SCHEM", "TABLE_CATALOG"};
   public static final String[] SCHEMA_COLUMNS_DTYPES = {"STRING", "STRING"};
 
-  public static final String[] TABLE_COLUMNS = {"TABLE_SCHEM", "TABLE_CATALOG", "TABLE_NAME", "TABLE_TYPE", "REMARKS", "TYPE_CAT", "TYPE_SCHEM", "TYPE_NAME", "SELF_REFERENCING_COL_NAME", "REF_GENERATION"};
-  public static final String[] TABLE_COLUMNS_DTYPES = {"STRING", "STRING","STRING", "STRING","STRING", "STRING","STRING", "STRING","STRING"};
+  public static final String[] TABLE_COLUMNS =
+      {"TABLE_SCHEM", "TABLE_CATALOG", "TABLE_NAME", "TABLE_TYPE", "REMARKS", "TYPE_CAT", "TYPE_SCHEM", "TYPE_NAME", "SELF_REFERENCING_COL_NAME", "REF_GENERATION"};
+  public static final String[] TABLE_COLUMNS_DTYPES =
+      {"STRING", "STRING", "STRING", "STRING", "STRING", "STRING", "STRING", "STRING", "STRING", "STRING"};
 
-  public static final String[] TABLE_SCHEMA_COLUMNS = {"TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "COLUMN_NAME", "DATA_TYPE", "TYPE_NAME", "COLUMN_SIZE", "BUFFER_LENGTH", "DECIMAL_DIGITS", "NUM_PREC_RADIX", "NULLABLE", "REMARKS", "COLUMN_DEF", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "CHAR_OCTET_LENGTH", "ORDINAL_POSITION", "IS_NULLABLE", "SCOPE_CATALOG", "SCOPE_SCHEMA", "SCOPE_TABLE", "SOURCE_DATA_TYPE", "IS_AUTOINCREMENT", "IS_GENERATEDCOLUMN"};
-  public static final String[] TABLE_SCHEMA_COLUMNS_DTYPES = {"STRING", "STRING", "STRING", "STRING", "INT", "STRING", "INT", "INT", "INT", "INT", "INT", "STRING", "STRING", "INT", "INT", "INT","INT", "STRING", "STRING", "STRING", "STRING", "INT", "STRING", "STRING"};
+  public static final String[] TABLE_SCHEMA_COLUMNS =
+      {"TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "COLUMN_NAME", "DATA_TYPE", "TYPE_NAME", "COLUMN_SIZE", "BUFFER_LENGTH", "DECIMAL_DIGITS", "NUM_PREC_RADIX", "NULLABLE", "REMARKS", "COLUMN_DEF", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "CHAR_OCTET_LENGTH", "ORDINAL_POSITION", "IS_NULLABLE", "SCOPE_CATALOG", "SCOPE_SCHEMA", "SCOPE_TABLE", "SOURCE_DATA_TYPE", "IS_AUTOINCREMENT", "IS_GENERATEDCOLUMN"};
+  public static final String[] TABLE_SCHEMA_COLUMNS_DTYPES =
+      {"STRING", "STRING", "STRING", "STRING", "INT", "STRING", "INT", "INT", "INT", "INT", "INT", "STRING", "STRING", "INT", "INT", "INT", "INT", "STRING", "STRING", "STRING", "STRING", "INT", "STRING", "STRING"};
 
   public static final String[] TABLE_TYPES_COLUMNS = {"TABLE_TYPE"};
   public static final String[] TABLE_TYPES_COLUMNS_DTYPES = {"STRING"};
@@ -44,7 +46,6 @@ public class Constants {
   public static final String TABLE_TYPE = "TABLE";
   public static final String GLOBAL_CATALOG = "global";
 
-
   public static final String SYS_FUNCTIONS = "maxTimeuuid,minTimeuuid,token,uuid";
   public static final String NUM_FUNCTIONS = "avg,count,max,min,sum,exp,ln,ceil,floor,sqrt";
   public static final String TIME_FUNCTIONS =
@@ -54,6 +55,5 @@ public class Constants {
           + "fromEpochSecondsBucket,fromEpochMinutesBucket,fromEpochHoursBucket,fromEpochDaysBucket,"
           + "toDateTime,fromDateTime,round,now";
   public static final String STRING_FUNCTIONS =
-              "lower,upper,trim,ltrim,rtrim,subst,reverse,replace,lpad,rpad,length,strpos,startsWith,concat";
-
+      "lower,upper,trim,ltrim,rtrim,subst,reverse,replace,lpad,rpad,length,strpos,startsWith,concat";
 }
diff --git a/pinot-clients/pinot-jdbc-client/src/test/java/org/apache/pinot/client/PinotResultSetTest.java b/pinot-clients/pinot-jdbc-client/src/test/java/org/apache/pinot/client/PinotResultSetTest.java
index a860818..e1b470b 100644
--- a/pinot-clients/pinot-jdbc-client/src/test/java/org/apache/pinot/client/PinotResultSetTest.java
+++ b/pinot-clients/pinot-jdbc-client/src/test/java/org/apache/pinot/client/PinotResultSetTest.java
@@ -20,7 +20,7 @@ package org.apache.pinot.client;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import java.io.InputStream;
-import java.text.SimpleDateFormat;
+import java.sql.ResultSetMetaData;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.concurrent.Future;
@@ -37,8 +37,7 @@ import org.testng.annotations.Test;
  *
  */
 public class PinotResultSetTest {
-  public static final String TEST_RESULT_SET_RESOURCE = "selection.json";
-  public static final String DATE_FORMAT = "yyyy-mm-dd";
+  public static final String TEST_RESULT_SET_RESOURCE = "result_table.json";
   private DummyJsonTransport _dummyJsonTransport = new DummyJsonTransport();
   private PinotClientTransportFactory _previousTransportFactory = null;
 
@@ -52,9 +51,10 @@ public class PinotResultSetTest {
     int currentRow = 0;
     while (pinotResultSet.next()) {
       Assert.assertEquals(pinotResultSet.getInt(1), resultSet.getInt(currentRow, 0));
-      Assert.assertEquals(pinotResultSet.getLong(1), resultSet.getLong(currentRow, 0));
-      Assert.assertEquals(pinotResultSet.getString(1), resultSet.getString(currentRow, 0));
-      Assert.assertEquals(pinotResultSet.getDouble(79), resultSet.getDouble(currentRow, 78));
+      Assert.assertEquals(pinotResultSet.getLong(2), resultSet.getLong(currentRow, 1));
+      Assert.assertEquals(pinotResultSet.getFloat(3), resultSet.getFloat(currentRow, 2));
+      Assert.assertEquals(pinotResultSet.getDouble(4), resultSet.getDouble(currentRow, 3));
+      Assert.assertEquals(pinotResultSet.getString(5), resultSet.getString(currentRow, 4));
       currentRow++;
     }
   }
@@ -67,23 +67,23 @@ public class PinotResultSetTest {
     PinotResultSet pinotResultSet = new PinotResultSet(resultSet);
 
     int currentRow = 0;
-    int targetRow = 10;
+    int targetRow = 7;
     while (pinotResultSet.next() && currentRow < targetRow) {
       currentRow++;
     }
 
-    Assert.assertEquals(pinotResultSet.getInt(10), resultSet.getInt(targetRow, 9));
+    Assert.assertEquals(pinotResultSet.getInt(1), resultSet.getInt(targetRow, 0));
 
     pinotResultSet.first();
     Assert.assertTrue(pinotResultSet.isFirst());
-    Assert.assertEquals(pinotResultSet.getInt(10), resultSet.getInt(0, 9));
+    Assert.assertEquals(pinotResultSet.getInt(1), resultSet.getInt(0, 0));
 
     pinotResultSet.last();
     Assert.assertTrue(pinotResultSet.isLast());
-    Assert.assertEquals(pinotResultSet.getInt(10), resultSet.getInt(resultSet.getRowCount() - 1, 9));
+    Assert.assertEquals(pinotResultSet.getInt(1), resultSet.getInt(resultSet.getRowCount() - 1, 0));
 
     pinotResultSet.previous();
-    Assert.assertEquals(pinotResultSet.getInt(10), resultSet.getInt(resultSet.getRowCount() - 2, 9));
+    Assert.assertEquals(pinotResultSet.getInt(1), resultSet.getInt(resultSet.getRowCount() - 2, 0));
 
     pinotResultSet.first();
     pinotResultSet.previous();
@@ -94,14 +94,14 @@ public class PinotResultSetTest {
     Assert.assertTrue(pinotResultSet.isAfterLast());
 
     pinotResultSet.first();
-    pinotResultSet.absolute(18);
-    Assert.assertEquals(pinotResultSet.getInt(10), resultSet.getInt(18, 9));
+    pinotResultSet.absolute(7);
+    Assert.assertEquals(pinotResultSet.getInt(1), resultSet.getInt(7, 0));
 
     pinotResultSet.relative(-5);
-    Assert.assertEquals(pinotResultSet.getInt(10), resultSet.getInt(13, 9));
+    Assert.assertEquals(pinotResultSet.getInt(1), resultSet.getInt(2, 0));
 
     pinotResultSet.relative(1);
-    Assert.assertEquals(pinotResultSet.getInt(10), resultSet.getInt(14, 9));
+    Assert.assertEquals(pinotResultSet.getInt(1), resultSet.getInt(3, 0));
   }
 
   @Test
@@ -114,9 +114,9 @@ public class PinotResultSetTest {
     int currentRow = 0;
 
     while (pinotResultSet.next()) {
-      Assert.assertEquals(IOUtils.toString(pinotResultSet.getAsciiStream(30)), resultSet.getString(currentRow, 29));
-      Assert.assertEquals(IOUtils.toString(pinotResultSet.getUnicodeStream(30)), resultSet.getString(currentRow, 29));
-      Assert.assertEquals(IOUtils.toString(pinotResultSet.getCharacterStream(30)), resultSet.getString(currentRow, 29));
+      Assert.assertEquals(IOUtils.toString(pinotResultSet.getAsciiStream(5)), resultSet.getString(currentRow, 4));
+      Assert.assertEquals(IOUtils.toString(pinotResultSet.getUnicodeStream(5)), resultSet.getString(currentRow, 4));
+      Assert.assertEquals(IOUtils.toString(pinotResultSet.getCharacterStream(5)), resultSet.getString(currentRow, 4));
       currentRow++;
     }
   }
@@ -130,9 +130,9 @@ public class PinotResultSetTest {
 
     int currentRow = 0;
     while (pinotResultSet.next()) {
-      Date date = DateTimeUtils.getDateFromString(resultSet.getString(currentRow, 51), Calendar.getInstance());
+      Date date = DateTimeUtils.getDateFromString(resultSet.getString(currentRow, 5), Calendar.getInstance());
       long expectedTimeMillis = date.getTime();
-      Assert.assertEquals(pinotResultSet.getDate(52).getTime(), expectedTimeMillis);
+      Assert.assertEquals(pinotResultSet.getDate(6).getTime(), expectedTimeMillis);
       currentRow++;
     }
   }
@@ -149,6 +149,19 @@ public class PinotResultSetTest {
     }
   }
 
+  @Test
+  public void testGetResultMetadata()
+      throws Exception {
+    ResultSetGroup resultSetGroup = getResultSet(TEST_RESULT_SET_RESOURCE);
+    ResultSet resultSet = resultSetGroup.getResultSet(0);
+    PinotResultSet pinotResultSet = new PinotResultSet(resultSet);
+    ResultSetMetaData pinotResultSetMetadata = pinotResultSet.getMetaData();
+
+    for (int i = 0; i < resultSet.getColumnCount(); i++) {
+      Assert.assertEquals(pinotResultSetMetadata.getColumnTypeName(i + 1), resultSet.getColumnDataType(i));
+    }
+  }
+
   private ResultSetGroup getResultSet(String resourceName) {
     _dummyJsonTransport._resource = resourceName;
     Connection connection = ConnectionFactory.fromHostList("dummy");
diff --git a/pinot-clients/pinot-jdbc-client/src/test/resources/result_table.json b/pinot-clients/pinot-jdbc-client/src/test/resources/result_table.json
new file mode 100644
index 0000000..f35b0fe
--- /dev/null
+++ b/pinot-clients/pinot-jdbc-client/src/test/resources/result_table.json
@@ -0,0 +1,48 @@
+{
+  "resultTable": {
+    "dataSchema": {
+      "columnNames": [
+        "columnA",
+        "columnB",
+        "columnC",
+        "columnD",
+        "columnE",
+        "columnF"
+      ],
+      "columnDataTypes": [
+        "INT",
+        "LONG",
+        "FLOAT",
+        "DOUBLE",
+        "STRING",
+        "STRING"
+      ]
+    },
+    "rows": [
+      [1,2324,3432.3443,2.2,"test", "2020-01-02"],
+      [2,2675,34323.342,3743724.1,"jbdasnfb", "2020-07-17"],
+      [3,854,4432.342,27834.2121,"JHBNNB", "2020-08-31"],
+      [4,74839,653.342,25452.5434432,"HHJkjkh", "1999-06-30"],
+      [5,567348213,5412.1,235235.23425,"ABCBD", "2004-06-29"],
+      [6,273924,54543.3453,6757.26775,"fuygad32748", "2018-02-13"],
+      [7,64383,265.534,345467.5667,"dyhudfa$%^&!#@^", "2014-11-04"],
+      [8,859348,54.98,87663.23456,"KHFGHJSF","2007-12-31"]
+    ]
+  },
+  "exceptions": [],
+  "numServersQueried": 1,
+  "numServersResponded": 1,
+  "numSegmentsQueried": 1,
+  "numSegmentsProcessed": 1,
+  "numSegmentsMatched": 1,
+  "numConsumingSegmentsQueried": 0,
+  "numDocsScanned": 8,
+  "numEntriesScannedInFilter": 0,
+  "numEntriesScannedPostFilter": 250,
+  "numGroupsLimitReached": false,
+  "totalDocs": 97889,
+  "timeUsedMs": 5,
+  "segmentStatistics": [],
+  "traceInfo": {},
+  "minConsumingFreshnessTimeMs": 0
+}
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org