Add initial explain.

This commit is contained in:
Nikolai Kochetov 2020-06-22 17:37:42 +03:00
parent 8b2232dc5e
commit e1481ccfc2
21 changed files with 1608 additions and 126 deletions

View File

@ -12,14 +12,20 @@
#include <Parsers/ASTExplainQuery.h> #include <Parsers/ASTExplainQuery.h>
#include <Parsers/ASTTablesInSelectQuery.h> #include <Parsers/ASTTablesInSelectQuery.h>
#include <Parsers/ASTSelectQuery.h> #include <Parsers/ASTSelectQuery.h>
#include <IO/WriteBufferFromOStream.h>
#include <Storages/StorageView.h> #include <Storages/StorageView.h>
#include <sstream> #include <sstream>
#include <Processors/QueryPlan/QueryPlan.h>
namespace DB namespace DB
{ {
namespace ErrorCodes
{
extern const int INCORRECT_QUERY;
}
namespace namespace
{ {
struct ExplainAnalyzedSyntaxMatcher struct ExplainAnalyzedSyntaxMatcher
@ -79,10 +85,31 @@ Block InterpreterExplainQuery::getSampleBlock()
return block; return block;
} }
static void fillColumn(IColumn & column, const std::string & str)
{
size_t start = 0;
size_t end = 0;
size_t size = str.size();
while (end < size)
{
if (str[end] == '\n')
{
column.insertData(str.data() + start, end - start);
start = end + 1;
}
++end;
}
if (start < end)
column.insertData(str.data() + start, end - start);
}
BlockInputStreamPtr InterpreterExplainQuery::executeImpl() BlockInputStreamPtr InterpreterExplainQuery::executeImpl()
{ {
const auto & ast = query->as<ASTExplainQuery &>(); const auto & ast = query->as<ASTExplainQuery &>();
Block sample_block = getSampleBlock(); Block sample_block = getSampleBlock();
MutableColumns res_columns = sample_block.cloneEmptyColumns(); MutableColumns res_columns = sample_block.cloneEmptyColumns();
@ -99,8 +126,21 @@ BlockInputStreamPtr InterpreterExplainQuery::executeImpl()
ast.children.at(0)->format(IAST::FormatSettings(ss, false)); ast.children.at(0)->format(IAST::FormatSettings(ss, false));
} }
else if (ast.getKind() == ASTExplainQuery::QueryPlan)
{
if (!dynamic_cast<const ASTSelectWithUnionQuery *>(ast.getExplainedQuery().get()))
throw Exception("Only SELECT is supported for EXPLAIN query", ErrorCodes::INCORRECT_QUERY);
res_columns[0]->insert(ss.str()); QueryPlan plan;
InterpreterSelectWithUnionQuery interpreter(ast.getExplainedQuery(), context, SelectQueryOptions());
interpreter.buildQueryPlan(plan);
WriteBufferFromOStream buffer(ss);
plan.explain(buffer);
}
fillColumn(*res_columns[0], ss.str());
return std::make_shared<OneBlockInputStream>(sample_block.cloneWithColumns(std::move(res_columns))); return std::make_shared<OneBlockInputStream>(sample_block.cloneWithColumns(std::move(res_columns)));
} }

View File

@ -968,7 +968,7 @@ void InterpreterSelectQuery::executeImpl(QueryPlan & query_plan, const BlockInpu
*/ */
if (!expressions.first_stage && !expressions.need_aggregate && !(query.group_by_with_totals && !aggregate_final)) if (!expressions.first_stage && !expressions.need_aggregate && !(query.group_by_with_totals && !aggregate_final))
executeMergeSorted(query_plan, "before ORDER BY"); executeMergeSorted(query_plan, "for ORDER BY");
else /// Otherwise, just sort. else /// Otherwise, just sort.
executeOrder(query_plan, query_info.input_order_info); executeOrder(query_plan, query_info.input_order_info);
} }
@ -1596,7 +1596,7 @@ void InterpreterSelectQuery::executeOrder(QueryPlan & query_plan, InputOrderInfo
limit, limit,
SizeLimits(settings.max_rows_to_sort, settings.max_bytes_to_sort, settings.sort_overflow_mode)); SizeLimits(settings.max_rows_to_sort, settings.max_bytes_to_sort, settings.sort_overflow_mode));
partial_sorting->setStepDescription("Sort each block before ORDER BY"); partial_sorting->setStepDescription("Sort each block for ORDER BY");
query_plan.addStep(std::move(partial_sorting)); query_plan.addStep(std::move(partial_sorting));
/// Merge the sorted blocks. /// Merge the sorted blocks.
@ -1607,11 +1607,11 @@ void InterpreterSelectQuery::executeOrder(QueryPlan & query_plan, InputOrderInfo
settings.max_bytes_before_external_sort, context->getTemporaryVolume(), settings.max_bytes_before_external_sort, context->getTemporaryVolume(),
settings.min_free_disk_space_for_temporary_data); settings.min_free_disk_space_for_temporary_data);
merge_sorting_step->setStepDescription("Merge sorted blocks before ORDER BY"); merge_sorting_step->setStepDescription("Merge sorted blocks for ORDER BY");
query_plan.addStep(std::move(merge_sorting_step)); query_plan.addStep(std::move(merge_sorting_step));
/// If there are several streams, we merge them into one /// If there are several streams, we merge them into one
executeMergeSorted(query_plan, output_order_descr, limit, "before ORDER BY"); executeMergeSorted(query_plan, output_order_descr, limit, "for ORDER BY");
} }

View File

@ -35,7 +35,7 @@ public:
return res; return res;
} }
ASTPtr & getExplainedQuery() { return children.at(0); } const ASTPtr & getExplainedQuery() const { return children.at(0); }
protected: protected:
void formatQueryImpl(const FormatSettings & settings, FormatState & state, FormatStateStacked frame) const override void formatQueryImpl(const FormatSettings & settings, FormatState & state, FormatStateStacked frame) const override

View File

@ -41,7 +41,7 @@ bool ParserExplainQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expected
auto explain_query = std::make_shared<ASTExplainQuery>(kind, old_syntax); auto explain_query = std::make_shared<ASTExplainQuery>(kind, old_syntax);
ParserSelectWithUnionQuery select_p; ParserSelectWithUnionQuery select_p;
if (!select_p.parse(pos, explain_query->getExplainedQuery(), expected)) if (!select_p.parse(pos, explain_query->children.at(0), expected))
return false; return false;
node = std::move(explain_query); node = std::move(explain_query);

View File

@ -109,6 +109,17 @@ bool ParserQueryWithOutput::parseImpl(Pos & pos, ASTPtr & node, Expected & expec
query_with_output.children.push_back(query_with_output.settings_ast); query_with_output.children.push_back(query_with_output.settings_ast);
} }
if (auto * ast = query->as<ASTExplainQuery>())
{
/// Set default format TSV, because output is a single string column.
if (!ast->format)
{
ast->format = std::make_shared<ASTIdentifier>("TSV");
ast->children.push_back(ast->format);
}
}
node = std::move(query);
return true; return true;
} }

View File

@ -1,6 +1,7 @@
#include <Processors/QueryPlan/QueryPlan.h> #include <Processors/QueryPlan/QueryPlan.h>
#include <Processors/QueryPlan/IQueryPlanStep.h> #include <Processors/QueryPlan/IQueryPlanStep.h>
#include <Processors/QueryPipeline.h> #include <Processors/QueryPipeline.h>
#include <IO/WriteBuffer.h>
#include <stack> #include <stack>
namespace DB namespace DB
@ -11,6 +12,7 @@ namespace ErrorCodes
extern const int LOGICAL_ERROR; extern const int LOGICAL_ERROR;
} }
QueryPlan::QueryPlan() = default;
QueryPlan::~QueryPlan() = default; QueryPlan::~QueryPlan() = default;
void QueryPlan::checkInitialized() const void QueryPlan::checkInitialized() const
@ -173,4 +175,55 @@ void QueryPlan::addInterpreterContext(std::shared_ptr<Context> context)
interpreter_context.emplace_back(std::move(context)); interpreter_context.emplace_back(std::move(context));
} }
void QueryPlan::explain(WriteBuffer & buffer)
{
checkInitialized();
size_t ident = 2;
struct Frame
{
Node * node;
bool is_description_printed = false;
size_t next_child = 0;
};
std::stack<Frame> stack;
stack.push(Frame{.node = root});
while (!stack.empty())
{
auto & frame = stack.top();
if (!frame.is_description_printed)
{
std::string prefix((stack.size() - 1) * ident, ' ');
buffer.write(prefix.data(), prefix.size());
auto name = frame.node->step->getName();
buffer.write(name.data(), name.size());
auto description = frame.node->step->getStepDescription();
if (!description.empty())
{
buffer.write(" (", 2);
buffer.write(description.data(), description.size());
buffer.write(')');
}
buffer.write('\n');
frame.is_description_printed = true;
}
if (frame.next_child < frame.node->children.size())
{
stack.push(Frame{frame.node->children[frame.next_child]});
++frame.next_child;
}
else
stack.pop();
}
}
} }

View File

