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 2021/07/01 19:49:30 UTC
[incubator-pinot] branch jdbc_tableau created (now ee2848e)
This is an automated email from the ASF dual-hosted git repository.
kharekartik pushed a change to branch jdbc_tableau
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git.
at ee2848e Make JDBC driver compatible for Timestamp datatype - Add Timestamp datatype support in driver utils - Add support for max rows with default as integer.max so that all the results are returned by default - Include java-client dependency in the jdbc client shaded jar. This will allow users to copy jdbc jar alone in the drivers.
This branch includes the following new commits:
new ee2848e Make JDBC driver compatible for Timestamp datatype - Add Timestamp datatype support in driver utils - Add support for max rows with default as integer.max so that all the results are returned by default - Include java-client dependency in the jdbc client shaded jar. This will allow users to copy jdbc jar alone in the drivers.
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org
[incubator-pinot] 01/01: Make JDBC driver compatible for Timestamp
datatype - Add Timestamp datatype support in driver utils - Add support for
max rows with default as integer.max so that all the results are returned
by default - Include java-client dependency in the jdbc client shaded jar.
This will allow users to copy jdbc jar alone in the drivers.
Posted by kh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
kharekartik pushed a commit to branch jdbc_tableau
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
commit ee2848e8c265ac14f9b6797f3fcfa87ef87ef3c0
Author: KKcorps <kh...@gmail.com>
AuthorDate: Fri Jul 2 00:46:46 2021 +0530
Make JDBC driver compatible for Timestamp datatype
- Add Timestamp datatype support in driver utils
- Add support for max rows with default as integer.max so that all the results are returned by default
- Include java-client dependency in the jdbc client shaded jar. This will allow users to copy jdbc jar alone in the drivers.
---
pinot-clients/pinot-jdbc-client/pom.xml | 34 ++++++++++++++++++++++
.../pinot/client/PinotPreparedStatement.java | 34 ++++++++++++++++++++--
.../org/apache/pinot/client/PinotStatement.java | 29 ++++++++++++++++++
.../org/apache/pinot/client/utils/DriverUtils.java | 7 +++++
.../pinot/client/PinotPreparedStatementTest.java | 18 ++++++++----
5 files changed, 114 insertions(+), 8 deletions(-)
diff --git a/pinot-clients/pinot-jdbc-client/pom.xml b/pinot-clients/pinot-jdbc-client/pom.xml
index 54e26aa..9562491 100644
--- a/pinot-clients/pinot-jdbc-client/pom.xml
+++ b/pinot-clients/pinot-jdbc-client/pom.xml
@@ -63,6 +63,7 @@
<dependency>
<groupId>org.apache.pinot</groupId>
<artifactId>pinot-java-client</artifactId>
+ <version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
@@ -106,4 +107,37 @@
<artifactId>jsr305</artifactId>
</dependency>
</dependencies>
+
+ <profiles>
+ <profile>
+ <id>build-shaded-jar</id>
+ <activation>
+ <property>
+ <name>skipShade</name>
+ <value>!true</value>
+ </property>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-shade-plugin</artifactId>
+ <version>3.2.1</version>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ <configuration>
+ <transformers>
+ <transformer implementation="org.apache.maven.plugins.shade.resource.ApacheLicenseResourceTransformer"/>
+ </transformers>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
</project>
diff --git a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotPreparedStatement.java b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotPreparedStatement.java
index 20d6847..648b877 100644
--- a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotPreparedStatement.java
+++ b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotPreparedStatement.java
@@ -33,6 +33,7 @@ import org.apache.pinot.client.utils.DateTimeUtils;
public class PinotPreparedStatement extends AbstractBasePreparedStatement {
private static final String QUERY_FORMAT = "sql";
+ public static final String LIMIT_STATEMENT = "LIMIT";
private Connection _connection;
private org.apache.pinot.client.Connection _session;
private ResultSetGroup _resultSetGroup;
@@ -40,13 +41,17 @@ public class PinotPreparedStatement extends AbstractBasePreparedStatement {
private String _query;
private boolean _closed;
private ResultSet _resultSet;
+ private Integer _maxRows = Integer.MAX_VALUE;
public PinotPreparedStatement(PinotConnection connection, String query) {
_connection = connection;
_session = connection.getSession();
- _query = query;
_closed = false;
- _preparedStatement = new PreparedStatement(_session, new Request(QUERY_FORMAT, query));
+ _query = query;
+ if(!_query.contains(LIMIT_STATEMENT)) {
+ _query = _query.concat(" " + LIMIT_STATEMENT + " " + _maxRows);
+ }
+ _preparedStatement = new PreparedStatement(_session, new Request(QUERY_FORMAT, _query));
}
@Override
@@ -234,7 +239,6 @@ public class PinotPreparedStatement extends AbstractBasePreparedStatement {
return execute(sql);
}
-
@Override
public ResultSet getResultSet()
throws SQLException {
@@ -258,6 +262,30 @@ public class PinotPreparedStatement extends AbstractBasePreparedStatement {
}
@Override
+ public int getFetchSize()
+ throws SQLException {
+ return _maxRows;
+ }
+
+ @Override
+ public void setFetchSize(int rows)
+ throws SQLException {
+ _maxRows = rows;
+ }
+
+ @Override
+ public int getMaxRows()
+ throws SQLException {
+ return _maxRows;
+ }
+
+ @Override
+ public void setMaxRows(int max)
+ throws SQLException {
+ _maxRows = max;
+ }
+
+ @Override
public boolean isClosed()
throws SQLException {
return _closed;
diff --git a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotStatement.java b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotStatement.java
index 4fbe02d..d3df38e 100644
--- a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotStatement.java
+++ b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/PinotStatement.java
@@ -27,11 +27,13 @@ import org.apache.pinot.client.base.AbstractBaseStatement;
public class PinotStatement extends AbstractBaseStatement {
private static final String QUERY_FORMAT = "sql";
+ public static final String LIMIT_STATEMENT = "LIMIT";
private Connection _connection;
private org.apache.pinot.client.Connection _session;
private ResultSetGroup _resultSetGroup;
private boolean _closed;
private ResultSet _resultSet;
+ private Integer _maxRows = Integer.MAX_VALUE;
public PinotStatement(PinotConnection connection) {
_connection = connection;
@@ -59,6 +61,9 @@ public class PinotStatement extends AbstractBaseStatement {
throws SQLException {
validateState();
try {
+ if(!sql.contains(LIMIT_STATEMENT)) {
+ sql = sql.concat(" " + LIMIT_STATEMENT + " " + _maxRows);
+ }
Request request = new Request(QUERY_FORMAT, sql);
_resultSetGroup = _session.execute(request);
if (_resultSetGroup.getResultSetCount() == 0) {
@@ -117,6 +122,30 @@ public class PinotStatement extends AbstractBaseStatement {
}
@Override
+ public int getFetchSize()
+ throws SQLException {
+ return _maxRows;
+ }
+
+ @Override
+ public void setFetchSize(int rows)
+ throws SQLException {
+ _maxRows = rows;
+ }
+
+ @Override
+ public int getMaxRows()
+ throws SQLException {
+ return _maxRows;
+ }
+
+ @Override
+ public void setMaxRows(int max)
+ throws SQLException {
+ _maxRows = max;
+ }
+
+ @Override
public boolean isClosed()
throws SQLException {
return _closed;
diff --git a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/utils/DriverUtils.java b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/utils/DriverUtils.java
index 3b533b1..944f7ab 100644
--- a/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/utils/DriverUtils.java
+++ b/pinot-clients/pinot-jdbc-client/src/main/java/org/apache/pinot/client/utils/DriverUtils.java
@@ -19,6 +19,7 @@
package org.apache.pinot.client.utils;
import java.net.URI;
+import java.sql.Timestamp;
import java.sql.Types;
import java.util.Collections;
import java.util.List;
@@ -99,6 +100,9 @@ public class DriverUtils {
case "BYTES":
columnsSQLDataType = Types.BINARY;
break;
+ case "TIMESTAMP":
+ columnsSQLDataType = Types.TIMESTAMP;
+ break;
default:
columnsSQLDataType = Types.NULL;
}
@@ -132,6 +136,9 @@ public class DriverUtils {
case "BYTES":
columnsJavaClassName = byte.class.getTypeName();
break;
+ case "TIMESTAMP":
+ columnsJavaClassName = Timestamp.class.getTypeName();
+ break;
default:
columnsJavaClassName = String.class.getTypeName();
}
diff --git a/pinot-clients/pinot-jdbc-client/src/test/java/org/apache/pinot/client/PinotPreparedStatementTest.java b/pinot-clients/pinot-jdbc-client/src/test/java/org/apache/pinot/client/PinotPreparedStatementTest.java
index b32e3fe..ed58239 100644
--- a/pinot-clients/pinot-jdbc-client/src/test/java/org/apache/pinot/client/PinotPreparedStatementTest.java
+++ b/pinot-clients/pinot-jdbc-client/src/test/java/org/apache/pinot/client/PinotPreparedStatementTest.java
@@ -51,7 +51,9 @@ public class PinotPreparedStatementTest {
preparedStatement.setFloat(6, 1.4f);
preparedStatement.executeQuery();
- Assert.assertEquals(_dummyPinotClientTransport.getLastQuery(),
+ String lastExecutedQuery = _dummyPinotClientTransport.getLastQuery();
+
+ Assert.assertEquals(lastExecutedQuery.substring(0, lastExecutedQuery.indexOf("LIMIT")).stripTrailing(),
"SELECT * FROM dummy WHERE name = 'foo' and age = 20 and score = 98.1 and ts = 123456789 and eligible = 'true' and sub_score = 1.4");
preparedStatement.clearParameters();
@@ -63,7 +65,9 @@ public class PinotPreparedStatementTest {
preparedStatement.setFloat(6, 0);
preparedStatement.executeQuery();
- Assert.assertEquals(_dummyPinotClientTransport.getLastQuery(),
+ lastExecutedQuery = _dummyPinotClientTransport.getLastQuery();
+
+ Assert.assertEquals(lastExecutedQuery.substring(0, lastExecutedQuery.indexOf("LIMIT")).stripTrailing(),
"SELECT * FROM dummy WHERE name = '' and age = 0 and score = 0.0 and ts = 0 and eligible = 'false' and sub_score = 0.0");
}
@@ -81,8 +85,9 @@ public class PinotPreparedStatementTest {
String expectedDate = DateTimeUtils.dateToString(new Date(currentTimestamp));
String expectedTime = DateTimeUtils.timeStampToString(new Timestamp(currentTimestamp));
+ String lastExecutedQuery = _dummyPinotClientTransport.getLastQuery();
- Assert.assertEquals(_dummyPinotClientTransport.getLastQuery(), String
+ Assert.assertEquals(lastExecutedQuery.substring(0, lastExecutedQuery.indexOf("LIMIT")).stripTrailing(), String
.format("SELECT * FROM dummy WHERE date = '%s' and updated_at = '%s' and created_at = '%s'", expectedDate,
expectedTime, expectedTime));
}
@@ -96,13 +101,16 @@ public class PinotPreparedStatementTest {
String value = "1234567891011121314151617181920";
preparedStatement.setBigDecimal(1, new BigDecimal(value));
preparedStatement.executeQuery();
- Assert.assertEquals(_dummyPinotClientTransport.getLastQuery(),
+
+ String lastExecutedQuery = _dummyPinotClientTransport.getLastQuery();
+ Assert.assertEquals(lastExecutedQuery.substring(0, lastExecutedQuery.indexOf("LIMIT")).stripTrailing(),
String.format("SELECT * FROM dummy WHERE value = '%s'", value));
preparedStatement.clearParameters();
preparedStatement.setBytes(1, value.getBytes());
preparedStatement.executeQuery();
- Assert.assertEquals(_dummyPinotClientTransport.getLastQuery(),
+ lastExecutedQuery = _dummyPinotClientTransport.getLastQuery();
+ Assert.assertEquals(lastExecutedQuery.substring(0, lastExecutedQuery.indexOf("LIMIT")).stripTrailing(),
String.format("SELECT * FROM dummy WHERE value = '%s'", Hex.encodeHexString(value.getBytes())));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org