diff --git a/async-query-core/build.gradle b/async-query-core/build.gradle index d151ef065a2..393c3f5c13c 100644 --- a/async-query-core/build.gradle +++ b/async-query-core/build.gradle @@ -50,6 +50,8 @@ dependencies { implementation 'com.google.code.gson:gson:2.8.9' api group: 'com.amazonaws', name: 'aws-java-sdk-emrserverless', version: "${aws_java_sdk_version}" + api "org.opensearch:common-utils:${common_utils_snapshot_version}@jar" + testImplementation(platform("org.junit:junit-bom:5.9.3")) testCompileOnly('org.junit.jupiter:junit-jupiter') diff --git a/async-query-core/src/main/java/org/opensearch/sql/spark/asyncquery/model/AsyncQueryJobMetadata.java b/async-query-core/src/main/java/org/opensearch/sql/spark/asyncquery/model/AsyncQueryJobMetadata.java index 46aa8ac8981..488e57dc605 100644 --- a/async-query-core/src/main/java/org/opensearch/sql/spark/asyncquery/model/AsyncQueryJobMetadata.java +++ b/async-query-core/src/main/java/org/opensearch/sql/spark/asyncquery/model/AsyncQueryJobMetadata.java @@ -10,10 +10,10 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.SuperBuilder; +import org.opensearch.commons.ppl.serde.SerializeUtils; import org.opensearch.sql.spark.dispatcher.model.JobType; import org.opensearch.sql.spark.execution.statestore.StateModel; import org.opensearch.sql.spark.rest.model.LangType; -import org.opensearch.sql.utils.SerializeUtils; /** This class models all the metadata required for a job. */ @Data diff --git a/async-query-core/src/main/java/org/opensearch/sql/spark/parameter/SparkParameterComposerCollection.java b/async-query-core/src/main/java/org/opensearch/sql/spark/parameter/SparkParameterComposerCollection.java index c4d9509bd26..ddb8793b6ae 100644 --- a/async-query-core/src/main/java/org/opensearch/sql/spark/parameter/SparkParameterComposerCollection.java +++ b/async-query-core/src/main/java/org/opensearch/sql/spark/parameter/SparkParameterComposerCollection.java @@ -11,8 +11,8 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.Map; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.spark.asyncquery.model.AsyncQueryRequestContext; import org.opensearch.sql.spark.dispatcher.model.DispatchQueryRequest; diff --git a/async-query-core/src/main/java/org/opensearch/sql/spark/validator/GrammarElementValidatorProvider.java b/async-query-core/src/main/java/org/opensearch/sql/spark/validator/GrammarElementValidatorProvider.java index 9755a1c0b62..f81e6bef0cb 100644 --- a/async-query-core/src/main/java/org/opensearch/sql/spark/validator/GrammarElementValidatorProvider.java +++ b/async-query-core/src/main/java/org/opensearch/sql/spark/validator/GrammarElementValidatorProvider.java @@ -7,7 +7,7 @@ import java.util.Map; import lombok.AllArgsConstructor; -import org.opensearch.sql.datasource.model.DataSourceType; +import org.opensearch.commons.ppl.serde.DataSourceType; /** Provides GrammarElementValidator based on DataSourceType. */ @AllArgsConstructor diff --git a/async-query-core/src/main/java/org/opensearch/sql/spark/validator/PPLQueryValidator.java b/async-query-core/src/main/java/org/opensearch/sql/spark/validator/PPLQueryValidator.java index e630ffc45fe..011f1cabbb8 100644 --- a/async-query-core/src/main/java/org/opensearch/sql/spark/validator/PPLQueryValidator.java +++ b/async-query-core/src/main/java/org/opensearch/sql/spark/validator/PPLQueryValidator.java @@ -9,9 +9,9 @@ import org.antlr.v4.runtime.CommonTokenStream; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.common.antlr.CaseInsensitiveCharStream; import org.opensearch.sql.common.antlr.SyntaxAnalysisErrorListener; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.spark.antlr.parser.OpenSearchPPLLexer; import org.opensearch.sql.spark.antlr.parser.OpenSearchPPLParser; diff --git a/async-query-core/src/main/java/org/opensearch/sql/spark/validator/SQLQueryValidator.java b/async-query-core/src/main/java/org/opensearch/sql/spark/validator/SQLQueryValidator.java index 5d934411bf4..01c587259bb 100644 --- a/async-query-core/src/main/java/org/opensearch/sql/spark/validator/SQLQueryValidator.java +++ b/async-query-core/src/main/java/org/opensearch/sql/spark/validator/SQLQueryValidator.java @@ -8,7 +8,7 @@ import lombok.AllArgsConstructor; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.opensearch.sql.datasource.model.DataSourceType; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.spark.utils.SQLQueryUtils; /** Validate input SQL query based on the DataSourceType. */ diff --git a/async-query-core/src/test/java/org/opensearch/sql/spark/asyncquery/AsyncQueryCoreIntegTest.java b/async-query-core/src/test/java/org/opensearch/sql/spark/asyncquery/AsyncQueryCoreIntegTest.java index 6e2b40276cc..87ce98e3c98 100644 --- a/async-query-core/src/test/java/org/opensearch/sql/spark/asyncquery/AsyncQueryCoreIntegTest.java +++ b/async-query-core/src/test/java/org/opensearch/sql/spark/asyncquery/AsyncQueryCoreIntegTest.java @@ -36,9 +36,9 @@ import org.mockito.Captor; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.datasource.DataSourceService; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.spark.asyncquery.model.AsyncQueryExecutionResponse; import org.opensearch.sql.spark.asyncquery.model.AsyncQueryJobMetadata; import org.opensearch.sql.spark.asyncquery.model.AsyncQueryJobMetadata.AsyncQueryJobMetadataBuilder; diff --git a/async-query-core/src/test/java/org/opensearch/sql/spark/dispatcher/IndexDMLHandlerTest.java b/async-query-core/src/test/java/org/opensearch/sql/spark/dispatcher/IndexDMLHandlerTest.java index 570a7cab7d6..b235bff1967 100644 --- a/async-query-core/src/test/java/org/opensearch/sql/spark/dispatcher/IndexDMLHandlerTest.java +++ b/async-query-core/src/test/java/org/opensearch/sql/spark/dispatcher/IndexDMLHandlerTest.java @@ -27,7 +27,6 @@ import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.spark.asyncquery.model.AsyncQueryRequestContext; import org.opensearch.sql.spark.config.SparkSubmitParameterModifier; import org.opensearch.sql.spark.dispatcher.model.DispatchQueryContext; diff --git a/async-query-core/src/test/java/org/opensearch/sql/spark/dispatcher/SparkQueryDispatcherTest.java b/async-query-core/src/test/java/org/opensearch/sql/spark/dispatcher/SparkQueryDispatcherTest.java index b5ea349045e..4daeffcae04 100644 --- a/async-query-core/src/test/java/org/opensearch/sql/spark/dispatcher/SparkQueryDispatcherTest.java +++ b/async-query-core/src/test/java/org/opensearch/sql/spark/dispatcher/SparkQueryDispatcherTest.java @@ -60,9 +60,9 @@ import org.mockito.Captor; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.datasource.DataSourceService; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.spark.asyncquery.model.AsyncQueryJobMetadata; import org.opensearch.sql.spark.asyncquery.model.AsyncQueryRequestContext; import org.opensearch.sql.spark.client.EMRServerlessClient; diff --git a/async-query-core/src/test/java/org/opensearch/sql/spark/parameter/SparkParameterComposerCollectionTest.java b/async-query-core/src/test/java/org/opensearch/sql/spark/parameter/SparkParameterComposerCollectionTest.java index 8cd1de8b27e..19dbe646aaa 100644 --- a/async-query-core/src/test/java/org/opensearch/sql/spark/parameter/SparkParameterComposerCollectionTest.java +++ b/async-query-core/src/test/java/org/opensearch/sql/spark/parameter/SparkParameterComposerCollectionTest.java @@ -15,8 +15,8 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.spark.asyncquery.model.AsyncQueryRequestContext; import org.opensearch.sql.spark.dispatcher.model.DispatchQueryRequest; diff --git a/async-query-core/src/test/java/org/opensearch/sql/spark/parameter/SparkSubmitParametersBuilderTest.java b/async-query-core/src/test/java/org/opensearch/sql/spark/parameter/SparkSubmitParametersBuilderTest.java index 8fb975d187b..d3896691b60 100644 --- a/async-query-core/src/test/java/org/opensearch/sql/spark/parameter/SparkSubmitParametersBuilderTest.java +++ b/async-query-core/src/test/java/org/opensearch/sql/spark/parameter/SparkSubmitParametersBuilderTest.java @@ -21,7 +21,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.spark.asyncquery.model.AsyncQueryRequestContext; import org.opensearch.sql.spark.config.SparkSubmitParameterModifier; import org.opensearch.sql.spark.dispatcher.model.DispatchQueryRequest; diff --git a/async-query-core/src/test/java/org/opensearch/sql/spark/validator/GrammarElementValidatorProviderTest.java b/async-query-core/src/test/java/org/opensearch/sql/spark/validator/GrammarElementValidatorProviderTest.java index a42c9f7cd57..4b0e9cc04a0 100644 --- a/async-query-core/src/test/java/org/opensearch/sql/spark/validator/GrammarElementValidatorProviderTest.java +++ b/async-query-core/src/test/java/org/opensearch/sql/spark/validator/GrammarElementValidatorProviderTest.java @@ -9,7 +9,6 @@ import com.google.common.collect.ImmutableMap; import org.junit.jupiter.api.Test; -import org.opensearch.sql.datasource.model.DataSourceType; class GrammarElementValidatorProviderTest { final S3GlueSQLGrammarElementValidator s3GlueSQLGrammarElementValidator = diff --git a/async-query-core/src/test/java/org/opensearch/sql/spark/validator/PPLQueryValidatorTest.java b/async-query-core/src/test/java/org/opensearch/sql/spark/validator/PPLQueryValidatorTest.java index aebf7e06f86..48bbd93db5c 100644 --- a/async-query-core/src/test/java/org/opensearch/sql/spark/validator/PPLQueryValidatorTest.java +++ b/async-query-core/src/test/java/org/opensearch/sql/spark/validator/PPLQueryValidatorTest.java @@ -32,7 +32,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.opensearch.sql.common.antlr.CaseInsensitiveCharStream; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.spark.antlr.parser.SqlBaseParser.SingleStatementContext; @ExtendWith(MockitoExtension.class) diff --git a/async-query-core/src/test/java/org/opensearch/sql/spark/validator/SQLQueryValidatorTest.java b/async-query-core/src/test/java/org/opensearch/sql/spark/validator/SQLQueryValidatorTest.java index bb81a7b46d6..4eea90440a6 100644 --- a/async-query-core/src/test/java/org/opensearch/sql/spark/validator/SQLQueryValidatorTest.java +++ b/async-query-core/src/test/java/org/opensearch/sql/spark/validator/SQLQueryValidatorTest.java @@ -22,7 +22,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.opensearch.sql.common.antlr.CaseInsensitiveCharStream; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.spark.antlr.parser.SqlBaseLexer; import org.opensearch.sql.spark.antlr.parser.SqlBaseParser; import org.opensearch.sql.spark.antlr.parser.SqlBaseParser.SingleStatementContext; diff --git a/async-query/src/main/java/org/opensearch/sql/spark/transport/TransportCreateAsyncQueryRequestAction.java b/async-query/src/main/java/org/opensearch/sql/spark/transport/TransportCreateAsyncQueryRequestAction.java index bef3b29987f..536788e5cbc 100644 --- a/async-query/src/main/java/org/opensearch/sql/spark/transport/TransportCreateAsyncQueryRequestAction.java +++ b/async-query/src/main/java/org/opensearch/sql/spark/transport/TransportCreateAsyncQueryRequestAction.java @@ -12,10 +12,10 @@ import org.opensearch.action.support.ActionFilters; import org.opensearch.action.support.HandledTransportAction; import org.opensearch.common.inject.Inject; +import org.opensearch.commons.ppl.format.JsonResponseFormatter; import org.opensearch.core.action.ActionListener; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.opensearch.setting.OpenSearchSettings; -import org.opensearch.sql.protocol.response.format.JsonResponseFormatter; import org.opensearch.sql.spark.asyncquery.AsyncQueryExecutorService; import org.opensearch.sql.spark.asyncquery.AsyncQueryExecutorServiceImpl; import org.opensearch.sql.spark.asyncquery.model.NullAsyncQueryRequestContext; diff --git a/async-query/src/main/java/org/opensearch/sql/spark/transport/TransportGetAsyncQueryResultAction.java b/async-query/src/main/java/org/opensearch/sql/spark/transport/TransportGetAsyncQueryResultAction.java index 250837e0cd4..4b2ebf774bb 100644 --- a/async-query/src/main/java/org/opensearch/sql/spark/transport/TransportGetAsyncQueryResultAction.java +++ b/async-query/src/main/java/org/opensearch/sql/spark/transport/TransportGetAsyncQueryResultAction.java @@ -9,10 +9,10 @@ import org.opensearch.action.support.ActionFilters; import org.opensearch.action.support.HandledTransportAction; import org.opensearch.common.inject.Inject; +import org.opensearch.commons.ppl.format.JsonResponseFormatter; +import org.opensearch.commons.ppl.format.ResponseFormatter; import org.opensearch.core.action.ActionListener; import org.opensearch.sql.executor.pagination.Cursor; -import org.opensearch.sql.protocol.response.format.JsonResponseFormatter; -import org.opensearch.sql.protocol.response.format.ResponseFormatter; import org.opensearch.sql.spark.asyncquery.AsyncQueryExecutorService; import org.opensearch.sql.spark.asyncquery.AsyncQueryExecutorServiceImpl; import org.opensearch.sql.spark.asyncquery.model.AsyncQueryExecutionResponse; diff --git a/async-query/src/main/java/org/opensearch/sql/spark/transport/config/AsyncExecutorServiceModule.java b/async-query/src/main/java/org/opensearch/sql/spark/transport/config/AsyncExecutorServiceModule.java index 5b651dc50b3..e22e540bc44 100644 --- a/async-query/src/main/java/org/opensearch/sql/spark/transport/config/AsyncExecutorServiceModule.java +++ b/async-query/src/main/java/org/opensearch/sql/spark/transport/config/AsyncExecutorServiceModule.java @@ -13,9 +13,9 @@ import org.opensearch.common.inject.AbstractModule; import org.opensearch.common.inject.Provides; import org.opensearch.common.inject.Singleton; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.DataSourceService; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.legacy.metrics.GaugeMetric; import org.opensearch.sql.legacy.metrics.Metrics; import org.opensearch.sql.spark.asyncquery.AsyncQueryExecutorService; diff --git a/async-query/src/main/java/org/opensearch/sql/spark/transport/format/AsyncQueryResultResponseFormatter.java b/async-query/src/main/java/org/opensearch/sql/spark/transport/format/AsyncQueryResultResponseFormatter.java index afa6797694e..1f2943935fd 100644 --- a/async-query/src/main/java/org/opensearch/sql/spark/transport/format/AsyncQueryResultResponseFormatter.java +++ b/async-query/src/main/java/org/opensearch/sql/spark/transport/format/AsyncQueryResultResponseFormatter.java @@ -11,9 +11,9 @@ import lombok.Builder; import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.opensearch.commons.ppl.format.JsonResponseFormatter; import org.opensearch.core.common.Strings; import org.opensearch.sql.protocol.response.QueryResult; -import org.opensearch.sql.protocol.response.format.JsonResponseFormatter; import org.opensearch.sql.spark.transport.model.AsyncQueryResult; /** diff --git a/async-query/src/test/java/org/opensearch/sql/spark/asyncquery/AsyncQueryExecutorServiceImplSpecTest.java b/async-query/src/test/java/org/opensearch/sql/spark/asyncquery/AsyncQueryExecutorServiceImplSpecTest.java index e6459c752e2..5b861178d22 100644 --- a/async-query/src/test/java/org/opensearch/sql/spark/asyncquery/AsyncQueryExecutorServiceImplSpecTest.java +++ b/async-query/src/test/java/org/opensearch/sql/spark/asyncquery/AsyncQueryExecutorServiceImplSpecTest.java @@ -23,12 +23,12 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled; import org.opensearch.action.admin.cluster.settings.ClusterUpdateSettingsRequest; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.core.common.Strings; import org.opensearch.index.query.QueryBuilders; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSourceMetadata; import org.opensearch.sql.datasource.model.DataSourceStatus; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.datasources.exceptions.DatasourceDisabledException; import org.opensearch.sql.spark.asyncquery.model.AsyncQueryExecutionResponse; import org.opensearch.sql.spark.asyncquery.model.AsyncQueryRequestContext; diff --git a/async-query/src/test/java/org/opensearch/sql/spark/asyncquery/AsyncQueryExecutorServiceSpec.java b/async-query/src/test/java/org/opensearch/sql/spark/asyncquery/AsyncQueryExecutorServiceSpec.java index 48ecb5f60f0..c1a5006578e 100644 --- a/async-query/src/test/java/org/opensearch/sql/spark/asyncquery/AsyncQueryExecutorServiceSpec.java +++ b/async-query/src/test/java/org/opensearch/sql/spark/asyncquery/AsyncQueryExecutorServiceSpec.java @@ -43,12 +43,12 @@ import org.opensearch.common.settings.Setting; import org.opensearch.common.settings.Settings; import org.opensearch.common.xcontent.XContentType; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.index.query.QueryBuilder; import org.opensearch.plugins.Plugin; import org.opensearch.search.builder.SearchSourceBuilder; import org.opensearch.sql.common.setting.Settings.Key; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.datasources.encryptor.EncryptorImpl; import org.opensearch.sql.datasources.glue.GlueDataSourceFactory; import org.opensearch.sql.datasources.service.DataSourceMetadataStorage; diff --git a/async-query/src/test/java/org/opensearch/sql/spark/asyncquery/AsyncQueryGetResultSpecTest.java b/async-query/src/test/java/org/opensearch/sql/spark/asyncquery/AsyncQueryGetResultSpecTest.java index 5f6d7190daa..86608634f15 100644 --- a/async-query/src/test/java/org/opensearch/sql/spark/asyncquery/AsyncQueryGetResultSpecTest.java +++ b/async-query/src/test/java/org/opensearch/sql/spark/asyncquery/AsyncQueryGetResultSpecTest.java @@ -19,10 +19,10 @@ import org.junit.Before; import org.junit.Test; import org.opensearch.action.index.IndexRequest; +import org.opensearch.commons.ppl.format.JsonResponseFormatter; +import org.opensearch.commons.ppl.format.ResponseFormatter; import org.opensearch.sql.data.model.ExprValue; import org.opensearch.sql.executor.pagination.Cursor; -import org.opensearch.sql.protocol.response.format.JsonResponseFormatter; -import org.opensearch.sql.protocol.response.format.ResponseFormatter; import org.opensearch.sql.spark.asyncquery.model.AsyncQueryExecutionResponse; import org.opensearch.sql.spark.asyncquery.model.AsyncQueryJobMetadata; import org.opensearch.sql.spark.asyncquery.model.AsyncQueryRequestContext; diff --git a/async-query/src/test/java/org/opensearch/sql/spark/parameter/S3GlueDataSourceSparkParameterComposerTest.java b/async-query/src/test/java/org/opensearch/sql/spark/parameter/S3GlueDataSourceSparkParameterComposerTest.java index 3e12aa78d05..9c2384bf294 100644 --- a/async-query/src/test/java/org/opensearch/sql/spark/parameter/S3GlueDataSourceSparkParameterComposerTest.java +++ b/async-query/src/test/java/org/opensearch/sql/spark/parameter/S3GlueDataSourceSparkParameterComposerTest.java @@ -20,10 +20,10 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.common.setting.Settings.Key; import org.opensearch.sql.datasource.model.DataSourceMetadata; import org.opensearch.sql.datasource.model.DataSourceStatus; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.datasources.auth.AuthenticationType; import org.opensearch.sql.datasources.glue.GlueDataSourceFactory; import org.opensearch.sql.opensearch.setting.OpenSearchSettings; diff --git a/async-query/src/test/java/org/opensearch/sql/spark/transport/format/AsyncQueryResultResponseFormatterTest.java b/async-query/src/test/java/org/opensearch/sql/spark/transport/format/AsyncQueryResultResponseFormatterTest.java index bb7d5f78930..9e5c001e456 100644 --- a/async-query/src/test/java/org/opensearch/sql/spark/transport/format/AsyncQueryResultResponseFormatterTest.java +++ b/async-query/src/test/java/org/opensearch/sql/spark/transport/format/AsyncQueryResultResponseFormatterTest.java @@ -9,7 +9,7 @@ import static org.opensearch.sql.data.model.ExprValueUtils.tupleValue; import static org.opensearch.sql.data.type.ExprCoreType.INTEGER; import static org.opensearch.sql.data.type.ExprCoreType.STRING; -import static org.opensearch.sql.protocol.response.format.JsonResponseFormatter.Style.COMPACT; +import static org.opensearch.commons.ppl.format.JsonResponseFormatter.Style.COMPACT; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/build.gradle b/build.gradle index 68161e30c2a..7921af4c8e2 100644 --- a/build.gradle +++ b/build.gradle @@ -13,6 +13,7 @@ buildscript { opensearch_build = version_tokens[0] + '.0' prometheus_binary_version = "2.37.2" common_utils_version = System.getProperty("common_utils.version", opensearch_build) + common_utils_snapshot_version = common_utils_version + '-SNAPSHOT' if (buildVersionQualifier) { opensearch_build += "-${buildVersionQualifier}" } diff --git a/core/build.gradle b/core/build.gradle index dca34fcd303..983a39180ef 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -68,6 +68,8 @@ dependencies { annotationProcessor('org.immutables:value:2.8.8') compileOnly('org.immutables:value-annotations:2.8.8') + api "org.opensearch:common-utils:${common_utils_snapshot_version}@jar" + testImplementation('org.junit.jupiter:junit-jupiter:5.9.3') testImplementation group: 'org.hamcrest', name: 'hamcrest-library', version: "${hamcrest_version}" testImplementation group: 'org.mockito', name: 'mockito-core', version: "${mockito_version}" diff --git a/core/src/main/java/org/opensearch/sql/datasource/model/DataSource.java b/core/src/main/java/org/opensearch/sql/datasource/model/DataSource.java index 9623102efb2..a094c0e2a3e 100644 --- a/core/src/main/java/org/opensearch/sql/datasource/model/DataSource.java +++ b/core/src/main/java/org/opensearch/sql/datasource/model/DataSource.java @@ -10,6 +10,7 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.storage.StorageEngine; /** Each user configured datasource mapping to one instance of DataSource per JVM. */ diff --git a/core/src/main/java/org/opensearch/sql/datasource/model/DataSourceMetadata.java b/core/src/main/java/org/opensearch/sql/datasource/model/DataSourceMetadata.java index 2282bc694aa..873bcebc61e 100644 --- a/core/src/main/java/org/opensearch/sql/datasource/model/DataSourceMetadata.java +++ b/core/src/main/java/org/opensearch/sql/datasource/model/DataSourceMetadata.java @@ -21,6 +21,7 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import org.apache.commons.lang3.StringUtils; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.datasource.DataSourceService; @Getter diff --git a/core/src/main/java/org/opensearch/sql/datasource/model/DataSourceType.java b/core/src/main/java/org/opensearch/sql/datasource/model/DataSourceType.java deleted file mode 100644 index 5579818a4ca..00000000000 --- a/core/src/main/java/org/opensearch/sql/datasource/model/DataSourceType.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.opensearch.sql.datasource.model; - -import java.util.HashMap; -import java.util.Map; -import lombok.EqualsAndHashCode; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -@EqualsAndHashCode -public class DataSourceType { - public static final DataSourceType PROMETHEUS = new DataSourceType("PROMETHEUS"); - public static final DataSourceType OPENSEARCH = new DataSourceType("OPENSEARCH"); - public static final DataSourceType S3GLUE = new DataSourceType("S3GLUE"); - public static final DataSourceType SECURITY_LAKE = new DataSourceType("SECURITY_LAKE"); - - // Map from uppercase DataSourceType name to DataSourceType object - private static final Map knownValues = new HashMap<>(); - - static { - register(PROMETHEUS, OPENSEARCH, S3GLUE, SECURITY_LAKE); - } - - private final String name; - - public String name() { - return name; - } - - @Override - public String toString() { - return name; - } - - /** Register DataSourceType to be used in fromString method */ - public static void register(DataSourceType... dataSourceTypes) { - for (DataSourceType type : dataSourceTypes) { - String upperCaseName = type.name().toUpperCase(); - if (!knownValues.containsKey(upperCaseName)) { - knownValues.put(type.name().toUpperCase(), type); - } else { - throw new IllegalArgumentException( - "DataSourceType with name " + type.name() + " already exists"); - } - } - } - - public static DataSourceType fromString(String name) { - String upperCaseName = name.toUpperCase(); - if (knownValues.containsKey(upperCaseName)) { - return knownValues.get(upperCaseName); - } else { - throw new IllegalArgumentException("No DataSourceType with name " + name + " found"); - } - } -} diff --git a/core/src/main/java/org/opensearch/sql/storage/DataSourceFactory.java b/core/src/main/java/org/opensearch/sql/storage/DataSourceFactory.java index 69d902c1d7d..36f1763a602 100644 --- a/core/src/main/java/org/opensearch/sql/storage/DataSourceFactory.java +++ b/core/src/main/java/org/opensearch/sql/storage/DataSourceFactory.java @@ -7,10 +7,10 @@ package org.opensearch.sql.storage; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.datasource.DataSourceService; import org.opensearch.sql.datasource.model.DataSource; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; /** * {@link DataSourceFactory} is used to create {@link DataSource} from {@link DataSourceMetadata}. diff --git a/core/src/main/java/org/opensearch/sql/utils/SerializeUtils.java b/core/src/main/java/org/opensearch/sql/utils/SerializeUtils.java deleted file mode 100644 index 3e30bdc5637..00000000000 --- a/core/src/main/java/org/opensearch/sql/utils/SerializeUtils.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.opensearch.sql.utils; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; -import java.lang.reflect.Type; -import lombok.experimental.UtilityClass; -import org.opensearch.sql.datasource.model.DataSourceType; - -@UtilityClass -public class SerializeUtils { - private static class DataSourceTypeSerializer implements JsonSerializer { - @Override - public JsonElement serialize( - DataSourceType dataSourceType, - Type type, - JsonSerializationContext jsonSerializationContext) { - return new JsonPrimitive(dataSourceType.name()); - } - } - - private static class DataSourceTypeDeserializer implements JsonDeserializer { - @Override - public DataSourceType deserialize( - JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) - throws JsonParseException { - return DataSourceType.fromString(jsonElement.getAsString()); - } - } - - public static GsonBuilder getGsonBuilder() { - return new GsonBuilder() - .registerTypeAdapter(DataSourceType.class, new DataSourceTypeSerializer()) - .registerTypeAdapter(DataSourceType.class, new DataSourceTypeDeserializer()); - } - - public static Gson buildGson() { - return getGsonBuilder().create(); - } -} diff --git a/core/src/test/java/org/opensearch/sql/analysis/AnalyzerTestBase.java b/core/src/test/java/org/opensearch/sql/analysis/AnalyzerTestBase.java index 7daae6da450..c5cc9c8fd1b 100644 --- a/core/src/test/java/org/opensearch/sql/analysis/AnalyzerTestBase.java +++ b/core/src/test/java/org/opensearch/sql/analysis/AnalyzerTestBase.java @@ -32,7 +32,6 @@ import org.opensearch.sql.datasource.RequestContext; import org.opensearch.sql.datasource.model.DataSource; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.exception.ExpressionEvaluationException; import org.opensearch.sql.expression.Expression; import org.opensearch.sql.expression.ReferenceExpression; diff --git a/core/src/test/java/org/opensearch/sql/planner/physical/datasource/DataSourceTableScanTest.java b/core/src/test/java/org/opensearch/sql/planner/physical/datasource/DataSourceTableScanTest.java index 53cbd15b8ee..dc3ece8b2c3 100644 --- a/core/src/test/java/org/opensearch/sql/planner/physical/datasource/DataSourceTableScanTest.java +++ b/core/src/test/java/org/opensearch/sql/planner/physical/datasource/DataSourceTableScanTest.java @@ -28,7 +28,6 @@ import org.opensearch.sql.datasource.DataSourceService; import org.opensearch.sql.datasource.model.DataSource; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.storage.StorageEngine; @ExtendWith(MockitoExtension.class) diff --git a/core/src/test/java/org/opensearch/sql/utils/SerializeUtilsTest.java b/core/src/test/java/org/opensearch/sql/utils/SerializeUtilsTest.java index c3d387328ee..7a3f50529b3 100644 --- a/core/src/test/java/org/opensearch/sql/utils/SerializeUtilsTest.java +++ b/core/src/test/java/org/opensearch/sql/utils/SerializeUtilsTest.java @@ -13,7 +13,6 @@ import org.junit.jupiter.api.Test; import org.opensearch.sql.datasource.model.DataSourceMetadata; import org.opensearch.sql.datasource.model.DataSourceStatus; -import org.opensearch.sql.datasource.model.DataSourceType; class SerializeUtilsTest { @Test diff --git a/core/src/testFixtures/java/org/opensearch/sql/executor/DefaultQueryManager.java b/core/src/testFixtures/java/org/opensearch/sql/executor/DefaultQueryManager.java index 3167d4843a6..5ed8152965f 100644 --- a/core/src/testFixtures/java/org/opensearch/sql/executor/DefaultQueryManager.java +++ b/core/src/testFixtures/java/org/opensearch/sql/executor/DefaultQueryManager.java @@ -11,6 +11,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; + import org.opensearch.sql.executor.execution.AbstractPlan; /** Default QueryManager implementation which execute {@link AbstractPlan} on caller thread. */ diff --git a/datasources/src/main/java/org/opensearch/sql/datasources/exceptions/ErrorMessage.java b/datasources/src/main/java/org/opensearch/sql/datasources/exceptions/ErrorMessage.java index d4c74c7b301..5c966768bef 100644 --- a/datasources/src/main/java/org/opensearch/sql/datasources/exceptions/ErrorMessage.java +++ b/datasources/src/main/java/org/opensearch/sql/datasources/exceptions/ErrorMessage.java @@ -8,8 +8,8 @@ import com.google.gson.Gson; import com.google.gson.JsonObject; import lombok.Getter; +import org.opensearch.commons.ppl.serde.SerializeUtils; import org.opensearch.core.rest.RestStatus; -import org.opensearch.sql.utils.SerializeUtils; /** Error Message. */ public class ErrorMessage { diff --git a/datasources/src/main/java/org/opensearch/sql/datasources/glue/GlueDataSourceFactory.java b/datasources/src/main/java/org/opensearch/sql/datasources/glue/GlueDataSourceFactory.java index 11a33a29697..29c585540e1 100644 --- a/datasources/src/main/java/org/opensearch/sql/datasources/glue/GlueDataSourceFactory.java +++ b/datasources/src/main/java/org/opensearch/sql/datasources/glue/GlueDataSourceFactory.java @@ -7,10 +7,10 @@ import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSource; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.datasources.auth.AuthenticationType; import org.opensearch.sql.datasources.utils.DatasourceValidationUtils; import org.opensearch.sql.storage.DataSourceFactory; diff --git a/datasources/src/main/java/org/opensearch/sql/datasources/glue/SecurityLakeDataSourceFactory.java b/datasources/src/main/java/org/opensearch/sql/datasources/glue/SecurityLakeDataSourceFactory.java index 0f336a08d1d..084e43ff5b7 100644 --- a/datasources/src/main/java/org/opensearch/sql/datasources/glue/SecurityLakeDataSourceFactory.java +++ b/datasources/src/main/java/org/opensearch/sql/datasources/glue/SecurityLakeDataSourceFactory.java @@ -3,10 +3,10 @@ import java.util.Map; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSource; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; public class SecurityLakeDataSourceFactory extends GlueDataSourceFactory { diff --git a/datasources/src/main/java/org/opensearch/sql/datasources/service/DataSourceLoaderCacheImpl.java b/datasources/src/main/java/org/opensearch/sql/datasources/service/DataSourceLoaderCacheImpl.java index 44454dbd381..10eda69ca89 100644 --- a/datasources/src/main/java/org/opensearch/sql/datasources/service/DataSourceLoaderCacheImpl.java +++ b/datasources/src/main/java/org/opensearch/sql/datasources/service/DataSourceLoaderCacheImpl.java @@ -6,9 +6,10 @@ import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; + +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.datasource.model.DataSource; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.storage.DataSourceFactory; /** diff --git a/datasources/src/main/java/org/opensearch/sql/datasources/transport/TransportCreateDataSourceAction.java b/datasources/src/main/java/org/opensearch/sql/datasources/transport/TransportCreateDataSourceAction.java index edf4d14e1ed..bfe1a45f3bc 100644 --- a/datasources/src/main/java/org/opensearch/sql/datasources/transport/TransportCreateDataSourceAction.java +++ b/datasources/src/main/java/org/opensearch/sql/datasources/transport/TransportCreateDataSourceAction.java @@ -8,19 +8,19 @@ package org.opensearch.sql.datasources.transport; import static org.opensearch.sql.common.setting.Settings.Key.DATASOURCES_LIMIT; -import static org.opensearch.sql.protocol.response.format.JsonResponseFormatter.Style.PRETTY; +import static org.opensearch.commons.ppl.format.JsonResponseFormatter.Style.PRETTY; import org.opensearch.action.ActionType; import org.opensearch.action.support.ActionFilters; import org.opensearch.action.support.HandledTransportAction; import org.opensearch.common.inject.Inject; +import org.opensearch.commons.ppl.format.JsonResponseFormatter; import org.opensearch.core.action.ActionListener; import org.opensearch.sql.datasource.DataSourceService; import org.opensearch.sql.datasource.model.DataSourceMetadata; import org.opensearch.sql.datasources.model.transport.CreateDataSourceActionRequest; import org.opensearch.sql.datasources.model.transport.CreateDataSourceActionResponse; import org.opensearch.sql.datasources.service.DataSourceServiceImpl; -import org.opensearch.sql.protocol.response.format.JsonResponseFormatter; import org.opensearch.tasks.Task; import org.opensearch.transport.TransportService; diff --git a/datasources/src/main/java/org/opensearch/sql/datasources/transport/TransportGetDataSourceAction.java b/datasources/src/main/java/org/opensearch/sql/datasources/transport/TransportGetDataSourceAction.java index e2da2a8e0c3..cec3bffee9d 100644 --- a/datasources/src/main/java/org/opensearch/sql/datasources/transport/TransportGetDataSourceAction.java +++ b/datasources/src/main/java/org/opensearch/sql/datasources/transport/TransportGetDataSourceAction.java @@ -12,13 +12,13 @@ import org.opensearch.action.support.ActionFilters; import org.opensearch.action.support.HandledTransportAction; import org.opensearch.common.inject.Inject; +import org.opensearch.commons.ppl.format.JsonResponseFormatter; import org.opensearch.core.action.ActionListener; import org.opensearch.sql.datasource.DataSourceService; import org.opensearch.sql.datasource.model.DataSourceMetadata; import org.opensearch.sql.datasources.model.transport.GetDataSourceActionRequest; import org.opensearch.sql.datasources.model.transport.GetDataSourceActionResponse; import org.opensearch.sql.datasources.service.DataSourceServiceImpl; -import org.opensearch.sql.protocol.response.format.JsonResponseFormatter; import org.opensearch.tasks.Task; import org.opensearch.transport.TransportService; diff --git a/datasources/src/main/java/org/opensearch/sql/datasources/transport/TransportPatchDataSourceAction.java b/datasources/src/main/java/org/opensearch/sql/datasources/transport/TransportPatchDataSourceAction.java index dd55869df76..ce08be5901f 100644 --- a/datasources/src/main/java/org/opensearch/sql/datasources/transport/TransportPatchDataSourceAction.java +++ b/datasources/src/main/java/org/opensearch/sql/datasources/transport/TransportPatchDataSourceAction.java @@ -8,18 +8,18 @@ package org.opensearch.sql.datasources.transport; import static org.opensearch.sql.datasources.utils.XContentParserUtils.NAME_FIELD; -import static org.opensearch.sql.protocol.response.format.JsonResponseFormatter.Style.PRETTY; +import static org.opensearch.commons.ppl.format.JsonResponseFormatter.Style.PRETTY; import org.opensearch.action.ActionType; import org.opensearch.action.support.ActionFilters; import org.opensearch.action.support.HandledTransportAction; import org.opensearch.common.inject.Inject; +import org.opensearch.commons.ppl.format.JsonResponseFormatter; import org.opensearch.core.action.ActionListener; import org.opensearch.sql.datasource.DataSourceService; import org.opensearch.sql.datasources.model.transport.PatchDataSourceActionRequest; import org.opensearch.sql.datasources.model.transport.PatchDataSourceActionResponse; import org.opensearch.sql.datasources.service.DataSourceServiceImpl; -import org.opensearch.sql.protocol.response.format.JsonResponseFormatter; import org.opensearch.tasks.Task; import org.opensearch.transport.TransportService; diff --git a/datasources/src/main/java/org/opensearch/sql/datasources/transport/TransportUpdateDataSourceAction.java b/datasources/src/main/java/org/opensearch/sql/datasources/transport/TransportUpdateDataSourceAction.java index 44e0625cf77..9583d3a4012 100644 --- a/datasources/src/main/java/org/opensearch/sql/datasources/transport/TransportUpdateDataSourceAction.java +++ b/datasources/src/main/java/org/opensearch/sql/datasources/transport/TransportUpdateDataSourceAction.java @@ -7,18 +7,18 @@ package org.opensearch.sql.datasources.transport; -import static org.opensearch.sql.protocol.response.format.JsonResponseFormatter.Style.PRETTY; +import static org.opensearch.commons.ppl.format.JsonResponseFormatter.Style.PRETTY; import org.opensearch.action.ActionType; import org.opensearch.action.support.ActionFilters; import org.opensearch.action.support.HandledTransportAction; import org.opensearch.common.inject.Inject; +import org.opensearch.commons.ppl.format.JsonResponseFormatter; import org.opensearch.core.action.ActionListener; import org.opensearch.sql.datasource.DataSourceService; import org.opensearch.sql.datasources.model.transport.UpdateDataSourceActionRequest; import org.opensearch.sql.datasources.model.transport.UpdateDataSourceActionResponse; import org.opensearch.sql.datasources.service.DataSourceServiceImpl; -import org.opensearch.sql.protocol.response.format.JsonResponseFormatter; import org.opensearch.tasks.Task; import org.opensearch.transport.TransportService; diff --git a/datasources/src/main/java/org/opensearch/sql/datasources/utils/XContentParserUtils.java b/datasources/src/main/java/org/opensearch/sql/datasources/utils/XContentParserUtils.java index 4c98b133a8b..ce4fb8bc72e 100644 --- a/datasources/src/main/java/org/opensearch/sql/datasources/utils/XContentParserUtils.java +++ b/datasources/src/main/java/org/opensearch/sql/datasources/utils/XContentParserUtils.java @@ -16,13 +16,13 @@ import org.apache.commons.lang3.StringUtils; import org.opensearch.common.xcontent.XContentFactory; import org.opensearch.common.xcontent.XContentType; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.core.xcontent.DeprecationHandler; import org.opensearch.core.xcontent.NamedXContentRegistry; import org.opensearch.core.xcontent.XContentBuilder; import org.opensearch.core.xcontent.XContentParser; import org.opensearch.sql.datasource.model.DataSourceMetadata; import org.opensearch.sql.datasource.model.DataSourceStatus; -import org.opensearch.sql.datasource.model.DataSourceType; /** Utitlity class to serialize and deserialize objects in XContent. */ @UtilityClass diff --git a/datasources/src/test/java/org/opensearch/sql/datasources/auth/DataSourceUserAuthorizationHelperImplTest.java b/datasources/src/test/java/org/opensearch/sql/datasources/auth/DataSourceUserAuthorizationHelperImplTest.java index 092d937ad4d..1182ce31e22 100644 --- a/datasources/src/test/java/org/opensearch/sql/datasources/auth/DataSourceUserAuthorizationHelperImplTest.java +++ b/datasources/src/test/java/org/opensearch/sql/datasources/auth/DataSourceUserAuthorizationHelperImplTest.java @@ -20,7 +20,6 @@ import org.opensearch.OpenSearchSecurityException; import org.opensearch.core.rest.RestStatus; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.transport.client.Client; @ExtendWith(MockitoExtension.class) diff --git a/datasources/src/test/java/org/opensearch/sql/datasources/glue/GlueDataSourceFactoryTest.java b/datasources/src/test/java/org/opensearch/sql/datasources/glue/GlueDataSourceFactoryTest.java index 28337172651..cfea59fac60 100644 --- a/datasources/src/test/java/org/opensearch/sql/datasources/glue/GlueDataSourceFactoryTest.java +++ b/datasources/src/test/java/org/opensearch/sql/datasources/glue/GlueDataSourceFactoryTest.java @@ -11,11 +11,11 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.DataSourceSchemaName; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSource; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; @ExtendWith(MockitoExtension.class) public class GlueDataSourceFactoryTest { diff --git a/datasources/src/test/java/org/opensearch/sql/datasources/glue/SecurityLakeSourceFactoryTest.java b/datasources/src/test/java/org/opensearch/sql/datasources/glue/SecurityLakeSourceFactoryTest.java index 561d549826d..c551668e7ea 100644 --- a/datasources/src/test/java/org/opensearch/sql/datasources/glue/SecurityLakeSourceFactoryTest.java +++ b/datasources/src/test/java/org/opensearch/sql/datasources/glue/SecurityLakeSourceFactoryTest.java @@ -14,7 +14,6 @@ import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSource; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; @ExtendWith(MockitoExtension.class) public class SecurityLakeSourceFactoryTest { diff --git a/datasources/src/test/java/org/opensearch/sql/datasources/service/DataSourceLoaderCacheImplTest.java b/datasources/src/test/java/org/opensearch/sql/datasources/service/DataSourceLoaderCacheImplTest.java index 62383552388..6f300743272 100644 --- a/datasources/src/test/java/org/opensearch/sql/datasources/service/DataSourceLoaderCacheImplTest.java +++ b/datasources/src/test/java/org/opensearch/sql/datasources/service/DataSourceLoaderCacheImplTest.java @@ -17,7 +17,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.opensearch.sql.datasource.model.DataSource; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.storage.DataSourceFactory; import org.opensearch.sql.storage.StorageEngine; diff --git a/datasources/src/test/java/org/opensearch/sql/datasources/service/DataSourceServiceImplTest.java b/datasources/src/test/java/org/opensearch/sql/datasources/service/DataSourceServiceImplTest.java index 9a1022706fc..55e051c8282 100644 --- a/datasources/src/test/java/org/opensearch/sql/datasources/service/DataSourceServiceImplTest.java +++ b/datasources/src/test/java/org/opensearch/sql/datasources/service/DataSourceServiceImplTest.java @@ -40,7 +40,6 @@ import org.opensearch.sql.datasource.model.DataSource; import org.opensearch.sql.datasource.model.DataSourceMetadata; import org.opensearch.sql.datasource.model.DataSourceStatus; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.datasources.auth.DataSourceUserAuthorizationHelper; import org.opensearch.sql.datasources.exceptions.DataSourceNotFoundException; import org.opensearch.sql.datasources.exceptions.DatasourceDisabledException; diff --git a/datasources/src/test/java/org/opensearch/sql/datasources/storage/OpenSearchDataSourceMetadataStorageTest.java b/datasources/src/test/java/org/opensearch/sql/datasources/storage/OpenSearchDataSourceMetadataStorageTest.java index a1c2425c66a..2809bed4c47 100644 --- a/datasources/src/test/java/org/opensearch/sql/datasources/storage/OpenSearchDataSourceMetadataStorageTest.java +++ b/datasources/src/test/java/org/opensearch/sql/datasources/storage/OpenSearchDataSourceMetadataStorageTest.java @@ -47,7 +47,6 @@ import org.opensearch.search.SearchHits; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.datasources.encryptor.Encryptor; import org.opensearch.sql.datasources.exceptions.DataSourceNotFoundException; import org.opensearch.sql.opensearch.setting.OpenSearchSettings; diff --git a/datasources/src/test/java/org/opensearch/sql/datasources/transport/TransportCreateDataSourceActionTest.java b/datasources/src/test/java/org/opensearch/sql/datasources/transport/TransportCreateDataSourceActionTest.java index ba93890883d..d5c6df8dc1f 100644 --- a/datasources/src/test/java/org/opensearch/sql/datasources/transport/TransportCreateDataSourceActionTest.java +++ b/datasources/src/test/java/org/opensearch/sql/datasources/transport/TransportCreateDataSourceActionTest.java @@ -25,7 +25,6 @@ import org.opensearch.core.action.ActionListener; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.datasources.model.transport.CreateDataSourceActionRequest; import org.opensearch.sql.datasources.model.transport.CreateDataSourceActionResponse; import org.opensearch.sql.datasources.service.DataSourceServiceImpl; diff --git a/datasources/src/test/java/org/opensearch/sql/datasources/transport/TransportGetDataSourceActionTest.java b/datasources/src/test/java/org/opensearch/sql/datasources/transport/TransportGetDataSourceActionTest.java index 22118a676e6..a16e3f6447f 100644 --- a/datasources/src/test/java/org/opensearch/sql/datasources/transport/TransportGetDataSourceActionTest.java +++ b/datasources/src/test/java/org/opensearch/sql/datasources/transport/TransportGetDataSourceActionTest.java @@ -25,15 +25,12 @@ import org.opensearch.core.action.ActionListener; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.datasources.model.transport.GetDataSourceActionRequest; import org.opensearch.sql.datasources.model.transport.GetDataSourceActionResponse; import org.opensearch.sql.datasources.service.DataSourceServiceImpl; import org.opensearch.sql.legacy.esdomain.LocalClusterState; import org.opensearch.sql.legacy.metrics.Metrics; import org.opensearch.sql.opensearch.setting.OpenSearchSettings; -import org.opensearch.sql.protocol.response.format.JsonResponseFormatter; -import org.opensearch.sql.utils.SerializeUtils; import org.opensearch.tasks.Task; import org.opensearch.transport.TransportService; diff --git a/datasources/src/test/java/org/opensearch/sql/datasources/transport/TransportUpdateDataSourceActionTest.java b/datasources/src/test/java/org/opensearch/sql/datasources/transport/TransportUpdateDataSourceActionTest.java index e0868139380..699f893d037 100644 --- a/datasources/src/test/java/org/opensearch/sql/datasources/transport/TransportUpdateDataSourceActionTest.java +++ b/datasources/src/test/java/org/opensearch/sql/datasources/transport/TransportUpdateDataSourceActionTest.java @@ -21,7 +21,6 @@ import org.opensearch.core.action.ActionListener; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.datasources.model.transport.UpdateDataSourceActionRequest; import org.opensearch.sql.datasources.model.transport.UpdateDataSourceActionResponse; import org.opensearch.sql.datasources.service.DataSourceServiceImpl; diff --git a/datasources/src/test/java/org/opensearch/sql/datasources/utils/XContentParserUtilsTest.java b/datasources/src/test/java/org/opensearch/sql/datasources/utils/XContentParserUtilsTest.java index c1b1cfc70c0..28e728bf3e3 100644 --- a/datasources/src/test/java/org/opensearch/sql/datasources/utils/XContentParserUtilsTest.java +++ b/datasources/src/test/java/org/opensearch/sql/datasources/utils/XContentParserUtilsTest.java @@ -16,8 +16,6 @@ import org.opensearch.core.common.bytes.BytesReference; import org.opensearch.core.xcontent.XContentBuilder; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; -import org.opensearch.sql.utils.SerializeUtils; @ExtendWith(MockitoExtension.class) public class XContentParserUtilsTest { diff --git a/integ-test/src/test/java/org/opensearch/sql/calcite/standalone/CalcitePPLIntegTestCase.java b/integ-test/src/test/java/org/opensearch/sql/calcite/standalone/CalcitePPLIntegTestCase.java index 31f46163e12..4615dfc2241 100644 --- a/integ-test/src/test/java/org/opensearch/sql/calcite/standalone/CalcitePPLIntegTestCase.java +++ b/integ-test/src/test/java/org/opensearch/sql/calcite/standalone/CalcitePPLIntegTestCase.java @@ -6,7 +6,7 @@ package org.opensearch.sql.calcite.standalone; import static org.opensearch.sql.datasource.model.DataSourceMetadata.defaultOpenSearchDataSourceMetadata; -import static org.opensearch.sql.protocol.response.format.JsonResponseFormatter.Style.PRETTY; +import static org.opensearch.commons.ppl.format.JsonResponseFormatter.Style.PRETTY; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -60,9 +60,7 @@ import org.opensearch.sql.ppl.PPLIntegTestCase; import org.opensearch.sql.ppl.PPLService; import org.opensearch.sql.ppl.antlr.PPLSyntaxParser; -import org.opensearch.sql.ppl.domain.PPLQueryRequest; import org.opensearch.sql.protocol.response.QueryResult; -import org.opensearch.sql.protocol.response.format.JsonResponseFormatter; import org.opensearch.sql.protocol.response.format.SimpleJsonResponseFormatter; import org.opensearch.sql.sql.SQLService; import org.opensearch.sql.sql.antlr.SQLSyntaxParser; diff --git a/integ-test/src/test/java/org/opensearch/sql/datasource/DataSourceAPIsIT.java b/integ-test/src/test/java/org/opensearch/sql/datasource/DataSourceAPIsIT.java index 31fd781c51b..b2edf36c3ea 100644 --- a/integ-test/src/test/java/org/opensearch/sql/datasource/DataSourceAPIsIT.java +++ b/integ-test/src/test/java/org/opensearch/sql/datasource/DataSourceAPIsIT.java @@ -35,9 +35,7 @@ import org.opensearch.client.ResponseException; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.ppl.PPLIntegTestCase; -import org.opensearch.sql.utils.SerializeUtils; public class DataSourceAPIsIT extends PPLIntegTestCase { diff --git a/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java b/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java index e7086abb9a9..8342586af38 100644 --- a/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java +++ b/integ-test/src/test/java/org/opensearch/sql/legacy/SQLIntegTestCase.java @@ -83,7 +83,6 @@ import org.opensearch.client.RestClient; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.utils.SerializeUtils; /** OpenSearch Rest integration test base for SQL testing */ public abstract class SQLIntegTestCase extends OpenSearchSQLRestTestCase { diff --git a/integ-test/src/test/java/org/opensearch/sql/ppl/InformationSchemaCommandIT.java b/integ-test/src/test/java/org/opensearch/sql/ppl/InformationSchemaCommandIT.java index 0051cdb39b4..a7da7061469 100644 --- a/integ-test/src/test/java/org/opensearch/sql/ppl/InformationSchemaCommandIT.java +++ b/integ-test/src/test/java/org/opensearch/sql/ppl/InformationSchemaCommandIT.java @@ -22,7 +22,6 @@ import org.opensearch.client.Request; import org.opensearch.client.Response; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; public class InformationSchemaCommandIT extends PPLIntegTestCase { diff --git a/integ-test/src/test/java/org/opensearch/sql/ppl/PrometheusDataSourceCommandsIT.java b/integ-test/src/test/java/org/opensearch/sql/ppl/PrometheusDataSourceCommandsIT.java index 345c3d0a3a8..0c669a1f414 100644 --- a/integ-test/src/test/java/org/opensearch/sql/ppl/PrometheusDataSourceCommandsIT.java +++ b/integ-test/src/test/java/org/opensearch/sql/ppl/PrometheusDataSourceCommandsIT.java @@ -38,7 +38,6 @@ import org.opensearch.client.ResponseException; import org.opensearch.sql.datasource.model.DataSourceMetadata; import org.opensearch.sql.datasource.model.DataSourceStatus; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.util.TestUtils; public class PrometheusDataSourceCommandsIT extends PPLIntegTestCase { diff --git a/integ-test/src/test/java/org/opensearch/sql/ppl/ShowDataSourcesCommandIT.java b/integ-test/src/test/java/org/opensearch/sql/ppl/ShowDataSourcesCommandIT.java index bf21977cbeb..a49209c5c7d 100644 --- a/integ-test/src/test/java/org/opensearch/sql/ppl/ShowDataSourcesCommandIT.java +++ b/integ-test/src/test/java/org/opensearch/sql/ppl/ShowDataSourcesCommandIT.java @@ -22,7 +22,6 @@ import org.opensearch.client.Request; import org.opensearch.client.Response; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; public class ShowDataSourcesCommandIT extends PPLIntegTestCase { diff --git a/integ-test/src/test/java/org/opensearch/sql/ppl/StandaloneIT.java b/integ-test/src/test/java/org/opensearch/sql/ppl/StandaloneIT.java index afa5c787d7c..61c6048227a 100644 --- a/integ-test/src/test/java/org/opensearch/sql/ppl/StandaloneIT.java +++ b/integ-test/src/test/java/org/opensearch/sql/ppl/StandaloneIT.java @@ -6,7 +6,7 @@ package org.opensearch.sql.ppl; import static org.opensearch.sql.datasource.model.DataSourceMetadata.defaultOpenSearchDataSourceMetadata; -import static org.opensearch.sql.protocol.response.format.JsonResponseFormatter.Style.PRETTY; +import static org.opensearch.commons.ppl.format.JsonResponseFormatter.Style.PRETTY; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -56,7 +56,6 @@ import org.opensearch.sql.planner.Planner; import org.opensearch.sql.planner.optimizer.LogicalPlanOptimizer; import org.opensearch.sql.ppl.antlr.PPLSyntaxParser; -import org.opensearch.sql.ppl.domain.PPLQueryRequest; import org.opensearch.sql.protocol.response.QueryResult; import org.opensearch.sql.protocol.response.format.SimpleJsonResponseFormatter; import org.opensearch.sql.sql.SQLService; diff --git a/integ-test/src/test/java/org/opensearch/sql/sql/SimpleQueryStringIT.java b/integ-test/src/test/java/org/opensearch/sql/sql/SimpleQueryStringIT.java index 8742dedbc70..94da674350b 100644 --- a/integ-test/src/test/java/org/opensearch/sql/sql/SimpleQueryStringIT.java +++ b/integ-test/src/test/java/org/opensearch/sql/sql/SimpleQueryStringIT.java @@ -6,7 +6,7 @@ package org.opensearch.sql.sql; import static org.opensearch.sql.legacy.TestsConstants.TEST_INDEX_BEER; -import static org.opensearch.sql.protocol.response.format.JsonResponseFormatter.CONTENT_TYPE; +import static org.opensearch.commons.ppl.format.JsonResponseFormatter.CONTENT_TYPE; import java.io.IOException; import org.json.JSONObject; diff --git a/legacy/build.gradle b/legacy/build.gradle index cb5afb31119..1958d91387f 100644 --- a/legacy/build.gradle +++ b/legacy/build.gradle @@ -118,6 +118,8 @@ dependencies { api project(':common') api project(':opensearch') + api "org.opensearch:common-utils:${common_utils_snapshot_version}@jar" + // ANTLR gradle plugin and runtime dependency antlr "org.antlr:antlr4:4.7.1" implementation "org.antlr:antlr4-runtime:4.7.1" diff --git a/legacy/src/main/java/org/opensearch/sql/legacy/plugin/RestSQLQueryAction.java b/legacy/src/main/java/org/opensearch/sql/legacy/plugin/RestSQLQueryAction.java index 0df812c038f..8e3b38c1bc1 100644 --- a/legacy/src/main/java/org/opensearch/sql/legacy/plugin/RestSQLQueryAction.java +++ b/legacy/src/main/java/org/opensearch/sql/legacy/plugin/RestSQLQueryAction.java @@ -5,15 +5,19 @@ package org.opensearch.sql.legacy.plugin; +import static org.opensearch.commons.ppl.format.JsonResponseFormatter.Style.PRETTY; import static org.opensearch.core.rest.RestStatus.OK; import static org.opensearch.sql.executor.ExecutionEngine.QueryResponse; -import static org.opensearch.sql.protocol.response.format.JsonResponseFormatter.Style.PRETTY; +import static org.opensearch.commons.ppl.format.JsonResponseFormatter.Style.PRETTY; import java.util.List; import java.util.function.BiConsumer; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.opensearch.common.inject.Injector; +import org.opensearch.commons.ppl.format.Format; +import org.opensearch.commons.ppl.format.JsonResponseFormatter; +import org.opensearch.commons.ppl.format.ResponseFormatter; import org.opensearch.core.rest.RestStatus; import org.opensearch.rest.BaseRestHandler; import org.opensearch.rest.BytesRestResponse; @@ -30,11 +34,8 @@ import org.opensearch.sql.protocol.response.QueryResult; import org.opensearch.sql.protocol.response.format.CommandResponseFormatter; import org.opensearch.sql.protocol.response.format.CsvResponseFormatter; -import org.opensearch.sql.protocol.response.format.Format; import org.opensearch.sql.protocol.response.format.JdbcResponseFormatter; -import org.opensearch.sql.protocol.response.format.JsonResponseFormatter; import org.opensearch.sql.protocol.response.format.RawResponseFormatter; -import org.opensearch.sql.protocol.response.format.ResponseFormatter; import org.opensearch.sql.sql.SQLService; import org.opensearch.sql.sql.domain.SQLQueryRequest; import org.opensearch.transport.client.node.NodeClient; diff --git a/opensearch/src/main/java/org/opensearch/sql/opensearch/storage/OpenSearchDataSourceFactory.java b/opensearch/src/main/java/org/opensearch/sql/opensearch/storage/OpenSearchDataSourceFactory.java index b30d460c006..98d09ec018a 100644 --- a/opensearch/src/main/java/org/opensearch/sql/opensearch/storage/OpenSearchDataSourceFactory.java +++ b/opensearch/src/main/java/org/opensearch/sql/opensearch/storage/OpenSearchDataSourceFactory.java @@ -6,10 +6,10 @@ package org.opensearch.sql.opensearch.storage; import lombok.RequiredArgsConstructor; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSource; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.opensearch.client.OpenSearchClient; import org.opensearch.sql.storage.DataSourceFactory; diff --git a/opensearch/src/test/java/org/opensearch/sql/opensearch/storage/OpenSearchDataSourceFactoryTest.java b/opensearch/src/test/java/org/opensearch/sql/opensearch/storage/OpenSearchDataSourceFactoryTest.java index a9e4e153fc0..a69802364d2 100644 --- a/opensearch/src/test/java/org/opensearch/sql/opensearch/storage/OpenSearchDataSourceFactoryTest.java +++ b/opensearch/src/test/java/org/opensearch/sql/opensearch/storage/OpenSearchDataSourceFactoryTest.java @@ -16,7 +16,6 @@ import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSource; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.opensearch.client.OpenSearchClient; @ExtendWith(MockitoExtension.class) diff --git a/plugin/build.gradle b/plugin/build.gradle index ddf0227bb0e..e88e357503a 100644 --- a/plugin/build.gradle +++ b/plugin/build.gradle @@ -151,6 +151,8 @@ spotless { dependencies { compileOnly "org.opensearch:opensearch-job-scheduler-spi:${opensearch_build}" + api "org.opensearch:common-utils:${common_utils_snapshot_version}@jar" + api "com.fasterxml.jackson.core:jackson-core:${versions.jackson}" api "com.fasterxml.jackson.core:jackson-databind:${versions.jackson_databind}" api "com.fasterxml.jackson.core:jackson-annotations:${versions.jackson}" diff --git a/plugin/src/main/java/org/opensearch/sql/plugin/SQLPlugin.java b/plugin/src/main/java/org/opensearch/sql/plugin/SQLPlugin.java index 7d9df7525a1..048622617cd 100644 --- a/plugin/src/main/java/org/opensearch/sql/plugin/SQLPlugin.java +++ b/plugin/src/main/java/org/opensearch/sql/plugin/SQLPlugin.java @@ -34,6 +34,8 @@ import org.opensearch.common.settings.Settings; import org.opensearch.common.settings.SettingsFilter; import org.opensearch.common.util.concurrent.OpenSearchExecutors; +import org.opensearch.commons.ppl.action.PPLQueryAction; +import org.opensearch.commons.ppl.action.TransportPPLQueryResponse; import org.opensearch.core.action.ActionResponse; import org.opensearch.core.common.io.stream.NamedWriteableRegistry; import org.opensearch.core.xcontent.NamedXContentRegistry; @@ -83,9 +85,7 @@ import org.opensearch.sql.plugin.rest.RestPPLQueryAction; import org.opensearch.sql.plugin.rest.RestPPLStatsAction; import org.opensearch.sql.plugin.rest.RestQuerySettingsAction; -import org.opensearch.sql.plugin.transport.PPLQueryAction; import org.opensearch.sql.plugin.transport.TransportPPLQueryAction; -import org.opensearch.sql.plugin.transport.TransportPPLQueryResponse; import org.opensearch.sql.prometheus.storage.PrometheusStorageFactory; import org.opensearch.sql.spark.asyncquery.AsyncQueryExecutorService; import org.opensearch.sql.spark.cluster.ClusterManagerEventListener; diff --git a/plugin/src/main/java/org/opensearch/sql/plugin/request/PPLQueryRequestFactory.java b/plugin/src/main/java/org/opensearch/sql/plugin/request/PPLQueryRequestFactory.java deleted file mode 100644 index 6a50fee40e7..00000000000 --- a/plugin/src/main/java/org/opensearch/sql/plugin/request/PPLQueryRequestFactory.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.opensearch.sql.plugin.request; - -import java.util.Map; -import java.util.Optional; -import org.json.JSONException; -import org.json.JSONObject; -import org.opensearch.rest.RestRequest; -import org.opensearch.sql.ppl.domain.PPLQueryRequest; -import org.opensearch.sql.protocol.response.format.Format; -import org.opensearch.sql.protocol.response.format.JsonResponseFormatter; - -/** Factory of {@link PPLQueryRequest}. */ -public class PPLQueryRequestFactory { - private static final String PPL_URL_PARAM_KEY = "ppl"; - private static final String PPL_FIELD_NAME = "query"; - private static final String QUERY_PARAMS_FORMAT = "format"; - private static final String QUERY_PARAMS_SANITIZE = "sanitize"; - private static final String DEFAULT_RESPONSE_FORMAT = "jdbc"; - private static final String DEFAULT_EXPLAIN_FORMAT = "standard"; - private static final String QUERY_PARAMS_PRETTY = "pretty"; - - /** - * Build {@link PPLQueryRequest} from {@link RestRequest}. - * - * @param request {@link PPLQueryRequest} - * @return {@link RestRequest} - */ - public static PPLQueryRequest getPPLRequest(RestRequest request) { - switch (request.method()) { - case GET: - return parsePPLRequestFromUrl(request); - case POST: - return parsePPLRequestFromPayload(request); - default: - throw new IllegalArgumentException( - "OpenSearch PPL doesn't supported HTTP " + request.method().name()); - } - } - - private static PPLQueryRequest parsePPLRequestFromUrl(RestRequest restRequest) { - String ppl; - - ppl = restRequest.param(PPL_URL_PARAM_KEY); - if (ppl == null) { - throw new IllegalArgumentException("Cannot find ppl parameter from the URL"); - } - return new PPLQueryRequest(ppl, null, restRequest.path()); - } - - private static PPLQueryRequest parsePPLRequestFromPayload(RestRequest restRequest) { - String content = restRequest.content().utf8ToString(); - JSONObject jsonContent; - Format format = getFormat(restRequest.params(), restRequest.rawPath()); - boolean pretty = getPrettyOption(restRequest.params()); - try { - jsonContent = new JSONObject(content); - } catch (JSONException e) { - throw new IllegalArgumentException("Failed to parse request payload", e); - } - PPLQueryRequest pplRequest = - new PPLQueryRequest( - jsonContent.getString(PPL_FIELD_NAME), - jsonContent, - restRequest.path(), - format.getFormatName()); - // set sanitize option if csv format - if (format.equals(Format.CSV)) { - pplRequest.sanitize(getSanitizeOption(restRequest.params())); - } - // set pretty option - if (pretty) { - pplRequest.style(JsonResponseFormatter.Style.PRETTY); - } - return pplRequest; - } - - private static Format getFormat(Map requestParams, String path) { - String formatName = - requestParams.containsKey(QUERY_PARAMS_FORMAT) - ? requestParams.get(QUERY_PARAMS_FORMAT).toLowerCase() - : isExplainRequest(path) ? DEFAULT_EXPLAIN_FORMAT : DEFAULT_RESPONSE_FORMAT; - Optional optionalFormat = - isExplainRequest(path) ? Format.ofExplain(formatName) : Format.of(formatName); - if (optionalFormat.isPresent()) { - return optionalFormat.get(); - } else { - throw new IllegalArgumentException( - "Failed to create executor due to unknown response format: " + formatName); - } - } - - private static boolean isExplainRequest(String path) { - return path != null && path.endsWith("/_explain"); - } - - private static boolean getSanitizeOption(Map requestParams) { - if (requestParams.containsKey(QUERY_PARAMS_SANITIZE)) { - return Boolean.parseBoolean(requestParams.get(QUERY_PARAMS_SANITIZE)); - } - return true; - } - - private static boolean getPrettyOption(Map requestParams) { - if (requestParams.containsKey(QUERY_PARAMS_PRETTY)) { - String prettyValue = requestParams.get(QUERY_PARAMS_PRETTY); - if (prettyValue.isEmpty()) { - return true; - } - return Boolean.parseBoolean(prettyValue); - } - return false; - } -} diff --git a/plugin/src/main/java/org/opensearch/sql/plugin/rest/RestPPLQueryAction.java b/plugin/src/main/java/org/opensearch/sql/plugin/rest/RestPPLQueryAction.java index 94cc8c2fe0f..437b0574040 100644 --- a/plugin/src/main/java/org/opensearch/sql/plugin/rest/RestPPLQueryAction.java +++ b/plugin/src/main/java/org/opensearch/sql/plugin/rest/RestPPLQueryAction.java @@ -17,6 +17,10 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.opensearch.OpenSearchException; +import org.opensearch.commons.ppl.action.PPLQueryAction; +import org.opensearch.commons.ppl.action.TransportPPLQueryRequest; +import org.opensearch.commons.ppl.action.TransportPPLQueryResponse; +import org.opensearch.commons.ppl.util.PPLQueryRequestFactory; import org.opensearch.core.action.ActionListener; import org.opensearch.core.rest.RestStatus; import org.opensearch.index.IndexNotFoundException; @@ -32,10 +36,6 @@ import org.opensearch.sql.legacy.metrics.MetricName; import org.opensearch.sql.legacy.metrics.Metrics; import org.opensearch.sql.opensearch.response.error.ErrorMessageFactory; -import org.opensearch.sql.plugin.request.PPLQueryRequestFactory; -import org.opensearch.sql.plugin.transport.PPLQueryAction; -import org.opensearch.sql.plugin.transport.TransportPPLQueryRequest; -import org.opensearch.sql.plugin.transport.TransportPPLQueryResponse; import org.opensearch.transport.client.node.NodeClient; public class RestPPLQueryAction extends BaseRestHandler { diff --git a/plugin/src/main/java/org/opensearch/sql/plugin/transport/PPLQueryAction.java b/plugin/src/main/java/org/opensearch/sql/plugin/transport/PPLQueryAction.java deleted file mode 100644 index 0babdba4cae..00000000000 --- a/plugin/src/main/java/org/opensearch/sql/plugin/transport/PPLQueryAction.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.opensearch.sql.plugin.transport; - -import org.opensearch.action.ActionType; - -public class PPLQueryAction extends ActionType { - // Internal Action which is not used for public facing RestAPIs. - public static final String NAME = "cluster:admin/opensearch/ppl"; - public static final PPLQueryAction INSTANCE = new PPLQueryAction(); - - private PPLQueryAction() { - super(NAME, TransportPPLQueryResponse::new); - } -} diff --git a/plugin/src/main/java/org/opensearch/sql/plugin/transport/TransportPPLQueryAction.java b/plugin/src/main/java/org/opensearch/sql/plugin/transport/TransportPPLQueryAction.java index fc257931c2a..bf8880fa349 100644 --- a/plugin/src/main/java/org/opensearch/sql/plugin/transport/TransportPPLQueryAction.java +++ b/plugin/src/main/java/org/opensearch/sql/plugin/transport/TransportPPLQueryAction.java @@ -5,13 +5,15 @@ package org.opensearch.sql.plugin.transport; +import static org.opensearch.commons.ppl.format.JsonResponseFormatter.Style.PRETTY; import static org.opensearch.rest.BaseRestHandler.MULTI_ALLOW_EXPLICIT_INDEX; import static org.opensearch.sql.lang.PPLLangSpec.PPL_SPEC; -import static org.opensearch.sql.protocol.response.format.JsonResponseFormatter.Style.PRETTY; import java.util.Locale; import java.util.Optional; +import java.util.concurrent.CompletableFuture; import java.util.function.Supplier; + import org.opensearch.action.ActionRequest; import org.opensearch.action.support.ActionFilters; import org.opensearch.action.support.HandledTransportAction; @@ -19,6 +21,13 @@ import org.opensearch.common.inject.Inject; import org.opensearch.common.inject.Injector; import org.opensearch.common.inject.ModulesBuilder; +import org.opensearch.commons.ppl.action.PPLQueryAction; +import org.opensearch.commons.ppl.action.TransportPPLQueryRequest; +import org.opensearch.commons.ppl.action.TransportPPLQueryResponse; +import org.opensearch.commons.ppl.format.Format; +import org.opensearch.commons.ppl.format.JsonResponseFormatter; +import org.opensearch.commons.ppl.format.ResponseFormatter; +import org.opensearch.commons.ppl.util.PPLQueryRequest; import org.opensearch.core.action.ActionListener; import org.opensearch.sql.common.response.ResponseListener; import org.opensearch.sql.common.setting.Settings; @@ -32,13 +41,9 @@ import org.opensearch.sql.opensearch.setting.OpenSearchSettings; import org.opensearch.sql.plugin.config.OpenSearchPluginModule; import org.opensearch.sql.ppl.PPLService; -import org.opensearch.sql.ppl.domain.PPLQueryRequest; import org.opensearch.sql.protocol.response.QueryResult; import org.opensearch.sql.protocol.response.format.CsvResponseFormatter; -import org.opensearch.sql.protocol.response.format.Format; -import org.opensearch.sql.protocol.response.format.JsonResponseFormatter; import org.opensearch.sql.protocol.response.format.RawResponseFormatter; -import org.opensearch.sql.protocol.response.format.ResponseFormatter; import org.opensearch.sql.protocol.response.format.SimpleJsonResponseFormatter; import org.opensearch.sql.protocol.response.format.VisualizationResponseFormatter; import org.opensearch.tasks.Task; @@ -83,19 +88,22 @@ public TransportPPLQueryAction( .getSettingValue(Settings.Key.PPL_ENABLED); } - /** - * {@inheritDoc} Transform the request and call super.doExecute() to support call from other - * plugins. - */ @Override protected void doExecute( - Task task, ActionRequest request, ActionListener listener) { + Task task, ActionRequest request, ActionListener listener) { + TransportPPLQueryRequest transformedRequest = TransportPPLQueryRequest.fromActionRequest(request); + try { + listener.onResponse(executeRequest(transformedRequest)); + } catch (Exception e) { + listener.onFailure(e); + } + } + + protected TransportPPLQueryResponse executeRequest(TransportPPLQueryRequest request) throws Exception { if (!pplEnabled.get()) { - listener.onFailure( - new IllegalAccessException( + throw new IllegalAccessException( "Either plugins.ppl.enabled or rest.action.multi.allow_explicit_index setting is" - + " false")); - return; + + " false"); } Metrics.getInstance().getNumericalMetric(MetricName.PPL_REQ_TOTAL).increment(); Metrics.getInstance().getNumericalMetric(MetricName.PPL_REQ_COUNT_TOTAL).increment(); @@ -104,17 +112,59 @@ protected void doExecute( PPLService pplService = SecurityAccess.doPrivileged(() -> injector.getInstance(PPLService.class)); - TransportPPLQueryRequest transportRequest = TransportPPLQueryRequest.fromActionRequest(request); +// TransportPPLQueryRequest transportRequest = TransportPPLQueryRequest.fromActionRequest(request); // in order to use PPL service, we need to convert TransportPPLQueryRequest to PPLQueryRequest - PPLQueryRequest transformedRequest = transportRequest.toPPLQueryRequest(); + PPLQueryRequest transformedRequest = request.toPPLQueryRequest(); if (transformedRequest.isExplainRequest()) { - pplService.explain(transformedRequest, createExplainResponseListener(listener)); + return null; // dont ever call PPL explain for POC + } + + Format format = format(transformedRequest); + ResponseFormatter formatter; + if (format.equals(Format.CSV)) { + formatter = new CsvResponseFormatter(transformedRequest.sanitize()); + } else if (format.equals(Format.RAW)) { + formatter = new RawResponseFormatter(); + } else if (format.equals(Format.VIZ)) { + formatter = new VisualizationResponseFormatter(transformedRequest.style()); } else { + formatter = new SimpleJsonResponseFormatter(PRETTY); + } + + try { + CompletableFuture future = new CompletableFuture<>(); + pplService.execute( - transformedRequest, - createListener(transformedRequest, listener), - createExplainResponseListener(listener)); + transformedRequest, + new ResponseListener<>() { + @Override + public void onResponse(ExecutionEngine.QueryResponse response) { + String responseContent = formatter.format(new QueryResult(response.getSchema(), response.getResults(), response.getCursor(), PPL_SPEC)); + future.complete(new TransportPPLQueryResponse(responseContent)); + } + + @Override + public void onFailure(Exception e) { + future.completeExceptionally(e); + } + }, + new ResponseListener<>() { + @Override + public void onResponse(ExecutionEngine.ExplainResponse response) { + future.complete(new TransportPPLQueryResponse("poc should never reach this point")); + } + + @Override + public void onFailure(Exception e) { + future.completeExceptionally(e); + } + } + ); + + return future.get(); + } catch (Exception e) { + throw new RuntimeException("Failed to execute PPL query", e); } } @@ -156,7 +206,7 @@ private ResponseListener createListener( } else if (format.equals(Format.VIZ)) { formatter = new VisualizationResponseFormatter(pplRequest.style()); } else { - formatter = new SimpleJsonResponseFormatter(JsonResponseFormatter.Style.PRETTY); + formatter = new SimpleJsonResponseFormatter(PRETTY); } return new ResponseListener() { diff --git a/plugin/src/main/java/org/opensearch/sql/plugin/transport/TransportPPLQueryRequest.java b/plugin/src/main/java/org/opensearch/sql/plugin/transport/TransportPPLQueryRequest.java deleted file mode 100644 index 8cdf27ef3c8..00000000000 --- a/plugin/src/main/java/org/opensearch/sql/plugin/transport/TransportPPLQueryRequest.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.opensearch.sql.plugin.transport; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.Locale; -import java.util.Optional; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.Setter; -import lombok.experimental.Accessors; -import org.json.JSONObject; -import org.opensearch.action.ActionRequest; -import org.opensearch.action.ActionRequestValidationException; -import org.opensearch.core.common.io.stream.InputStreamStreamInput; -import org.opensearch.core.common.io.stream.OutputStreamStreamOutput; -import org.opensearch.core.common.io.stream.StreamInput; -import org.opensearch.core.common.io.stream.StreamOutput; -import org.opensearch.sql.ppl.domain.PPLQueryRequest; -import org.opensearch.sql.protocol.response.format.Format; -import org.opensearch.sql.protocol.response.format.JsonResponseFormatter; - -@RequiredArgsConstructor -public class TransportPPLQueryRequest extends ActionRequest { - public static final TransportPPLQueryRequest NULL = new TransportPPLQueryRequest("", null, ""); - private final String pplQuery; - @Getter private final JSONObject jsonContent; - - @Getter private final String path; - - @Getter private String format = ""; - - @Setter - @Getter - @Accessors(fluent = true) - private boolean sanitize = true; - - @Setter - @Getter - @Accessors(fluent = true) - private JsonResponseFormatter.Style style = JsonResponseFormatter.Style.COMPACT; - - /** Constructor of TransportPPLQueryRequest from PPLQueryRequest. */ - public TransportPPLQueryRequest(PPLQueryRequest pplQueryRequest) { - pplQuery = pplQueryRequest.getRequest(); - jsonContent = pplQueryRequest.getJsonContent(); - path = pplQueryRequest.getPath(); - format = pplQueryRequest.getFormat(); - sanitize = pplQueryRequest.sanitize(); - style = pplQueryRequest.style(); - } - - /** Constructor of TransportPPLQueryRequest from StreamInput. */ - public TransportPPLQueryRequest(StreamInput in) throws IOException { - super(in); - pplQuery = in.readOptionalString(); - format = in.readOptionalString(); - String jsonContentString = in.readOptionalString(); - jsonContent = jsonContentString != null ? new JSONObject(jsonContentString) : null; - path = in.readOptionalString(); - sanitize = in.readBoolean(); - style = in.readEnum(JsonResponseFormatter.Style.class); - } - - /** Re-create the object from the actionRequest. */ - public static TransportPPLQueryRequest fromActionRequest(final ActionRequest actionRequest) { - if (actionRequest instanceof TransportPPLQueryRequest) { - return (TransportPPLQueryRequest) actionRequest; - } - - try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); - OutputStreamStreamOutput osso = new OutputStreamStreamOutput(baos)) { - actionRequest.writeTo(osso); - try (InputStreamStreamInput input = - new InputStreamStreamInput(new ByteArrayInputStream(baos.toByteArray()))) { - return new TransportPPLQueryRequest(input); - } - } catch (IOException e) { - throw new IllegalArgumentException( - "failed to parse ActionRequest into TransportPPLQueryRequest", e); - } - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - super.writeTo(out); - out.writeOptionalString(pplQuery); - out.writeOptionalString(format); - out.writeOptionalString(jsonContent != null ? jsonContent.toString() : null); - out.writeOptionalString(path); - out.writeBoolean(sanitize); - out.writeEnum(style); - } - - public String getRequest() { - return pplQuery; - } - - /** - * Check if request is to explain rather than execute the query. - * - * @return true if it is an explain request - */ - public boolean isExplainRequest() { - return path.endsWith("/_explain"); - } - - /** Decide on the formatter by the requested format. */ - public Format format() { - Optional optionalFormat = Format.of(format); - if (optionalFormat.isPresent()) { - return optionalFormat.get(); - } else { - throw new IllegalArgumentException( - String.format(Locale.ROOT, "response in %s format is not supported.", format)); - } - } - - @Override - public ActionRequestValidationException validate() { - return null; - } - - /** Convert to PPLQueryRequest. */ - public PPLQueryRequest toPPLQueryRequest() { - PPLQueryRequest pplQueryRequest = new PPLQueryRequest(pplQuery, jsonContent, path, format); - pplQueryRequest.sanitize(sanitize); - pplQueryRequest.style(style); - return pplQueryRequest; - } -} diff --git a/plugin/src/main/java/org/opensearch/sql/plugin/transport/TransportPPLQueryResponse.java b/plugin/src/main/java/org/opensearch/sql/plugin/transport/TransportPPLQueryResponse.java deleted file mode 100644 index a8d06fa6264..00000000000 --- a/plugin/src/main/java/org/opensearch/sql/plugin/transport/TransportPPLQueryResponse.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.opensearch.sql.plugin.transport; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.UncheckedIOException; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import org.opensearch.core.action.ActionResponse; -import org.opensearch.core.common.io.stream.InputStreamStreamInput; -import org.opensearch.core.common.io.stream.OutputStreamStreamOutput; -import org.opensearch.core.common.io.stream.StreamInput; -import org.opensearch.core.common.io.stream.StreamOutput; - -@RequiredArgsConstructor -public class TransportPPLQueryResponse extends ActionResponse { - @Getter private final String result; - - public TransportPPLQueryResponse(StreamInput in) throws IOException { - super(in); - result = in.readString(); - } - - @Override - public void writeTo(StreamOutput out) throws IOException { - out.writeString(result); - } - - public static TransportPPLQueryResponse fromActionResponse(ActionResponse actionResponse) { - if (actionResponse instanceof TransportPPLQueryResponse) { - return (TransportPPLQueryResponse) actionResponse; - } - - try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); - OutputStreamStreamOutput osso = new OutputStreamStreamOutput(baos)) { - actionResponse.writeTo(osso); - try (StreamInput input = - new InputStreamStreamInput(new ByteArrayInputStream(baos.toByteArray()))) { - return new TransportPPLQueryResponse(input); - } - } catch (IOException e) { - throw new UncheckedIOException( - "failed to parse ActionResponse into TransportPPLQueryResponse", e); - } - } -} diff --git a/ppl/build.gradle b/ppl/build.gradle index 332a90c5ae2..650b3256cfc 100644 --- a/ppl/build.gradle +++ b/ppl/build.gradle @@ -45,6 +45,8 @@ configurations { dependencies { antlr "org.antlr:antlr4:4.7.1" + api "org.opensearch:common-utils:${common_utils_snapshot_version}@jar" + runtimeOnly group: 'org.reflections', name: 'reflections', version: '0.9.12' implementation "org.antlr:antlr4-runtime:4.7.1" diff --git a/ppl/src/main/java/org/opensearch/sql/ppl/PPLService.java b/ppl/src/main/java/org/opensearch/sql/ppl/PPLService.java index ccd4d49dd4a..ae8b1e71a81 100644 --- a/ppl/src/main/java/org/opensearch/sql/ppl/PPLService.java +++ b/ppl/src/main/java/org/opensearch/sql/ppl/PPLService.java @@ -10,6 +10,7 @@ import lombok.extern.log4j.Log4j2; import org.antlr.v4.runtime.tree.ParseTree; +import org.opensearch.commons.ppl.util.PPLQueryRequest; import org.opensearch.sql.ast.statement.Statement; import org.opensearch.sql.common.response.ResponseListener; import org.opensearch.sql.common.setting.Settings; @@ -20,7 +21,6 @@ import org.opensearch.sql.executor.execution.AbstractPlan; import org.opensearch.sql.executor.execution.QueryPlanFactory; import org.opensearch.sql.ppl.antlr.PPLSyntaxParser; -import org.opensearch.sql.ppl.domain.PPLQueryRequest; import org.opensearch.sql.ppl.parser.AstBuilder; import org.opensearch.sql.ppl.parser.AstStatementBuilder; import org.opensearch.sql.ppl.utils.PPLQueryDataAnonymizer; diff --git a/ppl/src/main/java/org/opensearch/sql/ppl/domain/PPLQueryRequest.java b/ppl/src/main/java/org/opensearch/sql/ppl/domain/PPLQueryRequest.java deleted file mode 100644 index ca351fcc0a7..00000000000 --- a/ppl/src/main/java/org/opensearch/sql/ppl/domain/PPLQueryRequest.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.opensearch.sql.ppl.domain; - -import java.util.Locale; -import java.util.Optional; -import lombok.Getter; -import lombok.Setter; -import lombok.experimental.Accessors; -import org.json.JSONObject; -import org.opensearch.sql.protocol.response.format.Format; -import org.opensearch.sql.protocol.response.format.JsonResponseFormatter; - -public class PPLQueryRequest { - - private static final String DEFAULT_PPL_PATH = "/_plugins/_ppl"; - - public static final PPLQueryRequest NULL = new PPLQueryRequest("", null, DEFAULT_PPL_PATH, ""); - - private final String pplQuery; - @Getter private final JSONObject jsonContent; - @Getter private final String path; - @Getter private String format = ""; - - @Setter - @Getter - @Accessors(fluent = true) - private boolean sanitize = true; - - @Setter - @Getter - @Accessors(fluent = true) - private JsonResponseFormatter.Style style = JsonResponseFormatter.Style.COMPACT; - - public PPLQueryRequest(String pplQuery, JSONObject jsonContent, String path) { - this(pplQuery, jsonContent, path, ""); - } - - /** Constructor of PPLQueryRequest. */ - public PPLQueryRequest(String pplQuery, JSONObject jsonContent, String path, String format) { - this.pplQuery = pplQuery; - this.jsonContent = jsonContent; - this.path = Optional.ofNullable(path).orElse(DEFAULT_PPL_PATH); - this.format = format; - } - - public String getRequest() { - return pplQuery; - } - - /** - * Check if request is to explain rather than execute the query. - * - * @return true if it is a explain request - */ - public boolean isExplainRequest() { - return path.endsWith("/_explain"); - } - - /** Decide on the formatter by the requested format. */ - public Format format() { - Optional optionalFormat = Format.of(format); - if (optionalFormat.isPresent()) { - return optionalFormat.get(); - } else { - throw new IllegalArgumentException( - String.format(Locale.ROOT, "response in %s format is not supported.", format)); - } - } -} diff --git a/ppl/src/main/java/org/opensearch/sql/ppl/utils/PPLQueryDataAnonymizer.java b/ppl/src/main/java/org/opensearch/sql/ppl/utils/PPLQueryDataAnonymizer.java index 11e3504665c..9f3a78faa3e 100644 --- a/ppl/src/main/java/org/opensearch/sql/ppl/utils/PPLQueryDataAnonymizer.java +++ b/ppl/src/main/java/org/opensearch/sql/ppl/utils/PPLQueryDataAnonymizer.java @@ -16,6 +16,8 @@ import java.util.Locale; import java.util.Objects; import java.util.stream.Collectors; + +import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; import org.opensearch.sql.ast.AbstractNodeVisitor; @@ -87,6 +89,7 @@ import org.opensearch.sql.planner.logical.LogicalRename; import org.opensearch.sql.planner.logical.LogicalSort; +@Log4j2 /** Utility class to mask sensitive information in incoming PPL queries. */ public class PPLQueryDataAnonymizer extends AbstractNodeVisitor { diff --git a/ppl/src/test/java/org/opensearch/sql/ppl/PPLServiceTest.java b/ppl/src/test/java/org/opensearch/sql/ppl/PPLServiceTest.java index 5db142a6506..edfa0408b47 100644 --- a/ppl/src/test/java/org/opensearch/sql/ppl/PPLServiceTest.java +++ b/ppl/src/test/java/org/opensearch/sql/ppl/PPLServiceTest.java @@ -28,7 +28,6 @@ import org.opensearch.sql.executor.execution.QueryPlanFactory; import org.opensearch.sql.executor.pagination.Cursor; import org.opensearch.sql.ppl.antlr.PPLSyntaxParser; -import org.opensearch.sql.ppl.domain.PPLQueryRequest; @RunWith(MockitoJUnitRunner.class) public class PPLServiceTest { diff --git a/ppl/src/test/java/org/opensearch/sql/ppl/domain/PPLQueryRequestTest.java b/ppl/src/test/java/org/opensearch/sql/ppl/domain/PPLQueryRequestTest.java index f4e90395cb5..62b417bdb13 100644 --- a/ppl/src/test/java/org/opensearch/sql/ppl/domain/PPLQueryRequestTest.java +++ b/ppl/src/test/java/org/opensearch/sql/ppl/domain/PPLQueryRequestTest.java @@ -11,7 +11,6 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; -import org.opensearch.sql.protocol.response.format.Format; public class PPLQueryRequestTest { diff --git a/prometheus/src/main/java/org/opensearch/sql/prometheus/storage/PrometheusStorageFactory.java b/prometheus/src/main/java/org/opensearch/sql/prometheus/storage/PrometheusStorageFactory.java index b9c1b09d601..d71025130bc 100644 --- a/prometheus/src/main/java/org/opensearch/sql/prometheus/storage/PrometheusStorageFactory.java +++ b/prometheus/src/main/java/org/opensearch/sql/prometheus/storage/PrometheusStorageFactory.java @@ -19,13 +19,13 @@ import java.util.concurrent.TimeUnit; import lombok.RequiredArgsConstructor; import okhttp3.OkHttpClient; +import org.opensearch.commons.ppl.serde.DataSourceType; import org.opensearch.sql.common.interceptors.AwsSigningInterceptor; import org.opensearch.sql.common.interceptors.BasicAuthenticationInterceptor; import org.opensearch.sql.common.interceptors.URIValidatorInterceptor; import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSource; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.datasources.auth.AuthenticationType; import org.opensearch.sql.datasources.utils.DatasourceValidationUtils; import org.opensearch.sql.prometheus.client.PrometheusClient; diff --git a/prometheus/src/test/java/org/opensearch/sql/prometheus/storage/PrometheusStorageFactoryTest.java b/prometheus/src/test/java/org/opensearch/sql/prometheus/storage/PrometheusStorageFactoryTest.java index 7b1e2dec0f7..31caf5c86df 100644 --- a/prometheus/src/test/java/org/opensearch/sql/prometheus/storage/PrometheusStorageFactoryTest.java +++ b/prometheus/src/test/java/org/opensearch/sql/prometheus/storage/PrometheusStorageFactoryTest.java @@ -21,7 +21,6 @@ import org.opensearch.sql.common.setting.Settings; import org.opensearch.sql.datasource.model.DataSource; import org.opensearch.sql.datasource.model.DataSourceMetadata; -import org.opensearch.sql.datasource.model.DataSourceType; import org.opensearch.sql.storage.StorageEngine; @ExtendWith(MockitoExtension.class) diff --git a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/CommandResponseFormatter.java b/protocol/src/main/java/org/opensearch/sql/protocol/response/format/CommandResponseFormatter.java index b781e1dbba7..91e57601368 100644 --- a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/CommandResponseFormatter.java +++ b/protocol/src/main/java/org/opensearch/sql/protocol/response/format/CommandResponseFormatter.java @@ -6,6 +6,7 @@ package org.opensearch.sql.protocol.response.format; import lombok.Getter; +import org.opensearch.commons.ppl.format.JsonResponseFormatter; import org.opensearch.sql.executor.execution.CommandPlan; import org.opensearch.sql.protocol.response.QueryResult; diff --git a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/CsvResponseFormatter.java b/protocol/src/main/java/org/opensearch/sql/protocol/response/format/CsvResponseFormatter.java index f5899e88e01..1cbfcb51031 100644 --- a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/CsvResponseFormatter.java +++ b/protocol/src/main/java/org/opensearch/sql/protocol/response/format/CsvResponseFormatter.java @@ -5,6 +5,8 @@ package org.opensearch.sql.protocol.response.format; +import org.opensearch.commons.ppl.format.ErrorFormatter; +import org.opensearch.commons.ppl.format.ResponseFormatter; import org.opensearch.sql.protocol.response.QueryResult; /** Response formatter to format response to csv format. */ diff --git a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/ErrorFormatter.java b/protocol/src/main/java/org/opensearch/sql/protocol/response/format/ErrorFormatter.java deleted file mode 100644 index 2e43cfa6c22..00000000000 --- a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/ErrorFormatter.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.opensearch.sql.protocol.response.format; - -import com.google.gson.Gson; -import java.security.AccessController; -import java.security.PrivilegedAction; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.experimental.UtilityClass; -import org.opensearch.sql.utils.SerializeUtils; - -@UtilityClass -public class ErrorFormatter { - - private static final Gson PRETTY_PRINT_GSON = - AccessController.doPrivileged( - (PrivilegedAction) - () -> - SerializeUtils.getGsonBuilder() - .setPrettyPrinting() - .disableHtmlEscaping() - .create()); - private static final Gson GSON = - AccessController.doPrivileged( - (PrivilegedAction) - () -> SerializeUtils.getGsonBuilder().disableHtmlEscaping().create()); - - /** Util method to format {@link Throwable} response to JSON string in compact printing. */ - public static String compactFormat(Throwable t) { - JsonError error = new ErrorFormatter.JsonError(t.getClass().getSimpleName(), t.getMessage()); - return compactJsonify(error); - } - - /** Util method to format {@link Throwable} response to JSON string in pretty printing. */ - public static String prettyFormat(Throwable t) { - JsonError error = new ErrorFormatter.JsonError(t.getClass().getSimpleName(), t.getMessage()); - return prettyJsonify(error); - } - - public static String compactJsonify(Object jsonObject) { - return AccessController.doPrivileged((PrivilegedAction) () -> GSON.toJson(jsonObject)); - } - - public static String prettyJsonify(Object jsonObject) { - return AccessController.doPrivileged( - (PrivilegedAction) () -> PRETTY_PRINT_GSON.toJson(jsonObject)); - } - - @RequiredArgsConstructor - @Getter - public static class JsonError { - private final String type; - private final String reason; - } -} diff --git a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/Format.java b/protocol/src/main/java/org/opensearch/sql/protocol/response/format/Format.java deleted file mode 100644 index d5537ff5556..00000000000 --- a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/Format.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.opensearch.sql.protocol.response.format; - -import com.google.common.base.Strings; -import com.google.common.collect.ImmutableMap; -import java.util.Map; -import java.util.Optional; -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@RequiredArgsConstructor -public enum Format { - JDBC("jdbc"), - CSV("csv"), - RAW("raw"), - VIZ("viz"), - // format of explain response - SIMPLE("simple"), - STANDARD("standard"), - EXTENDED("extended"), - COST("cost"); - - @Getter private final String formatName; - - public static final Map RESPONSE_FORMATS; - - public static final Map EXPLAIN_FORMATS; - - static { - ImmutableMap.Builder builder; - builder = new ImmutableMap.Builder<>(); - builder.put(JDBC.formatName, JDBC); - builder.put(CSV.formatName, CSV); - builder.put(RAW.formatName, RAW); - builder.put(VIZ.formatName, VIZ); - RESPONSE_FORMATS = builder.build(); - - builder = new ImmutableMap.Builder<>(); - builder.put(SIMPLE.formatName, SIMPLE); - builder.put(STANDARD.formatName, STANDARD); - builder.put(EXTENDED.formatName, EXTENDED); - builder.put(COST.formatName, COST); - EXPLAIN_FORMATS = builder.build(); - } - - public static Optional of(String formatName) { - String format = Strings.isNullOrEmpty(formatName) ? "jdbc" : formatName.toLowerCase(); - return Optional.ofNullable(RESPONSE_FORMATS.getOrDefault(format, null)); - } - - public static Optional ofExplain(String formatName) { - String format = Strings.isNullOrEmpty(formatName) ? "standard" : formatName.toLowerCase(); - return Optional.ofNullable(EXPLAIN_FORMATS.getOrDefault(format, null)); - } -} diff --git a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/JdbcResponseFormatter.java b/protocol/src/main/java/org/opensearch/sql/protocol/response/format/JdbcResponseFormatter.java index 8be22af5326..d1e3072886e 100644 --- a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/JdbcResponseFormatter.java +++ b/protocol/src/main/java/org/opensearch/sql/protocol/response/format/JdbcResponseFormatter.java @@ -10,6 +10,7 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Singular; +import org.opensearch.commons.ppl.format.JsonResponseFormatter; import org.opensearch.sql.common.antlr.SyntaxCheckException; import org.opensearch.sql.data.type.ExprType; import org.opensearch.sql.exception.QueryEngineException; diff --git a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/JsonResponseFormatter.java b/protocol/src/main/java/org/opensearch/sql/protocol/response/format/JsonResponseFormatter.java deleted file mode 100644 index 115ee77b2b4..00000000000 --- a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/JsonResponseFormatter.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.opensearch.sql.protocol.response.format; - -import static org.opensearch.sql.protocol.response.format.ErrorFormatter.compactFormat; -import static org.opensearch.sql.protocol.response.format.ErrorFormatter.compactJsonify; -import static org.opensearch.sql.protocol.response.format.ErrorFormatter.prettyFormat; -import static org.opensearch.sql.protocol.response.format.ErrorFormatter.prettyJsonify; -import static org.opensearch.sql.protocol.response.format.JsonResponseFormatter.Style.PRETTY; - -import java.security.AccessController; -import java.security.PrivilegedAction; -import lombok.RequiredArgsConstructor; - -/** - * Abstract class for all JSON formatter. - * - * @param response generic type which could be DQL or DML response - */ -@RequiredArgsConstructor -public abstract class JsonResponseFormatter implements ResponseFormatter { - - /** JSON format styles: pretty format or compact format without indent and space. */ - public enum Style { - PRETTY, - COMPACT - } - - /** JSON format style. */ - private final Style style; - - public static final String CONTENT_TYPE = "application/json; charset=UTF-8"; - - @Override - public String format(R response) { - return jsonify(buildJsonObject(response)); - } - - @Override - public String format(Throwable t) { - return AccessController.doPrivileged( - (PrivilegedAction) () -> (style == PRETTY) ? prettyFormat(t) : compactFormat(t)); - } - - public String contentType() { - return CONTENT_TYPE; - } - - /** - * Build JSON object to generate response json string. - * - * @param response response - * @return json object for response - */ - protected abstract Object buildJsonObject(R response); - - protected String jsonify(Object jsonObject) { - return AccessController.doPrivileged( - (PrivilegedAction) - () -> (style == PRETTY) ? prettyJsonify(jsonObject) : compactJsonify(jsonObject)); - } -} diff --git a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/RawResponseFormatter.java b/protocol/src/main/java/org/opensearch/sql/protocol/response/format/RawResponseFormatter.java index 061c2fcb8f8..78f981bbf17 100644 --- a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/RawResponseFormatter.java +++ b/protocol/src/main/java/org/opensearch/sql/protocol/response/format/RawResponseFormatter.java @@ -5,6 +5,8 @@ package org.opensearch.sql.protocol.response.format; +import org.opensearch.commons.ppl.format.ErrorFormatter; +import org.opensearch.commons.ppl.format.ResponseFormatter; import org.opensearch.sql.protocol.response.QueryResult; /** Response formatter to format response to raw format. */ diff --git a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/ResponseFormatter.java b/protocol/src/main/java/org/opensearch/sql/protocol/response/format/ResponseFormatter.java deleted file mode 100644 index 6738cfbc9c2..00000000000 --- a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/ResponseFormatter.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright OpenSearch Contributors - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.opensearch.sql.protocol.response.format; - -/** Response formatter to format response to different formats. */ -public interface ResponseFormatter { - - /** - * Format response into string in expected format. - * - * @param response response - * @return string with response content formatted - */ - String format(R response); - - /** - * Format an exception into string. - * - * @param t exception occurred - * @return string with exception content formatted - */ - String format(Throwable t); - - /** - * Getter for the content type header of the response. - * - * @return string - */ - String contentType(); -} diff --git a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/SimpleJsonResponseFormatter.java b/protocol/src/main/java/org/opensearch/sql/protocol/response/format/SimpleJsonResponseFormatter.java index c00174dc9fa..93026d02e22 100644 --- a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/SimpleJsonResponseFormatter.java +++ b/protocol/src/main/java/org/opensearch/sql/protocol/response/format/SimpleJsonResponseFormatter.java @@ -10,6 +10,7 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Singular; +import org.opensearch.commons.ppl.format.JsonResponseFormatter; import org.opensearch.sql.protocol.response.QueryResult; /** diff --git a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/VisualizationResponseFormatter.java b/protocol/src/main/java/org/opensearch/sql/protocol/response/format/VisualizationResponseFormatter.java index d5d220dd8d8..3715dd033ee 100644 --- a/protocol/src/main/java/org/opensearch/sql/protocol/response/format/VisualizationResponseFormatter.java +++ b/protocol/src/main/java/org/opensearch/sql/protocol/response/format/VisualizationResponseFormatter.java @@ -13,6 +13,7 @@ import lombok.Builder; import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.opensearch.commons.ppl.format.JsonResponseFormatter; import org.opensearch.sql.common.antlr.SyntaxCheckException; import org.opensearch.sql.data.type.ExprType; import org.opensearch.sql.exception.QueryEngineException; diff --git a/protocol/src/test/java/org/opensearch/sql/protocol/response/format/CommandResponseFormatterTest.java b/protocol/src/test/java/org/opensearch/sql/protocol/response/format/CommandResponseFormatterTest.java index 8e86e47754d..f18219eed66 100644 --- a/protocol/src/test/java/org/opensearch/sql/protocol/response/format/CommandResponseFormatterTest.java +++ b/protocol/src/test/java/org/opensearch/sql/protocol/response/format/CommandResponseFormatterTest.java @@ -10,8 +10,8 @@ import static org.opensearch.sql.data.model.ExprValueUtils.tupleValue; import static org.opensearch.sql.data.type.ExprCoreType.INTEGER; import static org.opensearch.sql.data.type.ExprCoreType.STRING; -import static org.opensearch.sql.protocol.response.format.JsonResponseFormatter.CONTENT_TYPE; -import static org.opensearch.sql.protocol.response.format.JsonResponseFormatter.Style.PRETTY; +import static org.opensearch.commons.ppl.format.JsonResponseFormatter.CONTENT_TYPE; +import static org.opensearch.commons.ppl.format.JsonResponseFormatter.Style.PRETTY; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/protocol/src/test/java/org/opensearch/sql/protocol/response/format/JdbcResponseFormatterTest.java b/protocol/src/test/java/org/opensearch/sql/protocol/response/format/JdbcResponseFormatterTest.java index 16dd1590eea..bd326f3d79d 100644 --- a/protocol/src/test/java/org/opensearch/sql/protocol/response/format/JdbcResponseFormatterTest.java +++ b/protocol/src/test/java/org/opensearch/sql/protocol/response/format/JdbcResponseFormatterTest.java @@ -16,7 +16,7 @@ import static org.opensearch.sql.data.type.ExprCoreType.STRUCT; import static org.opensearch.sql.executor.ExecutionEngine.Schema; import static org.opensearch.sql.executor.ExecutionEngine.Schema.Column; -import static org.opensearch.sql.protocol.response.format.JsonResponseFormatter.Style.COMPACT; +import static org.opensearch.commons.ppl.format.JsonResponseFormatter.Style.COMPACT; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/protocol/src/test/java/org/opensearch/sql/protocol/response/format/SimpleJsonResponseFormatterTest.java b/protocol/src/test/java/org/opensearch/sql/protocol/response/format/SimpleJsonResponseFormatterTest.java index e5eb0f1ac77..18846f43327 100644 --- a/protocol/src/test/java/org/opensearch/sql/protocol/response/format/SimpleJsonResponseFormatterTest.java +++ b/protocol/src/test/java/org/opensearch/sql/protocol/response/format/SimpleJsonResponseFormatterTest.java @@ -11,8 +11,8 @@ import static org.opensearch.sql.data.model.ExprValueUtils.tupleValue; import static org.opensearch.sql.data.type.ExprCoreType.INTEGER; import static org.opensearch.sql.data.type.ExprCoreType.STRING; -import static org.opensearch.sql.protocol.response.format.JsonResponseFormatter.Style.COMPACT; -import static org.opensearch.sql.protocol.response.format.JsonResponseFormatter.Style.PRETTY; +import static org.opensearch.commons.ppl.format.JsonResponseFormatter.Style.COMPACT; +import static org.opensearch.commons.ppl.format.JsonResponseFormatter.Style.PRETTY; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; diff --git a/protocol/src/test/java/org/opensearch/sql/protocol/response/format/VisualizationResponseFormatterTest.java b/protocol/src/test/java/org/opensearch/sql/protocol/response/format/VisualizationResponseFormatterTest.java index a6fdd1e03eb..ce40f60ebff 100644 --- a/protocol/src/test/java/org/opensearch/sql/protocol/response/format/VisualizationResponseFormatterTest.java +++ b/protocol/src/test/java/org/opensearch/sql/protocol/response/format/VisualizationResponseFormatterTest.java @@ -11,13 +11,14 @@ import static org.opensearch.sql.data.model.ExprValueUtils.tupleValue; import static org.opensearch.sql.data.type.ExprCoreType.INTEGER; import static org.opensearch.sql.data.type.ExprCoreType.STRING; -import static org.opensearch.sql.protocol.response.format.JsonResponseFormatter.CONTENT_TYPE; +import static org.opensearch.commons.ppl.format.JsonResponseFormatter.CONTENT_TYPE; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.gson.JsonParser; import org.junit.jupiter.api.Test; import org.opensearch.OpenSearchException; +import org.opensearch.commons.ppl.format.JsonResponseFormatter; import org.opensearch.sql.common.antlr.SyntaxCheckException; import org.opensearch.sql.exception.SemanticCheckException; import org.opensearch.sql.executor.ExecutionEngine; diff --git a/sql/src/main/java/org/opensearch/sql/sql/domain/SQLQueryRequest.java b/sql/src/main/java/org/opensearch/sql/sql/domain/SQLQueryRequest.java index df456d4d780..49690cd56a6 100644 --- a/sql/src/main/java/org/opensearch/sql/sql/domain/SQLQueryRequest.java +++ b/sql/src/main/java/org/opensearch/sql/sql/domain/SQLQueryRequest.java @@ -18,7 +18,7 @@ import lombok.ToString; import lombok.experimental.Accessors; import org.json.JSONObject; -import org.opensearch.sql.protocol.response.format.Format; +import org.opensearch.commons.ppl.format.Format; /** SQL query request. */ @ToString diff --git a/sql/src/test/java/org/opensearch/sql/sql/domain/SQLQueryRequestTest.java b/sql/src/test/java/org/opensearch/sql/sql/domain/SQLQueryRequestTest.java index a8ac6c71c4e..905fcef4f7b 100644 --- a/sql/src/test/java/org/opensearch/sql/sql/domain/SQLQueryRequestTest.java +++ b/sql/src/test/java/org/opensearch/sql/sql/domain/SQLQueryRequestTest.java @@ -18,7 +18,6 @@ import org.junit.jupiter.api.DisplayNameGeneration; import org.junit.jupiter.api.DisplayNameGenerator; import org.junit.jupiter.api.Test; -import org.opensearch.sql.protocol.response.format.Format; @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) public class SQLQueryRequestTest {