@ -15,11 +15,13 @@ class QueryPipeline;
using QueryPipelinePtr = std::unique_ptr<QueryPipeline>; using QueryPipelinePtr = std::unique_ptr<QueryPipeline>;
class Context; class Context;
class WriteBuffer;
/// A tree of query steps. /// A tree of query steps.
class QueryPlan class QueryPlan
{ {
public: public:
QueryPlan();
~QueryPlan(); ~QueryPlan();
void unitePlans(QueryPlanStepPtr step, std::vector<QueryPlan> plans); void unitePlans(QueryPlanStepPtr step, std::vector<QueryPlan> plans);
@ -31,6 +33,8 @@ public:
QueryPipelinePtr buildQueryPipeline(); QueryPipelinePtr buildQueryPipeline();
void explain(WriteBuffer & buffer);
/// Set upper limit for the recommend number of threads. Will be applied to the newly-created pipelines. /// Set upper limit for the recommend number of threads. Will be applied to the newly-created pipelines.
/// TODO: make it in a better way. /// TODO: make it in a better way.
void setMaxThreads(size_t max_threads_) { max_threads = max_threads_; } void setMaxThreads(size_t max_threads_) { max_threads = max_threads_; }

View File

@ -4,61 +4,582 @@
1 1
2000-01-01 1 test string 1 1 2000-01-01 1 test string 1 1
-------Forbid push down------- -------Forbid push down-------
SELECT count()\nFROM \n(\n SELECT \n [number] AS a,\n [number * 2] AS b\n FROM system.numbers\n LIMIT 1\n) AS t\nARRAY JOIN \n a,\n b\nWHERE NOT ignore(a + b) SELECT count()
FROM
(
SELECT
[number] AS a,
[number * 2] AS b
FROM system.numbers
LIMIT 1
) AS t
ARRAY JOIN
a,
b
WHERE NOT ignore(a + b)
1 1
SELECT \n a,\n b\nFROM \n(\n SELECT 1 AS a\n)\nANY LEFT JOIN \n(\n SELECT \n 1 AS a,\n 1 AS b\n) USING (a)\nWHERE b = 0 SELECT
SELECT \n a,\n b\nFROM \n(\n SELECT \n 1 AS a,\n 1 AS b\n)\nANY RIGHT JOIN \n(\n SELECT 1 AS a\n) USING (a)\nWHERE b = 0 a,
SELECT \n a,\n b\nFROM \n(\n SELECT 1 AS a\n)\nANY FULL OUTER JOIN \n(\n SELECT \n 1 AS a,\n 1 AS b\n) USING (a)\nWHERE b = 0 b
SELECT \n a,\n b\nFROM \n(\n SELECT \n 1 AS a,\n 1 AS b\n)\nANY FULL OUTER JOIN \n(\n SELECT 1 AS a\n) USING (a)\nWHERE b = 0 FROM
(
SELECT 1 AS a
)
ANY LEFT JOIN
(
SELECT
1 AS a,
1 AS b
) USING (a)
WHERE b = 0
SELECT
a,
b
FROM
(
SELECT
1 AS a,
1 AS b
)
ANY RIGHT JOIN
(
SELECT 1 AS a
) USING (a)
WHERE b = 0
SELECT
a,
b
FROM
(
SELECT 1 AS a
)
ANY FULL OUTER JOIN
(
SELECT
1 AS a,
1 AS b
) USING (a)
WHERE b = 0
SELECT
a,
b
FROM
(
SELECT
1 AS a,
1 AS b
)
ANY FULL OUTER JOIN
(
SELECT 1 AS a
) USING (a)
WHERE b = 0
-------Need push down------- -------Need push down-------
SELECT toString(value) AS value\nFROM \n(\n SELECT 1 AS value\n) SELECT toString(value) AS value
FROM
(
SELECT 1 AS value
)
1 1
SELECT id\nFROM \n(\n SELECT 1 AS id\n UNION ALL\n SELECT 2 AS `--predicate_optimizer_0`\n WHERE 0\n)\nWHERE id = 1 SELECT id
FROM
(
SELECT 1 AS id
UNION ALL
SELECT 2 AS `--predicate_optimizer_0`
WHERE 0
)
WHERE id = 1
1 1
SELECT id\nFROM \n(\n SELECT arrayJoin([1, 2, 3]) AS id\n WHERE id = 1\n)\nWHERE id = 1 SELECT id
FROM
(
SELECT arrayJoin([1, 2, 3]) AS id
WHERE id = 1
)
WHERE id = 1
1 1
SELECT id\nFROM \n(\n SELECT arrayJoin([1, 2, 3]) AS id\n WHERE id = 1\n)\nWHERE id = 1 SELECT id
FROM
(
SELECT arrayJoin([1, 2, 3]) AS id
WHERE id = 1
)
WHERE id = 1
1 1
SELECT \n id,\n subquery\nFROM \n(\n SELECT \n 1 AS id,\n CAST(1, \'UInt8\') AS subquery\n) SELECT
id,
subquery
FROM
(
SELECT
1 AS id,
CAST(1, \'UInt8\') AS subquery
)
1 1 1 1
SELECT \n a,\n b\nFROM \n(\n SELECT \n toUInt64(sum(id) AS b) AS a,\n b\n FROM test_00597\n HAVING a = 3\n)\nWHERE a = 3 SELECT
a,
b
FROM
(
SELECT
toUInt64(sum(id) AS b) AS a,
b
FROM test_00597
HAVING a = 3
)
WHERE a = 3
3 3 3 3
SELECT \n date,\n id,\n name,\n value\nFROM \n(\n SELECT \n date,\n name,\n value,\n min(id) AS id\n FROM test_00597\n GROUP BY \n date,\n name,\n value\n HAVING id = 1\n)\nWHERE id = 1 SELECT
date,
id,
name,
value
FROM
(
SELECT
date,
name,
value,
min(id) AS id
FROM test_00597
GROUP BY
date,
name,
value
HAVING id = 1
)
WHERE id = 1
2000-01-01 1 test string 1 1 2000-01-01 1 test string 1 1
SELECT \n a,\n b\nFROM \n(\n SELECT \n toUInt64(sum(id) AS b) AS a,\n b\n FROM test_00597 AS table_alias\n HAVING b = 3\n) AS outer_table_alias\nWHERE b = 3 SELECT
a,
b
FROM
(
SELECT
toUInt64(sum(id) AS b) AS a,
b
FROM test_00597 AS table_alias
HAVING b = 3
) AS outer_table_alias
WHERE b = 3
3 3 3 3
SELECT \n date,\n id,\n name,\n value\nFROM \n(\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n WHERE id = 1\n)\nWHERE id = 1 SELECT
date,
id,
name,
value
FROM
(
SELECT
date,
id,
name,
value
FROM test_00597
WHERE id = 1
)
WHERE id = 1
2000-01-01 1 test string 1 1 2000-01-01 1 test string 1 1
SELECT \n date,\n id,\n name,\n value\nFROM \n(\n SELECT \n date,\n id,\n name,\n value\n FROM \n (\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n WHERE id = 1\n )\n WHERE id = 1\n)\nWHERE id = 1 SELECT
date,
id,
name,
value
FROM
(
SELECT
date,
id,
name,
value
FROM
(
SELECT
date,
id,
name,
value
FROM test_00597
WHERE id = 1
)
WHERE id = 1
)
WHERE id = 1
2000-01-01 1 test string 1 1 2000-01-01 1 test string 1 1
SELECT \n date,\n id,\n name,\n value\nFROM \n(\n SELECT \n date,\n id,\n name,\n value\n FROM \n (\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n WHERE id = 1\n ) AS b\n WHERE id = 1\n)\nWHERE id = 1 SELECT
date,
id,
name,
value
FROM
(
SELECT
date,
id,
name,
value
FROM
(
SELECT
date,
id,
name,
value
FROM test_00597
WHERE id = 1
) AS b
WHERE id = 1
)
WHERE id = 1
2000-01-01 1 test string 1 1 2000-01-01 1 test string 1 1
SELECT \n date,\n id,\n name,\n value\nFROM \n(\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n WHERE id = 1\n)\nWHERE id = 1 SELECT
date,
id,
name,
value
FROM
(
SELECT
date,
id,
name,
value
FROM test_00597
WHERE id = 1
)
WHERE id = 1
2000-01-01 1 test string 1 1 2000-01-01 1 test string 1 1
SELECT \n date,\n id,\n name,\n value\nFROM \n(\n SELECT \n date,\n id,\n name,\n value\n FROM \n (\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n WHERE id = 1\n )\n WHERE id = 1\n)\nWHERE id = 1 SELECT
date,
id,
name,
value
FROM
(
SELECT
date,
id,
name,
value
FROM
(
SELECT
date,
id,
name,
value
FROM test_00597
WHERE id = 1
)
WHERE id = 1
)
WHERE id = 1
2000-01-01 1 test string 1 1 2000-01-01 1 test string 1 1
SELECT \n date,\n id,\n name,\n value\nFROM \n(\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n WHERE id = 1\n) AS b\nWHERE id = 1 SELECT
date,
id,
name,
value
FROM
(
SELECT
date,
id,
name,
value
FROM test_00597
WHERE id = 1
) AS b
WHERE id = 1
2000-01-01 1 test string 1 1 2000-01-01 1 test string 1 1
SELECT \n date,\n id,\n name,\n value\nFROM \n(\n SELECT \n date,\n id,\n name,\n value\n FROM \n (\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n WHERE id = 1\n ) AS a\n WHERE id = 1\n) AS b\nWHERE id = 1 SELECT
date,
id,
name,
value
FROM
(
SELECT
date,
id,
name,
value
FROM
(
SELECT
date,
id,
name,
value
FROM test_00597
WHERE id = 1
) AS a
WHERE id = 1
) AS b
WHERE id = 1
2000-01-01 1 test string 1 1 2000-01-01 1 test string 1 1
SELECT \n id,\n date,\n value\nFROM \n(\n SELECT \n id,\n date,\n min(value) AS value\n FROM test_00597\n WHERE id = 1\n GROUP BY \n id,\n date\n)\nWHERE id = 1 SELECT
id,
date,
value
FROM
(
SELECT
id,
date,
min(value) AS value
FROM test_00597
WHERE id = 1
GROUP BY
id,
date
)
WHERE id = 1
1 2000-01-01 1 1 2000-01-01 1
SELECT \n date,\n id,\n name,\n value\nFROM \n(\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n WHERE id = 1\n UNION ALL\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n WHERE id = 1\n)\nWHERE id = 1 SELECT
date,
id,
name,
value
FROM
(
SELECT
date,
id,
name,
value
FROM test_00597
WHERE id = 1
UNION ALL
SELECT
date,
id,
name,
value
FROM test_00597
WHERE id = 1
)
WHERE id = 1
2000-01-01 1 test string 1 1 2000-01-01 1 test string 1 1
2000-01-01 1 test string 1 1 2000-01-01 1 test string 1 1
SELECT \n date,\n id,\n name,\n value,\n date,\n name,\n value\nFROM \n(\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n WHERE id = 1\n)\nANY LEFT JOIN \n(\n SELECT id\n FROM test_00597\n) USING (id)\nWHERE id = 1 SELECT
date,
id,
name,
value,
date,
name,
value
FROM
(
SELECT
date,
id,
name,
value
FROM test_00597
WHERE id = 1
)
ANY LEFT JOIN
(
SELECT id
FROM test_00597
) USING (id)
WHERE id = 1
2000-01-01 1 test string 1 1 2000-01-01 test string 1 1 2000-01-01 1 test string 1 1 2000-01-01 test string 1 1
SELECT \n id,\n date,\n name,\n value\nFROM \n(\n SELECT toInt8(1) AS id\n)\nANY LEFT JOIN \n(\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n) AS test_00597 USING (id)\nWHERE value = 1 SELECT
id,
date,
name,
value
FROM
(
SELECT toInt8(1) AS id
)
ANY LEFT JOIN
(
SELECT
date,
id,
name,
value
FROM test_00597
) AS test_00597 USING (id)
WHERE value = 1
1 2000-01-01 test string 1 1 1 2000-01-01 test string 1 1
SELECT value\nFROM \n(\n SELECT toInt8(1) AS id\n)\nANY LEFT JOIN test_00597 AS b USING (id)\nWHERE value = 1 SELECT value
FROM
(
SELECT toInt8(1) AS id
)
ANY LEFT JOIN test_00597 AS b USING (id)
WHERE value = 1
1 1
SELECT \n date,\n id,\n name,\n value\nFROM \n(\n SELECT \n date,\n id,\n name,\n value,\n date,\n name,\n value\n FROM \n (\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n WHERE id = 1\n )\n ANY LEFT JOIN \n (\n SELECT id\n FROM test_00597\n ) USING (id)\n WHERE id = 1\n)\nWHERE id = 1 SELECT
date,
id,
name,
value
FROM
(
SELECT
date,
id,
name,
value,
date,
name,
value
FROM
(
SELECT
date,
id,
name,
value
FROM test_00597
WHERE id = 1
)
ANY LEFT JOIN
(
SELECT id
FROM test_00597
) USING (id)
WHERE id = 1
)
WHERE id = 1
2000-01-01 1 test string 1 1 2000-01-01 1 test string 1 1
SELECT \n date,\n id,\n name,\n value,\n b.date,\n b.name,\n b.value\nFROM \n(\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n)\nANY LEFT JOIN \n(\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n) AS b USING (id)\nWHERE b.id = 1 SELECT
date,
id,
name,
value,
b.date,
b.name,
b.value
FROM
(
SELECT
date,
id,
name,
value
FROM test_00597
)
ANY LEFT JOIN
(
SELECT
date,
id,
name,
value
FROM test_00597
) AS b USING (id)
WHERE b.id = 1
2000-01-01 1 test string 1 1 2000-01-01 test string 1 1 2000-01-01 1 test string 1 1 2000-01-01 test string 1 1
SELECT \n id,\n date,\n name,\n value\nFROM \n(\n SELECT \n toInt8(1) AS id,\n toDate(\'2000-01-01\') AS date\n FROM system.numbers\n LIMIT 1\n)\nANY LEFT JOIN \n(\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n) AS b USING (date, id)\nWHERE b.date = toDate(\'2000-01-01\') SELECT
id,
date,
name,
value
FROM
(
SELECT
toInt8(1) AS id,
toDate(\'2000-01-01\') AS date
FROM system.numbers
LIMIT 1
)
ANY LEFT JOIN
(
SELECT
date,
id,
name,
value
FROM test_00597
) AS b USING (date, id)
WHERE b.date = toDate(\'2000-01-01\')
1 2000-01-01 test string 1 1 1 2000-01-01 test string 1 1
SELECT \n date,\n id,\n name,\n value,\n `b.date`,\n `b.id`,\n `b.name`,\n `b.value`\nFROM \n(\n SELECT \n date,\n id,\n name,\n value,\n b.date,\n b.id,\n b.name,\n b.value\n FROM \n (\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n WHERE id = 1\n ) AS a\n ANY LEFT JOIN \n (\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n ) AS b ON id = b.id\n WHERE id = 1\n)\nWHERE id = 1 SELECT
date,
id,
name,
value,
`b.date`,
`b.id`,
`b.name`,
`b.value`
FROM
(
SELECT
date,
id,
name,
value,
b.date,
b.id,
b.name,
b.value
FROM
(
SELECT
date,
id,
name,
value
FROM test_00597
WHERE id = 1
) AS a
ANY LEFT JOIN
(
SELECT
date,
id,
name,
value
FROM test_00597
) AS b ON id = b.id
WHERE id = 1
)
WHERE id = 1
2000-01-01 1 test string 1 1 2000-01-01 1 test string 1 1 2000-01-01 1 test string 1 1 2000-01-01 1 test string 1 1
SELECT \n date,\n id,\n name,\n value,\n r.date,\n r.name,\n r.value\nFROM \n(\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n)\nSEMI LEFT JOIN \n(\n SELECT \n date,\n id,\n name,\n value\n FROM \n (\n SELECT \n date,\n id,\n name,\n value\n FROM test_00597\n WHERE id = 1\n )\n WHERE id = 1\n) AS r USING (id)\nWHERE r.id = 1 SELECT
date,
id,
name,
value,
r.date,
r.name,
r.value
FROM
(
SELECT
date,
id,
name,
value
FROM test_00597
)
SEMI LEFT JOIN
(
SELECT
date,
id,
name,
value
FROM
(
SELECT
date,
id,
name,
value
FROM test_00597
WHERE id = 1
)
WHERE id = 1
) AS r USING (id)
WHERE r.id = 1
2000-01-01 1 test string 1 1 2000-01-01 test string 1 1 2000-01-01 1 test string 1 1 2000-01-01 test string 1 1

View File

@ -35,18 +35,74 @@ comma nullable
1 1 1 1 1 1 1 1
2 2 1 2 2 2 1 2
cross cross
SELECT \n a,\n b,\n t2_00826.a,\n t2_00826.b\nFROM t1_00826\nALL INNER JOIN t2_00826 ON a = t2_00826.a\nWHERE a = t2_00826.a SELECT
a,
b,
t2_00826.a,
t2_00826.b
FROM t1_00826
ALL INNER JOIN t2_00826 ON a = t2_00826.a
WHERE a = t2_00826.a
cross nullable cross nullable
SELECT \n a,\n b,\n t2_00826.a,\n t2_00826.b\nFROM t1_00826\nALL INNER JOIN t2_00826 ON a = t2_00826.a\nWHERE a = t2_00826.a SELECT
a,
b,
t2_00826.a,
t2_00826.b
FROM t1_00826
ALL INNER JOIN t2_00826 ON a = t2_00826.a
WHERE a = t2_00826.a
cross nullable vs not nullable cross nullable vs not nullable
SELECT \n a,\n b,\n t2_00826.a,\n t2_00826.b\nFROM t1_00826\nALL INNER JOIN t2_00826 ON a = t2_00826.b\nWHERE a = t2_00826.b SELECT
a,
b,
t2_00826.a,
t2_00826.b
FROM t1_00826
ALL INNER JOIN t2_00826 ON a = t2_00826.b
WHERE a = t2_00826.b
cross self cross self
SELECT \n a,\n b,\n y.a,\n y.b\nFROM t1_00826 AS x\nALL INNER JOIN t1_00826 AS y ON (a = y.a) AND (b = y.b)\nWHERE (a = y.a) AND (b = y.b) SELECT
a,
b,
y.a,
y.b
FROM t1_00826 AS x
ALL INNER JOIN t1_00826 AS y ON (a = y.a) AND (b = y.b)
WHERE (a = y.a) AND (b = y.b)
cross one table expr cross one table expr
SELECT \n a,\n b,\n t2_00826.a,\n t2_00826.b\nFROM t1_00826\nCROSS JOIN t2_00826\nWHERE a = b SELECT
a,
b,
t2_00826.a,
t2_00826.b
FROM t1_00826
CROSS JOIN t2_00826
WHERE a = b
cross multiple ands cross multiple ands
SELECT \n a,\n b,\n t2_00826.a,\n t2_00826.b\nFROM t1_00826\nALL INNER JOIN t2_00826 ON (a = t2_00826.a) AND (b = t2_00826.b)\nWHERE (a = t2_00826.a) AND (b = t2_00826.b) SELECT
a,
b,
t2_00826.a,
t2_00826.b
FROM t1_00826
ALL INNER JOIN t2_00826 ON (a = t2_00826.a) AND (b = t2_00826.b)
WHERE (a = t2_00826.a) AND (b = t2_00826.b)
cross and inside and cross and inside and
SELECT \n a,\n b,\n t2_00826.a,\n t2_00826.b\nFROM t1_00826\nALL INNER JOIN t2_00826 ON (a = t2_00826.a) AND (a = t2_00826.a) AND (a = t2_00826.a) AND (b = t2_00826.b)\nWHERE (a = t2_00826.a) AND ((a = t2_00826.a) AND ((a = t2_00826.a) AND (b = t2_00826.b))) SELECT
a,
b,
t2_00826.a,
t2_00826.b
FROM t1_00826
ALL INNER JOIN t2_00826 ON (a = t2_00826.a) AND (a = t2_00826.a) AND (a = t2_00826.a) AND (b = t2_00826.b)
WHERE (a = t2_00826.a) AND ((a = t2_00826.a) AND ((a = t2_00826.a) AND (b = t2_00826.b)))
cross split conjunction cross split conjunction
SELECT \n a,\n b,\n t2_00826.a,\n t2_00826.b\nFROM t1_00826\nALL INNER JOIN t2_00826 ON (a = t2_00826.a) AND (b = t2_00826.b)\nWHERE (a = t2_00826.a) AND (b = t2_00826.b) AND (a >= 1) AND (t2_00826.b > 0) SELECT
a,
b,
t2_00826.a,
t2_00826.b
FROM t1_00826
ALL INNER JOIN t2_00826 ON (a = t2_00826.a) AND (b = t2_00826.b)
WHERE (a = t2_00826.a) AND (b = t2_00826.b) AND (a >= 1) AND (t2_00826.b > 0)

View File

@ -1,18 +1,254 @@
SELECT a\nFROM t1_00849\nCROSS JOIN t2_00849 SELECT a
SELECT a\nFROM t1_00849\nALL INNER JOIN t2_00849 ON a = t2_00849.a\nWHERE a = t2_00849.a FROM t1_00849
SELECT a\nFROM t1_00849\nALL INNER JOIN t2_00849 ON b = t2_00849.b\nWHERE b = t2_00849.b CROSS JOIN t2_00849
SELECT `--t1_00849.a` AS `t1_00849.a`\nFROM \n(\n SELECT \n a AS `--t1_00849.a`,\n b,\n t2_00849.a AS `--t2_00849.a`,\n t2_00849.b\n FROM t1_00849\n ALL INNER JOIN t2_00849 ON `--t1_00849.a` = `--t2_00849.a`\n) AS `--.s`\nALL INNER JOIN t3_00849 ON `--t1_00849.a` = a\nWHERE (`--t1_00849.a` = `--t2_00849.a`) AND (`--t1_00849.a` = a) SELECT a
SELECT `--t1_00849.a` AS `t1_00849.a`\nFROM \n(\n SELECT \n a AS `--t1_00849.a`,\n b AS `--t1_00849.b`,\n t2_00849.a,\n t2_00849.b AS `--t2_00849.b`\n FROM t1_00849\n ALL INNER JOIN t2_00849 ON `--t1_00849.b` = `--t2_00849.b`\n) AS `--.s`\nALL INNER JOIN t3_00849 ON `--t1_00849.b` = b\nWHERE (`--t1_00849.b` = `--t2_00849.b`) AND (`--t1_00849.b` = b) FROM t1_00849
SELECT `--t1_00849.a` AS `t1_00849.a`\nFROM \n(\n SELECT \n `--t1_00849.a`,\n b,\n `--t2_00849.a`,\n `t2_00849.b`,\n a AS `--t3_00849.a`,\n t3_00849.b\n FROM \n (\n SELECT \n a AS `--t1_00849.a`,\n b,\n t2_00849.a AS `--t2_00849.a`,\n t2_00849.b\n FROM t1_00849\n ALL INNER JOIN t2_00849 ON `--t1_00849.a` = `--t2_00849.a`\n ) AS `--.s`\n ALL INNER JOIN t3_00849 ON `--t1_00849.a` = `--t3_00849.a`\n) AS `--.s`\nALL INNER JOIN t4_00849 ON `--t1_00849.a` = a\nWHERE (`--t1_00849.a` = `--t2_00849.a`) AND (`--t1_00849.a` = `--t3_00849.a`) AND (`--t1_00849.a` = a) ALL INNER JOIN t2_00849 ON a = t2_00849.a
SELECT `--t1_00849.a` AS `t1_00849.a`\nFROM \n(\n SELECT \n `--t1_00849.a`,\n `--t1_00849.b`,\n `t2_00849.a`,\n `--t2_00849.b`,\n a,\n b AS `--t3_00849.b`\n FROM \n (\n SELECT \n a AS `--t1_00849.a`,\n b AS `--t1_00849.b`,\n t2_00849.a,\n t2_00849.b AS `--t2_00849.b`\n FROM t1_00849\n ALL INNER JOIN t2_00849 ON `--t1_00849.b` = `--t2_00849.b`\n ) AS `--.s`\n ALL INNER JOIN t3_00849 ON `--t1_00849.b` = `--t3_00849.b`\n) AS `--.s`\nALL INNER JOIN t4_00849 ON `--t1_00849.b` = b\nWHERE (`--t1_00849.b` = `--t2_00849.b`) AND (`--t1_00849.b` = `--t3_00849.b`) AND (`--t1_00849.b` = b) WHERE a = t2_00849.a
SELECT `--t1_00849.a` AS `t1_00849.a`\nFROM \n(\n SELECT \n `--t1_00849.a`,\n b,\n `--t2_00849.a`,\n `t2_00849.b`,\n a AS `--t3_00849.a`,\n t3_00849.b\n FROM \n (\n SELECT \n a AS `--t1_00849.a`,\n b,\n t2_00849.a AS `--t2_00849.a`,\n t2_00849.b\n FROM t1_00849\n ALL INNER JOIN t2_00849 ON `--t2_00849.a` = `--t1_00849.a`\n ) AS `--.s`\n ALL INNER JOIN t3_00849 ON `--t2_00849.a` = `--t3_00849.a`\n) AS `--.s`\nALL INNER JOIN t4_00849 ON `--t2_00849.a` = a\nWHERE (`--t2_00849.a` = `--t1_00849.a`) AND (`--t2_00849.a` = `--t3_00849.a`) AND (`--t2_00849.a` = a) SELECT a
SELECT `--t1_00849.a` AS `t1_00849.a`\nFROM \n(\n SELECT \n `--t1_00849.a`,\n b,\n `--t2_00849.a`,\n `t2_00849.b`,\n a AS `--t3_00849.a`,\n t3_00849.b\n FROM \n (\n SELECT \n a AS `--t1_00849.a`,\n b,\n t2_00849.a AS `--t2_00849.a`,\n t2_00849.b\n FROM t1_00849\n CROSS JOIN t2_00849\n ) AS `--.s`\n ALL INNER JOIN t3_00849 ON (`--t3_00849.a` = `--t1_00849.a`) AND (`--t3_00849.a` = `--t2_00849.a`)\n) AS `--.s`\nALL INNER JOIN t4_00849 ON `--t3_00849.a` = a\nWHERE (`--t3_00849.a` = `--t1_00849.a`) AND (`--t3_00849.a` = `--t2_00849.a`) AND (`--t3_00849.a` = a) FROM t1_00849
SELECT `--t1_00849.a` AS `t1_00849.a`\nFROM \n(\n SELECT \n `--t1_00849.a`,\n b,\n `--t2_00849.a`,\n `t2_00849.b`,\n a AS `--t3_00849.a`,\n t3_00849.b\n FROM \n (\n SELECT \n a AS `--t1_00849.a`,\n b,\n t2_00849.a AS `--t2_00849.a`,\n t2_00849.b\n FROM t1_00849\n CROSS JOIN t2_00849\n ) AS `--.s`\n CROSS JOIN t3_00849\n) AS `--.s`\nALL INNER JOIN t4_00849 ON (a = `--t1_00849.a`) AND (a = `--t2_00849.a`) AND (a = `--t3_00849.a`)\nWHERE (a = `--t1_00849.a`) AND (a = `--t2_00849.a`) AND (a = `--t3_00849.a`) ALL INNER JOIN t2_00849 ON b = t2_00849.b
SELECT `--t1_00849.a` AS `t1_00849.a`\nFROM \n(\n SELECT \n `--t1_00849.a`,\n b,\n `--t2_00849.a`,\n `t2_00849.b`,\n a AS `--t3_00849.a`,\n t3_00849.b\n FROM \n (\n SELECT \n a AS `--t1_00849.a`,\n b,\n t2_00849.a AS `--t2_00849.a`,\n t2_00849.b\n FROM t1_00849\n ALL INNER JOIN t2_00849 ON `--t1_00849.a` = `--t2_00849.a`\n ) AS `--.s`\n ALL INNER JOIN t3_00849 ON `--t2_00849.a` = `--t3_00849.a`\n) AS `--.s`\nALL INNER JOIN t4_00849 ON `--t3_00849.a` = a\nWHERE (`--t1_00849.a` = `--t2_00849.a`) AND (`--t2_00849.a` = `--t3_00849.a`) AND (`--t3_00849.a` = a) WHERE b = t2_00849.b
SELECT `--t1_00849.a` AS `t1_00849.a`\nFROM \n(\n SELECT \n `--t1_00849.a`,\n b,\n `t2_00849.a`,\n `t2_00849.b`,\n a,\n t3_00849.b\n FROM \n (\n SELECT \n a AS `--t1_00849.a`,\n b,\n t2_00849.a,\n t2_00849.b\n FROM t1_00849\n CROSS JOIN t2_00849\n ) AS `--.s`\n CROSS JOIN t3_00849\n) AS `--.s`\nCROSS JOIN t4_00849 SELECT `--t1_00849.a` AS `t1_00849.a`
SELECT `--t1_00849.a` AS `t1_00849.a`\nFROM \n(\n SELECT \n `--t1_00849.a`,\n b,\n `t2_00849.a`,\n `t2_00849.b`,\n a,\n t3_00849.b\n FROM \n (\n SELECT \n a AS `--t1_00849.a`,\n b,\n t2_00849.a,\n t2_00849.b\n FROM t1_00849\n CROSS JOIN t2_00849\n ) AS `--.s`\n CROSS JOIN t3_00849\n) AS `--.s`\nCROSS JOIN t4_00849 FROM
SELECT `--t1_00849.a` AS `t1_00849.a`\nFROM \n(\n SELECT \n a AS `--t1_00849.a`,\n b,\n t2_00849.a,\n t2_00849.b\n FROM t1_00849\n CROSS JOIN t2_00849\n) AS `--.s`\nCROSS JOIN t3_00849 (
SELECT `--t1_00849.a` AS `t1_00849.a`\nFROM \n(\n SELECT \n a AS `--t1_00849.a`,\n b,\n t2_00849.a AS `--t2_00849.a`,\n t2_00849.b\n FROM t1_00849\n ALL INNER JOIN t2_00849 ON `--t1_00849.a` = `--t2_00849.a`\n) AS `--.s`\nCROSS JOIN t3_00849 SELECT
a AS `--t1_00849.a`,
b,
t2_00849.a AS `--t2_00849.a`,
t2_00849.b
FROM t1_00849
ALL INNER JOIN t2_00849 ON `--t1_00849.a` = `--t2_00849.a`
) AS `--.s`
ALL INNER JOIN t3_00849 ON `--t1_00849.a` = a
WHERE (`--t1_00849.a` = `--t2_00849.a`) AND (`--t1_00849.a` = a)
SELECT `--t1_00849.a` AS `t1_00849.a`
FROM
(
SELECT
a AS `--t1_00849.a`,
b AS `--t1_00849.b`,
t2_00849.a,
t2_00849.b AS `--t2_00849.b`
FROM t1_00849
ALL INNER JOIN t2_00849 ON `--t1_00849.b` = `--t2_00849.b`
) AS `--.s`
ALL INNER JOIN t3_00849 ON `--t1_00849.b` = b
WHERE (`--t1_00849.b` = `--t2_00849.b`) AND (`--t1_00849.b` = b)
SELECT `--t1_00849.a` AS `t1_00849.a`
FROM
(
SELECT
`--t1_00849.a`,
b,
`--t2_00849.a`,
`t2_00849.b`,
a AS `--t3_00849.a`,
t3_00849.b
FROM
(
SELECT
a AS `--t1_00849.a`,
b,
t2_00849.a AS `--t2_00849.a`,
t2_00849.b
FROM t1_00849
ALL INNER JOIN t2_00849 ON `--t1_00849.a` = `--t2_00849.a`
) AS `--.s`
ALL INNER JOIN t3_00849 ON `--t1_00849.a` = `--t3_00849.a`
) AS `--.s`
ALL INNER JOIN t4_00849 ON `--t1_00849.a` = a
WHERE (`--t1_00849.a` = `--t2_00849.a`) AND (`--t1_00849.a` = `--t3_00849.a`) AND (`--t1_00849.a` = a)
SELECT `--t1_00849.a` AS `t1_00849.a`
FROM
(
SELECT
`--t1_00849.a`,
`--t1_00849.b`,
`t2_00849.a`,
`--t2_00849.b`,
a,
b AS `--t3_00849.b`
FROM
(
SELECT
a AS `--t1_00849.a`,
b AS `--t1_00849.b`,
t2_00849.a,
t2_00849.b AS `--t2_00849.b`
FROM t1_00849
ALL INNER JOIN t2_00849 ON `--t1_00849.b` = `--t2_00849.b`
) AS `--.s`
ALL INNER JOIN t3_00849 ON `--t1_00849.b` = `--t3_00849.b`
) AS `--.s`
ALL INNER JOIN t4_00849 ON `--t1_00849.b` = b
WHERE (`--t1_00849.b` = `--t2_00849.b`) AND (`--t1_00849.b` = `--t3_00849.b`) AND (`--t1_00849.b` = b)
SELECT `--t1_00849.a` AS `t1_00849.a`
FROM
(
SELECT
`--t1_00849.a`,
b,
`--t2_00849.a`,
`t2_00849.b`,
a AS `--t3_00849.a`,
t3_00849.b
FROM
(
SELECT
a AS `--t1_00849.a`,
b,
t2_00849.a AS `--t2_00849.a`,
t2_00849.b
FROM t1_00849
ALL INNER JOIN t2_00849 ON `--t2_00849.a` = `--t1_00849.a`
) AS `--.s`
ALL INNER JOIN t3_00849 ON `--t2_00849.a` = `--t3_00849.a`
) AS `--.s`
ALL INNER JOIN t4_00849 ON `--t2_00849.a` = a
WHERE (`--t2_00849.a` = `--t1_00849.a`) AND (`--t2_00849.a` = `--t3_00849.a`) AND (`--t2_00849.a` = a)
SELECT `--t1_00849.a` AS `t1_00849.a`
FROM
(
SELECT
`--t1_00849.a`,
b,
`--t2_00849.a`,
`t2_00849.b`,
a AS `--t3_00849.a`,
t3_00849.b
FROM
(
SELECT
a AS `--t1_00849.a`,
b,
t2_00849.a AS `--t2_00849.a`,
t2_00849.b
FROM t1_00849
CROSS JOIN t2_00849
) AS `--.s`
ALL INNER JOIN t3_00849 ON (`--t3_00849.a` = `--t1_00849.a`) AND (`--t3_00849.a` = `--t2_00849.a`)
) AS `--.s`
ALL INNER JOIN t4_00849 ON `--t3_00849.a` = a
WHERE (`--t3_00849.a` = `--t1_00849.a`) AND (`--t3_00849.a` = `--t2_00849.a`) AND (`--t3_00849.a` = a)
SELECT `--t1_00849.a` AS `t1_00849.a`
FROM
(
SELECT
`--t1_00849.a`,
b,
`--t2_00849.a`,
`t2_00849.b`,
a AS `--t3_00849.a`,
t3_00849.b
FROM
(
SELECT
a AS `--t1_00849.a`,
b,
t2_00849.a AS `--t2_00849.a`,
t2_00849.b
FROM t1_00849
CROSS JOIN t2_00849
) AS `--.s`
CROSS JOIN t3_00849
) AS `--.s`
ALL INNER JOIN t4_00849 ON (a = `--t1_00849.a`) AND (a = `--t2_00849.a`) AND (a = `--t3_00849.a`)
WHERE (a = `--t1_00849.a`) AND (a = `--t2_00849.a`) AND (a = `--t3_00849.a`)
SELECT `--t1_00849.a` AS `t1_00849.a`
FROM
(
SELECT
`--t1_00849.a`,
b,
`--t2_00849.a`,
`t2_00849.b`,
a AS `--t3_00849.a`,
t3_00849.b
FROM
(
SELECT
a AS `--t1_00849.a`,
b,
t2_00849.a AS `--t2_00849.a`,
t2_00849.b
FROM t1_00849
ALL INNER JOIN t2_00849 ON `--t1_00849.a` = `--t2_00849.a`
) AS `--.s`
ALL INNER JOIN t3_00849 ON `--t2_00849.a` = `--t3_00849.a`
) AS `--.s`
ALL INNER JOIN t4_00849 ON `--t3_00849.a` = a
WHERE (`--t1_00849.a` = `--t2_00849.a`) AND (`--t2_00849.a` = `--t3_00849.a`) AND (`--t3_00849.a` = a)
SELECT `--t1_00849.a` AS `t1_00849.a`
FROM
(
SELECT
`--t1_00849.a`,
b,
`t2_00849.a`,
`t2_00849.b`,
a,
t3_00849.b
FROM
(
SELECT
a AS `--t1_00849.a`,
b,
t2_00849.a,
t2_00849.b
FROM t1_00849
CROSS JOIN t2_00849
) AS `--.s`
CROSS JOIN t3_00849
) AS `--.s`
CROSS JOIN t4_00849
SELECT `--t1_00849.a` AS `t1_00849.a`
FROM
(
SELECT
`--t1_00849.a`,
b,
`t2_00849.a`,
`t2_00849.b`,
a,
t3_00849.b
FROM
(
SELECT
a AS `--t1_00849.a`,
b,
t2_00849.a,
t2_00849.b
FROM t1_00849
CROSS JOIN t2_00849
) AS `--.s`
CROSS JOIN t3_00849
) AS `--.s`
CROSS JOIN t4_00849
SELECT `--t1_00849.a` AS `t1_00849.a`
FROM
(
SELECT
a AS `--t1_00849.a`,
b,
t2_00849.a,
t2_00849.b
FROM t1_00849
CROSS JOIN t2_00849
) AS `--.s`
CROSS JOIN t3_00849
SELECT `--t1_00849.a` AS `t1_00849.a`
FROM
(
SELECT
a AS `--t1_00849.a`,
b,
t2_00849.a AS `--t2_00849.a`,
t2_00849.b
FROM t1_00849
ALL INNER JOIN t2_00849 ON `--t1_00849.a` = `--t2_00849.a`
) AS `--.s`
CROSS JOIN t3_00849
SELECT * FROM t1, t2 SELECT * FROM t1, t2
1 1 1 1 1 1 1 1
1 1 1 \N 1 1 1 \N

View File

@ -1,18 +1,197 @@
SELECT a\nFROM t1\nCROSS JOIN t2 SELECT a
SELECT a\nFROM t1\nALL INNER JOIN t2 ON a = t2.a\nWHERE a = t2.a FROM t1
SELECT a\nFROM t1\nALL INNER JOIN t2 ON b = t2.b\nWHERE b = t2.b CROSS JOIN t2
SELECT `--t1.a` AS `t1.a`\nFROM \n(\n SELECT \n a AS `--t1.a`,\n t2.a AS `--t2.a`\n FROM t1\n ALL INNER JOIN t2 ON `--t1.a` = `--t2.a`\n) AS `--.s`\nALL INNER JOIN t3 ON `--t1.a` = a\nWHERE (`--t1.a` = `--t2.a`) AND (`--t1.a` = a) SELECT a
SELECT `--t1.a` AS `t1.a`\nFROM \n(\n SELECT \n b AS `--t1.b`,\n a AS `--t1.a`,\n t2.b AS `--t2.b`\n FROM t1\n ALL INNER JOIN t2 ON `--t1.b` = `--t2.b`\n) AS `--.s`\nALL INNER JOIN t3 ON `--t1.b` = b\nWHERE (`--t1.b` = `--t2.b`) AND (`--t1.b` = b) FROM t1
SELECT `--t1.a` AS `t1.a`\nFROM \n(\n SELECT \n `--t1.a`,\n `--t2.a`,\n a AS `--t3.a`\n FROM \n (\n SELECT \n a AS `--t1.a`,\n t2.a AS `--t2.a`\n FROM t1\n ALL INNER JOIN t2 ON `--t1.a` = `--t2.a`\n ) AS `--.s`\n ALL INNER JOIN t3 ON `--t1.a` = `--t3.a`\n) AS `--.s`\nALL INNER JOIN t4 ON `--t1.a` = a\nWHERE (`--t1.a` = `--t2.a`) AND (`--t1.a` = `--t3.a`) AND (`--t1.a` = a) ALL INNER JOIN t2 ON a = t2.a
SELECT `--t1.a` AS `t1.a`\nFROM \n(\n SELECT \n `--t1.b`,\n `--t1.a`,\n `--t2.b`,\n b AS `--t3.b`\n FROM \n (\n SELECT \n b AS `--t1.b`,\n a AS `--t1.a`,\n t2.b AS `--t2.b`\n FROM t1\n ALL INNER JOIN t2 ON `--t1.b` = `--t2.b`\n ) AS `--.s`\n ALL INNER JOIN t3 ON `--t1.b` = `--t3.b`\n) AS `--.s`\nALL INNER JOIN t4 ON `--t1.b` = b\nWHERE (`--t1.b` = `--t2.b`) AND (`--t1.b` = `--t3.b`) AND (`--t1.b` = b) WHERE a = t2.a
SELECT `--t1.a` AS `t1.a`\nFROM \n(\n SELECT \n `--t1.a`,\n `--t2.a`,\n a AS `--t3.a`\n FROM \n (\n SELECT \n a AS `--t1.a`,\n t2.a AS `--t2.a`\n FROM t1\n ALL INNER JOIN t2 ON `--t2.a` = `--t1.a`\n ) AS `--.s`\n ALL INNER JOIN t3 ON `--t2.a` = `--t3.a`\n) AS `--.s`\nALL INNER JOIN t4 ON `--t2.a` = a\nWHERE (`--t2.a` = `--t1.a`) AND (`--t2.a` = `--t3.a`) AND (`--t2.a` = a) SELECT a
SELECT `--t1.a` AS `t1.a`\nFROM \n(\n SELECT \n `--t1.a`,\n `--t2.a`,\n a AS `--t3.a`\n FROM \n (\n SELECT \n a AS `--t1.a`,\n t2.a AS `--t2.a`\n FROM t1\n CROSS JOIN t2\n ) AS `--.s`\n ALL INNER JOIN t3 ON (`--t3.a` = `--t1.a`) AND (`--t3.a` = `--t2.a`)\n) AS `--.s`\nALL INNER JOIN t4 ON `--t3.a` = a\nWHERE (`--t3.a` = `--t1.a`) AND (`--t3.a` = `--t2.a`) AND (`--t3.a` = a) FROM t1
SELECT `--t1.a` AS `t1.a`\nFROM \n(\n SELECT \n `--t1.a`,\n `--t2.a`,\n a AS `--t3.a`\n FROM \n (\n SELECT \n a AS `--t1.a`,\n t2.a AS `--t2.a`\n FROM t1\n CROSS JOIN t2\n ) AS `--.s`\n CROSS JOIN t3\n) AS `--.s`\nALL INNER JOIN t4 ON (a = `--t1.a`) AND (a = `--t2.a`) AND (a = `--t3.a`)\nWHERE (a = `--t1.a`) AND (a = `--t2.a`) AND (a = `--t3.a`) ALL INNER JOIN t2 ON b = t2.b
SELECT `--t1.a` AS `t1.a`\nFROM \n(\n SELECT \n `--t1.a`,\n `--t2.a`,\n a AS `--t3.a`\n FROM \n (\n SELECT \n a AS `--t1.a`,\n t2.a AS `--t2.a`\n FROM t1\n ALL INNER JOIN t2 ON `--t1.a` = `--t2.a`\n ) AS `--.s`\n ALL INNER JOIN t3 ON `--t2.a` = `--t3.a`\n) AS `--.s`\nALL INNER JOIN t4 ON `--t3.a` = a\nWHERE (`--t1.a` = `--t2.a`) AND (`--t2.a` = `--t3.a`) AND (`--t3.a` = a) WHERE b = t2.b
SELECT `--t1.a` AS `t1.a`\nFROM \n(\n SELECT `--t1.a`\n FROM \n (\n SELECT a AS `--t1.a`\n FROM t1\n CROSS JOIN t2\n ) AS `--.s`\n CROSS JOIN t3\n) AS `--.s`\nCROSS JOIN t4 SELECT `--t1.a` AS `t1.a`
SELECT `--t1.a` AS `t1.a`\nFROM \n(\n SELECT `--t1.a`\n FROM \n (\n SELECT a AS `--t1.a`\n FROM t1\n CROSS JOIN t2\n ) AS `--.s`\n CROSS JOIN t3\n) AS `--.s`\nCROSS JOIN t4 FROM
SELECT `--t1.a` AS `t1.a`\nFROM \n(\n SELECT a AS `--t1.a`\n FROM t1\n CROSS JOIN t2\n) AS `--.s`\nCROSS JOIN t3 (
SELECT `--t1.a` AS `t1.a`\nFROM \n(\n SELECT \n a AS `--t1.a`,\n t2.a AS `--t2.a`\n FROM t1\n ALL INNER JOIN t2 ON `--t1.a` = `--t2.a`\n) AS `--.s`\nCROSS JOIN t3 SELECT
a AS `--t1.a`,
t2.a AS `--t2.a`
FROM t1
ALL INNER JOIN t2 ON `--t1.a` = `--t2.a`
) AS `--.s`
ALL INNER JOIN t3 ON `--t1.a` = a
WHERE (`--t1.a` = `--t2.a`) AND (`--t1.a` = a)
SELECT `--t1.a` AS `t1.a`
FROM
(
SELECT
b AS `--t1.b`,
a AS `--t1.a`,
t2.b AS `--t2.b`
FROM t1
ALL INNER JOIN t2 ON `--t1.b` = `--t2.b`
) AS `--.s`
ALL INNER JOIN t3 ON `--t1.b` = b
WHERE (`--t1.b` = `--t2.b`) AND (`--t1.b` = b)
SELECT `--t1.a` AS `t1.a`
FROM
(
SELECT
`--t1.a`,
`--t2.a`,
a AS `--t3.a`
FROM
(
SELECT
a AS `--t1.a`,
t2.a AS `--t2.a`
FROM t1
ALL INNER JOIN t2 ON `--t1.a` = `--t2.a`
) AS `--.s`
ALL INNER JOIN t3 ON `--t1.a` = `--t3.a`
) AS `--.s`
ALL INNER JOIN t4 ON `--t1.a` = a
WHERE (`--t1.a` = `--t2.a`) AND (`--t1.a` = `--t3.a`) AND (`--t1.a` = a)
SELECT `--t1.a` AS `t1.a`
FROM
(
SELECT
`--t1.b`,
`--t1.a`,
`--t2.b`,
b AS `--t3.b`
FROM
(
SELECT
b AS `--t1.b`,
a AS `--t1.a`,
t2.b AS `--t2.b`
FROM t1
ALL INNER JOIN t2 ON `--t1.b` = `--t2.b`
) AS `--.s`
ALL INNER JOIN t3 ON `--t1.b` = `--t3.b`
) AS `--.s`
ALL INNER JOIN t4 ON `--t1.b` = b
WHERE (`--t1.b` = `--t2.b`) AND (`--t1.b` = `--t3.b`) AND (`--t1.b` = b)
SELECT `--t1.a` AS `t1.a`
FROM
(
SELECT
`--t1.a`,
`--t2.a`,
a AS `--t3.a`
FROM
(
SELECT
a AS `--t1.a`,
t2.a AS `--t2.a`
FROM t1
ALL INNER JOIN t2 ON `--t2.a` = `--t1.a`
) AS `--.s`
ALL INNER JOIN t3 ON `--t2.a` = `--t3.a`
) AS `--.s`
ALL INNER JOIN t4 ON `--t2.a` = a
WHERE (`--t2.a` = `--t1.a`) AND (`--t2.a` = `--t3.a`) AND (`--t2.a` = a)
SELECT `--t1.a` AS `t1.a`
FROM
(
SELECT
`--t1.a`,
`--t2.a`,
a AS `--t3.a`
FROM
(
SELECT
a AS `--t1.a`,
t2.a AS `--t2.a`
FROM t1
CROSS JOIN t2
) AS `--.s`
ALL INNER JOIN t3 ON (`--t3.a` = `--t1.a`) AND (`--t3.a` = `--t2.a`)
) AS `--.s`
ALL INNER JOIN t4 ON `--t3.a` = a
WHERE (`--t3.a` = `--t1.a`) AND (`--t3.a` = `--t2.a`) AND (`--t3.a` = a)
SELECT `--t1.a` AS `t1.a`
FROM
(
SELECT
`--t1.a`,
`--t2.a`,
a AS `--t3.a`
FROM
(
SELECT
a AS `--t1.a`,
t2.a AS `--t2.a`
FROM t1
CROSS JOIN t2
) AS `--.s`
CROSS JOIN t3
) AS `--.s`
ALL INNER JOIN t4 ON (a = `--t1.a`) AND (a = `--t2.a`) AND (a = `--t3.a`)
WHERE (a = `--t1.a`) AND (a = `--t2.a`) AND (a = `--t3.a`)
SELECT `--t1.a` AS `t1.a`
FROM
(
SELECT
`--t1.a`,
`--t2.a`,
a AS `--t3.a`
FROM
(
SELECT
a AS `--t1.a`,
t2.a AS `--t2.a`
FROM t1
ALL INNER JOIN t2 ON `--t1.a` = `--t2.a`
) AS `--.s`
ALL INNER JOIN t3 ON `--t2.a` = `--t3.a`
) AS `--.s`
ALL INNER JOIN t4 ON `--t3.a` = a
WHERE (`--t1.a` = `--t2.a`) AND (`--t2.a` = `--t3.a`) AND (`--t3.a` = a)
SELECT `--t1.a` AS `t1.a`
FROM
(
SELECT `--t1.a`
FROM
(
SELECT a AS `--t1.a`
FROM t1
CROSS JOIN t2
) AS `--.s`
CROSS JOIN t3
) AS `--.s`
CROSS JOIN t4
SELECT `--t1.a` AS `t1.a`
FROM
(
SELECT `--t1.a`
FROM
(
SELECT a AS `--t1.a`
FROM t1
CROSS JOIN t2
) AS `--.s`
CROSS JOIN t3
) AS `--.s`
CROSS JOIN t4
SELECT `--t1.a` AS `t1.a`
FROM
(
SELECT a AS `--t1.a`
FROM t1
CROSS JOIN t2
) AS `--.s`
CROSS JOIN t3
SELECT `--t1.a` AS `t1.a`
FROM
(
SELECT
a AS `--t1.a`,
t2.a AS `--t2.a`
FROM t1
ALL INNER JOIN t2 ON `--t1.a` = `--t2.a`
) AS `--.s`
CROSS JOIN t3
SELECT * FROM t1, t2 SELECT * FROM t1, t2
1 1 1 1 1 1 1 1
1 1 1 \N 1 1 1 \N

View File

@ -1 +1,4 @@
SELECT \n a,\n b\nFROM a SELECT
a,
b
FROM a

View File

@ -1,5 +1,12 @@
SELECT 1\nWHERE 0
SELECT 1 SELECT 1
SELECT 1\nWHERE 0 WHERE 0
SELECT 1\nWHERE 1 IN (\n(\n SELECT arrayJoin([1, 2, 3])\n) AS subquery) SELECT 1
SELECT 1\nWHERE NOT ignore() SELECT 1
WHERE 0
SELECT 1
WHERE 1 IN (
(
SELECT arrayJoin([1, 2, 3])
) AS subquery)
SELECT 1
WHERE NOT ignore()

View File

@ -1,19 +1,125 @@
SELECT \n k,\n v,\n d,\n i\nFROM \n(\n SELECT \n t.1 AS k,\n t.2 AS v,\n runningDifference(v) AS d,\n runningDifference(cityHash64(t.1)) AS i\n FROM \n (\n SELECT arrayJoin([(\'a\', 1), (\'a\', 2), (\'a\', 3), (\'b\', 11), (\'b\', 13), (\'b\', 15)]) AS t\n )\n)\nWHERE i = 0 SELECT
k,
v,
d,
i
FROM
(
SELECT
t.1 AS k,
t.2 AS v,
runningDifference(v) AS d,
runningDifference(cityHash64(t.1)) AS i
FROM
(
SELECT arrayJoin([(\'a\', 1), (\'a\', 2), (\'a\', 3), (\'b\', 11), (\'b\', 13), (\'b\', 15)]) AS t
)
)
WHERE i = 0
a 1 0 0 a 1 0 0
a 2 1 0 a 2 1 0
a 3 1 0 a 3 1 0
b 13 2 0 b 13 2 0
b 15 2 0 b 15 2 0
SELECT \n co,\n co2,\n co3,\n num\nFROM \n(\n SELECT \n co,\n co2,\n co3,\n count() AS num\n FROM \n (\n SELECT \n 1 AS co,\n 2 AS co2,\n 3 AS co3\n )\n GROUP BY \n co,\n co2,\n co3\n WITH CUBE\n HAVING (co2 != 2) AND (co != 0)\n)\nWHERE (co != 0) AND (co2 != 2) SELECT
co,
co2,
co3,
num
FROM
(
SELECT
co,
co2,
co3,
count() AS num
FROM
(
SELECT
1 AS co,
2 AS co2,
3 AS co3
)
GROUP BY
co,
co2,
co3
WITH CUBE
HAVING (co2 != 2) AND (co != 0)
)
WHERE (co != 0) AND (co2 != 2)
1 0 3 1 1 0 3 1
1 0 0 1 1 0 0 1
SELECT alias AS name\nFROM \n(\n SELECT name AS alias\n FROM system.settings\n WHERE alias = \'enable_optimize_predicate_expression\'\n)\nANY INNER JOIN \n(\n SELECT name\n FROM system.settings\n) USING (name)\nWHERE name = \'enable_optimize_predicate_expression\' SELECT alias AS name
FROM
(
SELECT name AS alias
FROM system.settings
WHERE alias = \'enable_optimize_predicate_expression\'
)
ANY INNER JOIN
(
SELECT name
FROM system.settings
) USING (name)
WHERE name = \'enable_optimize_predicate_expression\'
enable_optimize_predicate_expression enable_optimize_predicate_expression
1 val11 val21 val31 1 val11 val21 val31
SELECT ccc\nFROM \n(\n SELECT 1 AS ccc\n WHERE 0\n UNION ALL\n SELECT ccc\n FROM \n (\n SELECT 2 AS ccc\n )\n ANY INNER JOIN \n (\n SELECT 2 AS ccc\n ) USING (ccc)\n WHERE ccc > 1\n)\nWHERE ccc > 1 SELECT ccc
FROM
(
SELECT 1 AS ccc
WHERE 0
UNION ALL
SELECT ccc
FROM
(
SELECT 2 AS ccc
)
ANY INNER JOIN
(
SELECT 2 AS ccc
) USING (ccc)
WHERE ccc > 1
)
WHERE ccc > 1
2 2
SELECT \n ts,\n id,\n id_b,\n b.ts,\n b.id,\n id_c\nFROM \n(\n SELECT \n ts,\n id,\n id_b\n FROM A\n WHERE ts <= toDateTime(\'1970-01-01 03:00:00\')\n) AS a\nALL LEFT JOIN B AS b ON b.id = id_b\nWHERE ts <= toDateTime(\'1970-01-01 03:00:00\') SELECT
SELECT \n ts AS `--a.ts`,\n id AS `--a.id`,\n id_b AS `--a.id_b`,\n b.ts AS `--b.ts`,\n b.id AS `--b.id`,\n id_c AS `--b.id_c`\nFROM \n(\n SELECT \n ts,\n id,\n id_b\n FROM A\n WHERE ts <= toDateTime(\'1970-01-01 03:00:00\')\n) AS a\nALL LEFT JOIN B AS b ON `--b.id` = `--a.id_b`\nWHERE `--a.ts` <= toDateTime(\'1970-01-01 03:00:00\') ts,
id,
id_b,
b.ts,
b.id,
id_c
FROM
(
SELECT
ts,
id,
id_b
FROM A
WHERE ts <= toDateTime(\'1970-01-01 03:00:00\')
) AS a
ALL LEFT JOIN B AS b ON b.id = id_b
WHERE ts <= toDateTime(\'1970-01-01 03:00:00\')
SELECT
ts AS `--a.ts`,
id AS `--a.id`,
id_b AS `--a.id_b`,
b.ts AS `--b.ts`,
b.id AS `--b.id`,
id_c AS `--b.id_c`
FROM
(
SELECT
ts,
id,
id_b
FROM A
WHERE ts <= toDateTime(\'1970-01-01 03:00:00\')
) AS a
ALL LEFT JOIN B AS b ON `--b.id` = `--a.id_b`
WHERE `--a.ts` <= toDateTime(\'1970-01-01 03:00:00\')
2 3 2 3
3 4 3 4
4 5 4 5
@ -22,8 +128,33 @@ SELECT \n ts AS `--a.ts`,\n id AS `--a.id`,\n id_b AS `--a.id_b`,\n
4 0 4 0
2 3 2 3
4 5 4 5
SELECT dummy\nFROM \n(\n SELECT dummy\n FROM system.one\n WHERE arrayMap(x -> (x + 1), [dummy]) = [1]\n)\nWHERE arrayMap(x -> (x + 1), [dummy]) = [1] SELECT dummy
FROM
(
SELECT dummy
FROM system.one
WHERE arrayMap(x -> (x + 1), [dummy]) = [1]
)
WHERE arrayMap(x -> (x + 1), [dummy]) = [1]
0 0
SELECT \n id,\n value,\n value_1\nFROM \n(\n SELECT \n 1 AS id,\n 2 AS value\n)\nALL INNER JOIN \n(\n SELECT \n 1 AS id,\n 3 AS value_1\n) USING (id)\nWHERE arrayMap(x -> ((x + value) + value_1), [1]) = [6] SELECT
id,
value,
value_1
FROM
(
SELECT
1 AS id,
2 AS value
)
ALL INNER JOIN
(
SELECT
1 AS id,
3 AS value_1
) USING (id)
WHERE arrayMap(x -> ((x + value) + value_1), [1]) = [6]
1 2 3 1 2 3
SELECT dummy\nFROM system.one\nWHERE (dummy > 0) AND (dummy < 0) SELECT dummy
FROM system.one
WHERE (dummy > 0) AND (dummy < 0)

View File

@ -1,4 +1,40 @@
SELECT \n date,\n id,\n name,\n value\nFROM \n(\n SELECT *\n FROM default.test\n HAVING id = 1\n) AS test_view\nWHERE id = 1 SELECT
SELECT \n date,\n id,\n name,\n value\nFROM \n(\n SELECT *\n FROM default.test\n HAVING id = 2\n) AS test_view\nWHERE id = 2 date,
SELECT id\nFROM \n(\n SELECT *\n FROM default.test\n HAVING id = 1\n) AS test_view\nWHERE id = 1 id,
SELECT id\nFROM \n(\n SELECT *\n FROM default.test\n HAVING id = 1\n) AS s\nWHERE id = 1 name,
value
FROM
(
SELECT *
FROM default.test
HAVING id = 1
) AS test_view
WHERE id = 1
SELECT
date,
id,
name,
value
FROM
(
SELECT *
FROM default.test
HAVING id = 2
) AS test_view
WHERE id = 2
SELECT id
FROM
(
SELECT *
FROM default.test
HAVING id = 1
) AS test_view
WHERE id = 1
SELECT id
FROM
(
SELECT *
FROM default.test
HAVING id = 1
) AS s
WHERE id = 1

View File

@ -1,3 +1,21 @@
SELECT \n k,\n r.k,\n name\nFROM n\nALL INNER JOIN r ON k = r.k\nWHERE (k = r.k) AND (name = \'A\') SELECT
SELECT \n k,\n r.k,\n name\nFROM n\nALL INNER JOIN r ON k = r.k\nWHERE (k = r.k) AND (name LIKE \'A%\') k,
SELECT \n k,\n r.k,\n name\nFROM n\nALL INNER JOIN r ON k = r.k\nWHERE (k = r.k) AND (name NOT LIKE \'A%\') r.k,
name
FROM n
ALL INNER JOIN r ON k = r.k
WHERE (k = r.k) AND (name = \'A\')
SELECT
k,
r.k,
name
FROM n
ALL INNER JOIN r ON k = r.k
WHERE (k = r.k) AND (name LIKE \'A%\')
SELECT
k,
r.k,
name
FROM n
ALL INNER JOIN r ON k = r.k
WHERE (k = r.k) AND (name NOT LIKE \'A%\')

View File

@ -22,11 +22,35 @@
3465736.595946905 3465736.595946905
3465735.2096525617 3465735.2096525617
3465735.9027997428 3465735.9027997428
SELECT max(log(2) * number) AS k\nFROM numbers(10000000)\nGROUP BY \n number % 2,\n number % 3,\n ((number % 2) + (number % 3)) % 2\nORDER BY k ASC SELECT max(log(2) * number) AS k
SELECT avg(log(2) * number) AS k\nFROM numbers(10000000)\nGROUP BY number % 5\nORDER BY k ASC FROM numbers(10000000)
SELECT avg(log(2) * number) AS k\nFROM numbers(10000000)\nGROUP BY \n (number % 2) * (number % 3),\n number % 3\nORDER BY k ASC GROUP BY
SELECT avg(log(2) * number) AS k\nFROM numbers(10000000)\nGROUP BY \n number % 3,\n number % 2\nORDER BY k ASC number % 2,
SELECT avg(log(2) * number) AS k\nFROM numbers(10000000)\nGROUP BY \n (number % 2) % 3,\n number % 2\nORDER BY k ASC number % 3,
((number % 2) + (number % 3)) % 2
ORDER BY k ASC
SELECT avg(log(2) * number) AS k
FROM numbers(10000000)
GROUP BY number % 5
ORDER BY k ASC
SELECT avg(log(2) * number) AS k
FROM numbers(10000000)
GROUP BY
(number % 2) * (number % 3),
number % 3
ORDER BY k ASC
SELECT avg(log(2) * number) AS k
FROM numbers(10000000)
GROUP BY
number % 3,
number % 2
ORDER BY k ASC
SELECT avg(log(2) * number) AS k
FROM numbers(10000000)
GROUP BY
(number % 2) % 3,
number % 2
ORDER BY k ASC
6931467.646716369 6931467.646716369
6931468.33986355 6931468.33986355
6931469.0330107305 6931469.0330107305
@ -51,8 +75,35 @@ SELECT avg(log(2) * number) AS k\nFROM numbers(10000000)\nGROUP BY \n (number
3465736.595946905 3465736.595946905
3465735.2096525617 3465735.2096525617
3465735.9027997428 3465735.9027997428
SELECT max(log(2) * number) AS k\nFROM numbers(10000000)\nGROUP BY \n number % 2,\n number % 3,\n ((number % 2) + (number % 3)) % 2\nORDER BY k ASC SELECT max(log(2) * number) AS k
SELECT avg(log(2) * number) AS k\nFROM numbers(10000000)\nGROUP BY \n number % 5,\n (number % 5) * (number % 5)\nORDER BY k ASC FROM numbers(10000000)
SELECT avg(log(2) * number) AS k\nFROM numbers(10000000)\nGROUP BY \n (number % 2) * (number % 3),\n number % 3\nORDER BY k ASC GROUP BY
SELECT avg(log(2) * number) AS k\nFROM numbers(10000000)\nGROUP BY \n (number % 2) * (number % 3),\n number % 3,\n number % 2\nORDER BY k ASC number % 2,
SELECT avg(log(2) * number) AS k\nFROM numbers(10000000)\nGROUP BY \n (number % 2) % 3,\n number % 2\nORDER BY k ASC number % 3,
((number % 2) + (number % 3)) % 2
ORDER BY k ASC
SELECT avg(log(2) * number) AS k
FROM numbers(10000000)
GROUP BY
number % 5,
(number % 5) * (number % 5)
ORDER BY k ASC
SELECT avg(log(2) * number) AS k
FROM numbers(10000000)
GROUP BY
(number % 2) * (number % 3),
number % 3
ORDER BY k ASC
SELECT avg(log(2) * number) AS k
FROM numbers(10000000)
GROUP BY
(number % 2) * (number % 3),
number % 3,
number % 2
ORDER BY k ASC
SELECT avg(log(2) * number) AS k
FROM numbers(10000000)
GROUP BY
(number % 2) % 3,
number % 2
ORDER BY k ASC

View File

@ -7,9 +7,23 @@
0 0
1 1
4 4
SELECT avg(log(2) * number) AS k\nFROM numbers(10000000)\nGROUP BY \n number % 3,\n number % 2\nHAVING avg(log(2) * number) > 3465735.3\nORDER BY k ASC SELECT avg(log(2) * number) AS k
SELECT avg(log(2) * number) AS k\nFROM numbers(10000000)\nWHERE ((number % 5) * (number % 5)) < 5\nGROUP BY number % 5\nORDER BY k ASC FROM numbers(10000000)
SELECT (number % 5) * (number % 5) AS k\nFROM numbers(10000000)\nWHERE ((number % 5) * (number % 5)) < 5\nGROUP BY number % 5\nORDER BY k ASC GROUP BY
number % 3,
number % 2
HAVING avg(log(2) * number) > 3465735.3
ORDER BY k ASC
SELECT avg(log(2) * number) AS k
FROM numbers(10000000)
WHERE ((number % 5) * (number % 5)) < 5
GROUP BY number % 5
ORDER BY k ASC
SELECT (number % 5) * (number % 5) AS k
FROM numbers(10000000)
WHERE ((number % 5) * (number % 5)) < 5
GROUP BY number % 5
ORDER BY k ASC
3465735.9027997246 3465735.9027997246
3465735.902799725 3465735.902799725
3465736.595946905 3465736.595946905
@ -19,6 +33,25 @@ SELECT (number % 5) * (number % 5) AS k\nFROM numbers(10000000)\nWHERE ((number
0 0
1 1
4 4
SELECT avg(log(2) * number) AS k\nFROM numbers(10000000)\nGROUP BY \n (number % 2) * (number % 3),\n number % 3,\n number % 2\nHAVING avg(log(2) * number) > 3465735.3\nORDER BY k ASC SELECT avg(log(2) * number) AS k
SELECT avg(log(2) * number) AS k\nFROM numbers(10000000)\nWHERE ((number % 5) * (number % 5)) < 5\nGROUP BY \n number % 5,\n (number % 5) * (number % 5)\nORDER BY k ASC FROM numbers(10000000)
SELECT (number % 5) * (number % 5) AS k\nFROM numbers(10000000)\nWHERE ((number % 5) * (number % 5)) < 5\nGROUP BY \n number % 5,\n (number % 5) * (number % 5)\nORDER BY k ASC GROUP BY
(number % 2) * (number % 3),
number % 3,
number % 2
HAVING avg(log(2) * number) > 3465735.3
ORDER BY k ASC
SELECT avg(log(2) * number) AS k
FROM numbers(10000000)
WHERE ((number % 5) * (number % 5)) < 5
GROUP BY
number % 5,
(number % 5) * (number % 5)
ORDER BY k ASC
SELECT (number % 5) * (number % 5) AS k
FROM numbers(10000000)
WHERE ((number % 5) * (number % 5)) < 5
GROUP BY
number % 5,
(number % 5) * (number % 5)
ORDER BY k ASC

View File

@ -1,14 +1,58 @@
SELECT number\nFROM \n(\n SELECT number\n FROM \n (\n SELECT DISTINCT number\n FROM numbers(3)\n )\n)\nORDER BY number ASC SELECT number
FROM
(
SELECT number
FROM
(
SELECT DISTINCT number
FROM numbers(3)
)
)
ORDER BY number ASC
0 0
1 1
2 2
SELECT DISTINCT number\nFROM \n(\n SELECT DISTINCT number\n FROM \n (\n SELECT DISTINCT number\n FROM numbers(3)\n ORDER BY number ASC\n )\n ORDER BY number ASC\n)\nORDER BY number ASC SELECT DISTINCT number
FROM
(
SELECT DISTINCT number
FROM
(
SELECT DISTINCT number
FROM numbers(3)
ORDER BY number ASC
)
ORDER BY number ASC
)
ORDER BY number ASC
0 0
1 1
2 2
SELECT number\nFROM \n(\n SELECT DISTINCT number\n FROM \n (\n SELECT DISTINCT number % 2 AS number\n FROM numbers(3)\n )\n)\nORDER BY number ASC SELECT number
FROM
(
SELECT DISTINCT number
FROM
(
SELECT DISTINCT number % 2 AS number
FROM numbers(3)
)
)
ORDER BY number ASC
0 0
1 1
SELECT DISTINCT number\nFROM \n(\n SELECT DISTINCT number\n FROM \n (\n SELECT DISTINCT number % 2 AS number\n FROM numbers(3)\n ORDER BY number ASC\n )\n ORDER BY number ASC\n)\nORDER BY number ASC SELECT DISTINCT number
FROM
(
SELECT DISTINCT number
FROM
(
SELECT DISTINCT number % 2 AS number
FROM numbers(3)
ORDER BY number ASC
)
ORDER BY number ASC
)
ORDER BY number ASC
0 0
1 1

View File

@ -47,10 +47,39 @@
24 24
0 0
0 0
SELECT \n number % 2 AS a,\n number % 3 AS b\nFROM numbers(10000000)\nGROUP BY \n number % 2,\n number % 3\nORDER BY \n min(number % 2) AS a ASC,\n max(number % 3) AS b ASC SELECT
SELECT \n number % 2 AS a,\n number % 3 AS b\nFROM numbers(10000000)\nGROUP BY \n number % 2,\n number % 3\nORDER BY \n any(number % 2) AS a ASC,\n anyLast(number % 3) AS b ASC number % 2 AS a,
SELECT (number % 5) * (number % 7) AS a\nFROM numbers(10000000)\nGROUP BY \n number % 7,\n number % 5\nORDER BY max((number % 5) * (number % 7)) AS a ASC number % 3 AS b
SELECT foo\nFROM \n(\n SELECT number AS foo\n FROM numbers(1)\n GROUP BY number\n) FROM numbers(10000000)
GROUP BY
number % 2,
number % 3
ORDER BY
min(number % 2) AS a ASC,
max(number % 3) AS b ASC
SELECT
number % 2 AS a,
number % 3 AS b
FROM numbers(10000000)
GROUP BY
number % 2,
number % 3
ORDER BY
any(number % 2) AS a ASC,
anyLast(number % 3) AS b ASC
SELECT (number % 5) * (number % 7) AS a
FROM numbers(10000000)
GROUP BY
number % 7,
number % 5
ORDER BY max((number % 5) * (number % 7)) AS a ASC
SELECT foo
FROM
(
SELECT number AS foo
FROM numbers(1)
GROUP BY number
)
0 0 0 0
0 1 0 1
0 2 0 2
@ -99,7 +128,36 @@ SELECT foo\nFROM \n(\n SELECT number AS foo\n FROM numbers(1)\n GROUP B
20 20
24 24
0 0
SELECT \n min(number % 2) AS a,\n max(number % 3) AS b\nFROM numbers(10000000)\nGROUP BY \n number % 2,\n number % 3\nORDER BY \n a ASC,\n b ASC SELECT
SELECT \n any(number % 2) AS a,\n anyLast(number % 3) AS b\nFROM numbers(10000000)\nGROUP BY \n number % 2,\n number % 3\nORDER BY \n a ASC,\n b ASC min(number % 2) AS a,
SELECT max((number % 5) * (number % 7)) AS a\nFROM numbers(10000000)\nGROUP BY \n number % 7,\n number % 5\nORDER BY a ASC max(number % 3) AS b
SELECT foo\nFROM \n(\n SELECT anyLast(number) AS foo\n FROM numbers(1)\n GROUP BY number\n) FROM numbers(10000000)
GROUP BY
number % 2,
number % 3
ORDER BY
a ASC,
b ASC
SELECT
any(number % 2) AS a,
anyLast(number % 3) AS b
FROM numbers(10000000)
GROUP BY
number % 2,
number % 3
ORDER BY
a ASC,
b ASC
SELECT max((number % 5) * (number % 7)) AS a
FROM numbers(10000000)
GROUP BY
number % 7,
number % 5
ORDER BY a ASC
SELECT foo
FROM
(
SELECT anyLast(number) AS foo
FROM numbers(1)
GROUP BY number
)

View File

@ -1,2 +1,3 @@
9 9
SELECT any(number) + (any(number) * 2)\nFROM numbers(3, 10) SELECT any(number) + (any(number) * 2)
FROM numbers(3, 10)