SQL: Introduce ODBC mode, similar to JDBC (#34825)

Close #34720
This commit is contained in:
Costin Leau 2018-10-25 12:40:00 +03:00 committed by GitHub
parent a7e08f462f
commit b97546a5a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 30 additions and 5 deletions

View File

@ -239,7 +239,8 @@ public class XPackLicenseState {
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;
}
@ -628,6 +629,20 @@ public class XPackLicenseState {
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;
}

View File

@ -167,7 +167,7 @@ public class SqlQueryResponse extends ActionResponse implements ToXContentObject
* 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 {

View File

@ -13,7 +13,8 @@ import java.util.Locale;
*/
public enum Mode {
PLAIN,
JDBC;
JDBC,
ODBC;
public static Mode fromString(String mode) {
if (mode == null) {
@ -27,4 +28,8 @@ public enum Mode {
public String toString() {
return this.name().toLowerCase(Locale.ROOT);
}
public static boolean isDriver(Mode mode) {
return mode == JDBC || mode == ODBC;
}
}

View File

@ -64,6 +64,11 @@ public class SqlPlugin extends Plugin implements ActionPlugin {
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);

View File

@ -20,6 +20,7 @@ import org.elasticsearch.xpack.sql.action.SqlQueryRequest;
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;
@ -30,7 +31,6 @@ import java.util.ArrayList;
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;
@ -73,7 +73,7 @@ public class TransportSqlQueryAction extends HandledTransportAction<SqlQueryRequ
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 {