Search in sources :

Example 1 with SUPPORTS_CREATE_TABLE

use of io.trino.testing.TestingConnectorBehavior.SUPPORTS_CREATE_TABLE in project trino by trinodb.

the class BaseConnectorTest method testQueryLoggingCount.

@Test
public void testQueryLoggingCount() {
    skipTestUnless(hasBehavior(SUPPORTS_CREATE_TABLE));
    QueryManager queryManager = getDistributedQueryRunner().getCoordinator().getQueryManager();
    executeExclusively(() -> {
        assertEventually(new Duration(1, MINUTES), () -> assertEquals(queryManager.getQueries().stream().map(BasicQueryInfo::getQueryId).map(queryManager::getFullQueryInfo).filter(info -> !info.isFinalQueryInfo()).collect(toList()), ImmutableList.of()));
        // We cannot simply get the number of completed queries as soon as all the queries are completed, because this counter may not be up-to-date at that point.
        // The completed queries counter is updated in a final query info listener, which is called eventually.
        // Therefore, here we wait until the value of this counter gets stable.
        DispatchManager dispatchManager = ((DistributedQueryRunner) getQueryRunner()).getCoordinator().getDispatchManager();
        long beforeCompletedQueriesCount = waitUntilStable(() -> dispatchManager.getStats().getCompletedQueries().getTotalCount(), new Duration(5, SECONDS));
        long beforeSubmittedQueriesCount = dispatchManager.getStats().getSubmittedQueries().getTotalCount();
        String tableName = "test_logging_count" + randomTableSuffix();
        assertUpdate("CREATE TABLE " + tableName + tableDefinitionForQueryLoggingCount());
        assertQueryReturnsEmptyResult("SELECT foo_1, foo_2_4 FROM " + tableName);
        assertUpdate("DROP TABLE " + tableName);
        assertQueryFails("SELECT * FROM " + tableName, ".*Table .* does not exist");
        // TODO: Figure out a better way of synchronization
        assertEventually(new Duration(1, MINUTES), () -> assertEquals(dispatchManager.getStats().getCompletedQueries().getTotalCount() - beforeCompletedQueriesCount, 4));
        assertEquals(dispatchManager.getStats().getSubmittedQueries().getTotalCount() - beforeSubmittedQueriesCount, 4);
    });
}
Also used : SkipException(org.testng.SkipException) SUPPORTS_MULTI_STATEMENT_WRITES(io.trino.testing.TestingConnectorBehavior.SUPPORTS_MULTI_STATEMENT_WRITES) QueryManager(io.trino.execution.QueryManager) SUPPORTS_ARRAY(io.trino.testing.TestingConnectorBehavior.SUPPORTS_ARRAY) Test(org.testng.annotations.Test) TestTable(io.trino.testing.sql.TestTable) Thread.currentThread(java.lang.Thread.currentThread) Future(java.util.concurrent.Future) DataProviders.toDataProvider(io.trino.testing.DataProviders.toDataProvider) Duration.nanosSince(io.airlift.units.Duration.nanosSince) ENGLISH(java.util.Locale.ENGLISH) Assert.assertFalse(org.testng.Assert.assertFalse) Assert.assertEquals(io.trino.testing.assertions.Assert.assertEquals) PlanPrinter.textLogicalPlan(io.trino.sql.planner.planprinter.PlanPrinter.textLogicalPlan) ImmutableList.toImmutableList(com.google.common.collect.ImmutableList.toImmutableList) MILLISECONDS(java.util.concurrent.TimeUnit.MILLISECONDS) Uninterruptibles.sleepUninterruptibly(com.google.common.util.concurrent.Uninterruptibles.sleepUninterruptibly) Collectors.joining(java.util.stream.Collectors.joining) CountDownLatch(java.util.concurrent.CountDownLatch) Stream(java.util.stream.Stream) SUPPORTS_RENAME_TABLE(io.trino.testing.TestingConnectorBehavior.SUPPORTS_RENAME_TABLE) INFORMATION_SCHEMA(io.trino.connector.informationschema.InformationSchemaTable.INFORMATION_SCHEMA) Session(io.trino.Session) Verify.verifyNotNull(com.google.common.base.Verify.verifyNotNull) PlanNodeSearcher.searchFrom(io.trino.sql.planner.optimizations.PlanNodeSearcher.searchFrom) LimitNode(io.trino.sql.planner.plan.LimitNode) SUPPORTS_RENAME_SCHEMA(io.trino.testing.TestingConnectorBehavior.SUPPORTS_RENAME_SCHEMA) Callable(java.util.concurrent.Callable) MINUTES(java.util.concurrent.TimeUnit.MINUTES) SUPPORTS_TOPN_PUSHDOWN(io.trino.testing.TestingConnectorBehavior.SUPPORTS_TOPN_PUSHDOWN) Supplier(java.util.function.Supplier) SUPPORTS_RENAME_MATERIALIZED_VIEW_ACROSS_SCHEMAS(io.trino.testing.TestingConnectorBehavior.SUPPORTS_RENAME_MATERIALIZED_VIEW_ACROSS_SCHEMAS) StatsAndCosts(io.trino.cost.StatsAndCosts) ArrayList(java.util.ArrayList) SUPPORTS_CREATE_VIEW(io.trino.testing.TestingConnectorBehavior.SUPPORTS_CREATE_VIEW) SUPPORTS_TRUNCATE(io.trino.testing.TestingConnectorBehavior.SUPPORTS_TRUNCATE) VARCHAR(io.trino.spi.type.VarcharType.VARCHAR) String.join(java.lang.String.join) UncheckedTimeoutException(com.google.common.util.concurrent.UncheckedTimeoutException) SUPPORTS_COMMENT_ON_COLUMN(io.trino.testing.TestingConnectorBehavior.SUPPORTS_COMMENT_ON_COLUMN) SUPPORTS_CREATE_SCHEMA(io.trino.testing.TestingConnectorBehavior.SUPPORTS_CREATE_SCHEMA) Language(org.intellij.lang.annotations.Language) Iterables.getOnlyElement(com.google.common.collect.Iterables.getOnlyElement) QueryInfo(io.trino.execution.QueryInfo) JoinDistributionType(io.trino.sql.planner.OptimizerConfig.JoinDistributionType) SUPPORTS_CREATE_MATERIALIZED_VIEW(io.trino.testing.TestingConnectorBehavior.SUPPORTS_CREATE_MATERIALIZED_VIEW) QualifiedObjectName(io.trino.metadata.QualifiedObjectName) ArrayDeque(java.util.ArrayDeque) SUPPORTS_ROW_LEVEL_DELETE(io.trino.testing.TestingConnectorBehavior.SUPPORTS_ROW_LEVEL_DELETE) BasicQueryInfo(io.trino.server.BasicQueryInfo) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) SUPPORTS_DROP_COLUMN(io.trino.testing.TestingConnectorBehavior.SUPPORTS_DROP_COLUMN) SUPPORTS_CREATE_TABLE_WITH_DATA(io.trino.testing.TestingConnectorBehavior.SUPPORTS_CREATE_TABLE_WITH_DATA) CompletionService(java.util.concurrent.CompletionService) Duration(io.airlift.units.Duration) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) TestTable.randomTableSuffix(io.trino.testing.sql.TestTable.randomTableSuffix) SUPPORTS_CREATE_TABLE(io.trino.testing.TestingConnectorBehavior.SUPPORTS_CREATE_TABLE) CyclicBarrier(java.util.concurrent.CyclicBarrier) ImmutableSet(com.google.common.collect.ImmutableSet) SUPPORTS_RENAME_COLUMN(io.trino.testing.TestingConnectorBehavior.SUPPORTS_RENAME_COLUMN) Collections.nCopies(java.util.Collections.nCopies) SUPPORTS_RENAME_TABLE_ACROSS_SCHEMAS(io.trino.testing.TestingConnectorBehavior.SUPPORTS_RENAME_TABLE_ACROSS_SCHEMAS) String.format(java.lang.String.format) Preconditions.checkState(com.google.common.base.Preconditions.checkState) SUPPORTS_DELETE(io.trino.testing.TestingConnectorBehavior.SUPPORTS_DELETE) List(java.util.List) SUPPORTS_INSERT(io.trino.testing.TestingConnectorBehavior.SUPPORTS_INSERT) Optional(java.util.Optional) Pattern(java.util.regex.Pattern) ExecutorCompletionService(java.util.concurrent.ExecutorCompletionService) IntStream(java.util.stream.IntStream) DataProvider(org.testng.annotations.DataProvider) Assert.assertNull(org.testng.Assert.assertNull) Stopwatch(com.google.common.base.Stopwatch) Deque(java.util.Deque) QueryAssertions.getTrinoExceptionCause(io.trino.testing.QueryAssertions.getTrinoExceptionCause) ImmutableList(com.google.common.collect.ImmutableList) Assertions.assertThatThrownBy(org.assertj.core.api.Assertions.assertThatThrownBy) SUPPORTS_UPDATE(io.trino.testing.TestingConnectorBehavior.SUPPORTS_UPDATE) Objects.requireNonNull(java.util.Objects.requireNonNull) ExecutorService(java.util.concurrent.ExecutorService) DispatchManager(io.trino.dispatcher.DispatchManager) Assert.fail(org.testng.Assert.fail) SUPPORTS_RENAME_MATERIALIZED_VIEW(io.trino.testing.TestingConnectorBehavior.SUPPORTS_RENAME_MATERIALIZED_VIEW) MoreFutures.tryGetFutureValue(io.airlift.concurrent.MoreFutures.tryGetFutureValue) Executors.newFixedThreadPool(java.util.concurrent.Executors.newFixedThreadPool) FunctionManager(io.trino.metadata.FunctionManager) SUPPORTS_NEGATIVE_DATE(io.trino.testing.TestingConnectorBehavior.SUPPORTS_NEGATIVE_DATE) Consumer(java.util.function.Consumer) SUPPORTS_ADD_COLUMN(io.trino.testing.TestingConnectorBehavior.SUPPORTS_ADD_COLUMN) QueryAssertions.assertContains(io.trino.testing.QueryAssertions.assertContains) Collectors.toList(java.util.stream.Collectors.toList) IGNORE_STATS_CALCULATOR_FAILURES(io.trino.SystemSessionProperties.IGNORE_STATS_CALCULATOR_FAILURES) Assert.assertEventually(io.trino.testing.assertions.Assert.assertEventually) SUPPORTS_COMMENT_ON_TABLE(io.trino.testing.TestingConnectorBehavior.SUPPORTS_COMMENT_ON_TABLE) Metadata(io.trino.metadata.Metadata) Assert.assertTrue(org.testng.Assert.assertTrue) Plan(io.trino.sql.planner.Plan) SUPPORTS_NOT_NULL_CONSTRAINT(io.trino.testing.TestingConnectorBehavior.SUPPORTS_NOT_NULL_CONSTRAINT) SECONDS(java.util.concurrent.TimeUnit.SECONDS) MaterializedResult.resultBuilder(io.trino.testing.MaterializedResult.resultBuilder) DispatchManager(io.trino.dispatcher.DispatchManager) QueryManager(io.trino.execution.QueryManager) Duration(io.airlift.units.Duration) Test(org.testng.annotations.Test)

