Skip to content

Commit

Permalink
SQL: Introduce ODBC mode, similar to JDBC (#34825)
Browse files Browse the repository at this point in the history
Close #34720

(cherry picked from commit b97546a)
  • Loading branch information
costin committed Oct 25, 2018
1 parent 12e1806 commit df125af
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,8 @@ private static String[] sqlAcknowledgementMessages(OperationMode currentMode, Op
switch (currentMode) {
case TRIAL:
case PLATINUM:
return new String[] { "JDBC support will be disabled, but you can continue to use SQL CLI and REST endpoint" };
return new String[] {
"JDBC and ODBC support will be disabled, but you can continue to use SQL CLI and REST endpoint" };
}
break;
}
Expand Down Expand Up @@ -627,6 +628,20 @@ public synchronized boolean isJdbcAllowed() {
return licensed && localStatus.active;
}

/**
* Determine if ODBC support should be enabled.
* <p>
* ODBC is available only in for {@link OperationMode#PLATINUM} and {@link OperationMode#TRIAL} licences
*/
public synchronized boolean isOdbcAllowed() {
Status localStatus = status;
OperationMode operationMode = localStatus.mode;

boolean licensed = operationMode == OperationMode.TRIAL || operationMode == OperationMode.PLATINUM;

return licensed && localStatus.active;
}

public synchronized boolean isTrialLicense() {
return status.mode == OperationMode.TRIAL;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ public XContentBuilder toXContent(XContentBuilder builder, Params params) throws
* Serializes the provided value in SQL-compatible way based on the client mode
*/
public static XContentBuilder value(XContentBuilder builder, Mode mode, Object value) throws IOException {
if (mode == Mode.JDBC && value instanceof ReadableDateTime) {
if (Mode.isDriver(mode) && value instanceof ReadableDateTime) {
// JDBC cannot parse dates in string format
builder.value(((ReadableDateTime) value).getMillis());
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
*/
public enum Mode {
PLAIN,
JDBC;
JDBC,
ODBC;

public static Mode fromString(String mode) {
if (mode == null) {
Expand All @@ -27,4 +28,8 @@ public static Mode fromString(String mode) {
public String toString() {
return this.name().toLowerCase(Locale.ROOT);
}

public static boolean isDriver(Mode mode) {
return mode == JDBC || mode == ODBC;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,11 @@ public SqlPlugin(Settings settings) {
throw LicenseUtils.newComplianceException("jdbc");
}
break;
case ODBC:
if (licenseState.isOdbcAllowed() == false) {
throw LicenseUtils.newComplianceException("odbc");
}
break;
case PLAIN:
if (licenseState.isSqlAllowed() == false) {
throw LicenseUtils.newComplianceException(XPackField.SQL);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.elasticsearch.xpack.sql.action.SqlQueryResponse;
import org.elasticsearch.xpack.sql.execution.PlanExecutor;
import org.elasticsearch.xpack.sql.proto.ColumnInfo;
import org.elasticsearch.xpack.sql.proto.Mode;
import org.elasticsearch.xpack.sql.session.Configuration;
import org.elasticsearch.xpack.sql.session.Cursors;
import org.elasticsearch.xpack.sql.session.RowSet;
Expand All @@ -30,7 +31,6 @@
import java.util.List;

import static java.util.Collections.unmodifiableList;
import static org.elasticsearch.xpack.sql.proto.Mode.JDBC;

public class TransportSqlQueryAction extends HandledTransportAction<SqlQueryRequest, SqlQueryResponse> {
private final PlanExecutor planExecutor;
Expand Down Expand Up @@ -76,7 +76,7 @@ public static void operation(PlanExecutor planExecutor, SqlQueryRequest request,
static SqlQueryResponse createResponse(SqlQueryRequest request, SchemaRowSet rowSet) {
List<ColumnInfo> columns = new ArrayList<>(rowSet.columnCount());
for (Schema.Entry entry : rowSet.schema()) {
if (request.mode() == JDBC) {
if (Mode.isDriver(request.mode())) {
columns.add(new ColumnInfo("", entry.name(), entry.type().esType, entry.type().jdbcType,
entry.type().displaySize));
} else {
Expand Down

0 comments on commit df125af

Please sign in to comment.