Example 2 with SUPPORTS_CREATE_TABLE

use of io.trino.testing.TestingConnectorBehavior.SUPPORTS_CREATE_TABLE in project trino by trinodb.

the class BaseJdbcConnectorTest method testCountDistinctWithStringTypes.

@Test
public void testCountDistinctWithStringTypes() {
    if (!(hasBehavior(SUPPORTS_CREATE_TABLE) && hasBehavior(SUPPORTS_INSERT))) {
        throw new SkipException("Unable to CREATE TABLE to test count distinct");
    }
    List<String> rows = Stream.of("a", "b", "A", "B", " a ", "a", "b", " b ", "ą").map(value -> format("'%1$s', '%1$s'", value)).collect(toImmutableList());
    try (TestTable testTable = new TestTable(getQueryRunner()::execute, "distinct_strings", "(t_char CHAR(5), t_varchar VARCHAR(5))", rows)) {
        if (!(hasBehavior(SUPPORTS_AGGREGATION_PUSHDOWN) && hasBehavior(SUPPORTS_PREDICATE_PUSHDOWN_WITH_VARCHAR_INEQUALITY))) {
            // disabling hash generation to prevent extra projections in the plan which make it hard to write matchers for isNotFullyPushedDown
            Session optimizeHashGenerationDisabled = Session.builder(getSession()).setSystemProperty("optimize_hash_generation", "false").build();
            // It is not captured in the `isNotFullyPushedDown` calls (can't do that) but depending on the connector in use some aggregations
            // still can be pushed down to connector.
            // If `SUPPORTS_AGGREGATION_PUSHDOWN == false` but `SUPPORTS_PREDICATE_PUSHDOWN_WITH_VARCHAR_INEQUALITY == true` the DISTINCT part of aggregation
            // will still be pushed down to connector as `GROUP BY`. Only the `count` part will remain on the Trino side.
            // If `SUPPORTS_PREDICATE_PUSHDOWN_WITH_VARCHAR_INEQUALITY == false` both parts of aggregation will be executed on Trino side.
            assertThat(query(optimizeHashGenerationDisabled, "SELECT count(DISTINCT t_varchar) FROM " + testTable.getName())).matches("VALUES BIGINT '7'").isNotFullyPushedDown(AggregationNode.class);
            assertThat(query(optimizeHashGenerationDisabled, "SELECT count(DISTINCT t_char) FROM " + testTable.getName())).matches("VALUES BIGINT '7'").isNotFullyPushedDown(AggregationNode.class);
            assertThat(query("SELECT count(DISTINCT t_char), count(DISTINCT t_varchar) FROM " + testTable.getName())).matches("VALUES (BIGINT '7', BIGINT '7')").isNotFullyPushedDown(MarkDistinctNode.class, ExchangeNode.class, ExchangeNode.class, ProjectNode.class);
        } else {
            // Single count(DISTINCT ...) can be pushed even down even if SUPPORTS_AGGREGATION_PUSHDOWN_COUNT_DISTINCT == false as GROUP BY
            assertThat(query("SELECT count(DISTINCT t_varchar) FROM " + testTable.getName())).matches("VALUES BIGINT '7'").isFullyPushedDown();
            // Single count(DISTINCT ...) can be pushed down even if SUPPORTS_AGGREGATION_PUSHDOWN_COUNT_DISTINCT == false as GROUP BY
            assertThat(query("SELECT count(DISTINCT t_char) FROM " + testTable.getName())).matches("VALUES BIGINT '7'").isFullyPushedDown();
            assertConditionallyPushedDown(getSession(), "SELECT count(DISTINCT t_char), count(DISTINCT t_varchar) FROM " + testTable.getName(), hasBehavior(SUPPORTS_AGGREGATION_PUSHDOWN_COUNT_DISTINCT), node(MarkDistinctNode.class, node(ExchangeNode.class, node(ExchangeNode.class, node(ProjectNode.class, node(TableScanNode.class))))));
        }
    }
}
Also used : SkipException(org.testng.SkipException) QueryId(io.trino.spi.QueryId) SUPPORTS_JOIN_PUSHDOWN_WITH_VARCHAR_INEQUALITY(io.trino.testing.TestingConnectorBehavior.SUPPORTS_JOIN_PUSHDOWN_WITH_VARCHAR_INEQUALITY) SUPPORTS_ROW_LEVEL_DELETE(io.trino.testing.TestingConnectorBehavior.SUPPORTS_ROW_LEVEL_DELETE) SUPPORTS_AGGREGATION_PUSHDOWN_VARIANCE(io.trino.testing.TestingConnectorBehavior.SUPPORTS_AGGREGATION_PUSHDOWN_VARIANCE) MaterializedResult(io.trino.testing.MaterializedResult) SUPPORTS_AGGREGATION_PUSHDOWN_COVARIANCE(io.trino.testing.TestingConnectorBehavior.SUPPORTS_AGGREGATION_PUSHDOWN_COVARIANCE) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) PlanMatchPattern(io.trino.sql.planner.assertions.PlanMatchPattern) Test(org.testng.annotations.Test) TestTable(io.trino.testing.sql.TestTable) FilterNode(io.trino.sql.planner.plan.FilterNode) Duration(io.airlift.units.Duration) Future(java.util.concurrent.Future) PlanMatchPattern.exchange(io.trino.sql.planner.assertions.PlanMatchPattern.exchange) SUPPORTS_JOIN_PUSHDOWN_WITH_FULL_JOIN(io.trino.testing.TestingConnectorBehavior.SUPPORTS_JOIN_PUSHDOWN_WITH_FULL_JOIN) TestingConnectorBehavior(io.trino.testing.TestingConnectorBehavior) SUPPORTS_AGGREGATION_PUSHDOWN_COUNT_DISTINCT(io.trino.testing.TestingConnectorBehavior.SUPPORTS_AGGREGATION_PUSHDOWN_COUNT_DISTINCT) SqlExecutor(io.trino.testing.sql.SqlExecutor) JoinNode(io.trino.sql.planner.plan.JoinNode) ENGLISH(java.util.Locale.ENGLISH) TableScanNode(io.trino.sql.planner.plan.TableScanNode) SUPPORTS_CANCELLATION(io.trino.testing.TestingConnectorBehavior.SUPPORTS_CANCELLATION) SUPPORTS_JOIN_PUSHDOWN_WITH_DISTINCT_FROM(io.trino.testing.TestingConnectorBehavior.SUPPORTS_JOIN_PUSHDOWN_WITH_DISTINCT_FROM) SUPPORTS_CREATE_TABLE(io.trino.testing.TestingConnectorBehavior.SUPPORTS_CREATE_TABLE) MarkDistinctNode(io.trino.sql.planner.plan.MarkDistinctNode) TestView(io.trino.testing.sql.TestView) ImmutableList.toImmutableList(com.google.common.collect.ImmutableList.toImmutableList) UUID(java.util.UUID) String.format(java.lang.String.format) Preconditions.checkState(com.google.common.base.Preconditions.checkState) List(java.util.List) Stream(java.util.stream.Stream) PlanMatchPattern.anyTree(io.trino.sql.planner.assertions.PlanMatchPattern.anyTree) SUPPORTS_AGGREGATION_PUSHDOWN(io.trino.testing.TestingConnectorBehavior.SUPPORTS_AGGREGATION_PUSHDOWN) SUPPORTS_INSERT(io.trino.testing.TestingConnectorBehavior.SUPPORTS_INSERT) USE_MARK_DISTINCT(io.trino.SystemSessionProperties.USE_MARK_DISTINCT) SUPPORTS_PREDICATE_EXPRESSION_PUSHDOWN_WITH_LIKE(io.trino.testing.TestingConnectorBehavior.SUPPORTS_PREDICATE_EXPRESSION_PUSHDOWN_WITH_LIKE) ExchangeNode(io.trino.sql.planner.plan.ExchangeNode) Session(io.trino.Session) JoinCondition(io.trino.spi.connector.JoinCondition) DataProvider(org.testng.annotations.DataProvider) SUPPORTS_AGGREGATION_PUSHDOWN_STDDEV(io.trino.testing.TestingConnectorBehavior.SUPPORTS_AGGREGATION_PUSHDOWN_STDDEV) LimitNode(io.trino.sql.planner.plan.LimitNode) SUPPORTS_JOIN_PUSHDOWN_WITH_VARCHAR_EQUALITY(io.trino.testing.TestingConnectorBehavior.SUPPORTS_JOIN_PUSHDOWN_WITH_VARCHAR_EQUALITY) SUPPORTS_PREDICATE_PUSHDOWN_WITH_VARCHAR_INEQUALITY(io.trino.testing.TestingConnectorBehavior.SUPPORTS_PREDICATE_PUSHDOWN_WITH_VARCHAR_INEQUALITY) MINUTES(java.util.concurrent.TimeUnit.MINUTES) SUPPORTS_TOPN_PUSHDOWN(io.trino.testing.TestingConnectorBehavior.SUPPORTS_TOPN_PUSHDOWN) ArrayList(java.util.ArrayList) ImmutableList(com.google.common.collect.ImmutableList) Assertions.assertThatThrownBy(org.assertj.core.api.Assertions.assertThatThrownBy) Verify.verify(com.google.common.base.Verify.verify) SUPPORTS_LIMIT_PUSHDOWN(io.trino.testing.TestingConnectorBehavior.SUPPORTS_LIMIT_PUSHDOWN) Threads.daemonThreadsNamed(io.airlift.concurrent.Threads.daemonThreadsNamed) ThreadLocalRandom(java.util.concurrent.ThreadLocalRandom) AggregationNode(io.trino.sql.planner.plan.AggregationNode) ProjectNode(io.trino.sql.planner.plan.ProjectNode) ExecutorService(java.util.concurrent.ExecutorService) SUPPORTS_PREDICATE_PUSHDOWN_WITH_VARCHAR_EQUALITY(io.trino.testing.TestingConnectorBehavior.SUPPORTS_PREDICATE_PUSHDOWN_WITH_VARCHAR_EQUALITY) AfterClass(org.testng.annotations.AfterClass) MoreCollectors.toOptional(com.google.common.collect.MoreCollectors.toOptional) SUPPORTS_TOPN_PUSHDOWN_WITH_VARCHAR(io.trino.testing.TestingConnectorBehavior.SUPPORTS_TOPN_PUSHDOWN_WITH_VARCHAR) CANCELLED(io.trino.plugin.jdbc.RemoteDatabaseEvent.Status.CANCELLED) Language(org.intellij.lang.annotations.Language) RUNNING(io.trino.plugin.jdbc.RemoteDatabaseEvent.Status.RUNNING) TopNNode(io.trino.sql.planner.plan.TopNNode) SortOrder(io.trino.spi.connector.SortOrder) BaseConnectorTest(io.trino.testing.BaseConnectorTest) PlanMatchPattern.node(io.trino.sql.planner.assertions.PlanMatchPattern.node) SUPPORTS_AGGREGATION_PUSHDOWN_CORRELATION(io.trino.testing.TestingConnectorBehavior.SUPPORTS_AGGREGATION_PUSHDOWN_CORRELATION) Assert.assertEventually(io.trino.testing.assertions.Assert.assertEventually) Executors.newCachedThreadPool(java.util.concurrent.Executors.newCachedThreadPool) QueryAssert(io.trino.sql.query.QueryAssertions.QueryAssert) SUPPORTS_AGGREGATION_PUSHDOWN_REGRESSION(io.trino.testing.TestingConnectorBehavior.SUPPORTS_AGGREGATION_PUSHDOWN_REGRESSION) SUPPORTS_JOIN_PUSHDOWN(io.trino.testing.TestingConnectorBehavior.SUPPORTS_JOIN_PUSHDOWN) JOIN_PUSHDOWN_ENABLED(io.trino.plugin.jdbc.JdbcMetadataSessionProperties.JOIN_PUSHDOWN_ENABLED) MarkDistinctNode(io.trino.sql.planner.plan.MarkDistinctNode) TableScanNode(io.trino.sql.planner.plan.TableScanNode) ExchangeNode(io.trino.sql.planner.plan.ExchangeNode) SkipException(org.testng.SkipException) TestTable(io.trino.testing.sql.TestTable) Session(io.trino.Session) Test(org.testng.annotations.Test) BaseConnectorTest(io.trino.testing.BaseConnectorTest)

Aggregations

Preconditions.checkState (com.google.common.base.Preconditions.checkState)2 ImmutableList (com.google.common.collect.ImmutableList)2 ImmutableList.toImmutableList (com.google.common.collect.ImmutableList.toImmutableList)2 Duration (io.airlift.units.Duration)2 Session (io.trino.Session)2 LimitNode (io.trino.sql.planner.plan.LimitNode)2 Stopwatch (com.google.common.base.Stopwatch)1 Verify.verify (com.google.common.base.Verify.verify)1 Verify.verifyNotNull (com.google.common.base.Verify.verifyNotNull)1 ImmutableSet (com.google.common.collect.ImmutableSet)1 Iterables.getOnlyElement (com.google.common.collect.Iterables.getOnlyElement)1 MoreCollectors.toOptional (com.google.common.collect.MoreCollectors.toOptional)1 UncheckedTimeoutException (com.google.common.util.concurrent.UncheckedTimeoutException)1 Uninterruptibles.sleepUninterruptibly (com.google.common.util.concurrent.Uninterruptibles.sleepUninterruptibly)1 MoreFutures.tryGetFutureValue (io.airlift.concurrent.MoreFutures.tryGetFutureValue)1 Threads.daemonThreadsNamed (io.airlift.concurrent.Threads.daemonThreadsNamed)1 Duration.nanosSince (io.airlift.units.Duration.nanosSince)1 IGNORE_STATS_CALCULATOR_FAILURES (io.trino.SystemSessionProperties.IGNORE_STATS_CALCULATOR_FAILURES)1 USE_MARK_DISTINCT (io.trino.SystemSessionProperties.USE_MARK_DISTINCT)1 INFORMATION_SCHEMA (io.trino.connector.informationschema.InformationSchemaTable.INFORMATION_SCHEMA)1