diff --git a/CHANGELOG.md b/CHANGELOG.md index 59343cd9936..7fa13dacdf9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,109 @@ +## ClickHouse release 19.5.2.6, 2019-04-15 + +### New Features + +* [Hyperscan](https://github.com/intel/hyperscan) multiple regular expression matching was added (functions `multiMatchAny`, `multiMatchAnyIndex`, `multiFuzzyMatchAny`, `multiFuzzyMatchAnyIndex`). [#4780](https://github.com/yandex/ClickHouse/pull/4780), [#4841](https://github.com/yandex/ClickHouse/pull/4841) ([Danila Kutenin](https://github.com/danlark1)) +* `multiSearchFirstPosition` function was added. [#4780](https://github.com/yandex/ClickHouse/pull/4780) ([Danila Kutenin](https://github.com/danlark1)) +* Implement the predefined expression filter per row for tables. [#4792](https://github.com/yandex/ClickHouse/pull/4792) ([Ivan](https://github.com/abyss7)) +* A new type of data skipping indices based on bloom filters (can be used for `equal`, `in` and `like` functions). [#4499](https://github.com/yandex/ClickHouse/pull/4499) ([Nikita Vasilev](https://github.com/nikvas0)) +* Added `ASOF JOIN` which allows to run queries that join to the most recent value known. [#4774](https://github.com/yandex/ClickHouse/pull/4774) [#4867](https://github.com/yandex/ClickHouse/pull/4867) [#4863](https://github.com/yandex/ClickHouse/pull/4863) [#4875](https://github.com/yandex/ClickHouse/pull/4875) ([Martijn Bakker](https://github.com/Gladdy), [Artem Zuikov](https://github.com/4ertus2)) +* Rewrite multiple `COMMA JOIN` to `CROSS JOIN`. Then rewrite them to `INNER JOIN` if possible. [#4661](https://github.com/yandex/ClickHouse/pull/4661) ([Artem Zuikov](https://github.com/4ertus2)) + +### Improvement + +* `topK` and `topKWeighted` now supports custom `loadFactor` (fixes issue [#4252](https://github.com/yandex/ClickHouse/issues/4252)). [#4634](https://github.com/yandex/ClickHouse/pull/4634) ([Kirill Danshin](https://github.com/kirillDanshin)) +* Allow to use `parallel_replicas_count > 1` even for tables without sampling (the setting is simply ignored for them). In previous versions it was lead to exception. [#4637](https://github.com/yandex/ClickHouse/pull/4637) ([Alexey Elymanov](https://github.com/digitalist)) +* Support for `CREATE OR REPLACE VIEW`. Allow to create a view or set a new definition in a single statement. [#4654](https://github.com/yandex/ClickHouse/pull/4654) ([Boris Granveaud](https://github.com/bgranvea)) +* `Buffer` table engine now supports `PREWHERE`. [#4671](https://github.com/yandex/ClickHouse/pull/4671) ([Yangkuan Liu](https://github.com/LiuYangkuan)) +* Add ability to start replicated table without metadata in zookeeper in `readonly` mode. [#4691](https://github.com/yandex/ClickHouse/pull/4691) ([alesapin](https://github.com/alesapin)) +* Fixed flicker of progress bar in clickhouse-client. The issue was most noticeable when using `FORMAT Null` with streaming queries. [#4811](https://github.com/yandex/ClickHouse/pull/4811) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Allow to disable functions with `hyperscan` library on per user basis to limit potentially excessive and uncontrolled resource usage. [#4816](https://github.com/yandex/ClickHouse/pull/4816) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Add version number logging in all errors. [#4824](https://github.com/yandex/ClickHouse/pull/4824) ([proller](https://github.com/proller)) +* Added restriction to the `multiMatch` functions which requires string size to fit into `unsigned int`. Also added the number of arguments limit to the `multiSearch` functions. [#4834](https://github.com/yandex/ClickHouse/pull/4834) ([Danila Kutenin](https://github.com/danlark1)) +* Improved usage of scratch space and error handling in Hyperscan. [#4866](https://github.com/yandex/ClickHouse/pull/4866) ([Danila Kutenin](https://github.com/danlark1)) +* Fill `system.graphite_detentions` from a table config of `*GraphiteMergeTree` engine tables. [#4584](https://github.com/yandex/ClickHouse/pull/4584) ([Mikhail f. Shiryaev](https://github.com/Felixoid)) +* Rename `trigramDistance` function to `ngramDistance` and add more functions with `CaseInsensitive` and `UTF`. [#4602](https://github.com/yandex/ClickHouse/pull/4602) ([Danila Kutenin](https://github.com/danlark1)) +* Improved data skipping indices calculation. [#4640](https://github.com/yandex/ClickHouse/pull/4640) ([Nikita Vasilev](https://github.com/nikvas0)) + +### Bug Fix + +* Avoid `std::terminate` in case of memory allocation failure. Now `std::bad_alloc` exception is thrown as expected. [#4665](https://github.com/yandex/ClickHouse/pull/4665) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Fixes capnproto reading from buffer. Sometimes files wasn't loaded successfully by HTTP. [#4674](https://github.com/yandex/ClickHouse/pull/4674) ([Vladislav](https://github.com/smirnov-vs)) +* Fix error `Unknown log entry type: 0` after `OPTIMIZE TABLE FINAL` query. [#4683](https://github.com/yandex/ClickHouse/pull/4683) ([Amos Bird](https://github.com/amosbird)) +* Wrong arguments to `hasAny` or `hasAll` functions may lead to segfault. [#4698](https://github.com/yandex/ClickHouse/pull/4698) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Deadlock may happen while executing `DROP DATABASE dictionary` query. [#4701](https://github.com/yandex/ClickHouse/pull/4701) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Fix undefinied behavior in `median` and `quantile` functions. [#4702](https://github.com/yandex/ClickHouse/pull/4702) ([hcz](https://github.com/hczhcz)) +* Fix compression level detection when `network_compression_method` in lowercase. Broken in v19.1. [#4706](https://github.com/yandex/ClickHouse/pull/4706) ([proller](https://github.com/proller)) +* Keep ordinary, `DEFAULT`, `MATERIALIZED` and `ALIAS` columns in a single list (fixes issue [#2867](https://github.com/yandex/ClickHouse/issues/2867)). [#4707](https://github.com/yandex/ClickHouse/pull/4707) ([Alex Zatelepin](https://github.com/ztlpn)) +* Fixed ignorance of `UTC` setting (fixes issue [#4658](https://github.com/yandex/ClickHouse/issues/4658)). [#4718](https://github.com/yandex/ClickHouse/pull/4718) ([proller](https://github.com/proller)) +* Fix `histogram` function behaviour with `Distributed` tables. [#4741](https://github.com/yandex/ClickHouse/pull/4741) ([olegkv](https://github.com/olegkv)) +* Fixed tsan report `destroy of a locked mutex`. [#4742](https://github.com/yandex/ClickHouse/pull/4742) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Fixed TSan report on shutdown due to race condition in system logs usage. Fixed potential use-after-free on shutdown when part_log is enabled. [#4758](https://github.com/yandex/ClickHouse/pull/4758) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Fix recheck parts in `ReplicatedMergeTreeAlterThread` in case of error. [#4772](https://github.com/yandex/ClickHouse/pull/4772) ([Nikolai Kochetov](https://github.com/KochetovNicolai)) +* Arithmetic operations on intermediate aggregate function states were not working for constant arguments (such as subquery results). [#4776](https://github.com/yandex/ClickHouse/pull/4776) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Always backquote column names in metadata. Otherwise it's impossible to create a table with column named `index` (server won't restart due to malformed `ATTACH` query in metadata). [#4782](https://github.com/yandex/ClickHouse/pull/4782) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Fix crash in `ALTER ... MODIFY ORDER BY` on `Distributed` table. [#4790](https://github.com/yandex/ClickHouse/pull/4790) ([TCeason](https://github.com/TCeason)) +* Fix segfault in `JOIN ON` with enabled `enable_optimize_predicate_expression`. [#4794](https://github.com/yandex/ClickHouse/pull/4794) ([Winter Zhang](https://github.com/zhang2014)) +* Fix bug with adding an extraneous row after consuming a protobuf message from Kafka. [#4808](https://github.com/yandex/ClickHouse/pull/4808) ([Vitaly Baranov](https://github.com/vitlibar)) +* Fix crash of `JOIN` on not-nullable vs nullable column. Fix `NULLs` in right keys in `ANY JOIN` + `join_use_nulls`. [#4815](https://github.com/yandex/ClickHouse/pull/4815) ([Artem Zuikov](https://github.com/4ertus2)) +* Fix segmentation fault in `clickhouse-copier`. [#4835](https://github.com/yandex/ClickHouse/pull/4835) ([proller](https://github.com/proller)) +* Fixed race condition in `SELECT` from `system.tables` if the table is renamed or altered concurrently. [#4836](https://github.com/yandex/ClickHouse/pull/4836) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Fixed data race when fetching data part that is already obsolete. [#4839](https://github.com/yandex/ClickHouse/pull/4839) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Fixed rare data race that can happen during `RENAME` table of MergeTree family. [#4844](https://github.com/yandex/ClickHouse/pull/4844) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Fixed segmentation fault in function `arrayIntersect`. Segmentation fault could happen if function was called with mixed constant and ordinary arguments. [#4847](https://github.com/yandex/ClickHouse/pull/4847) ([Lixiang Qian](https://github.com/fancyqlx)) +* Fixed reading from `Array(LowCardinality)` column in rare case when column contained a long sequence of empty arrays. [#4850](https://github.com/yandex/ClickHouse/pull/4850) ([Nikolai Kochetov](https://github.com/KochetovNicolai)) +* Fix crash in `FULL/RIGHT JOIN` when we joining on nullable vs not nullable. [#4855](https://github.com/yandex/ClickHouse/pull/4855) ([Artem Zuikov](https://github.com/4ertus2)) +* Fix `No message received` exception while fetching parts between replicas. [#4856](https://github.com/yandex/ClickHouse/pull/4856) ([alesapin](https://github.com/alesapin)) +* Fixed `arrayIntersect` function wrong result in case of several repeated values in single array. [#4871](https://github.com/yandex/ClickHouse/pull/4871) ([Nikolai Kochetov](https://github.com/KochetovNicolai)) +* Fix a race condition during concurrent `ALTER COLUMN` queries that could lead to a server crash (fixes issue [#3421](https://github.com/yandex/ClickHouse/issues/3421)). [#4592](https://github.com/yandex/ClickHouse/pull/4592) ([Alex Zatelepin](https://github.com/ztlpn)) +* Fix incorrect result in `FULL/RIGHT JOIN` with const column. [#4723](https://github.com/yandex/ClickHouse/pull/4723) ([Artem Zuikov](https://github.com/4ertus2)) +* Fix duplicates in `GLOBAL JOIN` with asterisk. [#4705](https://github.com/yandex/ClickHouse/pull/4705) ([Artem Zuikov](https://github.com/4ertus2)) +* Fix parameter deduction in `ALTER MODIFY` of column `CODEC` when column type is not specified. [#4883](https://github.com/yandex/ClickHouse/pull/4883) ([alesapin](https://github.com/alesapin)) +* Functions `cutQueryStringAndFragment()` and `queryStringAndFragment()` now works correctly when `URL` contains a fragment and no query. [#4894](https://github.com/yandex/ClickHouse/pull/4894) ([Vitaly Baranov](https://github.com/vitlibar)) +* Fix rare bug when setting `min_bytes_to_use_direct_io` is greater than zero, which occures when thread have to seek backward in column file. [#4897](https://github.com/yandex/ClickHouse/pull/4897) ([alesapin](https://github.com/alesapin)) +* Fix wrong argument types for aggregate functions with `LowCardinality` arguments (fixes issue [#4919](https://github.com/yandex/ClickHouse/issues/4919)). [#4922](https://github.com/yandex/ClickHouse/pull/4922) ([Nikolai Kochetov](https://github.com/KochetovNicolai)) +* Fix wrong name qualification in `GLOBAL JOIN`. [#4969](https://github.com/yandex/ClickHouse/pull/4969) ([Artem Zuikov](https://github.com/4ertus2)) +* Function `toISOWeek` result for year 1970. [#4988](https://github.com/yandex/ClickHouse/pull/4988) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Fix `DROP`, `TRUNCATE` and `OPTIMIZE` queries duplication, when executed on `ON CLUSTER` for `ReplicatedMergeTree*` tables family. [#4991](https://github.com/yandex/ClickHouse/pull/4991) ([alesapin](https://github.com/alesapin)) + +### Backward Incompatible Change + +* Rename setting `insert_sample_with_metadata` to setting `input_format_defaults_for_omitted_fields`. [#4771](https://github.com/yandex/ClickHouse/pull/4771) ([Artem Zuikov](https://github.com/4ertus2)) +* Added setting `max_partitions_per_insert_block` (with value 100 by default). If inserted block contains larger number of partitions, an exception is thrown. Set it to 0 if you want to remove the limit (not recommended). [#4845](https://github.com/yandex/ClickHouse/pull/4845) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Multi-search functions were renamed (`multiPosition` to `multiSearchAllPositions`, `multiSearch` to `multiSearchAny`, `firstMatch` to `multiSearchFirstIndex`). [#4780](https://github.com/yandex/ClickHouse/pull/4780) ([Danila Kutenin](https://github.com/danlark1)) + +### Performance Improvement + +* Optimize Volnitsky searcher by inlining, giving about 5-10% search improvement for queries with many needles or many similar bigrams. [#4862](https://github.com/yandex/ClickHouse/pull/4862) ([Danila Kutenin](https://github.com/danlark1)) +* Fix performance issue when setting `use_uncompressed_cache` is greater than zero, which appeared when all read data contained in cache. [#4913](https://github.com/yandex/ClickHouse/pull/4913) ([alesapin](https://github.com/alesapin)) + + +### Build/Testing/Packaging Improvement + +* Hardening debug build: more granular memory mappings and ASLR; add memory protection for mark cache and index. This allows to find more memory stomping bugs in case when ASan and MSan cannot do it. [#4632](https://github.com/yandex/ClickHouse/pull/4632) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Add support for cmake variables `ENABLE_PROTOBUF`, `ENABLE_PARQUET` and `ENABLE_BROTLI` which allows to enable/disable the above features (same as we can do for librdkafka, mysql, etc). [#4669](https://github.com/yandex/ClickHouse/pull/4669) ([Silviu Caragea](https://github.com/silviucpp)) +* Add ability to print process list and stacktraces of all threads if some queries are hung after test run. [#4675](https://github.com/yandex/ClickHouse/pull/4675) ([alesapin](https://github.com/alesapin)) +* Add retries on `Connection loss` error in `clickhouse-test`. [#4682](https://github.com/yandex/ClickHouse/pull/4682) ([alesapin](https://github.com/alesapin)) +* Add freebsd build with vagrant and build with thread sanitizer to packager script. [#4712](https://github.com/yandex/ClickHouse/pull/4712) [#4748](https://github.com/yandex/ClickHouse/pull/4748) ([alesapin](https://github.com/alesapin)) +* Now user asked for password for user `'default'` during installation. [#4725](https://github.com/yandex/ClickHouse/pull/4725) ([proller](https://github.com/proller)) +* Suppress warning in `rdkafka` library. [#4740](https://github.com/yandex/ClickHouse/pull/4740) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Allow ability to build without ssl. [#4750](https://github.com/yandex/ClickHouse/pull/4750) ([proller](https://github.com/proller)) +* Add a way to launch clickhouse-server image from a custom user. [#4753](https://github.com/yandex/ClickHouse/pull/4753) ([Mikhail f. Shiryaev](https://github.com/Felixoid)) +* Upgrade contrib boost to 1.69. [#4793](https://github.com/yandex/ClickHouse/pull/4793) ([proller](https://github.com/proller)) +* Disable usage of `mremap` when compiled with Thread Sanitizer. Surprisingly enough, TSan does not intercept `mremap` (though it does intercept `mmap`, `munmap`) that leads to false positives. Fixed TSan report in stateful tests. [#4859](https://github.com/yandex/ClickHouse/pull/4859) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Add test checking using format schema via HTTP interface. [#4864](https://github.com/yandex/ClickHouse/pull/4864) ([Vitaly Baranov](https://github.com/vitlibar)) + +## ClickHouse release 19.4.3.11, 2019-04-02 + +### Bug Fixes + +* Fix crash in `FULL/RIGHT JOIN` when we joining on nullable vs not nullable. [#4855](https://github.com/yandex/ClickHouse/pull/4855) ([Artem Zuikov](https://github.com/4ertus2)) +* Fix segmentation fault in `clickhouse-copier`. [#4835](https://github.com/yandex/ClickHouse/pull/4835) ([proller](https://github.com/proller)) + +### Build/Testing/Packaging Improvement + +* Add a way to launch clickhouse-server image from a custom user. [#4753](https://github.com/yandex/ClickHouse/pull/4753) ([Mikhail f. Shiryaev](https://github.com/Felixoid)) + ## ClickHouse release 19.4.2.7, 2019-03-30 ### Bug Fixes @@ -13,11 +119,11 @@ ### New Features * Added full support for `Protobuf` format (input and output, nested data structures). [#4174](https://github.com/yandex/ClickHouse/pull/4174) [#4493](https://github.com/yandex/ClickHouse/pull/4493) ([Vitaly Baranov](https://github.com/vitlibar)) * Added bitmap functions with Roaring Bitmaps. [#4207](https://github.com/yandex/ClickHouse/pull/4207) ([Andy Yang](https://github.com/andyyzh)) [#4568](https://github.com/yandex/ClickHouse/pull/4568) ([Vitaly Baranov](https://github.com/vitlibar)) -* Parquet format support [#4448](https://github.com/yandex/ClickHouse/pull/4448) ([proller](https://github.com/proller)) +* Parquet format support. [#4448](https://github.com/yandex/ClickHouse/pull/4448) ([proller](https://github.com/proller)) * N-gram distance was added for fuzzy string comparison. It is similar to q-gram metrics in R language. [#4466](https://github.com/yandex/ClickHouse/pull/4466) ([Danila Kutenin](https://github.com/danlark1)) * Combine rules for graphite rollup from dedicated aggregation and retention patterns. [#4426](https://github.com/yandex/ClickHouse/pull/4426) ([Mikhail f. Shiryaev](https://github.com/Felixoid)) * Added `max_execution_speed` and `max_execution_speed_bytes` to limit resource usage. Added `min_execution_speed_bytes` setting to complement the `min_execution_speed`. [#4430](https://github.com/yandex/ClickHouse/pull/4430) ([Winter Zhang](https://github.com/zhang2014)) -* Implemented function `flatten` [#4555](https://github.com/yandex/ClickHouse/pull/4555) [#4409](https://github.com/yandex/ClickHouse/pull/4409) ([alexey-milovidov](https://github.com/alexey-milovidov), [kzon](https://github.com/kzon)) +* Implemented function `flatten`. [#4555](https://github.com/yandex/ClickHouse/pull/4555) [#4409](https://github.com/yandex/ClickHouse/pull/4409) ([alexey-milovidov](https://github.com/alexey-milovidov), [kzon](https://github.com/kzon)) * Added functions `arrayEnumerateDenseRanked` and `arrayEnumerateUniqRanked` (it's like `arrayEnumerateUniq` but allows to fine tune array depth to look inside multidimensional arrays). [#4475](https://github.com/yandex/ClickHouse/pull/4475) ([proller](https://github.com/proller)) [#4601](https://github.com/yandex/ClickHouse/pull/4601) ([alexey-milovidov](https://github.com/alexey-milovidov)) * Multiple JOINS with some restrictions: no asterisks, no complex aliases in ON/WHERE/GROUP BY/... [#4462](https://github.com/yandex/ClickHouse/pull/4462) ([Artem Zuikov](https://github.com/4ertus2)) @@ -26,25 +132,25 @@ * Fixed bug in data skipping indices: order of granules after INSERT was incorrect. [#4407](https://github.com/yandex/ClickHouse/pull/4407) ([Nikita Vasilev](https://github.com/nikvas0)) * Fixed `set` index for `Nullable` and `LowCardinality` columns. Before it, `set` index with `Nullable` or `LowCardinality` column led to error `Data type must be deserialized with multiple streams` while selecting. [#4594](https://github.com/yandex/ClickHouse/pull/4594) ([Nikolai Kochetov](https://github.com/KochetovNicolai)) * Correctly set update_time on full `executable` dictionary update. [#4551](https://github.com/yandex/ClickHouse/pull/4551) ([Tema Novikov](https://github.com/temoon)) -* Fix broken progress bar in 19.3 [#4627](https://github.com/yandex/ClickHouse/pull/4627) ([filimonov](https://github.com/filimonov)) +* Fix broken progress bar in 19.3. [#4627](https://github.com/yandex/ClickHouse/pull/4627) ([filimonov](https://github.com/filimonov)) * Fixed inconsistent values of MemoryTracker when memory region was shrinked, in certain cases. [#4619](https://github.com/yandex/ClickHouse/pull/4619) ([alexey-milovidov](https://github.com/alexey-milovidov)) -* Fixed undefined behaviour in ThreadPool [#4612](https://github.com/yandex/ClickHouse/pull/4612) ([alexey-milovidov](https://github.com/alexey-milovidov)) +* Fixed undefined behaviour in ThreadPool. [#4612](https://github.com/yandex/ClickHouse/pull/4612) ([alexey-milovidov](https://github.com/alexey-milovidov)) * Fixed a very rare crash with the message `mutex lock failed: Invalid argument` that could happen when a MergeTree table was dropped concurrently with a SELECT. [#4608](https://github.com/yandex/ClickHouse/pull/4608) ([Alex Zatelepin](https://github.com/ztlpn)) -* ODBC driver compatibility with `LowCardinality` data type [#4381](https://github.com/yandex/ClickHouse/pull/4381) ([proller](https://github.com/proller)) -* FreeBSD: Fixup for `AIOcontextPool: Found io_event with unknown id 0` error [#4438](https://github.com/yandex/ClickHouse/pull/4438) ([urgordeadbeef](https://github.com/urgordeadbeef)) +* ODBC driver compatibility with `LowCardinality` data type. [#4381](https://github.com/yandex/ClickHouse/pull/4381) ([proller](https://github.com/proller)) +* FreeBSD: Fixup for `AIOcontextPool: Found io_event with unknown id 0` error. [#4438](https://github.com/yandex/ClickHouse/pull/4438) ([urgordeadbeef](https://github.com/urgordeadbeef)) * `system.part_log` table was created regardless to configuration. [#4483](https://github.com/yandex/ClickHouse/pull/4483) ([alexey-milovidov](https://github.com/alexey-milovidov)) * Fix undefined behaviour in `dictIsIn` function for cache dictionaries. [#4515](https://github.com/yandex/ClickHouse/pull/4515) ([alesapin](https://github.com/alesapin)) * Fixed a deadlock when a SELECT query locks the same table multiple times (e.g. from different threads or when executing multiple subqueries) and there is a concurrent DDL query. [#4535](https://github.com/yandex/ClickHouse/pull/4535) ([Alex Zatelepin](https://github.com/ztlpn)) * Disable compile_expressions by default until we get own `llvm` contrib and can test it with `clang` and `asan`. [#4579](https://github.com/yandex/ClickHouse/pull/4579) ([alesapin](https://github.com/alesapin)) * Prevent `std::terminate` when `invalidate_query` for `clickhouse` external dictionary source has returned wrong resultset (empty or more than one row or more than one column). Fixed issue when the `invalidate_query` was performed every five seconds regardless to the `lifetime`. [#4583](https://github.com/yandex/ClickHouse/pull/4583) ([alexey-milovidov](https://github.com/alexey-milovidov)) * Avoid deadlock when the `invalidate_query` for a dictionary with `clickhouse` source was involving `system.dictionaries` table or `Dictionaries` database (rare case). [#4599](https://github.com/yandex/ClickHouse/pull/4599) ([alexey-milovidov](https://github.com/alexey-milovidov)) -* Fixes for CROSS JOIN with empty WHERE [#4598](https://github.com/yandex/ClickHouse/pull/4598) ([Artem Zuikov](https://github.com/4ertus2)) +* Fixes for CROSS JOIN with empty WHERE. [#4598](https://github.com/yandex/ClickHouse/pull/4598) ([Artem Zuikov](https://github.com/4ertus2)) * Fixed segfault in function "replicate" when constant argument is passed. [#4603](https://github.com/yandex/ClickHouse/pull/4603) ([alexey-milovidov](https://github.com/alexey-milovidov)) * Fix lambda function with predicate optimizer. [#4408](https://github.com/yandex/ClickHouse/pull/4408) ([Winter Zhang](https://github.com/zhang2014)) * Multiple JOINs multiple fixes. [#4595](https://github.com/yandex/ClickHouse/pull/4595) ([Artem Zuikov](https://github.com/4ertus2)) ### Improvements -* Support aliases in JOIN ON section for right table columns [#4412](https://github.com/yandex/ClickHouse/pull/4412) ([Artem Zuikov](https://github.com/4ertus2)) +* Support aliases in JOIN ON section for right table columns. [#4412](https://github.com/yandex/ClickHouse/pull/4412) ([Artem Zuikov](https://github.com/4ertus2)) * Result of multiple JOINs need correct result names to be used in subselects. Replace flat aliases with source names in result. [#4474](https://github.com/yandex/ClickHouse/pull/4474) ([Artem Zuikov](https://github.com/4ertus2)) * Improve push-down logic for joined statements. [#4387](https://github.com/yandex/ClickHouse/pull/4387) ([Ivan](https://github.com/abyss7)) @@ -67,6 +173,18 @@ * Fix compilation on Mac. [#4371](https://github.com/yandex/ClickHouse/pull/4371) ([Vitaly Baranov](https://github.com/vitlibar)) * Build fixes for FreeBSD and various unusual build configurations. [#4444](https://github.com/yandex/ClickHouse/pull/4444) ([proller](https://github.com/proller)) +## ClickHouse release 19.3.9.1, 2019-04-02 + +### Bug Fixes + +* Fix crash in `FULL/RIGHT JOIN` when we joining on nullable vs not nullable. [#4855](https://github.com/yandex/ClickHouse/pull/4855) ([Artem Zuikov](https://github.com/4ertus2)) +* Fix segmentation fault in `clickhouse-copier`. [#4835](https://github.com/yandex/ClickHouse/pull/4835) ([proller](https://github.com/proller)) +* Fixed reading from `Array(LowCardinality)` column in rare case when column contained a long sequence of empty arrays. [#4850](https://github.com/yandex/ClickHouse/pull/4850) ([Nikolai Kochetov](https://github.com/KochetovNicolai)) + +### Build/Testing/Packaging Improvement + +* Add a way to launch clickhouse-server image from a custom user [#4753](https://github.com/yandex/ClickHouse/pull/4753) ([Mikhail f. Shiryaev](https://github.com/Felixoid)) + ## ClickHouse release 19.3.7, 2019-03-12 diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c4802295a7..45ee1dfbb41 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -317,6 +317,7 @@ include (cmake/find_hdfs3.cmake) # uses protobuf include (cmake/find_consistent-hashing.cmake) include (cmake/find_base64.cmake) include (cmake/find_hyperscan.cmake) +include (cmake/find_lfalloc.cmake) find_contrib_lib(cityhash) find_contrib_lib(farmhash) find_contrib_lib(metrohash) diff --git a/README.md b/README.md index 0e9974f763f..02a50be007b 100644 --- a/README.md +++ b/README.md @@ -10,3 +10,10 @@ ClickHouse is an open-source column-oriented database management system that all * [Blog](https://clickhouse.yandex/blog/en/) contains various ClickHouse-related articles, as well as announces and reports about events. * [Contacts](https://clickhouse.yandex/#contacts) can help to get your questions answered if there are any. * You can also [fill this form](https://forms.yandex.com/surveys/meet-yandex-clickhouse-team/) to meet Yandex ClickHouse team in person. + +## Upcoming Events +* [ClickHouse Community Meetup in Limassol](https://www.facebook.com/events/386638262181785/) on May 7. +* ClickHouse at [Percona Live 2019](https://www.percona.com/live/19/other-open-source-databases-track) in Austin on May 28-30. +* [ClickHouse Community Meetup in Beijing](https://www.huodongxing.com/event/2483759276200) on June 8. +* [ClickHouse Community Meetup in Shenzhen](https://www.huodongxing.com/event/3483759917300) on October 20. +* [ClickHouse Community Meetup in Shanghai](https://www.huodongxing.com/event/4483760336000) on October 27. diff --git a/cmake/find_lfalloc.cmake b/cmake/find_lfalloc.cmake new file mode 100644 index 00000000000..c9b2ce5d436 --- /dev/null +++ b/cmake/find_lfalloc.cmake @@ -0,0 +1,10 @@ +if (NOT SANITIZE AND NOT ARCH_ARM AND NOT ARCH_32 AND NOT ARCH_PPC64LE AND NOT OS_FREEBSD) + option (ENABLE_LFALLOC "Set to FALSE to use system libgsasl library instead of bundled" ${NOT_UNBUNDLED}) +endif () + +if (ENABLE_LFALLOC) + set (USE_LFALLOC 1) + set (USE_LFALLOC_RANDOM_HINT 1) + set (LFALLOC_INCLUDE_DIR ${ClickHouse_SOURCE_DIR}/contrib/lfalloc/src) + message (STATUS "Using lfalloc=${USE_LFALLOC}: ${LFALLOC_INCLUDE_DIR}") +endif () diff --git a/cmake/find_poco.cmake b/cmake/find_poco.cmake index 012f269d48d..07d81c1bbe8 100644 --- a/cmake/find_poco.cmake +++ b/cmake/find_poco.cmake @@ -36,6 +36,8 @@ elseif (NOT MISSING_INTERNAL_POCO_LIBRARY) set (ENABLE_DATA_SQLITE 0 CACHE BOOL "") set (ENABLE_DATA_MYSQL 0 CACHE BOOL "") set (ENABLE_DATA_POSTGRESQL 0 CACHE BOOL "") + set (ENABLE_ENCODINGS 0 CACHE BOOL "") + # new after 2.0.0: set (POCO_ENABLE_ZIP 0 CACHE BOOL "") set (POCO_ENABLE_PAGECOMPILER 0 CACHE BOOL "") diff --git a/contrib/lfalloc/src/lf_allocX64.h b/contrib/lfalloc/src/lf_allocX64.h new file mode 100644 index 00000000000..2c4cf3f1021 --- /dev/null +++ b/contrib/lfalloc/src/lf_allocX64.h @@ -0,0 +1,1813 @@ +#pragma once + +#include +#include +#include + +#include "lfmalloc.h" + +#include "util/system/compiler.h" +#include "util/system/types.h" +#include + +#ifdef _MSC_VER +#ifndef _CRT_SECURE_NO_WARNINGS +#define _CRT_SECURE_NO_WARNINGS +#endif +#ifdef _M_X64 +#define _64_ +#endif +#include +#define WIN32_LEAN_AND_MEAN +#include +#pragma intrinsic(_InterlockedCompareExchange) +#pragma intrinsic(_InterlockedExchangeAdd) + +#include +#include +#include + +#define PERTHREAD __declspec(thread) +#define _win_ +#define Y_FORCE_INLINE __forceinline + +using TAtomic = volatile long; + +static inline long AtomicAdd(TAtomic& a, long b) { + return _InterlockedExchangeAdd(&a, b) + b; +} + +static inline long AtomicSub(TAtomic& a, long b) { + return AtomicAdd(a, -b); +} + +#define Y_ASSERT_NOBT(x) ((void)0) + +#else + +#include "util/system/defaults.h" +#include "util/system/atomic.h" +#include + +#if !defined(NDEBUG) && !defined(__GCCXML__) +#define Y_ASSERT_NOBT(a) \ + do { \ + if (Y_UNLIKELY(!(a))) { \ + assert(false && (a)); \ + } \ + } while (0) +#else +#define Y_ASSERT_NOBT(a) \ + do { \ + if (false) { \ + bool __xxx = static_cast(a); \ + Y_UNUSED(__xxx); \ + } \ + } while (0) +#endif + +#include +#include +#include +#include +#include +#include + +#if defined(_linux_) +#if !defined(MADV_HUGEPAGE) +#define MADV_HUGEPAGE 14 +#endif +#if !defined(MAP_HUGETLB) +#define MAP_HUGETLB 0x40000 +#endif +#endif + +#define PERTHREAD __thread + +#endif + +#ifndef _darwin_ + +#ifndef Y_ARRAY_SIZE +#define Y_ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) +#endif + +#ifndef NDEBUG +#define DBG_FILL_MEMORY +static bool FillMemoryOnAllocation = true; +#endif + +static bool TransparentHugePages = false; // force MADV_HUGEPAGE for large allocs +static bool MapHugeTLB = false; // force MAP_HUGETLB for small allocs +static bool EnableDefrag = true; + +// Buffers that are larger than this size will not be filled with 0xcf +#ifndef DBG_FILL_MAX_SIZE +#define DBG_FILL_MAX_SIZE 0x01000000000000ULL +#endif + +template +inline T* DoCas(T* volatile* target, T* exchange, T* compare) { +#if defined(_linux_) + return __sync_val_compare_and_swap(target, compare, exchange); +#elif defined(_WIN32) +#ifdef _64_ + return (T*)_InterlockedCompareExchange64((__int64*)target, (__int64)exchange, (__int64)compare); +#else + //return (T*)InterlockedCompareExchangePointer(targetVoidP, exchange, compare); + return (T*)_InterlockedCompareExchange((LONG*)target, (LONG)exchange, (LONG)compare); +#endif +#elif defined(__i386) || defined(__x86_64__) + union { + T* volatile* NP; + void* volatile* VoidP; + } gccSucks; + gccSucks.NP = target; + void* volatile* targetVoidP = gccSucks.VoidP; + + __asm__ __volatile__( + "lock\n\t" + "cmpxchg %2,%0\n\t" + : "+m"(*(targetVoidP)), "+a"(compare) + : "r"(exchange) + : "cc", "memory"); + return compare; +#else +#error inline_cas not defined for this platform +#endif +} + +#ifdef _64_ +const uintptr_t N_MAX_WORKSET_SIZE = 0x100000000ll * 200; +const uintptr_t N_HUGE_AREA_FINISH = 0x700000000000ll; +#ifndef _freebsd_ +const uintptr_t LINUX_MMAP_AREA_START = 0x100000000ll; +static uintptr_t volatile linuxAllocPointer = LINUX_MMAP_AREA_START; +static uintptr_t volatile linuxAllocPointerHuge = LINUX_MMAP_AREA_START + N_MAX_WORKSET_SIZE; +#endif +#else +const uintptr_t N_MAX_WORKSET_SIZE = 0xffffffff; +#endif +#define ALLOC_START ((char*)0) + +const size_t N_CHUNK_SIZE = 1024 * 1024; +const size_t N_CHUNKS = N_MAX_WORKSET_SIZE / N_CHUNK_SIZE; +const size_t N_LARGE_ALLOC_SIZE = N_CHUNK_SIZE * 128; + +// map size idx to size in bytes +#ifdef LFALLOC_YT +const int N_SIZES = 27; +#else +const int N_SIZES = 25; +#endif +const int nSizeIdxToSize[N_SIZES] = { + -1, +#if defined(_64_) + 16, 16, 32, 32, 48, 64, 96, 128, +#else + 8, + 16, + 24, + 32, + 48, + 64, + 96, + 128, +#endif + 192, 256, 384, 512, 768, 1024, 1536, 2048, + 3072, 4096, 6144, 8192, 12288, 16384, 24576, 32768, +#ifdef LFALLOC_YT + 49152, 65536 +#endif +}; +#ifdef LFALLOC_YT +const size_t N_MAX_FAST_SIZE = 65536; +#else +const size_t N_MAX_FAST_SIZE = 32768; +#endif +const unsigned char size2idxArr1[64 + 1] = { + 1, +#if defined(_64_) + 2, 2, 4, 4, // 16, 16, 32, 32 +#else + 1, 2, 3, 4, // 8, 16, 24, 32 +#endif + 5, 5, 6, 6, // 48, 64 + 7, 7, 7, 7, 8, 8, 8, 8, // 96, 128 + 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, // 192, 256 + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, // 384 + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12 // 512 +}; +#ifdef LFALLOC_YT +const unsigned char size2idxArr2[256] = { +#else +const unsigned char size2idxArr2[128] = { +#endif + 12, 12, 13, 14, // 512, 512, 768, 1024 + 15, 15, 16, 16, // 1536, 2048 + 17, 17, 17, 17, 18, 18, 18, 18, // 3072, 4096 + 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, // 6144, 8192 + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, // 12288 + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, // 16384 + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, // 24576 + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, // 32768 +#ifdef LFALLOC_YT + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, // 49152 + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, // 65536 +#endif +}; + +// map entry number to size idx +// special size idx's: 0 = not used, -1 = mem locked, but not allocated +static volatile char chunkSizeIdx[N_CHUNKS]; +const int FREE_CHUNK_ARR_BUF = 0x20000; // this is effectively 128G of free memory (with 1M chunks), should not be exhausted actually +static volatile uintptr_t freeChunkArr[FREE_CHUNK_ARR_BUF]; +static volatile int freeChunkCount; + +static void AddFreeChunk(uintptr_t chunkId) { + chunkSizeIdx[chunkId] = -1; + if (Y_UNLIKELY(freeChunkCount == FREE_CHUNK_ARR_BUF)) + NMalloc::AbortFromCorruptedAllocator(); // free chunks arrray overflowed + freeChunkArr[freeChunkCount++] = chunkId; +} + +static bool GetFreeChunk(uintptr_t* res) { + if (freeChunkCount == 0) { + *res = 0; + return false; + } + *res = freeChunkArr[--freeChunkCount]; + return true; +} + +////////////////////////////////////////////////////////////////////////// +enum ELFAllocCounter { + CT_USER_ALLOC, // accumulated size requested by user code + CT_MMAP, // accumulated mmapped size + CT_MMAP_CNT, // number of mmapped regions + CT_MUNMAP, // accumulated unmmapped size + CT_MUNMAP_CNT, // number of munmaped regions + CT_SYSTEM_ALLOC, // accumulated allocated size for internal lfalloc needs + CT_SYSTEM_FREE, // accumulated deallocated size for internal lfalloc needs + CT_SMALL_ALLOC, // accumulated allocated size for fixed-size blocks + CT_SMALL_FREE, // accumulated deallocated size for fixed-size blocks + CT_LARGE_ALLOC, // accumulated allocated size for large blocks + CT_LARGE_FREE, // accumulated deallocated size for large blocks + CT_SLOW_ALLOC_CNT, // number of slow (not LF) allocations + CT_DEGRAGMENT_CNT, // number of memory defragmentations + CT_MAX +}; + +static Y_FORCE_INLINE void IncrementCounter(ELFAllocCounter counter, size_t value); + +////////////////////////////////////////////////////////////////////////// +enum EMMapMode { + MM_NORMAL, // memory for small allocs + MM_HUGE // memory for large allocs +}; + +#ifndef _MSC_VER +inline void VerifyMmapResult(void* result) { + if (Y_UNLIKELY(result == MAP_FAILED)) + NMalloc::AbortFromCorruptedAllocator(); // negative size requested? or just out of mem +} +#endif + +#if !defined(_MSC_VER) && !defined(_freebsd_) && defined(_64_) +static char* AllocWithMMapLinuxImpl(uintptr_t sz, EMMapMode mode) { + char* volatile* areaPtr; + char* areaStart; + uintptr_t areaFinish; + + int mapProt = PROT_READ | PROT_WRITE; + int mapFlags = MAP_PRIVATE | MAP_ANON; + + if (mode == MM_HUGE) { + areaPtr = reinterpret_cast(&linuxAllocPointerHuge); + areaStart = reinterpret_cast(LINUX_MMAP_AREA_START + N_MAX_WORKSET_SIZE); + areaFinish = N_HUGE_AREA_FINISH; + } else { + areaPtr = reinterpret_cast(&linuxAllocPointer); + areaStart = reinterpret_cast(LINUX_MMAP_AREA_START); + areaFinish = N_MAX_WORKSET_SIZE; + + if (MapHugeTLB) { + mapFlags |= MAP_HUGETLB; + } + } + + bool wrapped = false; + for (;;) { + char* prevAllocPtr = *areaPtr; + char* nextAllocPtr = prevAllocPtr + sz; + if (uintptr_t(nextAllocPtr - (char*)nullptr) >= areaFinish) { + if (Y_UNLIKELY(wrapped)) { + // virtual memory is over fragmented + NMalloc::AbortFromCorruptedAllocator(); + } + // wrap after all area is used + DoCas(areaPtr, areaStart, prevAllocPtr); + wrapped = true; + continue; + } + + if (DoCas(areaPtr, nextAllocPtr, prevAllocPtr) != prevAllocPtr) + continue; + + char* largeBlock = (char*)mmap(prevAllocPtr, sz, mapProt, mapFlags, -1, 0); + VerifyMmapResult(largeBlock); + if (largeBlock == prevAllocPtr) + return largeBlock; + if (largeBlock) + munmap(largeBlock, sz); + + if (sz < 0x80000) { + // skip utilized area with big steps + DoCas(areaPtr, nextAllocPtr + 0x10 * 0x10000, nextAllocPtr); + } + } +} +#endif + +static char* AllocWithMMap(uintptr_t sz, EMMapMode mode) { + (void)mode; +#ifdef _MSC_VER + char* largeBlock = (char*)VirtualAlloc(0, sz, MEM_RESERVE, PAGE_READWRITE); + if (Y_UNLIKELY(largeBlock == nullptr)) + NMalloc::AbortFromCorruptedAllocator(); // out of memory + if (Y_UNLIKELY(uintptr_t(((char*)largeBlock - ALLOC_START) + sz) >= N_MAX_WORKSET_SIZE)) + NMalloc::AbortFromCorruptedAllocator(); // out of working set, something has broken +#else +#if defined(_freebsd_) || !defined(_64_) || defined(USE_LFALLOC_RANDOM_HINT) + uintptr_t areaStart; + uintptr_t areaFinish; + if (mode == MM_HUGE) { + areaStart = LINUX_MMAP_AREA_START + N_MAX_WORKSET_SIZE; + areaFinish = N_HUGE_AREA_FINISH; + } else { + areaStart = LINUX_MMAP_AREA_START; + areaFinish = N_MAX_WORKSET_SIZE; + } +#if defined(USE_LFALLOC_RANDOM_HINT) + static thread_local std::mt19937_64 generator(std::random_device{}()); + std::uniform_int_distribution distr(areaStart, areaFinish / 2); + char* largeBlock = (char*)mmap(reinterpret_cast(distr(generator)), sz, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); +#else + char* largeBlock = (char*)mmap(0, sz, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); +#endif + VerifyMmapResult(largeBlock); + if (Y_UNLIKELY(uintptr_t(((char*)largeBlock - ALLOC_START) + sz) >= areaFinish)) + NMalloc::AbortFromCorruptedAllocator(); // out of working set, something has broken +#else + char* largeBlock = AllocWithMMapLinuxImpl(sz, mode); + if (TransparentHugePages) { + madvise(largeBlock, sz, MADV_HUGEPAGE); + } +#endif +#endif + Y_ASSERT_NOBT(largeBlock); + IncrementCounter(CT_MMAP, sz); + IncrementCounter(CT_MMAP_CNT, 1); + return largeBlock; +} + +enum class ELarge : ui8 { + Free = 0, // block in free cache + Alloc = 1, // block is allocated + Gone = 2, // block was unmapped +}; + +struct TLargeBlk { + + static TLargeBlk* As(void *raw) { + return reinterpret_cast((char*)raw - 4096ll); + } + + static const TLargeBlk* As(const void *raw) { + return reinterpret_cast((const char*)raw - 4096ll); + } + + void SetSize(size_t bytes, size_t pages) { + Pages = pages; + Bytes = bytes; + } + + void Mark(ELarge state) { + const ui64 marks[] = { + 0x8b38aa5ca4953c98, // ELarge::Free + 0xf916d33584eb5087, // ELarge::Alloc + 0xd33b0eca7651bc3f // ELarge::Gone + }; + + Token = size_t(marks[ui8(state)]); + } + + size_t Pages; // Total pages allocated with mmap like call + size_t Bytes; // Actually requested bytes by user + size_t Token; // Block state token, see ELarge enum. +}; + + +static void LargeBlockUnmap(void* p, size_t pages) { + const auto bytes = (pages + 1) * uintptr_t(4096); + + IncrementCounter(CT_MUNMAP, bytes); + IncrementCounter(CT_MUNMAP_CNT, 1); +#ifdef _MSC_VER + Y_ASSERT_NOBT(0); +#else + TLargeBlk::As(p)->Mark(ELarge::Gone); + munmap((char*)p - 4096ll, bytes); +#endif +} + +////////////////////////////////////////////////////////////////////////// +const size_t LB_BUF_SIZE = 250; +const size_t LB_BUF_HASH = 977; +static int LB_LIMIT_TOTAL_SIZE = 500 * 1024 * 1024 / 4096; // do not keep more then this mem total in lbFreePtrs[] +static void* volatile lbFreePtrs[LB_BUF_HASH][LB_BUF_SIZE]; +static TAtomic lbFreePageCount; + + +static void* LargeBlockAlloc(size_t _nSize, ELFAllocCounter counter) { + size_t pgCount = (_nSize + 4095) / 4096; +#ifdef _MSC_VER + char* pRes = (char*)VirtualAlloc(0, (pgCount + 1) * 4096ll, MEM_COMMIT, PAGE_READWRITE); + if (Y_UNLIKELY(pRes == 0)) { + NMalloc::AbortFromCorruptedAllocator(); // out of memory + } +#else + + IncrementCounter(counter, pgCount * 4096ll); + IncrementCounter(CT_SYSTEM_ALLOC, 4096ll); + + int lbHash = pgCount % LB_BUF_HASH; + for (int i = 0; i < LB_BUF_SIZE; ++i) { + void* p = lbFreePtrs[lbHash][i]; + if (p == nullptr) + continue; + if (DoCas(&lbFreePtrs[lbHash][i], (void*)nullptr, p) == p) { + size_t realPageCount = TLargeBlk::As(p)->Pages; + if (realPageCount == pgCount) { + AtomicAdd(lbFreePageCount, -pgCount); + TLargeBlk::As(p)->Mark(ELarge::Alloc); + return p; + } else { + if (DoCas(&lbFreePtrs[lbHash][i], p, (void*)nullptr) != (void*)nullptr) { + // block was freed while we were busy + AtomicAdd(lbFreePageCount, -realPageCount); + LargeBlockUnmap(p, realPageCount); + --i; + } + } + } + } + char* pRes = AllocWithMMap((pgCount + 1) * 4096ll, MM_HUGE); +#endif + pRes += 4096ll; + TLargeBlk::As(pRes)->SetSize(_nSize, pgCount); + TLargeBlk::As(pRes)->Mark(ELarge::Alloc); + + return pRes; +} + +#ifndef _MSC_VER +static void FreeAllLargeBlockMem() { + for (auto& lbFreePtr : lbFreePtrs) { + for (int i = 0; i < LB_BUF_SIZE; ++i) { + void* p = lbFreePtr[i]; + if (p == nullptr) + continue; + if (DoCas(&lbFreePtr[i], (void*)nullptr, p) == p) { + int pgCount = TLargeBlk::As(p)->Pages; + AtomicAdd(lbFreePageCount, -pgCount); + LargeBlockUnmap(p, pgCount); + } + } + } +} +#endif + +static void LargeBlockFree(void* p, ELFAllocCounter counter) { + if (p == nullptr) + return; +#ifdef _MSC_VER + VirtualFree((char*)p - 4096ll, 0, MEM_RELEASE); +#else + size_t pgCount = TLargeBlk::As(p)->Pages; + + TLargeBlk::As(p)->Mark(ELarge::Free); + IncrementCounter(counter, pgCount * 4096ll); + IncrementCounter(CT_SYSTEM_FREE, 4096ll); + + if (lbFreePageCount > LB_LIMIT_TOTAL_SIZE) + FreeAllLargeBlockMem(); + int lbHash = pgCount % LB_BUF_HASH; + for (int i = 0; i < LB_BUF_SIZE; ++i) { + if (lbFreePtrs[lbHash][i] == nullptr) { + if (DoCas(&lbFreePtrs[lbHash][i], p, (void*)nullptr) == nullptr) { + AtomicAdd(lbFreePageCount, pgCount); + return; + } + } + } + + LargeBlockUnmap(p, pgCount); +#endif +} + +static void* SystemAlloc(size_t _nSize) { + //HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, _nSize); + return LargeBlockAlloc(_nSize, CT_SYSTEM_ALLOC); +} +static void SystemFree(void* p) { + //HeapFree(GetProcessHeap(), 0, p); + LargeBlockFree(p, CT_SYSTEM_FREE); +} + +////////////////////////////////////////////////////////////////////////// +static int* volatile nLock = nullptr; +static int nLockVar; +inline void RealEnterCriticalDefault(int* volatile* lockPtr) { + while (DoCas(lockPtr, &nLockVar, (int*)nullptr) != nullptr) + ; //pthread_yield(); +} +inline void RealLeaveCriticalDefault(int* volatile* lockPtr) { + *lockPtr = nullptr; +} +static void (*RealEnterCritical)(int* volatile* lockPtr) = RealEnterCriticalDefault; +static void (*RealLeaveCritical)(int* volatile* lockPtr) = RealLeaveCriticalDefault; +static void (*BeforeLFAllocGlobalLockAcquired)() = nullptr; +static void (*AfterLFAllocGlobalLockReleased)() = nullptr; +class CCriticalSectionLockMMgr { +public: + CCriticalSectionLockMMgr() { + if (BeforeLFAllocGlobalLockAcquired) { + BeforeLFAllocGlobalLockAcquired(); + } + RealEnterCritical(&nLock); + } + ~CCriticalSectionLockMMgr() { + RealLeaveCritical(&nLock); + if (AfterLFAllocGlobalLockReleased) { + AfterLFAllocGlobalLockReleased(); + } + } +}; + +////////////////////////////////////////////////////////////////////////// +class TLFAllocFreeList { + struct TNode { + TNode* Next; + }; + + TNode* volatile Head; + TNode* volatile Pending; + TAtomic PendingToFreeListCounter; + TAtomic AllocCount; + + static Y_FORCE_INLINE void Enqueue(TNode* volatile* headPtr, TNode* n) { + for (;;) { + TNode* volatile prevHead = *headPtr; + n->Next = prevHead; + if (DoCas(headPtr, n, prevHead) == prevHead) + break; + } + } + Y_FORCE_INLINE void* DoAlloc() { + TNode* res; + for (res = Head; res; res = Head) { + TNode* keepNext = res->Next; + if (DoCas(&Head, keepNext, res) == res) { + //Y_VERIFY(keepNext == res->Next); + break; + } + } + return res; + } + void FreeList(TNode* fl) { + if (!fl) + return; + TNode* flTail = fl; + while (flTail->Next) + flTail = flTail->Next; + for (;;) { + TNode* volatile prevHead = Head; + flTail->Next = prevHead; + if (DoCas(&Head, fl, prevHead) == prevHead) + break; + } + } + +public: + Y_FORCE_INLINE void Free(void* ptr) { + TNode* newFree = (TNode*)ptr; + if (AtomicAdd(AllocCount, 0) == 0) + Enqueue(&Head, newFree); + else + Enqueue(&Pending, newFree); + } + Y_FORCE_INLINE void* Alloc() { + TAtomic keepCounter = AtomicAdd(PendingToFreeListCounter, 0); + TNode* fl = Pending; + if (AtomicAdd(AllocCount, 1) == 1) { + // No other allocs in progress. + // If (keepCounter == PendingToFreeListCounter) then Pending was not freed by other threads. + // Hence Pending is not used in any concurrent DoAlloc() atm and can be safely moved to FreeList + if (fl && keepCounter == AtomicAdd(PendingToFreeListCounter, 0) && DoCas(&Pending, (TNode*)nullptr, fl) == fl) { + // pick first element from Pending and return it + void* res = fl; + fl = fl->Next; + // if there are other elements in Pending list, add them to main free list + FreeList(fl); + AtomicAdd(PendingToFreeListCounter, 1); + AtomicAdd(AllocCount, -1); + return res; + } + } + void* res = DoAlloc(); + AtomicAdd(AllocCount, -1); + return res; + } + void* GetWholeList() { + TNode* res; + for (res = Head; res; res = Head) { + if (DoCas(&Head, (TNode*)nullptr, res) == res) + break; + } + return res; + } + void ReturnWholeList(void* ptr) { + while (AtomicAdd(AllocCount, 0) != 0) // theoretically can run into problems with parallel DoAlloc() + ; //ThreadYield(); + for (;;) { + TNode* prevHead = Head; + if (DoCas(&Head, (TNode*)ptr, prevHead) == prevHead) { + FreeList(prevHead); + break; + } + } + } +}; + +///////////////////////////////////////////////////////////////////////// +static TLFAllocFreeList globalFreeLists[N_SIZES]; +static char* volatile globalCurrentPtr[N_SIZES]; +static TLFAllocFreeList blockFreeList; + +// globalFreeLists[] contains TFreeListGroup, each of them points up to 15 free blocks +const int FL_GROUP_SIZE = 15; +struct TFreeListGroup { + TFreeListGroup* Next; + char* Ptrs[FL_GROUP_SIZE]; +}; +#ifdef _64_ +const int FREE_LIST_GROUP_SIZEIDX = 8; +#else +const int FREE_LIST_GROUP_SIZEIDX = 6; +#endif + +////////////////////////////////////////////////////////////////////////// +// find free chunks and reset chunk size so they can be reused by different sized allocations +// do not look at blockFreeList (TFreeListGroup has same size for any allocations) +static bool DefragmentMem() { + if (!EnableDefrag) { + return false; + } + + IncrementCounter(CT_DEGRAGMENT_CNT, 1); + + int* nFreeCount = (int*)SystemAlloc(N_CHUNKS * sizeof(int)); + if (Y_UNLIKELY(!nFreeCount)) { + //__debugbreak(); + NMalloc::AbortFromCorruptedAllocator(); + } + memset(nFreeCount, 0, N_CHUNKS * sizeof(int)); + + TFreeListGroup* wholeLists[N_SIZES]; + for (int nSizeIdx = 0; nSizeIdx < N_SIZES; ++nSizeIdx) { + wholeLists[nSizeIdx] = (TFreeListGroup*)globalFreeLists[nSizeIdx].GetWholeList(); + for (TFreeListGroup* g = wholeLists[nSizeIdx]; g; g = g->Next) { + for (auto pData : g->Ptrs) { + if (pData) { + uintptr_t nChunk = (pData - ALLOC_START) / N_CHUNK_SIZE; + ++nFreeCount[nChunk]; + Y_ASSERT_NOBT(chunkSizeIdx[nChunk] == nSizeIdx); + } + } + } + } + + bool bRes = false; + for (size_t nChunk = 0; nChunk < N_CHUNKS; ++nChunk) { + int fc = nFreeCount[nChunk]; + nFreeCount[nChunk] = 0; + if (chunkSizeIdx[nChunk] <= 0) + continue; + int nEntries = N_CHUNK_SIZE / nSizeIdxToSize[static_cast(chunkSizeIdx[nChunk])]; + Y_ASSERT_NOBT(fc <= nEntries); // can not have more free blocks then total count + if (fc == nEntries) { + bRes = true; + nFreeCount[nChunk] = 1; + } + } + if (bRes) { + for (auto& wholeList : wholeLists) { + TFreeListGroup** ppPtr = &wholeList; + while (*ppPtr) { + TFreeListGroup* g = *ppPtr; + int dst = 0; + for (auto pData : g->Ptrs) { + if (pData) { + uintptr_t nChunk = (pData - ALLOC_START) / N_CHUNK_SIZE; + if (nFreeCount[nChunk] == 0) + g->Ptrs[dst++] = pData; // block is not freed, keep pointer + } + } + if (dst == 0) { + // no valid pointers in group, free it + *ppPtr = g->Next; + blockFreeList.Free(g); + } else { + // reset invalid pointers to 0 + for (int i = dst; i < FL_GROUP_SIZE; ++i) + g->Ptrs[i] = nullptr; + ppPtr = &g->Next; + } + } + } + for (uintptr_t nChunk = 0; nChunk < N_CHUNKS; ++nChunk) { + if (!nFreeCount[nChunk]) + continue; + char* pStart = ALLOC_START + nChunk * N_CHUNK_SIZE; +#ifdef _win_ + VirtualFree(pStart, N_CHUNK_SIZE, MEM_DECOMMIT); +#elif defined(_freebsd_) + madvise(pStart, N_CHUNK_SIZE, MADV_FREE); +#else + madvise(pStart, N_CHUNK_SIZE, MADV_DONTNEED); +#endif + AddFreeChunk(nChunk); + } + } + + for (int nSizeIdx = 0; nSizeIdx < N_SIZES; ++nSizeIdx) + globalFreeLists[nSizeIdx].ReturnWholeList(wholeLists[nSizeIdx]); + + SystemFree(nFreeCount); + return bRes; +} + +static Y_FORCE_INLINE void* LFAllocFromCurrentChunk(int nSizeIdx, int blockSize, int count) { + char* volatile* pFreeArray = &globalCurrentPtr[nSizeIdx]; + while (char* newBlock = *pFreeArray) { + char* nextFree = newBlock + blockSize * count; + + // check if there is space in chunk + char* globalEndPtr = ALLOC_START + ((newBlock - ALLOC_START) & ~((uintptr_t)N_CHUNK_SIZE - 1)) + N_CHUNK_SIZE; + if (nextFree >= globalEndPtr) { + if (nextFree > globalEndPtr) + break; + nextFree = nullptr; // it was last block in chunk + } + if (DoCas(pFreeArray, nextFree, newBlock) == newBlock) + return newBlock; + } + return nullptr; +} + +enum EDefrag { + MEM_DEFRAG, + NO_MEM_DEFRAG, +}; + +static void* SlowLFAlloc(int nSizeIdx, int blockSize, EDefrag defrag) { + IncrementCounter(CT_SLOW_ALLOC_CNT, 1); + + CCriticalSectionLockMMgr ls; + void* res = LFAllocFromCurrentChunk(nSizeIdx, blockSize, 1); + if (res) + return res; // might happen when other thread allocated new current chunk + + for (;;) { + uintptr_t nChunk; + if (GetFreeChunk(&nChunk)) { + char* newPlace = ALLOC_START + nChunk * N_CHUNK_SIZE; +#ifdef _MSC_VER + void* pTest = VirtualAlloc(newPlace, N_CHUNK_SIZE, MEM_COMMIT, PAGE_READWRITE); + Y_ASSERT_NOBT(pTest == newPlace); +#endif + chunkSizeIdx[nChunk] = (char)nSizeIdx; + globalCurrentPtr[nSizeIdx] = newPlace + blockSize; + return newPlace; + } + + // out of luck, try to defrag + if (defrag == MEM_DEFRAG && DefragmentMem()) { + continue; + } + + char* largeBlock = AllocWithMMap(N_LARGE_ALLOC_SIZE, MM_NORMAL); + uintptr_t addr = ((largeBlock - ALLOC_START) + N_CHUNK_SIZE - 1) & (~(N_CHUNK_SIZE - 1)); + uintptr_t endAddr = ((largeBlock - ALLOC_START) + N_LARGE_ALLOC_SIZE) & (~(N_CHUNK_SIZE - 1)); + for (uintptr_t p = addr; p < endAddr; p += N_CHUNK_SIZE) { + uintptr_t chunk = p / N_CHUNK_SIZE; + Y_ASSERT_NOBT(chunk * N_CHUNK_SIZE == p); + Y_ASSERT_NOBT(chunkSizeIdx[chunk] == 0); + AddFreeChunk(chunk); + } + } + return nullptr; +} + +// allocate single block +static Y_FORCE_INLINE void* LFAllocNoCache(int nSizeIdx, EDefrag defrag) { + int blockSize = nSizeIdxToSize[nSizeIdx]; + void* res = LFAllocFromCurrentChunk(nSizeIdx, blockSize, 1); + if (res) + return res; + + return SlowLFAlloc(nSizeIdx, blockSize, defrag); +} + +// allocate multiple blocks, returns number of blocks allocated (max FL_GROUP_SIZE) +// buf should have space for at least FL_GROUP_SIZE elems +static Y_FORCE_INLINE int LFAllocNoCacheMultiple(int nSizeIdx, char** buf) { + int blockSize = nSizeIdxToSize[nSizeIdx]; + void* res = LFAllocFromCurrentChunk(nSizeIdx, blockSize, FL_GROUP_SIZE); + if (res) { + char* resPtr = (char*)res; + for (int k = 0; k < FL_GROUP_SIZE; ++k) { + buf[k] = resPtr; + resPtr += blockSize; + } + return FL_GROUP_SIZE; + } + buf[0] = (char*)SlowLFAlloc(nSizeIdx, blockSize, MEM_DEFRAG); + return 1; +} + +// take several blocks from global free list (max FL_GROUP_SIZE blocks), returns number of blocks taken +// buf should have space for at least FL_GROUP_SIZE elems +static Y_FORCE_INLINE int TakeBlocksFromGlobalFreeList(int nSizeIdx, char** buf) { + TLFAllocFreeList& fl = globalFreeLists[nSizeIdx]; + TFreeListGroup* g = (TFreeListGroup*)fl.Alloc(); + if (g) { + int resCount = 0; + for (auto& ptr : g->Ptrs) { + if (ptr) + buf[resCount++] = ptr; + else + break; + } + blockFreeList.Free(g); + return resCount; + } + return 0; +} + +// add several blocks to global free list +static Y_FORCE_INLINE void PutBlocksToGlobalFreeList(ptrdiff_t nSizeIdx, char** buf, int count) { + for (int startIdx = 0; startIdx < count;) { + TFreeListGroup* g = (TFreeListGroup*)blockFreeList.Alloc(); + Y_ASSERT_NOBT(sizeof(TFreeListGroup) == nSizeIdxToSize[FREE_LIST_GROUP_SIZEIDX]); + if (!g) { + g = (TFreeListGroup*)LFAllocNoCache(FREE_LIST_GROUP_SIZEIDX, NO_MEM_DEFRAG); + } + + int groupSize = count - startIdx; + if (groupSize > FL_GROUP_SIZE) + groupSize = FL_GROUP_SIZE; + for (int i = 0; i < groupSize; ++i) + g->Ptrs[i] = buf[startIdx + i]; + for (int i = groupSize; i < FL_GROUP_SIZE; ++i) + g->Ptrs[i] = nullptr; + + // add free group to the global list + TLFAllocFreeList& fl = globalFreeLists[nSizeIdx]; + fl.Free(g); + + startIdx += groupSize; + } +} + +////////////////////////////////////////////////////////////////////////// +static TAtomic GlobalCounters[CT_MAX]; +const int MAX_LOCAL_UPDATES = 100; + +struct TLocalCounter { + intptr_t Value; + int Updates; + TAtomic* Parent; + + Y_FORCE_INLINE void Init(TAtomic* parent) { + Parent = parent; + Value = 0; + Updates = 0; + } + + Y_FORCE_INLINE void Increment(size_t value) { + Value += value; + if (++Updates > MAX_LOCAL_UPDATES) { + Flush(); + } + } + + Y_FORCE_INLINE void Flush() { + AtomicAdd(*Parent, Value); + Value = 0; + Updates = 0; + } +}; + +//////////////////////////////////////////////////////////////////////////////// +// DBG stuff +//////////////////////////////////////////////////////////////////////////////// + +#if defined(LFALLOC_DBG) + +struct TPerTagAllocCounter { + TAtomic Size; + TAtomic Count; + + Y_FORCE_INLINE void Alloc(size_t size) { + AtomicAdd(Size, size); + AtomicAdd(Count, 1); + } + + Y_FORCE_INLINE void Free(size_t size) { + AtomicSub(Size, size); + AtomicSub(Count, 1); + } +}; + +struct TLocalPerTagAllocCounter { + intptr_t Size; + int Count; + int Updates; + + Y_FORCE_INLINE void Init() { + Size = 0; + Count = 0; + Updates = 0; + } + + Y_FORCE_INLINE void Alloc(TPerTagAllocCounter& parent, size_t size) { + Size += size; + ++Count; + if (++Updates > MAX_LOCAL_UPDATES) { + Flush(parent); + } + } + + Y_FORCE_INLINE void Free(TPerTagAllocCounter& parent, size_t size) { + Size -= size; + --Count; + if (++Updates > MAX_LOCAL_UPDATES) { + Flush(parent); + } + } + + Y_FORCE_INLINE void Flush(TPerTagAllocCounter& parent) { + AtomicAdd(parent.Size, Size); + Size = 0; + AtomicAdd(parent.Count, Count); + Count = 0; + Updates = 0; + } +}; + +static const int DBG_ALLOC_MAX_TAG = 1000; +static const int DBG_ALLOC_NUM_SIZES = 30; +static TPerTagAllocCounter GlobalPerTagAllocCounters[DBG_ALLOC_MAX_TAG][DBG_ALLOC_NUM_SIZES]; + +#endif // LFALLOC_DBG + +////////////////////////////////////////////////////////////////////////// +const int THREAD_BUF = 256; +static int borderSizes[N_SIZES]; +const int MAX_MEM_PER_SIZE_PER_THREAD = 512 * 1024; +struct TThreadAllocInfo { + // FreePtrs - pointers to first free blocks in per thread block list + // LastFreePtrs - pointers to last blocks in lists, may be invalid if FreePtr is zero + char* FreePtrs[N_SIZES][THREAD_BUF]; + int FreePtrIndex[N_SIZES]; + TThreadAllocInfo* pNextInfo; + TLocalCounter LocalCounters[CT_MAX]; + +#if defined(LFALLOC_DBG) + TLocalPerTagAllocCounter LocalPerTagAllocCounters[DBG_ALLOC_MAX_TAG][DBG_ALLOC_NUM_SIZES]; +#endif +#ifdef _win_ + HANDLE hThread; +#endif + + void Init(TThreadAllocInfo** pHead) { + memset(this, 0, sizeof(*this)); + for (auto& i : FreePtrIndex) + i = THREAD_BUF; +#ifdef _win_ + BOOL b = DuplicateHandle( + GetCurrentProcess(), GetCurrentThread(), + GetCurrentProcess(), &hThread, + 0, FALSE, DUPLICATE_SAME_ACCESS); + Y_ASSERT_NOBT(b); +#endif + pNextInfo = *pHead; + *pHead = this; + for (int k = 0; k < N_SIZES; ++k) { + int maxCount = MAX_MEM_PER_SIZE_PER_THREAD / nSizeIdxToSize[k]; + if (maxCount > THREAD_BUF) + maxCount = THREAD_BUF; + borderSizes[k] = THREAD_BUF - maxCount; + } + for (int i = 0; i < CT_MAX; ++i) { + LocalCounters[i].Init(&GlobalCounters[i]); + } +#if defined(LFALLOC_DBG) + for (int tag = 0; tag < DBG_ALLOC_MAX_TAG; ++tag) { + for (int sizeIdx = 0; sizeIdx < DBG_ALLOC_NUM_SIZES; ++sizeIdx) { + auto& local = LocalPerTagAllocCounters[tag][sizeIdx]; + local.Init(); + } + } +#endif + } + void Done() { + for (auto sizeIdx : FreePtrIndex) { + Y_ASSERT_NOBT(sizeIdx == THREAD_BUF); + } + for (auto& localCounter : LocalCounters) { + localCounter.Flush(); + } +#if defined(LFALLOC_DBG) + for (int tag = 0; tag < DBG_ALLOC_MAX_TAG; ++tag) { + for (int sizeIdx = 0; sizeIdx < DBG_ALLOC_NUM_SIZES; ++sizeIdx) { + auto& local = LocalPerTagAllocCounters[tag][sizeIdx]; + auto& global = GlobalPerTagAllocCounters[tag][sizeIdx]; + local.Flush(global); + } + } +#endif +#ifdef _win_ + if (hThread) + CloseHandle(hThread); +#endif + } +}; +PERTHREAD TThreadAllocInfo* pThreadInfo; +static TThreadAllocInfo* pThreadInfoList; + +static int* volatile nLockThreadInfo = nullptr; +class TLockThreadListMMgr { +public: + TLockThreadListMMgr() { + RealEnterCritical(&nLockThreadInfo); + } + ~TLockThreadListMMgr() { + RealLeaveCritical(&nLockThreadInfo); + } +}; + +static Y_FORCE_INLINE void IncrementCounter(ELFAllocCounter counter, size_t value) { +#ifdef LFALLOC_YT + TThreadAllocInfo* thr = pThreadInfo; + if (thr) { + thr->LocalCounters[counter].Increment(value); + } else { + AtomicAdd(GlobalCounters[counter], value); + } +#endif +} + +extern "C" i64 GetLFAllocCounterFast(int counter) { +#ifdef LFALLOC_YT + return GlobalCounters[counter]; +#else + return 0; +#endif +} + +extern "C" i64 GetLFAllocCounterFull(int counter) { +#ifdef LFALLOC_YT + i64 ret = GlobalCounters[counter]; + { + TLockThreadListMMgr ll; + for (TThreadAllocInfo** p = &pThreadInfoList; *p;) { + TThreadAllocInfo* pInfo = *p; + ret += pInfo->LocalCounters[counter].Value; + p = &pInfo->pNextInfo; + } + } + return ret; +#else + return 0; +#endif +} + +static void MoveSingleThreadFreeToGlobal(TThreadAllocInfo* pInfo) { + for (int sizeIdx = 0; sizeIdx < N_SIZES; ++sizeIdx) { + int& freePtrIdx = pInfo->FreePtrIndex[sizeIdx]; + char** freePtrs = pInfo->FreePtrs[sizeIdx]; + PutBlocksToGlobalFreeList(sizeIdx, freePtrs + freePtrIdx, THREAD_BUF - freePtrIdx); + freePtrIdx = THREAD_BUF; + } +} + +#ifdef _win_ +static bool IsDeadThread(TThreadAllocInfo* pInfo) { + DWORD dwExit; + bool isDead = !GetExitCodeThread(pInfo->hThread, &dwExit) || dwExit != STILL_ACTIVE; + return isDead; +} + +static void CleanupAfterDeadThreads() { + TLockThreadListMMgr ls; + for (TThreadAllocInfo** p = &pThreadInfoList; *p;) { + TThreadAllocInfo* pInfo = *p; + if (IsDeadThread(pInfo)) { + MoveSingleThreadFreeToGlobal(pInfo); + pInfo->Done(); + *p = pInfo->pNextInfo; + SystemFree(pInfo); + } else + p = &pInfo->pNextInfo; + } +} +#endif + +#ifndef _win_ +static pthread_key_t ThreadCacheCleaner; +static void* volatile ThreadCacheCleanerStarted; // 0 = not started, -1 = started, -2 = is starting +static PERTHREAD bool IsStoppingThread; + +static void FreeThreadCache(void*) { + TThreadAllocInfo* pToDelete = nullptr; + { + TLockThreadListMMgr ls; + pToDelete = pThreadInfo; + if (pToDelete == nullptr) + return; + + // remove from the list + for (TThreadAllocInfo** p = &pThreadInfoList; *p; p = &(*p)->pNextInfo) { + if (*p == pToDelete) { + *p = pToDelete->pNextInfo; + break; + } + } + IsStoppingThread = true; + pThreadInfo = nullptr; + } + + // free per thread buf + MoveSingleThreadFreeToGlobal(pToDelete); + pToDelete->Done(); + SystemFree(pToDelete); +} +#endif + +static void AllocThreadInfo() { +#ifndef _win_ + if (DoCas(&ThreadCacheCleanerStarted, (void*)-2, (void*)nullptr) == (void*)nullptr) { + pthread_key_create(&ThreadCacheCleaner, FreeThreadCache); + ThreadCacheCleanerStarted = (void*)-1; + } + if (ThreadCacheCleanerStarted != (void*)-1) + return; // do not use ThreadCacheCleaner until it is constructed + + { + if (IsStoppingThread) + return; + TLockThreadListMMgr ls; + if (IsStoppingThread) // better safe than sorry + return; + + pThreadInfo = (TThreadAllocInfo*)SystemAlloc(sizeof(TThreadAllocInfo)); + pThreadInfo->Init(&pThreadInfoList); + } + pthread_setspecific(ThreadCacheCleaner, (void*)-1); // without value destructor will not be called +#else + CleanupAfterDeadThreads(); + { + TLockThreadListMMgr ls; + pThreadInfo = (TThreadAllocInfo*)SystemAlloc(sizeof(TThreadAllocInfo)); + pThreadInfo->Init(&pThreadInfoList); + } +#endif +} + + ////////////////////////////////////////////////////////////////////////// + // DBG stuff + ////////////////////////////////////////////////////////////////////////// + +#if defined(LFALLOC_DBG) + +struct TAllocHeader { + size_t Size; + int Tag; + int Cookie; +}; + +static inline void* GetAllocPtr(TAllocHeader* p) { + return p + 1; +} + +static inline TAllocHeader* GetAllocHeader(void* p) { + return ((TAllocHeader*)p) - 1; +} + +PERTHREAD int AllocationTag; +extern "C" int SetThreadAllocTag(int tag) { + int prevTag = AllocationTag; + if (tag < DBG_ALLOC_MAX_TAG && tag >= 0) { + AllocationTag = tag; + } + return prevTag; +} + +PERTHREAD bool ProfileCurrentThread; +extern "C" bool SetProfileCurrentThread(bool newVal) { + bool prevVal = ProfileCurrentThread; + ProfileCurrentThread = newVal; + return prevVal; +} + +static volatile bool ProfileAllThreads; +extern "C" bool SetProfileAllThreads(bool newVal) { + bool prevVal = ProfileAllThreads; + ProfileAllThreads = newVal; + return prevVal; +} + +static volatile bool AllocationSamplingEnabled; +extern "C" bool SetAllocationSamplingEnabled(bool newVal) { + bool prevVal = AllocationSamplingEnabled; + AllocationSamplingEnabled = newVal; + return prevVal; +} + +static size_t AllocationSampleRate = 1000; +extern "C" size_t SetAllocationSampleRate(size_t newVal) { + size_t prevVal = AllocationSampleRate; + AllocationSampleRate = newVal; + return prevVal; +} + +static size_t AllocationSampleMaxSize = N_MAX_FAST_SIZE; +extern "C" size_t SetAllocationSampleMaxSize(size_t newVal) { + size_t prevVal = AllocationSampleMaxSize; + AllocationSampleMaxSize = newVal; + return prevVal; +} + +using TAllocationCallback = int(int tag, size_t size, int sizeIdx); +static TAllocationCallback* AllocationCallback; +extern "C" TAllocationCallback* SetAllocationCallback(TAllocationCallback* newVal) { + TAllocationCallback* prevVal = AllocationCallback; + AllocationCallback = newVal; + return prevVal; +} + +using TDeallocationCallback = void(int cookie, int tag, size_t size, int sizeIdx); +static TDeallocationCallback* DeallocationCallback; +extern "C" TDeallocationCallback* SetDeallocationCallback(TDeallocationCallback* newVal) { + TDeallocationCallback* prevVal = DeallocationCallback; + DeallocationCallback = newVal; + return prevVal; +} + +PERTHREAD TAtomic AllocationsCount; +PERTHREAD bool InAllocationCallback; + +static const int DBG_ALLOC_INVALID_COOKIE = -1; +static inline int SampleAllocation(TAllocHeader* p, int sizeIdx) { + int cookie = DBG_ALLOC_INVALID_COOKIE; + if (AllocationSamplingEnabled && (ProfileCurrentThread || ProfileAllThreads) && !InAllocationCallback) { + if (p->Size > AllocationSampleMaxSize || ++AllocationsCount % AllocationSampleRate == 0) { + if (AllocationCallback) { + InAllocationCallback = true; + cookie = AllocationCallback(p->Tag, p->Size, sizeIdx); + InAllocationCallback = false; + } + } + } + return cookie; +} + +static inline void SampleDeallocation(TAllocHeader* p, int sizeIdx) { + if (p->Cookie != DBG_ALLOC_INVALID_COOKIE && !InAllocationCallback) { + if (DeallocationCallback) { + InAllocationCallback = true; + DeallocationCallback(p->Cookie, p->Tag, p->Size, sizeIdx); + InAllocationCallback = false; + } + } +} + +static inline void TrackPerTagAllocation(TAllocHeader* p, int sizeIdx) { + if (p->Tag < DBG_ALLOC_MAX_TAG && p->Tag >= 0) { + Y_ASSERT_NOBT(sizeIdx < DBG_ALLOC_NUM_SIZES); + auto& global = GlobalPerTagAllocCounters[p->Tag][sizeIdx]; + + TThreadAllocInfo* thr = pThreadInfo; + if (thr) { + auto& local = thr->LocalPerTagAllocCounters[p->Tag][sizeIdx]; + local.Alloc(global, p->Size); + } else { + global.Alloc(p->Size); + } + } +} + +static inline void TrackPerTagDeallocation(TAllocHeader* p, int sizeIdx) { + if (p->Tag < DBG_ALLOC_MAX_TAG && p->Tag >= 0) { + Y_ASSERT_NOBT(sizeIdx < DBG_ALLOC_NUM_SIZES); + auto& global = GlobalPerTagAllocCounters[p->Tag][sizeIdx]; + + TThreadAllocInfo* thr = pThreadInfo; + if (thr) { + auto& local = thr->LocalPerTagAllocCounters[p->Tag][sizeIdx]; + local.Free(global, p->Size); + } else { + global.Free(p->Size); + } + } +} + +static void* TrackAllocation(void* ptr, size_t size, int sizeIdx) { + TAllocHeader* p = (TAllocHeader*)ptr; + p->Size = size; + p->Tag = AllocationTag; + p->Cookie = SampleAllocation(p, sizeIdx); + TrackPerTagAllocation(p, sizeIdx); + return GetAllocPtr(p); +} + +static void TrackDeallocation(void* ptr, int sizeIdx) { + TAllocHeader* p = (TAllocHeader*)ptr; + SampleDeallocation(p, sizeIdx); + TrackPerTagDeallocation(p, sizeIdx); +} + +struct TPerTagAllocInfo { + ssize_t Count; + ssize_t Size; +}; + +extern "C" void GetPerTagAllocInfo( + bool flushPerThreadCounters, + TPerTagAllocInfo* info, + int& maxTag, + int& numSizes) { + maxTag = DBG_ALLOC_MAX_TAG; + numSizes = DBG_ALLOC_NUM_SIZES; + + if (info) { + if (flushPerThreadCounters) { + TLockThreadListMMgr ll; + for (TThreadAllocInfo** p = &pThreadInfoList; *p;) { + TThreadAllocInfo* pInfo = *p; + for (int tag = 0; tag < DBG_ALLOC_MAX_TAG; ++tag) { + for (int sizeIdx = 0; sizeIdx < DBG_ALLOC_NUM_SIZES; ++sizeIdx) { + auto& local = pInfo->LocalPerTagAllocCounters[tag][sizeIdx]; + auto& global = GlobalPerTagAllocCounters[tag][sizeIdx]; + local.Flush(global); + } + } + p = &pInfo->pNextInfo; + } + } + + for (int tag = 0; tag < DBG_ALLOC_MAX_TAG; ++tag) { + for (int sizeIdx = 0; sizeIdx < DBG_ALLOC_NUM_SIZES; ++sizeIdx) { + auto& global = GlobalPerTagAllocCounters[tag][sizeIdx]; + auto& res = info[tag * DBG_ALLOC_NUM_SIZES + sizeIdx]; + res.Count = global.Count; + res.Size = global.Size; + } + } + } +} + +#endif // LFALLOC_DBG + +////////////////////////////////////////////////////////////////////////// +static Y_FORCE_INLINE void* LFAllocImpl(size_t _nSize) { +#if defined(LFALLOC_DBG) + size_t size = _nSize; + _nSize += sizeof(TAllocHeader); +#endif + + IncrementCounter(CT_USER_ALLOC, _nSize); + + int nSizeIdx; + if (_nSize > 512) { + if (_nSize > N_MAX_FAST_SIZE) { + void* ptr = LargeBlockAlloc(_nSize, CT_LARGE_ALLOC); +#if defined(LFALLOC_DBG) + ptr = TrackAllocation(ptr, size, N_SIZES); +#endif + return ptr; + } + nSizeIdx = size2idxArr2[(_nSize - 1) >> 8]; + } else + nSizeIdx = size2idxArr1[1 + (((int)_nSize - 1) >> 3)]; + + IncrementCounter(CT_SMALL_ALLOC, nSizeIdxToSize[nSizeIdx]); + + // check per thread buffer + TThreadAllocInfo* thr = pThreadInfo; + if (!thr) { + AllocThreadInfo(); + thr = pThreadInfo; + if (!thr) { + void* ptr = LFAllocNoCache(nSizeIdx, MEM_DEFRAG); +#if defined(LFALLOC_DBG) + ptr = TrackAllocation(ptr, size, nSizeIdx); +#endif + return ptr; + } + } + { + int& freePtrIdx = thr->FreePtrIndex[nSizeIdx]; + if (freePtrIdx < THREAD_BUF) { + void* ptr = thr->FreePtrs[nSizeIdx][freePtrIdx++]; +#if defined(LFALLOC_DBG) + ptr = TrackAllocation(ptr, size, nSizeIdx); +#endif + return ptr; + } + + // try to alloc from global free list + char* buf[FL_GROUP_SIZE]; + int count = TakeBlocksFromGlobalFreeList(nSizeIdx, buf); + if (count == 0) { + count = LFAllocNoCacheMultiple(nSizeIdx, buf); + if (count == 0) { + NMalloc::AbortFromCorruptedAllocator(); // no way LFAllocNoCacheMultiple() can fail + } + } + char** dstBuf = thr->FreePtrs[nSizeIdx] + freePtrIdx - 1; + for (int i = 0; i < count - 1; ++i) + dstBuf[-i] = buf[i]; + freePtrIdx -= count - 1; + void* ptr = buf[count - 1]; +#if defined(LFALLOC_DBG) + ptr = TrackAllocation(ptr, size, nSizeIdx); +#endif + return ptr; + } +} + +static Y_FORCE_INLINE void* LFAlloc(size_t _nSize) { + void* res = LFAllocImpl(_nSize); +#ifdef DBG_FILL_MEMORY + if (FillMemoryOnAllocation && res && (_nSize <= DBG_FILL_MAX_SIZE)) { + memset(res, 0xcf, _nSize); + } +#endif + return res; +} + +static Y_FORCE_INLINE void LFFree(void* p) { +#if defined(LFALLOC_DBG) + if (p == nullptr) + return; + p = GetAllocHeader(p); +#endif + + uintptr_t chkOffset = ((char*)p - ALLOC_START) - 1ll; + if (chkOffset >= N_MAX_WORKSET_SIZE) { + if (p == nullptr) + return; +#if defined(LFALLOC_DBG) + TrackDeallocation(p, N_SIZES); +#endif + LargeBlockFree(p, CT_LARGE_FREE); + return; + } + + uintptr_t chunk = ((char*)p - ALLOC_START) / N_CHUNK_SIZE; + ptrdiff_t nSizeIdx = chunkSizeIdx[chunk]; + if (nSizeIdx <= 0) { +#if defined(LFALLOC_DBG) + TrackDeallocation(p, N_SIZES); +#endif + LargeBlockFree(p, CT_LARGE_FREE); + return; + } + +#if defined(LFALLOC_DBG) + TrackDeallocation(p, nSizeIdx); +#endif + +#ifdef DBG_FILL_MEMORY + memset(p, 0xfe, nSizeIdxToSize[nSizeIdx]); +#endif + + IncrementCounter(CT_SMALL_FREE, nSizeIdxToSize[nSizeIdx]); + + // try to store info to per thread buf + TThreadAllocInfo* thr = pThreadInfo; + if (thr) { + int& freePtrIdx = thr->FreePtrIndex[nSizeIdx]; + if (freePtrIdx > borderSizes[nSizeIdx]) { + thr->FreePtrs[nSizeIdx][--freePtrIdx] = (char*)p; + return; + } + + // move several pointers to global free list + int freeCount = FL_GROUP_SIZE; + if (freeCount > THREAD_BUF - freePtrIdx) + freeCount = THREAD_BUF - freePtrIdx; + char** freePtrs = thr->FreePtrs[nSizeIdx]; + PutBlocksToGlobalFreeList(nSizeIdx, freePtrs + freePtrIdx, freeCount); + freePtrIdx += freeCount; + + freePtrs[--freePtrIdx] = (char*)p; + + } else { + AllocThreadInfo(); + PutBlocksToGlobalFreeList(nSizeIdx, (char**)&p, 1); + } +} + +static size_t LFGetSize(const void* p) { +#if defined(LFALLOC_DBG) + if (p == nullptr) + return 0; + return GetAllocHeader(const_cast(p))->Size; +#endif + + uintptr_t chkOffset = ((const char*)p - ALLOC_START); + if (chkOffset >= N_MAX_WORKSET_SIZE) { + if (p == nullptr) + return 0; + return TLargeBlk::As(p)->Pages * 4096ll; + } + uintptr_t chunk = ((const char*)p - ALLOC_START) / N_CHUNK_SIZE; + ptrdiff_t nSizeIdx = chunkSizeIdx[chunk]; + if (nSizeIdx <= 0) + return TLargeBlk::As(p)->Pages * 4096ll; + return nSizeIdxToSize[nSizeIdx]; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// Output mem alloc stats +const int N_PAGE_SIZE = 4096; +static void DebugTraceMMgr(const char* pszFormat, ...) // __cdecl +{ + static char buff[20000]; + va_list va; + // + va_start(va, pszFormat); + vsprintf(buff, pszFormat, va); + va_end(va); +// +#ifdef _win_ + OutputDebugStringA(buff); +#else + fprintf(stderr, buff); +#endif +} + +struct TChunkStats { + char *Start, *Finish; + i64 Size; + char* Entries; + i64 FreeCount; + + TChunkStats(size_t chunk, i64 size, char* entries) + : Size(size) + , Entries(entries) + , FreeCount(0) + { + Start = ALLOC_START + chunk * N_CHUNK_SIZE; + Finish = Start + N_CHUNK_SIZE; + } + void CheckBlock(char* pBlock) { + if (pBlock && pBlock >= Start && pBlock < Finish) { + ++FreeCount; + i64 nShift = pBlock - Start; + i64 nOffsetInStep = nShift & (N_CHUNK_SIZE - 1); + Entries[nOffsetInStep / Size] = 1; + } + } + void SetGlobalFree(char* ptr) { + i64 nShift = ptr - Start; + i64 nOffsetInStep = nShift & (N_CHUNK_SIZE - 1); + while (nOffsetInStep + Size <= N_CHUNK_SIZE) { + ++FreeCount; + Entries[nOffsetInStep / Size] = 1; + nOffsetInStep += Size; + } + } +}; + +static void DumpMemoryBlockUtilizationLocked() { + TFreeListGroup* wholeLists[N_SIZES]; + for (int nSizeIdx = 0; nSizeIdx < N_SIZES; ++nSizeIdx) { + wholeLists[nSizeIdx] = (TFreeListGroup*)globalFreeLists[nSizeIdx].GetWholeList(); + } + char* bfList = (char*)blockFreeList.GetWholeList(); + + DebugTraceMMgr("memory blocks utilisation stats:\n"); + i64 nTotalAllocated = 0, nTotalFree = 0, nTotalBadPages = 0, nTotalPages = 0, nTotalUsed = 0, nTotalLocked = 0; + i64 nTotalGroupBlocks = 0; + char* entries; + entries = (char*)SystemAlloc((N_CHUNK_SIZE / 4)); + for (size_t k = 0; k < N_CHUNKS; ++k) { + if (chunkSizeIdx[k] <= 0) { + if (chunkSizeIdx[k] == -1) + nTotalLocked += N_CHUNK_SIZE; + continue; + } + i64 nSizeIdx = chunkSizeIdx[k]; + i64 nSize = nSizeIdxToSize[nSizeIdx]; + TChunkStats cs(k, nSize, entries); + int nEntriesTotal = N_CHUNK_SIZE / nSize; + memset(entries, 0, nEntriesTotal); + for (TFreeListGroup* g = wholeLists[nSizeIdx]; g; g = g->Next) { + for (auto& ptr : g->Ptrs) + cs.CheckBlock(ptr); + } + TChunkStats csGB(k, nSize, entries); + if (nSizeIdx == FREE_LIST_GROUP_SIZEIDX) { + for (auto g : wholeLists) { + for (; g; g = g->Next) + csGB.CheckBlock((char*)g); + } + for (char* blk = bfList; blk; blk = *(char**)blk) + csGB.CheckBlock(blk); + nTotalGroupBlocks += csGB.FreeCount * nSize; + } + if (((globalCurrentPtr[nSizeIdx] - ALLOC_START) / N_CHUNK_SIZE) == k) + cs.SetGlobalFree(globalCurrentPtr[nSizeIdx]); + nTotalUsed += (nEntriesTotal - cs.FreeCount - csGB.FreeCount) * nSize; + + char pages[N_CHUNK_SIZE / N_PAGE_SIZE]; + memset(pages, 0, sizeof(pages)); + for (int i = 0, nShift = 0; i < nEntriesTotal; ++i, nShift += nSize) { + int nBit = 0; + if (entries[i]) + nBit = 1; // free entry + else + nBit = 2; // used entry + for (i64 nDelta = nSize - 1; nDelta >= 0; nDelta -= N_PAGE_SIZE) + pages[(nShift + nDelta) / N_PAGE_SIZE] |= nBit; + } + i64 nBadPages = 0; + for (auto page : pages) { + nBadPages += page == 3; + nTotalPages += page != 1; + } + DebugTraceMMgr("entry = %lld; size = %lld; free = %lld; system %lld; utilisation = %g%%, fragmentation = %g%%\n", + k, nSize, cs.FreeCount * nSize, csGB.FreeCount * nSize, + (N_CHUNK_SIZE - cs.FreeCount * nSize) * 100.0f / N_CHUNK_SIZE, 100.0f * nBadPages / Y_ARRAY_SIZE(pages)); + nTotalAllocated += N_CHUNK_SIZE; + nTotalFree += cs.FreeCount * nSize; + nTotalBadPages += nBadPages; + } + SystemFree(entries); + DebugTraceMMgr("Total allocated = %llu, free = %lld, system = %lld, locked for future use %lld, utilisation = %g, fragmentation = %g\n", + nTotalAllocated, nTotalFree, nTotalGroupBlocks, nTotalLocked, + 100.0f * (nTotalAllocated - nTotalFree) / nTotalAllocated, 100.0f * nTotalBadPages / nTotalPages); + DebugTraceMMgr("Total %lld bytes used, %lld bytes in used pages\n", nTotalUsed, nTotalPages * N_PAGE_SIZE); + + for (int nSizeIdx = 0; nSizeIdx < N_SIZES; ++nSizeIdx) + globalFreeLists[nSizeIdx].ReturnWholeList(wholeLists[nSizeIdx]); + blockFreeList.ReturnWholeList(bfList); +} + +void FlushThreadFreeList() { + if (pThreadInfo) + MoveSingleThreadFreeToGlobal(pThreadInfo); +} + +void DumpMemoryBlockUtilization() { + // move current thread free to global lists to get better statistics + FlushThreadFreeList(); + { + CCriticalSectionLockMMgr ls; + DumpMemoryBlockUtilizationLocked(); + } +} + +////////////////////////////////////////////////////////////////////////// +// malloc api + +static bool LFAlloc_SetParam(const char* param, const char* value) { + if (!strcmp(param, "LB_LIMIT_TOTAL_SIZE")) { + LB_LIMIT_TOTAL_SIZE = atoi(value); + return true; + } + if (!strcmp(param, "LB_LIMIT_TOTAL_SIZE_BYTES")) { + LB_LIMIT_TOTAL_SIZE = (atoi(value) + N_PAGE_SIZE - 1) / N_PAGE_SIZE; + return true; + } +#ifdef DBG_FILL_MEMORY + if (!strcmp(param, "FillMemoryOnAllocation")) { + FillMemoryOnAllocation = !strcmp(value, "true"); + return true; + } +#endif + if (!strcmp(param, "BeforeLFAllocGlobalLockAcquired")) { + BeforeLFAllocGlobalLockAcquired = (decltype(BeforeLFAllocGlobalLockAcquired))(value); + return true; + } + if (!strcmp(param, "AfterLFAllocGlobalLockReleased")) { + AfterLFAllocGlobalLockReleased = (decltype(AfterLFAllocGlobalLockReleased))(value); + return true; + } + if (!strcmp(param, "EnterCritical")) { + assert(value); + RealEnterCritical = (decltype(RealEnterCritical))(value); + return true; + } + if (!strcmp(param, "LeaveCritical")) { + assert(value); + RealLeaveCritical = (decltype(RealLeaveCritical))(value); + return true; + } + if (!strcmp(param, "TransparentHugePages")) { + TransparentHugePages = !strcmp(value, "true"); + return true; + } + if (!strcmp(param, "MapHugeTLB")) { + MapHugeTLB = !strcmp(value, "true"); + return true; + } + if (!strcmp(param, "EnableDefrag")) { + EnableDefrag = !strcmp(value, "true"); + return true; + } + return false; +}; + +static const char* LFAlloc_GetParam(const char* param) { + struct TParam { + const char* Name; + const char* Value; + }; + + static const TParam Params[] = { + {"GetLFAllocCounterFast", (const char*)&GetLFAllocCounterFast}, + {"GetLFAllocCounterFull", (const char*)&GetLFAllocCounterFull}, +#if defined(LFALLOC_DBG) + {"SetThreadAllocTag", (const char*)&SetThreadAllocTag}, + {"SetProfileCurrentThread", (const char*)&SetProfileCurrentThread}, + {"SetProfileAllThreads", (const char*)&SetProfileAllThreads}, + {"SetAllocationSamplingEnabled", (const char*)&SetAllocationSamplingEnabled}, + {"SetAllocationSampleRate", (const char*)&SetAllocationSampleRate}, + {"SetAllocationSampleMaxSize", (const char*)&SetAllocationSampleMaxSize}, + {"SetAllocationCallback", (const char*)&SetAllocationCallback}, + {"SetDeallocationCallback", (const char*)&SetDeallocationCallback}, + {"GetPerTagAllocInfo", (const char*)&GetPerTagAllocInfo}, +#endif // LFALLOC_DBG + }; + + for (int i = 0; i < Y_ARRAY_SIZE(Params); ++i) { + if (strcmp(param, Params[i].Name) == 0) { + return Params[i].Value; + } + } + return nullptr; +} + +static Y_FORCE_INLINE void* LFVAlloc(size_t size) { + const size_t pg = N_PAGE_SIZE; + size_t bigsize = (size + pg - 1) & (~(pg - 1)); + void* p = LFAlloc(bigsize); + + Y_ASSERT_NOBT((intptr_t)p % N_PAGE_SIZE == 0); + return p; +} + +static Y_FORCE_INLINE int LFPosixMemalign(void** memptr, size_t alignment, size_t size) { + if (Y_UNLIKELY(alignment > 4096)) { +#ifdef _win_ + OutputDebugStringA("Larger alignment are not guaranteed with this implementation\n"); +#else + fprintf(stderr, "Larger alignment are not guaranteed with this implementation\n"); +#endif + NMalloc::AbortFromCorruptedAllocator(); + } + size_t bigsize = size; + if (bigsize <= alignment) { + bigsize = alignment; + } else if (bigsize < 2 * alignment) { + bigsize = 2 * alignment; + } + *memptr = LFAlloc(bigsize); + return 0; +} +#endif diff --git a/contrib/lfalloc/src/lfmalloc.h b/contrib/lfalloc/src/lfmalloc.h new file mode 100644 index 00000000000..1e6a0d55773 --- /dev/null +++ b/contrib/lfalloc/src/lfmalloc.h @@ -0,0 +1,23 @@ +#pragma once + +#include +#include +#include "util/system/compiler.h" + +namespace NMalloc { + volatile inline bool IsAllocatorCorrupted = false; + + static inline void AbortFromCorruptedAllocator() { + IsAllocatorCorrupted = true; + abort(); + } + + struct TAllocHeader { + void* Block; + size_t AllocSize; + void Y_FORCE_INLINE Encode(void* block, size_t size, size_t signature) { + Block = block; + AllocSize = size | signature; + } + }; +} diff --git a/contrib/lfalloc/src/util/README.md b/contrib/lfalloc/src/util/README.md new file mode 100644 index 00000000000..c367cb4b439 --- /dev/null +++ b/contrib/lfalloc/src/util/README.md @@ -0,0 +1,33 @@ +Style guide for the util folder is a stricter version of general style guide (mostly in terms of ambiguity resolution). + + * all {} must be in K&R style + * &, * tied closer to a type, not to variable + * always use `using` not `typedef` + * even a single line block must be in braces {}: + ``` + if (A) { + B(); + } + ``` + * _ at the end of private data member of a class - `First_`, `Second_` + * every .h file must be accompanied with corresponding .cpp to avoid a leakage and check that it is self contained + * prohibited to use `printf`-like functions + + +Things declared in the general style guide, which sometimes are missed: + + * `template <`, not `template<` + * `noexcept`, not `throw ()` nor `throw()`, not required for destructors + * indents inside `namespace` same as inside `class` + + +Requirements for a new code (and for corrections in an old code which involves change of behaviour) in util: + + * presence of UNIT-tests + * presence of comments in Doxygen style + * accessors without Get prefix (`Length()`, but not `GetLength()`) + +This guide is not a mandatory as there is the general style guide. +Nevertheless if it is not followed, then a next `ya style .` run in the util folder will undeservedly update authors of some lines of code. + +Thus before a commit it is recommended to run `ya style .` in the util folder. diff --git a/contrib/lfalloc/src/util/system/atomic.h b/contrib/lfalloc/src/util/system/atomic.h new file mode 100644 index 00000000000..9876515a54d --- /dev/null +++ b/contrib/lfalloc/src/util/system/atomic.h @@ -0,0 +1,51 @@ +#pragma once + +#include "defaults.h" + +using TAtomicBase = intptr_t; +using TAtomic = volatile TAtomicBase; + +#if defined(__GNUC__) +#include "atomic_gcc.h" +#elif defined(_MSC_VER) +#include "atomic_win.h" +#else +#error unsupported platform +#endif + +#if !defined(ATOMIC_COMPILER_BARRIER) +#define ATOMIC_COMPILER_BARRIER() +#endif + +static inline TAtomicBase AtomicSub(TAtomic& a, TAtomicBase v) { + return AtomicAdd(a, -v); +} + +static inline TAtomicBase AtomicGetAndSub(TAtomic& a, TAtomicBase v) { + return AtomicGetAndAdd(a, -v); +} + +#if defined(USE_GENERIC_SETGET) +static inline TAtomicBase AtomicGet(const TAtomic& a) { + return a; +} + +static inline void AtomicSet(TAtomic& a, TAtomicBase v) { + a = v; +} +#endif + +static inline bool AtomicTryLock(TAtomic* a) { + return AtomicCas(a, 1, 0); +} + +static inline bool AtomicTryAndTryLock(TAtomic* a) { + return (AtomicGet(*a) == 0) && AtomicTryLock(a); +} + +static inline void AtomicUnlock(TAtomic* a) { + ATOMIC_COMPILER_BARRIER(); + AtomicSet(*a, 0); +} + +#include "atomic_ops.h" diff --git a/contrib/lfalloc/src/util/system/atomic_gcc.h b/contrib/lfalloc/src/util/system/atomic_gcc.h new file mode 100644 index 00000000000..ed8dc2bdc53 --- /dev/null +++ b/contrib/lfalloc/src/util/system/atomic_gcc.h @@ -0,0 +1,90 @@ +#pragma once + +#define ATOMIC_COMPILER_BARRIER() __asm__ __volatile__("" \ + : \ + : \ + : "memory") + +static inline TAtomicBase AtomicGet(const TAtomic& a) { + TAtomicBase tmp; +#if defined(_arm64_) + __asm__ __volatile__( + "ldar %x[value], %[ptr] \n\t" + : [value] "=r"(tmp) + : [ptr] "Q"(a) + : "memory"); +#else + __atomic_load(&a, &tmp, __ATOMIC_ACQUIRE); +#endif + return tmp; +} + +static inline void AtomicSet(TAtomic& a, TAtomicBase v) { +#if defined(_arm64_) + __asm__ __volatile__( + "stlr %x[value], %[ptr] \n\t" + : [ptr] "=Q"(a) + : [value] "r"(v) + : "memory"); +#else + __atomic_store(&a, &v, __ATOMIC_RELEASE); +#endif +} + +static inline intptr_t AtomicIncrement(TAtomic& p) { + return __atomic_add_fetch(&p, 1, __ATOMIC_SEQ_CST); +} + +static inline intptr_t AtomicGetAndIncrement(TAtomic& p) { + return __atomic_fetch_add(&p, 1, __ATOMIC_SEQ_CST); +} + +static inline intptr_t AtomicDecrement(TAtomic& p) { + return __atomic_sub_fetch(&p, 1, __ATOMIC_SEQ_CST); +} + +static inline intptr_t AtomicGetAndDecrement(TAtomic& p) { + return __atomic_fetch_sub(&p, 1, __ATOMIC_SEQ_CST); +} + +static inline intptr_t AtomicAdd(TAtomic& p, intptr_t v) { + return __atomic_add_fetch(&p, v, __ATOMIC_SEQ_CST); +} + +static inline intptr_t AtomicGetAndAdd(TAtomic& p, intptr_t v) { + return __atomic_fetch_add(&p, v, __ATOMIC_SEQ_CST); +} + +static inline intptr_t AtomicSwap(TAtomic* p, intptr_t v) { + (void)p; // disable strange 'parameter set but not used' warning on gcc + intptr_t ret; + __atomic_exchange(p, &v, &ret, __ATOMIC_SEQ_CST); + return ret; +} + +static inline bool AtomicCas(TAtomic* a, intptr_t exchange, intptr_t compare) { + (void)a; // disable strange 'parameter set but not used' warning on gcc + return __atomic_compare_exchange(a, &compare, &exchange, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); +} + +static inline intptr_t AtomicGetAndCas(TAtomic* a, intptr_t exchange, intptr_t compare) { + (void)a; // disable strange 'parameter set but not used' warning on gcc + __atomic_compare_exchange(a, &compare, &exchange, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); + return compare; +} + +static inline intptr_t AtomicOr(TAtomic& a, intptr_t b) { + return __atomic_or_fetch(&a, b, __ATOMIC_SEQ_CST); +} + +static inline intptr_t AtomicXor(TAtomic& a, intptr_t b) { + return __atomic_xor_fetch(&a, b, __ATOMIC_SEQ_CST); +} + +static inline intptr_t AtomicAnd(TAtomic& a, intptr_t b) { + return __atomic_and_fetch(&a, b, __ATOMIC_SEQ_CST); +} + +static inline void AtomicBarrier() { + __sync_synchronize(); +} diff --git a/contrib/lfalloc/src/util/system/atomic_ops.h b/contrib/lfalloc/src/util/system/atomic_ops.h new file mode 100644 index 00000000000..425b643e14d --- /dev/null +++ b/contrib/lfalloc/src/util/system/atomic_ops.h @@ -0,0 +1,189 @@ +#pragma once + +#include + +template +inline TAtomic* AsAtomicPtr(T volatile* target) { + return reinterpret_cast(target); +} + +template +inline const TAtomic* AsAtomicPtr(T const volatile* target) { + return reinterpret_cast(target); +} + +// integral types + +template +struct TAtomicTraits { + enum { + Castable = std::is_integral::value && sizeof(T) == sizeof(TAtomicBase) && !std::is_const::value, + }; +}; + +template +using TEnableIfCastable = std::enable_if_t::Castable, TT>; + +template +inline TEnableIfCastable AtomicGet(T const volatile& target) { + return static_cast(AtomicGet(*AsAtomicPtr(&target))); +} + +template +inline TEnableIfCastable AtomicSet(T volatile& target, TAtomicBase value) { + AtomicSet(*AsAtomicPtr(&target), value); +} + +template +inline TEnableIfCastable AtomicIncrement(T volatile& target) { + return static_cast(AtomicIncrement(*AsAtomicPtr(&target))); +} + +template +inline TEnableIfCastable AtomicGetAndIncrement(T volatile& target) { + return static_cast(AtomicGetAndIncrement(*AsAtomicPtr(&target))); +} + +template +inline TEnableIfCastable AtomicDecrement(T volatile& target) { + return static_cast(AtomicDecrement(*AsAtomicPtr(&target))); +} + +template +inline TEnableIfCastable AtomicGetAndDecrement(T volatile& target) { + return static_cast(AtomicGetAndDecrement(*AsAtomicPtr(&target))); +} + +template +inline TEnableIfCastable AtomicAdd(T volatile& target, TAtomicBase value) { + return static_cast(AtomicAdd(*AsAtomicPtr(&target), value)); +} + +template +inline TEnableIfCastable AtomicGetAndAdd(T volatile& target, TAtomicBase value) { + return static_cast(AtomicGetAndAdd(*AsAtomicPtr(&target), value)); +} + +template +inline TEnableIfCastable AtomicSub(T volatile& target, TAtomicBase value) { + return static_cast(AtomicSub(*AsAtomicPtr(&target), value)); +} + +template +inline TEnableIfCastable AtomicGetAndSub(T volatile& target, TAtomicBase value) { + return static_cast(AtomicGetAndSub(*AsAtomicPtr(&target), value)); +} + +template +inline TEnableIfCastable AtomicSwap(T volatile* target, TAtomicBase exchange) { + return static_cast(AtomicSwap(AsAtomicPtr(target), exchange)); +} + +template +inline TEnableIfCastable AtomicCas(T volatile* target, TAtomicBase exchange, TAtomicBase compare) { + return AtomicCas(AsAtomicPtr(target), exchange, compare); +} + +template +inline TEnableIfCastable AtomicGetAndCas(T volatile* target, TAtomicBase exchange, TAtomicBase compare) { + return static_cast(AtomicGetAndCas(AsAtomicPtr(target), exchange, compare)); +} + +template +inline TEnableIfCastable AtomicTryLock(T volatile* target) { + return AtomicTryLock(AsAtomicPtr(target)); +} + +template +inline TEnableIfCastable AtomicTryAndTryLock(T volatile* target) { + return AtomicTryAndTryLock(AsAtomicPtr(target)); +} + +template +inline TEnableIfCastable AtomicUnlock(T volatile* target) { + AtomicUnlock(AsAtomicPtr(target)); +} + +template +inline TEnableIfCastable AtomicOr(T volatile& target, TAtomicBase value) { + return static_cast(AtomicOr(*AsAtomicPtr(&target), value)); +} + +template +inline TEnableIfCastable AtomicAnd(T volatile& target, TAtomicBase value) { + return static_cast(AtomicAnd(*AsAtomicPtr(&target), value)); +} + +template +inline TEnableIfCastable AtomicXor(T volatile& target, TAtomicBase value) { + return static_cast(AtomicXor(*AsAtomicPtr(&target), value)); +} + +// pointer types + +template +inline T* AtomicGet(T* const volatile& target) { + return reinterpret_cast(AtomicGet(*AsAtomicPtr(&target))); +} + +template +inline void AtomicSet(T* volatile& target, T* value) { + AtomicSet(*AsAtomicPtr(&target), reinterpret_cast(value)); +} + +using TNullPtr = decltype(nullptr); + +template +inline void AtomicSet(T* volatile& target, TNullPtr) { + AtomicSet(*AsAtomicPtr(&target), 0); +} + +template +inline T* AtomicSwap(T* volatile* target, T* exchange) { + return reinterpret_cast(AtomicSwap(AsAtomicPtr(target), reinterpret_cast(exchange))); +} + +template +inline T* AtomicSwap(T* volatile* target, TNullPtr) { + return reinterpret_cast(AtomicSwap(AsAtomicPtr(target), 0)); +} + +template +inline bool AtomicCas(T* volatile* target, T* exchange, T* compare) { + return AtomicCas(AsAtomicPtr(target), reinterpret_cast(exchange), reinterpret_cast(compare)); +} + +template +inline T* AtomicGetAndCas(T* volatile* target, T* exchange, T* compare) { + return reinterpret_cast(AtomicGetAndCas(AsAtomicPtr(target), reinterpret_cast(exchange), reinterpret_cast(compare))); +} + +template +inline bool AtomicCas(T* volatile* target, T* exchange, TNullPtr) { + return AtomicCas(AsAtomicPtr(target), reinterpret_cast(exchange), 0); +} + +template +inline T* AtomicGetAndCas(T* volatile* target, T* exchange, TNullPtr) { + return reinterpret_cast(AtomicGetAndCas(AsAtomicPtr(target), reinterpret_cast(exchange), 0)); +} + +template +inline bool AtomicCas(T* volatile* target, TNullPtr, T* compare) { + return AtomicCas(AsAtomicPtr(target), 0, reinterpret_cast(compare)); +} + +template +inline T* AtomicGetAndCas(T* volatile* target, TNullPtr, T* compare) { + return reinterpret_cast(AtomicGetAndCas(AsAtomicPtr(target), 0, reinterpret_cast(compare))); +} + +template +inline bool AtomicCas(T* volatile* target, TNullPtr, TNullPtr) { + return AtomicCas(AsAtomicPtr(target), 0, 0); +} + +template +inline T* AtomicGetAndCas(T* volatile* target, TNullPtr, TNullPtr) { + return reinterpret_cast(AtomicGetAndCas(AsAtomicPtr(target), 0, 0)); +} diff --git a/contrib/lfalloc/src/util/system/atomic_win.h b/contrib/lfalloc/src/util/system/atomic_win.h new file mode 100644 index 00000000000..1abebd87b38 --- /dev/null +++ b/contrib/lfalloc/src/util/system/atomic_win.h @@ -0,0 +1,114 @@ +#pragma once + +#include + +#define USE_GENERIC_SETGET + +#if defined(_i386_) + +#pragma intrinsic(_InterlockedIncrement) +#pragma intrinsic(_InterlockedDecrement) +#pragma intrinsic(_InterlockedExchangeAdd) +#pragma intrinsic(_InterlockedExchange) +#pragma intrinsic(_InterlockedCompareExchange) + +static inline intptr_t AtomicIncrement(TAtomic& a) { + return _InterlockedIncrement((volatile long*)&a); +} + +static inline intptr_t AtomicGetAndIncrement(TAtomic& a) { + return _InterlockedIncrement((volatile long*)&a) - 1; +} + +static inline intptr_t AtomicDecrement(TAtomic& a) { + return _InterlockedDecrement((volatile long*)&a); +} + +static inline intptr_t AtomicGetAndDecrement(TAtomic& a) { + return _InterlockedDecrement((volatile long*)&a) + 1; +} + +static inline intptr_t AtomicAdd(TAtomic& a, intptr_t b) { + return _InterlockedExchangeAdd((volatile long*)&a, b) + b; +} + +static inline intptr_t AtomicGetAndAdd(TAtomic& a, intptr_t b) { + return _InterlockedExchangeAdd((volatile long*)&a, b); +} + +static inline intptr_t AtomicSwap(TAtomic* a, intptr_t b) { + return _InterlockedExchange((volatile long*)a, b); +} + +static inline bool AtomicCas(TAtomic* a, intptr_t exchange, intptr_t compare) { + return _InterlockedCompareExchange((volatile long*)a, exchange, compare) == compare; +} + +static inline intptr_t AtomicGetAndCas(TAtomic* a, intptr_t exchange, intptr_t compare) { + return _InterlockedCompareExchange((volatile long*)a, exchange, compare); +} + +#else // _x86_64_ + +#pragma intrinsic(_InterlockedIncrement64) +#pragma intrinsic(_InterlockedDecrement64) +#pragma intrinsic(_InterlockedExchangeAdd64) +#pragma intrinsic(_InterlockedExchange64) +#pragma intrinsic(_InterlockedCompareExchange64) + +static inline intptr_t AtomicIncrement(TAtomic& a) { + return _InterlockedIncrement64((volatile __int64*)&a); +} + +static inline intptr_t AtomicGetAndIncrement(TAtomic& a) { + return _InterlockedIncrement64((volatile __int64*)&a) - 1; +} + +static inline intptr_t AtomicDecrement(TAtomic& a) { + return _InterlockedDecrement64((volatile __int64*)&a); +} + +static inline intptr_t AtomicGetAndDecrement(TAtomic& a) { + return _InterlockedDecrement64((volatile __int64*)&a) + 1; +} + +static inline intptr_t AtomicAdd(TAtomic& a, intptr_t b) { + return _InterlockedExchangeAdd64((volatile __int64*)&a, b) + b; +} + +static inline intptr_t AtomicGetAndAdd(TAtomic& a, intptr_t b) { + return _InterlockedExchangeAdd64((volatile __int64*)&a, b); +} + +static inline intptr_t AtomicSwap(TAtomic* a, intptr_t b) { + return _InterlockedExchange64((volatile __int64*)a, b); +} + +static inline bool AtomicCas(TAtomic* a, intptr_t exchange, intptr_t compare) { + return _InterlockedCompareExchange64((volatile __int64*)a, exchange, compare) == compare; +} + +static inline intptr_t AtomicGetAndCas(TAtomic* a, intptr_t exchange, intptr_t compare) { + return _InterlockedCompareExchange64((volatile __int64*)a, exchange, compare); +} + +static inline intptr_t AtomicOr(TAtomic& a, intptr_t b) { + return _InterlockedOr64(&a, b) | b; +} + +static inline intptr_t AtomicAnd(TAtomic& a, intptr_t b) { + return _InterlockedAnd64(&a, b) & b; +} + +static inline intptr_t AtomicXor(TAtomic& a, intptr_t b) { + return _InterlockedXor64(&a, b) ^ b; +} + +#endif // _x86_ + +//TODO +static inline void AtomicBarrier() { + TAtomic val = 0; + + AtomicSwap(&val, 0); +} diff --git a/contrib/lfalloc/src/util/system/compiler.h b/contrib/lfalloc/src/util/system/compiler.h new file mode 100644 index 00000000000..b5cec600923 --- /dev/null +++ b/contrib/lfalloc/src/util/system/compiler.h @@ -0,0 +1,617 @@ +#pragma once + +// useful cross-platfrom definitions for compilers + +/** + * @def Y_FUNC_SIGNATURE + * + * Use this macro to get pretty function name (see example). + * + * @code + * void Hi() { + * Cout << Y_FUNC_SIGNATURE << Endl; + * } + + * template + * void Do() { + * Cout << Y_FUNC_SIGNATURE << Endl; + * } + + * int main() { + * Hi(); // void Hi() + * Do(); // void Do() [T = int] + * Do(); // void Do() [T = TString] + * } + * @endcode + */ +#if defined(__GNUC__) +#define Y_FUNC_SIGNATURE __PRETTY_FUNCTION__ +#elif defined(_MSC_VER) +#define Y_FUNC_SIGNATURE __FUNCSIG__ +#else +#define Y_FUNC_SIGNATURE "" +#endif + +#ifdef __GNUC__ +#define Y_PRINTF_FORMAT(n, m) __attribute__((__format__(__printf__, n, m))) +#endif + +#ifndef Y_PRINTF_FORMAT +#define Y_PRINTF_FORMAT(n, m) +#endif + +#if defined(__clang__) +#define Y_NO_SANITIZE(...) __attribute__((no_sanitize(__VA_ARGS__))) +#endif + +#if !defined(Y_NO_SANITIZE) +#define Y_NO_SANITIZE(...) +#endif + +/** + * @def Y_DECLARE_UNUSED + * + * Macro is needed to silence compiler warning about unused entities (e.g. function or argument). + * + * @code + * Y_DECLARE_UNUSED int FunctionUsedSolelyForDebugPurposes(); + * assert(FunctionUsedSolelyForDebugPurposes() == 42); + * + * void Foo(const int argumentUsedOnlyForDebugPurposes Y_DECLARE_UNUSED) { + * assert(argumentUsedOnlyForDebugPurposes == 42); + * // however you may as well omit `Y_DECLARE_UNUSED` and use `UNUSED` macro instead + * Y_UNUSED(argumentUsedOnlyForDebugPurposes); + * } + * @endcode + */ +#ifdef __GNUC__ +#define Y_DECLARE_UNUSED __attribute__((unused)) +#endif + +#ifndef Y_DECLARE_UNUSED +#define Y_DECLARE_UNUSED +#endif + +#if defined(__GNUC__) +#define Y_LIKELY(Cond) __builtin_expect(!!(Cond), 1) +#define Y_UNLIKELY(Cond) __builtin_expect(!!(Cond), 0) +#define Y_PREFETCH_READ(Pointer, Priority) __builtin_prefetch((const void*)(Pointer), 0, Priority) +#define Y_PREFETCH_WRITE(Pointer, Priority) __builtin_prefetch((const void*)(Pointer), 1, Priority) +#endif + +/** + * @def Y_FORCE_INLINE + * + * Macro to use in place of 'inline' in function declaration/definition to force + * it to be inlined. + */ +#if !defined(Y_FORCE_INLINE) +#if defined(CLANG_COVERAGE) +#/* excessive __always_inline__ might significantly slow down compilation of an instrumented unit */ +#define Y_FORCE_INLINE inline +#elif defined(_MSC_VER) +#define Y_FORCE_INLINE __forceinline +#elif defined(__GNUC__) +#/* Clang also defines __GNUC__ (as 4) */ +#define Y_FORCE_INLINE inline __attribute__((__always_inline__)) +#else +#define Y_FORCE_INLINE inline +#endif +#endif + +/** + * @def Y_NO_INLINE + * + * Macro to use in place of 'inline' in function declaration/definition to + * prevent it from being inlined. + */ +#if !defined(Y_NO_INLINE) +#if defined(_MSC_VER) +#define Y_NO_INLINE __declspec(noinline) +#elif defined(__GNUC__) || defined(__INTEL_COMPILER) +#/* Clang also defines __GNUC__ (as 4) */ +#define Y_NO_INLINE __attribute__((__noinline__)) +#else +#define Y_NO_INLINE +#endif +#endif + +//to cheat compiler about strict aliasing or similar problems +#if defined(__GNUC__) +#define Y_FAKE_READ(X) \ + do { \ + __asm__ __volatile__("" \ + : \ + : "m"(X)); \ + } while (0) + +#define Y_FAKE_WRITE(X) \ + do { \ + __asm__ __volatile__("" \ + : "=m"(X)); \ + } while (0) +#endif + +#if !defined(Y_FAKE_READ) +#define Y_FAKE_READ(X) +#endif + +#if !defined(Y_FAKE_WRITE) +#define Y_FAKE_WRITE(X) +#endif + +#ifndef Y_PREFETCH_READ +#define Y_PREFETCH_READ(Pointer, Priority) (void)(const void*)(Pointer), (void)Priority +#endif + +#ifndef Y_PREFETCH_WRITE +#define Y_PREFETCH_WRITE(Pointer, Priority) (void)(const void*)(Pointer), (void)Priority +#endif + +#ifndef Y_LIKELY +#define Y_LIKELY(Cond) (Cond) +#define Y_UNLIKELY(Cond) (Cond) +#endif + +#ifdef __GNUC__ +#define _packed __attribute__((packed)) +#else +#define _packed +#endif + +#if defined(__GNUC__) +#define Y_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) +#endif + +#ifndef Y_WARN_UNUSED_RESULT +#define Y_WARN_UNUSED_RESULT +#endif + +#if defined(__GNUC__) +#define Y_HIDDEN __attribute__((visibility("hidden"))) +#endif + +#if !defined(Y_HIDDEN) +#define Y_HIDDEN +#endif + +#if defined(__GNUC__) +#define Y_PUBLIC __attribute__((visibility("default"))) +#endif + +#if !defined(Y_PUBLIC) +#define Y_PUBLIC +#endif + +#if !defined(Y_UNUSED) && !defined(__cplusplus) +#define Y_UNUSED(var) (void)(var) +#endif +#if !defined(Y_UNUSED) && defined(__cplusplus) +template +constexpr Y_FORCE_INLINE int Y_UNUSED(Types&&...) { + return 0; +}; +#endif + +/** + * @def Y_ASSUME + * + * Macro that tells the compiler that it can generate optimized code + * as if the given expression will always evaluate true. + * The behavior is undefined if it ever evaluates false. + * + * @code + * // factored into a function so that it's testable + * inline int Avg(int x, int y) { + * if (x >= 0 && y >= 0) { + * return (static_cast(x) + static_cast(y)) >> 1; + * } else { + * // a slower implementation + * } + * } + * + * // we know that xs and ys are non-negative from domain knowledge, + * // but we can't change the types of xs and ys because of API constrains + * int Foo(const TVector& xs, const TVector& ys) { + * TVector avgs; + * avgs.resize(xs.size()); + * for (size_t i = 0; i < xs.size(); ++i) { + * auto x = xs[i]; + * auto y = ys[i]; + * Y_ASSUME(x >= 0); + * Y_ASSUME(y >= 0); + * xs[i] = Avg(x, y); + * } + * } + * @endcode + */ +#if defined(__GNUC__) +#define Y_ASSUME(condition) ((condition) ? (void)0 : __builtin_unreachable()) +#elif defined(_MSC_VER) +#define Y_ASSUME(condition) __assume(condition) +#else +#define Y_ASSUME(condition) Y_UNUSED(condition) +#endif + +#ifdef __cplusplus +[[noreturn]] +#endif +Y_HIDDEN void _YandexAbort(); + +/** + * @def Y_UNREACHABLE + * + * Macro that marks the rest of the code branch unreachable. + * The behavior is undefined if it's ever reached. + * + * @code + * switch (i % 3) { + * case 0: + * return foo; + * case 1: + * return bar; + * case 2: + * return baz; + * default: + * Y_UNREACHABLE(); + * } + * @endcode + */ +#if defined(__GNUC__) || defined(_MSC_VER) +#define Y_UNREACHABLE() Y_ASSUME(0) +#else +#define Y_UNREACHABLE() _YandexAbort() +#endif + +#if defined(undefined_sanitizer_enabled) +#define _ubsan_enabled_ +#endif + +#ifdef __clang__ + +#if __has_feature(thread_sanitizer) +#define _tsan_enabled_ +#endif +#if __has_feature(memory_sanitizer) +#define _msan_enabled_ +#endif +#if __has_feature(address_sanitizer) +#define _asan_enabled_ +#endif + +#else + +#if defined(thread_sanitizer_enabled) || defined(__SANITIZE_THREAD__) +#define _tsan_enabled_ +#endif +#if defined(memory_sanitizer_enabled) +#define _msan_enabled_ +#endif +#if defined(address_sanitizer_enabled) || defined(__SANITIZE_ADDRESS__) +#define _asan_enabled_ +#endif + +#endif + +#if defined(_asan_enabled_) || defined(_msan_enabled_) || defined(_tsan_enabled_) || defined(_ubsan_enabled_) +#define _san_enabled_ +#endif + +#if defined(_MSC_VER) +#define __PRETTY_FUNCTION__ __FUNCSIG__ +#endif + +#if defined(__GNUC__) +#define Y_WEAK __attribute__((weak)) +#else +#define Y_WEAK +#endif + +#if defined(__CUDACC_VER_MAJOR__) +#define Y_CUDA_AT_LEAST(x, y) (__CUDACC_VER_MAJOR__ > x || (__CUDACC_VER_MAJOR__ == x && __CUDACC_VER_MINOR__ >= y)) +#else +#define Y_CUDA_AT_LEAST(x, y) 0 +#endif + +// NVidia CUDA C++ Compiler did not know about noexcept keyword until version 9.0 +#if !Y_CUDA_AT_LEAST(9, 0) +#if defined(__CUDACC__) && !defined(noexcept) +#define noexcept throw () +#endif +#endif + +#if defined(__GNUC__) +#define Y_COLD __attribute__((cold)) +#define Y_LEAF __attribute__((leaf)) +#define Y_WRAPPER __attribute__((artificial)) +#else +#define Y_COLD +#define Y_LEAF +#define Y_WRAPPER +#endif + +/** + * @def Y_PRAGMA + * + * Macro for use in other macros to define compiler pragma + * See below for other usage examples + * + * @code + * #if defined(__clang__) || defined(__GNUC__) + * #define Y_PRAGMA_NO_WSHADOW \ + * Y_PRAGMA("GCC diagnostic ignored \"-Wshadow\"") + * #elif defined(_MSC_VER) + * #define Y_PRAGMA_NO_WSHADOW \ + * Y_PRAGMA("warning(disable:4456 4457") + * #else + * #define Y_PRAGMA_NO_WSHADOW + * #endif + * @endcode + */ +#if defined(__clang__) || defined(__GNUC__) +#define Y_PRAGMA(x) _Pragma(x) +#elif defined(_MSC_VER) +#define Y_PRAGMA(x) __pragma(x) +#else +#define Y_PRAGMA(x) +#endif + +/** + * @def Y_PRAGMA_DIAGNOSTIC_PUSH + * + * Cross-compiler pragma to save diagnostic settings + * + * @see + * GCC: https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html + * MSVC: https://msdn.microsoft.com/en-us/library/2c8f766e.aspx + * Clang: https://clang.llvm.org/docs/UsersManual.html#controlling-diagnostics-via-pragmas + * + * @code + * Y_PRAGMA_DIAGNOSTIC_PUSH + * @endcode + */ +#if defined(__clang__) || defined(__GNUC__) +#define Y_PRAGMA_DIAGNOSTIC_PUSH \ + Y_PRAGMA("GCC diagnostic push") +#elif defined(_MSC_VER) +#define Y_PRAGMA_DIAGNOSTIC_PUSH \ + Y_PRAGMA(warning(push)) +#else +#define Y_PRAGMA_DIAGNOSTIC_PUSH +#endif + +/** + * @def Y_PRAGMA_DIAGNOSTIC_POP + * + * Cross-compiler pragma to restore diagnostic settings + * + * @see + * GCC: https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html + * MSVC: https://msdn.microsoft.com/en-us/library/2c8f766e.aspx + * Clang: https://clang.llvm.org/docs/UsersManual.html#controlling-diagnostics-via-pragmas + * + * @code + * Y_PRAGMA_DIAGNOSTIC_POP + * @endcode + */ +#if defined(__clang__) || defined(__GNUC__) +#define Y_PRAGMA_DIAGNOSTIC_POP \ + Y_PRAGMA("GCC diagnostic pop") +#elif defined(_MSC_VER) +#define Y_PRAGMA_DIAGNOSTIC_POP \ + Y_PRAGMA(warning(pop)) +#else +#define Y_PRAGMA_DIAGNOSTIC_POP +#endif + +/** + * @def Y_PRAGMA_NO_WSHADOW + * + * Cross-compiler pragma to disable warnings about shadowing variables + * + * @code + * Y_PRAGMA_DIAGNOSTIC_PUSH + * Y_PRAGMA_NO_WSHADOW + * + * // some code which use variable shadowing, e.g.: + * + * for (int i = 0; i < 100; ++i) { + * Use(i); + * + * for (int i = 42; i < 100500; ++i) { // this i is shadowing previous i + * AnotherUse(i); + * } + * } + * + * Y_PRAGMA_DIAGNOSTIC_POP + * @endcode + */ +#if defined(__clang__) || defined(__GNUC__) +#define Y_PRAGMA_NO_WSHADOW \ + Y_PRAGMA("GCC diagnostic ignored \"-Wshadow\"") +#elif defined(_MSC_VER) +#define Y_PRAGMA_NO_WSHADOW \ + Y_PRAGMA(warning(disable : 4456 4457)) +#else +#define Y_PRAGMA_NO_WSHADOW +#endif + +/** + * @ def Y_PRAGMA_NO_UNUSED_FUNCTION + * + * Cross-compiler pragma to disable warnings about unused functions + * + * @see + * GCC: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html + * Clang: https://clang.llvm.org/docs/DiagnosticsReference.html#wunused-function + * MSVC: there is no such warning + * + * @code + * Y_PRAGMA_DIAGNOSTIC_PUSH + * Y_PRAGMA_NO_UNUSED_FUNCTION + * + * // some code which introduces a function which later will not be used, e.g.: + * + * void Foo() { + * } + * + * int main() { + * return 0; // Foo() never called + * } + * + * Y_PRAGMA_DIAGNOSTIC_POP + * @endcode + */ +#if defined(__clang__) || defined(__GNUC__) +#define Y_PRAGMA_NO_UNUSED_FUNCTION \ + Y_PRAGMA("GCC diagnostic ignored \"-Wunused-function\"") +#else +#define Y_PRAGMA_NO_UNUSED_FUNCTION +#endif + +/** + * @ def Y_PRAGMA_NO_UNUSED_PARAMETER + * + * Cross-compiler pragma to disable warnings about unused function parameters + * + * @see + * GCC: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html + * Clang: https://clang.llvm.org/docs/DiagnosticsReference.html#wunused-parameter + * MSVC: https://msdn.microsoft.com/en-us/library/26kb9fy0.aspx + * + * @code + * Y_PRAGMA_DIAGNOSTIC_PUSH + * Y_PRAGMA_NO_UNUSED_PARAMETER + * + * // some code which introduces a function with unused parameter, e.g.: + * + * void foo(int a) { + * // a is not referenced + * } + * + * int main() { + * foo(1); + * return 0; + * } + * + * Y_PRAGMA_DIAGNOSTIC_POP + * @endcode + */ +#if defined(__clang__) || defined(__GNUC__) +#define Y_PRAGMA_NO_UNUSED_PARAMETER \ + Y_PRAGMA("GCC diagnostic ignored \"-Wunused-parameter\"") +#elif defined(_MSC_VER) +#define Y_PRAGMA_NO_UNUSED_PARAMETER \ + Y_PRAGMA(warning(disable : 4100)) +#else +#define Y_PRAGMA_NO_UNUSED_PARAMETER +#endif + +/** + * @def Y_PRAGMA_NO_DEPRECATED + * + * Cross compiler pragma to disable warnings and errors about deprecated + * + * @see + * GCC: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html + * Clang: https://clang.llvm.org/docs/DiagnosticsReference.html#wdeprecated + * MSVC: https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-3-c4996?view=vs-2017 + * + * @code + * Y_PRAGMA_DIAGNOSTIC_PUSH + * Y_PRAGMA_NO_DEPRECATED + * + * [deprecated] void foo() { + * // ... + * } + * + * int main() { + * foo(); + * return 0; + * } + * + * Y_PRAGMA_DIAGNOSTIC_POP + * @endcode + */ +#if defined(__clang__) || defined(__GNUC__) +#define Y_PRAGMA_NO_DEPRECATED \ + Y_PRAGMA("GCC diagnostic ignored \"-Wdeprecated\"") +#elif defined(_MSC_VER) +#define Y_PRAGMA_NO_DEPRECATED \ + Y_PRAGMA(warning(disable : 4996)) +#else +#define Y_PRAGMA_NO_DEPRECATED +#endif + +#if defined(__clang__) || defined(__GNUC__) +/** + * @def Y_CONST_FUNCTION + methods and functions, marked with this method are promised to: + 1. do not have side effects + 2. this method do not read global memory + NOTE: this attribute can't be set for methods that depend on data, pointed by this + this allow compilers to do hard optimization of that functions + NOTE: in common case this attribute can't be set if method have pointer-arguments + NOTE: as result there no any reason to discard result of such method +*/ +#define Y_CONST_FUNCTION [[gnu::const]] +#endif + +#if !defined(Y_CONST_FUNCTION) +#define Y_CONST_FUNCTION +#endif + +#if defined(__clang__) || defined(__GNUC__) +/** + * @def Y_PURE_FUNCTION + methods and functions, marked with this method are promised to: + 1. do not have side effects + 2. result will be the same if no global memory changed + this allow compilers to do hard optimization of that functions + NOTE: as result there no any reason to discard result of such method +*/ +#define Y_PURE_FUNCTION [[gnu::pure]] +#endif + +#if !defined(Y_PURE_FUNCTION) +#define Y_PURE_FUNCTION +#endif + +/** + * @ def Y_HAVE_INT128 + * + * Defined when the compiler supports __int128 extension + * + * @code + * + * #if defined(Y_HAVE_INT128) + * __int128 myVeryBigInt = 12345678901234567890; + * #endif + * + * @endcode + */ +#if defined(__SIZEOF_INT128__) +#define Y_HAVE_INT128 1 +#endif + +/** + * XRAY macro must be passed to compiler if XRay is enabled. + * + * Define everything XRay-specific as a macro so that it doesn't cause errors + * for compilers that doesn't support XRay. + */ +#if defined(XRAY) && defined(__cplusplus) +#include +#define Y_XRAY_ALWAYS_INSTRUMENT [[clang::xray_always_instrument]] +#define Y_XRAY_NEVER_INSTRUMENT [[clang::xray_never_instrument]] +#define Y_XRAY_CUSTOM_EVENT(__string, __length) \ + do { \ + __xray_customevent(__string, __length); \ + } while (0) +#else +#define Y_XRAY_ALWAYS_INSTRUMENT +#define Y_XRAY_NEVER_INSTRUMENT +#define Y_XRAY_CUSTOM_EVENT(__string, __length) \ + do { \ + } while (0) +#endif diff --git a/contrib/lfalloc/src/util/system/defaults.h b/contrib/lfalloc/src/util/system/defaults.h new file mode 100644 index 00000000000..19196a28b2b --- /dev/null +++ b/contrib/lfalloc/src/util/system/defaults.h @@ -0,0 +1,168 @@ +#pragma once + +#include "platform.h" + +#if defined _unix_ +#define LOCSLASH_C '/' +#define LOCSLASH_S "/" +#else +#define LOCSLASH_C '\\' +#define LOCSLASH_S "\\" +#endif // _unix_ + +#if defined(__INTEL_COMPILER) && defined(__cplusplus) +#include +#endif + +// low and high parts of integers +#if !defined(_win_) +#include +#endif + +#if defined(BSD) || defined(_android_) + +#if defined(BSD) +#include +#endif + +#if defined(_android_) +#include +#endif + +#if (BYTE_ORDER == LITTLE_ENDIAN) +#define _little_endian_ +#elif (BYTE_ORDER == BIG_ENDIAN) +#define _big_endian_ +#else +#error unknown endian not supported +#endif + +#elif (defined(_sun_) && !defined(__i386__)) || defined(_hpux_) || defined(WHATEVER_THAT_HAS_BIG_ENDIAN) +#define _big_endian_ +#else +#define _little_endian_ +#endif + +// alignment +#if (defined(_sun_) && !defined(__i386__)) || defined(_hpux_) || defined(__alpha__) || defined(__ia64__) || defined(WHATEVER_THAT_NEEDS_ALIGNING_QUADS) +#define _must_align8_ +#endif + +#if (defined(_sun_) && !defined(__i386__)) || defined(_hpux_) || defined(__alpha__) || defined(__ia64__) || defined(WHATEVER_THAT_NEEDS_ALIGNING_LONGS) +#define _must_align4_ +#endif + +#if (defined(_sun_) && !defined(__i386__)) || defined(_hpux_) || defined(__alpha__) || defined(__ia64__) || defined(WHATEVER_THAT_NEEDS_ALIGNING_SHORTS) +#define _must_align2_ +#endif + +#if defined(__GNUC__) +#define alias_hack __attribute__((__may_alias__)) +#endif + +#ifndef alias_hack +#define alias_hack +#endif + +#include "types.h" + +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +#define PRAGMA(x) _Pragma(#x) +#define RCSID(idstr) PRAGMA(comment(exestr, idstr)) +#else +#define RCSID(idstr) static const char rcsid[] = idstr +#endif + +#include "compiler.h" + +#ifdef _win_ +#include +#elif defined(_sun_) +#include +#endif + +#ifdef NDEBUG +#define Y_IF_DEBUG(X) +#else +#define Y_IF_DEBUG(X) X +#endif + +/** + * @def Y_ARRAY_SIZE + * + * This macro is needed to get number of elements in a statically allocated fixed size array. The + * expression is a compile-time constant and therefore can be used in compile time computations. + * + * @code + * enum ENumbers { + * EN_ONE, + * EN_TWO, + * EN_SIZE + * } + * + * const char* NAMES[] = { + * "one", + * "two" + * } + * + * static_assert(Y_ARRAY_SIZE(NAMES) == EN_SIZE, "you should define `NAME` for each enumeration"); + * @endcode + * + * This macro also catches type errors. If you see a compiler error like "warning: division by zero + * is undefined" when using `Y_ARRAY_SIZE` then you are probably giving it a pointer. + * + * Since all of our code is expected to work on a 64 bit platform where pointers are 8 bytes we may + * falsefully accept pointers to types of sizes that are divisors of 8 (1, 2, 4 and 8). + */ +#if defined(__cplusplus) +namespace NArraySizePrivate { + template + struct TArraySize; + + template + struct TArraySize { + enum { + Result = N + }; + }; + + template + struct TArraySize { + enum { + Result = N + }; + }; +} + +#define Y_ARRAY_SIZE(arr) ((size_t)::NArraySizePrivate::TArraySize::Result) +#else +#undef Y_ARRAY_SIZE +#define Y_ARRAY_SIZE(arr) \ + ((sizeof(arr) / sizeof((arr)[0])) / static_cast(!(sizeof(arr) % sizeof((arr)[0])))) +#endif + +#undef Y_ARRAY_BEGIN +#define Y_ARRAY_BEGIN(arr) (arr) + +#undef Y_ARRAY_END +#define Y_ARRAY_END(arr) ((arr) + Y_ARRAY_SIZE(arr)) + +/** + * Concatenates two symbols, even if one of them is itself a macro. + */ +#define Y_CAT(X, Y) Y_CAT_I(X, Y) +#define Y_CAT_I(X, Y) Y_CAT_II(X, Y) +#define Y_CAT_II(X, Y) X##Y + +#define Y_STRINGIZE(X) UTIL_PRIVATE_STRINGIZE_AUX(X) +#define UTIL_PRIVATE_STRINGIZE_AUX(X) #X + +#if defined(__COUNTER__) +#define Y_GENERATE_UNIQUE_ID(N) Y_CAT(N, __COUNTER__) +#endif + +#if !defined(Y_GENERATE_UNIQUE_ID) +#define Y_GENERATE_UNIQUE_ID(N) Y_CAT(N, __LINE__) +#endif + +#define NPOS ((size_t)-1) diff --git a/contrib/lfalloc/src/util/system/platform.h b/contrib/lfalloc/src/util/system/platform.h new file mode 100644 index 00000000000..0687f239a2e --- /dev/null +++ b/contrib/lfalloc/src/util/system/platform.h @@ -0,0 +1,242 @@ +#pragma once + +// What OS ? +// our definition has the form _{osname}_ + +#if defined(_WIN64) +#define _win64_ +#define _win32_ +#elif defined(__WIN32__) || defined(_WIN32) // _WIN32 is also defined by the 64-bit compiler for backward compatibility +#define _win32_ +#else +#define _unix_ +#if defined(__sun__) || defined(sun) || defined(sparc) || defined(__sparc) +#define _sun_ +#endif +#if defined(__hpux__) +#define _hpux_ +#endif +#if defined(__linux__) +#define _linux_ +#endif +#if defined(__FreeBSD__) +#define _freebsd_ +#endif +#if defined(__CYGWIN__) +#define _cygwin_ +#endif +#if defined(__APPLE__) +#define _darwin_ +#endif +#if defined(__ANDROID__) +#define _android_ +#endif +#endif + +#if defined(__IOS__) +#define _ios_ +#endif + +#if defined(_linux_) +#if defined(_musl_) +//nothing to do +#elif defined(_android_) +#define _bionic_ +#else +#define _glibc_ +#endif +#endif + +#if defined(_darwin_) +#define unix +#define __unix__ +#endif + +#if defined(_win32_) || defined(_win64_) +#define _win_ +#endif + +#if defined(__arm__) || defined(__ARM__) || defined(__ARM_NEON) || defined(__aarch64__) || defined(_M_ARM) +#if defined(__arm64) || defined(__arm64__) || defined(__aarch64__) +#define _arm64_ +#else +#define _arm32_ +#endif +#endif + +#if defined(_arm64_) || defined(_arm32_) +#define _arm_ +#endif + +/* __ia64__ and __x86_64__ - defined by GNU C. + * _M_IA64, _M_X64, _M_AMD64 - defined by Visual Studio. + * + * Microsoft can define _M_IX86, _M_AMD64 (before Visual Studio 8) + * or _M_X64 (starting in Visual Studio 8). + */ +#if defined(__x86_64__) || defined(_M_X64) || defined(_M_AMD64) +#define _x86_64_ +#endif + +#if defined(__i386__) || defined(_M_IX86) +#define _i386_ +#endif + +#if defined(__ia64__) || defined(_M_IA64) +#define _ia64_ +#endif + +#if defined(__powerpc__) +#define _ppc_ +#endif + +#if defined(__powerpc64__) +#define _ppc64_ +#endif + +#if !defined(sparc) && !defined(__sparc) && !defined(__hpux__) && !defined(__alpha__) && !defined(_ia64_) && !defined(_x86_64_) && !defined(_arm_) && !defined(_i386_) && !defined(_ppc_) && !defined(_ppc64_) +#error "platform not defined, please, define one" +#endif + +#if defined(_x86_64_) || defined(_i386_) +#define _x86_ +#endif + +#if defined(__MIC__) +#define _mic_ +#define _k1om_ +#endif + +// stdio or MessageBox +#if defined(__CONSOLE__) || defined(_CONSOLE) +#define _console_ +#endif +#if (defined(_win_) && !defined(_console_)) +#define _windows_ +#elif !defined(_console_) +#define _console_ +#endif + +#if defined(__SSE__) || defined(SSE_ENABLED) +#define _sse_ +#endif + +#if defined(__SSE2__) || defined(SSE2_ENABLED) +#define _sse2_ +#endif + +#if defined(__SSE3__) || defined(SSE3_ENABLED) +#define _sse3_ +#endif + +#if defined(__SSSE3__) || defined(SSSE3_ENABLED) +#define _ssse3_ +#endif + +#if defined(POPCNT_ENABLED) +#define _popcnt_ +#endif + +#if defined(__DLL__) || defined(_DLL) +#define _dll_ +#endif + +// 16, 32 or 64 +#if defined(__sparc_v9__) || defined(_x86_64_) || defined(_ia64_) || defined(_arm64_) || defined(_ppc64_) +#define _64_ +#else +#define _32_ +#endif + +/* All modern 64-bit Unix systems use scheme LP64 (long, pointers are 64-bit). + * Microsoft uses a different scheme: LLP64 (long long, pointers are 64-bit). + * + * Scheme LP64 LLP64 + * char 8 8 + * short 16 16 + * int 32 32 + * long 64 32 + * long long 64 64 + * pointer 64 64 + */ + +#if defined(_32_) +#define SIZEOF_PTR 4 +#elif defined(_64_) +#define SIZEOF_PTR 8 +#endif + +#define PLATFORM_DATA_ALIGN SIZEOF_PTR + +#if !defined(SIZEOF_PTR) +#error todo +#endif + +#define SIZEOF_CHAR 1 +#define SIZEOF_UNSIGNED_CHAR 1 +#define SIZEOF_SHORT 2 +#define SIZEOF_UNSIGNED_SHORT 2 +#define SIZEOF_INT 4 +#define SIZEOF_UNSIGNED_INT 4 + +#if defined(_32_) +#define SIZEOF_LONG 4 +#define SIZEOF_UNSIGNED_LONG 4 +#elif defined(_64_) +#if defined(_win_) +#define SIZEOF_LONG 4 +#define SIZEOF_UNSIGNED_LONG 4 +#else +#define SIZEOF_LONG 8 +#define SIZEOF_UNSIGNED_LONG 8 +#endif // _win_ +#endif // _32_ + +#if !defined(SIZEOF_LONG) +#error todo +#endif + +#define SIZEOF_LONG_LONG 8 +#define SIZEOF_UNSIGNED_LONG_LONG 8 + +#undef SIZEOF_SIZE_T // in case we include which defines it, too +#define SIZEOF_SIZE_T SIZEOF_PTR + +#if defined(__INTEL_COMPILER) +#pragma warning(disable 1292) +#pragma warning(disable 1469) +#pragma warning(disable 193) +#pragma warning(disable 271) +#pragma warning(disable 383) +#pragma warning(disable 424) +#pragma warning(disable 444) +#pragma warning(disable 584) +#pragma warning(disable 593) +#pragma warning(disable 981) +#pragma warning(disable 1418) +#pragma warning(disable 304) +#pragma warning(disable 810) +#pragma warning(disable 1029) +#pragma warning(disable 1419) +#pragma warning(disable 177) +#pragma warning(disable 522) +#pragma warning(disable 858) +#pragma warning(disable 111) +#pragma warning(disable 1599) +#pragma warning(disable 411) +#pragma warning(disable 304) +#pragma warning(disable 858) +#pragma warning(disable 444) +#pragma warning(disable 913) +#pragma warning(disable 310) +#pragma warning(disable 167) +#pragma warning(disable 180) +#pragma warning(disable 1572) +#endif + +#if defined(_MSC_VER) +#undef _WINSOCKAPI_ +#define _WINSOCKAPI_ +#undef NOMINMAX +#define NOMINMAX +#endif diff --git a/contrib/lfalloc/src/util/system/types.h b/contrib/lfalloc/src/util/system/types.h new file mode 100644 index 00000000000..af4f0adb13d --- /dev/null +++ b/contrib/lfalloc/src/util/system/types.h @@ -0,0 +1,117 @@ +#pragma once + +// DO_NOT_STYLE + +#include "platform.h" + +#include + +typedef int8_t i8; +typedef int16_t i16; +typedef uint8_t ui8; +typedef uint16_t ui16; + +typedef int yssize_t; +#define PRIYSZT "d" + +#if defined(_darwin_) && defined(_32_) +typedef unsigned long ui32; +typedef long i32; +#else +typedef uint32_t ui32; +typedef int32_t i32; +#endif + +#if defined(_darwin_) && defined(_64_) +typedef unsigned long ui64; +typedef long i64; +#else +typedef uint64_t ui64; +typedef int64_t i64; +#endif + +#define LL(number) INT64_C(number) +#define ULL(number) UINT64_C(number) + +// Macro for size_t and ptrdiff_t types +#if defined(_32_) +# if defined(_darwin_) +# define PRISZT "lu" +# undef PRIi32 +# define PRIi32 "li" +# undef SCNi32 +# define SCNi32 "li" +# undef PRId32 +# define PRId32 "li" +# undef SCNd32 +# define SCNd32 "li" +# undef PRIu32 +# define PRIu32 "lu" +# undef SCNu32 +# define SCNu32 "lu" +# undef PRIx32 +# define PRIx32 "lx" +# undef SCNx32 +# define SCNx32 "lx" +# elif !defined(_cygwin_) +# define PRISZT PRIu32 +# else +# define PRISZT "u" +# endif +# define SCNSZT SCNu32 +# define PRIPDT PRIi32 +# define SCNPDT SCNi32 +# define PRITMT PRIi32 +# define SCNTMT SCNi32 +#elif defined(_64_) +# if defined(_darwin_) +# define PRISZT "lu" +# undef PRIu64 +# define PRIu64 PRISZT +# undef PRIx64 +# define PRIx64 "lx" +# undef PRIX64 +# define PRIX64 "lX" +# undef PRId64 +# define PRId64 "ld" +# undef PRIi64 +# define PRIi64 "li" +# undef SCNi64 +# define SCNi64 "li" +# undef SCNu64 +# define SCNu64 "lu" +# undef SCNx64 +# define SCNx64 "lx" +# else +# define PRISZT PRIu64 +# endif +# define SCNSZT SCNu64 +# define PRIPDT PRIi64 +# define SCNPDT SCNi64 +# define PRITMT PRIi64 +# define SCNTMT SCNi64 +#else +# error "Unsupported platform" +#endif + +// SUPERLONG +#if !defined(DONT_USE_SUPERLONG) && !defined(SUPERLONG_MAX) +#define SUPERLONG_MAX ~LL(0) +typedef i64 SUPERLONG; +#endif + +// UNICODE +// UCS-2, native byteorder +typedef ui16 wchar16; +// internal symbol type: UTF-16LE +typedef wchar16 TChar; +typedef ui32 wchar32; + +#if defined(_MSC_VER) +#include +typedef SSIZE_T ssize_t; +#define HAVE_SSIZE_T 1 +#include +#endif + +#include diff --git a/contrib/libmetrohash/src/platform.h b/contrib/libmetrohash/src/platform.h index 31291b94b33..bc00e5a286b 100644 --- a/contrib/libmetrohash/src/platform.h +++ b/contrib/libmetrohash/src/platform.h @@ -18,6 +18,7 @@ #define METROHASH_PLATFORM_H #include +#include // rotate right idiom recognized by most compilers inline static uint64_t rotate_right(uint64_t v, unsigned k) @@ -25,20 +26,28 @@ inline static uint64_t rotate_right(uint64_t v, unsigned k) return (v >> k) | (v << (64 - k)); } -// unaligned reads, fast and safe on Nehalem and later microarchitectures inline static uint64_t read_u64(const void * const ptr) { - return static_cast(*reinterpret_cast(ptr)); + uint64_t result; + // Assignment like `result = *reinterpret_cast(ptr)` here would mean undefined behaviour (unaligned read), + // so we use memcpy() which is the most portable. clang & gcc usually translates `memcpy()` into a single `load` instruction + // when hardware supports it, so using memcpy() is efficient too. + memcpy(&result, ptr, sizeof(result)); + return result; } inline static uint64_t read_u32(const void * const ptr) { - return static_cast(*reinterpret_cast(ptr)); + uint32_t result; + memcpy(&result, ptr, sizeof(result)); + return result; } inline static uint64_t read_u16(const void * const ptr) { - return static_cast(*reinterpret_cast(ptr)); + uint16_t result; + memcpy(&result, ptr, sizeof(result)); + return result; } inline static uint64_t read_u8 (const void * const ptr) diff --git a/contrib/poco b/contrib/poco index fe5505e56c2..29439cf7fa3 160000 --- a/contrib/poco +++ b/contrib/poco @@ -1 +1 @@ -Subproject commit fe5505e56c27b6ecb0dcbc40c49dc2caf4e9637f +Subproject commit 29439cf7fa32c1a2d62d925bb6d6a3f14668a4a2 diff --git a/dbms/CMakeLists.txt b/dbms/CMakeLists.txt index 1306039e9c3..2c9bfa48605 100644 --- a/dbms/CMakeLists.txt +++ b/dbms/CMakeLists.txt @@ -155,7 +155,6 @@ if (USE_EMBEDDED_COMPILER) target_include_directories (dbms SYSTEM BEFORE PUBLIC ${LLVM_INCLUDE_DIRS}) endif () - if (CMAKE_BUILD_TYPE_UC STREQUAL "RELEASE" OR CMAKE_BUILD_TYPE_UC STREQUAL "RELWITHDEBINFO" OR CMAKE_BUILD_TYPE_UC STREQUAL "MINSIZEREL") # Won't generate debug info for files with heavy template instantiation to achieve faster linking and lower size. set_source_files_properties( @@ -186,8 +185,6 @@ target_link_libraries (clickhouse_common_io ${LINK_LIBRARIES_ONLY_ON_X86_64} PUBLIC ${DOUBLE_CONVERSION_LIBRARIES} - PRIVATE - pocoext PUBLIC ${Poco_Net_LIBRARY} ${Poco_Util_LIBRARY} @@ -214,6 +211,10 @@ target_link_libraries (clickhouse_common_io target_include_directories(clickhouse_common_io SYSTEM BEFORE PUBLIC ${RE2_INCLUDE_DIR}) +if (USE_LFALLOC) + target_include_directories (clickhouse_common_io SYSTEM BEFORE PUBLIC ${LFALLOC_INCLUDE_DIR}) +endif () + if(CPUID_LIBRARY) target_link_libraries(clickhouse_common_io PRIVATE ${CPUID_LIBRARY}) endif() @@ -223,8 +224,9 @@ if(CPUINFO_LIBRARY) endif() target_link_libraries (dbms - PRIVATE + PUBLIC clickhouse_compression + PRIVATE clickhouse_parsers clickhouse_common_config PUBLIC @@ -232,7 +234,6 @@ target_link_libraries (dbms PRIVATE clickhouse_dictionaries_embedded PUBLIC - pocoext ${MYSQLXX_LIBRARY} PRIVATE ${BTRIE_LIBRARIES} diff --git a/dbms/programs/benchmark/Benchmark.cpp b/dbms/programs/benchmark/Benchmark.cpp index b366add0ba5..89b363a2709 100644 --- a/dbms/programs/benchmark/Benchmark.cpp +++ b/dbms/programs/benchmark/Benchmark.cpp @@ -439,7 +439,7 @@ int mainEntryClickHouseBenchmark(int argc, char ** argv) ("help", "produce help message") ("concurrency,c", value()->default_value(1), "number of parallel queries") ("delay,d", value()->default_value(1), "delay between intermediate reports in seconds (set 0 to disable reports)") - ("stage", value()->default_value("complete"), "request query processing up to specified stage") + ("stage", value()->default_value("complete"), "request query processing up to specified stage: complete,fetch_columns,with_mergeable_state") ("iterations,i", value()->default_value(0), "amount of queries to be executed") ("timelimit,t", value()->default_value(0.), "stop launch of queries after specified time limit") ("randomize,r", value()->default_value(false), "randomize order of execution") diff --git a/dbms/programs/odbc-bridge/HandlerFactory.cpp b/dbms/programs/odbc-bridge/HandlerFactory.cpp index a6422db268c..55c2c8d7637 100644 --- a/dbms/programs/odbc-bridge/HandlerFactory.cpp +++ b/dbms/programs/odbc-bridge/HandlerFactory.cpp @@ -2,7 +2,6 @@ #include "PingHandler.h" #include "ColumnInfoHandler.h" #include -#include #include #include diff --git a/dbms/programs/odbc-bridge/MainHandler.cpp b/dbms/programs/odbc-bridge/MainHandler.cpp index d95f1386c7b..cb5dfa70c9c 100644 --- a/dbms/programs/odbc-bridge/MainHandler.cpp +++ b/dbms/programs/odbc-bridge/MainHandler.cpp @@ -11,11 +11,12 @@ #include #include #include -#include #include #include #include #include +#include +#include namespace DB { @@ -31,6 +32,24 @@ namespace } } +using PocoSessionPoolConstructor = std::function()>; +/** Is used to adjust max size of default Poco thread pool. See issue #750 + * Acquire the lock, resize pool and construct new Session. + */ +std::shared_ptr createAndCheckResizePocoSessionPool(PocoSessionPoolConstructor pool_constr) +{ + static std::mutex mutex; + + Poco::ThreadPool & pool = Poco::ThreadPool::defaultPool(); + + /// NOTE: The lock don't guarantee that external users of the pool don't change its capacity + std::unique_lock lock(mutex); + + if (pool.available() == 0) + pool.addCapacity(2 * std::max(pool.capacity(), 1)); + + return pool_constr(); +} ODBCHandler::PoolPtr ODBCHandler::getPool(const std::string & connection_str) { diff --git a/dbms/src/Columns/ColumnString.h b/dbms/src/Columns/ColumnString.h index 9ae32c41fd9..486e6b1fd44 100644 --- a/dbms/src/Columns/ColumnString.h +++ b/dbms/src/Columns/ColumnString.h @@ -21,6 +21,7 @@ namespace DB class ColumnString final : public COWPtrHelper { public: + using Char = UInt8; using Chars = PaddedPODArray; private: diff --git a/dbms/src/Columns/IColumn.h b/dbms/src/Columns/IColumn.h index 9ed79c0b69c..c9afd7c1bfe 100644 --- a/dbms/src/Columns/IColumn.h +++ b/dbms/src/Columns/IColumn.h @@ -250,7 +250,7 @@ public: /// Size of memory, allocated for column. /// This is greater or equals to byteSize due to memory reservation in containers. - /// Zero, if could be determined. + /// Zero, if could not be determined. virtual size_t allocatedBytes() const = 0; /// Make memory region readonly with mprotect if it is large enough. diff --git a/dbms/src/Common/CurrentThread.cpp b/dbms/src/Common/CurrentThread.cpp index 3eaf8bfa81d..6c2c77dccd7 100644 --- a/dbms/src/Common/CurrentThread.cpp +++ b/dbms/src/Common/CurrentThread.cpp @@ -7,7 +7,7 @@ #include #include #include -#include +#include #include @@ -29,7 +29,7 @@ void CurrentThread::updatePerformanceCounters() ThreadStatus & CurrentThread::get() { if (unlikely(!current_thread)) - throw Exception("Thread #" + std::to_string(Poco::ThreadNumber::get()) + " status was not initialized", ErrorCodes::LOGICAL_ERROR); + throw Exception("Thread #" + std::to_string(getThreadNumber()) + " status was not initialized", ErrorCodes::LOGICAL_ERROR); return *current_thread; } diff --git a/dbms/src/Common/ErrorCodes.cpp b/dbms/src/Common/ErrorCodes.cpp index bc53e39ec92..bfe9049fcb3 100644 --- a/dbms/src/Common/ErrorCodes.cpp +++ b/dbms/src/Common/ErrorCodes.cpp @@ -424,6 +424,8 @@ namespace ErrorCodes extern const int HYPERSCAN_CANNOT_SCAN_TEXT = 447; extern const int BROTLI_READ_FAILED = 448; extern const int BROTLI_WRITE_FAILED = 449; + extern const int BAD_TTL_EXPRESSION = 450; + extern const int BAD_TTL_FILE = 451; extern const int KEEPER_EXCEPTION = 999; extern const int POCO_EXCEPTION = 1000; diff --git a/dbms/src/Common/LFAllocator.cpp b/dbms/src/Common/LFAllocator.cpp new file mode 100644 index 00000000000..71396d341ab --- /dev/null +++ b/dbms/src/Common/LFAllocator.cpp @@ -0,0 +1,53 @@ +#include + +#if USE_LFALLOC +#include "LFAllocator.h" + +#include +#include + +namespace DB +{ + +void * LFAllocator::alloc(size_t size, size_t alignment) +{ + if (alignment == 0) + return LFAlloc(size); + else + { + void * ptr; + int res = LFPosixMemalign(&ptr, alignment, size); + return res ? nullptr : ptr; + } +} + +void LFAllocator::free(void * buf, size_t) +{ + LFFree(buf); +} + +void * LFAllocator::realloc(void * old_ptr, size_t, size_t new_size, size_t alignment) +{ + if (old_ptr == nullptr) + { + void * result = LFAllocator::alloc(new_size, alignment); + return result; + } + if (new_size == 0) + { + LFFree(old_ptr); + return nullptr; + } + + void * new_ptr = LFAllocator::alloc(new_size, alignment); + if (new_ptr == nullptr) + return nullptr; + size_t old_size = LFGetSize(old_ptr); + memcpy(new_ptr, old_ptr, ((old_size < new_size) ? old_size : new_size)); + LFFree(old_ptr); + return new_ptr; +} + +} + +#endif diff --git a/dbms/src/Common/LFAllocator.h b/dbms/src/Common/LFAllocator.h new file mode 100644 index 00000000000..f2a10cc4508 --- /dev/null +++ b/dbms/src/Common/LFAllocator.h @@ -0,0 +1,22 @@ +#pragma once + +#include + +#if !USE_LFALLOC +#error "do not include this file until USE_LFALLOC is set to 1" +#endif + +#include + +namespace DB +{ +struct LFAllocator +{ + static void * alloc(size_t size, size_t alignment = 0); + + static void free(void * buf, size_t); + + static void * realloc(void * buf, size_t, size_t new_size, size_t alignment = 0); +}; + +} diff --git a/dbms/src/Common/RWLock.cpp b/dbms/src/Common/RWLock.cpp index 9fdb13a009d..aa658e964d7 100644 --- a/dbms/src/Common/RWLock.cpp +++ b/dbms/src/Common/RWLock.cpp @@ -1,7 +1,6 @@ #include "RWLock.h" #include #include -#include #include #include diff --git a/dbms/src/Common/RadixSort.h b/dbms/src/Common/RadixSort.h index 0a5861b30eb..f95c6237d74 100644 --- a/dbms/src/Common/RadixSort.h +++ b/dbms/src/Common/RadixSort.h @@ -64,15 +64,15 @@ struct RadixSortFloatTransform }; -template +template struct RadixSortFloatTraits { - using Element = Float; /// The type of the element. It can be a structure with a key and some other payload. Or just a key. - using Key = Float; /// The key to sort. + using Element = _Element; /// The type of the element. It can be a structure with a key and some other payload. Or just a key. + using Key = _Key; /// The key to sort. using CountType = uint32_t; /// Type for calculating histograms. In the case of a known small number of elements, it can be less than size_t. /// The type to which the key is transformed to do bit operations. This UInt is the same size as the key. - using KeyBits = std::conditional_t; + using KeyBits = std::conditional_t; static constexpr size_t PART_SIZE_BITS = 8; /// With what pieces of the key, in bits, to do one pass - reshuffle of the array. @@ -85,7 +85,13 @@ struct RadixSortFloatTraits using Allocator = RadixSortMallocAllocator; /// The function to get the key from an array element. - static Key & extractKey(Element & elem) { return elem; } + static Key & extractKey(Element & elem) + { + if constexpr (std::is_same_v) + return elem; + else + return *reinterpret_cast(&elem); + } }; @@ -109,13 +115,13 @@ struct RadixSortSignedTransform }; -template +template struct RadixSortUIntTraits { - using Element = UInt; - using Key = UInt; + using Element = _Element; + using Key = _Key; using CountType = uint32_t; - using KeyBits = UInt; + using KeyBits = _Key; static constexpr size_t PART_SIZE_BITS = 8; @@ -123,16 +129,22 @@ struct RadixSortUIntTraits using Allocator = RadixSortMallocAllocator; /// The function to get the key from an array element. - static Key & extractKey(Element & elem) { return elem; } + static Key & extractKey(Element & elem) + { + if constexpr (std::is_same_v) + return elem; + else + return *reinterpret_cast(&elem); + } }; -template +template struct RadixSortIntTraits { - using Element = Int; - using Key = Int; + using Element = _Element; + using Key = _Key; using CountType = uint32_t; - using KeyBits = std::make_unsigned_t; + using KeyBits = std::make_unsigned_t<_Key>; static constexpr size_t PART_SIZE_BITS = 8; @@ -140,7 +152,13 @@ struct RadixSortIntTraits using Allocator = RadixSortMallocAllocator; /// The function to get the key from an array element. - static Key & extractKey(Element & elem) { return elem; } + static Key & extractKey(Element & elem) + { + if constexpr (std::is_same_v) + return elem; + else + return *reinterpret_cast(&elem); + } }; @@ -261,3 +279,16 @@ radixSort(T * arr, size_t size) return RadixSort>::execute(arr, size); } +template +std::enable_if_t, void> +radixSort(_Element * arr, size_t size) +{ + return RadixSort>::execute(arr, size); +} + +template +std::enable_if_t, void> +radixSort(_Element * arr, size_t size) +{ + return RadixSort>::execute(arr, size); +} diff --git a/dbms/src/Common/ThreadStatus.cpp b/dbms/src/Common/ThreadStatus.cpp index 6ee7518e393..c2e415ab363 100644 --- a/dbms/src/Common/ThreadStatus.cpp +++ b/dbms/src/Common/ThreadStatus.cpp @@ -7,7 +7,7 @@ #include #include -#include +#include namespace DB @@ -33,7 +33,7 @@ TasksStatsCounters TasksStatsCounters::current() ThreadStatus::ThreadStatus() { - thread_number = Poco::ThreadNumber::get(); + thread_number = getThreadNumber(); os_thread_id = TaskStatsInfoGetter::getCurrentTID(); last_rusage = std::make_unique(); diff --git a/dbms/src/Common/config.h.in b/dbms/src/Common/config.h.in index c323afe369e..d6fc6d146f0 100644 --- a/dbms/src/Common/config.h.in +++ b/dbms/src/Common/config.h.in @@ -25,6 +25,8 @@ #cmakedefine01 USE_BROTLI #cmakedefine01 USE_SSL #cmakedefine01 USE_HYPERSCAN +#cmakedefine01 USE_LFALLOC +#cmakedefine01 USE_LFALLOC_RANDOM_HINT #cmakedefine01 CLICKHOUSE_SPLIT_BINARY #cmakedefine01 LLVM_HAS_RTTI diff --git a/dbms/src/Core/AccurateComparison.h b/dbms/src/Core/AccurateComparison.h index 4fa33c7d099..af1ea285a89 100644 --- a/dbms/src/Core/AccurateComparison.h +++ b/dbms/src/Core/AccurateComparison.h @@ -426,6 +426,21 @@ inline bool_if_safe_conversion greaterOrEqualsOp(A a, B b) return a >= b; } +/// Converts numeric to an equal numeric of other type. +template +inline bool NO_SANITIZE_UNDEFINED convertNumeric(From value, To & result) +{ + /// Note that NaNs doesn't compare equal to anything, but they are still in range of any Float type. + if (isNaN(value) && std::is_floating_point_v) + { + result = value; + return true; + } + + result = static_cast(value); + return equalsOp(value, result); +} + } diff --git a/dbms/src/Core/Settings.h b/dbms/src/Core/Settings.h index f677b8a7079..7b87a537908 100644 --- a/dbms/src/Core/Settings.h +++ b/dbms/src/Core/Settings.h @@ -93,9 +93,12 @@ struct Settings M(SettingBool, optimize_skip_unused_shards, false, "Assumes that data is distributed by sharding_key. Optimization to skip unused shards if SELECT query filters by sharding_key.") \ \ M(SettingUInt64, merge_tree_min_rows_for_concurrent_read, (20 * 8192), "If at least as many lines are read from one file, the reading can be parallelized.") \ + M(SettingUInt64, merge_tree_min_bytes_for_concurrent_read, (100 * 1024 * 1024), "If at least as many bytes are read from one file, the reading can be parallelized.") \ M(SettingUInt64, merge_tree_min_rows_for_seek, 0, "You can skip reading more than that number of rows at the price of one seek per file.") \ + M(SettingUInt64, merge_tree_min_bytes_for_seek, 0, "You can skip reading more than that number of bytes at the price of one seek per file.") \ M(SettingUInt64, merge_tree_coarse_index_granularity, 8, "If the index segment can contain the required keys, divide it into as many parts and recursively check them.") \ M(SettingUInt64, merge_tree_max_rows_to_use_cache, (1024 * 1024), "The maximum number of rows per request, to use the cache of uncompressed data. If the request is large, the cache is not used. (For large queries not to flush out the cache.)") \ + M(SettingUInt64, merge_tree_max_bytes_to_use_cache, (600 * 1024 * 1024), "The maximum number of rows per request, to use the cache of uncompressed data. If the request is large, the cache is not used. (For large queries not to flush out the cache.)") \ \ M(SettingBool, merge_tree_uniform_read_distribution, true, "Distribute read from MergeTree over threads evenly, ensuring stable average execution time of each thread within one read operation.") \ \ diff --git a/dbms/src/DataStreams/BlocksListBlockInputStream.h b/dbms/src/DataStreams/BlocksListBlockInputStream.h index 0947fbb4406..de287c2dc5e 100644 --- a/dbms/src/DataStreams/BlocksListBlockInputStream.h +++ b/dbms/src/DataStreams/BlocksListBlockInputStream.h @@ -23,6 +23,8 @@ public: String getName() const override { return "BlocksList"; } protected: + Block getHeader() const override { return list.empty() ? Block() : *list.begin(); } + Block readImpl() override { if (it == end) diff --git a/dbms/src/DataStreams/CollapsingSortedBlockInputStream.cpp b/dbms/src/DataStreams/CollapsingSortedBlockInputStream.cpp index f630494ae2f..cfc165aa4d2 100644 --- a/dbms/src/DataStreams/CollapsingSortedBlockInputStream.cpp +++ b/dbms/src/DataStreams/CollapsingSortedBlockInputStream.cpp @@ -40,7 +40,7 @@ void CollapsingSortedBlockInputStream::reportIncorrectData() } -void CollapsingSortedBlockInputStream::insertRows(MutableColumns & merged_columns, size_t & merged_rows) +void CollapsingSortedBlockInputStream::insertRows(MutableColumns & merged_columns, size_t block_size, MergeStopCondition & condition) { if (count_positive == 0 && count_negative == 0) { @@ -52,7 +52,7 @@ void CollapsingSortedBlockInputStream::insertRows(MutableColumns & merged_column { if (count_positive <= count_negative) { - ++merged_rows; + condition.addRowWithGranularity(block_size); for (size_t i = 0; i < num_columns; ++i) merged_columns[i]->insertFrom(*(*first_negative.columns)[i], first_negative.row_num); @@ -62,7 +62,7 @@ void CollapsingSortedBlockInputStream::insertRows(MutableColumns & merged_column if (count_positive >= count_negative) { - ++merged_rows; + condition.addRowWithGranularity(block_size); for (size_t i = 0; i < num_columns; ++i) merged_columns[i]->insertFrom(*(*last_positive.columns)[i], last_positive.row_num); @@ -106,12 +106,14 @@ Block CollapsingSortedBlockInputStream::readImpl() void CollapsingSortedBlockInputStream::merge(MutableColumns & merged_columns, std::priority_queue & queue) { - size_t merged_rows = 0; + MergeStopCondition stop_condition(average_block_sizes, max_block_size); + size_t current_block_granularity; /// Take rows in correct order and put them into `merged_columns` until the rows no more than `max_block_size` for (; !queue.empty(); ++current_pos) { SortCursor current = queue.top(); + current_block_granularity = current->rows; if (current_key.empty()) setPrimaryKeyRef(current_key, current); @@ -122,7 +124,7 @@ void CollapsingSortedBlockInputStream::merge(MutableColumns & merged_columns, st bool key_differs = next_key != current_key; /// if there are enough rows and the last one is calculated completely - if (key_differs && merged_rows >= max_block_size) + if (key_differs && stop_condition.checkStop()) { ++blocks_written; return; @@ -133,7 +135,7 @@ void CollapsingSortedBlockInputStream::merge(MutableColumns & merged_columns, st if (key_differs) { /// We write data for the previous primary key. - insertRows(merged_columns, merged_rows); + insertRows(merged_columns, current_block_granularity, stop_condition); current_key.swap(next_key); @@ -167,7 +169,7 @@ void CollapsingSortedBlockInputStream::merge(MutableColumns & merged_columns, st first_negative_pos = current_pos; } - if (!blocks_written && !merged_rows) + if (!blocks_written && stop_condition.empty()) { setRowRef(last_negative, current); last_negative_pos = current_pos; @@ -193,7 +195,7 @@ void CollapsingSortedBlockInputStream::merge(MutableColumns & merged_columns, st } /// Write data for last primary key. - insertRows(merged_columns, merged_rows); + insertRows(merged_columns, /*some_granularity*/ 0, stop_condition); finished = true; } diff --git a/dbms/src/DataStreams/CollapsingSortedBlockInputStream.h b/dbms/src/DataStreams/CollapsingSortedBlockInputStream.h index cf72df30dbd..4b3b936d703 100644 --- a/dbms/src/DataStreams/CollapsingSortedBlockInputStream.h +++ b/dbms/src/DataStreams/CollapsingSortedBlockInputStream.h @@ -26,8 +26,9 @@ class CollapsingSortedBlockInputStream : public MergingSortedBlockInputStream public: CollapsingSortedBlockInputStream( BlockInputStreams inputs_, const SortDescription & description_, - const String & sign_column, size_t max_block_size_, WriteBuffer * out_row_sources_buf_ = nullptr) - : MergingSortedBlockInputStream(inputs_, description_, max_block_size_, 0, out_row_sources_buf_) + const String & sign_column, size_t max_block_size_, + WriteBuffer * out_row_sources_buf_ = nullptr, bool average_block_sizes_ = false) + : MergingSortedBlockInputStream(inputs_, description_, max_block_size_, 0, out_row_sources_buf_, false, average_block_sizes_) { sign_column_number = header.getPositionByName(sign_column); } @@ -75,7 +76,7 @@ private: void merge(MutableColumns & merged_columns, std::priority_queue & queue); /// Output to result rows for the current primary key. - void insertRows(MutableColumns & merged_columns, size_t & merged_rows); + void insertRows(MutableColumns & merged_columns, size_t block_size, MergeStopCondition & condition); void reportIncorrectData(); }; diff --git a/dbms/src/DataStreams/MarkInCompressedFile.h b/dbms/src/DataStreams/MarkInCompressedFile.h index 3a1d9aa0f19..ff07b2afbe1 100644 --- a/dbms/src/DataStreams/MarkInCompressedFile.h +++ b/dbms/src/DataStreams/MarkInCompressedFile.h @@ -6,6 +6,10 @@ #include #include +#include +#if USE_LFALLOC +#include +#endif namespace DB { @@ -32,8 +36,16 @@ struct MarkInCompressedFile { return "(" + DB::toString(offset_in_compressed_file) + "," + DB::toString(offset_in_decompressed_block) + ")"; } + + String toStringWithRows(size_t rows_num) + { + return "(" + DB::toString(offset_in_compressed_file) + "," + DB::toString(offset_in_decompressed_block) + "," + DB::toString(rows_num) + ")"; + } + }; - +#if USE_LFALLOC +using MarksInCompressedFile = PODArray; +#else using MarksInCompressedFile = PODArray; - +#endif } diff --git a/dbms/src/DataStreams/MergingSortedBlockInputStream.cpp b/dbms/src/DataStreams/MergingSortedBlockInputStream.cpp index d4e7ba0e749..719977854da 100644 --- a/dbms/src/DataStreams/MergingSortedBlockInputStream.cpp +++ b/dbms/src/DataStreams/MergingSortedBlockInputStream.cpp @@ -18,9 +18,10 @@ namespace ErrorCodes MergingSortedBlockInputStream::MergingSortedBlockInputStream( const BlockInputStreams & inputs_, const SortDescription & description_, - size_t max_block_size_, UInt64 limit_, WriteBuffer * out_row_sources_buf_, bool quiet_) + size_t max_block_size_, UInt64 limit_, WriteBuffer * out_row_sources_buf_, bool quiet_, bool average_block_sizes_) : description(description_), max_block_size(max_block_size_), limit(limit_), quiet(quiet_) - , source_blocks(inputs_.size()), cursors(inputs_.size()), out_row_sources_buf(out_row_sources_buf_) + , average_block_sizes(average_block_sizes_), source_blocks(inputs_.size()) + , cursors(inputs_.size()), out_row_sources_buf(out_row_sources_buf_) { children.insert(children.end(), inputs_.begin(), inputs_.end()); header = children.at(0)->getHeader(); @@ -116,7 +117,7 @@ Block MergingSortedBlockInputStream::readImpl() template void MergingSortedBlockInputStream::fetchNextBlock(const TSortCursor & current, std::priority_queue & queue) { - size_t order = current.impl->order; + size_t order = current->order; size_t size = cursors.size(); if (order >= size || &cursors[order] != current.impl) @@ -132,6 +133,19 @@ void MergingSortedBlockInputStream::fetchNextBlock(const TSortCursor & current, } } + +bool MergingSortedBlockInputStream::MergeStopCondition::checkStop() const +{ + if (!count_average) + return sum_rows_count == max_block_size; + + if (sum_rows_count == 0) + return false; + + size_t average = sum_blocks_granularity / sum_rows_count; + return sum_rows_count >= average; +} + template void MergingSortedBlockInputStream::fetchNextBlock(const SortCursor & current, std::priority_queue & queue); @@ -144,10 +158,11 @@ void MergingSortedBlockInputStream::merge(MutableColumns & merged_columns, std:: { size_t merged_rows = 0; + MergeStopCondition stop_condition(average_block_sizes, max_block_size); /** Increase row counters. * Return true if it's time to finish generating the current data block. */ - auto count_row_and_check_limit = [&, this]() + auto count_row_and_check_limit = [&, this](size_t current_granularity) { ++total_merged_rows; if (limit && total_merged_rows == limit) @@ -159,19 +174,15 @@ void MergingSortedBlockInputStream::merge(MutableColumns & merged_columns, std:: } ++merged_rows; - if (merged_rows == max_block_size) - { - // std::cerr << "max_block_size reached\n"; - return true; - } - - return false; + stop_condition.addRowWithGranularity(current_granularity); + return stop_condition.checkStop(); }; /// Take rows in required order and put them into `merged_columns`, while the rows are no more than `max_block_size` while (!queue.empty()) { TSortCursor current = queue.top(); + size_t current_block_granularity = current->rows; queue.pop(); while (true) @@ -179,20 +190,20 @@ void MergingSortedBlockInputStream::merge(MutableColumns & merged_columns, std:: /** And what if the block is totally less or equal than the rest for the current cursor? * Or is there only one data source left in the queue? Then you can take the entire block on current cursor. */ - if (current.impl->isFirst() && (queue.empty() || current.totallyLessOrEquals(queue.top()))) + if (current->isFirst() && (queue.empty() || current.totallyLessOrEquals(queue.top()))) { // std::cerr << "current block is totally less or equals\n"; /// If there are already data in the current block, we first return it. We'll get here again the next time we call the merge function. if (merged_rows != 0) { - // std::cerr << "merged rows is non-zero\n"; + //std::cerr << "merged rows is non-zero\n"; queue.push(current); return; } - /// Actually, current.impl->order stores source number (i.e. cursors[current.impl->order] == current.impl) - size_t source_num = current.impl->order; + /// Actually, current->order stores source number (i.e. cursors[current->order] == current) + size_t source_num = current->order; if (source_num >= cursors.size()) throw Exception("Logical error in MergingSortedBlockInputStream", ErrorCodes::LOGICAL_ERROR); @@ -204,6 +215,7 @@ void MergingSortedBlockInputStream::merge(MutableColumns & merged_columns, std:: merged_rows = merged_columns.at(0)->size(); + /// Limit output if (limit && total_merged_rows + merged_rows > limit) { merged_rows = limit - total_merged_rows; @@ -217,6 +229,8 @@ void MergingSortedBlockInputStream::merge(MutableColumns & merged_columns, std:: finished = true; } + /// Write order of rows for other columns + /// this data will be used in grather stream if (out_row_sources_buf) { RowSourcePart row_source(source_num); @@ -224,7 +238,7 @@ void MergingSortedBlockInputStream::merge(MutableColumns & merged_columns, std:: out_row_sources_buf->write(row_source.data); } - // std::cerr << "fetching next block\n"; + //std::cerr << "fetching next block\n"; total_merged_rows += merged_rows; fetchNextBlock(current, queue); @@ -239,7 +253,7 @@ void MergingSortedBlockInputStream::merge(MutableColumns & merged_columns, std:: if (out_row_sources_buf) { /// Actually, current.impl->order stores source number (i.e. cursors[current.impl->order] == current.impl) - RowSourcePart row_source(current.impl->order); + RowSourcePart row_source(current->order); out_row_sources_buf->write(row_source.data); } @@ -250,7 +264,7 @@ void MergingSortedBlockInputStream::merge(MutableColumns & merged_columns, std:: if (queue.empty() || !(current.greater(queue.top()))) { - if (count_row_and_check_limit()) + if (count_row_and_check_limit(current_block_granularity)) { // std::cerr << "pushing back to queue\n"; queue.push(current); @@ -277,7 +291,7 @@ void MergingSortedBlockInputStream::merge(MutableColumns & merged_columns, std:: break; } - if (count_row_and_check_limit()) + if (count_row_and_check_limit(current_block_granularity)) return; } diff --git a/dbms/src/DataStreams/MergingSortedBlockInputStream.h b/dbms/src/DataStreams/MergingSortedBlockInputStream.h index 68ea179d68d..be05783c3ed 100644 --- a/dbms/src/DataStreams/MergingSortedBlockInputStream.h +++ b/dbms/src/DataStreams/MergingSortedBlockInputStream.h @@ -68,7 +68,7 @@ public: */ MergingSortedBlockInputStream( const BlockInputStreams & inputs_, const SortDescription & description_, size_t max_block_size_, - UInt64 limit_ = 0, WriteBuffer * out_row_sources_buf_ = nullptr, bool quiet_ = false); + UInt64 limit_ = 0, WriteBuffer * out_row_sources_buf_ = nullptr, bool quiet_ = false, bool average_block_sizes_ = false); String getName() const override { return "MergingSorted"; } @@ -116,6 +116,38 @@ protected: size_t size() const { return empty() ? 0 : columns->size(); } }; + /// Simple class, which allows to check stop condition during merge process + /// in simple case it just compare amount of merged rows with max_block_size + /// in `count_average` case it compares amount of merged rows with linear combination + /// of block sizes from which these rows were taken. + struct MergeStopCondition + { + size_t sum_blocks_granularity = 0; + size_t sum_rows_count = 0; + bool count_average; + size_t max_block_size; + + MergeStopCondition(bool count_average_, size_t max_block_size_) + : count_average(count_average_) + , max_block_size(max_block_size_) + {} + + /// add single row from block size `granularity` + void addRowWithGranularity(size_t granularity) + { + sum_blocks_granularity += granularity; + sum_rows_count++; + } + + /// check that sum_rows_count is enough + bool checkStop() const; + + bool empty() const + { + return sum_blocks_granularity == 0; + } + }; + Block readImpl() override; @@ -139,6 +171,7 @@ protected: bool first = true; bool has_collation = false; bool quiet = false; + bool average_block_sizes = false; /// May be smaller or equal to max_block_size. To do 'reserve' for columns. size_t expected_block_size = 0; diff --git a/dbms/src/DataStreams/ReplacingSortedBlockInputStream.cpp b/dbms/src/DataStreams/ReplacingSortedBlockInputStream.cpp index d0298ac77fe..e2e99815b93 100644 --- a/dbms/src/DataStreams/ReplacingSortedBlockInputStream.cpp +++ b/dbms/src/DataStreams/ReplacingSortedBlockInputStream.cpp @@ -12,7 +12,7 @@ namespace ErrorCodes } -void ReplacingSortedBlockInputStream::insertRow(MutableColumns & merged_columns, size_t & merged_rows) +void ReplacingSortedBlockInputStream::insertRow(MutableColumns & merged_columns) { if (out_row_sources_buf) { @@ -24,7 +24,6 @@ void ReplacingSortedBlockInputStream::insertRow(MutableColumns & merged_columns, current_row_sources.resize(0); } - ++merged_rows; for (size_t i = 0; i < num_columns; ++i) merged_columns[i]->insertFrom(*(*selected_row.columns)[i], selected_row.row_num); } @@ -51,12 +50,12 @@ Block ReplacingSortedBlockInputStream::readImpl() void ReplacingSortedBlockInputStream::merge(MutableColumns & merged_columns, std::priority_queue & queue) { - size_t merged_rows = 0; - + MergeStopCondition stop_condition(average_block_sizes, max_block_size); /// Take the rows in needed order and put them into `merged_columns` until rows no more than `max_block_size` while (!queue.empty()) { SortCursor current = queue.top(); + size_t current_block_granularity = current->rows; if (current_key.empty()) setPrimaryKeyRef(current_key, current); @@ -66,7 +65,7 @@ void ReplacingSortedBlockInputStream::merge(MutableColumns & merged_columns, std bool key_differs = next_key != current_key; /// if there are enough rows and the last one is calculated completely - if (key_differs && merged_rows >= max_block_size) + if (key_differs && stop_condition.checkStop()) return; queue.pop(); @@ -74,7 +73,8 @@ void ReplacingSortedBlockInputStream::merge(MutableColumns & merged_columns, std if (key_differs) { /// Write the data for the previous primary key. - insertRow(merged_columns, merged_rows); + insertRow(merged_columns); + stop_condition.addRowWithGranularity(current_block_granularity); selected_row.reset(); current_key.swap(next_key); } @@ -110,7 +110,7 @@ void ReplacingSortedBlockInputStream::merge(MutableColumns & merged_columns, std /// We will write the data for the last primary key. if (!selected_row.empty()) - insertRow(merged_columns, merged_rows); + insertRow(merged_columns); finished = true; } diff --git a/dbms/src/DataStreams/ReplacingSortedBlockInputStream.h b/dbms/src/DataStreams/ReplacingSortedBlockInputStream.h index cd52c3a8d08..525c8a50754 100644 --- a/dbms/src/DataStreams/ReplacingSortedBlockInputStream.h +++ b/dbms/src/DataStreams/ReplacingSortedBlockInputStream.h @@ -18,8 +18,9 @@ class ReplacingSortedBlockInputStream : public MergingSortedBlockInputStream public: ReplacingSortedBlockInputStream( const BlockInputStreams & inputs_, const SortDescription & description_, - const String & version_column, size_t max_block_size_, WriteBuffer * out_row_sources_buf_ = nullptr) - : MergingSortedBlockInputStream(inputs_, description_, max_block_size_, 0, out_row_sources_buf_) + const String & version_column, size_t max_block_size_, WriteBuffer * out_row_sources_buf_ = nullptr, + bool average_block_sizes_ = false) + : MergingSortedBlockInputStream(inputs_, description_, max_block_size_, 0, out_row_sources_buf_, false, average_block_sizes_) { if (!version_column.empty()) version_column_number = header.getPositionByName(version_column); @@ -54,7 +55,7 @@ private: void merge(MutableColumns & merged_columns, std::priority_queue & queue); /// Output into result the rows for current primary key. - void insertRow(MutableColumns & merged_columns, size_t & merged_rows); + void insertRow(MutableColumns & merged_columns); }; } diff --git a/dbms/src/DataStreams/TTLBlockInputStream.cpp b/dbms/src/DataStreams/TTLBlockInputStream.cpp new file mode 100644 index 00000000000..482a3ff4814 --- /dev/null +++ b/dbms/src/DataStreams/TTLBlockInputStream.cpp @@ -0,0 +1,208 @@ +#include +#include +#include +#include +#include + +namespace DB +{ + +namespace ErrorCodes +{ + extern const int LOGICAL_ERROR; +} + + +TTLBlockInputStream::TTLBlockInputStream( + const BlockInputStreamPtr & input_, + const MergeTreeData & storage_, + const MergeTreeData::MutableDataPartPtr & data_part_, + time_t current_time_) + : storage(storage_) + , data_part(data_part_) + , current_time(current_time_) + , old_ttl_infos(data_part->ttl_infos) + , log(&Logger::get(storage.getLogName() + " (TTLBlockInputStream)")) + , date_lut(DateLUT::instance()) +{ + children.push_back(input_); + + const auto & column_defaults = storage.getColumns().getDefaults(); + ASTPtr default_expr_list = std::make_shared(); + for (const auto & [name, ttl_info] : old_ttl_infos.columns_ttl) + { + if (ttl_info.min <= current_time) + { + new_ttl_infos.columns_ttl.emplace(name, MergeTreeDataPart::TTLInfo{}); + empty_columns.emplace(name); + + auto it = column_defaults.find(name); + + if (it != column_defaults.end()) + default_expr_list->children.emplace_back( + setAlias(it->second.expression, it->first)); + } + else + new_ttl_infos.columns_ttl.emplace(name, ttl_info); + } + + if (old_ttl_infos.table_ttl.min > current_time) + new_ttl_infos.table_ttl = old_ttl_infos.table_ttl; + + if (!default_expr_list->children.empty()) + { + auto syntax_result = SyntaxAnalyzer(storage.global_context).analyze( + default_expr_list, storage.getColumns().getAllPhysical()); + defaults_expression = ExpressionAnalyzer{default_expr_list, syntax_result, storage.global_context}.getActions(true); + } +} + + +Block TTLBlockInputStream::getHeader() const +{ + return children.at(0)->getHeader(); +} + +Block TTLBlockInputStream::readImpl() +{ + Block block = children.at(0)->read(); + if (!block) + return block; + + if (storage.hasTableTTL()) + { + /// Skip all data if table ttl is expired for part + if (old_ttl_infos.table_ttl.max <= current_time) + { + rows_removed = data_part->rows_count; + return {}; + } + + if (old_ttl_infos.table_ttl.min <= current_time) + removeRowsWithExpiredTableTTL(block); + } + + removeValuesWithExpiredColumnTTL(block); + + return block; +} + +void TTLBlockInputStream::readSuffixImpl() +{ + for (const auto & elem : new_ttl_infos.columns_ttl) + new_ttl_infos.updatePartMinTTL(elem.second.min); + + new_ttl_infos.updatePartMinTTL(new_ttl_infos.table_ttl.min); + + data_part->ttl_infos = std::move(new_ttl_infos); + data_part->empty_columns = std::move(empty_columns); + + if (rows_removed) + LOG_INFO(log, "Removed " << rows_removed << " rows with expired ttl from part " << data_part->name); +} + +void TTLBlockInputStream::removeRowsWithExpiredTableTTL(Block & block) +{ + storage.ttl_table_entry.expression->execute(block); + + const auto & current = block.getByName(storage.ttl_table_entry.result_column); + const IColumn * ttl_column = current.column.get(); + + MutableColumns result_columns; + result_columns.reserve(getHeader().columns()); + for (const auto & name : storage.getColumns().getNamesOfPhysical()) + { + auto & column_with_type = block.getByName(name); + const IColumn * values_column = column_with_type.column.get(); + MutableColumnPtr result_column = values_column->cloneEmpty(); + result_column->reserve(block.rows()); + + for (size_t i = 0; i < block.rows(); ++i) + { + UInt32 cur_ttl = getTimestampByIndex(ttl_column, i); + if (cur_ttl > current_time) + { + new_ttl_infos.table_ttl.update(cur_ttl); + result_column->insertFrom(*values_column, i); + } + else + ++rows_removed; + } + result_columns.emplace_back(std::move(result_column)); + } + + block = getHeader().cloneWithColumns(std::move(result_columns)); +} + +void TTLBlockInputStream::removeValuesWithExpiredColumnTTL(Block & block) +{ + Block block_with_defaults; + if (defaults_expression) + { + block_with_defaults = block; + defaults_expression->execute(block_with_defaults); + } + + for (const auto & [name, ttl_entry] : storage.ttl_entries_by_name) + { + const auto & old_ttl_info = old_ttl_infos.columns_ttl[name]; + auto & new_ttl_info = new_ttl_infos.columns_ttl[name]; + + if (old_ttl_info.min > current_time) + continue; + + if (old_ttl_info.max <= current_time) + continue; + + if (!block.has(ttl_entry.result_column)) + ttl_entry.expression->execute(block); + + ColumnPtr default_column = nullptr; + if (block_with_defaults.has(name)) + default_column = block_with_defaults.getByName(name).column->convertToFullColumnIfConst(); + + auto & column_with_type = block.getByName(name); + const IColumn * values_column = column_with_type.column.get(); + MutableColumnPtr result_column = values_column->cloneEmpty(); + result_column->reserve(block.rows()); + + const auto & current = block.getByName(ttl_entry.result_column); + const IColumn * ttl_column = current.column.get(); + + for (size_t i = 0; i < block.rows(); ++i) + { + UInt32 cur_ttl = getTimestampByIndex(ttl_column, i); + + if (cur_ttl <= current_time) + { + if (default_column) + result_column->insertFrom(*default_column, i); + else + result_column->insertDefault(); + } + else + { + new_ttl_info.update(cur_ttl); + empty_columns.erase(name); + result_column->insertFrom(*values_column, i); + } + } + column_with_type.column = std::move(result_column); + } + + for (const auto & elem : storage.ttl_entries_by_name) + if (block.has(elem.second.result_column)) + block.erase(elem.second.result_column); +} + +UInt32 TTLBlockInputStream::getTimestampByIndex(const IColumn * column, size_t ind) +{ + if (const ColumnUInt16 * column_date = typeid_cast(column)) + return date_lut.fromDayNum(DayNum(column_date->getData()[ind])); + else if (const ColumnUInt32 * column_date_time = typeid_cast(column)) + return column_date_time->getData()[ind]; + else + throw Exception("Unexpected type of result ttl column", ErrorCodes::LOGICAL_ERROR); +} + +} diff --git a/dbms/src/DataStreams/TTLBlockInputStream.h b/dbms/src/DataStreams/TTLBlockInputStream.h new file mode 100644 index 00000000000..a95cd627bc9 --- /dev/null +++ b/dbms/src/DataStreams/TTLBlockInputStream.h @@ -0,0 +1,60 @@ +#pragma once +#include +#include +#include +#include + +#include + +namespace DB +{ + +class TTLBlockInputStream : public IBlockInputStream +{ +public: + TTLBlockInputStream( + const BlockInputStreamPtr & input_, + const MergeTreeData & storage_, + const MergeTreeData::MutableDataPartPtr & data_part_, + time_t current_time + ); + + String getName() const override { return "TTLBlockInputStream"; } + + Block getHeader() const override; + +protected: + Block readImpl() override; + + /// Finalizes ttl infos and updates data part + void readSuffixImpl() override; + +private: + const MergeTreeData & storage; + + /// ttl_infos and empty_columns are updating while reading + const MergeTreeData::MutableDataPartPtr & data_part; + + time_t current_time; + + MergeTreeDataPart::TTLInfos old_ttl_infos; + MergeTreeDataPart::TTLInfos new_ttl_infos; + NameSet empty_columns; + + size_t rows_removed = 0; + Logger * log; + DateLUTImpl date_lut; + + std::unordered_map defaults_result_column; + ExpressionActionsPtr defaults_expression; +private: + /// Removes values with expired ttl and computes new min_ttl and empty_columns for part + void removeValuesWithExpiredColumnTTL(Block & block); + + /// Remove rows with expired table ttl and computes new min_ttl for part + void removeRowsWithExpiredTableTTL(Block & block); + + UInt32 getTimestampByIndex(const IColumn * column, size_t ind); +}; + +} diff --git a/dbms/src/DataStreams/VersionedCollapsingSortedBlockInputStream.cpp b/dbms/src/DataStreams/VersionedCollapsingSortedBlockInputStream.cpp index fc24bef60bc..c3615e68b68 100644 --- a/dbms/src/DataStreams/VersionedCollapsingSortedBlockInputStream.cpp +++ b/dbms/src/DataStreams/VersionedCollapsingSortedBlockInputStream.cpp @@ -16,8 +16,8 @@ namespace ErrorCodes VersionedCollapsingSortedBlockInputStream::VersionedCollapsingSortedBlockInputStream( const BlockInputStreams & inputs_, const SortDescription & description_, const String & sign_column_, size_t max_block_size_, - WriteBuffer * out_row_sources_buf_) - : MergingSortedBlockInputStream(inputs_, description_, max_block_size_, 0, out_row_sources_buf_) + WriteBuffer * out_row_sources_buf_, bool average_block_sizes_) + : MergingSortedBlockInputStream(inputs_, description_, max_block_size_, 0, out_row_sources_buf_, false, average_block_sizes_) , max_rows_in_queue(std::min(std::max(3, max_block_size_), MAX_ROWS_IN_MULTIVERSION_QUEUE) - 2) , current_keys(max_rows_in_queue + 1) { @@ -83,7 +83,7 @@ Block VersionedCollapsingSortedBlockInputStream::readImpl() void VersionedCollapsingSortedBlockInputStream::merge(MutableColumns & merged_columns, std::priority_queue & queue) { - size_t merged_rows = 0; + MergeStopCondition stop_condition(average_block_sizes, max_block_size); auto update_queue = [this, & queue](SortCursor & cursor) { @@ -108,6 +108,7 @@ void VersionedCollapsingSortedBlockInputStream::merge(MutableColumns & merged_co while (!queue.empty()) { SortCursor current = queue.top(); + size_t current_block_granularity = current->rows; RowRef next_key; @@ -154,10 +155,10 @@ void VersionedCollapsingSortedBlockInputStream::merge(MutableColumns & merged_co current_keys.popFront(); - ++merged_rows; + stop_condition.addRowWithGranularity(current_block_granularity); --rows_to_merge; - if (merged_rows >= max_block_size) + if (stop_condition.checkStop()) { ++blocks_written; return; @@ -173,7 +174,6 @@ void VersionedCollapsingSortedBlockInputStream::merge(MutableColumns & merged_co insertRow(gap, row, merged_columns); current_keys.popFront(); - ++merged_rows; } /// Write information about last collapsed rows. diff --git a/dbms/src/DataStreams/VersionedCollapsingSortedBlockInputStream.h b/dbms/src/DataStreams/VersionedCollapsingSortedBlockInputStream.h index 573fd66920d..d3da6cffd09 100644 --- a/dbms/src/DataStreams/VersionedCollapsingSortedBlockInputStream.h +++ b/dbms/src/DataStreams/VersionedCollapsingSortedBlockInputStream.h @@ -178,7 +178,7 @@ public: VersionedCollapsingSortedBlockInputStream( const BlockInputStreams & inputs_, const SortDescription & description_, const String & sign_column_, size_t max_block_size_, - WriteBuffer * out_row_sources_buf_ = nullptr); + WriteBuffer * out_row_sources_buf_ = nullptr, bool average_block_sizes_ = false); String getName() const override { return "VersionedCollapsingSorted"; } diff --git a/dbms/src/DataStreams/tests/gtest_blocks_size_merging_streams.cpp b/dbms/src/DataStreams/tests/gtest_blocks_size_merging_streams.cpp new file mode 100644 index 00000000000..9cbe82111a2 --- /dev/null +++ b/dbms/src/DataStreams/tests/gtest_blocks_size_merging_streams.cpp @@ -0,0 +1,138 @@ +#pragma GCC diagnostic ignored "-Wsign-compare" +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" +#pragma clang diagnostic ignored "-Wundef" +#endif + +#include +#include +#include +#include +#include +#include +#include + +using namespace DB; + +Block getBlockWithSize(const std::vector & columns, size_t rows, size_t stride, size_t & start) +{ + + ColumnsWithTypeAndName cols; + size_t size_of_row_in_bytes = columns.size() * sizeof(UInt64); + for (size_t i = 0; i * sizeof(UInt64) < size_of_row_in_bytes; i++) + { + auto column = ColumnUInt64::create(rows, 0); + for (size_t j = 0; j < rows; ++j) + { + column->getElement(j) = start; + start += stride; + } + cols.emplace_back(std::move(column), std::make_shared(), columns[i]); + } + return Block(cols); +} + + +BlockInputStreams getInputStreams(const std::vector & column_names, const std::vector> & block_sizes) +{ + BlockInputStreams result; + for (auto [block_size_in_bytes, blocks_count, stride] : block_sizes) + { + BlocksList blocks; + size_t start = stride; + while (blocks_count--) + blocks.push_back(getBlockWithSize(column_names, block_size_in_bytes, stride, start)); + result.push_back(std::make_shared(std::move(blocks))); + } + return result; + +} + + +BlockInputStreams getInputStreamsEqualStride(const std::vector & column_names, const std::vector> & block_sizes) +{ + BlockInputStreams result; + size_t i = 0; + for (auto [block_size_in_bytes, blocks_count, stride] : block_sizes) + { + BlocksList blocks; + size_t start = i; + while (blocks_count--) + blocks.push_back(getBlockWithSize(column_names, block_size_in_bytes, stride, start)); + result.push_back(std::make_shared(std::move(blocks))); + i++; + } + return result; + +} + + +SortDescription getSortDescription(const std::vector & column_names) +{ + SortDescription descr; + for (const auto & column : column_names) + { + descr.emplace_back(column, 1, 1); + } + return descr; +} + +TEST(MergingSortedTest, SimpleBlockSizeTest) +{ + std::vector key_columns{"K1", "K2", "K3"}; + auto sort_description = getSortDescription(key_columns); + auto streams = getInputStreams(key_columns, {{5, 1, 1}, {10, 1, 2}, {21, 1, 3}}); + + EXPECT_EQ(streams.size(), 3); + + MergingSortedBlockInputStream stream(streams, sort_description, DEFAULT_MERGE_BLOCK_SIZE, 0, nullptr, false, true); + + size_t total_rows = 0; + auto block1 = stream.read(); + auto block2 = stream.read(); + auto block3 = stream.read(); + + EXPECT_EQ(stream.read(), Block()); + + for (auto & block : {block1, block2, block3}) + total_rows += block.rows(); + /** + * First block consists of 1 row from block3 with 21 rows + 2 rows from block2 with 10 rows + * + 5 rows from block 1 with 5 rows granularity + */ + EXPECT_EQ(block1.rows(), 8); + /** + * Combination of 10 and 21 rows blocks + */ + EXPECT_EQ(block2.rows(), 14); + /** + * Combination of 10 and 21 rows blocks + */ + EXPECT_EQ(block3.rows(), 14); + + EXPECT_EQ(total_rows, 5 + 10 + 21); +} + + +TEST(MergingSortedTest, MoreInterestingBlockSizes) +{ + std::vector key_columns{"K1", "K2", "K3"}; + auto sort_description = getSortDescription(key_columns); + auto streams = getInputStreamsEqualStride(key_columns, {{1000, 1, 3}, {1500, 1, 3}, {1400, 1, 3}}); + + EXPECT_EQ(streams.size(), 3); + + MergingSortedBlockInputStream stream(streams, sort_description, DEFAULT_MERGE_BLOCK_SIZE, 0, nullptr, false, true); + + auto block1 = stream.read(); + auto block2 = stream.read(); + auto block3 = stream.read(); + + EXPECT_EQ(stream.read(), Block()); + + EXPECT_EQ(block1.rows(), (1000 + 1500 + 1400) / 3); + EXPECT_EQ(block2.rows(), (1000 + 1500 + 1400) / 3); + EXPECT_EQ(block3.rows(), (1000 + 1500 + 1400) / 3); + + EXPECT_EQ(block1.rows() + block2.rows() + block3.rows(), 1000 + 1500 + 1400); +} diff --git a/dbms/src/Databases/DatabaseDictionary.cpp b/dbms/src/Databases/DatabaseDictionary.cpp index 440c5b25abf..195dcea5287 100644 --- a/dbms/src/Databases/DatabaseDictionary.cpp +++ b/dbms/src/Databases/DatabaseDictionary.cpp @@ -65,21 +65,12 @@ StoragePtr DatabaseDictionary::tryGetTable( const Context & context, const String & table_name) const { - auto objects_map = context.getExternalDictionaries().getObjectsMap(); - const auto & dictionaries = objects_map.get(); - + auto dict_ptr = context.getExternalDictionaries().tryGetDictionary(table_name); + if (dict_ptr) { - auto it = dictionaries.find(table_name); - if (it != dictionaries.end()) - { - const auto & dict_ptr = std::static_pointer_cast(it->second.loadable); - if (dict_ptr) - { - const DictionaryStructure & dictionary_structure = dict_ptr->getStructure(); - auto columns = StorageDictionary::getNamesAndTypes(dictionary_structure); - return StorageDictionary::create(table_name, ColumnsDescription{columns}, context, true, table_name); - } - } + const DictionaryStructure & dictionary_structure = dict_ptr->getStructure(); + auto columns = StorageDictionary::getNamesAndTypes(dictionary_structure); + return StorageDictionary::create(table_name, ColumnsDescription{columns}, context, true, table_name); } return {}; diff --git a/dbms/src/Dictionaries/CMakeLists.txt b/dbms/src/Dictionaries/CMakeLists.txt index 49c66e2e408..59999bcb8e5 100644 --- a/dbms/src/Dictionaries/CMakeLists.txt +++ b/dbms/src/Dictionaries/CMakeLists.txt @@ -15,7 +15,7 @@ list(REMOVE_ITEM clickhouse_dictionaries_sources DictionaryFactory.cpp Dictionar list(REMOVE_ITEM clickhouse_dictionaries_headers DictionaryFactory.h DictionarySourceFactory.h DictionaryStructure.h) add_library(clickhouse_dictionaries ${LINK_MODE} ${clickhouse_dictionaries_sources}) -target_link_libraries(clickhouse_dictionaries PRIVATE dbms clickhouse_common_io pocoext ${BTRIE_LIBRARIES} PUBLIC Threads::Threads) +target_link_libraries(clickhouse_dictionaries PRIVATE dbms clickhouse_common_io ${BTRIE_LIBRARIES} PUBLIC Threads::Threads) if(Poco_SQL_FOUND AND NOT USE_INTERNAL_POCO_LIBRARY) target_include_directories(clickhouse_dictionaries SYSTEM PRIVATE ${Poco_SQL_INCLUDE_DIR}) diff --git a/dbms/src/Dictionaries/XDBCDictionarySource.cpp b/dbms/src/Dictionaries/XDBCDictionarySource.cpp index c91cf1fdcba..0170d290e89 100644 --- a/dbms/src/Dictionaries/XDBCDictionarySource.cpp +++ b/dbms/src/Dictionaries/XDBCDictionarySource.cpp @@ -7,7 +7,6 @@ #include #include #include -#include #include #include #include diff --git a/dbms/src/Functions/GatherUtils/Sources.h b/dbms/src/Functions/GatherUtils/Sources.h index a70e06c98e2..1665992d112 100644 --- a/dbms/src/Functions/GatherUtils/Sources.h +++ b/dbms/src/Functions/GatherUtils/Sources.h @@ -8,12 +8,14 @@ #include #include +#include #include #include #include #include + namespace DB { @@ -276,6 +278,92 @@ struct StringSource }; +/// Differs to StringSource by having 'offest' and 'length' in code points instead of bytes in getSlice* methods. +/** NOTE: The behaviour of substring and substringUTF8 is inconsistent when negative offset is greater than string size: + * substring: + * hello + * ^-----^ - offset -10, length 7, result: "he" + * substringUTF8: + * hello + * ^-----^ - offset -10, length 7, result: "hello" + * This may be subject for change. + */ +struct UTF8StringSource : public StringSource +{ + using StringSource::StringSource; + + static const ColumnString::Char * skipCodePointsForward(const ColumnString::Char * pos, size_t size, const ColumnString::Char * end) + { + for (size_t i = 0; i < size && pos < end; ++i) + pos += UTF8::seqLength(*pos); /// NOTE pos may become greater than end. It is Ok due to padding in PaddedPODArray. + return pos; + } + + static const ColumnString::Char * skipCodePointsBackward(const ColumnString::Char * pos, size_t size, const ColumnString::Char * begin) + { + for (size_t i = 0; i < size && pos > begin; ++i) + { + --pos; + if (pos == begin) + break; + UTF8::syncBackward(pos, begin); + } + return pos; + } + + Slice getSliceFromLeft(size_t offset) const + { + auto begin = &elements[prev_offset]; + auto end = elements.data() + offsets[row_num] - 1; + auto res_begin = skipCodePointsForward(begin, offset, end); + + if (res_begin >= end) + return {begin, 0}; + + return {res_begin, size_t(end - res_begin)}; + } + + Slice getSliceFromLeft(size_t offset, size_t length) const + { + auto begin = &elements[prev_offset]; + auto end = elements.data() + offsets[row_num] - 1; + auto res_begin = skipCodePointsForward(begin, offset, end); + + if (res_begin >= end) + return {begin, 0}; + + auto res_end = skipCodePointsForward(res_begin, length, end); + + if (res_end >= end) + return {res_begin, size_t(end - res_begin)}; + + return {res_begin, size_t(res_end - res_begin)}; + } + + Slice getSliceFromRight(size_t offset) const + { + auto begin = &elements[prev_offset]; + auto end = elements.data() + offsets[row_num] - 1; + auto res_begin = skipCodePointsBackward(end, offset, begin); + + return {res_begin, size_t(end - res_begin)}; + } + + Slice getSliceFromRight(size_t offset, size_t length) const + { + auto begin = &elements[prev_offset]; + auto end = elements.data() + offsets[row_num] - 1; + auto res_begin = skipCodePointsBackward(end, offset, begin); + auto res_end = skipCodePointsForward(res_begin, length, end); + + if (res_end >= end) + return {res_begin, size_t(end - res_begin)}; + + return {res_begin, size_t(res_end - res_begin)}; + } +}; + + struct FixedStringSource { using Slice = NumericArraySlice; diff --git a/dbms/src/Functions/bitSwapLastTwo.cpp b/dbms/src/Functions/bitSwapLastTwo.cpp index 6b7a9ba6573..8b477a23574 100644 --- a/dbms/src/Functions/bitSwapLastTwo.cpp +++ b/dbms/src/Functions/bitSwapLastTwo.cpp @@ -10,7 +10,7 @@ struct BitSwapLastTwoImpl { using ResultType = UInt8; - static inline ResultType apply(A a) + static inline ResultType NO_SANITIZE_UNDEFINED apply(A a) { return static_cast( ((static_cast(a) & 1) << 1) | ((static_cast(a) >> 1) & 1)); diff --git a/dbms/src/Functions/isValidUTF8.cpp b/dbms/src/Functions/isValidUTF8.cpp index 6b329513f0f..a07de52ed70 100644 --- a/dbms/src/Functions/isValidUTF8.cpp +++ b/dbms/src/Functions/isValidUTF8.cpp @@ -283,8 +283,7 @@ SOFTWARE. memset(buf + len + 1, 0, 16); check_packed(_mm_loadu_si128(reinterpret_cast<__m128i *>(buf + 1))); - /* Reduce error vector, error_reduced = 0xFFFF if error == 0 */ - return _mm_movemask_epi8(_mm_cmpeq_epi8(error, _mm_set1_epi8(0))) == 0xFFFF; + return _mm_testz_si128(error, error); } #endif diff --git a/dbms/src/Functions/registerFunctionsString.cpp b/dbms/src/Functions/registerFunctionsString.cpp index f04bbf84c4d..d2caf3e5606 100644 --- a/dbms/src/Functions/registerFunctionsString.cpp +++ b/dbms/src/Functions/registerFunctionsString.cpp @@ -18,7 +18,6 @@ void registerFunctionReverse(FunctionFactory &); void registerFunctionReverseUTF8(FunctionFactory &); void registerFunctionsConcat(FunctionFactory &); void registerFunctionSubstring(FunctionFactory &); -void registerFunctionSubstringUTF8(FunctionFactory &); void registerFunctionAppendTrailingCharIfAbsent(FunctionFactory &); void registerFunctionStartsWith(FunctionFactory &); void registerFunctionEndsWith(FunctionFactory &); @@ -46,7 +45,6 @@ void registerFunctionsString(FunctionFactory & factory) registerFunctionReverseUTF8(factory); registerFunctionsConcat(factory); registerFunctionSubstring(factory); - registerFunctionSubstringUTF8(factory); registerFunctionAppendTrailingCharIfAbsent(factory); registerFunctionStartsWith(factory); registerFunctionEndsWith(factory); diff --git a/dbms/src/Functions/substring.cpp b/dbms/src/Functions/substring.cpp index 5fdfb3e6870..cd61d9a58c0 100644 --- a/dbms/src/Functions/substring.cpp +++ b/dbms/src/Functions/substring.cpp @@ -28,10 +28,13 @@ namespace ErrorCodes } +/// If 'is_utf8' - measure offset and length in code points instead of bytes. +/// UTF8 variant is not available for FixedString arguments. +template class FunctionSubstring : public IFunction { public: - static constexpr auto name = "substring"; + static constexpr auto name = is_utf8 ? "substringUTF8" : "substring"; static FunctionPtr create(const Context &) { return std::make_shared(); @@ -56,7 +59,7 @@ public: + toString(number_of_arguments) + ", should be 2 or 3", ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH); - if (!isStringOrFixedString(arguments[0])) + if ((is_utf8 && !isString(arguments[0])) || !isStringOrFixedString(arguments[0])) throw Exception("Illegal type " + arguments[0]->getName() + " of argument of function " + getName(), ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT); if (!isNumber(arguments[1])) @@ -80,7 +83,7 @@ public: Int64 start_value, Int64 length_value, Block & block, size_t result, Source && source, size_t input_rows_count) { - auto col_res = ColumnString::create(); + auto col_res = ColumnString::create(); if (!column_length) { @@ -145,30 +148,48 @@ public: throw Exception("Third argument provided for function substring could not be negative.", ErrorCodes::ARGUMENT_OUT_OF_BOUND); } - if (const ColumnString * col = checkAndGetColumn(column_string.get())) - executeForSource(column_start, column_length, column_start_const, column_length_const, start_value, - length_value, block, result, StringSource(*col), input_rows_count); - else if (const ColumnFixedString * col_fixed = checkAndGetColumn(column_string.get())) - executeForSource(column_start, column_length, column_start_const, column_length_const, start_value, - length_value, block, result, FixedStringSource(*col_fixed), input_rows_count); - else if (const ColumnConst * col_const = checkAndGetColumnConst(column_string.get())) - executeForSource(column_start, column_length, column_start_const, column_length_const, start_value, - length_value, block, result, ConstSource(*col_const), input_rows_count); - else if (const ColumnConst * col_const_fixed = checkAndGetColumnConst(column_string.get())) - executeForSource(column_start, column_length, column_start_const, column_length_const, start_value, - length_value, block, result, ConstSource(*col_const_fixed), input_rows_count); + if constexpr (is_utf8) + { + if (const ColumnString * col = checkAndGetColumn(column_string.get())) + executeForSource(column_start, column_length, column_start_const, column_length_const, start_value, + length_value, block, result, UTF8StringSource(*col), input_rows_count); + else if (const ColumnConst * col_const = checkAndGetColumnConst(column_string.get())) + executeForSource(column_start, column_length, column_start_const, column_length_const, start_value, + length_value, block, result, ConstSource(*col_const), input_rows_count); + else + throw Exception( + "Illegal column " + block.getByPosition(arguments[0]).column->getName() + " of first argument of function " + getName(), + ErrorCodes::ILLEGAL_COLUMN); + } else - throw Exception( - "Illegal column " + block.getByPosition(arguments[0]).column->getName() + " of first argument of function " + getName(), - ErrorCodes::ILLEGAL_COLUMN); + { + if (const ColumnString * col = checkAndGetColumn(column_string.get())) + executeForSource(column_start, column_length, column_start_const, column_length_const, start_value, + length_value, block, result, StringSource(*col), input_rows_count); + else if (const ColumnFixedString * col_fixed = checkAndGetColumn(column_string.get())) + executeForSource(column_start, column_length, column_start_const, column_length_const, start_value, + length_value, block, result, FixedStringSource(*col_fixed), input_rows_count); + else if (const ColumnConst * col_const = checkAndGetColumnConst(column_string.get())) + executeForSource(column_start, column_length, column_start_const, column_length_const, start_value, + length_value, block, result, ConstSource(*col_const), input_rows_count); + else if (const ColumnConst * col_const_fixed = checkAndGetColumnConst(column_string.get())) + executeForSource(column_start, column_length, column_start_const, column_length_const, start_value, + length_value, block, result, ConstSource(*col_const_fixed), input_rows_count); + else + throw Exception( + "Illegal column " + block.getByPosition(arguments[0]).column->getName() + " of first argument of function " + getName(), + ErrorCodes::ILLEGAL_COLUMN); + } } }; void registerFunctionSubstring(FunctionFactory & factory) { - factory.registerFunction(FunctionFactory::CaseInsensitive); - factory.registerAlias("substr", FunctionSubstring::name, FunctionFactory::CaseInsensitive); - factory.registerAlias("mid", FunctionSubstring::name, FunctionFactory::CaseInsensitive); /// from MySQL dialect + factory.registerFunction>(FunctionFactory::CaseInsensitive); + factory.registerAlias("substr", "substring", FunctionFactory::CaseInsensitive); + factory.registerAlias("mid", "substring", FunctionFactory::CaseInsensitive); /// from MySQL dialect + + factory.registerFunction>(FunctionFactory::CaseSensitive); } } diff --git a/dbms/src/Functions/substringUTF8.cpp b/dbms/src/Functions/substringUTF8.cpp deleted file mode 100644 index c66ef79bae3..00000000000 --- a/dbms/src/Functions/substringUTF8.cpp +++ /dev/null @@ -1,166 +0,0 @@ -#include -#include -#include -#include -#include - - -namespace DB -{ - -namespace ErrorCodes -{ - extern const int ILLEGAL_COLUMN; - extern const int ILLEGAL_TYPE_OF_ARGUMENT; - extern const int ARGUMENT_OUT_OF_BOUND; -} - - -/** If the string is encoded in UTF-8, then it selects a substring of code points in it. - * Otherwise, the behavior is undefined. - */ -struct SubstringUTF8Impl -{ - static void vector(const ColumnString::Chars & data, - const ColumnString::Offsets & offsets, - size_t start, - size_t length, - ColumnString::Chars & res_data, - ColumnString::Offsets & res_offsets) - { - res_data.reserve(data.size()); - size_t size = offsets.size(); - res_offsets.resize(size); - - ColumnString::Offset prev_offset = 0; - ColumnString::Offset res_offset = 0; - for (size_t i = 0; i < size; ++i) - { - ColumnString::Offset j = prev_offset; - ColumnString::Offset pos = 1; - ColumnString::Offset bytes_start = 0; - ColumnString::Offset bytes_length = 0; - while (j < offsets[i] - 1) - { - if (pos == start) - bytes_start = j - prev_offset + 1; - - if (data[j] < 0xBF) - j += 1; - else if (data[j] < 0xE0) - j += 2; - else if (data[j] < 0xF0) - j += 3; - else - j += 1; - - if (pos >= start && pos < start + length) - bytes_length = j - prev_offset + 1 - bytes_start; - else if (pos >= start + length) - break; - - ++pos; - } - - if (bytes_start == 0) - { - res_data.resize(res_data.size() + 1); - res_data[res_offset] = 0; - ++res_offset; - } - else - { - size_t bytes_to_copy = std::min(offsets[i] - prev_offset - bytes_start, bytes_length); - res_data.resize(res_data.size() + bytes_to_copy + 1); - memcpySmallAllowReadWriteOverflow15(&res_data[res_offset], &data[prev_offset + bytes_start - 1], bytes_to_copy); - res_offset += bytes_to_copy + 1; - res_data[res_offset - 1] = 0; - } - res_offsets[i] = res_offset; - prev_offset = offsets[i]; - } - } -}; - - -class FunctionSubstringUTF8 : public IFunction -{ -public: - static constexpr auto name = "substringUTF8"; - static FunctionPtr create(const Context &) - { - return std::make_shared(); - } - - String getName() const override - { - return name; - } - - size_t getNumberOfArguments() const override - { - return 3; - } - - bool useDefaultImplementationForConstants() const override { return true; } - ColumnNumbers getArgumentsThatAreAlwaysConstant() const override { return {1, 2}; } - - DataTypePtr getReturnTypeImpl(const DataTypes & arguments) const override - { - if (!isString(arguments[0])) - throw Exception( - "Illegal type " + arguments[0]->getName() + " of argument of function " + getName(), ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT); - - if (!isNumber(arguments[1]) || !isNumber(arguments[2])) - throw Exception("Illegal type " + (isNumber(arguments[1]) ? arguments[2]->getName() : arguments[1]->getName()) - + " of argument of function " - + getName(), - ErrorCodes::ILLEGAL_TYPE_OF_ARGUMENT); - - return std::make_shared(); - } - - void executeImpl(Block & block, const ColumnNumbers & arguments, size_t result, size_t /*input_rows_count*/) override - { - const ColumnPtr column_string = block.getByPosition(arguments[0]).column; - const ColumnPtr column_start = block.getByPosition(arguments[1]).column; - const ColumnPtr column_length = block.getByPosition(arguments[2]).column; - - if (!column_start->isColumnConst() || !column_length->isColumnConst()) - throw Exception("2nd and 3rd arguments of function " + getName() + " must be constants.", ErrorCodes::ILLEGAL_COLUMN); - - Field start_field = (*block.getByPosition(arguments[1]).column)[0]; - Field length_field = (*block.getByPosition(arguments[2]).column)[0]; - - if (start_field.getType() != Field::Types::UInt64 || length_field.getType() != Field::Types::UInt64) - throw Exception("2nd and 3rd arguments of function " + getName() + " must be non-negative and must have UInt type.", ErrorCodes::ILLEGAL_COLUMN); - - UInt64 start = start_field.get(); - UInt64 length = length_field.get(); - - if (start == 0) - throw Exception("Second argument of function substring must be greater than 0.", ErrorCodes::ARGUMENT_OUT_OF_BOUND); - - /// Otherwise may lead to overflow and pass bounds check inside inner loop. - if (start >= 0x8000000000000000ULL || length >= 0x8000000000000000ULL) - throw Exception("Too large values of 2nd or 3rd argument provided for function substring.", ErrorCodes::ARGUMENT_OUT_OF_BOUND); - - if (const ColumnString * col = checkAndGetColumn(column_string.get())) - { - auto col_res = ColumnString::create(); - SubstringUTF8Impl::vector(col->getChars(), col->getOffsets(), start, length, col_res->getChars(), col_res->getOffsets()); - block.getByPosition(result).column = std::move(col_res); - } - else - throw Exception( - "Illegal column " + block.getByPosition(arguments[0]).column->getName() + " of first argument of function " + getName(), - ErrorCodes::ILLEGAL_COLUMN); - } -}; - -void registerFunctionSubstringUTF8(FunctionFactory & factory) -{ - factory.registerFunction(); -} - -} diff --git a/dbms/src/IO/UncompressedCache.h b/dbms/src/IO/UncompressedCache.h index 86f1530e5b3..2347c6d7a28 100644 --- a/dbms/src/IO/UncompressedCache.h +++ b/dbms/src/IO/UncompressedCache.h @@ -6,6 +6,11 @@ #include #include +#include +#if USE_LFALLOC +#include +#endif + namespace ProfileEvents { @@ -20,7 +25,11 @@ namespace DB struct UncompressedCacheCell { +#if USE_LFALLOC + Memory data; +#else Memory<> data; +#endif size_t compressed_size; UInt32 additional_bytes; }; diff --git a/dbms/src/Interpreters/ClientInfo.h b/dbms/src/Interpreters/ClientInfo.h index ac65bc158fa..8cc77e0e387 100644 --- a/dbms/src/Interpreters/ClientInfo.h +++ b/dbms/src/Interpreters/ClientInfo.h @@ -37,7 +37,7 @@ public: { NO_QUERY = 0, /// Uninitialized object. INITIAL_QUERY = 1, - SECONDARY_QUERY = 2, /// Query that was initiated by another query for distributed query execution. + SECONDARY_QUERY = 2, /// Query that was initiated by another query for distributed or ON CLUSTER query execution. }; diff --git a/dbms/src/Interpreters/Compiler.cpp b/dbms/src/Interpreters/Compiler.cpp index 83fbf2918dc..abdb0969121 100644 --- a/dbms/src/Interpreters/Compiler.cpp +++ b/dbms/src/Interpreters/Compiler.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -261,6 +262,9 @@ void Compiler::compile( " -I " << compiler_headers << "/dbms/src/" " -isystem " << compiler_headers << "/contrib/cityhash102/include/" " -isystem " << compiler_headers << "/contrib/libpcg-random/include/" + #if USE_LFALLOC + " -isystem " << compiler_headers << "/contrib/lfalloc/src/" + #endif " -isystem " << compiler_headers << INTERNAL_DOUBLE_CONVERSION_INCLUDE_DIR " -isystem " << compiler_headers << INTERNAL_Poco_Foundation_INCLUDE_DIR " -isystem " << compiler_headers << INTERNAL_Boost_INCLUDE_DIRS diff --git a/dbms/src/Interpreters/Context.cpp b/dbms/src/Interpreters/Context.cpp index 081cea45f4d..ada120450e8 100644 --- a/dbms/src/Interpreters/Context.cpp +++ b/dbms/src/Interpreters/Context.cpp @@ -104,7 +104,7 @@ struct ContextShared mutable std::recursive_mutex mutex; /// Separate mutex for access of dictionaries. Separate mutex to avoid locks when server doing request to itself. mutable std::mutex embedded_dictionaries_mutex; - mutable std::mutex external_dictionaries_mutex; + mutable std::recursive_mutex external_dictionaries_mutex; mutable std::mutex external_models_mutex; /// Separate mutex for re-initialization of zookeer session. This operation could take a long time and must not interfere with another operations. mutable std::mutex zookeeper_mutex; @@ -1240,44 +1240,38 @@ EmbeddedDictionaries & Context::getEmbeddedDictionariesImpl(const bool throw_on_ ExternalDictionaries & Context::getExternalDictionariesImpl(const bool throw_on_error) const { + { + std::lock_guard lock(shared->external_dictionaries_mutex); + if (shared->external_dictionaries) + return *shared->external_dictionaries; + } + const auto & config = getConfigRef(); - std::lock_guard lock(shared->external_dictionaries_mutex); - if (!shared->external_dictionaries) { if (!this->global_context) throw Exception("Logical error: there is no global context", ErrorCodes::LOGICAL_ERROR); auto config_repository = shared->runtime_components_factory->createExternalDictionariesConfigRepository(); - - shared->external_dictionaries.emplace( - std::move(config_repository), - config, - *this->global_context, - throw_on_error); + shared->external_dictionaries.emplace(std::move(config_repository), config, *this->global_context); + shared->external_dictionaries->init(throw_on_error); } - return *shared->external_dictionaries; } ExternalModels & Context::getExternalModelsImpl(bool throw_on_error) const { std::lock_guard lock(shared->external_models_mutex); - if (!shared->external_models) { if (!this->global_context) throw Exception("Logical error: there is no global context", ErrorCodes::LOGICAL_ERROR); auto config_repository = shared->runtime_components_factory->createExternalModelsConfigRepository(); - - shared->external_models.emplace( - std::move(config_repository), - *this->global_context, - throw_on_error); + shared->external_models.emplace(std::move(config_repository), *this->global_context); + shared->external_models->init(throw_on_error); } - return *shared->external_models; } diff --git a/dbms/src/Interpreters/DDLWorker.cpp b/dbms/src/Interpreters/DDLWorker.cpp index 7300adb43cf..c91711dfb29 100644 --- a/dbms/src/Interpreters/DDLWorker.cpp +++ b/dbms/src/Interpreters/DDLWorker.cpp @@ -547,6 +547,7 @@ bool DDLWorker::tryExecuteQuery(const String & query, const DDLTask & task, Exec try { current_context = std::make_unique(context); + current_context->getClientInfo().query_kind = ClientInfo::QueryKind::SECONDARY_QUERY; current_context->setCurrentQueryId(""); // generate random query_id executeQuery(istr, ostr, false, *current_context, {}, {}); } diff --git a/dbms/src/Interpreters/ExternalDictionaries.cpp b/dbms/src/Interpreters/ExternalDictionaries.cpp index 719b13670fa..aa61ab78601 100644 --- a/dbms/src/Interpreters/ExternalDictionaries.cpp +++ b/dbms/src/Interpreters/ExternalDictionaries.cpp @@ -30,8 +30,7 @@ namespace ExternalDictionaries::ExternalDictionaries( std::unique_ptr config_repository, const Poco::Util::AbstractConfiguration & config, - Context & context, - bool throw_on_error) + Context & context) : ExternalLoader(config, externalDictionariesUpdateSettings, getExternalDictionariesConfigSettings(), @@ -40,11 +39,11 @@ ExternalDictionaries::ExternalDictionaries( "external dictionary"), context(context) { - init(throw_on_error); } + std::unique_ptr ExternalDictionaries::create( - const std::string & name, const Configuration & config, const std::string & config_prefix) + const std::string & name, const Configuration & config, const std::string & config_prefix) const { return DictionaryFactory::instance().create(name, config, config_prefix, context); } diff --git a/dbms/src/Interpreters/ExternalDictionaries.h b/dbms/src/Interpreters/ExternalDictionaries.h index a5581dd2237..641967172ea 100644 --- a/dbms/src/Interpreters/ExternalDictionaries.h +++ b/dbms/src/Interpreters/ExternalDictionaries.h @@ -21,8 +21,7 @@ public: ExternalDictionaries( std::unique_ptr config_repository, const Poco::Util::AbstractConfiguration & config, - Context & context, - bool throw_on_error); + Context & context); /// Forcibly reloads specified dictionary. void reloadDictionary(const std::string & name) { reload(name); } @@ -40,7 +39,7 @@ public: protected: std::unique_ptr create(const std::string & name, const Configuration & config, - const std::string & config_prefix) override; + const std::string & config_prefix) const override; using ExternalLoader::getObjectsMap; diff --git a/dbms/src/Interpreters/ExternalLoader.cpp b/dbms/src/Interpreters/ExternalLoader.cpp index 089bda1752c..acd715bfb8b 100644 --- a/dbms/src/Interpreters/ExternalLoader.cpp +++ b/dbms/src/Interpreters/ExternalLoader.cpp @@ -57,12 +57,16 @@ ExternalLoader::ExternalLoader(const Poco::Util::AbstractConfiguration & config_ { } + void ExternalLoader::init(bool throw_on_error) { - if (is_initialized) - return; + std::call_once(is_initialized_flag, &ExternalLoader::initImpl, this, throw_on_error); +} - is_initialized = true; + +void ExternalLoader::initImpl(bool throw_on_error) +{ + std::lock_guard all_lock(all_mutex); { /// During synchronous loading of external dictionaries at moment of query execution, @@ -87,13 +91,13 @@ ExternalLoader::~ExternalLoader() void ExternalLoader::reloadAndUpdate(bool throw_on_error) { + std::lock_guard all_lock(all_mutex); + reloadFromConfigFiles(throw_on_error); /// list of recreated loadable objects to perform delayed removal from unordered_map std::list recreated_failed_loadable_objects; - std::lock_guard all_lock(all_mutex); - /// retry loading failed loadable objects for (auto & failed_loadable_object : failed_loadable_objects) { @@ -250,15 +254,17 @@ void ExternalLoader::reloadAndUpdate(bool throw_on_error) } } + void ExternalLoader::reloadFromConfigFiles(const bool throw_on_error, const bool force_reload, const std::string & only_dictionary) { - const auto config_paths = config_repository->list(config_main, config_settings.path_setting_name); + std::lock_guard all_lock{all_mutex}; + const auto config_paths = config_repository->list(config_main, config_settings.path_setting_name); for (const auto & config_path : config_paths) { try { - reloadFromConfigFile(config_path, throw_on_error, force_reload, only_dictionary); + reloadFromConfigFile(config_path, force_reload, only_dictionary); } catch (...) { @@ -270,30 +276,34 @@ void ExternalLoader::reloadFromConfigFiles(const bool throw_on_error, const bool } /// erase removed from config loadable objects - std::lock_guard lock{map_mutex}; - - std::list removed_loadable_objects; - for (const auto & loadable : loadable_objects) { - const auto & current_config = loadable_objects_defined_in_config[loadable.second.origin]; - if (current_config.find(loadable.first) == std::end(current_config)) - removed_loadable_objects.emplace_back(loadable.first); + std::lock_guard lock{map_mutex}; + std::list removed_loadable_objects; + for (const auto & loadable : loadable_objects) + { + const auto & current_config = loadable_objects_defined_in_config[loadable.second.origin]; + if (current_config.find(loadable.first) == std::end(current_config)) + removed_loadable_objects.emplace_back(loadable.first); + } + for (const auto & name : removed_loadable_objects) + loadable_objects.erase(name); } - for (const auto & name : removed_loadable_objects) - loadable_objects.erase(name); + + /// create all loadable objects which was read from config + finishAllReloads(throw_on_error); } -void ExternalLoader::reloadFromConfigFile(const std::string & config_path, const bool throw_on_error, - const bool force_reload, const std::string & loadable_name) + +void ExternalLoader::reloadFromConfigFile(const std::string & config_path, const bool force_reload, const std::string & loadable_name) { + // We assume `all_mutex` is already locked. + if (config_path.empty() || !config_repository->exists(config_path)) { LOG_WARNING(log, "config file '" + config_path + "' does not exist"); } else { - std::lock_guard all_lock(all_mutex); - auto modification_time_it = last_modification_times.find(config_path); if (modification_time_it == std::end(last_modification_times)) modification_time_it = last_modification_times.emplace(config_path, Poco::Timestamp{0}).first; @@ -329,103 +339,24 @@ void ExternalLoader::reloadFromConfigFile(const std::string & config_path, const continue; } - try + name = loaded_config->getString(key + "." + config_settings.external_name); + if (name.empty()) { - name = loaded_config->getString(key + "." + config_settings.external_name); - if (name.empty()) - { - LOG_WARNING(log, config_path << ": " + config_settings.external_name + " name cannot be empty"); - continue; - } - - loadable_objects_defined_in_config[config_path].emplace(name); - if (!loadable_name.empty() && name != loadable_name) - continue; - - decltype(loadable_objects.begin()) object_it; - { - std::lock_guard lock{map_mutex}; - object_it = loadable_objects.find(name); - - /// Object with the same name was declared in other config file. - if (object_it != std::end(loadable_objects) && object_it->second.origin != config_path) - throw Exception(object_name + " '" + name + "' from file " + config_path - + " already declared in file " + object_it->second.origin, - ErrorCodes::EXTERNAL_LOADABLE_ALREADY_EXISTS); - } - - auto object_ptr = create(name, *loaded_config, key); - - /// If the object could not be loaded. - if (const auto exception_ptr = object_ptr->getCreationException()) - { - std::chrono::seconds delay(update_settings.backoff_initial_sec); - const auto failed_dict_it = failed_loadable_objects.find(name); - FailedLoadableInfo info{std::move(object_ptr), std::chrono::system_clock::now() + delay, 0}; - if (failed_dict_it != std::end(failed_loadable_objects)) - (*failed_dict_it).second = std::move(info); - else - failed_loadable_objects.emplace(name, std::move(info)); - - std::rethrow_exception(exception_ptr); - } - else if (object_ptr->supportUpdates()) - { - const auto & lifetime = object_ptr->getLifetime(); - if (lifetime.min_sec != 0 && lifetime.max_sec != 0) - { - std::uniform_int_distribution distribution(lifetime.min_sec, lifetime.max_sec); - - update_times[name] = std::chrono::system_clock::now() + - std::chrono::seconds{distribution(rnd_engine)}; - } - } - - std::lock_guard lock{map_mutex}; - - /// add new loadable object or update an existing version - if (object_it == std::end(loadable_objects)) - loadable_objects.emplace(name, LoadableInfo{std::move(object_ptr), config_path, {}}); - else - { - if (object_it->second.loadable) - object_it->second.loadable.reset(); - object_it->second.loadable = std::move(object_ptr); - - /// erase stored exception on success - object_it->second.exception = std::exception_ptr{}; - failed_loadable_objects.erase(name); - } + LOG_WARNING(log, config_path << ": " + config_settings.external_name + " name cannot be empty"); + continue; } - catch (...) - { - if (!name.empty()) - { - /// If the loadable object could not load data or even failed to initialize from the config. - /// - all the same we insert information into the `loadable_objects`, with the zero pointer `loadable`. - std::lock_guard lock{map_mutex}; + loadable_objects_defined_in_config[config_path].emplace(name); + if (!loadable_name.empty() && name != loadable_name) + continue; - const auto exception_ptr = std::current_exception(); - const auto loadable_it = loadable_objects.find(name); - if (loadable_it == std::end(loadable_objects)) - loadable_objects.emplace(name, LoadableInfo{nullptr, config_path, exception_ptr}); - else - loadable_it->second.exception = exception_ptr; - } - - tryLogCurrentException(log, "Cannot create " + object_name + " '" - + name + "' from config path " + config_path); - - /// propagate exception - if (throw_on_error) - throw; - } + objects_to_reload.emplace(name, LoadableCreationInfo{name, loaded_config, config_path, key}); } } } } + void ExternalLoader::reload() { reloadFromConfigFiles(true, true); @@ -441,10 +372,149 @@ void ExternalLoader::reload(const std::string & name) throw Exception("Failed to load " + object_name + " '" + name + "' during the reload process", ErrorCodes::BAD_ARGUMENTS); } + +void ExternalLoader::finishReload(const std::string & loadable_name, bool throw_on_error) const +{ + // We assume `all_mutex` is already locked. + + auto it = objects_to_reload.find(loadable_name); + if (it == objects_to_reload.end()) + return; + + LoadableCreationInfo creation_info = std::move(it->second); + objects_to_reload.erase(it); + finishReloadImpl(creation_info, throw_on_error); +} + + +void ExternalLoader::finishAllReloads(bool throw_on_error) const +{ + // We assume `all_mutex` is already locked. + + // We cannot just go through the map `objects_to_create` from begin to end and create every object + // because these objects can depend on each other. + // For example, if the first object's data depends on the second object's data then + // creating the first object will cause creating the second object too. + while (!objects_to_reload.empty()) + { + auto it = objects_to_reload.begin(); + LoadableCreationInfo creation_info = std::move(it->second); + objects_to_reload.erase(it); + + try + { + finishReloadImpl(creation_info, throw_on_error); + } + catch (...) + { + objects_to_reload.clear(); // no more objects to create after an exception + throw; + } + } +} + + +void ExternalLoader::finishReloadImpl(const LoadableCreationInfo & creation_info, bool throw_on_error) const +{ + // We assume `all_mutex` is already locked. + + const std::string & name = creation_info.name; + const std::string & config_path = creation_info.config_path; + + try + { + ObjectsMap::iterator object_it; + { + std::lock_guard lock{map_mutex}; + object_it = loadable_objects.find(name); + + /// Object with the same name was declared in other config file. + if (object_it != std::end(loadable_objects) && object_it->second.origin != config_path) + throw Exception(object_name + " '" + name + "' from file " + config_path + + " already declared in file " + object_it->second.origin, + ErrorCodes::EXTERNAL_LOADABLE_ALREADY_EXISTS); + } + + auto object_ptr = create(name, *creation_info.config, creation_info.config_prefix); + + /// If the object could not be loaded. + if (const auto exception_ptr = object_ptr->getCreationException()) + { + std::chrono::seconds delay(update_settings.backoff_initial_sec); + const auto failed_dict_it = failed_loadable_objects.find(name); + FailedLoadableInfo info{std::move(object_ptr), std::chrono::system_clock::now() + delay, 0}; + if (failed_dict_it != std::end(failed_loadable_objects)) + (*failed_dict_it).second = std::move(info); + else + failed_loadable_objects.emplace(name, std::move(info)); + + std::rethrow_exception(exception_ptr); + } + else if (object_ptr->supportUpdates()) + { + const auto & lifetime = object_ptr->getLifetime(); + if (lifetime.min_sec != 0 && lifetime.max_sec != 0) + { + std::uniform_int_distribution distribution(lifetime.min_sec, lifetime.max_sec); + + update_times[name] = std::chrono::system_clock::now() + + std::chrono::seconds{distribution(rnd_engine)}; + } + } + + std::lock_guard lock{map_mutex}; + + /// add new loadable object or update an existing version + if (object_it == std::end(loadable_objects)) + loadable_objects.emplace(name, LoadableInfo{std::move(object_ptr), config_path, {}}); + else + { + if (object_it->second.loadable) + object_it->second.loadable.reset(); + object_it->second.loadable = std::move(object_ptr); + + /// erase stored exception on success + object_it->second.exception = std::exception_ptr{}; + failed_loadable_objects.erase(name); + } + } + catch (...) + { + if (!name.empty()) + { + /// If the loadable object could not load data or even failed to initialize from the config. + /// - all the same we insert information into the `loadable_objects`, with the zero pointer `loadable`. + + std::lock_guard lock{map_mutex}; + + const auto exception_ptr = std::current_exception(); + const auto loadable_it = loadable_objects.find(name); + if (loadable_it == std::end(loadable_objects)) + loadable_objects.emplace(name, LoadableInfo{nullptr, config_path, exception_ptr}); + else + loadable_it->second.exception = exception_ptr; + } + + tryLogCurrentException(log, "Cannot create " + object_name + " '" + + name + "' from config path " + config_path); + + /// propagate exception + if (throw_on_error) + throw; + } +} + + ExternalLoader::LoadablePtr ExternalLoader::getLoadableImpl(const std::string & name, bool throw_on_error) const { - std::lock_guard lock{map_mutex}; + /// We try to finish the reloading of the object `name` here, before searching it in the map `loadable_objects` later in this function. + /// If some other thread is already doing this reload work we don't want to wait until it finishes, because it's faster to just use + /// the current version of this loadable object. That's why we use try_lock() instead of lock() here. + std::unique_lock all_lock{all_mutex, std::defer_lock}; + if (all_lock.try_lock()) + finishReload(name, throw_on_error); + std::lock_guard lock{map_mutex}; const auto it = loadable_objects.find(name); if (it == std::end(loadable_objects)) { diff --git a/dbms/src/Interpreters/ExternalLoader.h b/dbms/src/Interpreters/ExternalLoader.h index 765ee1bbfdb..f3096d87f96 100644 --- a/dbms/src/Interpreters/ExternalLoader.h +++ b/dbms/src/Interpreters/ExternalLoader.h @@ -89,7 +89,7 @@ public: using Configuration = Poco::Util::AbstractConfiguration; using ObjectsMap = std::unordered_map; - /// Objects will be loaded immediately and then will be updated in separate thread, each 'reload_period' seconds. + /// Call init() after constructing the instance of any derived class. ExternalLoader(const Configuration & config_main, const ExternalLoaderUpdateSettings & update_settings, const ExternalLoaderConfigSettings & config_settings, @@ -97,6 +97,11 @@ public: Logger * log, const std::string & loadable_object_name); virtual ~ExternalLoader(); + /// Should be called after creating an instance of a derived class. + /// Loads the objects immediately and starts a separate thread to update them once in each 'reload_period' seconds. + /// This function does nothing if called again. + void init(bool throw_on_error); + /// Forcibly reloads all loadable objects. void reload(); @@ -108,7 +113,7 @@ public: protected: virtual std::unique_ptr create(const std::string & name, const Configuration & config, - const std::string & config_prefix) = 0; + const std::string & config_prefix) const = 0; class LockedObjectsMap { @@ -123,12 +128,8 @@ protected: /// Direct access to objects. LockedObjectsMap getObjectsMap() const; - /// Should be called in derived constructor (to avoid pure virtual call). - void init(bool throw_on_error); - private: - - bool is_initialized = false; + std::once_flag is_initialized_flag; /// Protects only objects map. /** Reading and assignment of "loadable" should be done under mutex. @@ -136,22 +137,35 @@ private: */ mutable std::mutex map_mutex; - /// Protects all data, currently used to avoid races between updating thread and SYSTEM queries - mutable std::mutex all_mutex; + /// Protects all data, currently used to avoid races between updating thread and SYSTEM queries. + /// The mutex is recursive because creating of objects might be recursive, i.e. + /// creating objects might cause creating other objects. + mutable std::recursive_mutex all_mutex; /// name -> loadable. - ObjectsMap loadable_objects; + mutable ObjectsMap loadable_objects; + + struct LoadableCreationInfo + { + std::string name; + Poco::AutoPtr config; + std::string config_path; + std::string config_prefix; + }; + + /// Objects which should be reloaded soon. + mutable std::unordered_map objects_to_reload; /// Here are loadable objects, that has been never loaded successfully. /// They are also in 'loadable_objects', but with nullptr as 'loadable'. - std::unordered_map failed_loadable_objects; + mutable std::unordered_map failed_loadable_objects; /// Both for loadable_objects and failed_loadable_objects. - std::unordered_map update_times; + mutable std::unordered_map update_times; std::unordered_map> loadable_objects_defined_in_config; - pcg64 rnd_engine{randomSeed()}; + mutable pcg64 rnd_engine{randomSeed()}; const Configuration & config_main; const ExternalLoaderUpdateSettings & update_settings; @@ -168,17 +182,22 @@ private: std::unordered_map last_modification_times; + void initImpl(bool throw_on_error); + /// Check objects definitions in config files and reload or/and add new ones if the definition is changed /// If loadable_name is not empty, load only loadable object with name loadable_name void reloadFromConfigFiles(bool throw_on_error, bool force_reload = false, const std::string & loadable_name = ""); - void reloadFromConfigFile(const std::string & config_path, const bool throw_on_error, - const bool force_reload, const std::string & loadable_name); + void reloadFromConfigFile(const std::string & config_path, const bool force_reload, const std::string & loadable_name); /// Check config files and update expired loadable objects void reloadAndUpdate(bool throw_on_error = false); void reloadPeriodically(); + void finishReload(const std::string & loadable_name, bool throw_on_error) const; + void finishAllReloads(bool throw_on_error) const; + void finishReloadImpl(const LoadableCreationInfo & creation_info, bool throw_on_error) const; + LoadablePtr getLoadableImpl(const std::string & name, bool throw_on_error) const; }; diff --git a/dbms/src/Interpreters/ExternalModels.cpp b/dbms/src/Interpreters/ExternalModels.cpp index 60d763f7eee..e0b0244a5be 100644 --- a/dbms/src/Interpreters/ExternalModels.cpp +++ b/dbms/src/Interpreters/ExternalModels.cpp @@ -33,8 +33,7 @@ namespace ExternalModels::ExternalModels( std::unique_ptr config_repository, - Context & context, - bool throw_on_error) + Context & context) : ExternalLoader(context.getConfigRef(), externalModelsUpdateSettings, getExternalModelsConfigSettings(), @@ -43,11 +42,10 @@ ExternalModels::ExternalModels( "external model"), context(context) { - init(throw_on_error); } std::unique_ptr ExternalModels::create( - const std::string & name, const Configuration & config, const std::string & config_prefix) + const std::string & name, const Configuration & config, const std::string & config_prefix) const { String type = config.getString(config_prefix + ".type"); ExternalLoadableLifetime lifetime(config, config_prefix + ".lifetime"); diff --git a/dbms/src/Interpreters/ExternalModels.h b/dbms/src/Interpreters/ExternalModels.h index 9a048032bd7..3f007d4a821 100644 --- a/dbms/src/Interpreters/ExternalModels.h +++ b/dbms/src/Interpreters/ExternalModels.h @@ -20,8 +20,7 @@ public: /// Models will be loaded immediately and then will be updated in separate thread, each 'reload_period' seconds. ExternalModels( std::unique_ptr config_repository, - Context & context, - bool throw_on_error); + Context & context); /// Forcibly reloads specified model. void reloadModel(const std::string & name) { reload(name); } @@ -34,7 +33,7 @@ public: protected: std::unique_ptr create(const std::string & name, const Configuration & config, - const std::string & config_prefix) override; + const std::string & config_prefix) const override; using ExternalLoader::getObjectsMap; diff --git a/dbms/src/Interpreters/InJoinSubqueriesPreprocessor.cpp b/dbms/src/Interpreters/InJoinSubqueriesPreprocessor.cpp index fee9d8c0872..149565beadc 100644 --- a/dbms/src/Interpreters/InJoinSubqueriesPreprocessor.cpp +++ b/dbms/src/Interpreters/InJoinSubqueriesPreprocessor.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -23,84 +24,169 @@ namespace ErrorCodes namespace { -/** Call a function for each non-GLOBAL subquery in IN or JOIN. - * Pass to function: AST node with subquery, and AST node with corresponding IN function or JOIN. - * Consider only first-level subqueries (do not go recursively into subqueries). - */ -template -void forEachNonGlobalSubquery(IAST * node, F && f) -{ - if (auto * function = node->as()) - { - if (function->name == "in" || function->name == "notIn") - { - f(function->arguments->children.at(1).get(), function, nullptr); - return; - } - - /// Pass into other functions, as subquery could be in aggregate or in lambda functions. - } - else if (const auto * join = node->as()) - { - if (join->table_join && join->table_expression) - { - auto & table_join = join->table_join->as(); - if (table_join.locality != ASTTableJoin::Locality::Global) - { - auto & subquery = join->table_expression->as()->subquery; - if (subquery) - f(subquery.get(), nullptr, &table_join); - } - return; - } - - /// Pass into other kind of JOINs, as subquery could be in ARRAY JOIN. - } - - /// Descent into all children, but not into subqueries of other kind (scalar subqueries), that are irrelevant to us. - for (auto & child : node->children) - if (!child->as()) - forEachNonGlobalSubquery(child.get(), f); -} - - -/** Find all (ordinary) tables in any nesting level in AST. - */ -template -void forEachTable(IAST * node, F && f) -{ - if (auto * table_expression = node->as()) - { - auto & database_and_table = table_expression->database_and_table_name; - if (database_and_table) - f(database_and_table); - } - - for (auto & child : node->children) - forEachTable(child.get(), f); -} - - StoragePtr tryGetTable(const ASTPtr & database_and_table, const Context & context) { DatabaseAndTableWithAlias db_and_table(database_and_table); return context.tryGetTable(db_and_table.database, db_and_table.table); } +using CheckShardsAndTables = InJoinSubqueriesPreprocessor::CheckShardsAndTables; + +struct NonGlobalTableData +{ + using TypeToVisit = ASTTableExpression; + + const CheckShardsAndTables & checker; + const Context & context; + ASTFunction * function = nullptr; + ASTTableJoin * table_join = nullptr; + + void visit(ASTTableExpression & node, ASTPtr &) + { + ASTPtr & database_and_table = node.database_and_table_name; + if (database_and_table) + renameIfNeeded(database_and_table); + } + +private: + void renameIfNeeded(ASTPtr & database_and_table) + { + const SettingDistributedProductMode distributed_product_mode = context.getSettingsRef().distributed_product_mode; + + StoragePtr storage = tryGetTable(database_and_table, context); + if (!storage || !checker.hasAtLeastTwoShards(*storage)) + return; + + if (distributed_product_mode == DistributedProductMode::DENY) + { + throw Exception("Double-distributed IN/JOIN subqueries is denied (distributed_product_mode = 'deny')." + " You may rewrite query to use local tables in subqueries, or use GLOBAL keyword, or set distributed_product_mode to suitable value.", + ErrorCodes::DISTRIBUTED_IN_JOIN_SUBQUERY_DENIED); + } + else if (distributed_product_mode == DistributedProductMode::GLOBAL) + { + if (function) + { + auto * concrete = function->as(); + + if (concrete->name == "in") + concrete->name = "globalIn"; + else if (concrete->name == "notIn") + concrete->name = "globalNotIn"; + else if (concrete->name == "globalIn" || concrete->name == "globalNotIn") + { + /// Already processed. + } + else + throw Exception("Logical error: unexpected function name " + concrete->name, ErrorCodes::LOGICAL_ERROR); + } + else if (table_join) + table_join->locality = ASTTableJoin::Locality::Global; + else + throw Exception("Logical error: unexpected AST node", ErrorCodes::LOGICAL_ERROR); + } + else if (distributed_product_mode == DistributedProductMode::LOCAL) + { + /// Convert distributed table to corresponding remote table. + + std::string database; + std::string table; + std::tie(database, table) = checker.getRemoteDatabaseAndTableName(*storage); + + String alias = database_and_table->tryGetAlias(); + if (alias.empty()) + throw Exception("Distributed table should have an alias when distributed_product_mode set to local.", + ErrorCodes::DISTRIBUTED_IN_JOIN_SUBQUERY_DENIED); + + database_and_table = createTableIdentifier(database, table); + database_and_table->setAlias(alias); + } + else + throw Exception("InJoinSubqueriesPreprocessor: unexpected value of 'distributed_product_mode' setting", + ErrorCodes::LOGICAL_ERROR); + } +}; + +using NonGlobalTableMatcher = OneTypeMatcher; +using NonGlobalTableVisitor = InDepthNodeVisitor; + + +class NonGlobalSubqueryMatcher +{ +public: + struct Data + { + const CheckShardsAndTables & checker; + const Context & context; + }; + + static void visit(ASTPtr & node, Data & data) + { + if (auto * function = node->as()) + visit(*function, node, data); + if (const auto * tables = node->as()) + visit(*tables, node, data); + } + + static bool needChildVisit(ASTPtr & node, const ASTPtr & child) + { + if (auto * function = node->as()) + if (function->name == "in" || function->name == "notIn") + return false; /// Processed, process others + + if (const auto * t = node->as()) + if (t->table_join && t->table_expression) + return false; /// Processed, process others + + /// Descent into all children, but not into subqueries of other kind (scalar subqueries), that are irrelevant to us. + if (child->as()) + return false; + return true; + } + +private: + static void visit(ASTFunction & node, ASTPtr &, Data & data) + { + if (node.name == "in" || node.name == "notIn") + { + auto & subquery = node.arguments->children.at(1); + NonGlobalTableVisitor::Data table_data{data.checker, data.context, &node, nullptr}; + NonGlobalTableVisitor(table_data).visit(subquery); + } + } + + static void visit(const ASTTablesInSelectQueryElement & node, ASTPtr &, Data & data) + { + if (!node.table_join || !node.table_expression) + return; + + ASTTableJoin * table_join = node.table_join->as(); + if (table_join->locality != ASTTableJoin::Locality::Global) + { + if (auto & subquery = node.table_expression->as()->subquery) + { + NonGlobalTableVisitor::Data table_data{data.checker, data.context, nullptr, table_join}; + NonGlobalTableVisitor(table_data).visit(subquery); + } + } + } +}; + +using NonGlobalSubqueryVisitor = InDepthNodeVisitor; + } -void InJoinSubqueriesPreprocessor::process(ASTSelectQuery * query) const +void InJoinSubqueriesPreprocessor::visit(ASTPtr & ast) const { - if (!query) + if (!ast) return; - const SettingDistributedProductMode distributed_product_mode = context.getSettingsRef().distributed_product_mode; - - if (distributed_product_mode == DistributedProductMode::ALLOW) + ASTSelectQuery * query = ast->as(); + if (!query || !query->tables()) return; - if (!query->tables()) + if (context.getSettingsRef().distributed_product_mode == DistributedProductMode::ALLOW) return; const auto & tables_in_select_query = query->tables()->as(); @@ -120,65 +206,16 @@ void InJoinSubqueriesPreprocessor::process(ASTSelectQuery * query) const /// If not really distributed table, skip it. { StoragePtr storage = tryGetTable(table_expression->database_and_table_name, context); - if (!storage || !hasAtLeastTwoShards(*storage)) + if (!storage || !checker->hasAtLeastTwoShards(*storage)) return; } - forEachNonGlobalSubquery(query, [&] (IAST * subquery, IAST * function, IAST * table_join) - { - forEachTable(subquery, [&] (ASTPtr & database_and_table) - { - StoragePtr storage = tryGetTable(database_and_table, context); - - if (!storage || !hasAtLeastTwoShards(*storage)) - return; - - if (distributed_product_mode == DistributedProductMode::DENY) - { - throw Exception("Double-distributed IN/JOIN subqueries is denied (distributed_product_mode = 'deny')." - " You may rewrite query to use local tables in subqueries, or use GLOBAL keyword, or set distributed_product_mode to suitable value.", - ErrorCodes::DISTRIBUTED_IN_JOIN_SUBQUERY_DENIED); - } - else if (distributed_product_mode == DistributedProductMode::GLOBAL) - { - if (function) - { - auto * concrete = function->as(); - - if (concrete->name == "in") - concrete->name = "globalIn"; - else if (concrete->name == "notIn") - concrete->name = "globalNotIn"; - else if (concrete->name == "globalIn" || concrete->name == "globalNotIn") - { - /// Already processed. - } - else - throw Exception("Logical error: unexpected function name " + concrete->name, ErrorCodes::LOGICAL_ERROR); - } - else if (table_join) - table_join->as().locality = ASTTableJoin::Locality::Global; - else - throw Exception("Logical error: unexpected AST node", ErrorCodes::LOGICAL_ERROR); - } - else if (distributed_product_mode == DistributedProductMode::LOCAL) - { - /// Convert distributed table to corresponding remote table. - - std::string database; - std::string table; - std::tie(database, table) = getRemoteDatabaseAndTableName(*storage); - - database_and_table = createTableIdentifier(database, table); - } - else - throw Exception("InJoinSubqueriesPreprocessor: unexpected value of 'distributed_product_mode' setting", ErrorCodes::LOGICAL_ERROR); - }); - }); + NonGlobalSubqueryVisitor::Data visitor_data{*checker, context}; + NonGlobalSubqueryVisitor(visitor_data).visit(ast); } -bool InJoinSubqueriesPreprocessor::hasAtLeastTwoShards(const IStorage & table) const +bool InJoinSubqueriesPreprocessor::CheckShardsAndTables::hasAtLeastTwoShards(const IStorage & table) const { const StorageDistributed * distributed = dynamic_cast(&table); if (!distributed) @@ -189,7 +226,7 @@ bool InJoinSubqueriesPreprocessor::hasAtLeastTwoShards(const IStorage & table) c std::pair -InJoinSubqueriesPreprocessor::getRemoteDatabaseAndTableName(const IStorage & table) const +InJoinSubqueriesPreprocessor::CheckShardsAndTables::getRemoteDatabaseAndTableName(const IStorage & table) const { const StorageDistributed & distributed = dynamic_cast(table); return { distributed.getRemoteDatabaseName(), distributed.getRemoteTableName() }; diff --git a/dbms/src/Interpreters/InJoinSubqueriesPreprocessor.h b/dbms/src/Interpreters/InJoinSubqueriesPreprocessor.h index b98bdc4e57a..8f7853720c7 100644 --- a/dbms/src/Interpreters/InJoinSubqueriesPreprocessor.h +++ b/dbms/src/Interpreters/InJoinSubqueriesPreprocessor.h @@ -1,14 +1,15 @@ #pragma once #include +#include #include #include +#include namespace DB { -class IAST; class IStorage; class ASTSelectQuery; class Context; @@ -34,16 +35,26 @@ class Context; class InJoinSubqueriesPreprocessor { public: - InJoinSubqueriesPreprocessor(const Context & context) : context(context) {} - void process(ASTSelectQuery * query) const; + struct CheckShardsAndTables + { + using Ptr = std::unique_ptr; - /// These methods could be overriden for the need of the unit test. - virtual bool hasAtLeastTwoShards(const IStorage & table) const; - virtual std::pair getRemoteDatabaseAndTableName(const IStorage & table) const; - virtual ~InJoinSubqueriesPreprocessor() {} + /// These methods could be overriden for the need of the unit test. + virtual bool hasAtLeastTwoShards(const IStorage & table) const; + virtual std::pair getRemoteDatabaseAndTableName(const IStorage & table) const; + virtual ~CheckShardsAndTables() {} + }; + + InJoinSubqueriesPreprocessor(const Context & context, CheckShardsAndTables::Ptr _checker = std::make_unique()) + : context(context) + , checker(std::move(_checker)) + {} + + void visit(ASTPtr & query) const; private: const Context & context; + CheckShardsAndTables::Ptr checker; }; diff --git a/dbms/src/Interpreters/InterpreterCreateQuery.cpp b/dbms/src/Interpreters/InterpreterCreateQuery.cpp index 1a1f971777b..4bc35f1e378 100644 --- a/dbms/src/Interpreters/InterpreterCreateQuery.cpp +++ b/dbms/src/Interpreters/InterpreterCreateQuery.cpp @@ -233,6 +233,9 @@ ASTPtr InterpreterCreateQuery::formatColumns(const ColumnsDescription & columns) column_declaration->codec = parseQuery(codec_p, codec_desc_pos, codec_desc_end, "column codec", 0); } + if (column.ttl) + column_declaration->ttl = column.ttl; + columns_list->children.push_back(column_declaration_ptr); } @@ -347,6 +350,9 @@ ColumnsDescription InterpreterCreateQuery::getColumnsDescription(const ASTExpres if (col_decl.codec) column.codec = CompressionCodecFactory::instance().get(col_decl.codec, column.type); + if (col_decl.ttl) + column.ttl = col_decl.ttl; + res.add(std::move(column)); } diff --git a/dbms/src/Interpreters/InterpreterDescribeQuery.cpp b/dbms/src/Interpreters/InterpreterDescribeQuery.cpp index 62dee79c17b..d037f87a857 100644 --- a/dbms/src/Interpreters/InterpreterDescribeQuery.cpp +++ b/dbms/src/Interpreters/InterpreterDescribeQuery.cpp @@ -52,6 +52,9 @@ Block InterpreterDescribeQuery::getSampleBlock() col.name = "codec_expression"; block.insert(col); + col.name = "ttl_expression"; + block.insert(col); + return block; } @@ -118,6 +121,11 @@ BlockInputStreamPtr InterpreterDescribeQuery::executeImpl() res_columns[5]->insert(column.codec->getCodecDesc()); else res_columns[5]->insertDefault(); + + if (column.ttl) + res_columns[6]->insert(queryToString(column.ttl)); + else + res_columns[6]->insertDefault(); } return std::make_shared(sample_block.cloneWithColumns(std::move(res_columns))); diff --git a/dbms/src/Interpreters/InterpreterSelectQuery.cpp b/dbms/src/Interpreters/InterpreterSelectQuery.cpp index fe5af40a6d3..c561b017e05 100644 --- a/dbms/src/Interpreters/InterpreterSelectQuery.cpp +++ b/dbms/src/Interpreters/InterpreterSelectQuery.cpp @@ -760,11 +760,11 @@ void InterpreterSelectQuery::executeImpl(Pipeline & pipeline, const BlockInputSt executeExpression(pipeline, expressions.before_order_and_select); executeDistinct(pipeline, true, expressions.selected_columns); - need_second_distinct_pass = query.distinct && pipeline.hasMoreThanOneStream(); + need_second_distinct_pass = query.distinct && pipeline.hasMixedStreams(); } else { - need_second_distinct_pass = query.distinct && pipeline.hasMoreThanOneStream(); + need_second_distinct_pass = query.distinct && pipeline.hasMixedStreams(); if (query.group_by_with_totals && !aggregate_final) { @@ -1533,6 +1533,7 @@ void InterpreterSelectQuery::executeUnion(Pipeline & pipeline) pipeline.firstStream() = std::make_shared(pipeline.streams, pipeline.stream_with_non_joined_data, max_streams); pipeline.stream_with_non_joined_data = nullptr; pipeline.streams.resize(1); + pipeline.union_stream = true; } else if (pipeline.stream_with_non_joined_data) { diff --git a/dbms/src/Interpreters/InterpreterSelectQuery.h b/dbms/src/Interpreters/InterpreterSelectQuery.h index 1a72a5fb199..54ef3f8e600 100644 --- a/dbms/src/Interpreters/InterpreterSelectQuery.h +++ b/dbms/src/Interpreters/InterpreterSelectQuery.h @@ -100,6 +100,7 @@ private: * It is appended to the main streams in UnionBlockInputStream or ParallelAggregatingBlockInputStream. */ BlockInputStreamPtr stream_with_non_joined_data; + bool union_stream = false; BlockInputStreamPtr & firstStream() { return streams.at(0); } @@ -117,6 +118,12 @@ private: { return streams.size() + (stream_with_non_joined_data ? 1 : 0) > 1; } + + /// Resulting stream is mix of other streams data. Distinct and/or order guaranties are broken. + bool hasMixedStreams() const + { + return hasMoreThanOneStream() || union_stream; + } }; void executeImpl(Pipeline & pipeline, const BlockInputStreamPtr & prepared_input, bool dry_run); diff --git a/dbms/src/Interpreters/RowRefs.h b/dbms/src/Interpreters/RowRefs.h index 23c1b1e0eac..39bda54cf22 100644 --- a/dbms/src/Interpreters/RowRefs.h +++ b/dbms/src/Interpreters/RowRefs.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include @@ -39,11 +40,11 @@ struct RowRefList : RowRef * references that can be returned by the lookup methods */ -template +template class SortedLookupVector { public: - using Base = std::vector; + using Base = std::vector<_Entry>; // First stage, insertions into the vector template @@ -54,7 +55,7 @@ public: } // Transition into second stage, ensures that the vector is sorted - typename Base::const_iterator upper_bound(const T & k) + typename Base::const_iterator upper_bound(const _Entry & k) { sort(); return std::upper_bound(array.cbegin(), array.cend(), k); @@ -81,7 +82,15 @@ private: std::lock_guard l(lock); if (!sorted.load(std::memory_order_relaxed)) { - std::sort(array.begin(), array.end()); + /// TODO: It has been tested only for UInt32 yet. It needs to check UInt64, Float32/64. + if constexpr (std::is_same_v<_Key, UInt32>) + { + if (!array.empty()) + radixSort<_Entry, _Key>(&array[0], array.size()); + } + else + std::sort(array.begin(), array.end()); + sorted.store(true, std::memory_order_release); } } @@ -94,7 +103,7 @@ public: template struct Entry { - using LookupType = SortedLookupVector>; + using LookupType = SortedLookupVector, T>; using LookupPtr = std::unique_ptr; T asof_value; RowRef row_ref; diff --git a/dbms/src/Interpreters/SyntaxAnalyzer.cpp b/dbms/src/Interpreters/SyntaxAnalyzer.cpp index 9e522dca4d8..198ea0f39db 100644 --- a/dbms/src/Interpreters/SyntaxAnalyzer.cpp +++ b/dbms/src/Interpreters/SyntaxAnalyzer.cpp @@ -710,9 +710,8 @@ SyntaxAnalyzerResultPtr SyntaxAnalyzer::analyze( (storage ? storage->getColumns().getOrdinary().getNames() : source_columns_list), source_columns_set, result.analyzed_join.columns_from_joined_table); - /// Depending on the user's profile, check for the execution rights - /// distributed subqueries inside the IN or JOIN sections and process these subqueries. - InJoinSubqueriesPreprocessor(context).process(select_query); + /// Rewrite IN and/or JOIN for distributed tables according to distributed_product_mode setting. + InJoinSubqueriesPreprocessor(context).visit(query); /// Optimizes logical expressions. LogicalExpressionsOptimizer(select_query, settings.optimize_min_equality_disjunction_chain_length.value).perform(); diff --git a/dbms/src/Interpreters/convertFieldToType.cpp b/dbms/src/Interpreters/convertFieldToType.cpp index 378cd7db6b8..0690f24159a 100644 --- a/dbms/src/Interpreters/convertFieldToType.cpp +++ b/dbms/src/Interpreters/convertFieldToType.cpp @@ -51,16 +51,10 @@ namespace template static Field convertNumericTypeImpl(const Field & from) { - From value = from.get(); - - /// Note that NaNs doesn't compare equal to anything, but they are still in range of any Float type. - if (isNaN(value) && std::is_floating_point_v) - return value; - - if (!accurate::equalsOp(value, To(value))) + To result; + if (!accurate::convertNumeric(from.get(), result)) return {}; - - return To(value); + return result; } template diff --git a/dbms/src/Interpreters/tests/in_join_subqueries_preprocessor.cpp b/dbms/src/Interpreters/tests/in_join_subqueries_preprocessor.cpp index 74c370adbcc..ecb21c58831 100644 --- a/dbms/src/Interpreters/tests/in_join_subqueries_preprocessor.cpp +++ b/dbms/src/Interpreters/tests/in_join_subqueries_preprocessor.cpp @@ -52,11 +52,9 @@ private: }; -class InJoinSubqueriesPreprocessorMock : public DB::InJoinSubqueriesPreprocessor +class CheckShardsAndTablesMock : public DB::InJoinSubqueriesPreprocessor::CheckShardsAndTables { public: - using DB::InJoinSubqueriesPreprocessor::InJoinSubqueriesPreprocessor; - bool hasAtLeastTwoShards(const DB::IStorage & table) const override { if (!table.isRemote()) @@ -1181,13 +1179,11 @@ TestResult check(const TestEntry & entry) if (!parse(ast_input, entry.input)) return TestResult(false, "parse error"); - auto select_query = typeid_cast(&*ast_input); - bool success = true; try { - InJoinSubqueriesPreprocessorMock(context).process(select_query); + DB::InJoinSubqueriesPreprocessor(context, std::make_unique()).visit(ast_input); } catch (const DB::Exception & ex) { diff --git a/dbms/src/Parsers/ASTAlterQuery.cpp b/dbms/src/Parsers/ASTAlterQuery.cpp index 12491c83762..e614f64d208 100644 --- a/dbms/src/Parsers/ASTAlterQuery.cpp +++ b/dbms/src/Parsers/ASTAlterQuery.cpp @@ -40,6 +40,11 @@ ASTPtr ASTAlterCommand::clone() const res->predicate = predicate->clone(); res->children.push_back(res->predicate); } + if (ttl) + { + res->ttl = ttl->clone(); + res->children.push_back(res->ttl); + } return res; } @@ -174,6 +179,11 @@ void ASTAlterCommand::formatImpl( settings.ostr << " " << (settings.hilite ? hilite_none : ""); comment->formatImpl(settings, state, frame); } + else if (type == ASTAlterCommand::MODIFY_TTL) + { + settings.ostr << (settings.hilite ? hilite_keyword : "") << indent_str << "MODIFY TTL " << (settings.hilite ? hilite_none : ""); + ttl->formatImpl(settings, state, frame); + } else throw Exception("Unexpected type of ALTER", ErrorCodes::UNEXPECTED_AST_STRUCTURE); } diff --git a/dbms/src/Parsers/ASTAlterQuery.h b/dbms/src/Parsers/ASTAlterQuery.h index 7261170288a..2c4b3ddbaf1 100644 --- a/dbms/src/Parsers/ASTAlterQuery.h +++ b/dbms/src/Parsers/ASTAlterQuery.h @@ -27,6 +27,7 @@ public: MODIFY_COLUMN, COMMENT_COLUMN, MODIFY_ORDER_BY, + MODIFY_TTL, ADD_INDEX, DROP_INDEX, @@ -84,6 +85,9 @@ public: /// A column comment ASTPtr comment; + /// For MODIFY TTL query + ASTPtr ttl; + bool detach = false; /// true for DETACH PARTITION bool part = false; /// true for ATTACH PART diff --git a/dbms/src/Parsers/ASTColumnDeclaration.cpp b/dbms/src/Parsers/ASTColumnDeclaration.cpp index b43271868d1..892be19c6b5 100644 --- a/dbms/src/Parsers/ASTColumnDeclaration.cpp +++ b/dbms/src/Parsers/ASTColumnDeclaration.cpp @@ -33,6 +33,12 @@ ASTPtr ASTColumnDeclaration::clone() const res->children.push_back(res->comment); } + if (ttl) + { + res->ttl = ttl->clone(); + res->children.push_back(res->ttl); + } + return res; } @@ -69,6 +75,12 @@ void ASTColumnDeclaration::formatImpl(const FormatSettings & settings, FormatSta settings.ostr << ' '; codec->formatImpl(settings, state, frame); } + + if (ttl) + { + settings.ostr << ' ' << (settings.hilite ? hilite_keyword : "") << "TTL" << (settings.hilite ? hilite_none : "") << ' '; + ttl->formatImpl(settings, state, frame); + } } } diff --git a/dbms/src/Parsers/ASTColumnDeclaration.h b/dbms/src/Parsers/ASTColumnDeclaration.h index ed3c2031d97..311ceb4efbc 100644 --- a/dbms/src/Parsers/ASTColumnDeclaration.h +++ b/dbms/src/Parsers/ASTColumnDeclaration.h @@ -17,6 +17,7 @@ public: ASTPtr default_expression; ASTPtr codec; ASTPtr comment; + ASTPtr ttl; String getID(char delim) const override { return "ColumnDeclaration" + (delim + name); } diff --git a/dbms/src/Parsers/ASTCreateQuery.cpp b/dbms/src/Parsers/ASTCreateQuery.cpp index a6da66f828e..e99c543f5ec 100644 --- a/dbms/src/Parsers/ASTCreateQuery.cpp +++ b/dbms/src/Parsers/ASTCreateQuery.cpp @@ -23,6 +23,8 @@ ASTPtr ASTStorage::clone() const res->set(res->order_by, order_by->clone()); if (sample_by) res->set(res->sample_by, sample_by->clone()); + if (ttl_table) + res->set(res->ttl_table, ttl_table->clone()); if (settings) res->set(res->settings, settings->clone()); @@ -57,6 +59,11 @@ void ASTStorage::formatImpl(const FormatSettings & s, FormatState & state, Forma s.ostr << (s.hilite ? hilite_keyword : "") << s.nl_or_ws << "SAMPLE BY " << (s.hilite ? hilite_none : ""); sample_by->formatImpl(s, state, frame); } + if (ttl_table) + { + s.ostr << (s.hilite ? hilite_keyword : "") << s.nl_or_ws << "TTL " << (s.hilite ? hilite_none : ""); + ttl_table->formatImpl(s, state, frame); + } if (settings) { s.ostr << (s.hilite ? hilite_keyword : "") << s.nl_or_ws << "SETTINGS " << (s.hilite ? hilite_none : ""); diff --git a/dbms/src/Parsers/ASTCreateQuery.h b/dbms/src/Parsers/ASTCreateQuery.h index 3d741a72b7d..2755e1a3d78 100644 --- a/dbms/src/Parsers/ASTCreateQuery.h +++ b/dbms/src/Parsers/ASTCreateQuery.h @@ -18,6 +18,7 @@ public: IAST * primary_key = nullptr; IAST * order_by = nullptr; IAST * sample_by = nullptr; + IAST * ttl_table = nullptr; ASTSetQuery * settings = nullptr; String getID(char) const override { return "Storage definition"; } diff --git a/dbms/src/Parsers/ParserAlterQuery.cpp b/dbms/src/Parsers/ParserAlterQuery.cpp index b33679ad26b..98891bbdf5f 100644 --- a/dbms/src/Parsers/ParserAlterQuery.cpp +++ b/dbms/src/Parsers/ParserAlterQuery.cpp @@ -27,6 +27,7 @@ bool ParserAlterCommand::parseImpl(Pos & pos, ASTPtr & node, Expected & expected ParserKeyword s_modify_column("MODIFY COLUMN"); ParserKeyword s_comment_column("COMMENT COLUMN"); ParserKeyword s_modify_order_by("MODIFY ORDER BY"); + ParserKeyword s_modify_ttl("MODIFY TTL"); ParserKeyword s_add_index("ADD INDEX"); ParserKeyword s_drop_index("DROP INDEX"); @@ -282,6 +283,12 @@ bool ParserAlterCommand::parseImpl(Pos & pos, ASTPtr & node, Expected & expected command->type = ASTAlterCommand::COMMENT_COLUMN; } + else if (s_modify_ttl.ignore(pos, expected)) + { + if (!parser_exp_elem.parse(pos, command->ttl, expected)) + return false; + command->type = ASTAlterCommand::MODIFY_TTL; + } else return false; @@ -299,6 +306,8 @@ bool ParserAlterCommand::parseImpl(Pos & pos, ASTPtr & node, Expected & expected command->children.push_back(command->update_assignments); if (command->comment) command->children.push_back(command->comment); + if (command->ttl) + command->children.push_back(command->ttl); return true; } diff --git a/dbms/src/Parsers/ParserCreateQuery.cpp b/dbms/src/Parsers/ParserCreateQuery.cpp index 1b976efa668..fd6665a5a2c 100644 --- a/dbms/src/Parsers/ParserCreateQuery.cpp +++ b/dbms/src/Parsers/ParserCreateQuery.cpp @@ -210,6 +210,7 @@ bool ParserStorage::parseImpl(Pos & pos, ASTPtr & node, Expected & expected) ParserKeyword s_primary_key("PRIMARY KEY"); ParserKeyword s_order_by("ORDER BY"); ParserKeyword s_sample_by("SAMPLE BY"); + ParserKeyword s_ttl("TTL"); ParserKeyword s_settings("SETTINGS"); ParserIdentifierWithOptionalParameters ident_with_optional_params_p; @@ -221,6 +222,7 @@ bool ParserStorage::parseImpl(Pos & pos, ASTPtr & node, Expected & expected) ASTPtr primary_key; ASTPtr order_by; ASTPtr sample_by; + ASTPtr ttl_table; ASTPtr settings; if (!s_engine.ignore(pos, expected)) @@ -265,6 +267,14 @@ bool ParserStorage::parseImpl(Pos & pos, ASTPtr & node, Expected & expected) return false; } + if (!ttl_table && s_ttl.ignore(pos, expected)) + { + if (expression_p.parse(pos, ttl_table, expected)) + continue; + else + return false; + } + if (s_settings.ignore(pos, expected)) { if (!settings_p.parse(pos, settings, expected)) @@ -280,6 +290,7 @@ bool ParserStorage::parseImpl(Pos & pos, ASTPtr & node, Expected & expected) storage->set(storage->primary_key, primary_key); storage->set(storage->order_by, order_by); storage->set(storage->sample_by, sample_by); + storage->set(storage->ttl_table, ttl_table); storage->set(storage->settings, settings); diff --git a/dbms/src/Parsers/ParserCreateQuery.h b/dbms/src/Parsers/ParserCreateQuery.h index 140a153e990..bd3c8f671f0 100644 --- a/dbms/src/Parsers/ParserCreateQuery.h +++ b/dbms/src/Parsers/ParserCreateQuery.h @@ -123,9 +123,11 @@ bool IParserColumnDeclaration::parseImpl(Pos & pos, ASTPtr & node, E ParserKeyword s_alias{"ALIAS"}; ParserKeyword s_comment{"COMMENT"}; ParserKeyword s_codec{"CODEC"}; + ParserKeyword s_ttl{"TTL"}; ParserTernaryOperatorExpression expr_parser; ParserStringLiteral string_literal_parser; ParserCodec codec_parser; + ParserExpression expression_parser; /// mandatory column name ASTPtr name; @@ -140,6 +142,7 @@ bool IParserColumnDeclaration::parseImpl(Pos & pos, ASTPtr & node, E ASTPtr default_expression; ASTPtr comment_expression; ASTPtr codec_expression; + ASTPtr ttl_expression; if (!s_default.check_without_moving(pos, expected) && !s_materialized.check_without_moving(pos, expected) && @@ -178,6 +181,12 @@ bool IParserColumnDeclaration::parseImpl(Pos & pos, ASTPtr & node, E return false; } + if (s_ttl.ignore(pos, expected)) + { + if (!expression_parser.parse(pos, ttl_expression, expected)) + return false; + } + const auto column_declaration = std::make_shared(); node = column_declaration; getIdentifierName(name, column_declaration->name); @@ -207,6 +216,12 @@ bool IParserColumnDeclaration::parseImpl(Pos & pos, ASTPtr & node, E column_declaration->children.push_back(std::move(codec_expression)); } + if (ttl_expression) + { + column_declaration->ttl = ttl_expression; + column_declaration->children.push_back(std::move(ttl_expression)); + } + return true; } diff --git a/dbms/src/Storages/AlterCommands.cpp b/dbms/src/Storages/AlterCommands.cpp index cc06624b995..ba66a0c27e9 100644 --- a/dbms/src/Storages/AlterCommands.cpp +++ b/dbms/src/Storages/AlterCommands.cpp @@ -17,6 +17,8 @@ #include #include +#include + namespace DB { @@ -64,6 +66,9 @@ std::optional AlterCommand::parse(const ASTAlterCommand * command_ if (command_ast->column) command.after_column = *getIdentifierName(command_ast->column); + if (ast_col_decl.ttl) + command.ttl = ast_col_decl.ttl; + command.if_not_exists = command_ast->if_not_exists; return command; @@ -104,6 +109,9 @@ std::optional AlterCommand::parse(const ASTAlterCommand * command_ command.comment = ast_comment.value.get(); } + if (ast_col_decl.ttl) + command.ttl = ast_col_decl.ttl; + if (ast_col_decl.codec) command.codec = compression_codec_factory.get(ast_col_decl.codec, command.data_type); @@ -157,13 +165,20 @@ std::optional AlterCommand::parse(const ASTAlterCommand * command_ return command; } + else if (command_ast->type == ASTAlterCommand::MODIFY_TTL) + { + AlterCommand command; + command.type = AlterCommand::MODIFY_TTL; + command.ttl = command_ast->ttl; + return command; + } else return {}; } void AlterCommand::apply(ColumnsDescription & columns_description, IndicesDescription & indices_description, - ASTPtr & order_by_ast, ASTPtr & primary_key_ast) const + ASTPtr & order_by_ast, ASTPtr & primary_key_ast, ASTPtr & ttl_table_ast) const { if (type == ADD_COLUMN) { @@ -175,6 +190,7 @@ void AlterCommand::apply(ColumnsDescription & columns_description, IndicesDescri } column.comment = comment; column.codec = codec; + column.ttl = ttl; columns_description.add(column, after_column); @@ -204,6 +220,9 @@ void AlterCommand::apply(ColumnsDescription & columns_description, IndicesDescri return; } + if (ttl) + column.ttl = ttl; + column.type = data_type; column.default_desc.kind = default_kind; @@ -278,6 +297,10 @@ void AlterCommand::apply(ColumnsDescription & columns_description, IndicesDescri indices_description.indices.erase(erase_it); } + else if (type == MODIFY_TTL) + { + ttl_table_ast = ttl; + } else throw Exception("Wrong parameter type in ALTER query", ErrorCodes::LOGICAL_ERROR); } @@ -293,20 +316,22 @@ bool AlterCommand::is_mutable() const } void AlterCommands::apply(ColumnsDescription & columns_description, IndicesDescription & indices_description, - ASTPtr & order_by_ast, ASTPtr & primary_key_ast) const + ASTPtr & order_by_ast, ASTPtr & primary_key_ast, ASTPtr & ttl_table_ast) const { auto new_columns_description = columns_description; auto new_indices_description = indices_description; auto new_order_by_ast = order_by_ast; auto new_primary_key_ast = primary_key_ast; + auto new_ttl_table_ast = ttl_table_ast; for (const AlterCommand & command : *this) if (!command.ignore) - command.apply(new_columns_description, new_indices_description, new_order_by_ast, new_primary_key_ast); + command.apply(new_columns_description, new_indices_description, new_order_by_ast, new_primary_key_ast, new_ttl_table_ast); columns_description = std::move(new_columns_description); indices_description = std::move(new_indices_description); order_by_ast = std::move(new_order_by_ast); primary_key_ast = std::move(new_primary_key_ast); + ttl_table_ast = std::move(new_ttl_table_ast); } void AlterCommands::validate(const IStorage & table, const Context & context) @@ -493,7 +518,8 @@ void AlterCommands::apply(ColumnsDescription & columns_description) const IndicesDescription indices_description; ASTPtr out_order_by; ASTPtr out_primary_key; - apply(out_columns_description, indices_description, out_order_by, out_primary_key); + ASTPtr out_ttl_table; + apply(out_columns_description, indices_description, out_order_by, out_primary_key, out_ttl_table); if (out_order_by) throw Exception("Storage doesn't support modifying ORDER BY expression", ErrorCodes::NOT_IMPLEMENTED); @@ -501,6 +527,8 @@ void AlterCommands::apply(ColumnsDescription & columns_description) const throw Exception("Storage doesn't support modifying PRIMARY KEY expression", ErrorCodes::NOT_IMPLEMENTED); if (!indices_description.indices.empty()) throw Exception("Storage doesn't support modifying indices", ErrorCodes::NOT_IMPLEMENTED); + if (out_ttl_table) + throw Exception("Storage doesn't support modifying TTL expression", ErrorCodes::NOT_IMPLEMENTED); columns_description = std::move(out_columns_description); } diff --git a/dbms/src/Storages/AlterCommands.h b/dbms/src/Storages/AlterCommands.h index 9fbb9d13ad7..e1600a9b9a6 100644 --- a/dbms/src/Storages/AlterCommands.h +++ b/dbms/src/Storages/AlterCommands.h @@ -24,6 +24,7 @@ struct AlterCommand MODIFY_ORDER_BY, ADD_INDEX, DROP_INDEX, + MODIFY_TTL, UKNOWN_TYPE, }; @@ -60,6 +61,9 @@ struct AlterCommand /// For ADD/DROP INDEX String index_name; + /// For MODIFY TTL + ASTPtr ttl; + /// indicates that this command should not be applied, for example in case of if_exists=true and column doesn't exist. bool ignore = false; @@ -79,7 +83,7 @@ struct AlterCommand static std::optional parse(const ASTAlterCommand * command); void apply(ColumnsDescription & columns_description, IndicesDescription & indices_description, - ASTPtr & order_by_ast, ASTPtr & primary_key_ast) const; + ASTPtr & order_by_ast, ASTPtr & primary_key_ast, ASTPtr & ttl_table_ast) const; /// Checks that not only metadata touched by that command bool is_mutable() const; }; @@ -91,7 +95,7 @@ class AlterCommands : public std::vector { public: void apply(ColumnsDescription & columns_description, IndicesDescription & indices_description, ASTPtr & order_by_ast, - ASTPtr & primary_key_ast) const; + ASTPtr & primary_key_ast, ASTPtr & ttl_table_ast) const; /// For storages that don't support MODIFY_ORDER_BY. void apply(ColumnsDescription & columns_description) const; diff --git a/dbms/src/Storages/ColumnsDescription.cpp b/dbms/src/Storages/ColumnsDescription.cpp index 96630616900..89cf986f165 100644 --- a/dbms/src/Storages/ColumnsDescription.cpp +++ b/dbms/src/Storages/ColumnsDescription.cpp @@ -37,12 +37,14 @@ namespace ErrorCodes bool ColumnDescription::operator==(const ColumnDescription & other) const { auto codec_str = [](const CompressionCodecPtr & codec_ptr) { return codec_ptr ? codec_ptr->getCodecDesc() : String(); }; + auto ttl_str = [](const ASTPtr & ttl_ast) { return ttl_ast ? queryToString(ttl_ast) : String{}; }; return name == other.name && type->equals(*other.type) && default_desc == other.default_desc && comment == other.comment - && codec_str(codec) == codec_str(other.codec); + && codec_str(codec) == codec_str(other.codec) + && ttl_str(ttl) == ttl_str(other.ttl); } void ColumnDescription::writeText(WriteBuffer & buf) const @@ -74,6 +76,13 @@ void ColumnDescription::writeText(WriteBuffer & buf) const DB::writeText(")", buf); } + if (ttl) + { + writeChar('\t', buf); + DB::writeText("TTL ", buf); + DB::writeText(queryToString(ttl), buf); + } + writeChar('\n', buf); } @@ -99,6 +108,9 @@ void ColumnDescription::readText(ReadBuffer & buf) if (col_ast->codec) codec = CompressionCodecFactory::instance().get(col_ast->codec, type); + + if (col_ast->ttl) + ttl = col_ast->ttl; } else throw Exception("Cannot parse column description", ErrorCodes::CANNOT_PARSE_TEXT); @@ -388,6 +400,18 @@ CompressionCodecPtr ColumnsDescription::getCodecOrDefault(const String & column_ return getCodecOrDefault(column_name, CompressionCodecFactory::instance().getDefaultCodec()); } +ColumnsDescription::ColumnTTLs ColumnsDescription::getColumnTTLs() const +{ + ColumnTTLs ret; + for (const auto & column : columns) + { + if (column.ttl) + ret.emplace(column.name, column.ttl); + } + + return ret; +} + String ColumnsDescription::toString() const { diff --git a/dbms/src/Storages/ColumnsDescription.h b/dbms/src/Storages/ColumnsDescription.h index 8d400c8d1de..0ff98473c99 100644 --- a/dbms/src/Storages/ColumnsDescription.h +++ b/dbms/src/Storages/ColumnsDescription.h @@ -18,6 +18,7 @@ struct ColumnDescription ColumnDefault default_desc; String comment; CompressionCodecPtr codec; + ASTPtr ttl; ColumnDescription() = default; ColumnDescription(String name_, DataTypePtr type_) : name(std::move(name_)), type(std::move(type_)) {} @@ -58,6 +59,9 @@ public: /// ordinary + materialized + aliases. NamesAndTypesList getAll() const; + using ColumnTTLs = std::unordered_map; + ColumnTTLs getColumnTTLs() const; + bool has(const String & column_name) const; bool hasNested(const String & column_name) const; ColumnDescription & get(const String & column_name); diff --git a/dbms/src/Storages/MergeTree/MergeList.cpp b/dbms/src/Storages/MergeTree/MergeList.cpp index 9490a4f1068..7d4d7f92496 100644 --- a/dbms/src/Storages/MergeTree/MergeList.cpp +++ b/dbms/src/Storages/MergeTree/MergeList.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include @@ -19,7 +19,7 @@ MergeListElement::MergeListElement(const std::string & database, const std::stri , result_part_name{future_part.name} , result_data_version{future_part.part_info.getDataVersion()} , num_parts{future_part.parts.size()} - , thread_number{Poco::ThreadNumber::get()} + , thread_number{getThreadNumber()} { for (const auto & source_part : future_part.parts) { @@ -28,7 +28,8 @@ MergeListElement::MergeListElement(const std::string & database, const std::stri std::shared_lock part_lock(source_part->columns_lock); total_size_bytes_compressed += source_part->bytes_on_disk; - total_size_marks += source_part->marks_count; + total_size_marks += source_part->getMarksCount(); + total_rows_count += source_part->index_granularity.getTotalRows(); } if (!future_part.parts.empty()) @@ -60,6 +61,7 @@ MergeInfo MergeListElement::getInfo() const res.num_parts = num_parts; res.total_size_bytes_compressed = total_size_bytes_compressed; res.total_size_marks = total_size_marks; + res.total_rows_count = total_rows_count; res.bytes_read_uncompressed = bytes_read_uncompressed.load(std::memory_order_relaxed); res.bytes_written_uncompressed = bytes_written_uncompressed.load(std::memory_order_relaxed); res.rows_read = rows_read.load(std::memory_order_relaxed); diff --git a/dbms/src/Storages/MergeTree/MergeList.h b/dbms/src/Storages/MergeTree/MergeList.h index 2d800c85896..dc2d1c80682 100644 --- a/dbms/src/Storages/MergeTree/MergeList.h +++ b/dbms/src/Storages/MergeTree/MergeList.h @@ -36,6 +36,7 @@ struct MergeInfo UInt64 num_parts; UInt64 total_size_bytes_compressed; UInt64 total_size_marks; + UInt64 total_rows_count; UInt64 bytes_read_uncompressed; UInt64 bytes_written_uncompressed; UInt64 rows_read; @@ -67,6 +68,7 @@ struct MergeListElement : boost::noncopyable UInt64 total_size_bytes_compressed{}; UInt64 total_size_marks{}; + UInt64 total_rows_count{}; std::atomic bytes_read_uncompressed{}; std::atomic bytes_written_uncompressed{}; diff --git a/dbms/src/Storages/MergeTree/MergeSelector.h b/dbms/src/Storages/MergeTree/MergeSelector.h index 1684e6aae8e..b01ef1d1d43 100644 --- a/dbms/src/Storages/MergeTree/MergeSelector.h +++ b/dbms/src/Storages/MergeTree/MergeSelector.h @@ -39,6 +39,9 @@ public: /// Opaque pointer to avoid dependencies (it is not possible to do forward declaration of typedef). const void * data; + + /// Minimal time, when we need to delete some data from this part + time_t min_ttl; }; /// Parts are belong to partitions. Only parts within same partition could be merged. diff --git a/dbms/src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.cpp b/dbms/src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.cpp index 9dce4edb239..82518b077c5 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -40,8 +41,7 @@ MergeTreeBaseSelectBlockInputStream::MergeTreeBaseSelectBlockInputStream( max_read_buffer_size(max_read_buffer_size), use_uncompressed_cache(use_uncompressed_cache), save_marks_in_cache(save_marks_in_cache), - virt_column_names(virt_column_names), - max_block_size_marks(max_block_size_rows / storage.index_granularity) + virt_column_names(virt_column_names) { } @@ -76,7 +76,7 @@ Block MergeTreeBaseSelectBlockInputStream::readFromPart() const auto current_max_block_size_rows = max_block_size_rows; const auto current_preferred_block_size_bytes = preferred_block_size_bytes; const auto current_preferred_max_column_in_block_size_bytes = preferred_max_column_in_block_size_bytes; - const auto index_granularity = storage.index_granularity; + const auto & index_granularity = task->data_part->index_granularity; const double min_filtration_ratio = 0.00001; auto estimateNumRows = [current_preferred_block_size_bytes, current_max_block_size_rows, @@ -87,11 +87,12 @@ Block MergeTreeBaseSelectBlockInputStream::readFromPart() return current_max_block_size_rows; /// Calculates number of rows will be read using preferred_block_size_bytes. - /// Can't be less than index_granularity. + /// Can't be less than avg_index_granularity. UInt64 rows_to_read = current_task.size_predictor->estimateNumRows(current_preferred_block_size_bytes); if (!rows_to_read) return rows_to_read; - rows_to_read = std::max(index_granularity, rows_to_read); + UInt64 total_row_in_current_granule = current_reader.numRowsInCurrentGranule(); + rows_to_read = std::max(total_row_in_current_granule, rows_to_read); if (current_preferred_max_column_in_block_size_bytes) { @@ -102,7 +103,7 @@ Block MergeTreeBaseSelectBlockInputStream::readFromPart() auto rows_to_read_for_max_size_column_with_filtration = static_cast(rows_to_read_for_max_size_column / filtration_ratio); - /// If preferred_max_column_in_block_size_bytes is used, number of rows to read can be less than index_granularity. + /// If preferred_max_column_in_block_size_bytes is used, number of rows to read can be less than current_index_granularity. rows_to_read = std::min(rows_to_read, rows_to_read_for_max_size_column_with_filtration); } @@ -110,8 +111,7 @@ Block MergeTreeBaseSelectBlockInputStream::readFromPart() if (unread_rows_in_current_granule >= rows_to_read) return rows_to_read; - UInt64 granule_to_read = (rows_to_read + current_reader.numReadRowsInCurrentGranule() + index_granularity / 2) / index_granularity; - return index_granularity * granule_to_read - current_reader.numReadRowsInCurrentGranule(); + return index_granularity.countMarksForRows(current_reader.currentMark(), rows_to_read, current_reader.numReadRowsInCurrentGranule()); }; if (!task->range_reader.isInitialized()) @@ -121,28 +121,33 @@ Block MergeTreeBaseSelectBlockInputStream::readFromPart() if (reader->getColumns().empty()) { task->range_reader = MergeTreeRangeReader( - pre_reader.get(), index_granularity, nullptr, + pre_reader.get(), nullptr, prewhere_info->alias_actions, prewhere_info->prewhere_actions, &prewhere_info->prewhere_column_name, &task->ordered_names, task->should_reorder, task->remove_prewhere_column, true); } else { - task->pre_range_reader = MergeTreeRangeReader( - pre_reader.get(), index_granularity, nullptr, - prewhere_info->alias_actions, prewhere_info->prewhere_actions, - &prewhere_info->prewhere_column_name, &task->ordered_names, - task->should_reorder, task->remove_prewhere_column, false); + MergeTreeRangeReader * pre_reader_ptr = nullptr; + if (pre_reader != nullptr) + { + task->pre_range_reader = MergeTreeRangeReader( + pre_reader.get(), nullptr, + prewhere_info->alias_actions, prewhere_info->prewhere_actions, + &prewhere_info->prewhere_column_name, &task->ordered_names, + task->should_reorder, task->remove_prewhere_column, false); + pre_reader_ptr = &task->pre_range_reader; + } task->range_reader = MergeTreeRangeReader( - reader.get(), index_granularity, &task->pre_range_reader, nullptr, nullptr, + reader.get(), pre_reader_ptr, nullptr, nullptr, nullptr, &task->ordered_names, true, false, true); } } else { task->range_reader = MergeTreeRangeReader( - reader.get(), index_granularity, nullptr, nullptr, nullptr, + reader.get(), nullptr, nullptr, nullptr, nullptr, &task->ordered_names, task->should_reorder, false, true); } } diff --git a/dbms/src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.h b/dbms/src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.h index 5580bf1e6d9..5f72fb132af 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.h +++ b/dbms/src/Storages/MergeTree/MergeTreeBaseSelectBlockInputStream.h @@ -71,8 +71,6 @@ protected: using MergeTreeReaderPtr = std::unique_ptr; MergeTreeReaderPtr reader; MergeTreeReaderPtr pre_reader; - - UInt64 max_block_size_marks; }; } diff --git a/dbms/src/Storages/MergeTree/MergeTreeData.cpp b/dbms/src/Storages/MergeTree/MergeTreeData.cpp index a33fa8f5f5e..453f680c6ba 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeData.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeData.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -84,6 +85,7 @@ namespace ErrorCodes extern const int CANNOT_ALLOCATE_MEMORY; extern const int CANNOT_MUNMAP; extern const int CANNOT_MREMAP; + extern const int BAD_TTL_EXPRESSION; } @@ -97,17 +99,19 @@ MergeTreeData::MergeTreeData( const ASTPtr & order_by_ast_, const ASTPtr & primary_key_ast_, const ASTPtr & sample_by_ast_, + const ASTPtr & ttl_table_ast_, const MergingParams & merging_params_, const MergeTreeSettings & settings_, bool require_part_metadata_, bool attach, BrokenPartCallback broken_part_callback_) : global_context(context_), + index_granularity_info(settings_), merging_params(merging_params_), - index_granularity(settings_.index_granularity), settings(settings_), partition_by_ast(partition_by_ast_), sample_by_ast(sample_by_ast_), + ttl_table_ast(ttl_table_ast_), require_part_metadata(require_part_metadata_), database_name(database_), table_name(table_), full_path(full_path_), @@ -133,7 +137,6 @@ MergeTreeData::MergeTreeData( columns_required_for_sampling = ExpressionAnalyzer(sample_by_ast, syntax, global_context) .getRequiredSourceColumns(); } - MergeTreeDataFormatVersion min_format_version(0); if (!date_column_name.empty()) { @@ -159,6 +162,8 @@ MergeTreeData::MergeTreeData( min_format_version = MERGE_TREE_DATA_MIN_FORMAT_VERSION_WITH_CUSTOM_PARTITIONING; } + setTTLExpressions(columns_.getColumnTTLs(), ttl_table_ast_); + auto path_exists = Poco::File(full_path).exists(); /// Creating directories, if not exist. Poco::File(full_path).createDirectories(); @@ -187,9 +192,33 @@ MergeTreeData::MergeTreeData( format_version = 0; if (format_version < min_format_version) - throw Exception( - "MergeTree data format version on disk doesn't support custom partitioning", - ErrorCodes::METADATA_MISMATCH); + { + if (min_format_version == MERGE_TREE_DATA_MIN_FORMAT_VERSION_WITH_CUSTOM_PARTITIONING.toUnderType()) + throw Exception( + "MergeTree data format version on disk doesn't support custom partitioning", + ErrorCodes::METADATA_MISMATCH); + } + +} + + +MergeTreeData::IndexGranularityInfo::IndexGranularityInfo(const MergeTreeSettings & settings) + : fixed_index_granularity(settings.index_granularity) + , index_granularity_bytes(settings.index_granularity_bytes) +{ + /// Granularity is fixed + if (index_granularity_bytes == 0) + { + is_adaptive = false; + mark_size_in_bytes = sizeof(UInt64) * 2; + marks_file_extension = ".mrk"; + } + else + { + is_adaptive = true; + mark_size_in_bytes = sizeof(UInt64) * 3; + marks_file_extension = ".mrk2"; + } } @@ -490,6 +519,98 @@ void MergeTreeData::initPartitionKey() } } +namespace +{ + +void checkTTLExpression(const ExpressionActionsPtr & ttl_expression, const String & result_column_name) +{ + for (const auto & action : ttl_expression->getActions()) + { + if (action.type == ExpressionAction::APPLY_FUNCTION) + { + IFunctionBase & func = *action.function_base; + if (!func.isDeterministic()) + throw Exception("TTL expression cannot contain non-deterministic functions, " + "but contains function " + func.getName(), ErrorCodes::BAD_ARGUMENTS); + } + } + + bool has_date_column = false; + for (const auto & elem : ttl_expression->getRequiredColumnsWithTypes()) + { + if (typeid_cast(elem.type.get()) || typeid_cast(elem.type.get())) + { + has_date_column = true; + break; + } + } + + if (!has_date_column) + throw Exception("TTL expression should use at least one Date or DateTime column", ErrorCodes::BAD_TTL_EXPRESSION); + + const auto & result_column = ttl_expression->getSampleBlock().getByName(result_column_name); + + if (!typeid_cast(result_column.type.get()) + && !typeid_cast(result_column.type.get())) + { + throw Exception("TTL expression result column should have DateTime or Date type, but has " + + result_column.type->getName(), ErrorCodes::BAD_TTL_EXPRESSION); + } +} + +} + + +void MergeTreeData::setTTLExpressions(const ColumnsDescription::ColumnTTLs & new_column_ttls, + const ASTPtr & new_ttl_table_ast, bool only_check) +{ + auto create_ttl_entry = [this](ASTPtr ttl_ast) -> TTLEntry + { + auto syntax_result = SyntaxAnalyzer(global_context).analyze(ttl_ast, getColumns().getAllPhysical()); + auto expr = ExpressionAnalyzer(ttl_ast, syntax_result, global_context).getActions(false); + + String result_column = ttl_ast->getColumnName(); + checkTTLExpression(expr, result_column); + + return {expr, result_column}; + }; + + if (!new_column_ttls.empty()) + { + NameSet columns_ttl_forbidden; + + if (partition_key_expr) + for (const auto & col : partition_key_expr->getRequiredColumns()) + columns_ttl_forbidden.insert(col); + + if (sorting_key_expr) + for (const auto & col : sorting_key_expr->getRequiredColumns()) + columns_ttl_forbidden.insert(col); + + for (const auto & [name, ast] : new_column_ttls) + { + if (columns_ttl_forbidden.count(name)) + throw Exception("Trying to set ttl for key column " + name, ErrorCodes::ILLEGAL_COLUMN); + else + { + auto new_ttl_entry = create_ttl_entry(ast); + if (!only_check) + ttl_entries_by_name.emplace(name, new_ttl_entry); + } + } + } + + if (new_ttl_table_ast) + { + auto new_ttl_table_entry = create_ttl_entry(new_ttl_table_ast); + if (!only_check) + { + ttl_table_ast = new_ttl_table_ast; + ttl_table_entry = new_ttl_table_entry; + } + } +} + void MergeTreeData::MergingParams::check(const NamesAndTypesList & columns) const { @@ -1059,7 +1180,8 @@ void MergeTreeData::checkAlter(const AlterCommands & commands, const Context & c auto new_indices = getIndicesDescription(); ASTPtr new_order_by_ast = order_by_ast; ASTPtr new_primary_key_ast = primary_key_ast; - commands.apply(new_columns, new_indices, new_order_by_ast, new_primary_key_ast); + ASTPtr new_ttl_table_ast = ttl_table_ast; + commands.apply(new_columns, new_indices, new_order_by_ast, new_primary_key_ast, new_ttl_table_ast); if (getIndicesDescription().empty() && !new_indices.empty() && !context.getSettingsRef().allow_experimental_data_skipping_indices) @@ -1145,11 +1267,12 @@ void MergeTreeData::checkAlter(const AlterCommands & commands, const Context & c setPrimaryKeyIndicesAndColumns(new_order_by_ast, new_primary_key_ast, new_columns, new_indices, /* only_check = */ true); + setTTLExpressions(new_columns.getColumnTTLs(), new_ttl_table_ast, /* only_check = */ true); + /// Check that type conversions are possible. ExpressionActionsPtr unused_expression; NameToNameMap unused_map; bool unused_bool; - createConvertExpression(nullptr, getColumns().getAllPhysical(), new_columns.getAllPhysical(), getIndicesDescription().indices, new_indices.indices, unused_expression, unused_map, unused_bool); } @@ -1181,7 +1304,7 @@ void MergeTreeData::createConvertExpression(const DataPartPtr & part, const Name if (!new_indices_set.count(index.name)) { out_rename_map["skp_idx_" + index.name + ".idx"] = ""; - out_rename_map["skp_idx_" + index.name + ".mrk"] = ""; + out_rename_map["skp_idx_" + index.name + index_granularity_info.marks_file_extension] = ""; } } @@ -1210,7 +1333,7 @@ void MergeTreeData::createConvertExpression(const DataPartPtr & part, const Name if (--stream_counts[file_name] == 0) { out_rename_map[file_name + ".bin"] = ""; - out_rename_map[file_name + ".mrk"] = ""; + out_rename_map[file_name + index_granularity_info.marks_file_extension] = ""; } }, {}); } @@ -1285,7 +1408,7 @@ void MergeTreeData::createConvertExpression(const DataPartPtr & part, const Name String temporary_file_name = IDataType::getFileNameForStream(temporary_column_name, substream_path); out_rename_map[temporary_file_name + ".bin"] = original_file_name + ".bin"; - out_rename_map[temporary_file_name + ".mrk"] = original_file_name + ".mrk"; + out_rename_map[temporary_file_name + index_granularity_info.marks_file_extension] = original_file_name + index_granularity_info.marks_file_extension; }, {}); } @@ -1404,7 +1527,14 @@ MergeTreeData::AlterDataPartTransactionPtr MergeTreeData::alterDataPart( */ IMergedBlockOutputStream::WrittenOffsetColumns unused_written_offsets; MergedColumnOnlyOutputStream out( - *this, in.getHeader(), full_path + part->name + '/', true /* sync */, compression_codec, true /* skip_offsets */, unused_written_offsets); + *this, + in.getHeader(), + full_path + part->name + '/', + true /* sync */, + compression_codec, + true /* skip_offsets */, + unused_written_offsets, + part->index_granularity); in.readPrefix(); out.writePrefix(); @@ -1446,6 +1576,32 @@ MergeTreeData::AlterDataPartTransactionPtr MergeTreeData::alterDataPart( return transaction; } +void MergeTreeData::removeEmptyColumnsFromPart(MergeTreeData::MutableDataPartPtr & data_part) +{ + auto & empty_columns = data_part->empty_columns; + if (empty_columns.empty()) + return; + + NamesAndTypesList new_columns; + for (const auto & [name, type] : data_part->columns) + if (!empty_columns.count(name)) + new_columns.emplace_back(name, type); + + std::stringstream log_message; + for (auto it = empty_columns.begin(); it != empty_columns.end(); ++it) + { + if (it != empty_columns.begin()) + log_message << ", "; + log_message << *it; + } + + LOG_INFO(log, "Removing empty columns: " << log_message.str() << " from part " << data_part->name); + + if (auto transaction = alterDataPart(data_part, new_columns, getIndicesDescription().indices, false)) + transaction->commit(); + empty_columns.clear(); +} + void MergeTreeData::freezeAll(const String & with_name, const Context & context) { freezePartitionsByMatcher([] (const DataPartPtr &){ return true; }, with_name, context); @@ -2150,8 +2306,7 @@ MergeTreeData::MutableDataPartPtr MergeTreeData::loadPartAndFixMetadata(const St /// Check the data while we are at it. if (part->checksums.empty()) { - part->checksums = checkDataPart(full_part_path, index_granularity, false, primary_key_data_types, skip_indices); - + part->checksums = checkDataPart(part, false, primary_key_data_types, skip_indices); { WriteBufferFromFile out(full_part_path + "checksums.txt.tmp", 4096); part->checksums.write(out); diff --git a/dbms/src/Storages/MergeTree/MergeTreeData.h b/dbms/src/Storages/MergeTree/MergeTreeData.h index 75b972e8c68..34ad47cbaba 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeData.h +++ b/dbms/src/Storages/MergeTree/MergeTreeData.h @@ -285,6 +285,32 @@ public: String getModeName() const; }; + /// Meta information about index granularity + struct IndexGranularityInfo + { + /// Marks file extension '.mrk' or '.mrk2' + String marks_file_extension; + + /// Size of one mark in file two or three size_t numbers + UInt8 mark_size_in_bytes; + + /// Is stride in rows between marks non fixed? + bool is_adaptive; + + /// Fixed size in rows of one granule if index_granularity_bytes is zero + size_t fixed_index_granularity; + + /// Approximate bytes size of one granule + size_t index_granularity_bytes; + + IndexGranularityInfo(const MergeTreeSettings & settings); + + String getMarksFilePath(const String & column_path) const + { + return column_path + marks_file_extension; + } + }; + /// Attach the table corresponding to the directory in full_path (must end with /), with the given columns. /// Correctness of names and paths is not checked. @@ -312,6 +338,7 @@ public: const ASTPtr & order_by_ast_, const ASTPtr & primary_key_ast_, const ASTPtr & sample_by_ast_, /// nullptr, if sampling is not supported. + const ASTPtr & ttl_table_ast_, const MergingParams & merging_params_, const MergeTreeSettings & settings_, bool require_part_metadata_, @@ -494,6 +521,9 @@ public: const IndicesASTs & new_indices, bool skip_sanity_checks); + /// Remove columns, that have been markedd as empty after zeroing values with expired ttl + void removeEmptyColumnsFromPart(MergeTreeData::MutableDataPartPtr & data_part); + /// Freezes all parts. void freezeAll(const String & with_name, const Context & context); @@ -514,6 +544,7 @@ public: bool hasSortingKey() const { return !sorting_key_columns.empty(); } bool hasPrimaryKey() const { return !primary_key_columns.empty(); } bool hasSkipIndices() const { return !skip_indices.empty(); } + bool hasTableTTL() const { return ttl_table_ast != nullptr; } ASTPtr getSortingKeyAST() const { return sorting_key_expr_ast; } ASTPtr getPrimaryKeyAST() const { return primary_key_expr_ast; } @@ -569,6 +600,7 @@ public: MergeTreeDataFormatVersion format_version; Context global_context; + IndexGranularityInfo index_granularity_info; /// Merging params - what additional actions to perform during merge. const MergingParams merging_params; @@ -601,10 +633,20 @@ public: Block primary_key_sample; DataTypes primary_key_data_types; + struct TTLEntry + { + ExpressionActionsPtr expression; + String result_column; + }; + + using TTLEntriesByName = std::unordered_map; + TTLEntriesByName ttl_entries_by_name; + + TTLEntry ttl_table_entry; + String sampling_expr_column_name; Names columns_required_for_sampling; - const size_t index_granularity; const MergeTreeSettings settings; /// Limiting parallel sends per one table, used in DataPartsExchange @@ -625,6 +667,7 @@ private: ASTPtr order_by_ast; ASTPtr primary_key_ast; ASTPtr sample_by_ast; + ASTPtr ttl_table_ast; bool require_part_metadata; @@ -735,6 +778,9 @@ private: void initPartitionKey(); + void setTTLExpressions(const ColumnsDescription::ColumnTTLs & new_column_ttls, + const ASTPtr & new_ttl_table_ast, bool only_check = false); + /// Expression for column type conversion. /// If no conversions are needed, out_expression=nullptr. /// out_rename_map maps column files for the out_expression onto new table files. diff --git a/dbms/src/Storages/MergeTree/MergeTreeDataMergerMutator.cpp b/dbms/src/Storages/MergeTree/MergeTreeDataMergerMutator.cpp index f5ee7fe1ee7..46ce2598ef3 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeDataMergerMutator.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeDataMergerMutator.cpp @@ -4,9 +4,11 @@ #include #include #include +#include #include #include #include +#include #include #include #include @@ -176,6 +178,7 @@ bool MergeTreeDataMergerMutator::selectPartsToMerge( const String * prev_partition_id = nullptr; const MergeTreeData::DataPartPtr * prev_part = nullptr; + bool has_part_with_expired_ttl = false; for (const MergeTreeData::DataPartPtr & part : data_parts) { const String & partition_id = part->info.partition_id; @@ -191,6 +194,10 @@ bool MergeTreeDataMergerMutator::selectPartsToMerge( part_info.age = current_time - part->modification_time; part_info.level = part->info.level; part_info.data = ∂ + part_info.min_ttl = part->ttl_infos.part_min_ttl; + + if (part_info.min_ttl && part_info.min_ttl <= current_time) + has_part_with_expired_ttl = true; partitions.back().emplace_back(part_info); @@ -210,8 +217,17 @@ bool MergeTreeDataMergerMutator::selectPartsToMerge( if (aggressive) merge_settings.base = 1; + bool can_merge_with_ttl = + (current_time - last_merge_with_ttl > data.settings.merge_with_ttl_timeout); + /// NOTE Could allow selection of different merge strategy. - merge_selector = std::make_unique(merge_settings); + if (can_merge_with_ttl && has_part_with_expired_ttl) + { + merge_selector = std::make_unique(current_time); + last_merge_with_ttl = current_time; + } + else + merge_selector = std::make_unique(merge_settings); IMergeSelector::PartsInPartition parts_to_merge = merge_selector->select( partitions, @@ -224,7 +240,8 @@ bool MergeTreeDataMergerMutator::selectPartsToMerge( return false; } - if (parts_to_merge.size() == 1) + /// Allow to "merge" part with itself if we need remove some values with expired ttl + if (parts_to_merge.size() == 1 && !has_part_with_expired_ttl) throw Exception("Logical error: merge selector returned only one part to merge", ErrorCodes::LOGICAL_ERROR); MergeTreeData::DataPartsVector parts; @@ -536,9 +553,18 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mergePartsToTempor new_data_part->relative_path = TMP_PREFIX + future_part.name; new_data_part->is_temp = true; - size_t sum_input_rows_upper_bound = merge_entry->total_size_marks * data.index_granularity; + size_t sum_input_rows_upper_bound = merge_entry->total_rows_count; - MergeAlgorithm merge_alg = chooseMergeAlgorithm(parts, sum_input_rows_upper_bound, gathering_columns, deduplicate); + bool need_remove_expired_values = false; + for (const MergeTreeData::DataPartPtr & part : parts) + new_data_part->ttl_infos.update(part->ttl_infos); + + const auto & part_min_ttl = new_data_part->ttl_infos.part_min_ttl; + if (part_min_ttl && part_min_ttl <= time_of_merge) + need_remove_expired_values = true; + + + MergeAlgorithm merge_alg = chooseMergeAlgorithm(parts, sum_input_rows_upper_bound, gathering_columns, deduplicate, need_remove_expired_values); LOG_DEBUG(log, "Selected MergeAlgorithm: " << ((merge_alg == MergeAlgorithm::Vertical) ? "Vertical" : "Horizontal")); @@ -599,6 +625,7 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mergePartsToTempor MergeStageProgress horizontal_stage_progress( merge_alg == MergeAlgorithm::Horizontal ? 1.0 : column_sizes.keyColumnsWeight()); + for (const auto & part : parts) { auto input = std::make_unique( @@ -629,16 +656,19 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mergePartsToTempor /// that is going in insertion order. std::shared_ptr merged_stream; + /// If merge is vertical we cannot calculate it + bool blocks_are_granules_size = (merge_alg == MergeAlgorithm::Vertical); + switch (data.merging_params.mode) { case MergeTreeData::MergingParams::Ordinary: merged_stream = std::make_unique( - src_streams, sort_description, DEFAULT_MERGE_BLOCK_SIZE, 0, rows_sources_write_buf.get(), true); + src_streams, sort_description, DEFAULT_MERGE_BLOCK_SIZE, 0, rows_sources_write_buf.get(), true, blocks_are_granules_size); break; case MergeTreeData::MergingParams::Collapsing: merged_stream = std::make_unique( - src_streams, sort_description, data.merging_params.sign_column, DEFAULT_MERGE_BLOCK_SIZE, rows_sources_write_buf.get()); + src_streams, sort_description, data.merging_params.sign_column, DEFAULT_MERGE_BLOCK_SIZE, rows_sources_write_buf.get(), blocks_are_granules_size); break; case MergeTreeData::MergingParams::Summing: @@ -653,7 +683,7 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mergePartsToTempor case MergeTreeData::MergingParams::Replacing: merged_stream = std::make_unique( - src_streams, sort_description, data.merging_params.version_column, DEFAULT_MERGE_BLOCK_SIZE, rows_sources_write_buf.get()); + src_streams, sort_description, data.merging_params.version_column, DEFAULT_MERGE_BLOCK_SIZE, rows_sources_write_buf.get(), blocks_are_granules_size); break; case MergeTreeData::MergingParams::Graphite: @@ -664,15 +694,24 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mergePartsToTempor case MergeTreeData::MergingParams::VersionedCollapsing: merged_stream = std::make_unique( - src_streams, sort_description, data.merging_params.sign_column, DEFAULT_MERGE_BLOCK_SIZE, rows_sources_write_buf.get()); + src_streams, sort_description, data.merging_params.sign_column, DEFAULT_MERGE_BLOCK_SIZE, rows_sources_write_buf.get(), blocks_are_granules_size); break; } if (deduplicate) merged_stream = std::make_shared(merged_stream, SizeLimits(), 0 /*limit_hint*/, Names()); + if (need_remove_expired_values) + merged_stream = std::make_shared(merged_stream, data, new_data_part, time_of_merge); + MergedBlockOutputStream to{ - data, new_part_tmp_path, merging_columns, compression_codec, merged_column_to_size, data.settings.min_merge_bytes_to_use_direct_io}; + data, + new_part_tmp_path, + merging_columns, + compression_codec, + merged_column_to_size, + data.settings.min_merge_bytes_to_use_direct_io, + blocks_are_granules_size}; merged_stream->readPrefix(); to.writePrefix(); @@ -684,6 +723,7 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mergePartsToTempor while (!actions_blocker.isCancelled() && (block = merged_stream->read())) { rows_written += block.rows(); + to.write(block); merge_entry->rows_written = merged_stream->getProfileInfo().rows; @@ -758,7 +798,15 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mergePartsToTempor rows_sources_read_buf.seek(0, 0); ColumnGathererStream column_gathered_stream(column_name, column_part_streams, rows_sources_read_buf); MergedColumnOnlyOutputStream column_to( - data, column_gathered_stream.getHeader(), new_part_tmp_path, false, compression_codec, false, written_offset_columns); + data, + column_gathered_stream.getHeader(), + new_part_tmp_path, + false, + compression_codec, + false, + written_offset_columns, + to.getIndexGranularity() + ); size_t column_elems_written = 0; column_to.writePrefix(); @@ -857,6 +905,7 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mutatePartToTempor data, future_part.name, future_part.part_info); new_data_part->relative_path = "tmp_mut_" + future_part.name; new_data_part->is_temp = true; + new_data_part->ttl_infos = source_part->ttl_infos; String new_part_tmp_path = new_data_part->getFullPath(); @@ -936,7 +985,7 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mutatePartToTempor { String stream_name = IDataType::getFileNameForStream(entry.name, substream_path); files_to_skip.insert(stream_name + ".bin"); - files_to_skip.insert(stream_name + ".mrk"); + files_to_skip.insert(stream_name + data.index_granularity_info.marks_file_extension); }; IDataType::SubstreamPath stream_path; @@ -959,7 +1008,15 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mutatePartToTempor IMergedBlockOutputStream::WrittenOffsetColumns unused_written_offsets; MergedColumnOnlyOutputStream out( - data, in_header, new_part_tmp_path, /* sync = */ false, compression_codec, /* skip_offsets = */ false, unused_written_offsets); + data, + in_header, + new_part_tmp_path, + /* sync = */ false, + compression_codec, + /* skip_offsets = */ false, + unused_written_offsets, + source_part->index_granularity + ); in->readPrefix(); out.writePrefix(); @@ -1002,7 +1059,7 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mutatePartToTempor } new_data_part->rows_count = source_part->rows_count; - new_data_part->marks_count = source_part->marks_count; + new_data_part->index_granularity = source_part->index_granularity; new_data_part->index = source_part->index; new_data_part->partition.assign(source_part->partition); new_data_part->minmax_idx = source_part->minmax_idx; @@ -1016,12 +1073,14 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataMergerMutator::mutatePartToTempor MergeTreeDataMergerMutator::MergeAlgorithm MergeTreeDataMergerMutator::chooseMergeAlgorithm( const MergeTreeData::DataPartsVector & parts, size_t sum_rows_upper_bound, - const NamesAndTypesList & gathering_columns, bool deduplicate) const + const NamesAndTypesList & gathering_columns, bool deduplicate, bool need_remove_expired_values) const { if (deduplicate) return MergeAlgorithm::Horizontal; if (data.settings.enable_vertical_merge_algorithm == 0) return MergeAlgorithm::Horizontal; + if (need_remove_expired_values) + return MergeAlgorithm::Horizontal; bool is_supported_storage = data.merging_params.mode == MergeTreeData::MergingParams::Ordinary || @@ -1093,7 +1152,6 @@ MergeTreeData::DataPartPtr MergeTreeDataMergerMutator::renameMergedTemporaryPart return new_data_part; } - size_t MergeTreeDataMergerMutator::estimateNeededDiskSpace(const MergeTreeData::DataPartsVector & source_parts) { size_t res = 0; diff --git a/dbms/src/Storages/MergeTree/MergeTreeDataMergerMutator.h b/dbms/src/Storages/MergeTree/MergeTreeDataMergerMutator.h index 4f657847648..4c300965590 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeDataMergerMutator.h +++ b/dbms/src/Storages/MergeTree/MergeTreeDataMergerMutator.h @@ -127,7 +127,7 @@ private: MergeAlgorithm chooseMergeAlgorithm( const MergeTreeData::DataPartsVector & parts, - size_t rows_upper_bound, const NamesAndTypesList & gathering_columns, bool deduplicate) const; + size_t rows_upper_bound, const NamesAndTypesList & gathering_columns, bool deduplicate, bool need_remove_expired_values) const; private: MergeTreeData & data; @@ -137,6 +137,9 @@ private: /// When the last time you wrote to the log that the disk space was running out (not to write about this too often). time_t disk_space_warning_time = 0; + + /// Last time when TTLMergeSelector has been used + time_t last_merge_with_ttl = 0; }; diff --git a/dbms/src/Storages/MergeTree/MergeTreeDataPart.cpp b/dbms/src/Storages/MergeTree/MergeTreeDataPart.cpp index 01ff4c4cdac..60a85807385 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeDataPart.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeDataPart.cpp @@ -22,9 +22,7 @@ #include #include - -#define MERGE_TREE_MARK_SIZE (2 * sizeof(UInt64)) - +#include namespace DB { @@ -37,6 +35,7 @@ namespace ErrorCodes extern const int CORRUPTED_DATA; extern const int NOT_FOUND_EXPECTED_DATA_PART; extern const int BAD_SIZE_OF_FILE_IN_DATA_PART; + extern const int BAD_TTL_FILE; } @@ -137,10 +136,20 @@ void MergeTreeDataPart::MinMaxIndex::merge(const MinMaxIndex & other) MergeTreeDataPart::MergeTreeDataPart(MergeTreeData & storage_, const String & name_) - : storage(storage_), name(name_), info(MergeTreePartInfo::fromPartName(name_, storage.format_version)) + : storage(storage_) + , name(name_) + , info(MergeTreePartInfo::fromPartName(name_, storage.format_version)) { } +MergeTreeDataPart::MergeTreeDataPart(const MergeTreeData & storage_, const String & name_, const MergeTreePartInfo & info_) + : storage(storage_) + , name(name_) + , info(info_) +{ +} + + /// Takes into account the fact that several columns can e.g. share their .size substreams. /// When calculating totals these should be counted only once. MergeTreeDataPart::ColumnSize MergeTreeDataPart::getColumnSizeImpl( @@ -164,7 +173,7 @@ MergeTreeDataPart::ColumnSize MergeTreeDataPart::getColumnSizeImpl( size.data_uncompressed += bin_checksum->second.uncompressed_size; } - auto mrk_checksum = checksums.files.find(file_name + ".mrk"); + auto mrk_checksum = checksums.files.find(file_name + storage.index_granularity_info.marks_file_extension); if (mrk_checksum != checksums.files.end()) size.marks += mrk_checksum->second.file_size; }, {}); @@ -198,7 +207,6 @@ size_t MergeTreeDataPart::getFileSizeOrZero(const String & file_name) const return checksum->second.file_size; } - /** Returns the name of a column with minimum compressed size (as returned by getColumnSize()). * If no checksums are present returns the name of the first physically existing column. */ @@ -459,6 +467,11 @@ void MergeTreeDataPart::renameToDetached(const String & prefix) const } +UInt64 MergeTreeDataPart::getMarksCount() const +{ + return index_granularity.getMarksCount(); +} + void MergeTreeDataPart::makeCloneInDetached(const String & prefix) const { Poco::Path src(getFullPath()); @@ -476,24 +489,55 @@ void MergeTreeDataPart::loadColumnsChecksumsIndexes(bool require_columns_checksu loadColumns(require_columns_checksums); loadChecksums(require_columns_checksums); - loadIndex(); - loadRowsCount(); /// Must be called after loadIndex() as it uses the value of `marks_count`. + loadIndexGranularity(); + loadIndex(); /// Must be called after loadIndexGranularity as it uses the value of `index_granularity` + loadRowsCount(); /// Must be called after loadIndex() as it uses the value of `index_granularity`. loadPartitionAndMinMaxIndex(); + loadTTLInfos(); if (check_consistency) checkConsistency(require_columns_checksums); } +void MergeTreeDataPart::loadIndexGranularity() +{ + if (columns.empty()) + throw Exception("No columns in part " + name, ErrorCodes::NO_FILE_IN_DATA_PART); + const auto & granularity_info = storage.index_granularity_info; + + /// We can use any column, it doesn't matter + std::string marks_file_path = granularity_info.getMarksFilePath(getFullPath() + escapeForFileName(columns.front().name)); + if (!Poco::File(marks_file_path).exists()) + throw Exception("Marks file '" + marks_file_path + "' doesn't exist", ErrorCodes::NO_FILE_IN_DATA_PART); + + size_t marks_file_size = Poco::File(marks_file_path).getSize(); + + /// old version of marks with static index granularity + if (!granularity_info.is_adaptive) + { + size_t marks_count = marks_file_size / granularity_info.mark_size_in_bytes; + index_granularity.resizeWithFixedGranularity(marks_count, granularity_info.fixed_index_granularity); /// all the same + } + else + { + ReadBufferFromFile buffer(marks_file_path, marks_file_size, -1); + while (!buffer.eof()) + { + buffer.seek(sizeof(size_t) * 2, SEEK_CUR); /// skip offset_in_compressed file and offset_in_decompressed_block + size_t granularity; + readIntBinary(granularity, buffer); + index_granularity.appendMark(granularity); + } + if (index_granularity.getMarksCount() * granularity_info.mark_size_in_bytes != marks_file_size) + throw Exception("Cannot read all marks from file " + marks_file_path, ErrorCodes::CANNOT_READ_ALL_DATA); + } + index_granularity.setInitialized(); +} void MergeTreeDataPart::loadIndex() { - if (!marks_count) - { - if (columns.empty()) - throw Exception("No columns in part " + name, ErrorCodes::NO_FILE_IN_DATA_PART); - - marks_count = Poco::File(getFullPath() + escapeForFileName(columns.front().name) + ".mrk") - .getSize() / MERGE_TREE_MARK_SIZE; - } + /// It can be empty in case of mutations + if (!index_granularity.isInitialized()) + throw Exception("Index granularity is not loaded before index loading", ErrorCodes::LOGICAL_ERROR); size_t key_size = storage.primary_key_columns.size(); @@ -505,22 +549,22 @@ void MergeTreeDataPart::loadIndex() for (size_t i = 0; i < key_size; ++i) { loaded_index[i] = storage.primary_key_data_types[i]->createColumn(); - loaded_index[i]->reserve(marks_count); + loaded_index[i]->reserve(index_granularity.getMarksCount()); } String index_path = getFullPath() + "primary.idx"; ReadBufferFromFile index_file = openForReading(index_path); - for (size_t i = 0; i < marks_count; ++i) //-V756 + for (size_t i = 0; i < index_granularity.getMarksCount(); ++i) //-V756 for (size_t j = 0; j < key_size; ++j) storage.primary_key_data_types[j]->deserializeBinary(*loaded_index[j], index_file); for (size_t i = 0; i < key_size; ++i) { loaded_index[i]->protect(); - if (loaded_index[i]->size() != marks_count) + if (loaded_index[i]->size() != index_granularity.getMarksCount()) throw Exception("Cannot read all data from index file " + index_path - + "(expected size: " + toString(marks_count) + ", read: " + toString(loaded_index[i]->size()) + ")", + + "(expected size: " + toString(index_granularity.getMarksCount()) + ", read: " + toString(loaded_index[i]->size()) + ")", ErrorCodes::CANNOT_READ_ALL_DATA); } @@ -585,7 +629,7 @@ void MergeTreeDataPart::loadChecksums(bool require) void MergeTreeDataPart::loadRowsCount() { - if (marks_count == 0) + if (index_granularity.empty()) { rows_count = 0; } @@ -601,8 +645,6 @@ void MergeTreeDataPart::loadRowsCount() } else { - size_t rows_approx = storage.index_granularity * marks_count; - for (const NameAndTypePair & column : columns) { ColumnPtr column_col = column.type->createColumn(); @@ -624,10 +666,12 @@ void MergeTreeDataPart::loadRowsCount() ErrorCodes::LOGICAL_ERROR); } - if (!(rows_count <= rows_approx && rows_approx < rows_count + storage.index_granularity)) + size_t last_mark_index_granularity = index_granularity.getLastMarkRows(); + size_t rows_approx = index_granularity.getTotalRows(); + if (!(rows_count <= rows_approx && rows_approx < rows_count + last_mark_index_granularity)) throw Exception( "Unexpected size of column " + column.name + ": " + toString(rows_count) + " rows, expected " - + toString(rows_approx) + "+-" + toString(storage.index_granularity) + " rows according to the index", + + toString(rows_approx) + "+-" + toString(last_mark_index_granularity) + " rows according to the index", ErrorCodes::LOGICAL_ERROR); return; @@ -637,6 +681,33 @@ void MergeTreeDataPart::loadRowsCount() } } +void MergeTreeDataPart::loadTTLInfos() +{ + String path = getFullPath() + "ttl.txt"; + if (Poco::File(path).exists()) + { + ReadBufferFromFile in = openForReading(path); + assertString("ttl format version: ", in); + size_t format_version; + readText(format_version, in); + assertChar('\n', in); + + if (format_version == 1) + { + try + { + ttl_infos.read(in); + } + catch (const JSONException &) + { + throw Exception("Error while parsing file ttl.txt in part: " + name, ErrorCodes::BAD_TTL_FILE); + } + } + else + throw Exception("Unknown ttl format version: " + toString(format_version), ErrorCodes::BAD_TTL_FILE); + } +} + void MergeTreeDataPart::accumulateColumnSizes(ColumnToSize & column_to_size) const { std::shared_lock part_lock(columns_lock); @@ -699,7 +770,7 @@ void MergeTreeDataPart::checkConsistency(bool require_part_metadata) name_type.type->enumerateStreams([&](const IDataType::SubstreamPath & substream_path) { String file_name = IDataType::getFileNameForStream(name_type.name, substream_path); - String mrk_file_name = file_name + ".mrk"; + String mrk_file_name = file_name + storage.index_granularity_info.marks_file_extension; String bin_file_name = file_name + ".bin"; if (!checksums.files.count(mrk_file_name)) throw Exception("No " + mrk_file_name + " file checksum for column " + name_type.name + " in part " + path, @@ -763,7 +834,7 @@ void MergeTreeDataPart::checkConsistency(bool require_part_metadata) { name_type.type->enumerateStreams([&](const IDataType::SubstreamPath & substream_path) { - Poco::File file(IDataType::getFileNameForStream(name_type.name, substream_path) + ".mrk"); + Poco::File file(IDataType::getFileNameForStream(name_type.name, substream_path) + storage.index_granularity_info.marks_file_extension); /// Missing file is Ok for case when new column was added. if (file.exists()) @@ -794,7 +865,7 @@ bool MergeTreeDataPart::hasColumnFiles(const String & column) const String escaped_column = escapeForFileName(column); return Poco::File(prefix + escaped_column + ".bin").exists() - && Poco::File(prefix + escaped_column + ".mrk").exists(); + && Poco::File(prefix + escaped_column + storage.index_granularity_info.marks_file_extension).exists(); } diff --git a/dbms/src/Storages/MergeTree/MergeTreeDataPart.h b/dbms/src/Storages/MergeTree/MergeTreeDataPart.h index 6c6db319916..93b8117bd90 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeDataPart.h +++ b/dbms/src/Storages/MergeTree/MergeTreeDataPart.h @@ -4,10 +4,12 @@ #include #include #include +#include #include #include #include #include +#include #include #include @@ -28,10 +30,7 @@ struct MergeTreeDataPart using Checksums = MergeTreeDataPartChecksums; using Checksum = MergeTreeDataPartChecksums::Checksum; - MergeTreeDataPart(const MergeTreeData & storage_, const String & name_, const MergeTreePartInfo & info_) - : storage(storage_), name(name_), info(info_) - { - } + MergeTreeDataPart(const MergeTreeData & storage_, const String & name_, const MergeTreePartInfo & info_); MergeTreeDataPart(MergeTreeData & storage_, const String & name_); @@ -94,7 +93,6 @@ struct MergeTreeDataPart mutable String relative_path; size_t rows_count = 0; - size_t marks_count = 0; std::atomic bytes_on_disk {0}; /// 0 - if not counted; /// Is used from several threads without locks (it is changed with ALTER). /// May not contain size of checksums.txt and columns.txt @@ -129,6 +127,11 @@ struct MergeTreeDataPart Deleting /// not active data part with identity refcounter, it is deleting right now by a cleaner }; + using TTLInfo = MergeTreeDataPartTTLInfo; + using TTLInfos = MergeTreeDataPartTTLInfos; + + TTLInfos ttl_infos; + /// Current state of the part. If the part is in working set already, it should be accessed via data_parts mutex mutable State state{State::Temporary}; @@ -181,6 +184,10 @@ struct MergeTreeDataPart MergeTreePartition partition; + /// Amount of rows between marks + /// As index always loaded into memory + MergeTreeIndexGranularity index_granularity; + /// Index that for each part stores min and max values of a set of columns. This allows quickly excluding /// parts based on conditions on these columns imposed by a query. /// Currently this index is built using only columns required by partition expression, but in principle it @@ -216,6 +223,9 @@ struct MergeTreeDataPart /// Columns description. NamesAndTypesList columns; + /// Columns with values, that all have been zeroed by expired ttl + NameSet empty_columns; + using ColumnToSize = std::map; /** It is blocked for writing when changing columns, checksums or any part files. @@ -266,6 +276,7 @@ struct MergeTreeDataPart /// For data in RAM ('index') UInt64 getIndexSizeInBytes() const; UInt64 getIndexSizeInAllocatedBytes() const; + UInt64 getMarksCount() const; private: /// Reads columns names and types from columns.txt @@ -274,13 +285,19 @@ private: /// If checksums.txt exists, reads files' checksums (and sizes) from it void loadChecksums(bool require); - /// Loads index file. Also calculates this->marks_count if marks_count = 0 + /// Loads marks index granularity into memory + void loadIndexGranularity(); + + /// Loads index file. void loadIndex(); /// Load rows count for this part from disk (for the newer storage format version). /// For the older format version calculates rows count from the size of a column with a fixed size. void loadRowsCount(); + /// Loads ttl infos in json format from file ttl.txt. If file doesn`t exists assigns ttl infos with all zeros + void loadTTLInfos(); + void loadPartitionAndMinMaxIndex(); void checkConsistency(bool require_part_metadata); diff --git a/dbms/src/Storages/MergeTree/MergeTreeDataPartTTLInfo.cpp b/dbms/src/Storages/MergeTree/MergeTreeDataPartTTLInfo.cpp new file mode 100644 index 00000000000..d3fe3231e05 --- /dev/null +++ b/dbms/src/Storages/MergeTree/MergeTreeDataPartTTLInfo.cpp @@ -0,0 +1,88 @@ +#include +#include +#include + +#include + +namespace DB +{ + +void MergeTreeDataPartTTLInfos::update(const MergeTreeDataPartTTLInfos & other_infos) +{ + for (const auto & [name, ttl_info] : other_infos.columns_ttl) + { + columns_ttl[name].update(ttl_info); + updatePartMinTTL(ttl_info.min); + } + + table_ttl.update(other_infos.table_ttl); + updatePartMinTTL(table_ttl.min); +} + +void MergeTreeDataPartTTLInfos::read(ReadBuffer & in) +{ + String json_str; + readString(json_str, in); + assertEOF(in); + + JSON json(json_str); + if (json.has("columns")) + { + JSON columns = json["columns"]; + for (auto col : columns) + { + MergeTreeDataPartTTLInfo ttl_info; + ttl_info.min = col["min"].getUInt(); + ttl_info.max = col["max"].getUInt(); + String name = col["name"].getString(); + columns_ttl.emplace(name, ttl_info); + + updatePartMinTTL(ttl_info.min); + } + } + if (json.has("table")) + { + JSON table = json["table"]; + table_ttl.min = table["min"].getUInt(); + table_ttl.max = table["max"].getUInt(); + + updatePartMinTTL(table_ttl.min); + } +} + +void MergeTreeDataPartTTLInfos::write(WriteBuffer & out) const +{ + writeString("ttl format version: 1\n", out); + writeString("{", out); + if (!columns_ttl.empty()) + { + writeString("\"columns\":[", out); + for (auto it = columns_ttl.begin(); it != columns_ttl.end(); ++it) + { + if (it != columns_ttl.begin()) + writeString(",", out); + + writeString("{\"name\":\"", out); + writeString(it->first, out); + writeString("\",\"min\":", out); + writeIntText(it->second.min, out); + writeString(",\"max\":", out); + writeIntText(it->second.max, out); + writeString("}", out); + } + writeString("]", out); + } + if (table_ttl.min) + { + if (!columns_ttl.empty()) + writeString(",", out); + writeString("\"table\":{\"min\":", out); + writeIntText(table_ttl.min, out); + writeString(",\"max\":", out); + writeIntText(table_ttl.max, out); + writeString("}", out); + } + writeString("}", out); +} + +} diff --git a/dbms/src/Storages/MergeTree/MergeTreeDataPartTTLInfo.h b/dbms/src/Storages/MergeTree/MergeTreeDataPartTTLInfo.h new file mode 100644 index 00000000000..ff181aa29a4 --- /dev/null +++ b/dbms/src/Storages/MergeTree/MergeTreeDataPartTTLInfo.h @@ -0,0 +1,51 @@ +#pragma once +#include +#include + +#include + +namespace DB +{ + +/// Minimal and maximal ttl for column or table +struct MergeTreeDataPartTTLInfo +{ + time_t min = 0; + time_t max = 0; + + void update(time_t time) + { + if (time && (!min || time < min)) + min = time; + + max = std::max(time, max); + } + + void update(const MergeTreeDataPartTTLInfo & other_info) + { + if (other_info.min && (!min || other_info.min < min)) + min = other_info.min; + + max = std::max(other_info.max, max); + } +}; + +/// PartTTLInfo for all columns and table with minimal ttl for whole part +struct MergeTreeDataPartTTLInfos +{ + std::unordered_map columns_ttl; + MergeTreeDataPartTTLInfo table_ttl; + time_t part_min_ttl = 0; + + void read(ReadBuffer & in); + void write(WriteBuffer & out) const; + void update(const MergeTreeDataPartTTLInfos & other_infos); + + void updatePartMinTTL(time_t time) + { + if (time && (!part_min_ttl || time < part_min_ttl)) + part_min_ttl = time; + } +}; + +} diff --git a/dbms/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp b/dbms/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp index a1f3a9327d9..8056f624dd3 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp @@ -93,7 +93,7 @@ static Block getBlockWithPartColumn(const MergeTreeData::DataPartsVector & parts size_t MergeTreeDataSelectExecutor::getApproximateTotalRowsToRead( const MergeTreeData::DataPartsVector & parts, const KeyCondition & key_condition, const Settings & settings) const { - size_t full_marks_count = 0; + size_t rows_count = 0; /// We will find out how many rows we would have read without sampling. LOG_DEBUG(log, "Preliminary index scan with condition: " << key_condition.toString()); @@ -101,7 +101,7 @@ size_t MergeTreeDataSelectExecutor::getApproximateTotalRowsToRead( for (size_t i = 0; i < parts.size(); ++i) { const MergeTreeData::DataPartPtr & part = parts[i]; - MarkRanges ranges = markRangesFromPKRange(part->index, key_condition, settings); + MarkRanges ranges = markRangesFromPKRange(part, key_condition, settings); /** In order to get a lower bound on the number of rows that match the condition on PK, * consider only guaranteed full marks. @@ -109,10 +109,11 @@ size_t MergeTreeDataSelectExecutor::getApproximateTotalRowsToRead( */ for (size_t j = 0; j < ranges.size(); ++j) if (ranges[j].end - ranges[j].begin > 2) - full_marks_count += ranges[j].end - ranges[j].begin - 2; + rows_count += part->index_granularity.getRowsCountInRange({ranges[j].begin + 1, ranges[j].end - 1}); + } - return full_marks_count * data.index_granularity; + return rows_count; } @@ -533,9 +534,9 @@ BlockInputStreams MergeTreeDataSelectExecutor::readFromParts( RangesInDataPart ranges(part, part_index++); if (data.hasPrimaryKey()) - ranges.ranges = markRangesFromPKRange(part->index, key_condition, settings); + ranges.ranges = markRangesFromPKRange(part, key_condition, settings); else - ranges.ranges = MarkRanges{MarkRange{0, part->marks_count}}; + ranges.ranges = MarkRanges{MarkRange{0, part->getMarksCount()}}; for (const auto & index_and_condition : useful_indices) ranges.ranges = filterMarksUsingIndex( @@ -616,6 +617,28 @@ BlockInputStreams MergeTreeDataSelectExecutor::readFromParts( return res; } +namespace +{ + +size_t roundRowsOrBytesToMarks( + size_t rows_setting, + size_t bytes_setting, + const MergeTreeData::IndexGranularityInfo & granularity_info) +{ + if (!granularity_info.is_adaptive) + { + size_t fixed_index_granularity = granularity_info.fixed_index_granularity; + return (rows_setting + fixed_index_granularity - 1) / fixed_index_granularity; + } + else + { + size_t index_granularity_bytes = granularity_info.index_granularity_bytes; + return (bytes_setting + index_granularity_bytes - 1) / index_granularity_bytes; + } +} + +} + BlockInputStreams MergeTreeDataSelectExecutor::spreadMarkRangesAmongStreams( RangesInDataParts && parts, @@ -627,16 +650,23 @@ BlockInputStreams MergeTreeDataSelectExecutor::spreadMarkRangesAmongStreams( const Names & virt_columns, const Settings & settings) const { - const size_t min_marks_for_concurrent_read = - (settings.merge_tree_min_rows_for_concurrent_read + data.index_granularity - 1) / data.index_granularity; - const size_t max_marks_to_use_cache = - (settings.merge_tree_max_rows_to_use_cache + data.index_granularity - 1) / data.index_granularity; + const size_t max_marks_to_use_cache = roundRowsOrBytesToMarks( + settings.merge_tree_max_rows_to_use_cache, + settings.merge_tree_max_bytes_to_use_cache, + data.index_granularity_info); + + const size_t min_marks_for_concurrent_read = roundRowsOrBytesToMarks( + settings.merge_tree_min_rows_for_concurrent_read, + settings.merge_tree_min_bytes_for_concurrent_read, + data.index_granularity_info); /// Count marks for each part. std::vector sum_marks_in_parts(parts.size()); size_t sum_marks = 0; + size_t total_rows = 0; for (size_t i = 0; i < parts.size(); ++i) { + total_rows += parts[i].getRowsCount(); /// Let the ranges be listed from right to left so that the leftmost range can be dropped using `pop_back()`. std::reverse(parts[i].ranges.begin(), parts[i].ranges.end()); @@ -662,7 +692,6 @@ BlockInputStreams MergeTreeDataSelectExecutor::spreadMarkRangesAmongStreams( column_names, MergeTreeReadPool::BackoffSettings(settings), settings.preferred_block_size_bytes, false); /// Let's estimate total number of rows for progress bar. - const size_t total_rows = data.index_granularity * sum_marks; LOG_TRACE(log, "Reading approx. " << total_rows << " rows with " << num_streams << " streams"); for (size_t i = 0; i < num_streams; ++i) @@ -769,8 +798,10 @@ BlockInputStreams MergeTreeDataSelectExecutor::spreadMarkRangesAmongStreamsFinal const Names & virt_columns, const Settings & settings) const { - const size_t max_marks_to_use_cache = - (settings.merge_tree_max_rows_to_use_cache + data.index_granularity - 1) / data.index_granularity; + const size_t max_marks_to_use_cache = roundRowsOrBytesToMarks( + settings.merge_tree_max_rows_to_use_cache, + settings.merge_tree_max_bytes_to_use_cache, + data.index_granularity_info); size_t sum_marks = 0; for (size_t i = 0; i < parts.size(); ++i) @@ -870,11 +901,12 @@ void MergeTreeDataSelectExecutor::createPositiveSignCondition( /// Calculates a set of mark ranges, that could possibly contain keys, required by condition. /// In other words, it removes subranges from whole range, that definitely could not contain required keys. MarkRanges MergeTreeDataSelectExecutor::markRangesFromPKRange( - const MergeTreeData::DataPart::Index & index, const KeyCondition & key_condition, const Settings & settings) const + const MergeTreeData::DataPartPtr & part, const KeyCondition & key_condition, const Settings & settings) const { MarkRanges res; - size_t marks_count = index.at(0)->size(); + size_t marks_count = part->index_granularity.getMarksCount(); + const auto & index = part->index; if (marks_count == 0) return res; @@ -886,7 +918,10 @@ MarkRanges MergeTreeDataSelectExecutor::markRangesFromPKRange( else { size_t used_key_size = key_condition.getMaxKeyColumn() + 1; - size_t min_marks_for_seek = (settings.merge_tree_min_rows_for_seek + data.index_granularity - 1) / data.index_granularity; + size_t min_marks_for_seek = roundRowsOrBytesToMarks( + settings.merge_tree_min_rows_for_seek, + settings.merge_tree_min_bytes_for_seek, + data.index_granularity_info); /** There will always be disjoint suspicious segments on the stack, the leftmost one at the top (back). * At each step, take the left segment and check if it fits. @@ -968,13 +1003,16 @@ MarkRanges MergeTreeDataSelectExecutor::filterMarksUsingIndex( return ranges; } - const size_t min_marks_for_seek = (settings.merge_tree_min_rows_for_seek + data.index_granularity - 1) / data.index_granularity; + const size_t min_marks_for_seek = roundRowsOrBytesToMarks( + settings.merge_tree_min_rows_for_seek, + settings.merge_tree_min_bytes_for_seek, + data.index_granularity_info); size_t granules_dropped = 0; MergeTreeIndexReader reader( index, part, - ((part->marks_count + index->granularity - 1) / index->granularity), + ((part->getMarksCount() + index->granularity - 1) / index->granularity), ranges); MarkRanges res; @@ -1021,4 +1059,5 @@ MarkRanges MergeTreeDataSelectExecutor::filterMarksUsingIndex( return res; } + } diff --git a/dbms/src/Storages/MergeTree/MergeTreeDataSelectExecutor.h b/dbms/src/Storages/MergeTree/MergeTreeDataSelectExecutor.h index af4445b3648..a949d593904 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeDataSelectExecutor.h +++ b/dbms/src/Storages/MergeTree/MergeTreeDataSelectExecutor.h @@ -78,7 +78,7 @@ private: const Context & context) const; MarkRanges markRangesFromPKRange( - const MergeTreeData::DataPart::Index & index, + const MergeTreeData::DataPartPtr & part, const KeyCondition & key_condition, const Settings & settings) const; diff --git a/dbms/src/Storages/MergeTree/MergeTreeDataWriter.cpp b/dbms/src/Storages/MergeTree/MergeTreeDataWriter.cpp index 2bf9d8307df..d7a48171499 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeDataWriter.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeDataWriter.cpp @@ -4,8 +4,11 @@ #include #include #include +#include +#include #include #include +#include namespace ProfileEvents @@ -71,6 +74,34 @@ void buildScatterSelector( } } +/// Computes ttls and updates ttl infos +void updateTTL(const MergeTreeData::TTLEntry & ttl_entry, MergeTreeDataPart::TTLInfos & ttl_infos, Block & block, const String & column_name) +{ + if (!block.has(ttl_entry.result_column)) + ttl_entry.expression->execute(block); + + auto & ttl_info = (column_name.empty() ? ttl_infos.table_ttl : ttl_infos.columns_ttl[column_name]); + + const auto & current = block.getByName(ttl_entry.result_column); + + const IColumn * column = current.column.get(); + if (const ColumnUInt16 * column_date = typeid_cast(column)) + { + const auto & date_lut = DateLUT::instance(); + for (const auto & val : column_date->getData()) + ttl_info.update(date_lut.fromDayNum(DayNum(val))); + } + else if (const ColumnUInt32 * column_date_time = typeid_cast(column)) + { + for (const auto & val : column_date_time->getData()) + ttl_info.update(val); + } + else + throw Exception("Unexpected type of result ttl column", ErrorCodes::LOGICAL_ERROR); + + ttl_infos.updatePartMinTTL(ttl_info.min); +} + } BlocksWithPartition MergeTreeDataWriter::splitBlockIntoParts(const Block & block, size_t max_parts) @@ -213,6 +244,12 @@ MergeTreeData::MutableDataPartPtr MergeTreeDataWriter::writeTempPart(BlockWithPa ProfileEvents::increment(ProfileEvents::MergeTreeDataWriterBlocksAlreadySorted); } + if (data.hasTableTTL()) + updateTTL(data.ttl_table_entry, new_data_part->ttl_infos, block, ""); + + for (const auto & [name, ttl_entry] : data.ttl_entries_by_name) + updateTTL(ttl_entry, new_data_part->ttl_infos, block, name); + /// This effectively chooses minimal compression method: /// either default lz4 or compression method with zero thresholds on absolute and relative part size. auto compression_codec = data.global_context.chooseCompressionCodec(0, 0); diff --git a/dbms/src/Storages/MergeTree/MergeTreeIndexGranularity.cpp b/dbms/src/Storages/MergeTree/MergeTreeIndexGranularity.cpp new file mode 100644 index 00000000000..bfa60d653c0 --- /dev/null +++ b/dbms/src/Storages/MergeTree/MergeTreeIndexGranularity.cpp @@ -0,0 +1,102 @@ +#include +#include +#include + + +namespace DB +{ +namespace ErrorCodes +{ + extern const int LOGICAL_ERROR; +} + +MergeTreeIndexGranularity::MergeTreeIndexGranularity(const std::vector & marks_rows_partial_sums_) + : marks_rows_partial_sums(marks_rows_partial_sums_) +{ +} + + +MergeTreeIndexGranularity::MergeTreeIndexGranularity(size_t marks_count, size_t fixed_granularity) + : marks_rows_partial_sums(marks_count, fixed_granularity) +{ +} + +size_t MergeTreeIndexGranularity::getMarkStartingRow(size_t mark_index) const +{ + if (mark_index == 0) + return 0; + return marks_rows_partial_sums[mark_index - 1]; +} + +size_t MergeTreeIndexGranularity::getMarksCount() const +{ + return marks_rows_partial_sums.size(); +} + +size_t MergeTreeIndexGranularity::getTotalRows() const +{ + if (marks_rows_partial_sums.empty()) + return 0; + return marks_rows_partial_sums.back(); +} + +void MergeTreeIndexGranularity::appendMark(size_t rows_count) +{ + if (marks_rows_partial_sums.empty()) + marks_rows_partial_sums.push_back(rows_count); + else + marks_rows_partial_sums.push_back(marks_rows_partial_sums.back() + rows_count); +} + +size_t MergeTreeIndexGranularity::getRowsCountInRange(size_t begin, size_t end) const +{ + size_t subtrahend = 0; + if (begin != 0) + subtrahend = marks_rows_partial_sums[begin - 1]; + return marks_rows_partial_sums[end - 1] - subtrahend; +} + +size_t MergeTreeIndexGranularity::getRowsCountInRange(const MarkRange & range) const +{ + return getRowsCountInRange(range.begin, range.end); +} + +size_t MergeTreeIndexGranularity::getRowsCountInRanges(const MarkRanges & ranges) const +{ + size_t total = 0; + for (const auto & range : ranges) + total += getRowsCountInRange(range); + + return total; +} + + +size_t MergeTreeIndexGranularity::countMarksForRows(size_t from_mark, size_t number_of_rows, size_t offset_in_rows) const +{ + size_t rows_before_mark = getMarkStartingRow(from_mark); + size_t last_row_pos = rows_before_mark + offset_in_rows + number_of_rows; + auto position = std::upper_bound(marks_rows_partial_sums.begin(), marks_rows_partial_sums.end(), last_row_pos); + size_t to_mark; + if (position == marks_rows_partial_sums.end()) + to_mark = marks_rows_partial_sums.size(); + else + to_mark = position - marks_rows_partial_sums.begin(); + + return getRowsCountInRange(from_mark, std::max(1UL, to_mark)) - offset_in_rows; + +} + +void MergeTreeIndexGranularity::resizeWithFixedGranularity(size_t size, size_t fixed_granularity) +{ + marks_rows_partial_sums.resize(size); + + size_t prev = 0; + for (size_t i = 0; i < size; ++i) + { + marks_rows_partial_sums[i] = fixed_granularity + prev; + prev = marks_rows_partial_sums[i]; + } +} + + +} diff --git a/dbms/src/Storages/MergeTree/MergeTreeIndexGranularity.h b/dbms/src/Storages/MergeTree/MergeTreeIndexGranularity.h new file mode 100644 index 00000000000..4a86513c652 --- /dev/null +++ b/dbms/src/Storages/MergeTree/MergeTreeIndexGranularity.h @@ -0,0 +1,86 @@ +#pragma once +#include +#include + +namespace DB +{ + +/// Class contains information about index granularity in rows of MergeTreeDataPart +/// Inside it contains vector of partial sums of rows after mark: +/// |-----|---|----|----| +/// | 5 | 8 | 12 | 16 | +/// If user doesn't specify setting adaptive_index_granularity_bytes for MergeTree* table +/// all values in inner vector would have constant stride (default 8192). +class MergeTreeIndexGranularity +{ +private: + std::vector marks_rows_partial_sums; + bool initialized = false; + +public: + MergeTreeIndexGranularity() = default; + explicit MergeTreeIndexGranularity(const std::vector & marks_rows_partial_sums_); + MergeTreeIndexGranularity(size_t marks_count, size_t fixed_granularity); + + + /// Return count of rows between marks + size_t getRowsCountInRange(const MarkRange & range) const; + /// Return count of rows between marks + size_t getRowsCountInRange(size_t begin, size_t end) const; + /// Return sum of rows between all ranges + size_t getRowsCountInRanges(const MarkRanges & ranges) const; + + /// Return amount of marks that contains amount of `number_of_rows` starting from + /// `from_mark` and possible some offset_in_rows from `from_mark` + /// 1 2 <- answer + /// |-----|---------------------------|----|----| + /// ^------------------------^-----------^ + //// from_mark offset_in_rows number_of_rows + size_t countMarksForRows(size_t from_mark, size_t number_of_rows, size_t offset_in_rows=0) const; + + /// Total marks + size_t getMarksCount() const; + /// Total rows + size_t getTotalRows() const; + + /// Rows after mark to next mark + inline size_t getMarkRows(size_t mark_index) const + { + if (mark_index == 0) + return marks_rows_partial_sums[0]; + else + return marks_rows_partial_sums[mark_index] - marks_rows_partial_sums[mark_index - 1]; + } + + /// Return amount of rows before mark + size_t getMarkStartingRow(size_t mark_index) const; + + /// Amount of rows after last mark + size_t getLastMarkRows() const + { + size_t last = marks_rows_partial_sums.size() - 1; + return getMarkRows(last); + } + + bool empty() const + { + return marks_rows_partial_sums.empty(); + } + + bool isInitialized() const + { + return initialized; + } + + void setInitialized() + { + initialized = true; + } + /// Add new mark with rows_count + void appendMark(size_t rows_count); + + /// Add `size` of marks with `fixed_granularity` rows + void resizeWithFixedGranularity(size_t size, size_t fixed_granularity); +}; + +} diff --git a/dbms/src/Storages/MergeTree/MergeTreeIndexReader.cpp b/dbms/src/Storages/MergeTree/MergeTreeIndexReader.cpp index f8ef536aae9..1557696874f 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeIndexReader.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeIndexReader.cpp @@ -10,6 +10,7 @@ MergeTreeIndexReader::MergeTreeIndexReader( part->getFullPath() + index->getFileName(), ".idx", marks_count, all_mark_ranges, nullptr, false, nullptr, part->getFileSizeOrZero(index->getFileName() + ".idx"), 0, DBMS_DEFAULT_BUFFER_SIZE, + &part->storage.index_granularity_info, ReadBufferFromFileBase::ProfileCallback{}, CLOCK_MONOTONIC_COARSE) { stream.seekToStart(); diff --git a/dbms/src/Storages/MergeTree/MergeTreeRangeReader.cpp b/dbms/src/Storages/MergeTree/MergeTreeRangeReader.cpp index 2be5b01119f..e81737036e4 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeRangeReader.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeRangeReader.cpp @@ -13,16 +13,18 @@ namespace DB { MergeTreeRangeReader::DelayedStream::DelayedStream( - size_t from_mark, size_t index_granularity, MergeTreeReader * merge_tree_reader) + size_t from_mark, MergeTreeReader * merge_tree_reader) : current_mark(from_mark), current_offset(0), num_delayed_rows(0) - , index_granularity(index_granularity), merge_tree_reader(merge_tree_reader) + , merge_tree_reader(merge_tree_reader) + , index_granularity(&(merge_tree_reader->data_part->index_granularity)) , continue_reading(false), is_finished(false) { } size_t MergeTreeRangeReader::DelayedStream::position() const { - return current_mark * index_granularity + current_offset + num_delayed_rows; + size_t num_rows_before_current_mark = index_granularity->getMarkStartingRow(current_mark); + return num_rows_before_current_mark + current_offset + num_delayed_rows; } size_t MergeTreeRangeReader::DelayedStream::readRows(Block & block, size_t num_rows) @@ -32,7 +34,7 @@ size_t MergeTreeRangeReader::DelayedStream::readRows(Block & block, size_t num_r size_t rows_read = merge_tree_reader->readRows(current_mark, continue_reading, num_rows, block); continue_reading = true; - /// Zero rows_read my be either because reading has finished + /// Zero rows_read maybe either because reading has finished /// or because there is no columns we can read in current part (for example, all columns are default). /// In the last case we can't finish reading, but it's also ok for the first case /// because we can finish reading by calculation the number of pending rows. @@ -47,7 +49,11 @@ size_t MergeTreeRangeReader::DelayedStream::readRows(Block & block, size_t num_r size_t MergeTreeRangeReader::DelayedStream::read(Block & block, size_t from_mark, size_t offset, size_t num_rows) { - if (position() == from_mark * index_granularity + offset) + size_t num_rows_before_from_mark = index_granularity->getMarkStartingRow(from_mark); + /// We already stand accurately in required position, + /// so because stream is lazy, we don't read anything + /// and only increment amount delayed_rows + if (position() == num_rows_before_from_mark + offset) { num_delayed_rows += num_rows; return 0; @@ -67,12 +73,25 @@ size_t MergeTreeRangeReader::DelayedStream::read(Block & block, size_t from_mark size_t MergeTreeRangeReader::DelayedStream::finalize(Block & block) { + /// We need to skip some rows before reading if (current_offset && !continue_reading) { - size_t granules_to_skip = current_offset / index_granularity; - current_mark += granules_to_skip; - current_offset -= granules_to_skip * index_granularity; + for (size_t mark_num : ext::range(current_mark, index_granularity->getMarksCount())) + { + size_t mark_index_granularity = index_granularity->getMarkRows(mark_num); + if (current_offset >= mark_index_granularity) + { + current_offset -= mark_index_granularity; + current_mark++; + } + else + break; + } + + /// Skip some rows from beging of granule + /// We don't know size of rows in compressed granule, + /// so have to read them and throw out if (current_offset) { Block temp_block; @@ -89,11 +108,22 @@ size_t MergeTreeRangeReader::DelayedStream::finalize(Block & block) MergeTreeRangeReader::Stream::Stream( - size_t from_mark, size_t to_mark, size_t index_granularity, MergeTreeReader * merge_tree_reader) + size_t from_mark, size_t to_mark, MergeTreeReader * merge_tree_reader) : current_mark(from_mark), offset_after_current_mark(0) - , index_granularity(index_granularity), last_mark(to_mark) - , stream(from_mark, index_granularity, merge_tree_reader) + , last_mark(to_mark) + , merge_tree_reader(merge_tree_reader) + , index_granularity(&(merge_tree_reader->data_part->index_granularity)) + , current_mark_index_granularity(index_granularity->getMarkRows(from_mark)) + , stream(from_mark, merge_tree_reader) { + size_t marks_count = index_granularity->getMarksCount(); + if (from_mark >= marks_count) + throw Exception("Trying create stream to read from mark №"+ toString(current_mark) + " but total marks count is " + + toString(marks_count), ErrorCodes::LOGICAL_ERROR); + + if (last_mark > marks_count) + throw Exception("Trying create stream to read to mark №"+ toString(current_mark) + " but total marks count is " + + toString(marks_count), ErrorCodes::LOGICAL_ERROR); } void MergeTreeRangeReader::Stream::checkNotFinished() const @@ -104,7 +134,7 @@ void MergeTreeRangeReader::Stream::checkNotFinished() const void MergeTreeRangeReader::Stream::checkEnoughSpaceInCurrentGranule(size_t num_rows) const { - if (num_rows + offset_after_current_mark > index_granularity) + if (num_rows + offset_after_current_mark > current_mark_index_granularity) throw Exception("Cannot read from granule more than index_granularity.", ErrorCodes::LOGICAL_ERROR); } @@ -118,6 +148,21 @@ size_t MergeTreeRangeReader::Stream::readRows(Block & block, size_t num_rows) return rows_read; } +void MergeTreeRangeReader::Stream::toNextMark() +{ + ++current_mark; + + size_t total_marks_count = index_granularity->getMarksCount(); + if (current_mark < total_marks_count) + current_mark_index_granularity = index_granularity->getMarkRows(current_mark); + else if (current_mark == total_marks_count) + current_mark_index_granularity = 0; /// HACK? + else + throw Exception("Trying to read from mark " + toString(current_mark) + ", but total marks count " + toString(total_marks_count), ErrorCodes::LOGICAL_ERROR); + + offset_after_current_mark = 0; +} + size_t MergeTreeRangeReader::Stream::read(Block & block, size_t num_rows, bool skip_remaining_rows_in_current_granule) { checkEnoughSpaceInCurrentGranule(num_rows); @@ -127,14 +172,12 @@ size_t MergeTreeRangeReader::Stream::read(Block & block, size_t num_rows, bool s checkNotFinished(); size_t read_rows = readRows(block, num_rows); + offset_after_current_mark += num_rows; - if (offset_after_current_mark == index_granularity || skip_remaining_rows_in_current_granule) - { - /// Start new granule; skipped_rows_after_offset is already zero. - ++current_mark; - offset_after_current_mark = 0; - } + /// Start new granule; skipped_rows_after_offset is already zero. + if (offset_after_current_mark == current_mark_index_granularity || skip_remaining_rows_in_current_granule) + toNextMark(); return read_rows; } @@ -145,9 +188,7 @@ size_t MergeTreeRangeReader::Stream::read(Block & block, size_t num_rows, bool s { /// Skip the rest of the rows in granule and start new one. checkNotFinished(); - - ++current_mark; - offset_after_current_mark = 0; + toNextMark(); } return 0; @@ -163,11 +204,10 @@ void MergeTreeRangeReader::Stream::skip(size_t num_rows) offset_after_current_mark += num_rows; - if (offset_after_current_mark == index_granularity) + if (offset_after_current_mark == current_mark_index_granularity) { /// Start new granule; skipped_rows_after_offset is already zero. - ++current_mark; - offset_after_current_mark = 0; + toNextMark(); } } } @@ -198,7 +238,7 @@ void MergeTreeRangeReader::ReadResult::adjustLastGranule() if (num_rows_to_subtract > rows_per_granule.back()) throw Exception("Can't adjust last granule because it has " + toString(rows_per_granule.back()) - + "rows, but try to subtract " + toString(num_rows_to_subtract) + " rows.", + + " rows, but try to subtract " + toString(num_rows_to_subtract) + " rows.", ErrorCodes::LOGICAL_ERROR); rows_per_granule.back() -= num_rows_to_subtract; @@ -366,11 +406,11 @@ void MergeTreeRangeReader::ReadResult::setFilter(const ColumnPtr & new_filter) MergeTreeRangeReader::MergeTreeRangeReader( - MergeTreeReader * merge_tree_reader, size_t index_granularity, MergeTreeRangeReader * prev_reader, + MergeTreeReader * merge_tree_reader, MergeTreeRangeReader * prev_reader, ExpressionActionsPtr alias_actions, ExpressionActionsPtr prewhere_actions, const String * prewhere_column_name, const Names * ordered_names, bool always_reorder, bool remove_prewhere_column, bool last_reader_in_chain) - : index_granularity(index_granularity), merge_tree_reader(merge_tree_reader) + : merge_tree_reader(merge_tree_reader), index_granularity(&(merge_tree_reader->data_part->index_granularity)) , prev_reader(prev_reader), prewhere_column_name(prewhere_column_name) , ordered_names(ordered_names), alias_actions(alias_actions), prewhere_actions(std::move(prewhere_actions)) , always_reorder(always_reorder), remove_prewhere_column(remove_prewhere_column) @@ -393,8 +433,34 @@ size_t MergeTreeRangeReader::numPendingRowsInCurrentGranule() const return prev_reader->numPendingRowsInCurrentGranule(); auto pending_rows = stream.numPendingRowsInCurrentGranule(); + + if (pending_rows) + return pending_rows; + + return numRowsInCurrentGranule(); +} + + +size_t MergeTreeRangeReader::numRowsInCurrentGranule() const +{ /// If pending_rows is zero, than stream is not initialized. - return pending_rows ? pending_rows : index_granularity; + if (stream.current_mark_index_granularity) + return stream.current_mark_index_granularity; + + /// We haven't read anything, return first + size_t first_mark = merge_tree_reader->getFirstMarkToRead(); + return index_granularity->getMarkRows(first_mark); +} + +size_t MergeTreeRangeReader::currentMark() const +{ + return stream.currentMark(); +} + +size_t MergeTreeRangeReader::Stream::numPendingRows() const +{ + size_t rows_between_marks = index_granularity->getRowsCountInRange(current_mark, last_mark); + return rows_between_marks - offset_after_current_mark; } bool MergeTreeRangeReader::isCurrentRangeFinished() const @@ -515,7 +581,7 @@ MergeTreeRangeReader::ReadResult MergeTreeRangeReader::startReadingChain(size_t if (stream.isFinished()) { result.addRows(stream.finalize(result.block)); - stream = Stream(ranges.back().begin, ranges.back().end, index_granularity, merge_tree_reader); + stream = Stream(ranges.back().begin, ranges.back().end, merge_tree_reader); result.addRange(ranges.back()); ranges.pop_back(); } @@ -563,7 +629,7 @@ Block MergeTreeRangeReader::continueReadingChain(ReadResult & result) added_rows += stream.finalize(block); auto & range = started_ranges[next_range_to_start].range; ++next_range_to_start; - stream = Stream(range.begin, range.end, index_granularity, merge_tree_reader); + stream = Stream(range.begin, range.end, merge_tree_reader); } bool last = i + 1 == size; diff --git a/dbms/src/Storages/MergeTree/MergeTreeRangeReader.h b/dbms/src/Storages/MergeTree/MergeTreeRangeReader.h index a1830a4ca97..bd3ae49f529 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeRangeReader.h +++ b/dbms/src/Storages/MergeTree/MergeTreeRangeReader.h @@ -19,7 +19,7 @@ class MergeTreeReader; class MergeTreeRangeReader { public: - MergeTreeRangeReader(MergeTreeReader * merge_tree_reader, size_t index_granularity, MergeTreeRangeReader * prev_reader, + MergeTreeRangeReader(MergeTreeReader * merge_tree_reader, MergeTreeRangeReader * prev_reader, ExpressionActionsPtr alias_actions, ExpressionActionsPtr prewhere_actions, const String * prewhere_column_name, const Names * ordered_names, bool always_reorder, bool remove_prewhere_column, bool last_reader_in_chain); @@ -30,6 +30,8 @@ public: size_t numReadRowsInCurrentGranule() const; size_t numPendingRowsInCurrentGranule() const; + size_t numRowsInCurrentGranule() const; + size_t currentMark() const; bool isCurrentRangeFinished() const; bool isInitialized() const { return is_initialized; } @@ -38,35 +40,44 @@ public: { public: DelayedStream() = default; - DelayedStream(size_t from_mark, size_t index_granularity, MergeTreeReader * merge_tree_reader); + DelayedStream(size_t from_mark, MergeTreeReader * merge_tree_reader); + /// Read @num_rows rows from @from_mark starting from @offset row /// Returns the number of rows added to block. /// NOTE: have to return number of rows because block has broken invariant: /// some columns may have different size (for example, default columns may be zero size). size_t read(Block & block, size_t from_mark, size_t offset, size_t num_rows); + + /// Skip extra rows to current_offset and perform actual reading size_t finalize(Block & block); bool isFinished() const { return is_finished; } private: size_t current_mark = 0; + /// Offset from current mark in rows size_t current_offset = 0; + /// Num of rows we have to read size_t num_delayed_rows = 0; - size_t index_granularity = 0; + /// Actual reader of data from disk MergeTreeReader * merge_tree_reader = nullptr; + const MergeTreeIndexGranularity * index_granularity = nullptr; bool continue_reading = false; bool is_finished = true; + /// Current position from the begging of file in rows size_t position() const; size_t readRows(Block & block, size_t num_rows); }; + /// Very thin wrapper for DelayedStream + /// Check bounds of read ranges and make steps between marks class Stream { public: Stream() = default; - Stream(size_t from_mark, size_t to_mark, size_t index_granularity, MergeTreeReader * merge_tree_reader); + Stream(size_t from_mark, size_t to_mark, MergeTreeReader * merge_tree_reader); /// Returns the number of rows added to block. size_t read(Block & block, size_t num_rows, bool skip_remaining_rows_in_current_granule); @@ -77,23 +88,31 @@ public: bool isFinished() const { return current_mark >= last_mark; } size_t numReadRowsInCurrentGranule() const { return offset_after_current_mark; } - size_t numPendingRowsInCurrentGranule() const { return index_granularity - numReadRowsInCurrentGranule(); } - size_t numRendingGranules() const { return last_mark - current_mark; } - size_t numPendingRows() const { return numRendingGranules() * index_granularity - offset_after_current_mark; } + size_t numPendingRowsInCurrentGranule() const + { + return current_mark_index_granularity - numReadRowsInCurrentGranule(); + } + size_t numPendingGranules() const { return last_mark - current_mark; } + size_t numPendingRows() const; + size_t currentMark() const { return current_mark; } - private: size_t current_mark = 0; /// Invariant: offset_after_current_mark + skipped_rows_after_offset < index_granularity size_t offset_after_current_mark = 0; - size_t index_granularity = 0; size_t last_mark = 0; + MergeTreeReader * merge_tree_reader = nullptr; + const MergeTreeIndexGranularity * index_granularity = nullptr; + + size_t current_mark_index_granularity = 0; + DelayedStream stream; void checkNotFinished() const; void checkEnoughSpaceInCurrentGranule(size_t num_rows) const; size_t readRows(Block & block, size_t num_rows); + void toNextMark(); }; /// Statistics after next reading step. @@ -142,6 +161,8 @@ public: private: RangesInfo started_ranges; /// The number of rows read from each granule. + /// Granule here is not number of rows between two marks + /// It's amount of rows per single reading act NumRows rows_per_granule; /// Sum(rows_per_granule) size_t total_rows_per_granule = 0; @@ -169,8 +190,8 @@ private: void executePrewhereActionsAndFilterColumns(ReadResult & result); void filterBlock(Block & block, const IColumn::Filter & filter) const; - size_t index_granularity = 0; MergeTreeReader * merge_tree_reader = nullptr; + const MergeTreeIndexGranularity * index_granularity = nullptr; MergeTreeRangeReader * prev_reader = nullptr; /// If not nullptr, read from prev_reader firstly. const String * prewhere_column_name = nullptr; @@ -187,4 +208,3 @@ private: }; } - diff --git a/dbms/src/Storages/MergeTree/MergeTreeReader.cpp b/dbms/src/Storages/MergeTree/MergeTreeReader.cpp index 0717bdac58c..d155077d024 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeReader.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeReader.cpp @@ -38,9 +38,9 @@ MergeTreeReader::MergeTreeReader(const String & path, size_t aio_threshold, size_t max_read_buffer_size, const ValueSizeMap & avg_value_size_hints, const ReadBufferFromFileBase::ProfileCallback & profile_callback, clockid_t clock_type) - : avg_value_size_hints(avg_value_size_hints), path(path), data_part(data_part), columns(columns) + : data_part(data_part), avg_value_size_hints(avg_value_size_hints), path(path), columns(columns) , uncompressed_cache(uncompressed_cache), mark_cache(mark_cache), save_marks_in_cache(save_marks_in_cache), storage(storage) - , all_mark_ranges(all_mark_ranges), aio_threshold(aio_threshold), max_read_buffer_size(max_read_buffer_size), index_granularity(storage.index_granularity) + , all_mark_ranges(all_mark_ranges), aio_threshold(aio_threshold), max_read_buffer_size(max_read_buffer_size) { try { @@ -172,10 +172,12 @@ void MergeTreeReader::addStreams(const String & name, const IDataType & type, return; streams.emplace(stream_name, std::make_unique( - path + stream_name, DATA_FILE_EXTENSION, data_part->marks_count, + path + stream_name, DATA_FILE_EXTENSION, data_part->getMarksCount(), all_mark_ranges, mark_cache, save_marks_in_cache, uncompressed_cache, data_part->getFileSizeOrZero(stream_name + DATA_FILE_EXTENSION), - aio_threshold, max_read_buffer_size, profile_callback, clock_type)); + aio_threshold, max_read_buffer_size, + &storage.index_granularity_info, + profile_callback, clock_type)); }; IDataType::SubstreamPath substream_path; diff --git a/dbms/src/Storages/MergeTree/MergeTreeReader.h b/dbms/src/Storages/MergeTree/MergeTreeReader.h index 74bef7ac118..6d23d413cf4 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeReader.h +++ b/dbms/src/Storages/MergeTree/MergeTreeReader.h @@ -51,6 +51,12 @@ public: /// If continue_reading is true, continue reading from last state, otherwise seek to from_mark size_t readRows(size_t from_mark, bool continue_reading, size_t max_rows_to_read, Block & res); + MergeTreeData::DataPartPtr data_part; + + size_t getFirstMarkToRead() const + { + return all_mark_ranges.back().begin; + } private: using FileStreams = std::map>; @@ -60,7 +66,6 @@ private: DeserializeBinaryBulkStateMap deserialize_binary_bulk_state_map; /// Path to the directory containing the part String path; - MergeTreeData::DataPartPtr data_part; FileStreams streams; @@ -76,7 +81,6 @@ private: MarkRanges all_mark_ranges; size_t aio_threshold; size_t max_read_buffer_size; - size_t index_granularity; void addStreams(const String & name, const IDataType & type, const ReadBufferFromFileBase::ProfileCallback & profile_callback, clockid_t clock_type); diff --git a/dbms/src/Storages/MergeTree/MergeTreeReaderStream.cpp b/dbms/src/Storages/MergeTree/MergeTreeReaderStream.cpp index 4107663f11b..b7eacabeee2 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeReaderStream.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeReaderStream.cpp @@ -15,14 +15,16 @@ namespace ErrorCodes MergeTreeReaderStream::MergeTreeReaderStream( - const String & path_prefix_, const String & extension_, size_t marks_count_, + const String & path_prefix_, const String & data_file_extension_, size_t marks_count_, const MarkRanges & all_mark_ranges, MarkCache * mark_cache_, bool save_marks_in_cache_, UncompressedCache * uncompressed_cache, size_t file_size, size_t aio_threshold, size_t max_read_buffer_size, + const GranularityInfo * index_granularity_info_, const ReadBufferFromFileBase::ProfileCallback & profile_callback, clockid_t clock_type) - : path_prefix(path_prefix_), extension(extension_), marks_count(marks_count_) + : path_prefix(path_prefix_), data_file_extension(data_file_extension_), marks_count(marks_count_) , mark_cache(mark_cache_), save_marks_in_cache(save_marks_in_cache_) + , index_granularity_info(index_granularity_info_) { /// Compute the size of the buffer. size_t max_mark_range_bytes = 0; @@ -77,7 +79,7 @@ MergeTreeReaderStream::MergeTreeReaderStream( if (uncompressed_cache) { auto buffer = std::make_unique( - path_prefix + extension, uncompressed_cache, sum_mark_range_bytes, aio_threshold, buffer_size); + path_prefix + data_file_extension, uncompressed_cache, sum_mark_range_bytes, aio_threshold, buffer_size); if (profile_callback) buffer->setProfileCallback(profile_callback, clock_type); @@ -88,7 +90,7 @@ MergeTreeReaderStream::MergeTreeReaderStream( else { auto buffer = std::make_unique( - path_prefix + extension, sum_mark_range_bytes, aio_threshold, buffer_size); + path_prefix + data_file_extension, sum_mark_range_bytes, aio_threshold, buffer_size); if (profile_callback) buffer->setProfileCallback(profile_callback, clock_type); @@ -109,7 +111,7 @@ const MarkInCompressedFile & MergeTreeReaderStream::getMark(size_t index) void MergeTreeReaderStream::loadMarks() { - std::string mrk_path = path_prefix + ".mrk"; + std::string mrk_path = index_granularity_info->getMarksFilePath(path_prefix); auto load = [&]() -> MarkCache::MappedPtr { @@ -117,7 +119,7 @@ void MergeTreeReaderStream::loadMarks() auto temporarily_disable_memory_tracker = getCurrentMemoryTrackerActionLock(); size_t file_size = Poco::File(mrk_path).getSize(); - size_t expected_file_size = sizeof(MarkInCompressedFile) * marks_count; + size_t expected_file_size = index_granularity_info->mark_size_in_bytes * marks_count; if (expected_file_size != file_size) throw Exception( "Bad size of marks file '" + mrk_path + "': " + std::to_string(file_size) + ", must be: " + std::to_string(expected_file_size), @@ -125,12 +127,28 @@ void MergeTreeReaderStream::loadMarks() auto res = std::make_shared(marks_count); - /// Read directly to marks. - ReadBufferFromFile buffer(mrk_path, file_size, -1, reinterpret_cast(res->data())); - - if (buffer.eof() || buffer.buffer().size() != file_size) - throw Exception("Cannot read all marks from file " + mrk_path, ErrorCodes::CANNOT_READ_ALL_DATA); + if (!index_granularity_info->is_adaptive) + { + /// Read directly to marks. + ReadBufferFromFile buffer(mrk_path, file_size, -1, reinterpret_cast(res->data())); + if (buffer.eof() || buffer.buffer().size() != file_size) + throw Exception("Cannot read all marks from file " + mrk_path, ErrorCodes::CANNOT_READ_ALL_DATA); + } + else + { + ReadBufferFromFile buffer(mrk_path, file_size, -1); + size_t i = 0; + while (!buffer.eof()) + { + readIntBinary((*res)[i].offset_in_compressed_file, buffer); + readIntBinary((*res)[i].offset_in_decompressed_block, buffer); + buffer.seek(sizeof(size_t), SEEK_CUR); + ++i; + } + if (i * index_granularity_info->mark_size_in_bytes != file_size) + throw Exception("Cannot read all marks from file " + mrk_path, ErrorCodes::CANNOT_READ_ALL_DATA); + } res->protect(); return res; }; diff --git a/dbms/src/Storages/MergeTree/MergeTreeReaderStream.h b/dbms/src/Storages/MergeTree/MergeTreeReaderStream.h index aa495a390c8..ded0d03326a 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeReaderStream.h +++ b/dbms/src/Storages/MergeTree/MergeTreeReaderStream.h @@ -13,12 +13,14 @@ namespace DB class MergeTreeReaderStream { public: + using GranularityInfo = MergeTreeData::IndexGranularityInfo; MergeTreeReaderStream( - const String & path_prefix_, const String & extension_, size_t marks_count_, + const String & path_prefix_, const String & data_file_extension_, size_t marks_count_, const MarkRanges & all_mark_ranges, MarkCache * mark_cache, bool save_marks_in_cache, UncompressedCache * uncompressed_cache, size_t file_size, size_t aio_threshold, size_t max_read_buffer_size, + const GranularityInfo * index_granularity_info_, const ReadBufferFromFileBase::ProfileCallback & profile_callback, clockid_t clock_type); void seekToMark(size_t index); @@ -34,7 +36,7 @@ private: void loadMarks(); std::string path_prefix; - std::string extension; + std::string data_file_extension; size_t marks_count; @@ -42,6 +44,8 @@ private: bool save_marks_in_cache; MarkCache::MappedPtr marks; + const GranularityInfo * index_granularity_info; + std::unique_ptr cached_buffer; std::unique_ptr non_cached_buffer; }; diff --git a/dbms/src/Storages/MergeTree/MergeTreeSelectBlockInputStream.cpp b/dbms/src/Storages/MergeTree/MergeTreeSelectBlockInputStream.cpp index f80cd01b45a..a6d2b32fb19 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeSelectBlockInputStream.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeSelectBlockInputStream.cpp @@ -46,15 +46,15 @@ MergeTreeSelectBlockInputStream::MergeTreeSelectBlockInputStream( for (const auto & range : all_mark_ranges) total_marks_count += range.end - range.begin; - size_t total_rows = total_marks_count * storage.index_granularity; + size_t total_rows = data_part->index_granularity.getTotalRows(); if (!quiet) LOG_TRACE(log, "Reading " << all_mark_ranges.size() << " ranges from part " << data_part->name << ", approx. " << total_rows << (all_mark_ranges.size() > 1 - ? ", up to " + toString((all_mark_ranges.back().end - all_mark_ranges.front().begin) * storage.index_granularity) + ? ", up to " + toString(data_part->index_granularity.getRowsCountInRanges(all_mark_ranges)) : "") - << " rows starting from " << all_mark_ranges.front().begin * storage.index_granularity); + << " rows starting from " << data_part->index_granularity.getMarkStartingRow(all_mark_ranges.front().begin)); addTotalRowsApprox(total_rows); diff --git a/dbms/src/Storages/MergeTree/MergeTreeSequentialBlockInputStream.cpp b/dbms/src/Storages/MergeTree/MergeTreeSequentialBlockInputStream.cpp index 0b4d56be8ea..1c9c3457fe5 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeSequentialBlockInputStream.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeSequentialBlockInputStream.cpp @@ -25,7 +25,7 @@ MergeTreeSequentialBlockInputStream::MergeTreeSequentialBlockInputStream( if (!quiet) { std::stringstream message; - message << "Reading " << data_part->marks_count << " marks from part " << data_part->name + message << "Reading " << data_part->getMarksCount() << " marks from part " << data_part->name << ", total " << data_part->rows_count << " rows starting from the beginning of the part, columns: "; for (size_t i = 0, size = columns_to_read.size(); i < size; ++i) @@ -56,7 +56,7 @@ MergeTreeSequentialBlockInputStream::MergeTreeSequentialBlockInputStream( reader = std::make_unique( data_part->getFullPath(), data_part, columns_for_reader, /* uncompressed_cache = */ nullptr, mark_cache.get(), /* save_marks_in_cache = */ false, storage, - MarkRanges{MarkRange(0, data_part->marks_count)}, + MarkRanges{MarkRange(0, data_part->getMarksCount())}, /* bytes to use AIO (this is hack) */ read_with_direct_io ? 1UL : std::numeric_limits::max(), DBMS_DEFAULT_BUFFER_SIZE); @@ -91,15 +91,16 @@ try Block res; if (!isCancelled() && current_row < data_part->rows_count) { + size_t rows_to_read = data_part->index_granularity.getMarkRows(current_mark); bool continue_reading = (current_mark != 0); - size_t rows_readed = reader->readRows(current_mark, continue_reading, storage.index_granularity, res); + size_t rows_readed = reader->readRows(current_mark, continue_reading, rows_to_read, res); if (res) { res.checkNumberOfRows(); current_row += rows_readed; - current_mark += (rows_readed / storage.index_granularity); + current_mark += (rows_to_read == rows_readed); bool should_reorder = false, should_evaluate_missing_defaults = false; reader->fillMissingColumns(res, should_reorder, should_evaluate_missing_defaults, res.rows()); diff --git a/dbms/src/Storages/MergeTree/MergeTreeSettings.h b/dbms/src/Storages/MergeTree/MergeTreeSettings.h index 9713aa1e806..612a4030c9b 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeSettings.h +++ b/dbms/src/Storages/MergeTree/MergeTreeSettings.h @@ -160,7 +160,13 @@ struct MergeTreeSettings M(SettingUInt64, finished_mutations_to_keep, 100) \ \ /** Minimal amount of bytes to enable O_DIRECT in merge (0 - disabled) */ \ - M(SettingUInt64, min_merge_bytes_to_use_direct_io, 10ULL * 1024 * 1024 * 1024) + M(SettingUInt64, min_merge_bytes_to_use_direct_io, 10ULL * 1024 * 1024 * 1024) \ + \ + /** Approximate amount of bytes in single granule (0 - disabled) */ \ + M(SettingUInt64, index_granularity_bytes, 0) \ + \ + /** Minimal time in seconds, when merge with TTL can be repeated */ \ + M(SettingInt64, merge_with_ttl_timeout, 3600 * 24) /// Settings that should not change after the creation of a table. #define APPLY_FOR_IMMUTABLE_MERGE_TREE_SETTINGS(M) \ diff --git a/dbms/src/Storages/MergeTree/MergeTreeThreadSelectBlockInputStream.cpp b/dbms/src/Storages/MergeTree/MergeTreeThreadSelectBlockInputStream.cpp index 1067a50ba56..b34cca2c677 100644 --- a/dbms/src/Storages/MergeTree/MergeTreeThreadSelectBlockInputStream.cpp +++ b/dbms/src/Storages/MergeTree/MergeTreeThreadSelectBlockInputStream.cpp @@ -27,10 +27,13 @@ MergeTreeThreadSelectBlockInputStream::MergeTreeThreadSelectBlockInputStream( pool{pool} { /// round min_marks_to_read up to nearest multiple of block_size expressed in marks - if (max_block_size_rows) + /// If granularity is adaptive it doesn't make sense + /// Maybe it will make sence to add settings `max_block_size_bytes` + if (max_block_size_rows && !storage.index_granularity_info.is_adaptive) { - min_marks_to_read = (min_marks_to_read_ * storage.index_granularity + max_block_size_rows - 1) - / max_block_size_rows * max_block_size_rows / storage.index_granularity; + size_t fixed_index_granularity = storage.index_granularity_info.fixed_index_granularity; + min_marks_to_read = (min_marks_to_read_ * fixed_index_granularity + max_block_size_rows - 1) + / max_block_size_rows * max_block_size_rows / fixed_index_granularity; } else min_marks_to_read = min_marks_to_read_; diff --git a/dbms/src/Storages/MergeTree/MergedBlockOutputStream.cpp b/dbms/src/Storages/MergeTree/MergedBlockOutputStream.cpp index 49fa5da2afa..c277ad29fdf 100644 --- a/dbms/src/Storages/MergeTree/MergedBlockOutputStream.cpp +++ b/dbms/src/Storages/MergeTree/MergedBlockOutputStream.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -20,7 +21,6 @@ namespace { constexpr auto DATA_FILE_EXTENSION = ".bin"; -constexpr auto MARKS_FILE_EXTENSION = ".mrk"; constexpr auto INDEX_FILE_EXTENSION = ".idx"; } @@ -33,13 +33,22 @@ IMergedBlockOutputStream::IMergedBlockOutputStream( size_t min_compress_block_size_, size_t max_compress_block_size_, CompressionCodecPtr codec_, - size_t aio_threshold_) - : storage(storage_), - min_compress_block_size(min_compress_block_size_), - max_compress_block_size(max_compress_block_size_), - aio_threshold(aio_threshold_), - codec(std::move(codec_)) + size_t aio_threshold_, + bool blocks_are_granules_size_, + const MergeTreeIndexGranularity & index_granularity_) + : storage(storage_) + , min_compress_block_size(min_compress_block_size_) + , max_compress_block_size(max_compress_block_size_) + , aio_threshold(aio_threshold_) + , marks_file_extension(storage.index_granularity_info.marks_file_extension) + , mark_size_in_bytes(storage.index_granularity_info.mark_size_in_bytes) + , blocks_are_granules_size(blocks_are_granules_size_) + , index_granularity(index_granularity_) + , compute_granularity(index_granularity.empty()) + , codec(std::move(codec_)) { + if (blocks_are_granules_size && !index_granularity.empty()) + throw Exception("Can't take information about index granularity from blocks, when non empty index_granularity array specified", ErrorCodes::LOGICAL_ERROR); } @@ -65,7 +74,7 @@ void IMergedBlockOutputStream::addStreams( column_streams[stream_name] = std::make_unique( stream_name, path + stream_name, DATA_FILE_EXTENSION, - path + stream_name, MARKS_FILE_EXTENSION, + path + stream_name, marks_file_extension, effective_codec, max_compress_block_size, estimated_size, @@ -96,61 +105,68 @@ IDataType::OutputStreamGetter IMergedBlockOutputStream::createStreamGetter( }; } +void fillIndexGranularityImpl( + const Block & block, + size_t index_granularity_bytes, + size_t fixed_index_granularity_rows, + bool blocks_are_granules, + size_t index_offset, + MergeTreeIndexGranularity & index_granularity) +{ + size_t rows_in_block = block.rows(); + size_t index_granularity_for_block; + if (index_granularity_bytes == 0) + index_granularity_for_block = fixed_index_granularity_rows; + else + { + size_t block_size_in_memory = block.bytes(); + if (blocks_are_granules) + index_granularity_for_block = rows_in_block; + else if (block_size_in_memory >= index_granularity_bytes) + { + size_t granules_in_block = block_size_in_memory / index_granularity_bytes; + index_granularity_for_block = rows_in_block / granules_in_block; + } + else + { + size_t size_of_row_in_bytes = block_size_in_memory / rows_in_block; + index_granularity_for_block = index_granularity_bytes / size_of_row_in_bytes; + } + } + if (index_granularity_for_block == 0) /// very rare case when index granularity bytes less then single row + index_granularity_for_block = 1; -void IMergedBlockOutputStream::writeData( + for (size_t current_row = index_offset; current_row < rows_in_block; current_row += index_granularity_for_block) + index_granularity.appendMark(index_granularity_for_block); + +} + +void IMergedBlockOutputStream::fillIndexGranularity(const Block & block) +{ + fillIndexGranularityImpl( + block, + storage.index_granularity_info.index_granularity_bytes, + storage.index_granularity_info.fixed_index_granularity, + blocks_are_granules_size, + index_offset, + index_granularity); +} + +size_t IMergedBlockOutputStream::writeSingleGranule( const String & name, const IDataType & type, const IColumn & column, WrittenOffsetColumns & offset_columns, bool skip_offsets, - IDataType::SerializeBinaryBulkStatePtr & serialization_state) + IDataType::SerializeBinaryBulkStatePtr & serialization_state, + IDataType::SerializeBinaryBulkSettings & serialize_settings, + size_t from_row, + size_t number_of_rows, + bool write_marks) { - auto & settings = storage.global_context.getSettingsRef(); - IDataType::SerializeBinaryBulkSettings serialize_settings; - serialize_settings.getter = createStreamGetter(name, offset_columns, skip_offsets); - serialize_settings.low_cardinality_max_dictionary_size = settings.low_cardinality_max_dictionary_size; - serialize_settings.low_cardinality_use_single_dictionary_for_part = settings.low_cardinality_use_single_dictionary_for_part != 0; - - size_t size = column.size(); - size_t prev_mark = 0; - while (prev_mark < size) + if (write_marks) { - UInt64 limit = 0; - - /// If there is `index_offset`, then the first mark goes not immediately, but after this number of rows. - if (prev_mark == 0 && index_offset != 0) - limit = index_offset; - else - { - limit = storage.index_granularity; - - /// Write marks. - type.enumerateStreams([&] (const IDataType::SubstreamPath & substream_path) - { - bool is_offsets = !substream_path.empty() && substream_path.back().type == IDataType::Substream::ArraySizes; - if (is_offsets && skip_offsets) - return; - - String stream_name = IDataType::getFileNameForStream(name, substream_path); - - /// Don't write offsets more than one time for Nested type. - if (is_offsets && offset_columns.count(stream_name)) - return; - - ColumnStream & stream = *column_streams[stream_name]; - - /// There could already be enough data to compress into the new block. - if (stream.compressed.offset() >= min_compress_block_size) - stream.compressed.next(); - - writeIntBinary(stream.plain_hashing.count(), stream.marks); - writeIntBinary(stream.compressed.offset(), stream.marks); - }, serialize_settings.path); - } - - type.serializeBinaryBulkWithMultipleStreams(column, prev_mark, limit, serialize_settings, serialization_state); - - /// So that instead of the marks pointing to the end of the compressed block, there were marks pointing to the beginning of the next one. + /// Write marks. type.enumerateStreams([&] (const IDataType::SubstreamPath & substream_path) { bool is_offsets = !substream_path.empty() && substream_path.back().type == IDataType::Substream::ArraySizes; @@ -163,10 +179,94 @@ void IMergedBlockOutputStream::writeData( if (is_offsets && offset_columns.count(stream_name)) return; - column_streams[stream_name]->compressed.nextIfAtEnd(); - }, serialize_settings.path); + ColumnStream & stream = *column_streams[stream_name]; - prev_mark += limit; + /// There could already be enough data to compress into the new block. + if (stream.compressed.offset() >= min_compress_block_size) + stream.compressed.next(); + + writeIntBinary(stream.plain_hashing.count(), stream.marks); + writeIntBinary(stream.compressed.offset(), stream.marks); + if (storage.index_granularity_info.is_adaptive) + writeIntBinary(number_of_rows, stream.marks); + }, serialize_settings.path); + } + + type.serializeBinaryBulkWithMultipleStreams(column, from_row, number_of_rows, serialize_settings, serialization_state); + + /// So that instead of the marks pointing to the end of the compressed block, there were marks pointing to the beginning of the next one. + type.enumerateStreams([&] (const IDataType::SubstreamPath & substream_path) + { + bool is_offsets = !substream_path.empty() && substream_path.back().type == IDataType::Substream::ArraySizes; + if (is_offsets && skip_offsets) + return; + + String stream_name = IDataType::getFileNameForStream(name, substream_path); + + /// Don't write offsets more than one time for Nested type. + if (is_offsets && offset_columns.count(stream_name)) + return; + + column_streams[stream_name]->compressed.nextIfAtEnd(); + }, serialize_settings.path); + + return from_row + number_of_rows; +} + +std::pair IMergedBlockOutputStream::writeColumn( + const String & name, + const IDataType & type, + const IColumn & column, + WrittenOffsetColumns & offset_columns, + bool skip_offsets, + IDataType::SerializeBinaryBulkStatePtr & serialization_state, + size_t from_mark) +{ + auto & settings = storage.global_context.getSettingsRef(); + IDataType::SerializeBinaryBulkSettings serialize_settings; + serialize_settings.getter = createStreamGetter(name, offset_columns, skip_offsets); + serialize_settings.low_cardinality_max_dictionary_size = settings.low_cardinality_max_dictionary_size; + serialize_settings.low_cardinality_use_single_dictionary_for_part = settings.low_cardinality_use_single_dictionary_for_part != 0; + + size_t total_rows = column.size(); + size_t current_row = 0; + size_t current_column_mark = from_mark; + while (current_row < total_rows) + { + size_t rows_to_write; + bool write_marks = true; + + /// If there is `index_offset`, then the first mark goes not immediately, but after this number of rows. + if (current_row == 0 && index_offset != 0) + { + write_marks = false; + rows_to_write = index_offset; + } + else + { + if (index_granularity.getMarksCount() <= current_column_mark) + throw Exception( + "Incorrect size of index granularity expect mark " + toString(current_column_mark) + " totally have marks " + toString(index_granularity.getMarksCount()), + ErrorCodes::LOGICAL_ERROR); + + rows_to_write = index_granularity.getMarkRows(current_column_mark); + } + + current_row = writeSingleGranule( + name, + type, + column, + offset_columns, + skip_offsets, + serialization_state, + serialize_settings, + current_row, + rows_to_write, + write_marks + ); + + if (write_marks) + current_column_mark++; } /// Memoize offsets for Nested types, that are already written. They will not be written again for next columns of Nested structure. @@ -179,6 +279,8 @@ void IMergedBlockOutputStream::writeData( offset_columns.insert(stream_name); } }, serialize_settings.path); + + return std::make_pair(current_column_mark, current_row - total_rows); } @@ -237,11 +339,14 @@ MergedBlockOutputStream::MergedBlockOutputStream( MergeTreeData & storage_, String part_path_, const NamesAndTypesList & columns_list_, - CompressionCodecPtr default_codec_) + CompressionCodecPtr default_codec_, + bool blocks_are_granules_size_) : IMergedBlockOutputStream( storage_, storage_.global_context.getSettings().min_compress_block_size, storage_.global_context.getSettings().max_compress_block_size, default_codec_, - storage_.global_context.getSettings().min_bytes_to_use_direct_io), + storage_.global_context.getSettings().min_bytes_to_use_direct_io, + blocks_are_granules_size_, + {}), columns_list(columns_list_), part_path(part_path_) { init(); @@ -258,11 +363,12 @@ MergedBlockOutputStream::MergedBlockOutputStream( const NamesAndTypesList & columns_list_, CompressionCodecPtr default_codec_, const MergeTreeData::DataPart::ColumnToSize & merged_column_to_size_, - size_t aio_threshold_) + size_t aio_threshold_, + bool blocks_are_granules_size_) : IMergedBlockOutputStream( storage_, storage_.global_context.getSettings().min_compress_block_size, storage_.global_context.getSettings().max_compress_block_size, default_codec_, - aio_threshold_), + aio_threshold_, blocks_are_granules_size_, {}), columns_list(columns_list_), part_path(part_path_) { init(); @@ -392,6 +498,16 @@ void MergedBlockOutputStream::writeSuffixAndFinalizePart( checksums.files["count.txt"].file_hash = count_out_hashing.getHash(); } + if (new_part->ttl_infos.part_min_ttl) + { + /// Write a file with ttl infos in json format. + WriteBufferFromFile out(part_path + "ttl.txt", 4096); + HashingWriteBuffer out_hashing(out); + new_part->ttl_infos.write(out_hashing); + checksums.files["ttl.txt"].file_size = out_hashing.count(); + checksums.files["ttl.txt"].file_hash = out_hashing.getHash(); + } + { /// Write a file with a description of columns. WriteBufferFromFile out(part_path + "columns.txt", 4096); @@ -405,12 +521,12 @@ void MergedBlockOutputStream::writeSuffixAndFinalizePart( } new_part->rows_count = rows_count; - new_part->marks_count = marks_count; new_part->modification_time = time(nullptr); new_part->columns = *total_column_list; new_part->index.assign(std::make_move_iterator(index_columns.begin()), std::make_move_iterator(index_columns.end())); new_part->checksums = checksums; new_part->bytes_on_disk = checksums.getTotalSizeOnDisk(); + new_part->index_granularity = index_granularity; } void MergedBlockOutputStream::init() @@ -431,7 +547,7 @@ void MergedBlockOutputStream::init() std::make_unique( stream_name, part_path + stream_name, INDEX_FILE_EXTENSION, - part_path + stream_name, MARKS_FILE_EXTENSION, + part_path + stream_name, marks_file_extension, codec, max_compress_block_size, 0, aio_threshold)); skip_indices_aggregators.push_back(index->createIndexAggregator()); @@ -444,6 +560,14 @@ void MergedBlockOutputStream::writeImpl(const Block & block, const IColumn::Perm { block.checkNumberOfRows(); size_t rows = block.rows(); + if (!rows) + return; + + /// Fill index granularity for this block + /// if it's unknown (in case of insert data or horizontal merge, + /// but not in case of vertical merge) + if (compute_granularity) + fillIndexGranularity(block); /// The set of written offset columns so that you do not write shared offsets of nested structures columns several times WrittenOffsetColumns offset_columns; @@ -509,6 +633,7 @@ void MergedBlockOutputStream::writeImpl(const Block & block, const IColumn::Perm } } + size_t new_index_offset = 0; /// Now write the data. auto it = columns_list.begin(); for (size_t i = 0; i < columns_list.size(); ++i, ++it) @@ -522,23 +647,23 @@ void MergedBlockOutputStream::writeImpl(const Block & block, const IColumn::Perm if (primary_key_column_name_to_position.end() != primary_column_it) { const auto & primary_column = *primary_key_columns[primary_column_it->second].column; - writeData(column.name, *column.type, primary_column, offset_columns, false, serialization_states[i]); + std::tie(std::ignore, new_index_offset) = writeColumn(column.name, *column.type, primary_column, offset_columns, false, serialization_states[i], current_mark); } else if (skip_indexes_column_name_to_position.end() != skip_index_column_it) { const auto & index_column = *skip_indexes_columns[skip_index_column_it->second].column; - writeData(column.name, *column.type, index_column, offset_columns, false, serialization_states[i]); + writeColumn(column.name, *column.type, index_column, offset_columns, false, serialization_states[i], current_mark); } else { /// We rearrange the columns that are not included in the primary key here; Then the result is released - to save RAM. ColumnPtr permuted_column = column.column->permute(*permutation, 0); - writeData(column.name, *column.type, *permuted_column, offset_columns, false, serialization_states[i]); + std::tie(std::ignore, new_index_offset) = writeColumn(column.name, *column.type, *permuted_column, offset_columns, false, serialization_states[i], current_mark); } } else { - writeData(column.name, *column.type, *column.column, offset_columns, false, serialization_states[i]); + std::tie(std::ignore, new_index_offset) = writeColumn(column.name, *column.type, *column.column, offset_columns, false, serialization_states[i], current_mark); } } @@ -547,13 +672,14 @@ void MergedBlockOutputStream::writeImpl(const Block & block, const IColumn::Perm { /// Creating block for update Block indices_update_block(skip_indexes_columns); - /// Filling and writing skip indices like in IMergedBlockOutputStream::writeData + /// Filling and writing skip indices like in IMergedBlockOutputStream::writeColumn for (size_t i = 0; i < storage.skip_indices.size(); ++i) { const auto index = storage.skip_indices[i]; auto & stream = *skip_indices_streams[i]; size_t prev_pos = 0; + size_t current_mark = 0; while (prev_pos < rows) { UInt64 limit = 0; @@ -563,7 +689,7 @@ void MergedBlockOutputStream::writeImpl(const Block & block, const IColumn::Perm } else { - limit = storage.index_granularity; + limit = index_granularity.getMarkRows(current_mark); if (skip_indices_aggregators[i]->empty()) { skip_indices_aggregators[i] = index->createIndexAggregator(); @@ -574,6 +700,10 @@ void MergedBlockOutputStream::writeImpl(const Block & block, const IColumn::Perm writeIntBinary(stream.plain_hashing.count(), stream.marks); writeIntBinary(stream.compressed.offset(), stream.marks); + /// Actually this numbers is redundant, but we have to store them + /// to be compatible with normal .mrk2 file format + if (storage.index_granularity_info.is_adaptive) + writeIntBinary(1UL, stream.marks); } } @@ -592,6 +722,7 @@ void MergedBlockOutputStream::writeImpl(const Block & block, const IColumn::Perm } } prev_pos = pos; + current_mark++; } } } @@ -606,7 +737,7 @@ void MergedBlockOutputStream::writeImpl(const Block & block, const IColumn::Perm auto temporarily_disable_memory_tracker = getCurrentMemoryTrackerActionLock(); /// Write index. The index contains Primary Key value for each `index_granularity` row. - for (size_t i = index_offset; i < rows; i += storage.index_granularity) + for (size_t i = index_offset; i < rows;) { if (storage.hasPrimaryKey()) { @@ -618,12 +749,15 @@ void MergedBlockOutputStream::writeImpl(const Block & block, const IColumn::Perm } } - ++marks_count; + ++current_mark; + if (current_mark < index_granularity.getMarksCount()) + i += index_granularity.getMarkRows(current_mark); + else + break; } } - size_t written_for_last_mark = (storage.index_granularity - index_offset + rows) % storage.index_granularity; - index_offset = (storage.index_granularity - written_for_last_mark) % storage.index_granularity; + index_offset = new_index_offset; } @@ -632,11 +766,14 @@ void MergedBlockOutputStream::writeImpl(const Block & block, const IColumn::Perm MergedColumnOnlyOutputStream::MergedColumnOnlyOutputStream( MergeTreeData & storage_, const Block & header_, String part_path_, bool sync_, CompressionCodecPtr default_codec_, bool skip_offsets_, - WrittenOffsetColumns & already_written_offset_columns) + WrittenOffsetColumns & already_written_offset_columns, + const MergeTreeIndexGranularity & index_granularity_) : IMergedBlockOutputStream( storage_, storage_.global_context.getSettings().min_compress_block_size, storage_.global_context.getSettings().max_compress_block_size, default_codec_, - storage_.global_context.getSettings().min_bytes_to_use_direct_io), + storage_.global_context.getSettings().min_bytes_to_use_direct_io, + false, + index_granularity_), header(header_), part_path(part_path_), sync(sync_), skip_offsets(skip_offsets_), already_written_offset_columns(already_written_offset_columns) { @@ -666,17 +803,17 @@ void MergedColumnOnlyOutputStream::write(const Block & block) initialized = true; } - size_t rows = block.rows(); - + size_t new_index_offset = 0; + size_t new_current_mark = 0; WrittenOffsetColumns offset_columns = already_written_offset_columns; for (size_t i = 0; i < block.columns(); ++i) { const ColumnWithTypeAndName & column = block.safeGetByPosition(i); - writeData(column.name, *column.type, *column.column, offset_columns, skip_offsets, serialization_states[i]); + std::tie(new_current_mark, new_index_offset) = writeColumn(column.name, *column.type, *column.column, offset_columns, skip_offsets, serialization_states[i], current_mark); } - size_t written_for_last_mark = (storage.index_granularity - index_offset + rows) % storage.index_granularity; - index_offset = (storage.index_granularity - written_for_last_mark) % storage.index_granularity; + index_offset = new_index_offset; + current_mark = new_current_mark; } void MergedColumnOnlyOutputStream::writeSuffix() diff --git a/dbms/src/Storages/MergeTree/MergedBlockOutputStream.h b/dbms/src/Storages/MergeTree/MergedBlockOutputStream.h index 06acba26804..2026444e327 100644 --- a/dbms/src/Storages/MergeTree/MergedBlockOutputStream.h +++ b/dbms/src/Storages/MergeTree/MergedBlockOutputStream.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include @@ -21,7 +22,9 @@ public: size_t min_compress_block_size_, size_t max_compress_block_size_, CompressionCodecPtr default_codec_, - size_t aio_threshold_); + size_t aio_threshold_, + bool blocks_are_granules_size_, + const MergeTreeIndexGranularity & index_granularity_); using WrittenOffsetColumns = std::set; @@ -72,8 +75,33 @@ protected: IDataType::OutputStreamGetter createStreamGetter(const String & name, WrittenOffsetColumns & offset_columns, bool skip_offsets); /// Write data of one column. - void writeData(const String & name, const IDataType & type, const IColumn & column, WrittenOffsetColumns & offset_columns, - bool skip_offsets, IDataType::SerializeBinaryBulkStatePtr & serialization_state); + /// Return how many marks were written and + /// how many rows were written for last mark + std::pair writeColumn( + const String & name, + const IDataType & type, + const IColumn & column, + WrittenOffsetColumns & offset_columns, + bool skip_offsets, + IDataType::SerializeBinaryBulkStatePtr & serialization_state, + size_t from_mark + ); + + /// Write single granule of one column (rows between 2 marks) + size_t writeSingleGranule( + const String & name, + const IDataType & type, + const IColumn & column, + WrittenOffsetColumns & offset_columns, + bool skip_offsets, + IDataType::SerializeBinaryBulkStatePtr & serialization_state, + IDataType::SerializeBinaryBulkSettings & serialize_settings, + size_t from_row, + size_t number_of_rows, + bool write_marks); + + /// Count index_granularity for block and store in `index_granularity` + void fillIndexGranularity(const Block & block); MergeTreeData & storage; @@ -87,6 +115,15 @@ protected: size_t aio_threshold; + size_t current_mark = 0; + + const std::string marks_file_extension; + const size_t mark_size_in_bytes; + const bool blocks_are_granules_size; + + MergeTreeIndexGranularity index_granularity; + + const bool compute_granularity; CompressionCodecPtr codec; }; @@ -101,7 +138,8 @@ public: MergeTreeData & storage_, String part_path_, const NamesAndTypesList & columns_list_, - CompressionCodecPtr default_codec_); + CompressionCodecPtr default_codec_, + bool blocks_are_granules_size_ = false); MergedBlockOutputStream( MergeTreeData & storage_, @@ -109,7 +147,8 @@ public: const NamesAndTypesList & columns_list_, CompressionCodecPtr default_codec_, const MergeTreeData::DataPart::ColumnToSize & merged_column_to_size_, - size_t aio_threshold_); + size_t aio_threshold_, + bool blocks_are_granules_size_ = false); std::string getPartPath() const; @@ -125,11 +164,17 @@ public: void writeSuffix() override; + /// Finilize writing part and fill inner structures void writeSuffixAndFinalizePart( MergeTreeData::MutableDataPartPtr & new_part, const NamesAndTypesList * total_columns_list = nullptr, MergeTreeData::DataPart::Checksums * additional_column_checksums = nullptr); + const MergeTreeIndexGranularity & getIndexGranularity() const + { + return index_granularity; + } + private: void init(); @@ -144,7 +189,6 @@ private: String part_path; size_t rows_count = 0; - size_t marks_count = 0; std::unique_ptr index_file_stream; std::unique_ptr index_stream; @@ -166,7 +210,8 @@ public: MergedColumnOnlyOutputStream( MergeTreeData & storage_, const Block & header_, String part_path_, bool sync_, CompressionCodecPtr default_codec_, bool skip_offsets_, - WrittenOffsetColumns & already_written_offset_columns); + WrittenOffsetColumns & already_written_offset_columns, + const MergeTreeIndexGranularity & index_granularity_); Block getHeader() const override { return header; } void write(const Block & block) override; diff --git a/dbms/src/Storages/MergeTree/RangesInDataPart.h b/dbms/src/Storages/MergeTree/RangesInDataPart.h index cf4484fde95..69d38686cc9 100644 --- a/dbms/src/Storages/MergeTree/RangesInDataPart.h +++ b/dbms/src/Storages/MergeTree/RangesInDataPart.h @@ -21,9 +21,13 @@ struct RangesInDataPart : data_part{data_part}, part_index_in_query{part_index_in_query}, ranges{ranges} { } + + size_t getRowsCount() const + { + return data_part->index_granularity.getRowsCountInRanges(ranges); + } }; using RangesInDataParts = std::vector; - } diff --git a/dbms/src/Storages/MergeTree/ReplicatedMergeTreePartCheckThread.cpp b/dbms/src/Storages/MergeTree/ReplicatedMergeTreePartCheckThread.cpp index a745af1e414..41331876e58 100644 --- a/dbms/src/Storages/MergeTree/ReplicatedMergeTreePartCheckThread.cpp +++ b/dbms/src/Storages/MergeTree/ReplicatedMergeTreePartCheckThread.cpp @@ -233,8 +233,7 @@ void ReplicatedMergeTreePartCheckThread::checkPart(const String & part_name) zk_part_header.getChecksums().checkEqual(local_part_header.getChecksums(), true); checkDataPart( - storage.data.getFullPath() + part_name, - storage.data.index_granularity, + part, true, storage.data.primary_key_data_types, storage.data.skip_indices, diff --git a/dbms/src/Storages/MergeTree/ReplicatedMergeTreeTableMetadata.cpp b/dbms/src/Storages/MergeTree/ReplicatedMergeTreeTableMetadata.cpp index 88b2e6ea1c7..df2e6756dbe 100644 --- a/dbms/src/Storages/MergeTree/ReplicatedMergeTreeTableMetadata.cpp +++ b/dbms/src/Storages/MergeTree/ReplicatedMergeTreeTableMetadata.cpp @@ -28,7 +28,7 @@ ReplicatedMergeTreeTableMetadata::ReplicatedMergeTreeTableMetadata(const MergeTr date_column = data.minmax_idx_columns[data.minmax_idx_date_column_pos]; sampling_expression = formattedAST(data.sample_by_ast); - index_granularity = data.index_granularity; + index_granularity = data.index_granularity_info.fixed_index_granularity; merging_params_mode = static_cast(data.merging_params.mode); sign_column = data.merging_params.sign_column; @@ -46,6 +46,8 @@ ReplicatedMergeTreeTableMetadata::ReplicatedMergeTreeTableMetadata(const MergeTr partition_key = formattedAST(MergeTreeData::extractKeyExpressionList(data.partition_by_ast)); skip_indices = data.getIndicesDescription().toString(); + index_granularity_bytes = data.index_granularity_info.index_granularity_bytes; + ttl_table = formattedAST(data.ttl_table_ast); } void ReplicatedMergeTreeTableMetadata::write(WriteBuffer & out) const @@ -67,8 +69,14 @@ void ReplicatedMergeTreeTableMetadata::write(WriteBuffer & out) const if (!sorting_key.empty()) out << "sorting key: " << sorting_key << "\n"; + if (!ttl_table.empty()) + out << "ttl: " << ttl_table << "\n"; + if (!skip_indices.empty()) out << "indices: " << skip_indices << "\n"; + + if (index_granularity_bytes != 0) + out << "granularity bytes: " << index_granularity_bytes << "\n"; } String ReplicatedMergeTreeTableMetadata::toString() const @@ -101,6 +109,14 @@ void ReplicatedMergeTreeTableMetadata::read(ReadBuffer & in) if (checkString("indices: ", in)) in >> skip_indices >> "\n"; + + if (checkString("granularity bytes: ", in)) + in >> index_granularity_bytes >> "\n"; + else + index_granularity_bytes = 0; + + if (checkString("ttl: ", in)) + in >> ttl_table >> "\n"; } ReplicatedMergeTreeTableMetadata ReplicatedMergeTreeTableMetadata::parse(const String & s) @@ -183,6 +199,21 @@ ReplicatedMergeTreeTableMetadata::checkAndFindDiff(const ReplicatedMergeTreeTabl ErrorCodes::METADATA_MISMATCH); } + if (ttl_table != from_zk.ttl_table) + { + if (allow_alter) + { + diff.ttl_table_changed = true; + diff.new_ttl_table = from_zk.ttl_table; + } + else + throw Exception( + "Existing table metadata in ZooKeeper differs in ttl." + " Stored in ZooKeeper: " + from_zk.ttl_table + + ", local: " + ttl_table, + ErrorCodes::METADATA_MISMATCH); + } + if (skip_indices != from_zk.skip_indices) { if (allow_alter) @@ -198,6 +229,12 @@ ReplicatedMergeTreeTableMetadata::checkAndFindDiff(const ReplicatedMergeTreeTabl ErrorCodes::METADATA_MISMATCH); } + if (index_granularity_bytes != from_zk.index_granularity_bytes) + throw Exception("Existing table metadata in ZooKeeper differs in index granularity bytes." + " Stored in ZooKeeper: " + DB::toString(from_zk.index_granularity_bytes) + + ", local: " + DB::toString(index_granularity_bytes), + ErrorCodes::METADATA_MISMATCH); + return diff; } diff --git a/dbms/src/Storages/MergeTree/ReplicatedMergeTreeTableMetadata.h b/dbms/src/Storages/MergeTree/ReplicatedMergeTreeTableMetadata.h index e350058473b..55cfdb1494d 100644 --- a/dbms/src/Storages/MergeTree/ReplicatedMergeTreeTableMetadata.h +++ b/dbms/src/Storages/MergeTree/ReplicatedMergeTreeTableMetadata.h @@ -26,6 +26,8 @@ struct ReplicatedMergeTreeTableMetadata String partition_key; String sorting_key; String skip_indices; + UInt64 index_granularity_bytes; + String ttl_table; ReplicatedMergeTreeTableMetadata() = default; explicit ReplicatedMergeTreeTableMetadata(const MergeTreeData & data); @@ -44,6 +46,9 @@ struct ReplicatedMergeTreeTableMetadata bool skip_indices_changed = false; String new_skip_indices; + bool ttl_table_changed = false; + String new_ttl_table; + bool empty() const { return !sorting_key_changed && !skip_indices_changed; } }; diff --git a/dbms/src/Storages/MergeTree/TTLMergeSelector.cpp b/dbms/src/Storages/MergeTree/TTLMergeSelector.cpp new file mode 100644 index 00000000000..3669bd1e2cc --- /dev/null +++ b/dbms/src/Storages/MergeTree/TTLMergeSelector.cpp @@ -0,0 +1,68 @@ +#include + +#include +#include + + +namespace DB +{ + +IMergeSelector::PartsInPartition TTLMergeSelector::select( + const Partitions & partitions, + const size_t max_total_size_to_merge) +{ + using Iterator = IMergeSelector::PartsInPartition::const_iterator; + Iterator best_begin; + ssize_t partition_to_merge_index = -1; + time_t partition_to_merge_min_ttl = 0; + + for (size_t i = 0; i < partitions.size(); ++i) + { + for (auto it = partitions[i].begin(); it != partitions[i].end(); ++it) + { + if (it->min_ttl && (partition_to_merge_index == -1 || it->min_ttl < partition_to_merge_min_ttl)) + { + partition_to_merge_min_ttl = it->min_ttl; + partition_to_merge_index = i; + best_begin = it; + } + } + } + + if (partition_to_merge_index == -1 || partition_to_merge_min_ttl > current_time) + return {}; + + const auto & best_partition = partitions[partition_to_merge_index]; + Iterator best_end = best_begin + 1; + size_t total_size = 0; + + while (true) + { + if (!best_begin->min_ttl || best_begin->min_ttl > current_time + || (max_total_size_to_merge && total_size > max_total_size_to_merge)) + { + ++best_begin; + break; + } + + total_size += best_begin->size; + if (best_begin == best_partition.begin()) + break; + + --best_begin; + } + + while (best_end != best_partition.end()) + { + if (!best_end->min_ttl || best_end->min_ttl > current_time + || (max_total_size_to_merge && total_size > max_total_size_to_merge)) + break; + + total_size += best_end->size; + ++best_end; + } + + return PartsInPartition(best_begin, best_end); +} + +} diff --git a/dbms/src/Storages/MergeTree/TTLMergeSelector.h b/dbms/src/Storages/MergeTree/TTLMergeSelector.h new file mode 100644 index 00000000000..3c035d03a99 --- /dev/null +++ b/dbms/src/Storages/MergeTree/TTLMergeSelector.h @@ -0,0 +1,26 @@ +#pragma once + +#include + + +namespace DB +{ + +/** Merge selector, which is used to remove values with expired ttl. + * It selects parts to merge by greedy algorithm: + * 1. Finds part with the most earliest expired ttl and includes it to result. + * 2. Tries to find the longest range of parts with expired ttl, that includes part from step 1. + */ +class TTLMergeSelector : public IMergeSelector +{ +public: + explicit TTLMergeSelector(time_t current_time_) : current_time(current_time_) {} + + PartsInPartition select( + const Partitions & partitions, + const size_t max_total_size_to_merge) override; +private: + time_t current_time; +}; + +} diff --git a/dbms/src/Storages/MergeTree/checkDataPart.cpp b/dbms/src/Storages/MergeTree/checkDataPart.cpp index ef23df19a5a..bf1bfb2cafa 100644 --- a/dbms/src/Storages/MergeTree/checkDataPart.cpp +++ b/dbms/src/Storages/MergeTree/checkDataPart.cpp @@ -1,8 +1,10 @@ +#include #include #include #include +#include #include #include #include @@ -36,13 +38,16 @@ class Stream { public: String base_name; - String bin_file_ext; + String bin_file_extension; + String mrk_file_extension; String bin_file_path; String mrk_file_path; private: + const MergeTreeIndexGranularity & index_granularity; ReadBufferFromFile file_buf; HashingReadBuffer compressed_hashing_buf; CompressedReadBuffer uncompressing_buf; + size_t mark_position = 0; public: HashingReadBuffer uncompressed_hashing_buf; @@ -51,18 +56,24 @@ private: public: HashingReadBuffer mrk_hashing_buf; - Stream(const String & path, const String & base_name, const String & bin_file_ext = ".bin") - : - base_name(base_name), - bin_file_ext(bin_file_ext), - bin_file_path(path + base_name + bin_file_ext), - mrk_file_path(path + base_name + ".mrk"), - file_buf(bin_file_path), - compressed_hashing_buf(file_buf), - uncompressing_buf(compressed_hashing_buf), - uncompressed_hashing_buf(uncompressing_buf), - mrk_file_buf(mrk_file_path), - mrk_hashing_buf(mrk_file_buf) + Stream( + const String & path, + const String & base_name, + const String & bin_file_extension_, + const String & mrk_file_extension_, + const MergeTreeIndexGranularity & index_granularity_) + : base_name(base_name) + , bin_file_extension(bin_file_extension_) + , mrk_file_extension(mrk_file_extension_) + , bin_file_path(path + base_name + bin_file_extension) + , mrk_file_path(path + base_name + mrk_file_extension) + , index_granularity(index_granularity_) + , file_buf(bin_file_path) + , compressed_hashing_buf(file_buf) + , uncompressing_buf(compressed_hashing_buf) + , uncompressed_hashing_buf(uncompressing_buf) + , mrk_file_buf(mrk_file_path) + , mrk_hashing_buf(mrk_file_buf) {} void assertMark() @@ -70,6 +81,11 @@ public: MarkInCompressedFile mrk_mark; readIntBinary(mrk_mark.offset_in_compressed_file, mrk_hashing_buf); readIntBinary(mrk_mark.offset_in_decompressed_block, mrk_hashing_buf); + size_t mrk_rows; + if (mrk_file_extension == ".mrk2") + readIntBinary(mrk_rows, mrk_hashing_buf); + else + mrk_rows = index_granularity.getMarkRows(mark_position); bool has_alternative_mark = false; MarkInCompressedFile alternative_data_mark = {}; @@ -85,23 +101,31 @@ public: alternative_data_mark.offset_in_decompressed_block = uncompressed_hashing_buf.offset(); if (mrk_mark == alternative_data_mark) + { + mark_position++; return; + } uncompressed_hashing_buf.next(); /// At the end of file `compressed_hashing_buf.count()` points to the end of the file even before `calling next()`, /// and the check you just performed does not work correctly. For simplicity, we will not check the last mark. if (uncompressed_hashing_buf.eof()) + { + mark_position++; return; + } } data_mark.offset_in_compressed_file = compressed_hashing_buf.count() - uncompressing_buf.getSizeCompressed(); data_mark.offset_in_decompressed_block = uncompressed_hashing_buf.offset(); - if (mrk_mark != data_mark) - throw Exception("Incorrect mark: " + data_mark.toString() + + if (mrk_mark != data_mark || mrk_rows != index_granularity.getMarkRows(mark_position)) + throw Exception("Incorrect mark: " + data_mark.toStringWithRows(index_granularity.getMarkRows(mark_position)) + (has_alternative_mark ? " or " + alternative_data_mark.toString() : "") + " in data, " + - mrk_mark.toString() + " in " + mrk_file_path + " file", ErrorCodes::INCORRECT_MARK); + mrk_mark.toStringWithRows(mrk_rows) + " in " + mrk_file_path + " file", ErrorCodes::INCORRECT_MARK); + + mark_position++; } void assertEnd() @@ -120,11 +144,11 @@ public: void saveChecksums(MergeTreeData::DataPart::Checksums & checksums) { - checksums.files[base_name + bin_file_ext] = MergeTreeData::DataPart::Checksums::Checksum( + checksums.files[base_name + bin_file_extension] = MergeTreeData::DataPart::Checksums::Checksum( compressed_hashing_buf.count(), compressed_hashing_buf.getHash(), uncompressed_hashing_buf.count(), uncompressed_hashing_buf.getHash()); - checksums.files[base_name + ".mrk"] = MergeTreeData::DataPart::Checksums::Checksum( + checksums.files[base_name + mrk_file_extension] = MergeTreeData::DataPart::Checksums::Checksum( mrk_hashing_buf.count(), mrk_hashing_buf.getHash()); } }; @@ -133,8 +157,9 @@ public: MergeTreeData::DataPart::Checksums checkDataPart( - const String & path_, - size_t index_granularity, + const String & full_path, + const MergeTreeIndexGranularity & adaptive_index_granularity, + const String & mrk_file_extension, bool require_checksums, const DataTypes & primary_key_data_types, const MergeTreeIndices & indices, @@ -153,7 +178,7 @@ MergeTreeData::DataPart::Checksums checkDataPart( CurrentMetrics::Increment metric_increment{CurrentMetrics::ReplicatedChecks}; - String path = path_; + String path = full_path; if (!path.empty() && path.back() != '/') path += "/"; @@ -211,14 +236,15 @@ MergeTreeData::DataPart::Checksums checkDataPart( checksums_data.files["primary.idx"] = MergeTreeData::DataPart::Checksums::Checksum(primary_idx_size, hashing_buf.getHash()); } - /// Optional files count.txt, partition.dat, minmax_*.idx. Just calculate checksums for existing files. + /// Optional files count.txt, partition.dat, minmax_*.idx, ttl.txt. Just calculate checksums for existing files. Poco::DirectoryIterator dir_end; for (Poco::DirectoryIterator dir_it(path); dir_it != dir_end; ++dir_it) { const String & file_name = dir_it.name(); if (file_name == "count.txt" || file_name == "partition.dat" - || (startsWith(file_name, "minmax_") && endsWith(file_name, ".idx"))) + || (startsWith(file_name, "minmax_") && endsWith(file_name, ".idx")) + || file_name == "ttl.txt") { ReadBufferFromFile file_buf(dir_it->path()); HashingReadBuffer hashing_buf(file_buf); @@ -245,7 +271,7 @@ MergeTreeData::DataPart::Checksums checkDataPart( /// Read and check skip indices. for (const auto & index : indices) { - Stream stream(path, index->getFileName(), ".idx"); + Stream stream(path, index->getFileName(), ".idx", mrk_file_extension, adaptive_index_granularity); size_t mark_num = 0; while (!stream.uncompressed_hashing_buf.eof()) @@ -302,8 +328,7 @@ MergeTreeData::DataPart::Checksums checkDataPart( name_type.type->enumerateStreams([&](const IDataType::SubstreamPath & substream_path) { String file_name = IDataType::getFileNameForStream(name_type.name, substream_path); - auto & stream = streams.try_emplace(file_name, path, file_name).first->second; - + auto & stream = streams.try_emplace(file_name, path, file_name, ".bin", mrk_file_extension, adaptive_index_granularity).first->second; try { if (!stream.mrk_hashing_buf.eof()) @@ -320,6 +345,7 @@ MergeTreeData::DataPart::Checksums checkDataPart( } }, settings.path); + size_t rows_after_mark = adaptive_index_granularity.getMarkRows(mark_num); ++mark_num; /// Read index_granularity rows from column. @@ -337,12 +363,12 @@ MergeTreeData::DataPart::Checksums checkDataPart( IDataType::DeserializeBinaryBulkStatePtr state; name_type.type->deserializeBinaryBulkStatePrefix(settings, state); - name_type.type->deserializeBinaryBulkWithMultipleStreams(*tmp_column, index_granularity, settings, state); + name_type.type->deserializeBinaryBulkWithMultipleStreams(*tmp_column, rows_after_mark, settings, state); size_t read_size = tmp_column->size(); column_size += read_size; - if (read_size < index_granularity) + if (read_size < rows_after_mark || mark_num == adaptive_index_granularity.getMarksCount()) break; else if (marks_eof) throw Exception("Unexpected end of mrk file while reading column " + name_type.name, ErrorCodes::CORRUPTED_DATA); @@ -380,14 +406,15 @@ MergeTreeData::DataPart::Checksums checkDataPart( if (!primary_key_data_types.empty()) { - size_t expected_marks = (*rows - 1) / index_granularity + 1; + size_t expected_marks = adaptive_index_granularity.getMarksCount(); if (expected_marks != marks_in_primary_key) + { throw Exception("Size of primary key doesn't match expected number of marks." " Number of rows in columns: " + toString(*rows) - + ", index_granularity: " + toString(index_granularity) + ", expected number of marks: " + toString(expected_marks) + ", size of primary key: " + toString(marks_in_primary_key), ErrorCodes::CORRUPTED_DATA); + } } if (require_checksums || !checksums_txt.files.empty()) @@ -396,4 +423,22 @@ MergeTreeData::DataPart::Checksums checkDataPart( return checksums_data; } +MergeTreeData::DataPart::Checksums checkDataPart( + MergeTreeData::DataPartPtr data_part, + bool require_checksums, + const DataTypes & primary_key_data_types, + const MergeTreeIndices & indices, + std::function is_cancelled) +{ + return checkDataPart( + data_part->getFullPath(), + data_part->index_granularity, + data_part->storage.index_granularity_info.marks_file_extension, + require_checksums, + primary_key_data_types, + indices, + is_cancelled); +} + + } diff --git a/dbms/src/Storages/MergeTree/checkDataPart.h b/dbms/src/Storages/MergeTree/checkDataPart.h index 5a223fce02c..cd7ac2b977f 100644 --- a/dbms/src/Storages/MergeTree/checkDataPart.h +++ b/dbms/src/Storages/MergeTree/checkDataPart.h @@ -13,11 +13,18 @@ namespace DB * Throws an exception if the part is corrupted or if the check fails (TODO: you can try to separate these cases). */ MergeTreeData::DataPart::Checksums checkDataPart( - const String & path, - size_t index_granularity, + MergeTreeData::DataPartPtr data_part, bool require_checksums, const DataTypes & primary_key_data_types, /// Check the primary key. If it is not necessary, pass an empty array. const MergeTreeIndices & indices = {}, /// Check skip indices std::function is_cancelled = []{ return false; }); +MergeTreeData::DataPart::Checksums checkDataPart( + const String & full_path, + const MergeTreeIndexGranularity & index_granularity, + const String & marks_file_extension, + bool require_checksums, + const DataTypes & primary_key_data_types, /// Check the primary key. If it is not necessary, pass an empty array. + const MergeTreeIndices & indices = {}, /// Check skip indices + std::function is_cancelled = []{ return false; }); } diff --git a/dbms/src/Storages/MergeTree/registerStorageMergeTree.cpp b/dbms/src/Storages/MergeTree/registerStorageMergeTree.cpp index b08300bb039..b23a2eedc0e 100644 --- a/dbms/src/Storages/MergeTree/registerStorageMergeTree.cpp +++ b/dbms/src/Storages/MergeTree/registerStorageMergeTree.cpp @@ -572,6 +572,7 @@ static StoragePtr create(const StorageFactory::Arguments & args) ASTPtr order_by_ast; ASTPtr primary_key_ast; ASTPtr sample_by_ast; + ASTPtr ttl_table_ast; IndicesDescription indices_description; MergeTreeSettings storage_settings = args.context.getMergeTreeSettings(); @@ -593,11 +594,15 @@ static StoragePtr create(const StorageFactory::Arguments & args) if (args.storage_def->sample_by) sample_by_ast = args.storage_def->sample_by->ptr(); + if (args.storage_def->ttl_table) + ttl_table_ast = args.storage_def->ttl_table->ptr(); + if (args.query.columns_list && args.query.columns_list->indices) for (const auto & index : args.query.columns_list->indices->children) indices_description.indices.push_back( std::dynamic_pointer_cast(index->clone())); + storage_settings.loadFromQuery(*args.storage_def); } else @@ -636,12 +641,14 @@ static StoragePtr create(const StorageFactory::Arguments & args) zookeeper_path, replica_name, args.attach, args.data_path, args.database_name, args.table_name, args.columns, indices_description, args.context, date_column_name, partition_by_ast, order_by_ast, primary_key_ast, - sample_by_ast, merging_params, storage_settings, args.has_force_restore_data_flag); + sample_by_ast, ttl_table_ast, merging_params, storage_settings, + args.has_force_restore_data_flag); else return StorageMergeTree::create( args.data_path, args.database_name, args.table_name, args.columns, indices_description, args.attach, args.context, date_column_name, partition_by_ast, order_by_ast, - primary_key_ast, sample_by_ast, merging_params, storage_settings, args.has_force_restore_data_flag); + primary_key_ast, sample_by_ast, ttl_table_ast, merging_params, storage_settings, + args.has_force_restore_data_flag); } diff --git a/dbms/src/Storages/StorageBuffer.cpp b/dbms/src/Storages/StorageBuffer.cpp index b92d90231c1..ea0753985d7 100644 --- a/dbms/src/Storages/StorageBuffer.cpp +++ b/dbms/src/Storages/StorageBuffer.cpp @@ -22,8 +22,7 @@ #include #include #include -#include - +#include #include #include #include @@ -341,7 +340,7 @@ public: } /// We distribute the load on the shards by the stream number. - const auto start_shard_num = Poco::ThreadNumber::get() % storage.num_shards; + const auto start_shard_num = getThreadNumber() % storage.num_shards; /// We loop through the buffers, trying to lock mutex. No more than one lap. auto shard_num = start_shard_num; diff --git a/dbms/src/Storages/StorageMergeTree.cpp b/dbms/src/Storages/StorageMergeTree.cpp index 053e5da8302..6ff9959a2f0 100644 --- a/dbms/src/Storages/StorageMergeTree.cpp +++ b/dbms/src/Storages/StorageMergeTree.cpp @@ -59,6 +59,7 @@ StorageMergeTree::StorageMergeTree( const ASTPtr & order_by_ast_, const ASTPtr & primary_key_ast_, const ASTPtr & sample_by_ast_, /// nullptr, if sampling is not supported. + const ASTPtr & ttl_table_ast_, const MergeTreeData::MergingParams & merging_params_, const MergeTreeSettings & settings_, bool has_force_restore_data_flag) @@ -67,7 +68,8 @@ StorageMergeTree::StorageMergeTree( data(database_name, table_name, full_path, columns_, indices_, context_, date_column_name, partition_by_ast_, order_by_ast_, primary_key_ast_, - sample_by_ast_, merging_params_, settings_, false, attach), + sample_by_ast_, ttl_table_ast_, merging_params_, + settings_, false, attach), reader(data), writer(data), merger_mutator(data, global_context.getBackgroundPool()), log(&Logger::get(database_name_ + "." + table_name + " (StorageMergeTree)")) { @@ -220,7 +222,8 @@ void StorageMergeTree::alter( auto new_indices = data.getIndicesDescription(); ASTPtr new_order_by_ast = data.order_by_ast; ASTPtr new_primary_key_ast = data.primary_key_ast; - params.apply(new_columns, new_indices, new_order_by_ast, new_primary_key_ast); + ASTPtr new_ttl_table_ast = data.ttl_table_ast; + params.apply(new_columns, new_indices, new_order_by_ast, new_primary_key_ast, new_ttl_table_ast); auto parts = data.getDataParts({MergeTreeDataPartState::PreCommitted, MergeTreeDataPartState::Committed, MergeTreeDataPartState::Outdated}); auto columns_for_parts = new_columns.getAllPhysical(); @@ -242,6 +245,9 @@ void StorageMergeTree::alter( if (new_primary_key_ast.get() != data.primary_key_ast.get()) storage_ast.set(storage_ast.primary_key, new_primary_key_ast); + + if (new_ttl_table_ast.get() != data.ttl_table_ast.get()) + storage_ast.set(storage_ast.ttl_table, new_ttl_table_ast); }; context.getDatabase(current_database_name)->alterTable(context, current_table_name, new_columns, new_indices, storage_modifier); @@ -249,6 +255,8 @@ void StorageMergeTree::alter( /// Reinitialize primary key because primary key column types might have changed. data.setPrimaryKeyIndicesAndColumns(new_order_by_ast, new_primary_key_ast, new_columns, new_indices); + data.setTTLExpressions(new_columns.getColumnTTLs(), new_ttl_table_ast); + for (auto & transaction : transactions) transaction->commit(); @@ -546,6 +554,7 @@ bool StorageMergeTree::merge( future_part, *merge_entry, time(nullptr), merging_tagger->reserved_space.get(), deduplicate); merger_mutator.renameMergedTemporaryPart(new_part, future_part.parts, nullptr); + data.removeEmptyColumnsFromPart(new_part); merging_tagger->is_successful = true; write_part_log({}); @@ -794,7 +803,8 @@ void StorageMergeTree::clearColumnInPartition(const ASTPtr & partition, const Fi auto new_indices = getIndicesDescription(); ASTPtr ignored_order_by_ast; ASTPtr ignored_primary_key_ast; - alter_command.apply(new_columns, new_indices, ignored_order_by_ast, ignored_primary_key_ast); + ASTPtr ignored_ttl_table_ast; + alter_command.apply(new_columns, new_indices, ignored_order_by_ast, ignored_primary_key_ast, ignored_ttl_table_ast); auto columns_for_parts = new_columns.getAllPhysical(); for (const auto & part : parts) diff --git a/dbms/src/Storages/StorageMergeTree.h b/dbms/src/Storages/StorageMergeTree.h index 6972fc916c6..c5ea2d8c3a0 100644 --- a/dbms/src/Storages/StorageMergeTree.h +++ b/dbms/src/Storages/StorageMergeTree.h @@ -181,6 +181,7 @@ protected: const ASTPtr & order_by_ast_, const ASTPtr & primary_key_ast_, const ASTPtr & sample_by_ast_, /// nullptr, if sampling is not supported. + const ASTPtr & ttl_table_ast_, const MergeTreeData::MergingParams & merging_params_, const MergeTreeSettings & settings_, bool has_force_restore_data_flag); diff --git a/dbms/src/Storages/StorageReplicatedMergeTree.cpp b/dbms/src/Storages/StorageReplicatedMergeTree.cpp index fe606a79062..19751e112d7 100644 --- a/dbms/src/Storages/StorageReplicatedMergeTree.cpp +++ b/dbms/src/Storages/StorageReplicatedMergeTree.cpp @@ -54,6 +54,7 @@ #include #include +#include namespace ProfileEvents { @@ -206,6 +207,7 @@ StorageReplicatedMergeTree::StorageReplicatedMergeTree( const ASTPtr & order_by_ast_, const ASTPtr & primary_key_ast_, const ASTPtr & sample_by_ast_, + const ASTPtr & ttl_table_ast_, const MergeTreeData::MergingParams & merging_params_, const MergeTreeSettings & settings_, bool has_force_restore_data_flag) @@ -217,7 +219,8 @@ StorageReplicatedMergeTree::StorageReplicatedMergeTree( data(database_name, table_name, full_path, columns_, indices_, context_, date_column_name, partition_by_ast_, order_by_ast_, primary_key_ast_, - sample_by_ast_, merging_params_, settings_, true, attach, + sample_by_ast_, ttl_table_ast_, merging_params_, + settings_, true, attach, [this] (const std::string & name) { enqueuePartForCheck(name); }), reader(data), writer(data), merger_mutator(data, global_context.getBackgroundPool()), queue(*this), fetcher(data), @@ -424,6 +427,7 @@ void StorageReplicatedMergeTree::setTableStructure(ColumnsDescription new_column ASTPtr new_primary_key_ast = data.primary_key_ast; ASTPtr new_order_by_ast = data.order_by_ast; auto new_indices = data.getIndicesDescription(); + ASTPtr new_ttl_table_ast = data.ttl_table_ast; IDatabase::ASTModifier storage_modifier; if (!metadata_diff.empty()) { @@ -452,6 +456,12 @@ void StorageReplicatedMergeTree::setTableStructure(ColumnsDescription new_column if (metadata_diff.skip_indices_changed) new_indices = IndicesDescription::parse(metadata_diff.new_skip_indices); + if (metadata_diff.ttl_table_changed) + { + ParserExpression parser; + new_ttl_table_ast = parseQuery(parser, metadata_diff.new_ttl_table, 0); + } + storage_modifier = [&](IAST & ast) { auto & storage_ast = ast.as(); @@ -464,6 +474,9 @@ void StorageReplicatedMergeTree::setTableStructure(ColumnsDescription new_column if (new_primary_key_ast.get() != data.primary_key_ast.get()) storage_ast.set(storage_ast.primary_key, new_primary_key_ast); + if (new_ttl_table_ast.get() != data.ttl_table_ast.get()) + storage_ast.set(storage_ast.ttl_table, new_ttl_table_ast); + storage_ast.set(storage_ast.order_by, new_order_by_ast); }; } @@ -473,6 +486,7 @@ void StorageReplicatedMergeTree::setTableStructure(ColumnsDescription new_column /// Even if the primary/sorting keys didn't change we must reinitialize it /// because primary key column types might have changed. data.setPrimaryKeyIndicesAndColumns(new_order_by_ast, new_primary_key_ast, new_columns, new_indices); + data.setTTLExpressions(new_columns.getColumnTTLs(), new_ttl_table_ast); } @@ -1077,6 +1091,7 @@ bool StorageReplicatedMergeTree::tryExecuteMerge(const LogEntry & entry) future_merged_part, *merge_entry, entry.create_time, reserved_space.get(), entry.deduplicate); merger_mutator.renameMergedTemporaryPart(part, parts, &transaction); + data.removeEmptyColumnsFromPart(part); try { @@ -1499,7 +1514,8 @@ void StorageReplicatedMergeTree::executeClearColumnInPartition(const LogEntry & auto new_indices = getIndicesDescription(); ASTPtr ignored_order_by_ast; ASTPtr ignored_primary_key_ast; - alter_command.apply(new_columns, new_indices, ignored_order_by_ast, ignored_primary_key_ast); + ASTPtr ignored_ttl_table_ast; + alter_command.apply(new_columns, new_indices, ignored_order_by_ast, ignored_primary_key_ast, ignored_ttl_table_ast); size_t modified_parts = 0; auto parts = data.getDataParts(); @@ -3104,7 +3120,8 @@ void StorageReplicatedMergeTree::alter( IndicesDescription new_indices = data.getIndicesDescription(); ASTPtr new_order_by_ast = data.order_by_ast; ASTPtr new_primary_key_ast = data.primary_key_ast; - params.apply(new_columns, new_indices, new_order_by_ast, new_primary_key_ast); + ASTPtr new_ttl_table_ast = data.ttl_table_ast; + params.apply(new_columns, new_indices, new_order_by_ast, new_primary_key_ast, new_ttl_table_ast); String new_columns_str = new_columns.toString(); if (new_columns_str != data.getColumns().toString()) @@ -3114,6 +3131,9 @@ void StorageReplicatedMergeTree::alter( if (new_order_by_ast.get() != data.order_by_ast.get()) new_metadata.sorting_key = serializeAST(*MergeTreeData::extractKeyExpressionList(new_order_by_ast)); + if (new_ttl_table_ast.get() != data.ttl_table_ast.get()) + new_metadata.ttl_table = serializeAST(*new_ttl_table_ast); + String new_indices_str = new_indices.toString(); if (new_indices_str != data.getIndicesDescription().toString()) new_metadata.skip_indices = new_indices_str; @@ -3941,6 +3961,14 @@ void StorageReplicatedMergeTree::sendRequestToLeaderReplica(const ASTPtr & query if (leader == replica_name) throw Exception("Leader was suddenly changed or logical error.", ErrorCodes::LEADERSHIP_CHANGED); + /// SECONDARY_QUERY here means, that we received query from DDLWorker + /// there is no sense to send query to leader, because he will receive it from own DDLWorker + if (query_context.getClientInfo().query_kind == ClientInfo::QueryKind::SECONDARY_QUERY) + { + LOG_DEBUG(log, "Not leader replica received query from DDLWorker, skipping it."); + return; + } + ReplicatedMergeTreeAddress leader_address(getZooKeeper()->get(zookeeper_path + "/replicas/" + leader + "/host")); /// TODO: add setters and getters interface for database and table fields of AST @@ -3969,6 +3997,7 @@ void StorageReplicatedMergeTree::sendRequestToLeaderReplica(const ASTPtr & query const auto & query_client_info = query_context.getClientInfo(); String user = query_client_info.current_user; String password = query_client_info.current_password; + if (auto address = findClusterAddress(leader_address); address) { user = address->user; @@ -3979,7 +4008,7 @@ void StorageReplicatedMergeTree::sendRequestToLeaderReplica(const ASTPtr & query leader_address.host, leader_address.queries_port, leader_address.database, - user, password, timeouts, "ClickHouse replica"); + user, password, timeouts, "Follower replica"); std::stringstream new_query_ss; formatAST(*new_query, new_query_ss, false, true); diff --git a/dbms/src/Storages/StorageReplicatedMergeTree.h b/dbms/src/Storages/StorageReplicatedMergeTree.h index bc2bb97cf0c..457be32a406 100644 --- a/dbms/src/Storages/StorageReplicatedMergeTree.h +++ b/dbms/src/Storages/StorageReplicatedMergeTree.h @@ -563,6 +563,7 @@ protected: const ASTPtr & order_by_ast_, const ASTPtr & primary_key_ast_, const ASTPtr & sample_by_ast_, + const ASTPtr & table_ttl_ast_, const MergeTreeData::MergingParams & merging_params_, const MergeTreeSettings & settings_, bool has_force_restore_data_flag); diff --git a/dbms/src/Storages/System/StorageSystemBuildOptions.generated.cpp.in b/dbms/src/Storages/System/StorageSystemBuildOptions.generated.cpp.in index 97358ac02c9..6d6d5f32e0c 100644 --- a/dbms/src/Storages/System/StorageSystemBuildOptions.generated.cpp.in +++ b/dbms/src/Storages/System/StorageSystemBuildOptions.generated.cpp.in @@ -57,6 +57,8 @@ const char * auto_config_build[] "USE_BROTLI", "@USE_BROTLI@", "USE_SSL", "@USE_SSL@", "USE_HYPERSCAN", "@USE_HYPERSCAN@", + "USE_LFALLOC", "@USE_LFALLOC@", + "USE_LFALLOC_RANDOM_HINT", "@USE_LFALLOC_RANDOM_HINT@", nullptr, nullptr }; diff --git a/dbms/src/Storages/System/StorageSystemParts.cpp b/dbms/src/Storages/System/StorageSystemParts.cpp index c97686e56b3..61832677a5b 100644 --- a/dbms/src/Storages/System/StorageSystemParts.cpp +++ b/dbms/src/Storages/System/StorageSystemParts.cpp @@ -68,7 +68,7 @@ void StorageSystemParts::processNextStorage(MutableColumns & columns, const Stor } columns[i++]->insert(part->name); columns[i++]->insert(part_state == State::Committed); - columns[i++]->insert(part->marks_count); + columns[i++]->insert(part->getMarksCount()); columns[i++]->insert(part->rows_count); columns[i++]->insert(part->bytes_on_disk.load(std::memory_order_relaxed)); columns[i++]->insert(columns_size.data_compressed); diff --git a/dbms/src/Storages/System/StorageSystemPartsColumns.cpp b/dbms/src/Storages/System/StorageSystemPartsColumns.cpp index f4abe7609cb..ab58f9740cf 100644 --- a/dbms/src/Storages/System/StorageSystemPartsColumns.cpp +++ b/dbms/src/Storages/System/StorageSystemPartsColumns.cpp @@ -106,7 +106,7 @@ void StorageSystemPartsColumns::processNextStorage(MutableColumns & columns, con } columns[j++]->insert(part->name); columns[j++]->insert(part_state == State::Committed); - columns[j++]->insert(part->marks_count); + columns[j++]->insert(part->getMarksCount()); columns[j++]->insert(part->rows_count); columns[j++]->insert(part->bytes_on_disk.load(std::memory_order_relaxed)); diff --git a/dbms/src/Storages/tests/gtest_aux_funcs_for_adaptive_granularity.cpp b/dbms/src/Storages/tests/gtest_aux_funcs_for_adaptive_granularity.cpp new file mode 100644 index 00000000000..1b2e404eae4 --- /dev/null +++ b/dbms/src/Storages/tests/gtest_aux_funcs_for_adaptive_granularity.cpp @@ -0,0 +1,150 @@ +#pragma GCC diagnostic ignored "-Wsign-compare" +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" +#pragma clang diagnostic ignored "-Wundef" +#endif +#include +#include +#include + +// I know that inclusion of .cpp is not good at all +#include + +using namespace DB; +Block getBlockWithSize(size_t required_size_in_bytes, size_t size_of_row_in_bytes) +{ + + ColumnsWithTypeAndName cols; + size_t rows = required_size_in_bytes / size_of_row_in_bytes; + for (size_t i = 0; i < size_of_row_in_bytes; i += sizeof(UInt64)) + { + auto column = ColumnUInt64::create(rows, 0); + cols.emplace_back(std::move(column), std::make_shared(), "column" + std::to_string(i)); + } + return Block(cols); +} + +TEST(AdaptiveIndexGranularity, FillGranularityToyTests) +{ + auto block1 = getBlockWithSize(80, 8); + EXPECT_EQ(block1.bytes(), 80); + { /// Granularity bytes are not set. Take default index_granularity. + MergeTreeIndexGranularity index_granularity; + fillIndexGranularityImpl(block1, 0, 100, false, 0, index_granularity); + EXPECT_EQ(index_granularity.getMarksCount(), 1); + EXPECT_EQ(index_granularity.getMarkRows(0), 100); + } + + { /// Granule size is less than block size. Block contains multiple granules. + MergeTreeIndexGranularity index_granularity; + fillIndexGranularityImpl(block1, 16, 100, false, 0, index_granularity); + EXPECT_EQ(index_granularity.getMarksCount(), 5); /// First granule with 8 rows, and second with 1 row + for (size_t i = 0; i < index_granularity.getMarksCount(); ++i) + EXPECT_EQ(index_granularity.getMarkRows(i), 2); + } + + { /// Granule size is more than block size. Whole block (and maybe more) can be placed in single granule. + + MergeTreeIndexGranularity index_granularity; + fillIndexGranularityImpl(block1, 512, 100, false, 0, index_granularity); + EXPECT_EQ(index_granularity.getMarksCount(), 1); + for (size_t i = 0; i < index_granularity.getMarksCount(); ++i) + EXPECT_EQ(index_granularity.getMarkRows(i), 64); + } + + { /// Blocks with granule size + + MergeTreeIndexGranularity index_granularity; + fillIndexGranularityImpl(block1, 1, 1, true, 0, index_granularity); + EXPECT_EQ(index_granularity.getMarksCount(), 1); + for (size_t i = 0; i < index_granularity.getMarksCount(); ++i) + EXPECT_EQ(index_granularity.getMarkRows(i), block1.rows()); + } + + { /// Shift in index offset + MergeTreeIndexGranularity index_granularity; + fillIndexGranularityImpl(block1, 16, 100, false, 6, index_granularity); + EXPECT_EQ(index_granularity.getMarksCount(), 2); + for (size_t i = 0; i < index_granularity.getMarksCount(); ++i) + EXPECT_EQ(index_granularity.getMarkRows(i), 2); + } +} + + +TEST(AdaptiveIndexGranularity, FillGranularitySequenceOfBlocks) +{ + { /// Three equal blocks + auto block1 = getBlockWithSize(65536, 8); + auto block2 = getBlockWithSize(65536, 8); + auto block3 = getBlockWithSize(65536, 8); + MergeTreeIndexGranularity index_granularity; + for (const auto & block : {block1, block2, block3}) + fillIndexGranularityImpl(block, 1024, 0, false, 0, index_granularity); + + EXPECT_EQ(index_granularity.getMarksCount(), 192); /// granules + for (size_t i = 0; i < index_granularity.getMarksCount(); ++i) + EXPECT_EQ(index_granularity.getMarkRows(i), 128); + } + { /// Three blocks of different size + auto block1 = getBlockWithSize(65536, 32); + auto block2 = getBlockWithSize(32768, 32); + auto block3 = getBlockWithSize(2048, 32); + EXPECT_EQ(block1.rows() + block2.rows() + block3.rows(), 3136); + MergeTreeIndexGranularity index_granularity; + for (const auto & block : {block1, block2, block3}) + fillIndexGranularityImpl(block, 1024, 0, false, 0, index_granularity); + + EXPECT_EQ(index_granularity.getMarksCount(), 98); /// granules + for (size_t i = 0; i < index_granularity.getMarksCount(); ++i) + EXPECT_EQ(index_granularity.getMarkRows(i), 32); + + } + { /// Three small blocks + auto block1 = getBlockWithSize(2048, 32); + auto block2 = getBlockWithSize(4096, 32); + auto block3 = getBlockWithSize(8192, 32); + + EXPECT_EQ(block1.rows() + block2.rows() + block3.rows(), (2048 + 4096 + 8192) / 32); + + MergeTreeIndexGranularity index_granularity; + size_t index_offset = 0; + for (const auto & block : {block1, block2, block3}) + { + fillIndexGranularityImpl(block, 16384, 0, false, index_offset, index_granularity); + index_offset = index_granularity.getLastMarkRows() - block.rows(); + } + EXPECT_EQ(index_granularity.getMarksCount(), 1); /// granules + for (size_t i = 0; i < index_granularity.getMarksCount(); ++i) + EXPECT_EQ(index_granularity.getMarkRows(i), 512); + } + +} + +TEST(AdaptiveIndexGranularity, TestIndexGranularityClass) +{ + { + MergeTreeIndexGranularity index_granularity; + size_t sum_rows = 0; + size_t sum_marks = 0; + for (size_t i = 10; i <= 100; i+=10) + { + sum_rows += i; + sum_marks++; + index_granularity.appendMark(i); + } + EXPECT_EQ(index_granularity.getMarksCount(), sum_marks); + EXPECT_EQ(index_granularity.getTotalRows(), sum_rows); + EXPECT_EQ(index_granularity.getLastMarkRows(), 100); + EXPECT_EQ(index_granularity.getMarkStartingRow(0), 0); + EXPECT_EQ(index_granularity.getMarkStartingRow(1), 10); + EXPECT_EQ(index_granularity.getMarkStartingRow(2), 30); + EXPECT_EQ(index_granularity.getMarkStartingRow(3), 60); + + EXPECT_EQ(index_granularity.getRowsCountInRange({0, 10}), sum_rows); + EXPECT_EQ(index_granularity.getRowsCountInRange({0, 1}), 10); + EXPECT_EQ(index_granularity.getRowsCountInRange({2, 5}), 30 + 40 + 50); + + + EXPECT_EQ(index_granularity.getRowsCountInRanges({{2, 5}, {0, 1}, {0, 10}}), 10 + 30 + 40 + 50 + sum_rows); + } +} diff --git a/dbms/src/Storages/tests/part_checker.cpp b/dbms/src/Storages/tests/part_checker.cpp index decf1cbb13d..737192d2070 100644 --- a/dbms/src/Storages/tests/part_checker.cpp +++ b/dbms/src/Storages/tests/part_checker.cpp @@ -1,10 +1,52 @@ #include +#include #include +#include +#include +using namespace DB; + +Poco::Path getMarksFile(const std::string & part_path) +{ + Poco::DirectoryIterator it(part_path); + Poco::DirectoryIterator end; + while (it != end) + { + Poco::Path p(it.path()); + auto extension = p.getExtension(); + if (extension == "mrk2" || extension == "mrk") + return p; + ++it; + } + throw Exception("Cannot find any mark file in directory " + part_path, DB::ErrorCodes::METRIKA_OTHER_ERROR); +} + +MergeTreeIndexGranularity readGranularity(const Poco::Path & mrk_file_path, size_t fixed_granularity) +{ + + MergeTreeIndexGranularity result; + auto extension = mrk_file_path.getExtension(); + + DB::ReadBufferFromFile mrk_in(mrk_file_path.toString()); + + for (size_t mark_num = 0; !mrk_in.eof(); ++mark_num) + { + UInt64 offset_in_compressed_file = 0; + UInt64 offset_in_decompressed_block = 0; + DB::readBinary(offset_in_compressed_file, mrk_in); + DB::readBinary(offset_in_decompressed_block, mrk_in); + UInt64 index_granularity_rows = 0; + if (extension == "mrk2") + DB::readBinary(index_granularity_rows, mrk_in); + else + index_granularity_rows = fixed_granularity; + result.appendMark(index_granularity_rows); + } + return result; +} int main(int argc, char ** argv) { - using namespace DB; Poco::AutoPtr channel = new Poco::ConsoleChannel(std::cerr); Logger::root().setChannel(channel); @@ -18,7 +60,15 @@ int main(int argc, char ** argv) try { - checkDataPart(argv[1], parse(argv[3]), parse(argv[2]), {}); + std::string full_path{argv[1]}; + + auto mrk_file_path = getMarksFile(full_path); + size_t fixed_granularity{parse(argv[3])}; + auto adaptive_granularity = readGranularity(mrk_file_path, fixed_granularity); + auto marks_file_extension = "." + mrk_file_path.getExtension(); + bool require_checksums = parse(argv[2]); + + checkDataPart(full_path, adaptive_granularity, marks_file_extension, require_checksums, {}); } catch (...) { diff --git a/dbms/tests/CMakeLists.txt b/dbms/tests/CMakeLists.txt index 2fd91f21933..9031fcf7e39 100644 --- a/dbms/tests/CMakeLists.txt +++ b/dbms/tests/CMakeLists.txt @@ -25,7 +25,20 @@ if (ENABLE_TESTS) # maybe add --no-long ? # if you want disable some tests: env TEST_OPT0='--skip compile' - add_test(NAME with_server COMMAND bash -c "env BUILD_DIR=${ClickHouse_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/clickhouse-test-server") + if(TEST_CMAKE_PARALLEL) + # NUMBER_OF_LOGICAL_CORES + if (TEST_CMAKE_PARALLEL GREATER 1) + set(TOTAL_TESTS ${TEST_CMAKE_PARALLEL}) + else() + set(TOTAL_TESTS ${NUMBER_OF_LOGICAL_CORES}) + endif() + foreach(proc RANGE 1 ${TOTAL_TESTS}) + add_test(NAME with_server${proc} COMMAND bash -c "env BUILD_DIR=${ClickHouse_BINARY_DIR} TEST_OPT0=--parallel=${proc}/${TOTAL_TESTS} ${CMAKE_CURRENT_SOURCE_DIR}/clickhouse-test-server") + endforeach() + else() + add_test(NAME with_server COMMAND bash -c "env BUILD_DIR=${ClickHouse_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/clickhouse-test-server") + endif() + endif () if (ENABLE_TEST_INTEGRATION) diff --git a/dbms/tests/clickhouse-test b/dbms/tests/clickhouse-test index 010b7442922..d80d69d7cd3 100755 --- a/dbms/tests/clickhouse-test +++ b/dbms/tests/clickhouse-test @@ -43,7 +43,7 @@ def remove_control_characters(s): def run_single_test(args, ext, server_logs_level, case_file, stdout_file, stderr_file): if ext == '.sql': - command = "{0} --send_logs_level={1} --testmode --multiquery < {2} > {3} 2> {4}".format(args.client, server_logs_level, case_file, stdout_file, stderr_file) + command = "{0} --send_logs_level={1} --testmode --multiquery < {2} > {3} 2> {4}".format(args.client_with_database, server_logs_level, case_file, stdout_file, stderr_file) else: command = "{} > {} 2> {}".format(case_file, stdout_file, stderr_file) @@ -137,6 +137,7 @@ def main(args): if args.configclient: os.environ.setdefault("CLICKHOUSE_CONFIG_CLIENT", args.configclient) os.environ.setdefault("CLICKHOUSE_TMP", tmp_dir) + os.environ.setdefault("CLICKHOUSE_DATABASE", args.database) # Force to print server warnings in stderr # Shell scripts could change logging level @@ -165,7 +166,15 @@ def main(args): failures_total = 0 clickhouse_proc_create = Popen(shlex.split(args.client), stdin=PIPE, stdout=PIPE, stderr=PIPE) - clickhouse_proc_create.communicate("CREATE DATABASE IF NOT EXISTS test") + clickhouse_proc_create.communicate("CREATE DATABASE IF NOT EXISTS " + args.database) + if args.database != "test": + clickhouse_proc_create = Popen(shlex.split(args.client), stdin=PIPE, stdout=PIPE, stderr=PIPE) + clickhouse_proc_create.communicate("CREATE DATABASE IF NOT EXISTS test") + + def is_test_from_dir(suite_dir, case): + case_file = os.path.join(suite_dir, case) + (name, ext) = os.path.splitext(case) + return os.path.isfile(case_file) and (ext == '.sql' or ext == '.sh' or ext == '.py') def sute_key_func(item): if args.order == 'random': @@ -196,7 +205,6 @@ def main(args): suite = suite_re_obj.group(1) if os.path.isdir(suite_dir): - print("\nRunning {} tests.\n".format(suite)) failures = 0 failures_chain = 0 @@ -225,166 +233,180 @@ def main(args): except ValueError: return 99997 - for case in sorted(filter(lambda case: re.search(args.test, case) if args.test else True, os.listdir(suite_dir)), key=key_func): + run_n, run_total = args.parallel.split('/') + run_n = float(run_n) + run_total = float(run_total) + all_tests = os.listdir(suite_dir) + all_tests = filter(lambda case: is_test_from_dir(suite_dir, case), all_tests) + all_tests = sorted(filter(lambda case: re.search(args.test, case) if args.test else True, all_tests), key=key_func) + tests_n = len(all_tests) + start = int(tests_n / run_total * (run_n - 1)) + if start > 0: + start = start + 1 + end = int(tests_n / run_total * (run_n)) + all_tests = all_tests[start : end] + + print("\nRunning {} {} tests.".format(tests_n, suite) + (" {} .. {} ".format(start, end) if run_total > 1 else "") + "\n") + + for case in all_tests: if SERVER_DIED: break case_file = os.path.join(suite_dir, case) (name, ext) = os.path.splitext(case) - if os.path.isfile(case_file) and (ext == '.sql' or ext == '.sh' or ext == '.py'): - report_testcase = et.Element("testcase", attrib = {"name": name}) + report_testcase = et.Element("testcase", attrib = {"name": name}) - try: - print "{0:72}".format(name + ": "), - sys.stdout.flush() + try: + print "{0:72}".format(name + ": "), + sys.stdout.flush() - if args.skip and any(s in name for s in args.skip): - report_testcase.append(et.Element("skipped", attrib = {"message": "skip"})) - print(MSG_SKIPPED + " - skip") - skipped_total += 1 - elif not args.zookeeper and 'zookeeper' in name: - report_testcase.append(et.Element("skipped", attrib = {"message": "no zookeeper"})) - print(MSG_SKIPPED + " - no zookeeper") - skipped_total += 1 - elif not args.shard and 'shard' in name: - report_testcase.append(et.Element("skipped", attrib = {"message": "no shard"})) - print(MSG_SKIPPED + " - no shard") - skipped_total += 1 - elif not args.no_long and 'long' in name: - report_testcase.append(et.Element("skipped", attrib = {"message": "no long"})) - print(MSG_SKIPPED + " - no long") - skipped_total += 1 + if args.skip and any(s in name for s in args.skip): + report_testcase.append(et.Element("skipped", attrib = {"message": "skip"})) + print(MSG_SKIPPED + " - skip") + skipped_total += 1 + elif not args.zookeeper and 'zookeeper' in name: + report_testcase.append(et.Element("skipped", attrib = {"message": "no zookeeper"})) + print(MSG_SKIPPED + " - no zookeeper") + skipped_total += 1 + elif not args.shard and 'shard' in name: + report_testcase.append(et.Element("skipped", attrib = {"message": "no shard"})) + print(MSG_SKIPPED + " - no shard") + skipped_total += 1 + elif not args.no_long and 'long' in name: + report_testcase.append(et.Element("skipped", attrib = {"message": "no long"})) + print(MSG_SKIPPED + " - no long") + skipped_total += 1 + else: + disabled_file = os.path.join(suite_dir, name) + '.disabled' + + if os.path.exists(disabled_file) and not args.disabled: + message = open(disabled_file, 'r').read() + report_testcase.append(et.Element("skipped", attrib = {"message": message})) + print(MSG_SKIPPED + " - " + message) else: - disabled_file = os.path.join(suite_dir, name) + '.disabled' - if os.path.exists(disabled_file) and not args.disabled: - message = open(disabled_file, 'r').read() - report_testcase.append(et.Element("skipped", attrib = {"message": message})) - print(MSG_SKIPPED + " - " + message) + if args.testname: + clickhouse_proc = Popen(shlex.split(args.client_with_database), stdin=PIPE, stdout=PIPE, stderr=PIPE) + clickhouse_proc.communicate("SELECT 'Running test {suite}/{case} from pid={pid}';".format(pid = os.getpid(), case = case, suite = suite)) + + reference_file = os.path.join(suite_dir, name) + '.reference' + stdout_file = os.path.join(suite_tmp_dir, name) + '.stdout' + stderr_file = os.path.join(suite_tmp_dir, name) + '.stderr' + + proc, stdout, stderr = run_single_test(args, ext, server_logs_level, case_file, stdout_file, stderr_file) + if proc.returncode is None: + try: + proc.kill() + except OSError as e: + if e.errno != ESRCH: + raise + + failure = et.Element("failure", attrib = {"message": "Timeout"}) + report_testcase.append(failure) + + failures += 1 + print("{0} - Timeout!".format(MSG_FAIL)) else: + counter = 1 + while proc.returncode != 0 and need_retry(stderr): + proc, stdout, stderr = run_single_test(args, ext, server_logs_level, case_file, stdout_file, stderr_file) + sleep(2**counter) + counter += 1 + if counter > 6: + break - if args.testname: - clickhouse_proc = Popen(shlex.split(args.client), stdin=PIPE, stdout=PIPE, stderr=PIPE) - clickhouse_proc.communicate("SELECT 'Running test {suite}/{case} from pid={pid}';".format(pid = os.getpid(), case = case, suite = suite)) - - reference_file = os.path.join(suite_dir, name) + '.reference' - stdout_file = os.path.join(suite_tmp_dir, name) + '.stdout' - stderr_file = os.path.join(suite_tmp_dir, name) + '.stderr' - - proc, stdout, stderr = run_single_test(args, ext, server_logs_level, case_file, stdout_file, stderr_file) - if proc.returncode is None: - try: - proc.kill() - except OSError as e: - if e.errno != ESRCH: - raise - - failure = et.Element("failure", attrib = {"message": "Timeout"}) + if proc.returncode != 0: + failure = et.Element("failure", attrib = {"message": "return code {}".format(proc.returncode)}) report_testcase.append(failure) + stdout_element = et.Element("system-out") + stdout_element.text = et.CDATA(stdout) + report_testcase.append(stdout_element) + failures += 1 - print("{0} - Timeout!".format(MSG_FAIL)) - else: - counter = 1 - while proc.returncode != 0 and need_retry(stderr): - proc, stdout, stderr = run_single_test(args, ext, server_logs_level, case_file, stdout_file, stderr_file) - sleep(2**counter) - counter += 1 - if counter > 6: - break - - if proc.returncode != 0: - failure = et.Element("failure", attrib = {"message": "return code {}".format(proc.returncode)}) - report_testcase.append(failure) - - stdout_element = et.Element("system-out") - stdout_element.text = et.CDATA(stdout) - report_testcase.append(stdout_element) - - failures += 1 - failures_chain += 1 - print("{0} - return code {1}".format(MSG_FAIL, proc.returncode)) - - if stderr: - stderr_element = et.Element("system-err") - stderr_element.text = et.CDATA(stderr) - report_testcase.append(stderr_element) - print(stderr.encode('utf-8')) - - if args.stop and ('Connection refused' in stderr or 'Attempt to read after eof' in stderr) and not 'Received exception from server' in stderr: - SERVER_DIED = True - - elif stderr: - failure = et.Element("failure", attrib = {"message": "having stderror"}) - report_testcase.append(failure) + failures_chain += 1 + print("{0} - return code {1}".format(MSG_FAIL, proc.returncode)) + if stderr: stderr_element = et.Element("system-err") stderr_element.text = et.CDATA(stderr) report_testcase.append(stderr_element) + print(stderr.encode('utf-8')) - failures += 1 - failures_chain += 1 - print("{0} - having stderror:\n{1}".format(MSG_FAIL, stderr.encode('utf-8'))) - elif 'Exception' in stdout: - failure = et.Element("error", attrib = {"message": "having exception"}) + if args.stop and ('Connection refused' in stderr or 'Attempt to read after eof' in stderr) and not 'Received exception from server' in stderr: + SERVER_DIED = True + + elif stderr: + failure = et.Element("failure", attrib = {"message": "having stderror"}) + report_testcase.append(failure) + + stderr_element = et.Element("system-err") + stderr_element.text = et.CDATA(stderr) + report_testcase.append(stderr_element) + + failures += 1 + failures_chain += 1 + print("{0} - having stderror:\n{1}".format(MSG_FAIL, stderr.encode('utf-8'))) + elif 'Exception' in stdout: + failure = et.Element("error", attrib = {"message": "having exception"}) + report_testcase.append(failure) + + stdout_element = et.Element("system-out") + stdout_element.text = et.CDATA(stdout) + report_testcase.append(stdout_element) + + failures += 1 + failures_chain += 1 + print("{0} - having exception:\n{1}".format(MSG_FAIL, stdout.encode('utf-8'))) + elif not os.path.isfile(reference_file): + skipped = et.Element("skipped", attrib = {"message": "no reference file"}) + report_testcase.append(skipped) + print("{0} - no reference file".format(MSG_UNKNOWN)) + else: + result_is_different = subprocess.call(['diff', '-q', reference_file, stdout_file], stdout = PIPE) + + if result_is_different: + diff = Popen(['diff', '--unified', reference_file, stdout_file], stdout = PIPE).communicate()[0] + diff = unicode(diff, errors='replace', encoding='utf-8') + cat = Popen(['cat', '-vet'], stdin=PIPE, stdout=PIPE).communicate(input=diff.encode(encoding='utf-8', errors='replace'))[0] + + failure = et.Element("failure", attrib = {"message": "result differs with reference"}) report_testcase.append(failure) stdout_element = et.Element("system-out") - stdout_element.text = et.CDATA(stdout) + try: + stdout_element.text = et.CDATA(diff) + except: + stdout_element.text = et.CDATA(remove_control_characters(diff)) + report_testcase.append(stdout_element) - failures += 1 - failures_chain += 1 - print("{0} - having exception:\n{1}".format(MSG_FAIL, stdout.encode('utf-8'))) - elif not os.path.isfile(reference_file): - skipped = et.Element("skipped", attrib = {"message": "no reference file"}) - report_testcase.append(skipped) - print("{0} - no reference file".format(MSG_UNKNOWN)) + print("{0} - result differs with reference:\n{1}".format(MSG_FAIL, cat.encode('utf-8'))) else: - result_is_different = subprocess.call(['diff', '-q', reference_file, stdout_file], stdout = PIPE) + passed_total += 1 + failures_chain = 0 + print(MSG_OK) + if os.path.exists(stdout_file): + os.remove(stdout_file) + if os.path.exists(stderr_file): + os.remove(stderr_file) + except KeyboardInterrupt as e: + print(colored("Break tests execution", "red")) + raise e + except: + import traceback + exc_type, exc_value, tb = sys.exc_info() + error = et.Element("error", attrib = {"type": exc_type.__name__, "message": str(exc_value)}) + report_testcase.append(error) - if result_is_different: - diff = Popen(['diff', '--unified', reference_file, stdout_file], stdout = PIPE).communicate()[0] - diff = unicode(diff, errors='replace', encoding='utf-8') - cat = Popen(['cat', '-vet'], stdin=PIPE, stdout=PIPE).communicate(input=diff.encode(encoding='utf-8', errors='replace'))[0] + failures += 1 + print("{0} - Test internal error: {1}\n{2}\n{3}".format(MSG_FAIL, exc_type.__name__, exc_value, "\n".join(traceback.format_tb(tb, 10)))) + finally: + dump_report(args.output, suite, name, report_testcase) - failure = et.Element("failure", attrib = {"message": "result differs with reference"}) - report_testcase.append(failure) - - stdout_element = et.Element("system-out") - try: - stdout_element.text = et.CDATA(diff) - except: - stdout_element.text = et.CDATA(remove_control_characters(diff)) - - report_testcase.append(stdout_element) - failures += 1 - print("{0} - result differs with reference:\n{1}".format(MSG_FAIL, cat.encode('utf-8'))) - else: - passed_total += 1 - failures_chain = 0 - print(MSG_OK) - if os.path.exists(stdout_file): - os.remove(stdout_file) - if os.path.exists(stderr_file): - os.remove(stderr_file) - except KeyboardInterrupt as e: - print(colored("Break tests execution", "red")) - raise e - except: - import traceback - exc_type, exc_value, tb = sys.exc_info() - error = et.Element("error", attrib = {"type": exc_type.__name__, "message": str(exc_value)}) - report_testcase.append(error) - - failures += 1 - print("{0} - Test internal error: {1}\n{2}\n{3}".format(MSG_FAIL, exc_type.__name__, exc_value, "\n".join(traceback.format_tb(tb, 10)))) - finally: - dump_report(args.output, suite, name, report_testcase) - - if failures_chain >= 20: - break + if failures_chain >= 20: + break failures_total = failures_total + failures @@ -396,7 +418,7 @@ def main(args): print(colored("\n{passed_total} tests passed. {skipped_total} tests skipped.".format(passed_total = passed_total, skipped_total = skipped_total), "green", attrs=["bold"])) if args.hung_check: - processlist = get_processlist(args.client) + processlist = get_processlist(args.client_with_database) if processlist: server_pid = get_server_pid(os.getenv("CLICKHOUSE_PORT_TCP", '9000')) print(colored("\nFound hung queries in processlist:", "red", attrs=["bold"])) @@ -440,6 +462,8 @@ if __name__ == '__main__': parser.add_argument('--testname', action='store_true', default=None, dest='testname', help='Make query with test name before test run') parser.add_argument('--hung-check', action='store_true', default=False) parser.add_argument('--force-color', action='store_true', default=False) + parser.add_argument('--database', default='test', help='Default database for tests') + parser.add_argument('--parallel', default='1/1', help='Parralel test run number/total') parser.add_argument('--no-stateless', action='store_true', help='Disable all stateless tests') parser.add_argument('--skip', nargs='+', help="Skip these tests") @@ -480,6 +504,12 @@ if __name__ == '__main__': args.client += ' --host=' + os.getenv("CLICKHOUSE_HOST") if os.getenv("CLICKHOUSE_PORT_TCP"): args.client += ' --port=' + os.getenv("CLICKHOUSE_PORT_TCP") + if os.getenv("CLICKHOUSE_DATABASE"): + args.client += ' --database=' + os.getenv("CLICKHOUSE_DATABASE") + + args.client_with_database = args.client + if args.database: + args.client_with_database += ' --database=' + args.database if args.extract_from_config is None: if os.access(args.binary + '-extract-from-config', os.X_OK): diff --git a/dbms/tests/clickhouse-test-server b/dbms/tests/clickhouse-test-server index 78d4509defc..c029275a7a8 100755 --- a/dbms/tests/clickhouse-test-server +++ b/dbms/tests/clickhouse-test-server @@ -137,11 +137,30 @@ else # Running test in parallel will fail some results (tests can create/fill/drop same tables) TEST_NPROC=${TEST_NPROC:=$(( `nproc || sysctl -n hw.ncpu || echo 2` * 2))} for i in `seq 1 ${TEST_NPROC}`; do - $CLICKHOUSE_TEST --order=random --testname & + $CLICKHOUSE_TEST --order=random --testname --tmp=$DATA_DIR/tmp/tmp${i} & done $CLICKHOUSE_PERFORMANCE_TEST & fi - ( [ "$TEST_RUN" ] && $CLICKHOUSE_TEST ) || ${TEST_TRUE:=false} + + if [ "${TEST_RUN_PARALLEL}" ]; then + # Running test in parallel will fail some results (tests can create/fill/drop same tables) + TEST_NPROC=${TEST_NPROC:=$(( `nproc || sysctl -n hw.ncpu || echo 2` * 2))} + for i in `seq 1 ${TEST_NPROC}`; do + $CLICKHOUSE_TEST --testname --tmp=$DATA_DIR/tmp/tmp${i} --database=test${i} --parallel=${i}/${TEST_NPROC} & + done + for job in `jobs -p`; do + #echo wait $job + wait $job || let "FAIL+=1" + done + + #echo $FAIL + if [ "$FAIL" != "0" ]; then + return $FAIL + fi + else + ( [ "$TEST_RUN" ] && $CLICKHOUSE_TEST ) || ${TEST_TRUE:=false} + fi + ( [ "$TEST_PERF" ] && $CLICKHOUSE_PERFORMANCE_TEST $* ) || true #( [ "$TEST_DICT" ] && mkdir -p $DATA_DIR/etc/dictionaries/ && cd $CUR_DIR/external_dictionaries && python generate_and_test.py --port=$CLICKHOUSE_PORT_TCP --client=$CLICKHOUSE_CLIENT --source=$CUR_DIR/external_dictionaries/source.tsv --reference=$CUR_DIR/external_dictionaries/reference --generated=$DATA_DIR/etc/dictionaries/ --no_mysql --no_mongo ) || true $CLICKHOUSE_CLIENT_QUERY "SELECT event, value FROM system.events; SELECT metric, value FROM system.metrics; SELECT metric, value FROM system.asynchronous_metrics;" diff --git a/dbms/tests/integration/README.md b/dbms/tests/integration/README.md index f8b9d1cb5ca..c110fa1a49c 100644 --- a/dbms/tests/integration/README.md +++ b/dbms/tests/integration/README.md @@ -14,9 +14,9 @@ Don't use Docker from your system repository. * [pip](https://pypi.python.org/pypi/pip). To install: `sudo apt-get install python-pip` * [py.test](https://docs.pytest.org/) testing framework. To install: `sudo -H pip install pytest` -* [docker-compose](https://docs.docker.com/compose/) and additional python libraries. To install: `sudo -H pip install docker-compose docker dicttoxml kazoo PyMySQL psycopg2 pymongo tzlocal` +* [docker-compose](https://docs.docker.com/compose/) and additional python libraries. To install: `sudo -H pip install docker-compose docker dicttoxml kazoo PyMySQL psycopg2 pymongo tzlocal kafka-python` -(highly not recommended) If you really want to use OS packages on modern debian/ubuntu instead of "pip": `sudo apt install -y docker docker-compose python-pytest python-dicttoxml python-docker python-pymysql python-pymongo python-tzlocal python-kazoo python-psycopg2` +(highly not recommended) If you really want to use OS packages on modern debian/ubuntu instead of "pip": `sudo apt install -y docker docker-compose python-pytest python-dicttoxml python-docker python-pymysql python-pymongo python-tzlocal python-kazoo python-psycopg2 python-kafka` If you want to run the tests under a non-privileged user, you must add this user to `docker` group: `sudo usermod -aG docker $USER` and re-login. (You must close all your sessions (for example, restart your computer)) diff --git a/dbms/tests/integration/test_dictionaries/configs/.gitignore b/dbms/tests/integration/test_dictionaries/configs/.gitignore deleted file mode 100644 index e94ff4a69e5..00000000000 --- a/dbms/tests/integration/test_dictionaries/configs/.gitignore +++ /dev/null @@ -1 +0,0 @@ -dictionaries diff --git a/dbms/tests/integration/test_dictionaries/configs/dictionaries/.gitignore b/dbms/tests/integration/test_dictionaries/configs/dictionaries/.gitignore new file mode 100644 index 00000000000..8f1b0e23a85 --- /dev/null +++ b/dbms/tests/integration/test_dictionaries/configs/dictionaries/.gitignore @@ -0,0 +1,4 @@ +* +!.gitignore +!source.tsv +!dictionary_preset* \ No newline at end of file diff --git a/dbms/tests/integration/test_dictionaries/configs/dictionaries/dictionary_preset_dep_x.xml b/dbms/tests/integration/test_dictionaries/configs/dictionaries/dictionary_preset_dep_x.xml new file mode 100644 index 00000000000..36a421f1908 --- /dev/null +++ b/dbms/tests/integration/test_dictionaries/configs/dictionaries/dictionary_preset_dep_x.xml @@ -0,0 +1,30 @@ + + + + dep_x + + + localhost + 9000 + default + + dict + dep_z
+
+ + 60 + + + + + + id + + + String_ + String + XX + + +
+
diff --git a/dbms/tests/integration/test_dictionaries/configs/dictionaries/dictionary_preset_dep_y.xml b/dbms/tests/integration/test_dictionaries/configs/dictionaries/dictionary_preset_dep_y.xml new file mode 100644 index 00000000000..771ab889660 --- /dev/null +++ b/dbms/tests/integration/test_dictionaries/configs/dictionaries/dictionary_preset_dep_y.xml @@ -0,0 +1,40 @@ + + + + dep_y + + + localhost + 9000 + default + + test + dictionary_source
+
+ + 60 + + + + + + id + + + Int64_ + Int64 + 121 + + + Float32_ + Float32 + 121 + + + String_ + String + YY + + +
+
diff --git a/dbms/tests/integration/test_dictionaries/configs/dictionaries/dictionary_preset_dep_z.xml b/dbms/tests/integration/test_dictionaries/configs/dictionaries/dictionary_preset_dep_z.xml new file mode 100644 index 00000000000..875d55c39f9 --- /dev/null +++ b/dbms/tests/integration/test_dictionaries/configs/dictionaries/dictionary_preset_dep_z.xml @@ -0,0 +1,35 @@ + + + + dep_z + + + localhost + 9000 + default + + dict + dep_y
+
+ + 60 + + + + + + id + + + Int64_ + Int64 + 122 + + + String_ + String + ZZ + + +
+
diff --git a/dbms/tests/integration/test_dictionaries/generate_dictionaries.py b/dbms/tests/integration/test_dictionaries/generate_dictionaries.py index 2467e726f3b..62bf4f70519 100644 --- a/dbms/tests/integration/test_dictionaries/generate_dictionaries.py +++ b/dbms/tests/integration/test_dictionaries/generate_dictionaries.py @@ -1,4 +1,5 @@ import os +import glob import difflib files = ['key_simple.tsv', 'key_complex_integers.tsv', 'key_complex_mixed.tsv'] @@ -181,6 +182,10 @@ def generate_dictionaries(path, structure): file_names = [] + # Add ready dictionaries. + file_names.extend(glob.glob(os.path.join(path, "*dictionary_preset*.xml"))) + + # Generate dictionaries. for (name, key_idx, has_parent), (source, layout) in zip(structure, sources_and_layouts): filename = os.path.join(path, 'dictionary_%s.xml' % name) file_names.append(filename) diff --git a/dbms/tests/integration/test_dictionaries/test.py b/dbms/tests/integration/test_dictionaries/test.py index 45b13ead887..80b842ca161 100644 --- a/dbms/tests/integration/test_dictionaries/test.py +++ b/dbms/tests/integration/test_dictionaries/test.py @@ -29,6 +29,7 @@ def setup_module(module): def started_cluster(): try: cluster.start() + instance.query("CREATE DATABASE IF NOT EXISTS dict ENGINE=Dictionary") test_table.create_clickhouse_source(instance) for line in TSV(instance.query('select name from system.dictionaries')).lines: print line, @@ -122,6 +123,7 @@ def test_select_all_from_cached(cached_dictionary_structure): print test_table.process_diff(diff) assert not diff + def test_null_value(started_cluster): query = instance.query @@ -132,3 +134,14 @@ def test_null_value(started_cluster): # Check, that empty null_value interprets as default value assert TSV(query("select dictGetUInt64('clickhouse_cache', 'UInt64_', toUInt64(12121212))")) == TSV("0") assert TSV(query("select dictGetDateTime('clickhouse_cache', 'DateTime_', toUInt64(12121212))")) == TSV("0000-00-00 00:00:00") + + +def test_dictionary_dependency(started_cluster): + query = instance.query + + assert query("SELECT dictGetString('dep_x', 'String_', toUInt64(1))") == "10577349846663553072\n" + assert query("SELECT dictGetString('dep_y', 'String_', toUInt64(1))") == "10577349846663553072\n" + assert query("SELECT dictGetString('dep_z', 'String_', toUInt64(1))") == "10577349846663553072\n" + assert query("SELECT dictGetString('dep_x', 'String_', toUInt64(12121212))") == "XX\n" + assert query("SELECT dictGetString('dep_y', 'String_', toUInt64(12121212))") == "YY\n" + assert query("SELECT dictGetString('dep_z', 'String_', toUInt64(12121212))") == "ZZ\n" diff --git a/dbms/tests/integration/test_distributed_ddl/test.py b/dbms/tests/integration/test_distributed_ddl/test.py index 0c8a1b0bf01..a6eda22df4f 100755 --- a/dbms/tests/integration/test_distributed_ddl/test.py +++ b/dbms/tests/integration/test_distributed_ddl/test.py @@ -384,6 +384,14 @@ def test_create_as_select(started_cluster): ddl_check_query(instance, "DROP TABLE IF EXISTS test_as_select ON CLUSTER cluster") +def test_create_reserved(started_cluster): + instance = cluster.instances['ch2'] + ddl_check_query(instance, "CREATE TABLE test_reserved ON CLUSTER cluster (`p` Date, `image` Nullable(String), `index` Nullable(Float64), `invalidate` Nullable(Int64)) ENGINE = MergeTree(`p`, `p`, 8192)") + ddl_check_query(instance, "CREATE TABLE test_as_reserved ON CLUSTER cluster ENGINE = Memory AS (SELECT * from test_reserved)") + ddl_check_query(instance, "DROP TABLE IF EXISTS test_reserved ON CLUSTER cluster") + ddl_check_query(instance, "DROP TABLE IF EXISTS test_as_reserved ON CLUSTER cluster") + + if __name__ == '__main__': with contextmanager(started_cluster)() as cluster: for name, instance in cluster.instances.items(): diff --git a/dbms/tests/integration/test_distributed_ddl_password/__init__.py b/dbms/tests/integration/test_distributed_ddl_password/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/dbms/tests/integration/test_distributed_ddl_password/configs/config.d/clusters.xml b/dbms/tests/integration/test_distributed_ddl_password/configs/config.d/clusters.xml new file mode 100644 index 00000000000..c0ad3b1ba32 --- /dev/null +++ b/dbms/tests/integration/test_distributed_ddl_password/configs/config.d/clusters.xml @@ -0,0 +1,28 @@ + + + + + true + + node1 + 9000 + + + node2 + 9000 + + + + true + + node3 + 9000 + + + node4 + 9000 + + + + + diff --git a/dbms/tests/integration/test_distributed_ddl_password/configs/users.d/default_with_password.xml b/dbms/tests/integration/test_distributed_ddl_password/configs/users.d/default_with_password.xml new file mode 100644 index 00000000000..2220b925840 --- /dev/null +++ b/dbms/tests/integration/test_distributed_ddl_password/configs/users.d/default_with_password.xml @@ -0,0 +1,22 @@ + + + + + + + + + clickhouse + + ::/0 + + default + default + + + + + + + + diff --git a/dbms/tests/integration/test_distributed_ddl_password/test.py b/dbms/tests/integration/test_distributed_ddl_password/test.py new file mode 100644 index 00000000000..fc51fe5ddee --- /dev/null +++ b/dbms/tests/integration/test_distributed_ddl_password/test.py @@ -0,0 +1,54 @@ +import time +import pytest +from helpers.cluster import ClickHouseCluster + +cluster = ClickHouseCluster(__file__) +node1 = cluster.add_instance('node1', config_dir="configs", with_zookeeper=True) +node2 = cluster.add_instance('node2', config_dir="configs", with_zookeeper=True) +node3 = cluster.add_instance('node3', config_dir="configs", with_zookeeper=True) +node4 = cluster.add_instance('node4', config_dir="configs", with_zookeeper=True) + +@pytest.fixture(scope="module") +def start_cluster(): + try: + cluster.start() + + for node, shard in [(node1, 1), (node2, 1), (node3, 2), (node4, 2)]: + node.query( + ''' + CREATE TABLE test_table(date Date, id UInt32, dummy UInt32) + ENGINE = ReplicatedMergeTree('/clickhouse/tables/test{shard}/replicated', '{replica}') + PARTITION BY date + ORDER BY id + '''.format(shard=shard, replica=node.name), settings={"password": "clickhouse"}) + + yield cluster + + finally: + cluster.shutdown() + +def test_truncate(start_cluster): + node1.query("insert into test_table values ('2019-02-15', 1, 2), ('2019-02-15', 2, 3), ('2019-02-15', 3, 4)", settings={"password": "clickhouse"}) + + assert node1.query("select count(*) from test_table", settings={"password": "clickhouse"}) == "3\n" + node2.query("system sync replica test_table", settings={"password": "clickhouse"}) + assert node2.query("select count(*) from test_table", settings={"password": "clickhouse"}) == "3\n" + + + node3.query("insert into test_table values ('2019-02-16', 1, 2), ('2019-02-16', 2, 3), ('2019-02-16', 3, 4)", settings={"password": "clickhouse"}) + + assert node3.query("select count(*) from test_table", settings={"password": "clickhouse"}) == "3\n" + node4.query("system sync replica test_table", settings={"password": "clickhouse"}) + assert node4.query("select count(*) from test_table", settings={"password": "clickhouse"}) == "3\n" + + node3.query("truncate table test_table on cluster 'awesome_cluster'", settings={"password": "clickhouse"}) + time.sleep(2) + + for node in [node1, node2, node3, node4]: + assert node.query("select count(*) from test_table", settings={"password": "clickhouse"}) == "0\n" + + node2.query("drop table test_table on cluster 'awesome_cluster'", settings={"password": "clickhouse"}) + time.sleep(2) + + for node in [node1, node2, node3, node4]: + assert node.query("select count(*) from system.tables where name='test_table'", settings={"password": "clickhouse"}) == "0\n" diff --git a/dbms/tests/integration/test_ttl_replicated/__init__.py b/dbms/tests/integration/test_ttl_replicated/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/dbms/tests/integration/test_ttl_replicated/test.py b/dbms/tests/integration/test_ttl_replicated/test.py new file mode 100644 index 00000000000..f028b8fdbe5 --- /dev/null +++ b/dbms/tests/integration/test_ttl_replicated/test.py @@ -0,0 +1,65 @@ +import time +import pytest + +from helpers.cluster import ClickHouseCluster +from helpers.test_tools import TSV + +cluster = ClickHouseCluster(__file__) +node1 = cluster.add_instance('node1', with_zookeeper=True) +node2 = cluster.add_instance('node2', with_zookeeper=True) + +@pytest.fixture(scope="module") +def start_cluster(): + try: + cluster.start() + + yield cluster + + except Exception as ex: + print ex + + finally: + cluster.shutdown() + +def drop_table(nodes, table_name): + for node in nodes: + node.query("DROP TABLE IF EXISTS {}".format(table_name)) + +def test_ttl_columns(start_cluster): + drop_table([node1, node2], "test_ttl") + for node in [node1, node2]: + node.query( + ''' + CREATE TABLE test_ttl(date DateTime, id UInt32, a Int32 TTL date + INTERVAL 1 DAY, b Int32 TTL date + INTERVAL 1 MONTH) + ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/test_ttl', '{replica}') + ORDER BY id PARTITION BY toDayOfMonth(date) SETTINGS merge_with_ttl_timeout=0; + '''.format(replica=node.name)) + + node1.query("INSERT INTO test_ttl VALUES (toDateTime('2000-10-10 00:00:00'), 1, 1, 3)") + node1.query("INSERT INTO test_ttl VALUES (toDateTime('2000-10-11 10:00:00'), 2, 2, 4)") + time.sleep(1) # sleep to allow use ttl merge selector for second time + node1.query("OPTIMIZE TABLE test_ttl FINAL") + + expected = "1\t0\t0\n2\t0\t0\n" + assert TSV(node1.query("SELECT id, a, b FROM test_ttl ORDER BY id")) == TSV(expected) + assert TSV(node2.query("SELECT id, a, b FROM test_ttl ORDER BY id")) == TSV(expected) + +def test_ttl_table(start_cluster): + drop_table([node1, node2], "test_ttl") + for node in [node1, node2]: + node.query( + ''' + CREATE TABLE test_ttl(date DateTime, id UInt32) + ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/test_ttl', '{replica}') + ORDER BY id PARTITION BY toDayOfMonth(date) + TTL date + INTERVAL 1 DAY SETTINGS merge_with_ttl_timeout=0; + '''.format(replica=node.name)) + + node1.query("INSERT INTO test_ttl VALUES (toDateTime('2000-10-10 00:00:00'), 1)") + node1.query("INSERT INTO test_ttl VALUES (toDateTime('2000-10-11 10:00:00'), 2)") + time.sleep(1) # sleep to allow use ttl merge selector for second time + node1.query("OPTIMIZE TABLE test_ttl FINAL") + + assert TSV(node1.query("SELECT * FROM test_ttl")) == TSV("") + assert TSV(node2.query("SELECT * FROM test_ttl")) == TSV("") + diff --git a/dbms/tests/queries/0_stateless/00030_alter_table.reference b/dbms/tests/queries/0_stateless/00030_alter_table.reference index 24a54b6e2a0..51a8eb92610 100644 --- a/dbms/tests/queries/0_stateless/00030_alter_table.reference +++ b/dbms/tests/queries/0_stateless/00030_alter_table.reference @@ -1,27 +1,27 @@ -CounterID UInt32 -StartDate Date -UserID UInt32 -VisitID UInt32 -NestedColumn.A Array(UInt8) -NestedColumn.S Array(String) -ToDrop UInt32 -Added0 UInt32 -Added1 UInt32 -Added2 UInt32 -AddedNested1.A Array(UInt32) -AddedNested1.B Array(UInt64) -AddedNested1.C Array(String) -AddedNested2.A Array(UInt32) -AddedNested2.B Array(UInt64) -CounterID UInt32 -StartDate Date -UserID UInt32 -VisitID UInt32 -Added0 String -Added1 UInt32 -Added2 UInt32 -AddedNested1.A Array(UInt32) -AddedNested1.C Array(String) -AddedNested2.A Array(UInt32) -AddedNested2.B Array(UInt64) +CounterID UInt32 +StartDate Date +UserID UInt32 +VisitID UInt32 +NestedColumn.A Array(UInt8) +NestedColumn.S Array(String) +ToDrop UInt32 +Added0 UInt32 +Added1 UInt32 +Added2 UInt32 +AddedNested1.A Array(UInt32) +AddedNested1.B Array(UInt64) +AddedNested1.C Array(String) +AddedNested2.A Array(UInt32) +AddedNested2.B Array(UInt64) +CounterID UInt32 +StartDate Date +UserID UInt32 +VisitID UInt32 +Added0 String +Added1 UInt32 +Added2 UInt32 +AddedNested1.A Array(UInt32) +AddedNested1.C Array(String) +AddedNested2.A Array(UInt32) +AddedNested2.B Array(UInt64) 1 2014-01-01 2 3 0 0 [] [] [] [] diff --git a/dbms/tests/queries/0_stateless/00030_alter_table.sql b/dbms/tests/queries/0_stateless/00030_alter_table.sql index cc5789b4040..5fc45575a4a 100644 --- a/dbms/tests/queries/0_stateless/00030_alter_table.sql +++ b/dbms/tests/queries/0_stateless/00030_alter_table.sql @@ -1,37 +1,37 @@ -DROP TABLE IF EXISTS test.alter_test; +DROP TABLE IF EXISTS alter_test; -CREATE TABLE test.alter_test (CounterID UInt32, StartDate Date, UserID UInt32, VisitID UInt32, NestedColumn Nested(A UInt8, S String), ToDrop UInt32) ENGINE = MergeTree(StartDate, intHash32(UserID), (CounterID, StartDate, intHash32(UserID), VisitID), 8192); +CREATE TABLE alter_test (CounterID UInt32, StartDate Date, UserID UInt32, VisitID UInt32, NestedColumn Nested(A UInt8, S String), ToDrop UInt32) ENGINE = MergeTree(StartDate, intHash32(UserID), (CounterID, StartDate, intHash32(UserID), VisitID), 8192); -INSERT INTO test.alter_test VALUES (1, '2014-01-01', 2, 3, [1,2,3], ['a','b','c'], 4); +INSERT INTO alter_test VALUES (1, '2014-01-01', 2, 3, [1,2,3], ['a','b','c'], 4); -ALTER TABLE test.alter_test ADD COLUMN Added0 UInt32; -ALTER TABLE test.alter_test ADD COLUMN Added2 UInt32; -ALTER TABLE test.alter_test ADD COLUMN Added1 UInt32 AFTER Added0; +ALTER TABLE alter_test ADD COLUMN Added0 UInt32; +ALTER TABLE alter_test ADD COLUMN Added2 UInt32; +ALTER TABLE alter_test ADD COLUMN Added1 UInt32 AFTER Added0; -ALTER TABLE test.alter_test ADD COLUMN AddedNested1 Nested(A UInt32, B UInt64) AFTER Added2; -ALTER TABLE test.alter_test ADD COLUMN AddedNested1.C Array(String) AFTER AddedNested1.B; -ALTER TABLE test.alter_test ADD COLUMN AddedNested2 Nested(A UInt32, B UInt64) AFTER AddedNested1; +ALTER TABLE alter_test ADD COLUMN AddedNested1 Nested(A UInt32, B UInt64) AFTER Added2; +ALTER TABLE alter_test ADD COLUMN AddedNested1.C Array(String) AFTER AddedNested1.B; +ALTER TABLE alter_test ADD COLUMN AddedNested2 Nested(A UInt32, B UInt64) AFTER AddedNested1; -DESC TABLE test.alter_test; +DESC TABLE alter_test; -ALTER TABLE test.alter_test DROP COLUMN ToDrop; +ALTER TABLE alter_test DROP COLUMN ToDrop; -ALTER TABLE test.alter_test MODIFY COLUMN Added0 String; +ALTER TABLE alter_test MODIFY COLUMN Added0 String; -ALTER TABLE test.alter_test DROP COLUMN NestedColumn.A; -ALTER TABLE test.alter_test DROP COLUMN NestedColumn.S; +ALTER TABLE alter_test DROP COLUMN NestedColumn.A; +ALTER TABLE alter_test DROP COLUMN NestedColumn.S; -ALTER TABLE test.alter_test DROP COLUMN AddedNested1.B; +ALTER TABLE alter_test DROP COLUMN AddedNested1.B; -ALTER TABLE test.alter_test ADD COLUMN IF NOT EXISTS Added0 UInt32; -ALTER TABLE test.alter_test ADD COLUMN IF NOT EXISTS AddedNested1 Nested(A UInt32, B UInt64); -ALTER TABLE test.alter_test ADD COLUMN IF NOT EXISTS AddedNested1.C Array(String); -ALTER TABLE test.alter_test MODIFY COLUMN IF EXISTS ToDrop UInt64; -ALTER TABLE test.alter_test DROP COLUMN IF EXISTS ToDrop; -ALTER TABLE test.alter_test COMMENT COLUMN IF EXISTS ToDrop 'new comment'; +ALTER TABLE alter_test ADD COLUMN IF NOT EXISTS Added0 UInt32; +ALTER TABLE alter_test ADD COLUMN IF NOT EXISTS AddedNested1 Nested(A UInt32, B UInt64); +ALTER TABLE alter_test ADD COLUMN IF NOT EXISTS AddedNested1.C Array(String); +ALTER TABLE alter_test MODIFY COLUMN IF EXISTS ToDrop UInt64; +ALTER TABLE alter_test DROP COLUMN IF EXISTS ToDrop; +ALTER TABLE alter_test COMMENT COLUMN IF EXISTS ToDrop 'new comment'; -DESC TABLE test.alter_test; +DESC TABLE alter_test; -SELECT * FROM test.alter_test; +SELECT * FROM alter_test; -DROP TABLE test.alter_test; +DROP TABLE alter_test; diff --git a/dbms/tests/queries/0_stateless/00039_inserts_through_http.sh b/dbms/tests/queries/0_stateless/00039_inserts_through_http.sh index 45d2e16709b..0f37827d0be 100755 --- a/dbms/tests/queries/0_stateless/00039_inserts_through_http.sh +++ b/dbms/tests/queries/0_stateless/00039_inserts_through_http.sh @@ -3,10 +3,10 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -echo 'DROP TABLE IF EXISTS test.long_insert' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- -echo 'CREATE TABLE test.long_insert (a String) ENGINE = Memory' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- +echo 'DROP TABLE IF EXISTS long_insert' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- +echo 'CREATE TABLE long_insert (a String) ENGINE = Memory' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- for string_size in 1 10 100 1000 10000 100000 1000000; do # LC_ALL=C is needed because otherwise Perl will bark on bad tuned environment. - LC_ALL=C perl -we 'for my $letter ("a" .. "z") { print(($letter x '$string_size') . "\n") }' | ${CLICKHOUSE_CURL} -sSg "${CLICKHOUSE_URL}?query=INSERT+INTO+test.long_insert+FORMAT+TabSeparated" --data-binary @- - echo 'SELECT substring(a, 1, 1) AS c, length(a) AS l FROM test.long_insert ORDER BY c, l' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- + LC_ALL=C perl -we 'for my $letter ("a" .. "z") { print(($letter x '$string_size') . "\n") }' | ${CLICKHOUSE_CURL} -sSg "${CLICKHOUSE_URL}?query=INSERT+INTO+long_insert+FORMAT+TabSeparated" --data-binary @- + echo 'SELECT substring(a, 1, 1) AS c, length(a) AS l FROM long_insert ORDER BY c, l' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- done diff --git a/dbms/tests/queries/0_stateless/00041_big_array_join.sql b/dbms/tests/queries/0_stateless/00041_big_array_join.sql index f4d83fc4ebf..0a73930cbc2 100644 --- a/dbms/tests/queries/0_stateless/00041_big_array_join.sql +++ b/dbms/tests/queries/0_stateless/00041_big_array_join.sql @@ -1,15 +1,15 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.big_array; -CREATE TABLE test.big_array (x Array(UInt8)) ENGINE=TinyLog; +DROP TABLE IF EXISTS big_array; +CREATE TABLE big_array (x Array(UInt8)) ENGINE=TinyLog; SET min_insert_block_size_rows = 0, min_insert_block_size_bytes = 0; -INSERT INTO test.big_array SELECT groupArray(number % 255) AS x FROM (SELECT * FROM system.numbers LIMIT 1000000); +INSERT INTO big_array SELECT groupArray(number % 255) AS x FROM (SELECT * FROM system.numbers LIMIT 1000000); -SELECT count() FROM test.big_array ARRAY JOIN x; -SELECT count() FROM test.big_array ARRAY JOIN x AS y; -SELECT countIf(has(x, 10)), sum(y) FROM test.big_array ARRAY JOIN x AS y; -SELECT countIf(has(x, 10)) FROM test.big_array ARRAY JOIN x AS y; -SELECT countIf(has(x, 10)), sum(y) FROM test.big_array ARRAY JOIN x AS y WHERE 1; -SELECT countIf(has(x, 10)) FROM test.big_array ARRAY JOIN x AS y WHERE 1; -SELECT countIf(has(x, 10)), sum(y) FROM test.big_array ARRAY JOIN x AS y WHERE has(x,15); +SELECT count() FROM big_array ARRAY JOIN x; +SELECT count() FROM big_array ARRAY JOIN x AS y; +SELECT countIf(has(x, 10)), sum(y) FROM big_array ARRAY JOIN x AS y; +SELECT countIf(has(x, 10)) FROM big_array ARRAY JOIN x AS y; +SELECT countIf(has(x, 10)), sum(y) FROM big_array ARRAY JOIN x AS y WHERE 1; +SELECT countIf(has(x, 10)) FROM big_array ARRAY JOIN x AS y WHERE 1; +SELECT countIf(has(x, 10)), sum(y) FROM big_array ARRAY JOIN x AS y WHERE has(x,15); -DROP TABLE test.big_array; +DROP TABLE big_array; diff --git a/dbms/tests/queries/0_stateless/00043_summing_empty_part.sql b/dbms/tests/queries/0_stateless/00043_summing_empty_part.sql index ed07d82fc6c..8fb261b3fed 100644 --- a/dbms/tests/queries/0_stateless/00043_summing_empty_part.sql +++ b/dbms/tests/queries/0_stateless/00043_summing_empty_part.sql @@ -1,18 +1,18 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.empty_summing; -CREATE TABLE test.empty_summing (d Date, k UInt64, v Int8) ENGINE=SummingMergeTree(d, k, 8192); +DROP TABLE IF EXISTS empty_summing; +CREATE TABLE empty_summing (d Date, k UInt64, v Int8) ENGINE=SummingMergeTree(d, k, 8192); -INSERT INTO test.empty_summing VALUES ('2015-01-01', 1, 10); -INSERT INTO test.empty_summing VALUES ('2015-01-01', 1, -10); +INSERT INTO empty_summing VALUES ('2015-01-01', 1, 10); +INSERT INTO empty_summing VALUES ('2015-01-01', 1, -10); -OPTIMIZE TABLE test.empty_summing; -SELECT * FROM test.empty_summing; +OPTIMIZE TABLE empty_summing; +SELECT * FROM empty_summing; -INSERT INTO test.empty_summing VALUES ('2015-01-01', 1, 4),('2015-01-01', 2, -9),('2015-01-01', 3, -14); -INSERT INTO test.empty_summing VALUES ('2015-01-01', 1, -2),('2015-01-01', 1, -2),('2015-01-01', 3, 14); -INSERT INTO test.empty_summing VALUES ('2015-01-01', 1, 0),('2015-01-01', 3, 0); +INSERT INTO empty_summing VALUES ('2015-01-01', 1, 4),('2015-01-01', 2, -9),('2015-01-01', 3, -14); +INSERT INTO empty_summing VALUES ('2015-01-01', 1, -2),('2015-01-01', 1, -2),('2015-01-01', 3, 14); +INSERT INTO empty_summing VALUES ('2015-01-01', 1, 0),('2015-01-01', 3, 0); -OPTIMIZE TABLE test.empty_summing; -SELECT * FROM test.empty_summing; +OPTIMIZE TABLE empty_summing; +SELECT * FROM empty_summing; -DROP TABLE test.empty_summing; +DROP TABLE empty_summing; diff --git a/dbms/tests/queries/0_stateless/00046_stored_aggregates_simple.sql b/dbms/tests/queries/0_stateless/00046_stored_aggregates_simple.sql index 06401ebc589..8b1ef5ba48d 100644 --- a/dbms/tests/queries/0_stateless/00046_stored_aggregates_simple.sql +++ b/dbms/tests/queries/0_stateless/00046_stored_aggregates_simple.sql @@ -1,13 +1,13 @@ -DROP TABLE IF EXISTS test.stored_aggregates; +DROP TABLE IF EXISTS stored_aggregates; -CREATE TABLE test.stored_aggregates +CREATE TABLE stored_aggregates ( d Date, Uniq AggregateFunction(uniq, UInt64) ) ENGINE = AggregatingMergeTree(d, d, 8192); -INSERT INTO test.stored_aggregates +INSERT INTO stored_aggregates SELECT toDate('2014-06-01') AS d, uniqState(number) AS Uniq @@ -16,6 +16,6 @@ FROM SELECT * FROM system.numbers LIMIT 1000 ); -SELECT uniqMerge(Uniq) FROM test.stored_aggregates; +SELECT uniqMerge(Uniq) FROM stored_aggregates; -DROP TABLE test.stored_aggregates; +DROP TABLE stored_aggregates; diff --git a/dbms/tests/queries/0_stateless/00047_stored_aggregates_complex.sql b/dbms/tests/queries/0_stateless/00047_stored_aggregates_complex.sql index 4c7e61576b3..cee13c34e6e 100644 --- a/dbms/tests/queries/0_stateless/00047_stored_aggregates_complex.sql +++ b/dbms/tests/queries/0_stateless/00047_stored_aggregates_complex.sql @@ -1,6 +1,6 @@ -DROP TABLE IF EXISTS test.stored_aggregates; +DROP TABLE IF EXISTS stored_aggregates; -CREATE TABLE test.stored_aggregates +CREATE TABLE stored_aggregates ( d Date, k1 UInt64, @@ -15,7 +15,7 @@ CREATE TABLE test.stored_aggregates ) ENGINE = AggregatingMergeTree(d, (d, k1, k2), 8192); -INSERT INTO test.stored_aggregates +INSERT INTO stored_aggregates SELECT toDate('2014-06-01') AS d, intDiv(number, 100) AS k1, @@ -39,7 +39,7 @@ SELECT d, k1, k2, anyMerge(Any), anyIfMerge(AnyIf), quantilesMerge(0.5, 0.9)(Quantiles), groupArrayMerge(GroupArray) -FROM test.stored_aggregates +FROM stored_aggregates GROUP BY d, k1, k2 ORDER BY d, k1, k2; @@ -48,7 +48,7 @@ SELECT d, k1, anyMerge(Any), anyIfMerge(AnyIf), quantilesMerge(0.5, 0.9)(Quantiles), groupArrayMerge(GroupArray) -FROM test.stored_aggregates +FROM stored_aggregates GROUP BY d, k1 ORDER BY d, k1; @@ -57,8 +57,8 @@ SELECT d, anyMerge(Any), anyIfMerge(AnyIf), quantilesMerge(0.5, 0.9)(Quantiles), groupArrayMerge(GroupArray) -FROM test.stored_aggregates +FROM stored_aggregates GROUP BY d ORDER BY d; -DROP TABLE test.stored_aggregates; +DROP TABLE stored_aggregates; diff --git a/dbms/tests/queries/0_stateless/00048_a_stored_aggregates_merge.sql b/dbms/tests/queries/0_stateless/00048_a_stored_aggregates_merge.sql index 79c52af7179..79617692ebd 100644 --- a/dbms/tests/queries/0_stateless/00048_a_stored_aggregates_merge.sql +++ b/dbms/tests/queries/0_stateless/00048_a_stored_aggregates_merge.sql @@ -1,13 +1,13 @@ -DROP TABLE IF EXISTS test.stored_aggregates; +DROP TABLE IF EXISTS stored_aggregates; -CREATE TABLE test.stored_aggregates +CREATE TABLE stored_aggregates ( d Date, Uniq AggregateFunction(uniq, UInt64) ) ENGINE = AggregatingMergeTree(d, d, 8192); -INSERT INTO test.stored_aggregates +INSERT INTO stored_aggregates SELECT toDate(toUInt16(toDate('2014-06-01')) + intDiv(number, 100)) AS d, uniqState(intDiv(number, 10)) AS Uniq @@ -17,11 +17,11 @@ FROM ) GROUP BY d; -SELECT uniqMerge(Uniq) FROM test.stored_aggregates; +SELECT uniqMerge(Uniq) FROM stored_aggregates; -SELECT d, uniqMerge(Uniq) FROM test.stored_aggregates GROUP BY d ORDER BY d; +SELECT d, uniqMerge(Uniq) FROM stored_aggregates GROUP BY d ORDER BY d; -INSERT INTO test.stored_aggregates +INSERT INTO stored_aggregates SELECT toDate(toUInt16(toDate('2014-06-01')) + intDiv(number, 100)) AS d, uniqState(intDiv(number + 50, 10)) AS Uniq @@ -31,15 +31,15 @@ FROM ) GROUP BY d; -SELECT uniqMerge(Uniq) FROM test.stored_aggregates; +SELECT uniqMerge(Uniq) FROM stored_aggregates; -SELECT d, uniqMerge(Uniq) FROM test.stored_aggregates GROUP BY d ORDER BY d; +SELECT d, uniqMerge(Uniq) FROM stored_aggregates GROUP BY d ORDER BY d; -OPTIMIZE TABLE test.stored_aggregates; +OPTIMIZE TABLE stored_aggregates; -SELECT uniqMerge(Uniq) FROM test.stored_aggregates; +SELECT uniqMerge(Uniq) FROM stored_aggregates; -SELECT d, uniqMerge(Uniq) FROM test.stored_aggregates GROUP BY d ORDER BY d; +SELECT d, uniqMerge(Uniq) FROM stored_aggregates GROUP BY d ORDER BY d; -DROP TABLE test.stored_aggregates; +DROP TABLE stored_aggregates; diff --git a/dbms/tests/queries/0_stateless/00048_b_stored_aggregates_merge.sql b/dbms/tests/queries/0_stateless/00048_b_stored_aggregates_merge.sql index 79c52af7179..79617692ebd 100644 --- a/dbms/tests/queries/0_stateless/00048_b_stored_aggregates_merge.sql +++ b/dbms/tests/queries/0_stateless/00048_b_stored_aggregates_merge.sql @@ -1,13 +1,13 @@ -DROP TABLE IF EXISTS test.stored_aggregates; +DROP TABLE IF EXISTS stored_aggregates; -CREATE TABLE test.stored_aggregates +CREATE TABLE stored_aggregates ( d Date, Uniq AggregateFunction(uniq, UInt64) ) ENGINE = AggregatingMergeTree(d, d, 8192); -INSERT INTO test.stored_aggregates +INSERT INTO stored_aggregates SELECT toDate(toUInt16(toDate('2014-06-01')) + intDiv(number, 100)) AS d, uniqState(intDiv(number, 10)) AS Uniq @@ -17,11 +17,11 @@ FROM ) GROUP BY d; -SELECT uniqMerge(Uniq) FROM test.stored_aggregates; +SELECT uniqMerge(Uniq) FROM stored_aggregates; -SELECT d, uniqMerge(Uniq) FROM test.stored_aggregates GROUP BY d ORDER BY d; +SELECT d, uniqMerge(Uniq) FROM stored_aggregates GROUP BY d ORDER BY d; -INSERT INTO test.stored_aggregates +INSERT INTO stored_aggregates SELECT toDate(toUInt16(toDate('2014-06-01')) + intDiv(number, 100)) AS d, uniqState(intDiv(number + 50, 10)) AS Uniq @@ -31,15 +31,15 @@ FROM ) GROUP BY d; -SELECT uniqMerge(Uniq) FROM test.stored_aggregates; +SELECT uniqMerge(Uniq) FROM stored_aggregates; -SELECT d, uniqMerge(Uniq) FROM test.stored_aggregates GROUP BY d ORDER BY d; +SELECT d, uniqMerge(Uniq) FROM stored_aggregates GROUP BY d ORDER BY d; -OPTIMIZE TABLE test.stored_aggregates; +OPTIMIZE TABLE stored_aggregates; -SELECT uniqMerge(Uniq) FROM test.stored_aggregates; +SELECT uniqMerge(Uniq) FROM stored_aggregates; -SELECT d, uniqMerge(Uniq) FROM test.stored_aggregates GROUP BY d ORDER BY d; +SELECT d, uniqMerge(Uniq) FROM stored_aggregates GROUP BY d ORDER BY d; -DROP TABLE test.stored_aggregates; +DROP TABLE stored_aggregates; diff --git a/dbms/tests/queries/0_stateless/00061_merge_tree_alter.reference b/dbms/tests/queries/0_stateless/00061_merge_tree_alter.reference index ac7b240f4d5..2ec61dfc13b 100644 --- a/dbms/tests/queries/0_stateless/00061_merge_tree_alter.reference +++ b/dbms/tests/queries/0_stateless/00061_merge_tree_alter.reference @@ -1,56 +1,56 @@ -d Date -k UInt64 -i32 Int32 +d Date +k UInt64 +i32 Int32 CREATE TABLE test.alter (`d` Date, `k` UInt64, `i32` Int32) ENGINE = MergeTree(d, k, 8192) 2015-01-01 10 42 -d Date -k UInt64 -i32 Int32 -n.ui8 Array(UInt8) -n.s Array(String) +d Date +k UInt64 +i32 Int32 +n.ui8 Array(UInt8) +n.s Array(String) CREATE TABLE test.alter (`d` Date, `k` UInt64, `i32` Int32, `n.ui8` Array(UInt8), `n.s` Array(String)) ENGINE = MergeTree(d, k, 8192) 2015-01-01 8 40 [1,2,3] ['12','13','14'] 2015-01-01 10 42 [] [] -d Date -k UInt64 -i32 Int32 -n.ui8 Array(UInt8) -n.s Array(String) -n.d Array(Date) +d Date +k UInt64 +i32 Int32 +n.ui8 Array(UInt8) +n.s Array(String) +n.d Array(Date) CREATE TABLE test.alter (`d` Date, `k` UInt64, `i32` Int32, `n.ui8` Array(UInt8), `n.s` Array(String), `n.d` Array(Date)) ENGINE = MergeTree(d, k, 8192) 2015-01-01 7 39 [10,20,30] ['120','130','140'] ['2000-01-01','2000-01-01','2000-01-03'] 2015-01-01 8 40 [1,2,3] ['12','13','14'] ['0000-00-00','0000-00-00','0000-00-00'] 2015-01-01 10 42 [] [] [] -d Date -k UInt64 -i32 Int32 -n.ui8 Array(UInt8) -n.s Array(String) -n.d Array(Date) -s String DEFAULT \'0\' +d Date +k UInt64 +i32 Int32 +n.ui8 Array(UInt8) +n.s Array(String) +n.d Array(Date) +s String DEFAULT \'0\' CREATE TABLE test.alter (`d` Date, `k` UInt64, `i32` Int32, `n.ui8` Array(UInt8), `n.s` Array(String), `n.d` Array(Date), `s` String DEFAULT \'0\') ENGINE = MergeTree(d, k, 8192) 2015-01-01 6 38 [10,20,30] ['asd','qwe','qwe'] ['2000-01-01','2000-01-01','2000-01-03'] 100500 2015-01-01 7 39 [10,20,30] ['120','130','140'] ['2000-01-01','2000-01-01','2000-01-03'] 0 2015-01-01 8 40 [1,2,3] ['12','13','14'] ['0000-00-00','0000-00-00','0000-00-00'] 0 2015-01-01 10 42 [] [] [] 0 -d Date -k UInt64 -i32 Int32 -n.ui8 Array(UInt8) -n.s Array(String) -s Int64 +d Date +k UInt64 +i32 Int32 +n.ui8 Array(UInt8) +n.s Array(String) +s Int64 CREATE TABLE test.alter (`d` Date, `k` UInt64, `i32` Int32, `n.ui8` Array(UInt8), `n.s` Array(String), `s` Int64) ENGINE = MergeTree(d, k, 8192) 2015-01-01 6 38 [10,20,30] ['asd','qwe','qwe'] 100500 2015-01-01 7 39 [10,20,30] ['120','130','140'] 0 2015-01-01 8 40 [1,2,3] ['12','13','14'] 0 2015-01-01 10 42 [] [] 0 -d Date -k UInt64 -i32 Int32 -n.ui8 Array(UInt8) -n.s Array(String) -s UInt32 -n.d Array(Date) +d Date +k UInt64 +i32 Int32 +n.ui8 Array(UInt8) +n.s Array(String) +s UInt32 +n.d Array(Date) CREATE TABLE test.alter (`d` Date, `k` UInt64, `i32` Int32, `n.ui8` Array(UInt8), `n.s` Array(String), `s` UInt32, `n.d` Array(Date)) ENGINE = MergeTree(d, k, 8192) 2015-01-01 6 38 [10,20,30] ['asd','qwe','qwe'] 100500 ['0000-00-00','0000-00-00','0000-00-00'] 2015-01-01 7 39 [10,20,30] ['120','130','140'] 0 ['0000-00-00','0000-00-00','0000-00-00'] @@ -60,40 +60,40 @@ CREATE TABLE test.alter (`d` Date, `k` UInt64, `i32` Int32, `n.ui8` Array(UInt8) 2015-01-01 7 39 [10,20,30] ['120','130','140'] 0 ['0000-00-00','0000-00-00','0000-00-00'] 2015-01-01 8 40 [1,2,3] ['12','13','14'] 0 ['0000-00-00','0000-00-00','0000-00-00'] 2015-01-01 10 42 [] [] 0 [] -d Date -k UInt64 -i32 Int32 -n.s Array(String) -s UInt32 +d Date +k UInt64 +i32 Int32 +n.s Array(String) +s UInt32 CREATE TABLE test.alter (`d` Date, `k` UInt64, `i32` Int32, `n.s` Array(String), `s` UInt32) ENGINE = MergeTree(d, k, 8192) 2015-01-01 6 38 ['asd','qwe','qwe'] 100500 2015-01-01 7 39 ['120','130','140'] 0 2015-01-01 8 40 ['12','13','14'] 0 2015-01-01 10 42 [] 0 -d Date -k UInt64 -i32 Int32 -s UInt32 +d Date +k UInt64 +i32 Int32 +s UInt32 CREATE TABLE test.alter (`d` Date, `k` UInt64, `i32` Int32, `s` UInt32) ENGINE = MergeTree(d, k, 8192) 2015-01-01 6 38 100500 2015-01-01 7 39 0 2015-01-01 8 40 0 2015-01-01 10 42 0 -d Date -k UInt64 -i32 Int32 -s UInt32 -n.s Array(String) -n.d Array(Date) +d Date +k UInt64 +i32 Int32 +s UInt32 +n.s Array(String) +n.d Array(Date) CREATE TABLE test.alter (`d` Date, `k` UInt64, `i32` Int32, `s` UInt32, `n.s` Array(String), `n.d` Array(Date)) ENGINE = MergeTree(d, k, 8192) 2015-01-01 6 38 100500 [] [] 2015-01-01 7 39 0 [] [] 2015-01-01 8 40 0 [] [] 2015-01-01 10 42 0 [] [] -d Date -k UInt64 -i32 Int32 -s UInt32 +d Date +k UInt64 +i32 Int32 +s UInt32 CREATE TABLE test.alter (`d` Date, `k` UInt64, `i32` Int32, `s` UInt32) ENGINE = MergeTree(d, k, 8192) 2015-01-01 6 38 100500 2015-01-01 7 39 0 diff --git a/dbms/tests/queries/0_stateless/00062_replicated_merge_tree_alter_zookeeper.reference b/dbms/tests/queries/0_stateless/00062_replicated_merge_tree_alter_zookeeper.reference index 931a9c029e2..29c265b2b9f 100644 --- a/dbms/tests/queries/0_stateless/00062_replicated_merge_tree_alter_zookeeper.reference +++ b/dbms/tests/queries/0_stateless/00062_replicated_merge_tree_alter_zookeeper.reference @@ -1,213 +1,213 @@ -d Date -k UInt64 -i32 Int32 +d Date +k UInt64 +i32 Int32 CREATE TABLE test.replicated_alter1 (`d` Date, `k` UInt64, `i32` Int32) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r1\', d, k, 8192) -d Date -k UInt64 -i32 Int32 +d Date +k UInt64 +i32 Int32 CREATE TABLE test.replicated_alter2 (`d` Date, `k` UInt64, `i32` Int32) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r2\', d, k, 8192) 2015-01-01 10 42 -d Date -k UInt64 -i32 Int32 -dt DateTime +d Date +k UInt64 +i32 Int32 +dt DateTime CREATE TABLE test.replicated_alter1 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r1\', d, k, 8192) -d Date -k UInt64 -i32 Int32 -dt DateTime +d Date +k UInt64 +i32 Int32 +dt DateTime CREATE TABLE test.replicated_alter2 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r2\', d, k, 8192) 2015-01-01 9 41 1992-01-01 08:00:00 2015-01-01 10 42 0000-00-00 00:00:00 -d Date -k UInt64 -i32 Int32 -dt DateTime -n.ui8 Array(UInt8) -n.s Array(String) +d Date +k UInt64 +i32 Int32 +dt DateTime +n.ui8 Array(UInt8) +n.s Array(String) CREATE TABLE test.replicated_alter1 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `n.ui8` Array(UInt8), `n.s` Array(String)) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r1\', d, k, 8192) -d Date -k UInt64 -i32 Int32 -dt DateTime -n.ui8 Array(UInt8) -n.s Array(String) +d Date +k UInt64 +i32 Int32 +dt DateTime +n.ui8 Array(UInt8) +n.s Array(String) CREATE TABLE test.replicated_alter2 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `n.ui8` Array(UInt8), `n.s` Array(String)) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r2\', d, k, 8192) 2015-01-01 8 40 2012-12-12 12:12:12 [1,2,3] ['12','13','14'] 2015-01-01 9 41 1992-01-01 08:00:00 [] [] 2015-01-01 10 42 0000-00-00 00:00:00 [] [] -d Date -k UInt64 -i32 Int32 -dt DateTime -n.ui8 Array(UInt8) -n.s Array(String) -n.d Array(Date) +d Date +k UInt64 +i32 Int32 +dt DateTime +n.ui8 Array(UInt8) +n.s Array(String) +n.d Array(Date) CREATE TABLE test.replicated_alter1 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `n.ui8` Array(UInt8), `n.s` Array(String), `n.d` Array(Date)) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r1\', d, k, 8192) -d Date -k UInt64 -i32 Int32 -dt DateTime -n.ui8 Array(UInt8) -n.s Array(String) -n.d Array(Date) +d Date +k UInt64 +i32 Int32 +dt DateTime +n.ui8 Array(UInt8) +n.s Array(String) +n.d Array(Date) CREATE TABLE test.replicated_alter2 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `n.ui8` Array(UInt8), `n.s` Array(String), `n.d` Array(Date)) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r2\', d, k, 8192) 2015-01-01 7 39 2014-07-14 13:26:50 [10,20,30] ['120','130','140'] ['2000-01-01','2000-01-01','2000-01-03'] 2015-01-01 8 40 2012-12-12 12:12:12 [1,2,3] ['12','13','14'] ['0000-00-00','0000-00-00','0000-00-00'] 2015-01-01 9 41 1992-01-01 08:00:00 [] [] [] 2015-01-01 10 42 0000-00-00 00:00:00 [] [] [] -d Date -k UInt64 -i32 Int32 -dt DateTime -n.ui8 Array(UInt8) -n.s Array(String) -n.d Array(Date) -s String DEFAULT \'0\' +d Date +k UInt64 +i32 Int32 +dt DateTime +n.ui8 Array(UInt8) +n.s Array(String) +n.d Array(Date) +s String DEFAULT \'0\' CREATE TABLE test.replicated_alter1 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `n.ui8` Array(UInt8), `n.s` Array(String), `n.d` Array(Date), `s` String DEFAULT \'0\') ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r1\', d, k, 8192) -d Date -k UInt64 -i32 Int32 -dt DateTime -n.ui8 Array(UInt8) -n.s Array(String) -n.d Array(Date) -s String DEFAULT \'0\' +d Date +k UInt64 +i32 Int32 +dt DateTime +n.ui8 Array(UInt8) +n.s Array(String) +n.d Array(Date) +s String DEFAULT \'0\' CREATE TABLE test.replicated_alter2 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `n.ui8` Array(UInt8), `n.s` Array(String), `n.d` Array(Date), `s` String DEFAULT \'0\') ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r2\', d, k, 8192) 2015-01-01 6 38 2014-07-15 13:26:50 [10,20,30] ['asd','qwe','qwe'] ['2000-01-01','2000-01-01','2000-01-03'] 100500 2015-01-01 7 39 2014-07-14 13:26:50 [10,20,30] ['120','130','140'] ['2000-01-01','2000-01-01','2000-01-03'] 0 2015-01-01 8 40 2012-12-12 12:12:12 [1,2,3] ['12','13','14'] ['0000-00-00','0000-00-00','0000-00-00'] 0 2015-01-01 9 41 1992-01-01 08:00:00 [] [] [] 0 2015-01-01 10 42 0000-00-00 00:00:00 [] [] [] 0 -d Date -k UInt64 -i32 Int32 -dt DateTime -n.ui8 Array(UInt8) -n.s Array(String) -s Int64 +d Date +k UInt64 +i32 Int32 +dt DateTime +n.ui8 Array(UInt8) +n.s Array(String) +s Int64 CREATE TABLE test.replicated_alter1 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `n.ui8` Array(UInt8), `n.s` Array(String), `s` Int64) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r1\', d, k, 8192) -d Date -k UInt64 -i32 Int32 -dt DateTime -n.ui8 Array(UInt8) -n.s Array(String) -s Int64 +d Date +k UInt64 +i32 Int32 +dt DateTime +n.ui8 Array(UInt8) +n.s Array(String) +s Int64 CREATE TABLE test.replicated_alter2 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `n.ui8` Array(UInt8), `n.s` Array(String), `s` Int64) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r2\', d, k, 8192) 2015-01-01 6 38 2014-07-15 13:26:50 [10,20,30] ['asd','qwe','qwe'] 100500 2015-01-01 7 39 2014-07-14 13:26:50 [10,20,30] ['120','130','140'] 0 2015-01-01 8 40 2012-12-12 12:12:12 [1,2,3] ['12','13','14'] 0 2015-01-01 9 41 1992-01-01 08:00:00 [] [] 0 2015-01-01 10 42 0000-00-00 00:00:00 [] [] 0 -d Date -k UInt64 -i32 Int32 -dt DateTime -n.ui8 Array(UInt8) -n.s Array(String) -s UInt32 -n.d Array(Date) +d Date +k UInt64 +i32 Int32 +dt DateTime +n.ui8 Array(UInt8) +n.s Array(String) +s UInt32 +n.d Array(Date) CREATE TABLE test.replicated_alter1 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `n.ui8` Array(UInt8), `n.s` Array(String), `s` UInt32, `n.d` Array(Date)) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r1\', d, k, 8192) -d Date -k UInt64 -i32 Int32 -dt DateTime -n.ui8 Array(UInt8) -n.s Array(String) -s UInt32 -n.d Array(Date) +d Date +k UInt64 +i32 Int32 +dt DateTime +n.ui8 Array(UInt8) +n.s Array(String) +s UInt32 +n.d Array(Date) CREATE TABLE test.replicated_alter2 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `n.ui8` Array(UInt8), `n.s` Array(String), `s` UInt32, `n.d` Array(Date)) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r2\', d, k, 8192) 2015-01-01 6 38 2014-07-15 13:26:50 [10,20,30] ['asd','qwe','qwe'] 100500 ['0000-00-00','0000-00-00','0000-00-00'] 2015-01-01 7 39 2014-07-14 13:26:50 [10,20,30] ['120','130','140'] 0 ['0000-00-00','0000-00-00','0000-00-00'] 2015-01-01 8 40 2012-12-12 12:12:12 [1,2,3] ['12','13','14'] 0 ['0000-00-00','0000-00-00','0000-00-00'] 2015-01-01 9 41 1992-01-01 08:00:00 [] [] 0 [] 2015-01-01 10 42 0000-00-00 00:00:00 [] [] 0 [] -d Date -k UInt64 -i32 Int32 -dt DateTime -n.s Array(String) -s UInt32 +d Date +k UInt64 +i32 Int32 +dt DateTime +n.s Array(String) +s UInt32 CREATE TABLE test.replicated_alter1 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `n.s` Array(String), `s` UInt32) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r1\', d, k, 8192) -d Date -k UInt64 -i32 Int32 -dt DateTime -n.s Array(String) -s UInt32 +d Date +k UInt64 +i32 Int32 +dt DateTime +n.s Array(String) +s UInt32 CREATE TABLE test.replicated_alter2 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `n.s` Array(String), `s` UInt32) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r2\', d, k, 8192) 2015-01-01 6 38 2014-07-15 13:26:50 ['asd','qwe','qwe'] 100500 2015-01-01 7 39 2014-07-14 13:26:50 ['120','130','140'] 0 2015-01-01 8 40 2012-12-12 12:12:12 ['12','13','14'] 0 2015-01-01 9 41 1992-01-01 08:00:00 [] 0 2015-01-01 10 42 0000-00-00 00:00:00 [] 0 -d Date -k UInt64 -i32 Int32 -dt DateTime -s UInt32 +d Date +k UInt64 +i32 Int32 +dt DateTime +s UInt32 CREATE TABLE test.replicated_alter1 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `s` UInt32) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r1\', d, k, 8192) -d Date -k UInt64 -i32 Int32 -dt DateTime -s UInt32 +d Date +k UInt64 +i32 Int32 +dt DateTime +s UInt32 CREATE TABLE test.replicated_alter2 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `s` UInt32) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r2\', d, k, 8192) 2015-01-01 6 38 2014-07-15 13:26:50 100500 2015-01-01 7 39 2014-07-14 13:26:50 0 2015-01-01 8 40 2012-12-12 12:12:12 0 2015-01-01 9 41 1992-01-01 08:00:00 0 2015-01-01 10 42 0000-00-00 00:00:00 0 -d Date -k UInt64 -i32 Int32 -dt DateTime -s UInt32 -n.s Array(String) -n.d Array(Date) +d Date +k UInt64 +i32 Int32 +dt DateTime +s UInt32 +n.s Array(String) +n.d Array(Date) CREATE TABLE test.replicated_alter1 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `s` UInt32, `n.s` Array(String), `n.d` Array(Date)) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r1\', d, k, 8192) -d Date -k UInt64 -i32 Int32 -dt DateTime -s UInt32 -n.s Array(String) -n.d Array(Date) +d Date +k UInt64 +i32 Int32 +dt DateTime +s UInt32 +n.s Array(String) +n.d Array(Date) CREATE TABLE test.replicated_alter2 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `s` UInt32, `n.s` Array(String), `n.d` Array(Date)) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r2\', d, k, 8192) 2015-01-01 6 38 2014-07-15 13:26:50 100500 [] [] 2015-01-01 7 39 2014-07-14 13:26:50 0 [] [] 2015-01-01 8 40 2012-12-12 12:12:12 0 [] [] 2015-01-01 9 41 1992-01-01 08:00:00 0 [] [] 2015-01-01 10 42 0000-00-00 00:00:00 0 [] [] -d Date -k UInt64 -i32 Int32 -dt DateTime -s UInt32 +d Date +k UInt64 +i32 Int32 +dt DateTime +s UInt32 CREATE TABLE test.replicated_alter1 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `s` UInt32) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r1\', d, k, 8192) -d Date -k UInt64 -i32 Int32 -dt DateTime -s UInt32 +d Date +k UInt64 +i32 Int32 +dt DateTime +s UInt32 CREATE TABLE test.replicated_alter2 (`d` Date, `k` UInt64, `i32` Int32, `dt` DateTime, `s` UInt32) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r2\', d, k, 8192) 2015-01-01 6 38 2014-07-15 13:26:50 100500 2015-01-01 7 39 2014-07-14 13:26:50 0 2015-01-01 8 40 2012-12-12 12:12:12 0 2015-01-01 9 41 1992-01-01 08:00:00 0 2015-01-01 10 42 0000-00-00 00:00:00 0 -d Date -k UInt64 -i32 Int32 -dt Date -s DateTime +d Date +k UInt64 +i32 Int32 +dt Date +s DateTime CREATE TABLE test.replicated_alter1 (`d` Date, `k` UInt64, `i32` Int32, `dt` Date, `s` DateTime) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r1\', d, k, 8192) -d Date -k UInt64 -i32 Int32 -dt Date -s DateTime +d Date +k UInt64 +i32 Int32 +dt Date +s DateTime CREATE TABLE test.replicated_alter2 (`d` Date, `k` UInt64, `i32` Int32, `dt` Date, `s` DateTime) ENGINE = ReplicatedMergeTree(\'/clickhouse/tables/test/alter\', \'r2\', d, k, 8192) 2015-01-01 6 38 2014-07-15 1970-01-02 06:55:00 2015-01-01 7 39 2014-07-14 0000-00-00 00:00:00 diff --git a/dbms/tests/queries/0_stateless/00062_replicated_merge_tree_alter_zookeeper.sql b/dbms/tests/queries/0_stateless/00062_replicated_merge_tree_alter_zookeeper.sql index 7686c27fe34..78b80d4a10f 100644 --- a/dbms/tests/queries/0_stateless/00062_replicated_merge_tree_alter_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00062_replicated_merge_tree_alter_zookeeper.sql @@ -1,107 +1,107 @@ -DROP TABLE IF EXISTS test.replicated_alter1; -DROP TABLE IF EXISTS test.replicated_alter2; -CREATE TABLE test.replicated_alter1 (d Date, k UInt64, i32 Int32) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test/alter', 'r1', d, k, 8192); -CREATE TABLE test.replicated_alter2 (d Date, k UInt64, i32 Int32) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test/alter', 'r2', d, k, 8192); +DROP TABLE IF EXISTS replicated_alter1; +DROP TABLE IF EXISTS replicated_alter2; +CREATE TABLE replicated_alter1 (d Date, k UInt64, i32 Int32) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test/alter', 'r1', d, k, 8192); +CREATE TABLE replicated_alter2 (d Date, k UInt64, i32 Int32) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test/alter', 'r2', d, k, 8192); -INSERT INTO test.replicated_alter1 VALUES ('2015-01-01', 10, 42); +INSERT INTO replicated_alter1 VALUES ('2015-01-01', 10, 42); -DESC TABLE test.replicated_alter1; -SHOW CREATE TABLE test.replicated_alter1; -DESC TABLE test.replicated_alter2; -SHOW CREATE TABLE test.replicated_alter2; -SELECT * FROM test.replicated_alter1 ORDER BY k; +DESC TABLE replicated_alter1; +SHOW CREATE TABLE replicated_alter1; +DESC TABLE replicated_alter2; +SHOW CREATE TABLE replicated_alter2; +SELECT * FROM replicated_alter1 ORDER BY k; -ALTER TABLE test.replicated_alter1 ADD COLUMN dt DateTime; -INSERT INTO test.replicated_alter1 VALUES ('2015-01-01', 9, 41, '1992-01-01 08:00:00'); +ALTER TABLE replicated_alter1 ADD COLUMN dt DateTime; +INSERT INTO replicated_alter1 VALUES ('2015-01-01', 9, 41, '1992-01-01 08:00:00'); -DESC TABLE test.replicated_alter1; -SHOW CREATE TABLE test.replicated_alter1; -DESC TABLE test.replicated_alter2; -SHOW CREATE TABLE test.replicated_alter2; -SELECT * FROM test.replicated_alter1 ORDER BY k; +DESC TABLE replicated_alter1; +SHOW CREATE TABLE replicated_alter1; +DESC TABLE replicated_alter2; +SHOW CREATE TABLE replicated_alter2; +SELECT * FROM replicated_alter1 ORDER BY k; -ALTER TABLE test.replicated_alter1 ADD COLUMN n Nested(ui8 UInt8, s String); -INSERT INTO test.replicated_alter1 VALUES ('2015-01-01', 8, 40, '2012-12-12 12:12:12', [1,2,3], ['12','13','14']); +ALTER TABLE replicated_alter1 ADD COLUMN n Nested(ui8 UInt8, s String); +INSERT INTO replicated_alter1 VALUES ('2015-01-01', 8, 40, '2012-12-12 12:12:12', [1,2,3], ['12','13','14']); -DESC TABLE test.replicated_alter1; -SHOW CREATE TABLE test.replicated_alter1; -DESC TABLE test.replicated_alter2; -SHOW CREATE TABLE test.replicated_alter2; -SELECT * FROM test.replicated_alter1 ORDER BY k; +DESC TABLE replicated_alter1; +SHOW CREATE TABLE replicated_alter1; +DESC TABLE replicated_alter2; +SHOW CREATE TABLE replicated_alter2; +SELECT * FROM replicated_alter1 ORDER BY k; -ALTER TABLE test.replicated_alter1 ADD COLUMN `n.d` Array(Date); -INSERT INTO test.replicated_alter1 VALUES ('2015-01-01', 7, 39, '2014-07-14 13:26:50', [10,20,30], ['120','130','140'],['2000-01-01','2000-01-01','2000-01-03']); +ALTER TABLE replicated_alter1 ADD COLUMN `n.d` Array(Date); +INSERT INTO replicated_alter1 VALUES ('2015-01-01', 7, 39, '2014-07-14 13:26:50', [10,20,30], ['120','130','140'],['2000-01-01','2000-01-01','2000-01-03']); -DESC TABLE test.replicated_alter1; -SHOW CREATE TABLE test.replicated_alter1; -DESC TABLE test.replicated_alter2; -SHOW CREATE TABLE test.replicated_alter2; -SELECT * FROM test.replicated_alter1 ORDER BY k; +DESC TABLE replicated_alter1; +SHOW CREATE TABLE replicated_alter1; +DESC TABLE replicated_alter2; +SHOW CREATE TABLE replicated_alter2; +SELECT * FROM replicated_alter1 ORDER BY k; -ALTER TABLE test.replicated_alter1 ADD COLUMN s String DEFAULT '0'; -INSERT INTO test.replicated_alter1 VALUES ('2015-01-01', 6,38,'2014-07-15 13:26:50',[10,20,30],['asd','qwe','qwe'],['2000-01-01','2000-01-01','2000-01-03'],'100500'); +ALTER TABLE replicated_alter1 ADD COLUMN s String DEFAULT '0'; +INSERT INTO replicated_alter1 VALUES ('2015-01-01', 6,38,'2014-07-15 13:26:50',[10,20,30],['asd','qwe','qwe'],['2000-01-01','2000-01-01','2000-01-03'],'100500'); -DESC TABLE test.replicated_alter1; -SHOW CREATE TABLE test.replicated_alter1; -DESC TABLE test.replicated_alter2; -SHOW CREATE TABLE test.replicated_alter2; -SELECT * FROM test.replicated_alter1 ORDER BY k; +DESC TABLE replicated_alter1; +SHOW CREATE TABLE replicated_alter1; +DESC TABLE replicated_alter2; +SHOW CREATE TABLE replicated_alter2; +SELECT * FROM replicated_alter1 ORDER BY k; -ALTER TABLE test.replicated_alter1 DROP COLUMN `n.d`, MODIFY COLUMN s Int64; +ALTER TABLE replicated_alter1 DROP COLUMN `n.d`, MODIFY COLUMN s Int64; -DESC TABLE test.replicated_alter1; -SHOW CREATE TABLE test.replicated_alter1; -DESC TABLE test.replicated_alter2; -SHOW CREATE TABLE test.replicated_alter2; -SELECT * FROM test.replicated_alter1 ORDER BY k; +DESC TABLE replicated_alter1; +SHOW CREATE TABLE replicated_alter1; +DESC TABLE replicated_alter2; +SHOW CREATE TABLE replicated_alter2; +SELECT * FROM replicated_alter1 ORDER BY k; -ALTER TABLE test.replicated_alter1 ADD COLUMN `n.d` Array(Date), MODIFY COLUMN s UInt32; +ALTER TABLE replicated_alter1 ADD COLUMN `n.d` Array(Date), MODIFY COLUMN s UInt32; -DESC TABLE test.replicated_alter1; -SHOW CREATE TABLE test.replicated_alter1; -DESC TABLE test.replicated_alter2; -SHOW CREATE TABLE test.replicated_alter2; -SELECT * FROM test.replicated_alter1 ORDER BY k; +DESC TABLE replicated_alter1; +SHOW CREATE TABLE replicated_alter1; +DESC TABLE replicated_alter2; +SHOW CREATE TABLE replicated_alter2; +SELECT * FROM replicated_alter1 ORDER BY k; -ALTER TABLE test.replicated_alter1 DROP COLUMN n.ui8, DROP COLUMN n.d; +ALTER TABLE replicated_alter1 DROP COLUMN n.ui8, DROP COLUMN n.d; -DESC TABLE test.replicated_alter1; -SHOW CREATE TABLE test.replicated_alter1; -DESC TABLE test.replicated_alter2; -SHOW CREATE TABLE test.replicated_alter2; -SELECT * FROM test.replicated_alter1 ORDER BY k; +DESC TABLE replicated_alter1; +SHOW CREATE TABLE replicated_alter1; +DESC TABLE replicated_alter2; +SHOW CREATE TABLE replicated_alter2; +SELECT * FROM replicated_alter1 ORDER BY k; -ALTER TABLE test.replicated_alter1 DROP COLUMN n.s; +ALTER TABLE replicated_alter1 DROP COLUMN n.s; -DESC TABLE test.replicated_alter1; -SHOW CREATE TABLE test.replicated_alter1; -DESC TABLE test.replicated_alter2; -SHOW CREATE TABLE test.replicated_alter2; -SELECT * FROM test.replicated_alter1 ORDER BY k; +DESC TABLE replicated_alter1; +SHOW CREATE TABLE replicated_alter1; +DESC TABLE replicated_alter2; +SHOW CREATE TABLE replicated_alter2; +SELECT * FROM replicated_alter1 ORDER BY k; -ALTER TABLE test.replicated_alter1 ADD COLUMN n.s Array(String), ADD COLUMN n.d Array(Date); +ALTER TABLE replicated_alter1 ADD COLUMN n.s Array(String), ADD COLUMN n.d Array(Date); -DESC TABLE test.replicated_alter1; -SHOW CREATE TABLE test.replicated_alter1; -DESC TABLE test.replicated_alter2; -SHOW CREATE TABLE test.replicated_alter2; -SELECT * FROM test.replicated_alter1 ORDER BY k; +DESC TABLE replicated_alter1; +SHOW CREATE TABLE replicated_alter1; +DESC TABLE replicated_alter2; +SHOW CREATE TABLE replicated_alter2; +SELECT * FROM replicated_alter1 ORDER BY k; -ALTER TABLE test.replicated_alter1 DROP COLUMN n; +ALTER TABLE replicated_alter1 DROP COLUMN n; -DESC TABLE test.replicated_alter1; -SHOW CREATE TABLE test.replicated_alter1; -DESC TABLE test.replicated_alter2; -SHOW CREATE TABLE test.replicated_alter2; -SELECT * FROM test.replicated_alter1 ORDER BY k; +DESC TABLE replicated_alter1; +SHOW CREATE TABLE replicated_alter1; +DESC TABLE replicated_alter2; +SHOW CREATE TABLE replicated_alter2; +SELECT * FROM replicated_alter1 ORDER BY k; -ALTER TABLE test.replicated_alter1 MODIFY COLUMN dt Date, MODIFY COLUMN s DateTime; +ALTER TABLE replicated_alter1 MODIFY COLUMN dt Date, MODIFY COLUMN s DateTime; -DESC TABLE test.replicated_alter1; -SHOW CREATE TABLE test.replicated_alter1; -DESC TABLE test.replicated_alter2; -SHOW CREATE TABLE test.replicated_alter2; -SELECT * FROM test.replicated_alter1 ORDER BY k; +DESC TABLE replicated_alter1; +SHOW CREATE TABLE replicated_alter1; +DESC TABLE replicated_alter2; +SHOW CREATE TABLE replicated_alter2; +SELECT * FROM replicated_alter1 ORDER BY k; -DROP TABLE test.replicated_alter1; -DROP TABLE test.replicated_alter2; +DROP TABLE replicated_alter1; +DROP TABLE replicated_alter2; diff --git a/dbms/tests/queries/0_stateless/00068_empty_tiny_log.sql b/dbms/tests/queries/0_stateless/00068_empty_tiny_log.sql index 8e6b59afd66..22b0f8bf125 100644 --- a/dbms/tests/queries/0_stateless/00068_empty_tiny_log.sql +++ b/dbms/tests/queries/0_stateless/00068_empty_tiny_log.sql @@ -1,5 +1,5 @@ -CREATE TABLE IF NOT EXISTS test.empty_tiny_log(A UInt8) Engine = TinyLog; +CREATE TABLE IF NOT EXISTS empty_tiny_log(A UInt8) Engine = TinyLog; -SELECT A FROM test.empty_tiny_log; +SELECT A FROM empty_tiny_log; -DROP TABLE test.empty_tiny_log; +DROP TABLE empty_tiny_log; diff --git a/dbms/tests/queries/0_stateless/00070_insert_fewer_columns_http.sh b/dbms/tests/queries/0_stateless/00070_insert_fewer_columns_http.sh index ff436147c12..31f412cab03 100755 --- a/dbms/tests/queries/0_stateless/00070_insert_fewer_columns_http.sh +++ b/dbms/tests/queries/0_stateless/00070_insert_fewer_columns_http.sh @@ -4,7 +4,7 @@ set -e CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -echo 'DROP TABLE IF EXISTS test.insert_fewer_columns' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- -echo 'CREATE TABLE test.insert_fewer_columns (a UInt8, b UInt8) ENGINE = Memory' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- -echo 'INSERT INTO test.insert_fewer_columns (a) VALUES (1), (2)' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- -echo 'SELECT * FROM test.insert_fewer_columns' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- +echo 'DROP TABLE IF EXISTS insert_fewer_columns' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- +echo 'CREATE TABLE insert_fewer_columns (a UInt8, b UInt8) ENGINE = Memory' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- +echo 'INSERT INTO insert_fewer_columns (a) VALUES (1), (2)' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- +echo 'SELECT * FROM insert_fewer_columns' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- diff --git a/dbms/tests/queries/0_stateless/00071_insert_fewer_columns.sql b/dbms/tests/queries/0_stateless/00071_insert_fewer_columns.sql index 46148c3980f..bca63395d31 100644 --- a/dbms/tests/queries/0_stateless/00071_insert_fewer_columns.sql +++ b/dbms/tests/queries/0_stateless/00071_insert_fewer_columns.sql @@ -1,14 +1,14 @@ -DROP TABLE IF EXISTS test.insert_fewer_columns; -CREATE TABLE test.insert_fewer_columns (a UInt8, b UInt8) ENGINE = Memory; -INSERT INTO test.insert_fewer_columns (a) VALUES (1), (2); -SELECT * FROM test.insert_fewer_columns; +DROP TABLE IF EXISTS insert_fewer_columns; +CREATE TABLE insert_fewer_columns (a UInt8, b UInt8) ENGINE = Memory; +INSERT INTO insert_fewer_columns (a) VALUES (1), (2); +SELECT * FROM insert_fewer_columns; -- Test position arguments in insert. -DROP TABLE IF EXISTS test.insert_fewer_columns_2; -CREATE TABLE test.insert_fewer_columns_2 (b UInt8, a UInt8) ENGINE = Memory; -INSERT INTO test.insert_fewer_columns_2 SELECT * FROM test.insert_fewer_columns; -SELECT a, b FROM test.insert_fewer_columns; -SELECT a, b FROM test.insert_fewer_columns_2; +DROP TABLE IF EXISTS insert_fewer_columns_2; +CREATE TABLE insert_fewer_columns_2 (b UInt8, a UInt8) ENGINE = Memory; +INSERT INTO insert_fewer_columns_2 SELECT * FROM insert_fewer_columns; +SELECT a, b FROM insert_fewer_columns; +SELECT a, b FROM insert_fewer_columns_2; -DROP TABLE IF EXISTS test.insert_fewer_columns_2; -DROP TABLE test.insert_fewer_columns; +DROP TABLE IF EXISTS insert_fewer_columns_2; +DROP TABLE insert_fewer_columns; diff --git a/dbms/tests/queries/0_stateless/00076_ip_coding_functions.sql b/dbms/tests/queries/0_stateless/00076_ip_coding_functions.sql index eba809afc62..69343d43052 100644 --- a/dbms/tests/queries/0_stateless/00076_ip_coding_functions.sql +++ b/dbms/tests/queries/0_stateless/00076_ip_coding_functions.sql @@ -26,10 +26,10 @@ SELECT hex(IPv4ToIPv6(1297626935)); /* Тест с таблицей */ -DROP TABLE IF EXISTS test.addresses; -CREATE TABLE test.addresses(addr UInt32) ENGINE = Memory; -INSERT INTO test.addresses(addr) VALUES (1297626935), (2130706433), (3254522122); -SELECT hex(IPv4ToIPv6(addr)) FROM test.addresses ORDER BY addr ASC; +DROP TABLE IF EXISTS addresses; +CREATE TABLE addresses(addr UInt32) ENGINE = Memory; +INSERT INTO addresses(addr) VALUES (1297626935), (2130706433), (3254522122); +SELECT hex(IPv4ToIPv6(addr)) FROM addresses ORDER BY addr ASC; /* cutIPv6 */ @@ -113,15 +113,15 @@ SELECT cutIPv6(toFixedString(unhex('00000000000000000000FFFFC1FC110A'), 16), 0, /* Реальные IPv6-адреса */ -DROP TABLE IF EXISTS test.addresses; -CREATE TABLE test.addresses(addr String) ENGINE = Memory; -INSERT INTO test.addresses(addr) VALUES ('20010DB8AC10FE01FEEDBABECAFEF00D'), ('20010DB8AC10FE01DEADC0DECAFED00D'), ('20010DB8AC10FE01ABADBABEFACEB00C'); -SELECT cutIPv6(toFixedString(unhex(addr), 16), 3, 0) FROM test.addresses ORDER BY addr ASC; +DROP TABLE IF EXISTS addresses; +CREATE TABLE addresses(addr String) ENGINE = Memory; +INSERT INTO addresses(addr) VALUES ('20010DB8AC10FE01FEEDBABECAFEF00D'), ('20010DB8AC10FE01DEADC0DECAFED00D'), ('20010DB8AC10FE01ABADBABEFACEB00C'); +SELECT cutIPv6(toFixedString(unhex(addr), 16), 3, 0) FROM addresses ORDER BY addr ASC; /* IPv4-mapped IPv6-адреса */ -DROP TABLE IF EXISTS test.addresses; -CREATE TABLE test.addresses(addr String) ENGINE = Memory; -INSERT INTO test.addresses(addr) VALUES ('00000000000000000000FFFFC1FC110A'), ('00000000000000000000FFFF4D583737'), ('00000000000000000000FFFF7F000001'); -SELECT cutIPv6(toFixedString(unhex(addr), 16), 0, 3) FROM test.addresses ORDER BY addr ASC; +DROP TABLE IF EXISTS addresses; +CREATE TABLE addresses(addr String) ENGINE = Memory; +INSERT INTO addresses(addr) VALUES ('00000000000000000000FFFFC1FC110A'), ('00000000000000000000FFFF4D583737'), ('00000000000000000000FFFF7F000001'); +SELECT cutIPv6(toFixedString(unhex(addr), 16), 0, 3) FROM addresses ORDER BY addr ASC; diff --git a/dbms/tests/queries/0_stateless/00079_defaulted_columns.reference b/dbms/tests/queries/0_stateless/00079_defaulted_columns.reference index 7e344830947..207f25399fc 100644 --- a/dbms/tests/queries/0_stateless/00079_defaulted_columns.reference +++ b/dbms/tests/queries/0_stateless/00079_defaulted_columns.reference @@ -1,42 +1,42 @@ -col1 UInt8 DEFAULT 0 -col1 UInt32 -col2 UInt64 DEFAULT col1 + 1 -col3 UInt64 MATERIALIZED col1 + 2 -col4 UInt64 ALIAS col1 + 3 +col1 UInt8 DEFAULT 0 +col1 UInt32 +col2 UInt64 DEFAULT col1 + 1 +col3 UInt64 MATERIALIZED col1 + 2 +col4 UInt64 ALIAS col1 + 3 10 11 12 13 99 -payload String -date Date MATERIALIZED today() -key UInt64 MATERIALIZED 0 * rand() +payload String +date Date MATERIALIZED today() +key UInt64 MATERIALIZED 0 * rand() hello clickhouse -payload String -date Date MATERIALIZED today() -key UInt64 MATERIALIZED 0 * rand() -payload_length UInt64 MATERIALIZED length(payload) +payload String +date Date MATERIALIZED today() +key UInt64 MATERIALIZED 0 * rand() +payload_length UInt64 MATERIALIZED length(payload) hello clickhouse 16 hello clickhouse 16 some string 11 hello clickhouse 16 some string 11 -payload String -date Date MATERIALIZED today() -key UInt64 MATERIALIZED 0 * rand() -payload_length UInt64 DEFAULT length(payload) +payload String +date Date MATERIALIZED today() +key UInt64 MATERIALIZED 0 * rand() +payload_length UInt64 DEFAULT length(payload) hello clickhouse 16 some string 11 -payload String -date Date MATERIALIZED today() -key UInt64 MATERIALIZED 0 * rand() -payload_length UInt16 DEFAULT length(payload) % 65535 +payload String +date Date MATERIALIZED today() +key UInt64 MATERIALIZED 0 * rand() +payload_length UInt16 DEFAULT length(payload) % 65535 hello clickhouse 16 some string 11 -payload String -date Date MATERIALIZED today() -key UInt64 MATERIALIZED 0 * rand() -payload_length UInt16 DEFAULT CAST(length(payload), \'UInt16\') -payload String -date Date MATERIALIZED today() -key UInt64 MATERIALIZED 0 * rand() +payload String +date Date MATERIALIZED today() +key UInt64 MATERIALIZED 0 * rand() +payload_length UInt16 DEFAULT CAST(length(payload), \'UInt16\') +payload String +date Date MATERIALIZED today() +key UInt64 MATERIALIZED 0 * rand() hello clickhouse some string diff --git a/dbms/tests/queries/0_stateless/00079_defaulted_columns.sql b/dbms/tests/queries/0_stateless/00079_defaulted_columns.sql index b1819d8e0c4..8137b57dcbd 100644 --- a/dbms/tests/queries/0_stateless/00079_defaulted_columns.sql +++ b/dbms/tests/queries/0_stateless/00079_defaulted_columns.sql @@ -1,40 +1,40 @@ -drop table if exists test.defaulted; +drop table if exists defaulted; -create table test.defaulted (col1 default 0) engine=Memory; -desc table test.defaulted; -drop table test.defaulted; +create table defaulted (col1 default 0) engine=Memory; +desc table defaulted; +drop table defaulted; -create table test.defaulted (col1 UInt32, col2 default col1 + 1, col3 materialized col1 + 2, col4 alias col1 + 3) engine=Memory; -desc table test.defaulted; -insert into test.defaulted (col1) values (10); -select * from test.defaulted; -select col3, col4 from test.defaulted; -drop table test.defaulted; +create table defaulted (col1 UInt32, col2 default col1 + 1, col3 materialized col1 + 2, col4 alias col1 + 3) engine=Memory; +desc table defaulted; +insert into defaulted (col1) values (10); +select * from defaulted; +select col3, col4 from defaulted; +drop table defaulted; -create table test.defaulted (col1 Int8, col2 UInt64 default (SELECT dummy+99 from system.one)) engine=Memory; -insert into test.defaulted (col1) values (0); -select col2 from test.defaulted; -drop table test.defaulted; +create table defaulted (col1 Int8, col2 UInt64 default (SELECT dummy+99 from system.one)) engine=Memory; +insert into defaulted (col1) values (0); +select col2 from defaulted; +drop table defaulted; -create table test.defaulted (payload String, date materialized today(), key materialized 0 * rand()) engine=MergeTree(date, key, 8192); -desc table test.defaulted; -insert into test.defaulted (payload) values ('hello clickhouse'); -select * from test.defaulted; -alter table test.defaulted add column payload_length materialized length(payload); -desc table test.defaulted; -select *, payload_length from test.defaulted; -insert into test.defaulted (payload) values ('some string'); -select *, payload_length from test.defaulted order by payload; -select *, payload_length from test.defaulted order by payload; -alter table test.defaulted modify column payload_length default length(payload); -desc table test.defaulted; -select * from test.defaulted order by payload; -alter table test.defaulted modify column payload_length default length(payload) % 65535; -desc table test.defaulted; -select * from test.defaulted order by payload; -alter table test.defaulted modify column payload_length UInt16 default length(payload); -desc table test.defaulted; -alter table test.defaulted drop column payload_length; -desc table test.defaulted; -select * from test.defaulted order by payload; -drop table test.defaulted; +create table defaulted (payload String, date materialized today(), key materialized 0 * rand()) engine=MergeTree(date, key, 8192); +desc table defaulted; +insert into defaulted (payload) values ('hello clickhouse'); +select * from defaulted; +alter table defaulted add column payload_length materialized length(payload); +desc table defaulted; +select *, payload_length from defaulted; +insert into defaulted (payload) values ('some string'); +select *, payload_length from defaulted order by payload; +select *, payload_length from defaulted order by payload; +alter table defaulted modify column payload_length default length(payload); +desc table defaulted; +select * from defaulted order by payload; +alter table defaulted modify column payload_length default length(payload) % 65535; +desc table defaulted; +select * from defaulted order by payload; +alter table defaulted modify column payload_length UInt16 default length(payload); +desc table defaulted; +alter table defaulted drop column payload_length; +desc table defaulted; +select * from defaulted order by payload; +drop table defaulted; diff --git a/dbms/tests/queries/0_stateless/00083_create_merge_tree_zookeeper.sql b/dbms/tests/queries/0_stateless/00083_create_merge_tree_zookeeper.sql index 4e47f0f7fdf..45f7ff4d93f 100644 --- a/dbms/tests/queries/0_stateless/00083_create_merge_tree_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00083_create_merge_tree_zookeeper.sql @@ -1,138 +1,138 @@ -DROP TABLE IF EXISTS test.merge_tree; -DROP TABLE IF EXISTS test.collapsing_merge_tree; -DROP TABLE IF EXISTS test.versioned_collapsing_merge_tree; -DROP TABLE IF EXISTS test.summing_merge_tree; -DROP TABLE IF EXISTS test.summing_merge_tree_with_list_of_columns_to_sum; -DROP TABLE IF EXISTS test.aggregating_merge_tree; +DROP TABLE IF EXISTS merge_tree; +DROP TABLE IF EXISTS collapsing_merge_tree; +DROP TABLE IF EXISTS versioned_collapsing_merge_tree; +DROP TABLE IF EXISTS summing_merge_tree; +DROP TABLE IF EXISTS summing_merge_tree_with_list_of_columns_to_sum; +DROP TABLE IF EXISTS aggregating_merge_tree; -DROP TABLE IF EXISTS test.merge_tree_with_sampling; -DROP TABLE IF EXISTS test.collapsing_merge_tree_with_sampling; -DROP TABLE IF EXISTS test.versioned_collapsing_merge_tree_with_sampling; -DROP TABLE IF EXISTS test.summing_merge_tree_with_sampling; -DROP TABLE IF EXISTS test.summing_merge_tree_with_sampling_with_list_of_columns_to_sum; -DROP TABLE IF EXISTS test.aggregating_merge_tree_with_sampling; +DROP TABLE IF EXISTS merge_tree_with_sampling; +DROP TABLE IF EXISTS collapsing_merge_tree_with_sampling; +DROP TABLE IF EXISTS versioned_collapsing_merge_tree_with_sampling; +DROP TABLE IF EXISTS summing_merge_tree_with_sampling; +DROP TABLE IF EXISTS summing_merge_tree_with_sampling_with_list_of_columns_to_sum; +DROP TABLE IF EXISTS aggregating_merge_tree_with_sampling; -DROP TABLE IF EXISTS test.replicated_merge_tree; -DROP TABLE IF EXISTS test.replicated_collapsing_merge_tree; -DROP TABLE IF EXISTS test.replicated_versioned_collapsing_merge_tree; -DROP TABLE IF EXISTS test.replicated_summing_merge_tree; -DROP TABLE IF EXISTS test.replicated_summing_merge_tree_with_list_of_columns_to_sum; -DROP TABLE IF EXISTS test.replicated_aggregating_merge_tree; +DROP TABLE IF EXISTS replicated_merge_tree; +DROP TABLE IF EXISTS replicated_collapsing_merge_tree; +DROP TABLE IF EXISTS replicated_versioned_collapsing_merge_tree; +DROP TABLE IF EXISTS replicated_summing_merge_tree; +DROP TABLE IF EXISTS replicated_summing_merge_tree_with_list_of_columns_to_sum; +DROP TABLE IF EXISTS replicated_aggregating_merge_tree; -DROP TABLE IF EXISTS test.replicated_merge_tree_with_sampling; -DROP TABLE IF EXISTS test.replicated_collapsing_merge_tree_with_sampling; -DROP TABLE IF EXISTS test.replicated_versioned_collapsing_merge_tree_with_sampling; -DROP TABLE IF EXISTS test.replicated_summing_merge_tree_with_sampling; -DROP TABLE IF EXISTS test.replicated_summing_merge_tree_with_sampling_with_list_of_columns_to_sum; -DROP TABLE IF EXISTS test.replicated_aggregating_merge_tree_with_sampling; +DROP TABLE IF EXISTS replicated_merge_tree_with_sampling; +DROP TABLE IF EXISTS replicated_collapsing_merge_tree_with_sampling; +DROP TABLE IF EXISTS replicated_versioned_collapsing_merge_tree_with_sampling; +DROP TABLE IF EXISTS replicated_summing_merge_tree_with_sampling; +DROP TABLE IF EXISTS replicated_summing_merge_tree_with_sampling_with_list_of_columns_to_sum; +DROP TABLE IF EXISTS replicated_aggregating_merge_tree_with_sampling; -CREATE TABLE test.merge_tree +CREATE TABLE merge_tree (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = MergeTree(d, (a, b), 111); -CREATE TABLE test.collapsing_merge_tree +CREATE TABLE collapsing_merge_tree (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = CollapsingMergeTree(d, (a, b), 111, y); -CREATE TABLE test.versioned_collapsing_merge_tree +CREATE TABLE versioned_collapsing_merge_tree (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = VersionedCollapsingMergeTree(d, (a, b), 111, y, b); -CREATE TABLE test.summing_merge_tree +CREATE TABLE summing_merge_tree (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = SummingMergeTree(d, (a, b), 111); -CREATE TABLE test.summing_merge_tree_with_list_of_columns_to_sum +CREATE TABLE summing_merge_tree_with_list_of_columns_to_sum (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = SummingMergeTree(d, (a, b), 111, (y, z)); -CREATE TABLE test.aggregating_merge_tree +CREATE TABLE aggregating_merge_tree (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = AggregatingMergeTree(d, (a, b), 111); -CREATE TABLE test.merge_tree_with_sampling +CREATE TABLE merge_tree_with_sampling (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = MergeTree(d, sipHash64(a) + b, (a, sipHash64(a) + b), 111); -CREATE TABLE test.collapsing_merge_tree_with_sampling +CREATE TABLE collapsing_merge_tree_with_sampling (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = CollapsingMergeTree(d, sipHash64(a) + b, (a, sipHash64(a) + b), 111, y); -CREATE TABLE test.versioned_collapsing_merge_tree_with_sampling +CREATE TABLE versioned_collapsing_merge_tree_with_sampling (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = VersionedCollapsingMergeTree(d, sipHash64(a) + b, (a, sipHash64(a) + b, b), 111, y, b); -CREATE TABLE test.summing_merge_tree_with_sampling +CREATE TABLE summing_merge_tree_with_sampling (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = SummingMergeTree(d, sipHash64(a) + b, (a, sipHash64(a) + b), 111); -CREATE TABLE test.summing_merge_tree_with_sampling_with_list_of_columns_to_sum +CREATE TABLE summing_merge_tree_with_sampling_with_list_of_columns_to_sum (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = SummingMergeTree(d, sipHash64(a) + b, (a, sipHash64(a) + b), 111, (y, z)); -CREATE TABLE test.aggregating_merge_tree_with_sampling +CREATE TABLE aggregating_merge_tree_with_sampling (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = AggregatingMergeTree(d, sipHash64(a) + b, (a, sipHash64(a) + b), 111); -CREATE TABLE test.replicated_merge_tree +CREATE TABLE replicated_merge_tree (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/01/replicated_merge_tree/', 'r1', d, (a, b), 111); -CREATE TABLE test.replicated_collapsing_merge_tree +CREATE TABLE replicated_collapsing_merge_tree (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = ReplicatedCollapsingMergeTree('/clickhouse/tables/test/01/replicated_collapsing_merge_tree/', 'r1', d, (a, b), 111, y); -CREATE TABLE test.replicated_versioned_collapsing_merge_tree +CREATE TABLE replicated_versioned_collapsing_merge_tree (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = ReplicatedVersionedCollapsingMergeTree('/clickhouse/tables/test/01/replicated_versioned_collapsing_merge_tree/', 'r1', d, (a, b), 111, y, b); -CREATE TABLE test.replicated_summing_merge_tree +CREATE TABLE replicated_summing_merge_tree (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = ReplicatedSummingMergeTree('/clickhouse/tables/test/01/replicated_summing_merge_tree/', 'r1', d, (a, b), 111); -CREATE TABLE test.replicated_summing_merge_tree_with_list_of_columns_to_sum +CREATE TABLE replicated_summing_merge_tree_with_list_of_columns_to_sum (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = ReplicatedSummingMergeTree('/clickhouse/tables/test/01/replicated_summing_merge_tree_with_list_of_columns_to_sum/', 'r1', d, (a, b), 111, (y, z)); -CREATE TABLE test.replicated_aggregating_merge_tree +CREATE TABLE replicated_aggregating_merge_tree (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/tables/test/01/replicated_aggregating_merge_tree/', 'r1', d, (a, b), 111); -CREATE TABLE test.replicated_merge_tree_with_sampling +CREATE TABLE replicated_merge_tree_with_sampling (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/01/replicated_merge_tree_with_sampling/', 'r1', d, sipHash64(a) + b, (a, sipHash64(a) + b), 111); -CREATE TABLE test.replicated_collapsing_merge_tree_with_sampling +CREATE TABLE replicated_collapsing_merge_tree_with_sampling (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = ReplicatedCollapsingMergeTree('/clickhouse/tables/test/01/replicated_collapsing_merge_tree_with_sampling/', 'r1', d, sipHash64(a) + b, (a, sipHash64(a) + b), 111, y); -CREATE TABLE test.replicated_versioned_collapsing_merge_tree_with_sampling +CREATE TABLE replicated_versioned_collapsing_merge_tree_with_sampling (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = ReplicatedVersionedCollapsingMergeTree('/clickhouse/tables/test/01/replicated_versioned_collapsing_merge_tree_with_sampling/', 'r1', d, sipHash64(a) + b, (a, sipHash64(a) + b, b), 111, y, b); -CREATE TABLE test.replicated_summing_merge_tree_with_sampling +CREATE TABLE replicated_summing_merge_tree_with_sampling (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = ReplicatedSummingMergeTree('/clickhouse/tables/test/01/replicated_summing_merge_tree_with_sampling/', 'r1', d, sipHash64(a) + b, (a, sipHash64(a) + b), 111); -CREATE TABLE test.replicated_summing_merge_tree_with_sampling_with_list_of_columns_to_sum +CREATE TABLE replicated_summing_merge_tree_with_sampling_with_list_of_columns_to_sum (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = ReplicatedSummingMergeTree('/clickhouse/tables/test/01/replicated_summing_merge_tree_with_sampling_with_list_of_columns_to_sum/', 'r1', d, sipHash64(a) + b, (a, sipHash64(a) + b), 111, (y, z)); -CREATE TABLE test.replicated_aggregating_merge_tree_with_sampling +CREATE TABLE replicated_aggregating_merge_tree_with_sampling (d Date, a String, b UInt8, x String, y Int8, z UInt32) ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/tables/test/01/replicated_aggregating_merge_tree_with_sampling/', 'r1', d, sipHash64(a) + b, (a, sipHash64(a) + b), 111); -INSERT INTO test.merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.collapsing_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.versioned_collapsing_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.summing_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.summing_merge_tree_with_list_of_columns_to_sum VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.aggregating_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO collapsing_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO versioned_collapsing_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO summing_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO summing_merge_tree_with_list_of_columns_to_sum VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO aggregating_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.collapsing_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.versioned_collapsing_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.summing_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.summing_merge_tree_with_sampling_with_list_of_columns_to_sum VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.aggregating_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO collapsing_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO versioned_collapsing_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO summing_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO summing_merge_tree_with_sampling_with_list_of_columns_to_sum VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO aggregating_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.replicated_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.replicated_collapsing_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.replicated_versioned_collapsing_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.replicated_summing_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.replicated_summing_merge_tree_with_list_of_columns_to_sum VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.replicated_aggregating_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO replicated_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO replicated_collapsing_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO replicated_versioned_collapsing_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO replicated_summing_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO replicated_summing_merge_tree_with_list_of_columns_to_sum VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO replicated_aggregating_merge_tree VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.replicated_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.replicated_collapsing_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.replicated_versioned_collapsing_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.replicated_summing_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.replicated_summing_merge_tree_with_sampling_with_list_of_columns_to_sum VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -INSERT INTO test.replicated_aggregating_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO replicated_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO replicated_collapsing_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO replicated_versioned_collapsing_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO replicated_summing_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO replicated_summing_merge_tree_with_sampling_with_list_of_columns_to_sum VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); +INSERT INTO replicated_aggregating_merge_tree_with_sampling VALUES ('2000-01-01', 'Hello, world!', 123, 'xxx yyy', -123, 123456789); -DROP TABLE test.merge_tree; -DROP TABLE test.collapsing_merge_tree; -DROP TABLE test.versioned_collapsing_merge_tree; -DROP TABLE test.summing_merge_tree; -DROP TABLE test.summing_merge_tree_with_list_of_columns_to_sum; -DROP TABLE test.aggregating_merge_tree; +DROP TABLE merge_tree; +DROP TABLE collapsing_merge_tree; +DROP TABLE versioned_collapsing_merge_tree; +DROP TABLE summing_merge_tree; +DROP TABLE summing_merge_tree_with_list_of_columns_to_sum; +DROP TABLE aggregating_merge_tree; -DROP TABLE test.merge_tree_with_sampling; -DROP TABLE test.collapsing_merge_tree_with_sampling; -DROP TABLE test.versioned_collapsing_merge_tree_with_sampling; -DROP TABLE test.summing_merge_tree_with_sampling; -DROP TABLE test.summing_merge_tree_with_sampling_with_list_of_columns_to_sum; -DROP TABLE test.aggregating_merge_tree_with_sampling; +DROP TABLE merge_tree_with_sampling; +DROP TABLE collapsing_merge_tree_with_sampling; +DROP TABLE versioned_collapsing_merge_tree_with_sampling; +DROP TABLE summing_merge_tree_with_sampling; +DROP TABLE summing_merge_tree_with_sampling_with_list_of_columns_to_sum; +DROP TABLE aggregating_merge_tree_with_sampling; -DROP TABLE test.replicated_merge_tree; -DROP TABLE test.replicated_collapsing_merge_tree; -DROP TABLE test.replicated_versioned_collapsing_merge_tree; -DROP TABLE test.replicated_summing_merge_tree; -DROP TABLE test.replicated_summing_merge_tree_with_list_of_columns_to_sum; -DROP TABLE test.replicated_aggregating_merge_tree; +DROP TABLE replicated_merge_tree; +DROP TABLE replicated_collapsing_merge_tree; +DROP TABLE replicated_versioned_collapsing_merge_tree; +DROP TABLE replicated_summing_merge_tree; +DROP TABLE replicated_summing_merge_tree_with_list_of_columns_to_sum; +DROP TABLE replicated_aggregating_merge_tree; -DROP TABLE test.replicated_merge_tree_with_sampling; -DROP TABLE test.replicated_collapsing_merge_tree_with_sampling; -DROP TABLE test.replicated_versioned_collapsing_merge_tree_with_sampling; -DROP TABLE test.replicated_summing_merge_tree_with_sampling; -DROP TABLE test.replicated_summing_merge_tree_with_sampling_with_list_of_columns_to_sum; -DROP TABLE test.replicated_aggregating_merge_tree_with_sampling; +DROP TABLE replicated_merge_tree_with_sampling; +DROP TABLE replicated_collapsing_merge_tree_with_sampling; +DROP TABLE replicated_versioned_collapsing_merge_tree_with_sampling; +DROP TABLE replicated_summing_merge_tree_with_sampling; +DROP TABLE replicated_summing_merge_tree_with_sampling_with_list_of_columns_to_sum; +DROP TABLE replicated_aggregating_merge_tree_with_sampling; diff --git a/dbms/tests/queries/0_stateless/00084_summing_merge_tree.sql b/dbms/tests/queries/0_stateless/00084_summing_merge_tree.sql index c03092d0277..babff82cc0a 100644 --- a/dbms/tests/queries/0_stateless/00084_summing_merge_tree.sql +++ b/dbms/tests/queries/0_stateless/00084_summing_merge_tree.sql @@ -1,41 +1,41 @@ -DROP TABLE IF EXISTS test.summing_merge_tree; +DROP TABLE IF EXISTS summing_merge_tree; -CREATE TABLE test.summing_merge_tree (d Date, a String, x UInt32, y UInt64, z Float64) ENGINE = SummingMergeTree(d, a, 8192); +CREATE TABLE summing_merge_tree (d Date, a String, x UInt32, y UInt64, z Float64) ENGINE = SummingMergeTree(d, a, 8192); -INSERT INTO test.summing_merge_tree VALUES ('2000-01-01', 'Hello', 1, 2, 3); -INSERT INTO test.summing_merge_tree VALUES ('2000-01-01', 'Hello', 4, 5, 6); -INSERT INTO test.summing_merge_tree VALUES ('2000-01-01', 'Goodbye', 1, 2, 3); +INSERT INTO summing_merge_tree VALUES ('2000-01-01', 'Hello', 1, 2, 3); +INSERT INTO summing_merge_tree VALUES ('2000-01-01', 'Hello', 4, 5, 6); +INSERT INTO summing_merge_tree VALUES ('2000-01-01', 'Goodbye', 1, 2, 3); -OPTIMIZE TABLE test.summing_merge_tree; -OPTIMIZE TABLE test.summing_merge_tree; -OPTIMIZE TABLE test.summing_merge_tree; +OPTIMIZE TABLE summing_merge_tree; +OPTIMIZE TABLE summing_merge_tree; +OPTIMIZE TABLE summing_merge_tree; -SELECT * FROM test.summing_merge_tree ORDER BY d, a, x, y, z; +SELECT * FROM summing_merge_tree ORDER BY d, a, x, y, z; -DROP TABLE test.summing_merge_tree; +DROP TABLE summing_merge_tree; -CREATE TABLE test.summing_merge_tree (d Date, a String, x UInt32, y UInt64, z Float64) ENGINE = SummingMergeTree(d, a, 8192, (y, z)); +CREATE TABLE summing_merge_tree (d Date, a String, x UInt32, y UInt64, z Float64) ENGINE = SummingMergeTree(d, a, 8192, (y, z)); -INSERT INTO test.summing_merge_tree VALUES ('2000-01-01', 'Hello', 1, 2, 3); -INSERT INTO test.summing_merge_tree VALUES ('2000-01-01', 'Hello', 4, 5, 6); -INSERT INTO test.summing_merge_tree VALUES ('2000-01-01', 'Goodbye', 1, 2, 3); +INSERT INTO summing_merge_tree VALUES ('2000-01-01', 'Hello', 1, 2, 3); +INSERT INTO summing_merge_tree VALUES ('2000-01-01', 'Hello', 4, 5, 6); +INSERT INTO summing_merge_tree VALUES ('2000-01-01', 'Goodbye', 1, 2, 3); -OPTIMIZE TABLE test.summing_merge_tree; -OPTIMIZE TABLE test.summing_merge_tree; -OPTIMIZE TABLE test.summing_merge_tree; +OPTIMIZE TABLE summing_merge_tree; +OPTIMIZE TABLE summing_merge_tree; +OPTIMIZE TABLE summing_merge_tree; -SELECT * FROM test.summing_merge_tree ORDER BY d, a, x, y, z; +SELECT * FROM summing_merge_tree ORDER BY d, a, x, y, z; -DROP TABLE test.summing_merge_tree; +DROP TABLE summing_merge_tree; -- -DROP TABLE IF EXISTS test.summing; -CREATE TABLE test.summing (p Date, k UInt64, s UInt64) ENGINE = SummingMergeTree(p, k, 1); +DROP TABLE IF EXISTS summing; +CREATE TABLE summing (p Date, k UInt64, s UInt64) ENGINE = SummingMergeTree(p, k, 1); -INSERT INTO test.summing (k, s) VALUES (0, 1); -INSERT INTO test.summing (k, s) VALUES (0, 1), (666, 1), (666, 0); -OPTIMIZE TABLE test.summing PARTITION 197001; +INSERT INTO summing (k, s) VALUES (0, 1); +INSERT INTO summing (k, s) VALUES (0, 1), (666, 1), (666, 0); +OPTIMIZE TABLE summing PARTITION 197001; -SELECT k, s FROM test.summing ORDER BY k; +SELECT k, s FROM summing ORDER BY k; diff --git a/dbms/tests/queries/0_stateless/00090_union_race_conditions_1.sh b/dbms/tests/queries/0_stateless/00090_union_race_conditions_1.sh index e7ef1310cf7..b996f0d58f2 100755 --- a/dbms/tests/queries/0_stateless/00090_union_race_conditions_1.sh +++ b/dbms/tests/queries/0_stateless/00090_union_race_conditions_1.sh @@ -7,12 +7,12 @@ set -o errexit set -o pipefail echo " - DROP TABLE IF EXISTS test.two_blocks; - CREATE TABLE test.two_blocks (d Date) ENGINE = MergeTree(d, d, 1); - INSERT INTO test.two_blocks VALUES ('2000-01-01'); - INSERT INTO test.two_blocks VALUES ('2000-01-02'); + DROP TABLE IF EXISTS two_blocks; + CREATE TABLE two_blocks (d Date) ENGINE = MergeTree(d, d, 1); + INSERT INTO two_blocks VALUES ('2000-01-01'); + INSERT INTO two_blocks VALUES ('2000-01-02'); " | $CLICKHOUSE_CLIENT -n -for i in {1..10}; do seq 1 100 | sed 's/.*/SELECT count() FROM (SELECT * FROM test.two_blocks);/' | $CLICKHOUSE_CLIENT -n --receive_timeout=1 | grep -vE '^2$' && echo 'Fail!' && break; echo -n '.'; done; echo +for i in {1..10}; do seq 1 100 | sed 's/.*/SELECT count() FROM (SELECT * FROM two_blocks);/' | $CLICKHOUSE_CLIENT -n --receive_timeout=1 | grep -vE '^2$' && echo 'Fail!' && break; echo -n '.'; done; echo -echo "DROP TABLE test.two_blocks;" | $CLICKHOUSE_CLIENT -n +echo "DROP TABLE two_blocks;" | $CLICKHOUSE_CLIENT -n diff --git a/dbms/tests/queries/0_stateless/00096_aggregation_min_if.sql b/dbms/tests/queries/0_stateless/00096_aggregation_min_if.sql index 25fc67cdf1b..52e6cd94d1a 100644 --- a/dbms/tests/queries/0_stateless/00096_aggregation_min_if.sql +++ b/dbms/tests/queries/0_stateless/00096_aggregation_min_if.sql @@ -1,250 +1,250 @@ -DROP TABLE IF EXISTS test.min_if; -CREATE TABLE test.min_if (arr Array(UInt8), str String, int Int32) ENGINE = Memory; -INSERT INTO test.min_if SELECT emptyArrayUInt8() AS arr, '' AS str, toInt32(0) AS int FROM system.numbers LIMIT 100000; -INSERT INTO test.min_if SELECT [1] AS arr, '2' AS str, toInt32(3) AS int; -INSERT INTO test.min_if SELECT emptyArrayUInt8() AS arr, '' AS str, toInt32(0) AS int FROM system.numbers LIMIT 100000; +DROP TABLE IF EXISTS min_if; +CREATE TABLE min_if (arr Array(UInt8), str String, int Int32) ENGINE = Memory; +INSERT INTO min_if SELECT emptyArrayUInt8() AS arr, '' AS str, toInt32(0) AS int FROM system.numbers LIMIT 100000; +INSERT INTO min_if SELECT [1] AS arr, '2' AS str, toInt32(3) AS int; +INSERT INTO min_if SELECT emptyArrayUInt8() AS arr, '' AS str, toInt32(0) AS int FROM system.numbers LIMIT 100000; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; -SELECT minIf(arr, notEmpty(arr)) FROM test.min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; +SELECT minIf(arr, notEmpty(arr)) FROM min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; -SELECT minIf(str, notEmpty(str)) FROM test.min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; +SELECT minIf(str, notEmpty(str)) FROM min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; -SELECT minIf(int, int != 0) FROM test.min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; +SELECT minIf(int, int != 0) FROM min_if; -DROP TABLE test.min_if; +DROP TABLE min_if; diff --git a/dbms/tests/queries/0_stateless/00101_materialized_views_and_insert_without_explicit_database.sql b/dbms/tests/queries/0_stateless/00101_materialized_views_and_insert_without_explicit_database.sql index 7eb8014bb03..cedbd296804 100644 --- a/dbms/tests/queries/0_stateless/00101_materialized_views_and_insert_without_explicit_database.sql +++ b/dbms/tests/queries/0_stateless/00101_materialized_views_and_insert_without_explicit_database.sql @@ -6,7 +6,7 @@ CREATE TABLE default.test_table (EventDate Date, CounterID UInt32, UserID UInt6 CREATE MATERIALIZED VIEW default.test_view (Rows UInt64, MaxHitTime DateTime) ENGINE = Memory AS SELECT count() AS Rows, max(UTCEventTime) AS MaxHitTime FROM default.test_table; CREATE MATERIALIZED VIEW default.test_view_filtered (EventDate Date, CounterID UInt32) ENGINE = Memory POPULATE AS SELECT CounterID, EventDate FROM default.test_table WHERE EventDate < '2013-01-01'; -INSERT INTO test_table (EventDate, UTCEventTime) VALUES ('2014-01-02', '2014-01-02 03:04:06'); +INSERT INTO default.test_table (EventDate, UTCEventTime) VALUES ('2014-01-02', '2014-01-02 03:04:06'); SELECT * FROM default.test_table; SELECT * FROM default.test_view; diff --git a/dbms/tests/queries/0_stateless/00109_shard_totals_after_having.sql b/dbms/tests/queries/0_stateless/00109_shard_totals_after_having.sql index 98d0cc5a69f..903acec3fc2 100644 --- a/dbms/tests/queries/0_stateless/00109_shard_totals_after_having.sql +++ b/dbms/tests/queries/0_stateless/00109_shard_totals_after_having.sql @@ -2,8 +2,8 @@ SET max_rows_to_group_by = 100000; SET max_block_size = 100001; SET group_by_overflow_mode = 'any'; -DROP TABLE IF EXISTS test.numbers500k; -CREATE VIEW test.numbers500k AS SELECT number FROM system.numbers LIMIT 500000; +DROP TABLE IF EXISTS numbers500k; +CREATE VIEW numbers500k AS SELECT number FROM system.numbers LIMIT 500000; SET totals_mode = 'after_having_auto'; SELECT intDiv(number, 2) AS k, count(), argMax(toString(number), number) FROM remote('127.0.0.{2,3}', test, numbers500k) GROUP BY k WITH TOTALS ORDER BY k LIMIT 10; @@ -17,4 +17,4 @@ SELECT intDiv(number, 2) AS k, count(), argMax(toString(number), number) FROM re SET totals_mode = 'before_having'; SELECT intDiv(number, 2) AS k, count(), argMax(toString(number), number) FROM remote('127.0.0.{2,3}', test, numbers500k) GROUP BY k WITH TOTALS ORDER BY k LIMIT 10; -DROP TABLE test.numbers500k; +DROP TABLE numbers500k; diff --git a/dbms/tests/queries/0_stateless/00111_shard_external_sort_distributed.sql b/dbms/tests/queries/0_stateless/00111_shard_external_sort_distributed.sql index 5c962b27d2a..89cd192fbb3 100644 --- a/dbms/tests/queries/0_stateless/00111_shard_external_sort_distributed.sql +++ b/dbms/tests/queries/0_stateless/00111_shard_external_sort_distributed.sql @@ -1,9 +1,9 @@ SET max_memory_usage = 100000000; SET max_bytes_before_external_sort = 20000000; -DROP TABLE IF EXISTS test.numbers10m; -CREATE VIEW test.numbers10m AS SELECT number FROM system.numbers LIMIT 10000000; +DROP TABLE IF EXISTS numbers10m; +CREATE VIEW numbers10m AS SELECT number FROM system.numbers LIMIT 10000000; SELECT number FROM remote('127.0.0.{2,3}', test, numbers10m) ORDER BY number * 1234567890123456789 LIMIT 19999980, 20; -DROP TABLE test.numbers10m; +DROP TABLE numbers10m; diff --git a/dbms/tests/queries/0_stateless/00115_shard_in_incomplete_result.sh b/dbms/tests/queries/0_stateless/00115_shard_in_incomplete_result.sh index cffe29b6a03..fa95d3e0d75 100755 --- a/dbms/tests/queries/0_stateless/00115_shard_in_incomplete_result.sh +++ b/dbms/tests/queries/0_stateless/00115_shard_in_incomplete_result.sh @@ -7,12 +7,12 @@ set -o errexit set -o pipefail $CLICKHOUSE_CLIENT -n --query=" - DROP TABLE IF EXISTS test.users; - CREATE TABLE test.users (UserID UInt64) ENGINE = Log; - INSERT INTO test.users VALUES (1468013291393583084); - INSERT INTO test.users VALUES (1321770221388956068); + DROP TABLE IF EXISTS users; + CREATE TABLE users (UserID UInt64) ENGINE = Log; + INSERT INTO users VALUES (1468013291393583084); + INSERT INTO users VALUES (1321770221388956068); "; -for i in {1..10}; do seq 1 10 | sed "s/.*/SELECT count() FROM (SELECT * FROM remote('127.0.0.{2,3}', test, users) WHERE UserID IN (SELECT arrayJoin([1468013291393583084, 1321770221388956068])));/" | $CLICKHOUSE_CLIENT -n | grep -vE '^4$' && echo 'Fail!' && break; echo -n '.'; done; echo +for i in {1..10}; do seq 1 10 | sed "s/.*/SELECT count() FROM (SELECT * FROM remote('127.0.0.{2,3}', ${CLICKHOUSE_DATABASE}, users) WHERE UserID IN (SELECT arrayJoin([1468013291393583084, 1321770221388956068])));/" | $CLICKHOUSE_CLIENT -n | grep -vE '^4$' && echo 'Fail!' && break; echo -n '.'; done; echo -$CLICKHOUSE_CLIENT --query="DROP TABLE test.users;"; +$CLICKHOUSE_CLIENT --query="DROP TABLE users;"; diff --git a/dbms/tests/queries/0_stateless/00117_parsing_arrays.sql b/dbms/tests/queries/0_stateless/00117_parsing_arrays.sql index 408c129cd31..40e2d5f6a65 100644 --- a/dbms/tests/queries/0_stateless/00117_parsing_arrays.sql +++ b/dbms/tests/queries/0_stateless/00117_parsing_arrays.sql @@ -1,10 +1,10 @@ -DROP TABLE IF EXISTS test.null; -CREATE TABLE test.null (a Array(UInt64), b Array(String), c Array(Array(Date))) ENGINE = Memory; +DROP TABLE IF EXISTS null; +CREATE TABLE null (a Array(UInt64), b Array(String), c Array(Array(Date))) ENGINE = Memory; -INSERT INTO test.null (a) VALUES ([1,2]), ([3, 4]), ([ 5 ,6]), ([ 7 , 8 ]), ([]), ([ ]); -INSERT INTO test.null (b) VALUES ([ 'Hello' , 'World' ]); -INSERT INTO test.null (c) VALUES ([ ]), ([ [ ] ]), ([[],[]]), ([['2015-01-01', '2015-01-02'], ['2015-01-03', '2015-01-04']]); +INSERT INTO null (a) VALUES ([1,2]), ([3, 4]), ([ 5 ,6]), ([ 7 , 8 ]), ([]), ([ ]); +INSERT INTO null (b) VALUES ([ 'Hello' , 'World' ]); +INSERT INTO null (c) VALUES ([ ]), ([ [ ] ]), ([[],[]]), ([['2015-01-01', '2015-01-02'], ['2015-01-03', '2015-01-04']]); -SELECT a, b, c FROM test.null ORDER BY a, b, c; +SELECT a, b, c FROM null ORDER BY a, b, c; -DROP TABLE test.null; \ No newline at end of file +DROP TABLE null; \ No newline at end of file diff --git a/dbms/tests/queries/0_stateless/00119_storage_join.sql b/dbms/tests/queries/0_stateless/00119_storage_join.sql index 9a0ead94bd7..3e76d46a12f 100644 --- a/dbms/tests/queries/0_stateless/00119_storage_join.sql +++ b/dbms/tests/queries/0_stateless/00119_storage_join.sql @@ -1,18 +1,14 @@ -DROP TABLE IF EXISTS test.join; +DROP TABLE IF EXISTS join; -CREATE TABLE test.join (s String, x Array(UInt8), k UInt64) ENGINE = Join(ANY, LEFT, k); +CREATE TABLE join (s String, x Array(UInt8), k UInt64) ENGINE = Join(ANY, LEFT, k); -USE test; - -INSERT INTO test.join VALUES ('abc', [0], 1), ('def', [1, 2], 2); -INSERT INTO test.join (k, s) VALUES (3, 'ghi'); -INSERT INTO test.join (x, k) VALUES ([3, 4, 5], 4); +INSERT INTO join VALUES ('abc', [0], 1), ('def', [1, 2], 2); +INSERT INTO join (k, s) VALUES (3, 'ghi'); +INSERT INTO join (x, k) VALUES ([3, 4, 5], 4); SELECT k, s FROM (SELECT number AS k FROM system.numbers LIMIT 10) ANY LEFT JOIN join USING k; SELECT s, x FROM (SELECT number AS k FROM system.numbers LIMIT 10) ANY LEFT JOIN join USING k; SELECT x, s, k FROM (SELECT number AS k FROM system.numbers LIMIT 10) ANY LEFT JOIN join USING k; SELECT 1, x, 2, s, 3, k, 4 FROM (SELECT number AS k FROM system.numbers LIMIT 10) ANY LEFT JOIN join USING k; -USE default; - -DROP TABLE test.join; +DROP TABLE join; diff --git a/dbms/tests/queries/0_stateless/00121_drop_column_zookeeper.sql b/dbms/tests/queries/0_stateless/00121_drop_column_zookeeper.sql index 1cb39e81f42..4052d0c0ddc 100644 --- a/dbms/tests/queries/0_stateless/00121_drop_column_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00121_drop_column_zookeeper.sql @@ -1,27 +1,27 @@ -DROP TABLE IF EXISTS test.alter; -CREATE TABLE test.alter (d Date, x UInt8) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/alter', 'r1', d, (d), 8192); +DROP TABLE IF EXISTS alter; +CREATE TABLE alter (d Date, x UInt8) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/alter', 'r1', d, (d), 8192); -INSERT INTO test.alter VALUES ('2014-01-01', 1); -ALTER TABLE test.alter DROP COLUMN x; +INSERT INTO alter VALUES ('2014-01-01', 1); +ALTER TABLE alter DROP COLUMN x; SELECT value FROM system.zookeeper WHERE path = '/clickhouse/tables/test/alter/replicas/r1/parts/20140101_20140101_0_0_0' AND name = 'columns' FORMAT TabSeparatedRaw; -DROP TABLE test.alter; +DROP TABLE alter; -CREATE TABLE test.alter (d Date) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/alter', 'r1', d, (d), 8192); +CREATE TABLE alter (d Date) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/alter', 'r1', d, (d), 8192); -INSERT INTO test.alter VALUES ('2014-01-01'); -SELECT * FROM test.alter ORDER BY d; +INSERT INTO alter VALUES ('2014-01-01'); +SELECT * FROM alter ORDER BY d; -ALTER TABLE test.alter ADD COLUMN x UInt8; +ALTER TABLE alter ADD COLUMN x UInt8; -INSERT INTO test.alter VALUES ('2014-02-01', 1); -SELECT * FROM test.alter ORDER BY d; +INSERT INTO alter VALUES ('2014-02-01', 1); +SELECT * FROM alter ORDER BY d; -ALTER TABLE test.alter DROP COLUMN x; -SELECT * FROM test.alter ORDER BY d; +ALTER TABLE alter DROP COLUMN x; +SELECT * FROM alter ORDER BY d; SELECT value FROM system.zookeeper WHERE path = '/clickhouse/tables/test/alter/replicas/r1/parts/20140201_20140201_0_0_0' AND name = 'columns' FORMAT TabSeparatedRaw; -DROP TABLE test.alter; +DROP TABLE alter; diff --git a/dbms/tests/queries/0_stateless/00133_long_shard_memory_tracker_and_exception_safety.sh b/dbms/tests/queries/0_stateless/00133_long_shard_memory_tracker_and_exception_safety.sh index 240cf2535b5..780aea2dd0e 100755 --- a/dbms/tests/queries/0_stateless/00133_long_shard_memory_tracker_and_exception_safety.sh +++ b/dbms/tests/queries/0_stateless/00133_long_shard_memory_tracker_and_exception_safety.sh @@ -4,8 +4,8 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh $CLICKHOUSE_CLIENT -n --query=" - DROP TABLE IF EXISTS test.numbers_100k; - CREATE VIEW test.numbers_100k AS SELECT * FROM system.numbers LIMIT 100000; + DROP TABLE IF EXISTS numbers_100k; + CREATE VIEW numbers_100k AS SELECT * FROM system.numbers LIMIT 100000; "; STEP_MULTIPLIER=25 @@ -15,10 +15,10 @@ fi for i in $(seq 1000000 $((20000 * $STEP_MULTIPLIER)) 10000000 && seq 10100000 $((100000 * $STEP_MULTIPLIER)) 50000000); do $CLICKHOUSE_CLIENT --max_memory_usage=$i --query=" - SELECT intDiv(number, 5) AS k, max(toString(number)) FROM remote('127.0.0.{2,3}', test.numbers_100k) GROUP BY k ORDER BY k LIMIT 1; + SELECT intDiv(number, 5) AS k, max(toString(number)) FROM remote('127.0.0.{2,3}', ${CLICKHOUSE_DATABASE}.numbers_100k) GROUP BY k ORDER BY k LIMIT 1; " 2> /dev/null; CODE=$?; [ "$CODE" -ne "241" ] && [ "$CODE" -ne "0" ] && echo "Fail" && break; done | uniq -$CLICKHOUSE_CLIENT --query="DROP TABLE test.numbers_100k;"; +$CLICKHOUSE_CLIENT --query="DROP TABLE numbers_100k;"; diff --git a/dbms/tests/queries/0_stateless/00140_prewhere_column_order.sql b/dbms/tests/queries/0_stateless/00140_prewhere_column_order.sql index fb15d2bfd98..d949b6f780b 100644 --- a/dbms/tests/queries/0_stateless/00140_prewhere_column_order.sql +++ b/dbms/tests/queries/0_stateless/00140_prewhere_column_order.sql @@ -1,11 +1,11 @@ -DROP TABLE IF EXISTS test.prewhere; +DROP TABLE IF EXISTS prewhere; -CREATE TABLE test.prewhere (d Date, a String, b String) ENGINE = MergeTree(d, d, 8192); -INSERT INTO test.prewhere VALUES ('2015-01-01', 'hello', 'world'); +CREATE TABLE prewhere (d Date, a String, b String) ENGINE = MergeTree(d, d, 8192); +INSERT INTO prewhere VALUES ('2015-01-01', 'hello', 'world'); -ALTER TABLE test.prewhere ADD COLUMN a1 String AFTER a; -INSERT INTO test.prewhere VALUES ('2015-01-01', 'hello1', 'xxx', 'world1'); +ALTER TABLE prewhere ADD COLUMN a1 String AFTER a; +INSERT INTO prewhere VALUES ('2015-01-01', 'hello1', 'xxx', 'world1'); -SELECT d, a, a1, b FROM test.prewhere PREWHERE a LIKE 'hello%' ORDER BY a1; +SELECT d, a, a1, b FROM prewhere PREWHERE a LIKE 'hello%' ORDER BY a1; -DROP TABLE test.prewhere; +DROP TABLE prewhere; diff --git a/dbms/tests/queries/0_stateless/00141_parse_timestamp_as_datetime.sql b/dbms/tests/queries/0_stateless/00141_parse_timestamp_as_datetime.sql index 2839dca31bc..4780884ca02 100644 --- a/dbms/tests/queries/0_stateless/00141_parse_timestamp_as_datetime.sql +++ b/dbms/tests/queries/0_stateless/00141_parse_timestamp_as_datetime.sql @@ -1,7 +1,7 @@ -DROP TABLE IF EXISTS test.default; +DROP TABLE IF EXISTS default; -CREATE TABLE test.default (d Date DEFAULT toDate(t), t DateTime) ENGINE = MergeTree(d, t, 8192); -INSERT INTO test.default (t) VALUES ('1234567890'); -SELECT toStartOfMonth(d), toUInt32(t) FROM test.default; +CREATE TABLE default (d Date DEFAULT toDate(t), t DateTime) ENGINE = MergeTree(d, t, 8192); +INSERT INTO default (t) VALUES ('1234567890'); +SELECT toStartOfMonth(d), toUInt32(t) FROM default; -DROP TABLE test.default; +DROP TABLE default; diff --git a/dbms/tests/queries/0_stateless/00146_summing_merge_tree_nested_map.sql b/dbms/tests/queries/0_stateless/00146_summing_merge_tree_nested_map.sql index 1211756a76b..fac33033bfb 100644 --- a/dbms/tests/queries/0_stateless/00146_summing_merge_tree_nested_map.sql +++ b/dbms/tests/queries/0_stateless/00146_summing_merge_tree_nested_map.sql @@ -1,21 +1,21 @@ -drop table if exists test.nested_map; +drop table if exists nested_map; -create table test.nested_map (d default today(), k UInt64, payload default rand(), SomeMap Nested(ID UInt32, Num Int64)) engine=SummingMergeTree(d, k, 8192); +create table nested_map (d default today(), k UInt64, payload default rand(), SomeMap Nested(ID UInt32, Num Int64)) engine=SummingMergeTree(d, k, 8192); -insert into test.nested_map (k, `SomeMap.ID`, `SomeMap.Num`) values (0,[1],[100]),(1,[1],[100]),(2,[1],[100]),(3,[1,2],[100,150]); -insert into test.nested_map (k, `SomeMap.ID`, `SomeMap.Num`) values (0,[2],[150]),(1,[1],[150]),(2,[1,2],[150,150]),(3,[1],[-100]); -optimize table test.nested_map; -select `SomeMap.ID`, `SomeMap.Num` from test.nested_map; +insert into nested_map (k, `SomeMap.ID`, `SomeMap.Num`) values (0,[1],[100]),(1,[1],[100]),(2,[1],[100]),(3,[1,2],[100,150]); +insert into nested_map (k, `SomeMap.ID`, `SomeMap.Num`) values (0,[2],[150]),(1,[1],[150]),(2,[1,2],[150,150]),(3,[1],[-100]); +optimize table nested_map; +select `SomeMap.ID`, `SomeMap.Num` from nested_map; -drop table test.nested_map; +drop table nested_map; -drop table if exists test.nested_map_explicit; +drop table if exists nested_map_explicit; -create table test.nested_map_explicit (d default today(), k UInt64, SomeIntExcluded UInt32, SomeMap Nested(ID UInt32, Num Int64)) engine=SummingMergeTree(d, k, 8192, (SomeMap)); +create table nested_map_explicit (d default today(), k UInt64, SomeIntExcluded UInt32, SomeMap Nested(ID UInt32, Num Int64)) engine=SummingMergeTree(d, k, 8192, (SomeMap)); -insert into test.nested_map_explicit (k, `SomeIntExcluded`, `SomeMap.ID`, `SomeMap.Num`) values (0, 20, [1],[100]),(1, 20, [1],[100]),(2, 20, [1],[100]),(3, 20, [1,2],[100,150]); -insert into test.nested_map_explicit (k, `SomeIntExcluded`, `SomeMap.ID`, `SomeMap.Num`) values (0, 20, [2],[150]),(1, 20, [1],[150]),(2, 20, [1,2],[150,150]),(3, 20, [1],[-100]); -optimize table test.nested_map_explicit; -select `SomeIntExcluded`, `SomeMap.ID`, `SomeMap.Num` from test.nested_map_explicit; +insert into nested_map_explicit (k, `SomeIntExcluded`, `SomeMap.ID`, `SomeMap.Num`) values (0, 20, [1],[100]),(1, 20, [1],[100]),(2, 20, [1],[100]),(3, 20, [1,2],[100,150]); +insert into nested_map_explicit (k, `SomeIntExcluded`, `SomeMap.ID`, `SomeMap.Num`) values (0, 20, [2],[150]),(1, 20, [1],[150]),(2, 20, [1,2],[150,150]),(3, 20, [1],[-100]); +optimize table nested_map_explicit; +select `SomeIntExcluded`, `SomeMap.ID`, `SomeMap.Num` from nested_map_explicit; -drop table test.nested_map_explicit; +drop table nested_map_explicit; diff --git a/dbms/tests/queries/0_stateless/00147_alter_nested_default.sql b/dbms/tests/queries/0_stateless/00147_alter_nested_default.sql index 950527f59cc..7054aba69e1 100644 --- a/dbms/tests/queries/0_stateless/00147_alter_nested_default.sql +++ b/dbms/tests/queries/0_stateless/00147_alter_nested_default.sql @@ -1,29 +1,29 @@ -DROP TABLE IF EXISTS test.alter; +DROP TABLE IF EXISTS alter; -CREATE TABLE test.alter (d Date DEFAULT toDate('2015-01-01'), n Nested(x String)) ENGINE = MergeTree(d, d, 8192); +CREATE TABLE alter (d Date DEFAULT toDate('2015-01-01'), n Nested(x String)) ENGINE = MergeTree(d, d, 8192); -INSERT INTO test.alter (`n.x`) VALUES (['Hello', 'World']); +INSERT INTO alter (`n.x`) VALUES (['Hello', 'World']); -SELECT * FROM test.alter; -SELECT * FROM test.alter ARRAY JOIN n; -SELECT * FROM test.alter ARRAY JOIN n WHERE n.x LIKE '%Hello%'; +SELECT * FROM alter; +SELECT * FROM alter ARRAY JOIN n; +SELECT * FROM alter ARRAY JOIN n WHERE n.x LIKE '%Hello%'; -ALTER TABLE test.alter ADD COLUMN n.y Array(UInt64); +ALTER TABLE alter ADD COLUMN n.y Array(UInt64); -SELECT * FROM test.alter; -SELECT * FROM test.alter ARRAY JOIN n; -SELECT * FROM test.alter ARRAY JOIN n WHERE n.x LIKE '%Hello%'; +SELECT * FROM alter; +SELECT * FROM alter ARRAY JOIN n; +SELECT * FROM alter ARRAY JOIN n WHERE n.x LIKE '%Hello%'; -INSERT INTO test.alter (`n.x`) VALUES (['Hello2', 'World2']); +INSERT INTO alter (`n.x`) VALUES (['Hello2', 'World2']); -SELECT * FROM test.alter ORDER BY n.x; -SELECT * FROM test.alter ARRAY JOIN n ORDER BY n.x; -SELECT * FROM test.alter ARRAY JOIN n WHERE n.x LIKE '%Hello%' ORDER BY n.x; +SELECT * FROM alter ORDER BY n.x; +SELECT * FROM alter ARRAY JOIN n ORDER BY n.x; +SELECT * FROM alter ARRAY JOIN n WHERE n.x LIKE '%Hello%' ORDER BY n.x; -OPTIMIZE TABLE test.alter; +OPTIMIZE TABLE alter; -SELECT * FROM test.alter; -SELECT * FROM test.alter ARRAY JOIN n; -SELECT * FROM test.alter ARRAY JOIN n WHERE n.x LIKE '%Hello%'; +SELECT * FROM alter; +SELECT * FROM alter ARRAY JOIN n; +SELECT * FROM alter ARRAY JOIN n WHERE n.x LIKE '%Hello%'; -DROP TABLE test.alter; +DROP TABLE alter; diff --git a/dbms/tests/queries/0_stateless/00148_summing_merge_tree_aggregate_function.sql b/dbms/tests/queries/0_stateless/00148_summing_merge_tree_aggregate_function.sql index 26b5c09a7dd..da67212fca7 100644 --- a/dbms/tests/queries/0_stateless/00148_summing_merge_tree_aggregate_function.sql +++ b/dbms/tests/queries/0_stateless/00148_summing_merge_tree_aggregate_function.sql @@ -1,35 +1,35 @@ -drop table if exists test.summing_merge_tree_aggregate_function; -drop table if exists test.summing_merge_tree_null; +drop table if exists summing_merge_tree_aggregate_function; +drop table if exists summing_merge_tree_null; ---- partition merge -create table test.summing_merge_tree_aggregate_function ( +create table summing_merge_tree_aggregate_function ( d Date, k UInt64, u AggregateFunction(uniq, UInt64) ) engine=SummingMergeTree(d, k, 1); -insert into test.summing_merge_tree_aggregate_function +insert into summing_merge_tree_aggregate_function select today() as d, number as k, uniqState(toUInt64(number % 500)) from numbers(5000) group by d, k; -insert into test.summing_merge_tree_aggregate_function +insert into summing_merge_tree_aggregate_function select today() as d, number + 5000 as k, uniqState(toUInt64(number % 500)) from numbers(5000) group by d, k; -select count() from test.summing_merge_tree_aggregate_function; -optimize table test.summing_merge_tree_aggregate_function; -select count() from test.summing_merge_tree_aggregate_function; +select count() from summing_merge_tree_aggregate_function; +optimize table summing_merge_tree_aggregate_function; +select count() from summing_merge_tree_aggregate_function; -drop table test.summing_merge_tree_aggregate_function; +drop table summing_merge_tree_aggregate_function; ---- sum + uniq + uniqExact -create table test.summing_merge_tree_aggregate_function ( +create table summing_merge_tree_aggregate_function ( d materialized today(), k UInt64, c UInt64, @@ -37,121 +37,121 @@ create table test.summing_merge_tree_aggregate_function ( ue AggregateFunction(uniqExact, UInt8) ) engine=SummingMergeTree(d, k, 8192); -insert into test.summing_merge_tree_aggregate_function select 1, 1, uniqState(1), uniqExactState(1); -insert into test.summing_merge_tree_aggregate_function select 1, 1, uniqState(2), uniqExactState(2); -insert into test.summing_merge_tree_aggregate_function select 1, 1, uniqState(3), uniqExactState(2); -insert into test.summing_merge_tree_aggregate_function select 1, 1, uniqState(1), uniqExactState(1); -insert into test.summing_merge_tree_aggregate_function select 1, 1, uniqState(2), uniqExactState(2); -insert into test.summing_merge_tree_aggregate_function select 1, 1, uniqState(3), uniqExactState(3); +insert into summing_merge_tree_aggregate_function select 1, 1, uniqState(1), uniqExactState(1); +insert into summing_merge_tree_aggregate_function select 1, 1, uniqState(2), uniqExactState(2); +insert into summing_merge_tree_aggregate_function select 1, 1, uniqState(3), uniqExactState(2); +insert into summing_merge_tree_aggregate_function select 1, 1, uniqState(1), uniqExactState(1); +insert into summing_merge_tree_aggregate_function select 1, 1, uniqState(2), uniqExactState(2); +insert into summing_merge_tree_aggregate_function select 1, 1, uniqState(3), uniqExactState(3); select k, sum(c), uniqMerge(u), uniqExactMerge(ue) -from test.summing_merge_tree_aggregate_function group by k; +from summing_merge_tree_aggregate_function group by k; -optimize table test.summing_merge_tree_aggregate_function; +optimize table summing_merge_tree_aggregate_function; select k, sum(c), uniqMerge(u), uniqExactMerge(ue) -from test.summing_merge_tree_aggregate_function group by k; +from summing_merge_tree_aggregate_function group by k; -drop table test.summing_merge_tree_aggregate_function; +drop table summing_merge_tree_aggregate_function; ---- sum + topK -create table test.summing_merge_tree_aggregate_function (d materialized today(), k UInt64, c UInt64, x AggregateFunction(topK(2), UInt8)) engine=SummingMergeTree(d, k, 8192); +create table summing_merge_tree_aggregate_function (d materialized today(), k UInt64, c UInt64, x AggregateFunction(topK(2), UInt8)) engine=SummingMergeTree(d, k, 8192); -insert into test.summing_merge_tree_aggregate_function select 1, 1, topKState(2)(1); -insert into test.summing_merge_tree_aggregate_function select 1, 1, topKState(2)(2); -insert into test.summing_merge_tree_aggregate_function select 1, 1, topKState(2)(2); -insert into test.summing_merge_tree_aggregate_function select 1, 1, topKState(2)(3); -insert into test.summing_merge_tree_aggregate_function select 1, 1, topKState(2)(3); -insert into test.summing_merge_tree_aggregate_function select 1, 1, topKState(2)(3); -select k, sum(c), topKMerge(2)(x) from test.summing_merge_tree_aggregate_function group by k; -optimize table test.summing_merge_tree_aggregate_function; -select k, sum(c), topKMerge(2)(x) from test.summing_merge_tree_aggregate_function group by k; +insert into summing_merge_tree_aggregate_function select 1, 1, topKState(2)(1); +insert into summing_merge_tree_aggregate_function select 1, 1, topKState(2)(2); +insert into summing_merge_tree_aggregate_function select 1, 1, topKState(2)(2); +insert into summing_merge_tree_aggregate_function select 1, 1, topKState(2)(3); +insert into summing_merge_tree_aggregate_function select 1, 1, topKState(2)(3); +insert into summing_merge_tree_aggregate_function select 1, 1, topKState(2)(3); +select k, sum(c), topKMerge(2)(x) from summing_merge_tree_aggregate_function group by k; +optimize table summing_merge_tree_aggregate_function; +select k, sum(c), topKMerge(2)(x) from summing_merge_tree_aggregate_function group by k; -drop table test.summing_merge_tree_aggregate_function; +drop table summing_merge_tree_aggregate_function; ---- sum + topKWeighted -create table test.summing_merge_tree_aggregate_function (d materialized today(), k UInt64, c UInt64, x AggregateFunction(topKWeighted(2), UInt8, UInt8)) engine=SummingMergeTree(d, k, 8192); +create table summing_merge_tree_aggregate_function (d materialized today(), k UInt64, c UInt64, x AggregateFunction(topKWeighted(2), UInt8, UInt8)) engine=SummingMergeTree(d, k, 8192); -insert into test.summing_merge_tree_aggregate_function select 1, 1, topKWeightedState(2)(1, 1); -insert into test.summing_merge_tree_aggregate_function select 1, 1, topKWeightedState(2)(1, 1); -insert into test.summing_merge_tree_aggregate_function select 1, 1, topKWeightedState(2)(1, 1); -insert into test.summing_merge_tree_aggregate_function select 1, 1, topKWeightedState(2)(2, 2); -insert into test.summing_merge_tree_aggregate_function select 1, 1, topKWeightedState(2)(2, 2); -insert into test.summing_merge_tree_aggregate_function select 1, 1, topKWeightedState(2)(3, 5); -select k, sum(c), topKWeightedMerge(2)(x) from test.summing_merge_tree_aggregate_function group by k; -optimize table test.summing_merge_tree_aggregate_function; -select k, sum(c), topKWeightedMerge(2)(x) from test.summing_merge_tree_aggregate_function group by k; +insert into summing_merge_tree_aggregate_function select 1, 1, topKWeightedState(2)(1, 1); +insert into summing_merge_tree_aggregate_function select 1, 1, topKWeightedState(2)(1, 1); +insert into summing_merge_tree_aggregate_function select 1, 1, topKWeightedState(2)(1, 1); +insert into summing_merge_tree_aggregate_function select 1, 1, topKWeightedState(2)(2, 2); +insert into summing_merge_tree_aggregate_function select 1, 1, topKWeightedState(2)(2, 2); +insert into summing_merge_tree_aggregate_function select 1, 1, topKWeightedState(2)(3, 5); +select k, sum(c), topKWeightedMerge(2)(x) from summing_merge_tree_aggregate_function group by k; +optimize table summing_merge_tree_aggregate_function; +select k, sum(c), topKWeightedMerge(2)(x) from summing_merge_tree_aggregate_function group by k; -drop table test.summing_merge_tree_aggregate_function; +drop table summing_merge_tree_aggregate_function; ---- avg -create table test.summing_merge_tree_aggregate_function (d materialized today(), k UInt64, x AggregateFunction(avg, Float64)) engine=SummingMergeTree(d, k, 8192); +create table summing_merge_tree_aggregate_function (d materialized today(), k UInt64, x AggregateFunction(avg, Float64)) engine=SummingMergeTree(d, k, 8192); -insert into test.summing_merge_tree_aggregate_function select 1, avgState(0.0); -insert into test.summing_merge_tree_aggregate_function select 1, avgState(0.125); -insert into test.summing_merge_tree_aggregate_function select 1, avgState(0.25); -insert into test.summing_merge_tree_aggregate_function select 1, avgState(0.375); -insert into test.summing_merge_tree_aggregate_function select 1, avgState(0.4375); -insert into test.summing_merge_tree_aggregate_function select 1, avgState(0.5); -insert into test.summing_merge_tree_aggregate_function select 1, avgState(0.5625); -insert into test.summing_merge_tree_aggregate_function select 1, avgState(0.625); -insert into test.summing_merge_tree_aggregate_function select 1, avgState(0.75); -insert into test.summing_merge_tree_aggregate_function select 1, avgState(0.875); -insert into test.summing_merge_tree_aggregate_function select 1, avgState(1.0); -select k, avgMerge(x) from test.summing_merge_tree_aggregate_function group by k; -optimize table test.summing_merge_tree_aggregate_function; -select k, avgMerge(x) from test.summing_merge_tree_aggregate_function group by k; +insert into summing_merge_tree_aggregate_function select 1, avgState(0.0); +insert into summing_merge_tree_aggregate_function select 1, avgState(0.125); +insert into summing_merge_tree_aggregate_function select 1, avgState(0.25); +insert into summing_merge_tree_aggregate_function select 1, avgState(0.375); +insert into summing_merge_tree_aggregate_function select 1, avgState(0.4375); +insert into summing_merge_tree_aggregate_function select 1, avgState(0.5); +insert into summing_merge_tree_aggregate_function select 1, avgState(0.5625); +insert into summing_merge_tree_aggregate_function select 1, avgState(0.625); +insert into summing_merge_tree_aggregate_function select 1, avgState(0.75); +insert into summing_merge_tree_aggregate_function select 1, avgState(0.875); +insert into summing_merge_tree_aggregate_function select 1, avgState(1.0); +select k, avgMerge(x) from summing_merge_tree_aggregate_function group by k; +optimize table summing_merge_tree_aggregate_function; +select k, avgMerge(x) from summing_merge_tree_aggregate_function group by k; -drop table test.summing_merge_tree_aggregate_function; +drop table summing_merge_tree_aggregate_function; ---- quantile -create table test.summing_merge_tree_aggregate_function (d materialized today(), k UInt64, x AggregateFunction(quantile(0.1), Float64)) engine=SummingMergeTree(d, k, 8192); +create table summing_merge_tree_aggregate_function (d materialized today(), k UInt64, x AggregateFunction(quantile(0.1), Float64)) engine=SummingMergeTree(d, k, 8192); -insert into test.summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.0); -insert into test.summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.1); -insert into test.summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.2); -insert into test.summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.3); -insert into test.summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.4); -insert into test.summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.5); -insert into test.summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.6); -insert into test.summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.7); -insert into test.summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.8); -insert into test.summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.9); -insert into test.summing_merge_tree_aggregate_function select 1, quantileState(0.1)(1.0); -select k, round(quantileMerge(0.1)(x), 1) from test.summing_merge_tree_aggregate_function group by k; -optimize table test.summing_merge_tree_aggregate_function; -select k, round(quantileMerge(0.1)(x), 1) from test.summing_merge_tree_aggregate_function group by k; +insert into summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.0); +insert into summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.1); +insert into summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.2); +insert into summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.3); +insert into summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.4); +insert into summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.5); +insert into summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.6); +insert into summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.7); +insert into summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.8); +insert into summing_merge_tree_aggregate_function select 1, quantileState(0.1)(0.9); +insert into summing_merge_tree_aggregate_function select 1, quantileState(0.1)(1.0); +select k, round(quantileMerge(0.1)(x), 1) from summing_merge_tree_aggregate_function group by k; +optimize table summing_merge_tree_aggregate_function; +select k, round(quantileMerge(0.1)(x), 1) from summing_merge_tree_aggregate_function group by k; -drop table test.summing_merge_tree_aggregate_function; +drop table summing_merge_tree_aggregate_function; ---- sum + uniq with more data -create table test.summing_merge_tree_null ( +create table summing_merge_tree_null ( d materialized today(), k UInt64, c UInt64, u UInt64 ) engine=Null; -create materialized view test.summing_merge_tree_aggregate_function ( +create materialized view summing_merge_tree_aggregate_function ( d materialized today(), k UInt64, c UInt64, u AggregateFunction(uniq, UInt64) ) engine=SummingMergeTree(d, k, 8192) as select d, k, sum(c) as c, uniqState(u) as u -from test.summing_merge_tree_null +from summing_merge_tree_null group by d, k; -- prime number 53 to avoid resonanse between %3 and %53 -insert into test.summing_merge_tree_null select number % 3, 1, number % 53 from numbers(999999); +insert into summing_merge_tree_null select number % 3, 1, number % 53 from numbers(999999); -select k, sum(c), uniqMerge(u) from test.summing_merge_tree_aggregate_function group by k order by k; -optimize table test.summing_merge_tree_aggregate_function; -select k, sum(c), uniqMerge(u) from test.summing_merge_tree_aggregate_function group by k order by k; +select k, sum(c), uniqMerge(u) from summing_merge_tree_aggregate_function group by k order by k; +optimize table summing_merge_tree_aggregate_function; +select k, sum(c), uniqMerge(u) from summing_merge_tree_aggregate_function group by k order by k; -drop table test.summing_merge_tree_aggregate_function; -drop table test.summing_merge_tree_null; +drop table summing_merge_tree_aggregate_function; +drop table summing_merge_tree_null; diff --git a/dbms/tests/queries/0_stateless/00148_summing_merge_tree_nested_map_multiple_values.sql b/dbms/tests/queries/0_stateless/00148_summing_merge_tree_nested_map_multiple_values.sql index 8e14f9437fc..68c27cd726f 100644 --- a/dbms/tests/queries/0_stateless/00148_summing_merge_tree_nested_map_multiple_values.sql +++ b/dbms/tests/queries/0_stateless/00148_summing_merge_tree_nested_map_multiple_values.sql @@ -1,20 +1,20 @@ -drop table if exists test.nested_map_multiple_values; +drop table if exists nested_map_multiple_values; -create table test.nested_map_multiple_values (d materialized today(), k UInt64, payload materialized rand(), SomeMap Nested(ID UInt32, Num1 Int64, Num2 Float64)) engine=SummingMergeTree(d, k, 8192); +create table nested_map_multiple_values (d materialized today(), k UInt64, payload materialized rand(), SomeMap Nested(ID UInt32, Num1 Int64, Num2 Float64)) engine=SummingMergeTree(d, k, 8192); -insert into test.nested_map_multiple_values values (0,[1],[100],[1.0]),(1,[1],[100],[1.0]),(2,[1],[100],[1.0]),(3,[1,2],[100,150],[1.0,1.5]); -insert into test.nested_map_multiple_values values (0,[2],[150],[-2.5]),(1,[1],[150],[-1.0]),(2,[1,2],[150,150],[2.5,3.5]),(3,[1],[-100],[-1]); -optimize table test.nested_map_multiple_values; -select * from test.nested_map_multiple_values; +insert into nested_map_multiple_values values (0,[1],[100],[1.0]),(1,[1],[100],[1.0]),(2,[1],[100],[1.0]),(3,[1,2],[100,150],[1.0,1.5]); +insert into nested_map_multiple_values values (0,[2],[150],[-2.5]),(1,[1],[150],[-1.0]),(2,[1,2],[150,150],[2.5,3.5]),(3,[1],[-100],[-1]); +optimize table nested_map_multiple_values; +select * from nested_map_multiple_values; -drop table test.nested_map_multiple_values; +drop table nested_map_multiple_values; -drop table if exists test.nested_not_a_map; -create table test.nested_not_a_map (d materialized today(), k UInt64, payload materialized rand(), OnlyOneColumnMap Nested(ID UInt32), NonArithmeticValueMap Nested(ID UInt32, Date Date), Nested_ Nested(ID UInt32, Num Int64)) engine=SummingMergeTree(d, k, 8192); +drop table if exists nested_not_a_map; +create table nested_not_a_map (d materialized today(), k UInt64, payload materialized rand(), OnlyOneColumnMap Nested(ID UInt32), NonArithmeticValueMap Nested(ID UInt32, Date Date), Nested_ Nested(ID UInt32, Num Int64)) engine=SummingMergeTree(d, k, 8192); -insert into test.nested_not_a_map values (0,[1],[1],['2015-04-09'],[1],[100]); -insert into test.nested_not_a_map values (0,[1],[1],['2015-04-08'],[1],[200]); -optimize table test.nested_not_a_map; -select * from test.nested_not_a_map; +insert into nested_not_a_map values (0,[1],[1],['2015-04-09'],[1],[100]); +insert into nested_not_a_map values (0,[1],[1],['2015-04-08'],[1],[200]); +optimize table nested_not_a_map; +select * from nested_not_a_map; -drop table test.nested_not_a_map; +drop table nested_not_a_map; diff --git a/dbms/tests/queries/0_stateless/00155_long_merges.sh b/dbms/tests/queries/0_stateless/00155_long_merges.sh index a5a636a678a..27ba6a11e4d 100755 --- a/dbms/tests/queries/0_stateless/00155_long_merges.sh +++ b/dbms/tests/queries/0_stateless/00155_long_merges.sh @@ -4,23 +4,23 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh function create { - $CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.summing" - $CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.collapsing" - $CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.aggregating" - $CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.replacing" + $CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS summing" + $CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS collapsing" + $CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS aggregating" + $CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS replacing" - $CLICKHOUSE_CLIENT --query="CREATE TABLE test.summing (d Date DEFAULT today(), x UInt64, s UInt64 DEFAULT 1) ENGINE = SummingMergeTree(d, x, 8192)" - $CLICKHOUSE_CLIENT --query="CREATE TABLE test.collapsing (d Date DEFAULT today(), x UInt64, s Int8 DEFAULT 1) ENGINE = CollapsingMergeTree(d, x, 8192, s)" - $CLICKHOUSE_CLIENT --query="CREATE TABLE test.aggregating (d Date DEFAULT today(), x UInt64, s AggregateFunction(sum, UInt64)) ENGINE = AggregatingMergeTree(d, x, 8192)" - $CLICKHOUSE_CLIENT --query="CREATE TABLE test.replacing (d Date DEFAULT today(), x UInt64, s Int8 DEFAULT 1, v UInt64) ENGINE = ReplacingMergeTree(d, (x), 8192, v)" + $CLICKHOUSE_CLIENT --query="CREATE TABLE summing (d Date DEFAULT today(), x UInt64, s UInt64 DEFAULT 1) ENGINE = SummingMergeTree(d, x, 8192)" + $CLICKHOUSE_CLIENT --query="CREATE TABLE collapsing (d Date DEFAULT today(), x UInt64, s Int8 DEFAULT 1) ENGINE = CollapsingMergeTree(d, x, 8192, s)" + $CLICKHOUSE_CLIENT --query="CREATE TABLE aggregating (d Date DEFAULT today(), x UInt64, s AggregateFunction(sum, UInt64)) ENGINE = AggregatingMergeTree(d, x, 8192)" + $CLICKHOUSE_CLIENT --query="CREATE TABLE replacing (d Date DEFAULT today(), x UInt64, s Int8 DEFAULT 1, v UInt64) ENGINE = ReplacingMergeTree(d, (x), 8192, v)" } function cleanup { - $CLICKHOUSE_CLIENT --query="DROP TABLE test.summing" - $CLICKHOUSE_CLIENT --query="DROP TABLE test.collapsing" - $CLICKHOUSE_CLIENT --query="DROP TABLE test.aggregating" - $CLICKHOUSE_CLIENT --query="DROP TABLE test.replacing" + $CLICKHOUSE_CLIENT --query="DROP TABLE summing" + $CLICKHOUSE_CLIENT --query="DROP TABLE collapsing" + $CLICKHOUSE_CLIENT --query="DROP TABLE aggregating" + $CLICKHOUSE_CLIENT --query="DROP TABLE replacing" } @@ -32,36 +32,36 @@ function test { SETTINGS="--min_insert_block_size_rows=0 --min_insert_block_size_bytes=0" - $CLICKHOUSE_CLIENT $SETTINGS --query="INSERT INTO test.summing (x) SELECT number AS x FROM system.numbers LIMIT $1" - $CLICKHOUSE_CLIENT $SETTINGS --query="INSERT INTO test.summing (x) SELECT number AS x FROM system.numbers LIMIT $2" + $CLICKHOUSE_CLIENT $SETTINGS --query="INSERT INTO summing (x) SELECT number AS x FROM system.numbers LIMIT $1" + $CLICKHOUSE_CLIENT $SETTINGS --query="INSERT INTO summing (x) SELECT number AS x FROM system.numbers LIMIT $2" - $CLICKHOUSE_CLIENT $SETTINGS --query="INSERT INTO test.collapsing (x) SELECT number AS x FROM system.numbers LIMIT $1" - $CLICKHOUSE_CLIENT $SETTINGS --query="INSERT INTO test.collapsing (x) SELECT number AS x FROM system.numbers LIMIT $2" + $CLICKHOUSE_CLIENT $SETTINGS --query="INSERT INTO collapsing (x) SELECT number AS x FROM system.numbers LIMIT $1" + $CLICKHOUSE_CLIENT $SETTINGS --query="INSERT INTO collapsing (x) SELECT number AS x FROM system.numbers LIMIT $2" - $CLICKHOUSE_CLIENT $SETTINGS --query="INSERT INTO test.aggregating (d, x, s) SELECT today() AS d, number AS x, sumState(materialize(toUInt64(1))) AS s FROM (SELECT number FROM system.numbers LIMIT $1) GROUP BY number" - $CLICKHOUSE_CLIENT $SETTINGS --query="INSERT INTO test.aggregating (d, x, s) SELECT today() AS d, number AS x, sumState(materialize(toUInt64(1))) AS s FROM (SELECT number FROM system.numbers LIMIT $2) GROUP BY number" + $CLICKHOUSE_CLIENT $SETTINGS --query="INSERT INTO aggregating (d, x, s) SELECT today() AS d, number AS x, sumState(materialize(toUInt64(1))) AS s FROM (SELECT number FROM system.numbers LIMIT $1) GROUP BY number" + $CLICKHOUSE_CLIENT $SETTINGS --query="INSERT INTO aggregating (d, x, s) SELECT today() AS d, number AS x, sumState(materialize(toUInt64(1))) AS s FROM (SELECT number FROM system.numbers LIMIT $2) GROUP BY number" - $CLICKHOUSE_CLIENT $SETTINGS --query="INSERT INTO test.replacing (x, v) SELECT number AS x, toUInt64(number % 3 == 0) FROM system.numbers LIMIT $1" - $CLICKHOUSE_CLIENT $SETTINGS --query="INSERT INTO test.replacing (x, v) SELECT number AS x, toUInt64(number % 3 == 1) FROM system.numbers LIMIT $2" + $CLICKHOUSE_CLIENT $SETTINGS --query="INSERT INTO replacing (x, v) SELECT number AS x, toUInt64(number % 3 == 0) FROM system.numbers LIMIT $1" + $CLICKHOUSE_CLIENT $SETTINGS --query="INSERT INTO replacing (x, v) SELECT number AS x, toUInt64(number % 3 == 1) FROM system.numbers LIMIT $2" - $CLICKHOUSE_CLIENT --query="SELECT count() = $SUM, sum(s) = $SUM FROM test.summing" - $CLICKHOUSE_CLIENT --query="OPTIMIZE TABLE test.summing" - $CLICKHOUSE_CLIENT --query="SELECT count() = $MAX, sum(s) = $SUM FROM test.summing" + $CLICKHOUSE_CLIENT --query="SELECT count() = $SUM, sum(s) = $SUM FROM summing" + $CLICKHOUSE_CLIENT --query="OPTIMIZE TABLE summing" + $CLICKHOUSE_CLIENT --query="SELECT count() = $MAX, sum(s) = $SUM FROM summing" echo - $CLICKHOUSE_CLIENT --query="SELECT count() = $SUM, sum(s) = $SUM FROM test.collapsing" - $CLICKHOUSE_CLIENT --query="OPTIMIZE TABLE test.collapsing" --server_logs_file='/dev/null'; - $CLICKHOUSE_CLIENT --query="SELECT count() = $MAX, sum(s) = $MAX FROM test.collapsing" + $CLICKHOUSE_CLIENT --query="SELECT count() = $SUM, sum(s) = $SUM FROM collapsing" + $CLICKHOUSE_CLIENT --query="OPTIMIZE TABLE collapsing" --server_logs_file='/dev/null'; + $CLICKHOUSE_CLIENT --query="SELECT count() = $MAX, sum(s) = $MAX FROM collapsing" echo - $CLICKHOUSE_CLIENT --query="SELECT count() = $SUM, sumMerge(s) = $SUM FROM test.aggregating" - $CLICKHOUSE_CLIENT --query="OPTIMIZE TABLE test.aggregating" - $CLICKHOUSE_CLIENT --query="SELECT count() = $MAX, sumMerge(s) = $SUM FROM test.aggregating" + $CLICKHOUSE_CLIENT --query="SELECT count() = $SUM, sumMerge(s) = $SUM FROM aggregating" + $CLICKHOUSE_CLIENT --query="OPTIMIZE TABLE aggregating" + $CLICKHOUSE_CLIENT --query="SELECT count() = $MAX, sumMerge(s) = $SUM FROM aggregating" echo - $CLICKHOUSE_CLIENT --query="SELECT count() = $SUM, sum(s) = $SUM FROM test.replacing" - $CLICKHOUSE_CLIENT --query="OPTIMIZE TABLE test.replacing" - $CLICKHOUSE_CLIENT --query="SELECT count() = $MAX, sum(s) = $MAX FROM test.replacing" - $CLICKHOUSE_CLIENT --query="SELECT count() = sum(v) FROM test.replacing where x % 3 == 0 and x < $1" - $CLICKHOUSE_CLIENT --query="SELECT count() = sum(v) FROM test.replacing where x % 3 == 1 and x < $2" - $CLICKHOUSE_CLIENT --query="SELECT sum(v) = 0 FROM test.replacing where x % 3 == 2" + $CLICKHOUSE_CLIENT --query="SELECT count() = $SUM, sum(s) = $SUM FROM replacing" + $CLICKHOUSE_CLIENT --query="OPTIMIZE TABLE replacing" + $CLICKHOUSE_CLIENT --query="SELECT count() = $MAX, sum(s) = $MAX FROM replacing" + $CLICKHOUSE_CLIENT --query="SELECT count() = sum(v) FROM replacing where x % 3 == 0 and x < $1" + $CLICKHOUSE_CLIENT --query="SELECT count() = sum(v) FROM replacing where x % 3 == 1 and x < $2" + $CLICKHOUSE_CLIENT --query="SELECT sum(v) = 0 FROM replacing where x % 3 == 2" echo echo } diff --git a/dbms/tests/queries/0_stateless/00158_buffer_and_nonexistent_table.sql b/dbms/tests/queries/0_stateless/00158_buffer_and_nonexistent_table.sql index af211314328..5fc41e30889 100644 --- a/dbms/tests/queries/0_stateless/00158_buffer_and_nonexistent_table.sql +++ b/dbms/tests/queries/0_stateless/00158_buffer_and_nonexistent_table.sql @@ -1,7 +1,9 @@ -CREATE DATABASE IF NOT EXISTS test2; -DROP TABLE IF EXISTS test2.mt_buffer; -CREATE TABLE test2.mt_buffer (d Date DEFAULT today(), x UInt64) ENGINE = Buffer(test2, mt, 16, 100, 100, 1000000, 1000000, 1000000000, 1000000000); +CREATE DATABASE IF NOT EXISTS test2_00158; +DROP TABLE IF EXISTS test2_00158.mt_buffer_00158; +DROP TABLE IF EXISTS test2_00158.mt_00158; +CREATE TABLE test2_00158.mt_buffer_00158 (d Date DEFAULT today(), x UInt64) ENGINE = Buffer(test2_00158, mt_00158, 16, 100, 100, 1000000, 1000000, 1000000000, 1000000000); SET send_logs_level = 'none'; -- Supress "Destination table test2.mt doesn't exist. Block of data is discarded." -INSERT INTO test2.mt_buffer (x) SELECT number AS x FROM system.numbers LIMIT 100000; -INSERT INTO test2.mt_buffer (x) SELECT number AS x FROM system.numbers LIMIT 1000000; -DROP DATABASE test2; +INSERT INTO test2_00158.mt_buffer_00158 (x) SELECT number AS x FROM system.numbers LIMIT 100000; +INSERT INTO test2_00158.mt_buffer_00158 (x) SELECT number AS x FROM system.numbers LIMIT 1000000; +DROP TABLE IF EXISTS test2_00158.mt_buffer_00158; +DROP DATABASE test2_00158; diff --git a/dbms/tests/queries/0_stateless/00159_whitespace_in_columns_list.sql b/dbms/tests/queries/0_stateless/00159_whitespace_in_columns_list.sql index 6a7728a38f2..57c057443f4 100644 --- a/dbms/tests/queries/0_stateless/00159_whitespace_in_columns_list.sql +++ b/dbms/tests/queries/0_stateless/00159_whitespace_in_columns_list.sql @@ -1,13 +1,13 @@ -DROP TABLE IF EXISTS test.memory; -CREATE TABLE test.memory (x UInt8) ENGINE = Memory; +DROP TABLE IF EXISTS memory; +CREATE TABLE memory (x UInt8) ENGINE = Memory; -INSERT INTO test.memory VALUES (1); -INSERT INTO test.memory (x) VALUES (2); -INSERT INTO test.memory ( x) VALUES (3); -INSERT INTO test.memory (x ) VALUES (4); -INSERT INTO test.memory ( x ) VALUES (5); -INSERT INTO test.memory(x)VALUES(6); +INSERT INTO memory VALUES (1); +INSERT INTO memory (x) VALUES (2); +INSERT INTO memory ( x) VALUES (3); +INSERT INTO memory (x ) VALUES (4); +INSERT INTO memory ( x ) VALUES (5); +INSERT INTO memory(x)VALUES(6); -SELECT * FROM test.memory ORDER BY x; +SELECT * FROM memory ORDER BY x; -DROP TABLE test.memory; +DROP TABLE memory; diff --git a/dbms/tests/queries/0_stateless/00168_buffer_defaults.reference b/dbms/tests/queries/0_stateless/00168_buffer_defaults.reference index 2667191e518..d9f515be988 100644 --- a/dbms/tests/queries/0_stateless/00168_buffer_defaults.reference +++ b/dbms/tests/queries/0_stateless/00168_buffer_defaults.reference @@ -1,9 +1,9 @@ -EventDate Date -UTCEventTime DateTime -MoscowEventDate Date DEFAULT toDate(UTCEventTime) -EventDate Date -UTCEventTime DateTime -MoscowEventDate Date DEFAULT toDate(UTCEventTime) +EventDate Date +UTCEventTime DateTime +MoscowEventDate Date DEFAULT toDate(UTCEventTime) +EventDate Date +UTCEventTime DateTime +MoscowEventDate Date DEFAULT toDate(UTCEventTime) 2015-06-09 2015-06-09 01:02:03 2015-06-09 2015-06-09 2015-06-09 01:02:03 2015-06-09 2015-06-09 2015-06-09 01:02:03 2015-06-09 diff --git a/dbms/tests/queries/0_stateless/00177_inserts_through_http_parts.sh b/dbms/tests/queries/0_stateless/00177_inserts_through_http_parts.sh index 0b98faf1ba3..6960676ceb6 100755 --- a/dbms/tests/queries/0_stateless/00177_inserts_through_http_parts.sh +++ b/dbms/tests/queries/0_stateless/00177_inserts_through_http_parts.sh @@ -3,12 +3,12 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=DROP+TABLE" -d 'IF EXISTS test.insert' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=CREATE" -d 'TABLE test.insert (x UInt8) ENGINE = Memory' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d 'INSERT INTO test.insert VALUES (1),(2)' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+test.insert+VALUES" -d '(3),(4)' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+test.insert" -d 'VALUES (5),(6)' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+test.insert+VALUES+(7)" -d ',(8)' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+test.insert+VALUES+(9),(10)" -d ' ' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d 'SELECT x FROM test.insert ORDER BY x' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=DROP+TABLE" -d 'test.insert' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=DROP+TABLE" -d 'IF EXISTS insert' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=CREATE" -d 'TABLE insert (x UInt8) ENGINE = Memory' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d 'INSERT INTO insert VALUES (1),(2)' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+insert+VALUES" -d '(3),(4)' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+insert" -d 'VALUES (5),(6)' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+insert+VALUES+(7)" -d ',(8)' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+insert+VALUES+(9),(10)" -d ' ' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d 'SELECT x FROM insert ORDER BY x' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=DROP+TABLE" -d 'insert' diff --git a/dbms/tests/queries/0_stateless/00180_attach_materialized_view.sql b/dbms/tests/queries/0_stateless/00180_attach_materialized_view.sql index 787cea6caf7..156c1b262f1 100644 --- a/dbms/tests/queries/0_stateless/00180_attach_materialized_view.sql +++ b/dbms/tests/queries/0_stateless/00180_attach_materialized_view.sql @@ -1,12 +1,12 @@ -DROP TABLE IF EXISTS test.t; -DROP TABLE IF EXISTS test.mv; -DROP TABLE IF EXISTS test.`.inner.mv`; +DROP TABLE IF EXISTS t; +DROP TABLE IF EXISTS mv; +DROP TABLE IF EXISTS `.inner.mv`; -CREATE TABLE test.t (x UInt8) ENGINE = Null; -CREATE MATERIALIZED VIEW test.mv ENGINE = Null AS SELECT * FROM test.t; +CREATE TABLE t (x UInt8) ENGINE = Null; +CREATE MATERIALIZED VIEW mv ENGINE = Null AS SELECT * FROM t; -DETACH TABLE test.mv; -ATTACH MATERIALIZED VIEW test.mv ENGINE = Null AS SELECT * FROM test.t; +DETACH TABLE mv; +ATTACH MATERIALIZED VIEW mv ENGINE = Null AS SELECT * FROM t; -DROP TABLE test.t; -DROP TABLE test.mv; +DROP TABLE t; +DROP TABLE mv; diff --git a/dbms/tests/queries/0_stateless/00181_aggregate_functions_statistics.sql b/dbms/tests/queries/0_stateless/00181_aggregate_functions_statistics.sql index 589e5d92aca..aeecdc20c67 100644 --- a/dbms/tests/queries/0_stateless/00181_aggregate_functions_statistics.sql +++ b/dbms/tests/queries/0_stateless/00181_aggregate_functions_statistics.sql @@ -1,65 +1,65 @@ -DROP TABLE IF EXISTS test.series; +DROP TABLE IF EXISTS series; -CREATE TABLE test.series(i UInt32, x_value Float64, y_value Float64) ENGINE = Memory; +CREATE TABLE series(i UInt32, x_value Float64, y_value Float64) ENGINE = Memory; -INSERT INTO test.series(i, x_value, y_value) VALUES (1, 5.6,-4.4),(2, -9.6,3),(3, -1.3,-4),(4, 5.3,9.7),(5, 4.4,0.037),(6, -8.6,-7.8),(7, 5.1,9.3),(8, 7.9,-3.6),(9, -8.2,0.62),(10, -3,7.3); +INSERT INTO series(i, x_value, y_value) VALUES (1, 5.6,-4.4),(2, -9.6,3),(3, -1.3,-4),(4, 5.3,9.7),(5, 4.4,0.037),(6, -8.6,-7.8),(7, 5.1,9.3),(8, 7.9,-3.6),(9, -8.2,0.62),(10, -3,7.3); /* varSamp */ -SELECT varSamp(x_value) FROM (SELECT x_value FROM test.series LIMIT 0); -SELECT varSamp(x_value) FROM (SELECT x_value FROM test.series LIMIT 1); +SELECT varSamp(x_value) FROM (SELECT x_value FROM series LIMIT 0); +SELECT varSamp(x_value) FROM (SELECT x_value FROM series LIMIT 1); SELECT round(abs(res1 - res2), 6) FROM ( SELECT varSamp(x_value) AS res1, (sum(x_value * x_value) - ((sum(x_value) * sum(x_value)) / count())) / (count() - 1) AS res2 -FROM test.series +FROM series ); /* stddevSamp */ -SELECT stddevSamp(x_value) FROM (SELECT x_value FROM test.series LIMIT 0); -SELECT stddevSamp(x_value) FROM (SELECT x_value FROM test.series LIMIT 1); +SELECT stddevSamp(x_value) FROM (SELECT x_value FROM series LIMIT 0); +SELECT stddevSamp(x_value) FROM (SELECT x_value FROM series LIMIT 1); SELECT round(abs(res1 - res2), 6) FROM ( SELECT stddevSamp(x_value) AS res1, sqrt((sum(x_value * x_value) - ((sum(x_value) * sum(x_value)) / count())) / (count() - 1)) AS res2 -FROM test.series +FROM series ); /* varPop */ -SELECT varPop(x_value) FROM (SELECT x_value FROM test.series LIMIT 0); -SELECT varPop(x_value) FROM (SELECT x_value FROM test.series LIMIT 1); +SELECT varPop(x_value) FROM (SELECT x_value FROM series LIMIT 0); +SELECT varPop(x_value) FROM (SELECT x_value FROM series LIMIT 1); SELECT round(abs(res1 - res2), 6) FROM ( SELECT varPop(x_value) AS res1, (sum(x_value * x_value) - ((sum(x_value) * sum(x_value)) / count())) / count() AS res2 -FROM test.series +FROM series ); /* stddevPop */ -SELECT stddevPop(x_value) FROM (SELECT x_value FROM test.series LIMIT 0); -SELECT stddevPop(x_value) FROM (SELECT x_value FROM test.series LIMIT 1); +SELECT stddevPop(x_value) FROM (SELECT x_value FROM series LIMIT 0); +SELECT stddevPop(x_value) FROM (SELECT x_value FROM series LIMIT 1); SELECT round(abs(res1 - res2), 6) FROM ( SELECT stddevPop(x_value) AS res1, sqrt((sum(x_value * x_value) - ((sum(x_value) * sum(x_value)) / count())) / count()) AS res2 -FROM test.series +FROM series ); /* covarSamp */ -SELECT covarSamp(x_value, y_value) FROM (SELECT x_value, y_value FROM test.series LIMIT 0); -SELECT covarSamp(x_value, y_value) FROM (SELECT x_value, y_value FROM test.series LIMIT 1); +SELECT covarSamp(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 0); +SELECT covarSamp(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 1); SELECT round(abs(COVAR1 - COVAR2), 6) FROM @@ -67,7 +67,7 @@ FROM SELECT arrayJoin([1]) AS ID2, covarSamp(x_value, y_value) AS COVAR1 - FROM test.series + FROM series ) ANY INNER JOIN ( SELECT @@ -82,22 +82,22 @@ FROM toUInt32(arrayJoin([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])) AS ID, avg(x_value) AS AVG_X, avg(y_value) AS AVG_Y - FROM test.series + FROM series ) ANY INNER JOIN ( SELECT i AS ID, x_value AS X, y_value AS Y - FROM test.series + FROM series ) USING ID ) ) USING ID2; /* covarPop */ -SELECT covarPop(x_value, y_value) FROM (SELECT x_value, y_value FROM test.series LIMIT 0); -SELECT covarPop(x_value, y_value) FROM (SELECT x_value, y_value FROM test.series LIMIT 1); +SELECT covarPop(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 0); +SELECT covarPop(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 1); SELECT round(abs(COVAR1 - COVAR2), 6) FROM @@ -105,7 +105,7 @@ FROM SELECT arrayJoin([1]) AS ID2, covarPop(x_value, y_value) AS COVAR1 - FROM test.series + FROM series ) ANY INNER JOIN ( SELECT @@ -120,24 +120,24 @@ FROM toUInt32(arrayJoin([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])) AS ID, avg(x_value) AS AVG_X, avg(y_value) AS AVG_Y - FROM test.series + FROM series ) ANY INNER JOIN ( SELECT i AS ID, x_value AS X, y_value AS Y - FROM test.series + FROM series ) USING ID ) ) USING ID2; /* corr */ -SELECT corr(x_value, y_value) FROM (SELECT x_value, y_value FROM test.series LIMIT 0); -SELECT corr(x_value, y_value) FROM (SELECT x_value, y_value FROM test.series LIMIT 1); +SELECT corr(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 0); +SELECT corr(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 1); -SELECT round(abs(corr(x_value, y_value) - covarPop(x_value, y_value) / (stddevPop(x_value) * stddevPop(y_value))), 6) FROM test.series; +SELECT round(abs(corr(x_value, y_value) - covarPop(x_value, y_value) / (stddevPop(x_value) * stddevPop(y_value))), 6) FROM series; /* quantile AND quantileExact */ SELECT '----quantile----'; @@ -152,4 +152,4 @@ SELECT quantileIf(number, number > 100) FROM numbers(90); SELECT quantileIf(toFloat32(number) , number > 100) FROM numbers(90); SELECT quantileIf(toFloat64(number) , number > 100) FROM numbers(90); -DROP TABLE test.series; +DROP TABLE series; diff --git a/dbms/tests/queries/0_stateless/00181_aggregate_functions_statistics_stable.sql b/dbms/tests/queries/0_stateless/00181_aggregate_functions_statistics_stable.sql index cc2b39f3c36..362d300f1d6 100644 --- a/dbms/tests/queries/0_stateless/00181_aggregate_functions_statistics_stable.sql +++ b/dbms/tests/queries/0_stateless/00181_aggregate_functions_statistics_stable.sql @@ -1,65 +1,65 @@ -DROP TABLE IF EXISTS test.series; +DROP TABLE IF EXISTS series; -CREATE TABLE test.series(i UInt32, x_value Float64, y_value Float64) ENGINE = Memory; +CREATE TABLE series(i UInt32, x_value Float64, y_value Float64) ENGINE = Memory; -INSERT INTO test.series(i, x_value, y_value) VALUES (1, 5.6,-4.4),(2, -9.6,3),(3, -1.3,-4),(4, 5.3,9.7),(5, 4.4,0.037),(6, -8.6,-7.8),(7, 5.1,9.3),(8, 7.9,-3.6),(9, -8.2,0.62),(10, -3,7.3); +INSERT INTO series(i, x_value, y_value) VALUES (1, 5.6,-4.4),(2, -9.6,3),(3, -1.3,-4),(4, 5.3,9.7),(5, 4.4,0.037),(6, -8.6,-7.8),(7, 5.1,9.3),(8, 7.9,-3.6),(9, -8.2,0.62),(10, -3,7.3); /* varSampStable */ -SELECT varSampStable(x_value) FROM (SELECT x_value FROM test.series LIMIT 0); -SELECT varSampStable(x_value) FROM (SELECT x_value FROM test.series LIMIT 1); +SELECT varSampStable(x_value) FROM (SELECT x_value FROM series LIMIT 0); +SELECT varSampStable(x_value) FROM (SELECT x_value FROM series LIMIT 1); SELECT round(abs(res1 - res2), 6) FROM ( SELECT varSampStable(x_value) AS res1, (sum(x_value * x_value) - ((sum(x_value) * sum(x_value)) / count())) / (count() - 1) AS res2 -FROM test.series +FROM series ); /* stddevSampStable */ -SELECT stddevSampStable(x_value) FROM (SELECT x_value FROM test.series LIMIT 0); -SELECT stddevSampStable(x_value) FROM (SELECT x_value FROM test.series LIMIT 1); +SELECT stddevSampStable(x_value) FROM (SELECT x_value FROM series LIMIT 0); +SELECT stddevSampStable(x_value) FROM (SELECT x_value FROM series LIMIT 1); SELECT round(abs(res1 - res2), 6) FROM ( SELECT stddevSampStable(x_value) AS res1, sqrt((sum(x_value * x_value) - ((sum(x_value) * sum(x_value)) / count())) / (count() - 1)) AS res2 -FROM test.series +FROM series ); /* varPopStable */ -SELECT varPopStable(x_value) FROM (SELECT x_value FROM test.series LIMIT 0); -SELECT varPopStable(x_value) FROM (SELECT x_value FROM test.series LIMIT 1); +SELECT varPopStable(x_value) FROM (SELECT x_value FROM series LIMIT 0); +SELECT varPopStable(x_value) FROM (SELECT x_value FROM series LIMIT 1); SELECT round(abs(res1 - res2), 6) FROM ( SELECT varPopStable(x_value) AS res1, (sum(x_value * x_value) - ((sum(x_value) * sum(x_value)) / count())) / count() AS res2 -FROM test.series +FROM series ); /* stddevPopStable */ -SELECT stddevPopStable(x_value) FROM (SELECT x_value FROM test.series LIMIT 0); -SELECT stddevPopStable(x_value) FROM (SELECT x_value FROM test.series LIMIT 1); +SELECT stddevPopStable(x_value) FROM (SELECT x_value FROM series LIMIT 0); +SELECT stddevPopStable(x_value) FROM (SELECT x_value FROM series LIMIT 1); SELECT round(abs(res1 - res2), 6) FROM ( SELECT stddevPopStable(x_value) AS res1, sqrt((sum(x_value * x_value) - ((sum(x_value) * sum(x_value)) / count())) / count()) AS res2 -FROM test.series +FROM series ); /* covarSampStable */ -SELECT covarSampStable(x_value, y_value) FROM (SELECT x_value, y_value FROM test.series LIMIT 0); -SELECT covarSampStable(x_value, y_value) FROM (SELECT x_value, y_value FROM test.series LIMIT 1); +SELECT covarSampStable(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 0); +SELECT covarSampStable(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 1); SELECT round(abs(COVAR1 - COVAR2), 6) FROM @@ -67,7 +67,7 @@ FROM SELECT arrayJoin([1]) AS ID2, covarSampStable(x_value, y_value) AS COVAR1 - FROM test.series + FROM series ) ANY INNER JOIN ( SELECT @@ -82,22 +82,22 @@ FROM toUInt32(arrayJoin([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])) AS ID, avg(x_value) AS AVG_X, avg(y_value) AS AVG_Y - FROM test.series + FROM series ) ANY INNER JOIN ( SELECT i AS ID, x_value AS X, y_value AS Y - FROM test.series + FROM series ) USING ID ) ) USING ID2; /* covarPopStable */ -SELECT covarPopStable(x_value, y_value) FROM (SELECT x_value, y_value FROM test.series LIMIT 0); -SELECT covarPopStable(x_value, y_value) FROM (SELECT x_value, y_value FROM test.series LIMIT 1); +SELECT covarPopStable(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 0); +SELECT covarPopStable(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 1); SELECT round(abs(COVAR1 - COVAR2), 6) FROM @@ -105,7 +105,7 @@ FROM SELECT arrayJoin([1]) AS ID2, covarPopStable(x_value, y_value) AS COVAR1 - FROM test.series + FROM series ) ANY INNER JOIN ( SELECT @@ -120,23 +120,23 @@ FROM toUInt32(arrayJoin([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])) AS ID, avg(x_value) AS AVG_X, avg(y_value) AS AVG_Y - FROM test.series + FROM series ) ANY INNER JOIN ( SELECT i AS ID, x_value AS X, y_value AS Y - FROM test.series + FROM series ) USING ID ) ) USING ID2; /* corr */ -SELECT corrStable(x_value, y_value) FROM (SELECT x_value, y_value FROM test.series LIMIT 0); -SELECT corrStable(x_value, y_value) FROM (SELECT x_value, y_value FROM test.series LIMIT 1); +SELECT corrStable(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 0); +SELECT corrStable(x_value, y_value) FROM (SELECT x_value, y_value FROM series LIMIT 1); -SELECT round(abs(corrStable(x_value, y_value) - covarPopStable(x_value, y_value) / (stddevPopStable(x_value) * stddevPopStable(y_value))), 6) FROM test.series; +SELECT round(abs(corrStable(x_value, y_value) - covarPopStable(x_value, y_value) / (stddevPopStable(x_value) * stddevPopStable(y_value))), 6) FROM series; -DROP TABLE test.series; +DROP TABLE series; diff --git a/dbms/tests/queries/0_stateless/00191_aggregating_merge_tree_and_final.sql b/dbms/tests/queries/0_stateless/00191_aggregating_merge_tree_and_final.sql index 1dbc73c4754..8effc7e735a 100644 --- a/dbms/tests/queries/0_stateless/00191_aggregating_merge_tree_and_final.sql +++ b/dbms/tests/queries/0_stateless/00191_aggregating_merge_tree_and_final.sql @@ -1,14 +1,14 @@ -DROP TABLE IF EXISTS test.aggregating; -CREATE TABLE test.aggregating (d Date DEFAULT '2000-01-01', k UInt64, u AggregateFunction(uniq, UInt64)) ENGINE = AggregatingMergeTree(d, k, 8192); +DROP TABLE IF EXISTS aggregating; +CREATE TABLE aggregating (d Date DEFAULT '2000-01-01', k UInt64, u AggregateFunction(uniq, UInt64)) ENGINE = AggregatingMergeTree(d, k, 8192); -INSERT INTO test.aggregating (k, u) SELECT intDiv(number, 100) AS k, uniqState(toUInt64(number % 100)) AS u FROM (SELECT * FROM system.numbers LIMIT 1000) GROUP BY k; -INSERT INTO test.aggregating (k, u) SELECT intDiv(number, 100) AS k, uniqState(toUInt64(number % 100) + 50) AS u FROM (SELECT * FROM system.numbers LIMIT 500, 1000) GROUP BY k; +INSERT INTO aggregating (k, u) SELECT intDiv(number, 100) AS k, uniqState(toUInt64(number % 100)) AS u FROM (SELECT * FROM system.numbers LIMIT 1000) GROUP BY k; +INSERT INTO aggregating (k, u) SELECT intDiv(number, 100) AS k, uniqState(toUInt64(number % 100) + 50) AS u FROM (SELECT * FROM system.numbers LIMIT 500, 1000) GROUP BY k; -SELECT k, finalizeAggregation(u) FROM test.aggregating FINAL; +SELECT k, finalizeAggregation(u) FROM aggregating FINAL; -OPTIMIZE TABLE test.aggregating; +OPTIMIZE TABLE aggregating; -SELECT k, finalizeAggregation(u) FROM test.aggregating; -SELECT k, finalizeAggregation(u) FROM test.aggregating FINAL; +SELECT k, finalizeAggregation(u) FROM aggregating; +SELECT k, finalizeAggregation(u) FROM aggregating FINAL; -DROP TABLE test.aggregating; +DROP TABLE aggregating; diff --git a/dbms/tests/queries/0_stateless/00193_parallel_replicas.sql b/dbms/tests/queries/0_stateless/00193_parallel_replicas.sql index ed1e6f0ed8d..d1430d74045 100644 --- a/dbms/tests/queries/0_stateless/00193_parallel_replicas.sql +++ b/dbms/tests/queries/0_stateless/00193_parallel_replicas.sql @@ -1,58 +1,58 @@ -DROP TABLE IF EXISTS test.parallel_replicas; -DROP TABLE IF EXISTS test.parallel_replicas_backup; +DROP TABLE IF EXISTS parallel_replicas; +DROP TABLE IF EXISTS parallel_replicas_backup; -CREATE TABLE test.parallel_replicas (d Date DEFAULT today(), x UInt32, u UInt64, s String) ENGINE = MergeTree(d, cityHash64(u, s), (x, d, cityHash64(u, s)), 8192); -INSERT INTO test.parallel_replicas (x, u, s) VALUES (1, 2, 'A'),(3, 4, 'B'),(5, 6, 'C'),(7, 8, 'D'),(9,10,'E'); -INSERT INTO test.parallel_replicas (x, u, s) VALUES (11, 12, 'F'),(13, 14, 'G'),(15, 16, 'H'),(17, 18, 'I'),(19,20,'J'); -INSERT INTO test.parallel_replicas (x, u, s) VALUES (21, 22, 'K'),(23, 24, 'L'),(25, 26, 'M'),(27, 28, 'N'),(29,30,'O'); -INSERT INTO test.parallel_replicas (x, u, s) VALUES (31, 32, 'P'),(33, 34, 'Q'),(35, 36, 'R'),(37, 38, 'S'),(39,40,'T'); -INSERT INTO test.parallel_replicas (x, u, s) VALUES (41, 42, 'U'),(43, 44, 'V'),(45, 46, 'W'),(47, 48, 'X'),(49,50,'Y'); -INSERT INTO test.parallel_replicas (x, u, s) VALUES (51, 52, 'Z'); +CREATE TABLE parallel_replicas (d Date DEFAULT today(), x UInt32, u UInt64, s String) ENGINE = MergeTree(d, cityHash64(u, s), (x, d, cityHash64(u, s)), 8192); +INSERT INTO parallel_replicas (x, u, s) VALUES (1, 2, 'A'),(3, 4, 'B'),(5, 6, 'C'),(7, 8, 'D'),(9,10,'E'); +INSERT INTO parallel_replicas (x, u, s) VALUES (11, 12, 'F'),(13, 14, 'G'),(15, 16, 'H'),(17, 18, 'I'),(19,20,'J'); +INSERT INTO parallel_replicas (x, u, s) VALUES (21, 22, 'K'),(23, 24, 'L'),(25, 26, 'M'),(27, 28, 'N'),(29,30,'O'); +INSERT INTO parallel_replicas (x, u, s) VALUES (31, 32, 'P'),(33, 34, 'Q'),(35, 36, 'R'),(37, 38, 'S'),(39,40,'T'); +INSERT INTO parallel_replicas (x, u, s) VALUES (41, 42, 'U'),(43, 44, 'V'),(45, 46, 'W'),(47, 48, 'X'),(49,50,'Y'); +INSERT INTO parallel_replicas (x, u, s) VALUES (51, 52, 'Z'); /* * Проверяем, что: * - на каждой реплике таблица не пустая; - * - объединение данных всех реплик совпадает с содержанием таблицы test.parallel_replicas. + * - объединение данных всех реплик совпадает с содержанием таблицы parallel_replicas. */ /* Две реплики */ -CREATE TABLE test.parallel_replicas_backup(d Date DEFAULT today(), x UInt32, u UInt64, s String) ENGINE = Memory; +CREATE TABLE parallel_replicas_backup(d Date DEFAULT today(), x UInt32, u UInt64, s String) ENGINE = Memory; SET parallel_replicas_count = 2; SET parallel_replica_offset = 0; -INSERT INTO test.parallel_replicas_backup(d, x, u, s) SELECT d, x, u, s FROM test.parallel_replicas; -SELECT count() > 0 FROM test.parallel_replicas; +INSERT INTO parallel_replicas_backup(d, x, u, s) SELECT d, x, u, s FROM parallel_replicas; +SELECT count() > 0 FROM parallel_replicas; SET parallel_replica_offset = 1; -INSERT INTO test.parallel_replicas_backup(d, x, u, s) SELECT d, x, u, s FROM test.parallel_replicas; -SELECT count() > 0 FROM test.parallel_replicas; +INSERT INTO parallel_replicas_backup(d, x, u, s) SELECT d, x, u, s FROM parallel_replicas; +SELECT count() > 0 FROM parallel_replicas; SET parallel_replicas_count = 0; -SELECT x, u, s FROM test.parallel_replicas_backup ORDER BY x, u, s ASC; +SELECT x, u, s FROM parallel_replicas_backup ORDER BY x, u, s ASC; -DROP TABLE test.parallel_replicas_backup; -CREATE TABLE test.parallel_replicas_backup(d Date DEFAULT today(), x UInt32, u UInt64, s String) ENGINE = Memory; +DROP TABLE parallel_replicas_backup; +CREATE TABLE parallel_replicas_backup(d Date DEFAULT today(), x UInt32, u UInt64, s String) ENGINE = Memory; /* Три реплики */ SET parallel_replicas_count = 3; SET parallel_replica_offset = 0; -INSERT INTO test.parallel_replicas_backup(d, x, u, s) SELECT d, x, u, s FROM test.parallel_replicas; -SELECT count() > 0 FROM test.parallel_replicas; +INSERT INTO parallel_replicas_backup(d, x, u, s) SELECT d, x, u, s FROM parallel_replicas; +SELECT count() > 0 FROM parallel_replicas; SET parallel_replica_offset = 1; -INSERT INTO test.parallel_replicas_backup(d, x, u, s) SELECT d, x, u, s FROM test.parallel_replicas; -SELECT count() > 0 FROM test.parallel_replicas; +INSERT INTO parallel_replicas_backup(d, x, u, s) SELECT d, x, u, s FROM parallel_replicas; +SELECT count() > 0 FROM parallel_replicas; SET parallel_replica_offset = 2; -INSERT INTO test.parallel_replicas_backup(d, x, u, s) SELECT d, x, u, s FROM test.parallel_replicas; -SELECT count() > 0 FROM test.parallel_replicas; +INSERT INTO parallel_replicas_backup(d, x, u, s) SELECT d, x, u, s FROM parallel_replicas; +SELECT count() > 0 FROM parallel_replicas; SET parallel_replicas_count = 0; -SELECT x, u, s FROM test.parallel_replicas_backup ORDER BY x, u, s ASC; +SELECT x, u, s FROM parallel_replicas_backup ORDER BY x, u, s ASC; -DROP TABLE test.parallel_replicas; -DROP TABLE test.parallel_replicas_backup; +DROP TABLE parallel_replicas; +DROP TABLE parallel_replicas_backup; diff --git a/dbms/tests/queries/0_stateless/00200_shard_distinct_order_by_limit_distributed.sql b/dbms/tests/queries/0_stateless/00200_shard_distinct_order_by_limit_distributed.sql index 85a7c434f16..b4fed025e1f 100644 --- a/dbms/tests/queries/0_stateless/00200_shard_distinct_order_by_limit_distributed.sql +++ b/dbms/tests/queries/0_stateless/00200_shard_distinct_order_by_limit_distributed.sql @@ -1,5 +1,5 @@ -DROP TABLE IF EXISTS numbers_memory; -CREATE TABLE numbers_memory AS system.numbers ENGINE = Memory; -INSERT INTO numbers_memory SELECT number FROM system.numbers LIMIT 100; -SELECT DISTINCT number FROM remote('127.0.0.{2,3}', default.numbers_memory) ORDER BY number LIMIT 10; -DROP TABLE numbers_memory; +DROP TABLE IF EXISTS test.numbers_memory; +CREATE TABLE test.numbers_memory AS system.numbers ENGINE = Memory; +INSERT INTO test.numbers_memory SELECT number FROM system.numbers LIMIT 100; +SELECT DISTINCT number FROM remote('127.0.0.{2,3}', test.numbers_memory) ORDER BY number LIMIT 10; +DROP TABLE test.numbers_memory; diff --git a/dbms/tests/queries/0_stateless/00204_extract_url_parameter.sql b/dbms/tests/queries/0_stateless/00204_extract_url_parameter.sql index d6ca5b31333..f3395a7029f 100644 --- a/dbms/tests/queries/0_stateless/00204_extract_url_parameter.sql +++ b/dbms/tests/queries/0_stateless/00204_extract_url_parameter.sql @@ -1 +1 @@ -SELECT extractURLParameter('http://test.com/?testq=aaa&q=111', 'q'); +SELECT extractURLParameter('http://com/?testq=aaa&q=111', 'q'); diff --git a/dbms/tests/queries/0_stateless/00209_insert_select_extremes.sql b/dbms/tests/queries/0_stateless/00209_insert_select_extremes.sql index 0d632992b67..65bf2b8de24 100644 --- a/dbms/tests/queries/0_stateless/00209_insert_select_extremes.sql +++ b/dbms/tests/queries/0_stateless/00209_insert_select_extremes.sql @@ -1,11 +1,11 @@ -DROP TABLE IF EXISTS test.test; -CREATE TABLE test.test (x UInt8) ENGINE = Log; +DROP TABLE IF EXISTS test; +CREATE TABLE test (x UInt8) ENGINE = Log; -INSERT INTO test.test SELECT 1 AS x; -INSERT INTO test.test SELECT 1 AS x SETTINGS extremes = 1; -INSERT INTO test.test SELECT 1 AS x GROUP BY 1 WITH TOTALS; -INSERT INTO test.test SELECT 1 AS x GROUP BY 1 WITH TOTALS SETTINGS extremes = 1; +INSERT INTO test SELECT 1 AS x; +INSERT INTO test SELECT 1 AS x SETTINGS extremes = 1; +INSERT INTO test SELECT 1 AS x GROUP BY 1 WITH TOTALS; +INSERT INTO test SELECT 1 AS x GROUP BY 1 WITH TOTALS SETTINGS extremes = 1; -SELECT count(), min(x), max(x) FROM test.test; +SELECT count(), min(x), max(x) FROM test; -DROP TABLE test.test; +DROP TABLE test; diff --git a/dbms/tests/queries/0_stateless/00210_insert_select_extremes_http.sh b/dbms/tests/queries/0_stateless/00210_insert_select_extremes_http.sh index 766539e94db..d3b096dbbf6 100755 --- a/dbms/tests/queries/0_stateless/00210_insert_select_extremes_http.sh +++ b/dbms/tests/queries/0_stateless/00210_insert_select_extremes_http.sh @@ -3,7 +3,7 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -${CLICKHOUSE_CURL} -sS ${CLICKHOUSE_URL}?extremes=1 -d @- <<< "DROP TABLE IF EXISTS test.test" -${CLICKHOUSE_CURL} -sS ${CLICKHOUSE_URL}?extremes=1 -d @- <<< "CREATE TABLE test.test (x UInt8) ENGINE = Log" -${CLICKHOUSE_CURL} -sS ${CLICKHOUSE_URL}?extremes=1 -d @- <<< "INSERT INTO test.test SELECT 1 AS x" -${CLICKHOUSE_CURL} -sS ${CLICKHOUSE_URL}?extremes=1 -d @- <<< "DROP TABLE test.test" +${CLICKHOUSE_CURL} -sS ${CLICKHOUSE_URL}?extremes=1 -d @- <<< "DROP TABLE IF EXISTS test" +${CLICKHOUSE_CURL} -sS ${CLICKHOUSE_URL}?extremes=1 -d @- <<< "CREATE TABLE test (x UInt8) ENGINE = Log" +${CLICKHOUSE_CURL} -sS ${CLICKHOUSE_URL}?extremes=1 -d @- <<< "INSERT INTO test SELECT 1 AS x" +${CLICKHOUSE_CURL} -sS ${CLICKHOUSE_URL}?extremes=1 -d @- <<< "DROP TABLE test" diff --git a/dbms/tests/queries/0_stateless/00214_primary_key_order.sql b/dbms/tests/queries/0_stateless/00214_primary_key_order.sql index b2c00fb1f63..3c751e63e6d 100644 --- a/dbms/tests/queries/0_stateless/00214_primary_key_order.sql +++ b/dbms/tests/queries/0_stateless/00214_primary_key_order.sql @@ -1,13 +1,13 @@ -DROP TABLE IF EXISTS test.primary_key; -CREATE TABLE test.primary_key (d Date DEFAULT today(), x Int8) ENGINE = MergeTree(d, -x, 1); +DROP TABLE IF EXISTS primary_key; +CREATE TABLE primary_key (d Date DEFAULT today(), x Int8) ENGINE = MergeTree(d, -x, 1); -INSERT INTO test.primary_key (x) VALUES (1), (2), (3); +INSERT INTO primary_key (x) VALUES (1), (2), (3); -SELECT x FROM test.primary_key ORDER BY x; +SELECT x FROM primary_key ORDER BY x; -SELECT 'a', -x FROM test.primary_key WHERE -x < -3; -SELECT 'b', -x FROM test.primary_key WHERE -x < -2; -SELECT 'c', -x FROM test.primary_key WHERE -x < -1; -SELECT 'd', -x FROM test.primary_key WHERE -x < toInt8(0); +SELECT 'a', -x FROM primary_key WHERE -x < -3; +SELECT 'b', -x FROM primary_key WHERE -x < -2; +SELECT 'c', -x FROM primary_key WHERE -x < -1; +SELECT 'd', -x FROM primary_key WHERE -x < toInt8(0); -DROP TABLE test.primary_key; +DROP TABLE primary_key; diff --git a/dbms/tests/queries/0_stateless/00215_primary_key_order_zookeeper.sql b/dbms/tests/queries/0_stateless/00215_primary_key_order_zookeeper.sql index cd86bc7aa15..c6a0068f861 100644 --- a/dbms/tests/queries/0_stateless/00215_primary_key_order_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00215_primary_key_order_zookeeper.sql @@ -1,14 +1,14 @@ -DROP TABLE IF EXISTS test.primary_key; -CREATE TABLE test.primary_key (d Date DEFAULT today(), x Int8) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/primary_key', 'r1', d, -x, 1); +DROP TABLE IF EXISTS primary_key; +CREATE TABLE primary_key (d Date DEFAULT today(), x Int8) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/primary_key', 'r1', d, -x, 1); -INSERT INTO test.primary_key (x) VALUES (1), (2), (3); -INSERT INTO test.primary_key (x) VALUES (1), (3), (2); -INSERT INTO test.primary_key (x) VALUES (2), (1), (3); -INSERT INTO test.primary_key (x) VALUES (2), (3), (1); -INSERT INTO test.primary_key (x) VALUES (3), (1), (2); -INSERT INTO test.primary_key (x) VALUES (3), (2), (1); +INSERT INTO primary_key (x) VALUES (1), (2), (3); +INSERT INTO primary_key (x) VALUES (1), (3), (2); +INSERT INTO primary_key (x) VALUES (2), (1), (3); +INSERT INTO primary_key (x) VALUES (2), (3), (1); +INSERT INTO primary_key (x) VALUES (3), (1), (2); +INSERT INTO primary_key (x) VALUES (3), (2), (1); -SELECT x FROM test.primary_key ORDER BY x; -SELECT x FROM test.primary_key WHERE -x < -1 ORDER BY x; +SELECT x FROM primary_key ORDER BY x; +SELECT x FROM primary_key WHERE -x < -1 ORDER BY x; -DROP TABLE test.primary_key; +DROP TABLE primary_key; diff --git a/dbms/tests/queries/0_stateless/00226_zookeeper_deduplication_and_unexpected_parts.sql b/dbms/tests/queries/0_stateless/00226_zookeeper_deduplication_and_unexpected_parts.sql index 3f9c5b786fb..6b29d0a8cd3 100644 --- a/dbms/tests/queries/0_stateless/00226_zookeeper_deduplication_and_unexpected_parts.sql +++ b/dbms/tests/queries/0_stateless/00226_zookeeper_deduplication_and_unexpected_parts.sql @@ -1,28 +1,28 @@ -DROP TABLE IF EXISTS test.deduplication; -CREATE TABLE test.deduplication (d Date DEFAULT '2015-01-01', x Int8) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/deduplication', 'r1', d, x, 1); +DROP TABLE IF EXISTS deduplication; +CREATE TABLE deduplication (d Date DEFAULT '2015-01-01', x Int8) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/deduplication', 'r1', d, x, 1); -INSERT INTO test.deduplication (x) VALUES (1); -INSERT INTO test.deduplication (x) VALUES (1); -INSERT INTO test.deduplication (x) VALUES (1); -INSERT INTO test.deduplication (x) VALUES (1); -INSERT INTO test.deduplication (x) VALUES (1); -INSERT INTO test.deduplication (x) VALUES (1); -INSERT INTO test.deduplication (x) VALUES (1); -INSERT INTO test.deduplication (x) VALUES (1); -INSERT INTO test.deduplication (x) VALUES (1); -INSERT INTO test.deduplication (x) VALUES (1); -INSERT INTO test.deduplication (x) VALUES (1); -INSERT INTO test.deduplication (x) VALUES (1); -INSERT INTO test.deduplication (x) VALUES (1); -INSERT INTO test.deduplication (x) VALUES (1); -INSERT INTO test.deduplication (x) VALUES (1); -INSERT INTO test.deduplication (x) VALUES (1); +INSERT INTO deduplication (x) VALUES (1); +INSERT INTO deduplication (x) VALUES (1); +INSERT INTO deduplication (x) VALUES (1); +INSERT INTO deduplication (x) VALUES (1); +INSERT INTO deduplication (x) VALUES (1); +INSERT INTO deduplication (x) VALUES (1); +INSERT INTO deduplication (x) VALUES (1); +INSERT INTO deduplication (x) VALUES (1); +INSERT INTO deduplication (x) VALUES (1); +INSERT INTO deduplication (x) VALUES (1); +INSERT INTO deduplication (x) VALUES (1); +INSERT INTO deduplication (x) VALUES (1); +INSERT INTO deduplication (x) VALUES (1); +INSERT INTO deduplication (x) VALUES (1); +INSERT INTO deduplication (x) VALUES (1); +INSERT INTO deduplication (x) VALUES (1); -SELECT * FROM test.deduplication; +SELECT * FROM deduplication; -DETACH TABLE test.deduplication; -ATTACH TABLE test.deduplication (d Date DEFAULT '2015-01-01', x Int8) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/deduplication', 'r1', d, x, 1); +DETACH TABLE deduplication; +ATTACH TABLE deduplication (d Date DEFAULT '2015-01-01', x Int8) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/deduplication', 'r1', d, x, 1); -SELECT * FROM test.deduplication; +SELECT * FROM deduplication; -DROP TABLE test.deduplication; +DROP TABLE deduplication; diff --git a/dbms/tests/queries/0_stateless/00229_prewhere_column_missing.sql b/dbms/tests/queries/0_stateless/00229_prewhere_column_missing.sql index 80266cbaa87..da4cce9a992 100644 --- a/dbms/tests/queries/0_stateless/00229_prewhere_column_missing.sql +++ b/dbms/tests/queries/0_stateless/00229_prewhere_column_missing.sql @@ -1,29 +1,29 @@ -drop table if exists test.prewhere_column_missing; +drop table if exists prewhere_column_missing; -create table test.prewhere_column_missing (d Date default '2015-01-01', x UInt64) engine=MergeTree(d, x, 1); +create table prewhere_column_missing (d Date default '2015-01-01', x UInt64) engine=MergeTree(d, x, 1); -insert into test.prewhere_column_missing (x) values (0); -select * from test.prewhere_column_missing; +insert into prewhere_column_missing (x) values (0); +select * from prewhere_column_missing; -alter table test.prewhere_column_missing add column arr Array(UInt64); -select * from test.prewhere_column_missing; +alter table prewhere_column_missing add column arr Array(UInt64); +select * from prewhere_column_missing; -select *, arraySum(arr) as s from test.prewhere_column_missing; -select *, arraySum(arr) as s from test.prewhere_column_missing where s = 0; -select *, arraySum(arr) as s from test.prewhere_column_missing prewhere s = 0; +select *, arraySum(arr) as s from prewhere_column_missing; +select *, arraySum(arr) as s from prewhere_column_missing where s = 0; +select *, arraySum(arr) as s from prewhere_column_missing prewhere s = 0; -select *, length(arr) as l from test.prewhere_column_missing; -select *, length(arr) as l from test.prewhere_column_missing where l = 0; -select *, length(arr) as l from test.prewhere_column_missing prewhere l = 0; +select *, length(arr) as l from prewhere_column_missing; +select *, length(arr) as l from prewhere_column_missing where l = 0; +select *, length(arr) as l from prewhere_column_missing prewhere l = 0; -alter table test.prewhere_column_missing add column hash_x default intHash64(x); +alter table prewhere_column_missing add column hash_x default intHash64(x); -select * from test.prewhere_column_missing; -select * from test.prewhere_column_missing where hash_x = intHash64(x); -select * from test.prewhere_column_missing prewhere hash_x = intHash64(x); -select * from test.prewhere_column_missing where hash_x = intHash64(x) and length(arr) = 0; -select * from test.prewhere_column_missing prewhere hash_x = intHash64(x) and length(arr) = 0; -select * from test.prewhere_column_missing where hash_x = intHash64(x) and length(arr) = 0 and arraySum(arr) = 0; -select * from test.prewhere_column_missing prewhere hash_x = intHash64(x) and length(arr) = 0 and arraySum(arr) = 0; +select * from prewhere_column_missing; +select * from prewhere_column_missing where hash_x = intHash64(x); +select * from prewhere_column_missing prewhere hash_x = intHash64(x); +select * from prewhere_column_missing where hash_x = intHash64(x) and length(arr) = 0; +select * from prewhere_column_missing prewhere hash_x = intHash64(x) and length(arr) = 0; +select * from prewhere_column_missing where hash_x = intHash64(x) and length(arr) = 0 and arraySum(arr) = 0; +select * from prewhere_column_missing prewhere hash_x = intHash64(x) and length(arr) = 0 and arraySum(arr) = 0; -drop table test.prewhere_column_missing; +drop table prewhere_column_missing; diff --git a/dbms/tests/queries/0_stateless/00234_disjunctive_equality_chains_optimization.sql b/dbms/tests/queries/0_stateless/00234_disjunctive_equality_chains_optimization.sql index 10a25cfeea0..093afa14e3e 100644 --- a/dbms/tests/queries/0_stateless/00234_disjunctive_equality_chains_optimization.sql +++ b/dbms/tests/queries/0_stateless/00234_disjunctive_equality_chains_optimization.sql @@ -1,4 +1,4 @@ -CREATE TABLE IF NOT EXISTS test.foo(id UInt64) Engine=Memory; -INSERT INTO test.foo(id) VALUES (0),(4),(1),(1),(3),(1),(1),(2),(2),(2),(1),(2),(3),(2),(1),(1),(2),(1),(1),(1),(3),(1),(2),(2),(1),(1),(3),(1),(2),(1),(1),(3),(2),(1),(1),(4),(0); -SELECT sum(id = 3 OR id = 1 OR id = 2) AS x, sum(id = 3 OR id = 1 OR id = 2) AS x FROM test.foo; -DROP TABLE test.foo; +CREATE TABLE IF NOT EXISTS foo(id UInt64) Engine=Memory; +INSERT INTO foo(id) VALUES (0),(4),(1),(1),(3),(1),(1),(2),(2),(2),(1),(2),(3),(2),(1),(1),(2),(1),(1),(1),(3),(1),(2),(2),(1),(1),(3),(1),(2),(1),(1),(3),(2),(1),(1),(4),(0); +SELECT sum(id = 3 OR id = 1 OR id = 2) AS x, sum(id = 3 OR id = 1 OR id = 2) AS x FROM foo; +DROP TABLE foo; diff --git a/dbms/tests/queries/0_stateless/00236_replicated_drop_on_non_leader_zookeeper.sql b/dbms/tests/queries/0_stateless/00236_replicated_drop_on_non_leader_zookeeper.sql index e64ca7746ba..745d805d6ea 100644 --- a/dbms/tests/queries/0_stateless/00236_replicated_drop_on_non_leader_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00236_replicated_drop_on_non_leader_zookeeper.sql @@ -1,18 +1,18 @@ SET replication_alter_partitions_sync = 2; -DROP TABLE IF EXISTS test.attach_r1; -DROP TABLE IF EXISTS test.attach_r2; +DROP TABLE IF EXISTS attach_r1; +DROP TABLE IF EXISTS attach_r2; -CREATE TABLE test.attach_r1 (d Date) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/01/attach', 'r1', d, d, 8192); -CREATE TABLE test.attach_r2 (d Date) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/01/attach', 'r2', d, d, 8192); +CREATE TABLE attach_r1 (d Date) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/01/attach', 'r1', d, d, 8192); +CREATE TABLE attach_r2 (d Date) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/01/attach', 'r2', d, d, 8192); -INSERT INTO test.attach_r1 VALUES ('2014-01-01'), ('2014-02-01'), ('2014-03-01'); +INSERT INTO attach_r1 VALUES ('2014-01-01'), ('2014-02-01'), ('2014-03-01'); -SELECT d FROM test.attach_r1 ORDER BY d; +SELECT d FROM attach_r1 ORDER BY d; -ALTER TABLE test.attach_r2 DROP PARTITION 201402; +ALTER TABLE attach_r2 DROP PARTITION 201402; -SELECT d FROM test.attach_r1 ORDER BY d; +SELECT d FROM attach_r1 ORDER BY d; -DROP TABLE test.attach_r1; -DROP TABLE test.attach_r2; +DROP TABLE attach_r1; +DROP TABLE attach_r2; diff --git a/dbms/tests/queries/0_stateless/00253_insert_recursive_defaults.sql b/dbms/tests/queries/0_stateless/00253_insert_recursive_defaults.sql index 355408d2899..37bfe0aa188 100644 --- a/dbms/tests/queries/0_stateless/00253_insert_recursive_defaults.sql +++ b/dbms/tests/queries/0_stateless/00253_insert_recursive_defaults.sql @@ -1,11 +1,11 @@ -DROP TABLE IF EXISTS test.defaults; -CREATE TABLE test.defaults (a UInt8, b DEFAULT 0, c DEFAULT identity(b)) ENGINE = Memory; -INSERT INTO test.defaults (a) VALUES (1); -SELECT * FROM test.defaults; -DROP TABLE test.defaults; +DROP TABLE IF EXISTS defaults; +CREATE TABLE defaults (a UInt8, b DEFAULT 0, c DEFAULT identity(b)) ENGINE = Memory; +INSERT INTO defaults (a) VALUES (1); +SELECT * FROM defaults; +DROP TABLE defaults; -DROP TABLE IF EXISTS test.elog_cut; -CREATE TABLE test.elog_cut +DROP TABLE IF EXISTS elog_cut; +CREATE TABLE elog_cut ( date Date DEFAULT toDate(uts), uts DateTime, @@ -18,6 +18,6 @@ CREATE TABLE test.elog_cut sample_key UInt64 ALIAS page_session ) ENGINE = MergeTree(date, cityHash64(adf_uid, ya_uid, pr), (owner_id, date, cityHash64(adf_uid, ya_uid, pr)), 8192); -INSERT INTO test.elog_cut (uts, pr, ya_uid, adf_uid, owner_id) VALUES ('2015-01-01 01:02:03', 111, 123, 456, 789); -SELECT date, uts, pr, ya_uid, adf_uid, owner_id, eff_uid, page_session, sample_key FROM test.elog_cut; -DROP TABLE test.elog_cut; +INSERT INTO elog_cut (uts, pr, ya_uid, adf_uid, owner_id) VALUES ('2015-01-01 01:02:03', 111, 123, 456, 789); +SELECT date, uts, pr, ya_uid, adf_uid, owner_id, eff_uid, page_session, sample_key FROM elog_cut; +DROP TABLE elog_cut; diff --git a/dbms/tests/queries/0_stateless/00261_storage_aliases_and_array_join.sql b/dbms/tests/queries/0_stateless/00261_storage_aliases_and_array_join.sql index 9f09b584a20..71562ffd6fa 100644 --- a/dbms/tests/queries/0_stateless/00261_storage_aliases_and_array_join.sql +++ b/dbms/tests/queries/0_stateless/00261_storage_aliases_and_array_join.sql @@ -1,6 +1,6 @@ -drop table if exists test.aliases_test; +drop table if exists aliases_test; -create table test.aliases_test ( +create table aliases_test ( date Date, id UInt64, array default ['zero','one','two'], d1 default array, @@ -11,104 +11,104 @@ a4 alias arrayMap(x -> toString(x), range(3)), a5 alias a4, a6 alias a5, `struct.a4` alias arrayMap(x -> toString(x), range(3)), `struct.a5` alias struct.a4, `struct.a6` alias struct.a5 ) engine=MergeTree(date, id, 1); -insert into test.aliases_test (id) values (0); +insert into aliases_test (id) values (0); select '-- Ensure ALIAS columns are not selected by asterisk'; -select * from test.aliases_test; +select * from aliases_test; select '-- select DEFAULT and ALIAS arrays'; -select d1, a1, a2, a3, a4, a5, a6 from test.aliases_test; +select d1, a1, a2, a3, a4, a5, a6 from aliases_test; select '-- select DEFAULT and ALIAS nested columns'; -select struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test; +select struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test; -select d1, a1 from test.aliases_test array join d1, a1; -select d1, a1 from test.aliases_test array join d1, a1 as a2; -select d1, a1 from test.aliases_test array join d1 as d2, a1; +select d1, a1 from aliases_test array join d1, a1; +select d1, a1 from aliases_test array join d1, a1 as a2; +select d1, a1 from aliases_test array join d1 as d2, a1; select '-- array join, but request the original columns'; -select d1, a1 from test.aliases_test array join d1 as d2, a1 as a2; +select d1, a1 from aliases_test array join d1 as d2, a1 as a2; select '-- array join, do not use the result'; -select array from test.aliases_test array join d1, a1; -select array from test.aliases_test array join d1 as d2, a1 as a1; +select array from aliases_test array join d1, a1; +select array from aliases_test array join d1 as d2, a1 as a1; select '-- select DEFAULT and ALIAS arrays, array joining one at a time'; -select array, d1, a1, a2, a3, a4, a5, a6 from test.aliases_test array join d1; -select array, d1, a1, a2, a3, a4, a5, a6 from test.aliases_test array join a1; -select array, d1, a1, a2, a3, a4, a5, a6 from test.aliases_test array join a2; -select array, d1, a1, a2, a3, a4, a5, a6 from test.aliases_test array join a3; -select array, d1, a1, a2, a3, a4, a5, a6 from test.aliases_test array join a4; -select array, d1, a1, a2, a3, a4, a5, a6 from test.aliases_test array join a5; -select array, d1, a1, a2, a3, a4, a5, a6 from test.aliases_test array join a6; +select array, d1, a1, a2, a3, a4, a5, a6 from aliases_test array join d1; +select array, d1, a1, a2, a3, a4, a5, a6 from aliases_test array join a1; +select array, d1, a1, a2, a3, a4, a5, a6 from aliases_test array join a2; +select array, d1, a1, a2, a3, a4, a5, a6 from aliases_test array join a3; +select array, d1, a1, a2, a3, a4, a5, a6 from aliases_test array join a4; +select array, d1, a1, a2, a3, a4, a5, a6 from aliases_test array join a5; +select array, d1, a1, a2, a3, a4, a5, a6 from aliases_test array join a6; select '-- select DEFAULT and ALIAS arrays, array joining one at a time and aliasing result with original name'; -select array, d1, a1, a2, a3, a4, a5, a6 from test.aliases_test array join d1 as d1; -select array, d1, a1, a2, a3, a4, a5, a6 from test.aliases_test array join a1 as a1; -select array, d1, a1, a2, a3, a4, a5, a6 from test.aliases_test array join a2 as a2; -select array, d1, a1, a2, a3, a4, a5, a6 from test.aliases_test array join a3 as a3; -select array, d1, a1, a2, a3, a4, a5, a6 from test.aliases_test array join a4 as a4; -select array, d1, a1, a2, a3, a4, a5, a6 from test.aliases_test array join a5 as a5; -select array, d1, a1, a2, a3, a4, a5, a6 from test.aliases_test array join a6 as a6; +select array, d1, a1, a2, a3, a4, a5, a6 from aliases_test array join d1 as d1; +select array, d1, a1, a2, a3, a4, a5, a6 from aliases_test array join a1 as a1; +select array, d1, a1, a2, a3, a4, a5, a6 from aliases_test array join a2 as a2; +select array, d1, a1, a2, a3, a4, a5, a6 from aliases_test array join a3 as a3; +select array, d1, a1, a2, a3, a4, a5, a6 from aliases_test array join a4 as a4; +select array, d1, a1, a2, a3, a4, a5, a6 from aliases_test array join a5 as a5; +select array, d1, a1, a2, a3, a4, a5, a6 from aliases_test array join a6 as a6; select '-- select DEFAULT and ALIAS arrays and array join result, aliased as `joined`'; -select array, d1, a1, a2, a3, a4, a5, a6, joined from test.aliases_test array join d1 as joined; -select array, d1, a1, a2, a3, a4, a5, a6, joined from test.aliases_test array join a1 as joined; -select array, d1, a1, a2, a3, a4, a5, a6, joined from test.aliases_test array join a2 as joined; -select array, d1, a1, a2, a3, a4, a5, a6, joined from test.aliases_test array join a3 as joined; -select array, d1, a1, a2, a3, a4, a5, a6, joined from test.aliases_test array join a4 as joined; -select array, d1, a1, a2, a3, a4, a5, a6, joined from test.aliases_test array join a5 as joined; -select array, d1, a1, a2, a3, a4, a5, a6, joined from test.aliases_test array join a6 as joined; +select array, d1, a1, a2, a3, a4, a5, a6, joined from aliases_test array join d1 as joined; +select array, d1, a1, a2, a3, a4, a5, a6, joined from aliases_test array join a1 as joined; +select array, d1, a1, a2, a3, a4, a5, a6, joined from aliases_test array join a2 as joined; +select array, d1, a1, a2, a3, a4, a5, a6, joined from aliases_test array join a3 as joined; +select array, d1, a1, a2, a3, a4, a5, a6, joined from aliases_test array join a4 as joined; +select array, d1, a1, a2, a3, a4, a5, a6, joined from aliases_test array join a5 as joined; +select array, d1, a1, a2, a3, a4, a5, a6, joined from aliases_test array join a6 as joined; select '-- select DEFAULT and ALIAS nested columns, array joining one at a time'; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct.d1; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct.a1; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct.a2; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct.a3; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct.a4; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct.a5; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct.a6; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct.d1; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct.a1; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct.a2; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct.a3; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct.a4; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct.a5; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct.a6; select '-- select DEFAULT and ALIAS nested columns, array joining one at a time and aliasing result with original name'; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct.d1 as `struct.d1`; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct.a1 as `struct.a1`; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct.a2 as `struct.a2`; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct.a3 as `struct.a3`; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct.a4 as `struct.a4`; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct.a5 as `struct.a5`; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct.a6 as `struct.a6`; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct.d1 as `struct.d1`; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct.a1 as `struct.a1`; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct.a2 as `struct.a2`; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct.a3 as `struct.a3`; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct.a4 as `struct.a4`; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct.a5 as `struct.a5`; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct.a6 as `struct.a6`; select '-- select DEFAULT and ALIAS nested columns and array join result, aliased as `joined`'; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6, joined from test.aliases_test array join struct.d1 as joined; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6, joined from test.aliases_test array join struct.a1 as joined; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6, joined from test.aliases_test array join struct.a2 as joined; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6, joined from test.aliases_test array join struct.a3 as joined; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6, joined from test.aliases_test array join struct.a4 as joined; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6, joined from test.aliases_test array join struct.a5 as joined; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6, joined from test.aliases_test array join struct.a6 as joined; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6, joined from aliases_test array join struct.d1 as joined; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6, joined from aliases_test array join struct.a1 as joined; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6, joined from aliases_test array join struct.a2 as joined; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6, joined from aliases_test array join struct.a3 as joined; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6, joined from aliases_test array join struct.a4 as joined; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6, joined from aliases_test array join struct.a5 as joined; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6, joined from aliases_test array join struct.a6 as joined; select '-- array join whole nested table'; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct; select '-- array join whole nested table not using the result'; -select array from test.aliases_test array join struct; +select array from aliases_test array join struct; select '-- array join whole nested table, aliasing with original name'; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct as struct; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct as struct; select '-- array join whole nested table, aliasing with original name not using the result'; -select array from test.aliases_test array join struct as struct; +select array from aliases_test array join struct as struct; select '-- array join whole nested table, aliasing as `class`'; -select array, class.d1, class.a1, class.a2, class.a3, class.a4, class.a5, class.a6 from test.aliases_test array join struct as class; +select array, class.d1, class.a1, class.a2, class.a3, class.a4, class.a5, class.a6 from aliases_test array join struct as class; select '-- array join whole nested table, aliasing as `class` and not using the result'; -select array from test.aliases_test array join struct as class; +select array from aliases_test array join struct as class; select '-- array join whole nested table, aliasing as `class` but requesting the original columns'; -select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from test.aliases_test array join struct as class; +select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6 from aliases_test array join struct as class; select array, struct.d1, struct.a1, struct.a2, struct.a3, struct.a4, struct.a5, struct.a6, class.d1, class.a1, class.a2, class.a3, class.a4, class.a5, class.a6 -from test.aliases_test array join struct as class; +from aliases_test array join struct as class; -drop table test.aliases_test; +drop table aliases_test; diff --git a/dbms/tests/queries/0_stateless/00262_alter_alias.sql b/dbms/tests/queries/0_stateless/00262_alter_alias.sql index d0d5b03d62e..5a7007a6e0c 100644 --- a/dbms/tests/queries/0_stateless/00262_alter_alias.sql +++ b/dbms/tests/queries/0_stateless/00262_alter_alias.sql @@ -1,24 +1,24 @@ -drop table if exists test.aliases_test; +drop table if exists aliases_test; -create table test.aliases_test (date default today(), id default rand(), array default [0, 1, 2]) engine=MergeTree(date, id, 1); +create table aliases_test (date default today(), id default rand(), array default [0, 1, 2]) engine=MergeTree(date, id, 1); -insert into test.aliases_test (id) values (0); -select array from test.aliases_test; +insert into aliases_test (id) values (0); +select array from aliases_test; -alter table test.aliases_test modify column array alias [0, 1, 2]; -select array from test.aliases_test; +alter table aliases_test modify column array alias [0, 1, 2]; +select array from aliases_test; -alter table test.aliases_test modify column array default [0, 1, 2]; -select array from test.aliases_test; +alter table aliases_test modify column array default [0, 1, 2]; +select array from aliases_test; -alter table test.aliases_test add column struct.key default [0, 1, 2], add column struct.value default array; -select struct.key, struct.value from test.aliases_test; +alter table aliases_test add column struct.key default [0, 1, 2], add column struct.value default array; +select struct.key, struct.value from aliases_test; -alter table test.aliases_test modify column struct.value alias array; -select struct.key, struct.value from test.aliases_test; +alter table aliases_test modify column struct.value alias array; +select struct.key, struct.value from aliases_test; -select struct.key, struct.value from test.aliases_test array join struct; -select struct.key, struct.value from test.aliases_test array join struct as struct; -select class.key, class.value from test.aliases_test array join struct as class; +select struct.key, struct.value from aliases_test array join struct; +select struct.key, struct.value from aliases_test array join struct as struct; +select class.key, class.value from aliases_test array join struct as class; -drop table test.aliases_test; +drop table aliases_test; diff --git a/dbms/tests/queries/0_stateless/00263_merge_aggregates_and_overflow.sql b/dbms/tests/queries/0_stateless/00263_merge_aggregates_and_overflow.sql index 604d89cca1d..891ec93761c 100644 --- a/dbms/tests/queries/0_stateless/00263_merge_aggregates_and_overflow.sql +++ b/dbms/tests/queries/0_stateless/00263_merge_aggregates_and_overflow.sql @@ -1,12 +1,12 @@ -DROP TABLE IF EXISTS test.numbers_10k_log; +DROP TABLE IF EXISTS numbers_10k_log; SET max_block_size = 1000; -CREATE TABLE test.numbers_10k_log ENGINE = Log AS SELECT number FROM system.numbers LIMIT 10000; +CREATE TABLE numbers_10k_log ENGINE = Log AS SELECT number FROM system.numbers LIMIT 10000; SET max_threads = 4; SET max_rows_to_group_by = 3000, group_by_overflow_mode = 'any'; -SELECT ignore(rand() AS k), ignore(max(toString(number))) FROM test.numbers_10k_log GROUP BY k LIMIT 1; +SELECT ignore(rand() AS k), ignore(max(toString(number))) FROM numbers_10k_log GROUP BY k LIMIT 1; -DROP TABLE test.numbers_10k_log; +DROP TABLE numbers_10k_log; diff --git a/dbms/tests/queries/0_stateless/00270_views_query_processing_stage.sql b/dbms/tests/queries/0_stateless/00270_views_query_processing_stage.sql index 65a5235adad..e049c1153b5 100644 --- a/dbms/tests/queries/0_stateless/00270_views_query_processing_stage.sql +++ b/dbms/tests/queries/0_stateless/00270_views_query_processing_stage.sql @@ -1,13 +1,13 @@ -DROP TABLE IF EXISTS test.view1; -DROP TABLE IF EXISTS test.view2; -DROP TABLE IF EXISTS test.merge_view; +DROP TABLE IF EXISTS view1; +DROP TABLE IF EXISTS view2; +DROP TABLE IF EXISTS merge_view; -CREATE VIEW test.view1 AS SELECT number FROM system.numbers LIMIT 10; -CREATE VIEW test.view2 AS SELECT number FROM system.numbers LIMIT 10; -CREATE TABLE test.merge_view (number UInt64) ENGINE = Merge(test, '^view'); +CREATE VIEW view1 AS SELECT number FROM system.numbers LIMIT 10; +CREATE VIEW view2 AS SELECT number FROM system.numbers LIMIT 10; +CREATE TABLE merge_view (number UInt64) ENGINE = Merge(test, '^view'); -SELECT 'Hello, world!' FROM test.merge_view LIMIT 5; +SELECT 'Hello, world!' FROM merge_view LIMIT 5; -DROP TABLE test.view1; -DROP TABLE test.view2; -DROP TABLE test.merge_view; +DROP TABLE view1; +DROP TABLE view2; +DROP TABLE merge_view; diff --git a/dbms/tests/queries/0_stateless/00276_sample.sql b/dbms/tests/queries/0_stateless/00276_sample.sql index d2bc2fc18b5..4ba7fd498f3 100644 --- a/dbms/tests/queries/0_stateless/00276_sample.sql +++ b/dbms/tests/queries/0_stateless/00276_sample.sql @@ -1,55 +1,55 @@ -DROP TABLE IF EXISTS test.sample; +DROP TABLE IF EXISTS sample; SET min_insert_block_size_rows = 0, min_insert_block_size_bytes = 0; SET max_block_size = 10; -CREATE TABLE test.sample (d Date DEFAULT '2000-01-01', x UInt8) ENGINE = MergeTree(d, x, x, 10); -INSERT INTO test.sample (x) SELECT toUInt8(number) AS x FROM system.numbers LIMIT 256; +CREATE TABLE sample (d Date DEFAULT '2000-01-01', x UInt8) ENGINE = MergeTree(d, x, x, 10); +INSERT INTO sample (x) SELECT toUInt8(number) AS x FROM system.numbers LIMIT 256; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 0.1; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1/10; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1/1e1; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1e1/1e2; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1e-1; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 2e-2; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1/10 OFFSET 1/10; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1/10 OFFSET 9/10; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1/10 OFFSET 10/10; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1/10 OFFSET 19/20; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 0.1; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1/10; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1/1e1; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1e1/1e2; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1e-1; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 2e-2; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1/10 OFFSET 1/10; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1/10 OFFSET 9/10; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1/10 OFFSET 10/10; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1/10 OFFSET 19/20; -SELECT count() >= 100 FROM test.sample SAMPLE 100; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1000; +SELECT count() >= 100 FROM sample SAMPLE 100; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1000; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1/2; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1/2 OFFSET 1/2; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1/2 SETTINGS parallel_replicas_count = 3; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1/2 SETTINGS parallel_replicas_count = 3, parallel_replica_offset = 0; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1/2 SETTINGS parallel_replicas_count = 3, parallel_replica_offset = 1; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1/2 SETTINGS parallel_replicas_count = 3, parallel_replica_offset = 2; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1/2 OFFSET 1/2 SETTINGS parallel_replicas_count = 3; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1/2 OFFSET 1/2 SETTINGS parallel_replicas_count = 3, parallel_replica_offset = 0; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1/2 OFFSET 1/2 SETTINGS parallel_replicas_count = 3, parallel_replica_offset = 1; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 1/2 OFFSET 1/2 SETTINGS parallel_replicas_count = 3, parallel_replica_offset = 2; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1/2; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1/2 OFFSET 1/2; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1/2 SETTINGS parallel_replicas_count = 3; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1/2 SETTINGS parallel_replicas_count = 3, parallel_replica_offset = 0; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1/2 SETTINGS parallel_replicas_count = 3, parallel_replica_offset = 1; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1/2 SETTINGS parallel_replicas_count = 3, parallel_replica_offset = 2; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1/2 OFFSET 1/2 SETTINGS parallel_replicas_count = 3; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1/2 OFFSET 1/2 SETTINGS parallel_replicas_count = 3, parallel_replica_offset = 0; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1/2 OFFSET 1/2 SETTINGS parallel_replicas_count = 3, parallel_replica_offset = 1; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 1/2 OFFSET 1/2 SETTINGS parallel_replicas_count = 3, parallel_replica_offset = 2; SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM ( - SELECT x FROM test.sample SAMPLE 0.1 OFFSET 0.0 -UNION ALL SELECT x FROM test.sample SAMPLE 0.1 OFFSET 0.1 -UNION ALL SELECT x FROM test.sample SAMPLE 0.1 OFFSET 0.2 -UNION ALL SELECT x FROM test.sample SAMPLE 0.1 OFFSET 0.3 -UNION ALL SELECT x FROM test.sample SAMPLE 0.1 OFFSET 0.4 -UNION ALL SELECT x FROM test.sample SAMPLE 0.1 OFFSET 0.5 -UNION ALL SELECT x FROM test.sample SAMPLE 0.1 OFFSET 0.6 -UNION ALL SELECT x FROM test.sample SAMPLE 0.1 OFFSET 0.7 -UNION ALL SELECT x FROM test.sample SAMPLE 0.1 OFFSET 0.8 -UNION ALL SELECT x FROM test.sample SAMPLE 0.1 OFFSET 0.9 + SELECT x FROM sample SAMPLE 0.1 OFFSET 0.0 +UNION ALL SELECT x FROM sample SAMPLE 0.1 OFFSET 0.1 +UNION ALL SELECT x FROM sample SAMPLE 0.1 OFFSET 0.2 +UNION ALL SELECT x FROM sample SAMPLE 0.1 OFFSET 0.3 +UNION ALL SELECT x FROM sample SAMPLE 0.1 OFFSET 0.4 +UNION ALL SELECT x FROM sample SAMPLE 0.1 OFFSET 0.5 +UNION ALL SELECT x FROM sample SAMPLE 0.1 OFFSET 0.6 +UNION ALL SELECT x FROM sample SAMPLE 0.1 OFFSET 0.7 +UNION ALL SELECT x FROM sample SAMPLE 0.1 OFFSET 0.8 +UNION ALL SELECT x FROM sample SAMPLE 0.1 OFFSET 0.9 ); -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 0.05 OFFSET 0.35; -SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM test.sample SAMPLE 0.05 OFFSET 0.4; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 0.05 OFFSET 0.35; +SELECT count(), min(x), max(x), sum(x), uniqExact(x) FROM sample SAMPLE 0.05 OFFSET 0.4; SELECT count() FROM @@ -59,118 +59,118 @@ FROM count() AS c FROM ( - SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.00 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.01 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.02 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.03 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.04 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.05 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.06 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.07 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.08 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.09 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.10 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.11 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.12 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.13 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.14 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.15 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.16 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.17 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.18 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.19 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.20 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.21 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.22 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.23 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.24 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.25 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.26 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.27 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.28 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.29 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.30 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.31 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.32 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.33 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.34 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.35 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.36 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.37 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.38 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.39 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.40 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.41 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.42 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.43 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.44 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.45 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.46 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.47 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.48 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.49 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.50 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.51 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.52 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.53 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.54 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.55 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.56 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.57 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.58 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.59 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.60 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.61 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.62 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.63 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.64 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.65 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.66 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.67 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.68 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.69 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.70 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.71 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.72 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.73 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.74 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.75 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.76 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.77 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.78 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.79 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.80 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.81 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.82 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.83 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.84 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.85 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.86 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.87 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.88 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.89 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.90 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.91 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.92 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.93 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.94 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.95 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.96 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.97 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.98 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.99 + SELECT * FROM sample SAMPLE 0.01 OFFSET 0.00 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.01 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.02 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.03 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.04 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.05 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.06 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.07 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.08 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.09 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.10 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.11 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.12 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.13 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.14 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.15 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.16 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.17 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.18 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.19 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.20 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.21 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.22 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.23 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.24 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.25 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.26 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.27 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.28 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.29 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.30 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.31 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.32 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.33 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.34 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.35 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.36 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.37 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.38 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.39 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.40 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.41 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.42 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.43 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.44 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.45 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.46 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.47 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.48 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.49 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.50 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.51 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.52 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.53 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.54 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.55 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.56 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.57 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.58 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.59 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.60 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.61 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.62 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.63 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.64 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.65 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.66 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.67 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.68 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.69 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.70 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.71 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.72 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.73 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.74 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.75 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.76 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.77 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.78 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.79 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.80 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.81 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.82 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.83 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.84 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.85 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.86 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.87 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.88 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.89 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.90 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.91 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.92 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.93 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.94 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.95 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.96 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.97 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.98 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.99 ) GROUP BY x HAVING c = 1 ORDER BY x ASC ); -DROP TABLE test.sample; +DROP TABLE sample; SET max_block_size = 8192; -CREATE TABLE test.sample (d Date DEFAULT '2000-01-01', x UInt16) ENGINE = MergeTree(d, x, x, 10); -INSERT INTO test.sample (x) SELECT toUInt16(number) AS x FROM system.numbers LIMIT 65536; +CREATE TABLE sample (d Date DEFAULT '2000-01-01', x UInt16) ENGINE = MergeTree(d, x, x, 10); +INSERT INTO sample (x) SELECT toUInt16(number) AS x FROM system.numbers LIMIT 65536; SELECT count() FROM @@ -180,110 +180,110 @@ FROM count() AS c FROM ( - SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.00 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.01 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.02 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.03 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.04 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.05 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.06 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.07 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.08 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.09 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.10 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.11 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.12 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.13 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.14 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.15 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.16 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.17 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.18 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.19 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.20 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.21 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.22 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.23 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.24 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.25 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.26 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.27 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.28 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.29 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.30 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.31 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.32 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.33 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.34 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.35 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.36 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.37 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.38 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.39 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.40 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.41 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.42 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.43 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.44 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.45 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.46 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.47 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.48 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.49 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.50 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.51 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.52 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.53 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.54 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.55 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.56 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.57 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.58 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.59 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.60 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.61 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.62 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.63 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.64 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.65 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.66 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.67 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.68 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.69 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.70 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.71 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.72 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.73 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.74 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.75 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.76 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.77 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.78 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.79 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.80 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.81 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.82 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.83 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.84 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.85 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.86 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.87 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.88 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.89 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.90 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.91 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.92 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.93 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.94 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.95 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.96 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.97 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.98 - UNION ALL SELECT * FROM test.sample SAMPLE 0.01 OFFSET 0.99 + SELECT * FROM sample SAMPLE 0.01 OFFSET 0.00 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.01 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.02 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.03 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.04 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.05 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.06 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.07 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.08 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.09 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.10 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.11 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.12 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.13 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.14 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.15 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.16 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.17 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.18 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.19 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.20 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.21 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.22 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.23 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.24 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.25 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.26 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.27 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.28 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.29 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.30 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.31 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.32 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.33 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.34 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.35 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.36 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.37 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.38 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.39 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.40 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.41 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.42 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.43 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.44 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.45 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.46 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.47 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.48 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.49 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.50 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.51 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.52 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.53 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.54 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.55 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.56 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.57 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.58 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.59 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.60 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.61 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.62 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.63 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.64 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.65 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.66 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.67 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.68 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.69 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.70 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.71 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.72 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.73 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.74 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.75 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.76 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.77 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.78 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.79 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.80 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.81 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.82 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.83 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.84 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.85 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.86 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.87 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.88 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.89 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.90 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.91 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.92 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.93 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.94 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.95 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.96 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.97 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.98 + UNION ALL SELECT * FROM sample SAMPLE 0.01 OFFSET 0.99 ) GROUP BY x HAVING c = 1 ORDER BY x ASC ); -DROP TABLE test.sample; +DROP TABLE sample; diff --git a/dbms/tests/queries/0_stateless/00278_insert_already_sorted.sql b/dbms/tests/queries/0_stateless/00278_insert_already_sorted.sql index 05fee0fe7ab..735b46d22dd 100644 --- a/dbms/tests/queries/0_stateless/00278_insert_already_sorted.sql +++ b/dbms/tests/queries/0_stateless/00278_insert_already_sorted.sql @@ -1,16 +1,16 @@ -DROP TABLE IF EXISTS test.sorted; -CREATE TABLE test.sorted (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 8192); +DROP TABLE IF EXISTS sorted; +CREATE TABLE sorted (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 8192); -INSERT INTO test.sorted (x) SELECT intDiv(number, 100000) AS x FROM system.numbers LIMIT 1000000; +INSERT INTO sorted (x) SELECT intDiv(number, 100000) AS x FROM system.numbers LIMIT 1000000; SET max_threads = 1; -SELECT count() FROM test.sorted; -SELECT DISTINCT x FROM test.sorted; +SELECT count() FROM sorted; +SELECT DISTINCT x FROM sorted; -INSERT INTO test.sorted (x) SELECT (intHash64(number) % 1000 = 0 ? 999 : intDiv(number, 100000)) AS x FROM system.numbers LIMIT 1000000; +INSERT INTO sorted (x) SELECT (intHash64(number) % 1000 = 0 ? 999 : intDiv(number, 100000)) AS x FROM system.numbers LIMIT 1000000; -SELECT count() FROM test.sorted; -SELECT DISTINCT x FROM test.sorted; +SELECT count() FROM sorted; +SELECT DISTINCT x FROM sorted; -DROP TABLE test.sorted; +DROP TABLE sorted; diff --git a/dbms/tests/queries/0_stateless/00282_merging.sql b/dbms/tests/queries/0_stateless/00282_merging.sql index ef8fe656736..30aec1bc439 100644 --- a/dbms/tests/queries/0_stateless/00282_merging.sql +++ b/dbms/tests/queries/0_stateless/00282_merging.sql @@ -1,100 +1,100 @@ -DROP TABLE IF EXISTS test.merge; -CREATE TABLE IF NOT EXISTS test.merge (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 5); +DROP TABLE IF EXISTS merge; +CREATE TABLE IF NOT EXISTS merge (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 5); -INSERT INTO test.merge (x) VALUES (1), (2), (3); -INSERT INTO test.merge (x) VALUES (4), (5), (6); +INSERT INTO merge (x) VALUES (1), (2), (3); +INSERT INTO merge (x) VALUES (4), (5), (6); -SELECT * FROM test.merge ORDER BY _part_index, x; -OPTIMIZE TABLE test.merge; -SELECT * FROM test.merge ORDER BY _part_index, x; +SELECT * FROM merge ORDER BY _part_index, x; +OPTIMIZE TABLE merge; +SELECT * FROM merge ORDER BY _part_index, x; -DROP TABLE test.merge; +DROP TABLE merge; -CREATE TABLE IF NOT EXISTS test.merge (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 5); +CREATE TABLE IF NOT EXISTS merge (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 5); -INSERT INTO test.merge (x) SELECT number AS x FROM system.numbers LIMIT 10; -INSERT INTO test.merge (x) SELECT number + 10 AS x FROM system.numbers LIMIT 10; +INSERT INTO merge (x) SELECT number AS x FROM system.numbers LIMIT 10; +INSERT INTO merge (x) SELECT number + 10 AS x FROM system.numbers LIMIT 10; -SELECT * FROM test.merge ORDER BY _part_index, x; -OPTIMIZE TABLE test.merge; -SELECT * FROM test.merge ORDER BY _part_index, x; +SELECT * FROM merge ORDER BY _part_index, x; +OPTIMIZE TABLE merge; +SELECT * FROM merge ORDER BY _part_index, x; -DROP TABLE test.merge; +DROP TABLE merge; -CREATE TABLE IF NOT EXISTS test.merge (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 5); +CREATE TABLE IF NOT EXISTS merge (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 5); -INSERT INTO test.merge (x) SELECT number + 5 AS x FROM system.numbers LIMIT 10; -INSERT INTO test.merge (x) SELECT number AS x FROM system.numbers LIMIT 10; +INSERT INTO merge (x) SELECT number + 5 AS x FROM system.numbers LIMIT 10; +INSERT INTO merge (x) SELECT number AS x FROM system.numbers LIMIT 10; -SELECT * FROM test.merge ORDER BY _part_index, x; -OPTIMIZE TABLE test.merge; -SELECT * FROM test.merge ORDER BY _part_index, x; +SELECT * FROM merge ORDER BY _part_index, x; +OPTIMIZE TABLE merge; +SELECT * FROM merge ORDER BY _part_index, x; -DROP TABLE test.merge; +DROP TABLE merge; -CREATE TABLE IF NOT EXISTS test.merge (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 5); +CREATE TABLE IF NOT EXISTS merge (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 5); -INSERT INTO test.merge (x) SELECT number + 5 AS x FROM system.numbers LIMIT 10; -INSERT INTO test.merge (x) SELECT number AS x FROM system.numbers LIMIT 10; -INSERT INTO test.merge (x) SELECT number + 9 AS x FROM system.numbers LIMIT 10; +INSERT INTO merge (x) SELECT number + 5 AS x FROM system.numbers LIMIT 10; +INSERT INTO merge (x) SELECT number AS x FROM system.numbers LIMIT 10; +INSERT INTO merge (x) SELECT number + 9 AS x FROM system.numbers LIMIT 10; -SELECT * FROM test.merge ORDER BY _part_index, x; -OPTIMIZE TABLE test.merge; -SELECT * FROM test.merge ORDER BY _part_index, x; +SELECT * FROM merge ORDER BY _part_index, x; +OPTIMIZE TABLE merge; +SELECT * FROM merge ORDER BY _part_index, x; -DROP TABLE test.merge; +DROP TABLE merge; -CREATE TABLE IF NOT EXISTS test.merge (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 5); +CREATE TABLE IF NOT EXISTS merge (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 5); -INSERT INTO test.merge (x) SELECT number AS x FROM system.numbers LIMIT 10; -INSERT INTO test.merge (x) SELECT number + 5 AS x FROM system.numbers LIMIT 10; -INSERT INTO test.merge (x) SELECT number + 10 AS x FROM system.numbers LIMIT 10; +INSERT INTO merge (x) SELECT number AS x FROM system.numbers LIMIT 10; +INSERT INTO merge (x) SELECT number + 5 AS x FROM system.numbers LIMIT 10; +INSERT INTO merge (x) SELECT number + 10 AS x FROM system.numbers LIMIT 10; -SELECT * FROM test.merge ORDER BY _part_index, x; -OPTIMIZE TABLE test.merge; -SELECT * FROM test.merge ORDER BY _part_index, x; +SELECT * FROM merge ORDER BY _part_index, x; +OPTIMIZE TABLE merge; +SELECT * FROM merge ORDER BY _part_index, x; -INSERT INTO test.merge (x) SELECT number + 5 AS x FROM system.numbers LIMIT 10; +INSERT INTO merge (x) SELECT number + 5 AS x FROM system.numbers LIMIT 10; -SELECT * FROM test.merge ORDER BY _part_index, x; -OPTIMIZE TABLE test.merge; -SELECT * FROM test.merge ORDER BY _part_index, x; +SELECT * FROM merge ORDER BY _part_index, x; +OPTIMIZE TABLE merge; +SELECT * FROM merge ORDER BY _part_index, x; -INSERT INTO test.merge (x) SELECT number + 100 AS x FROM system.numbers LIMIT 10; +INSERT INTO merge (x) SELECT number + 100 AS x FROM system.numbers LIMIT 10; -SELECT * FROM test.merge ORDER BY _part_index, x; -OPTIMIZE TABLE test.merge; -SELECT * FROM test.merge ORDER BY _part_index, x; +SELECT * FROM merge ORDER BY _part_index, x; +OPTIMIZE TABLE merge; +SELECT * FROM merge ORDER BY _part_index, x; -DROP TABLE test.merge; +DROP TABLE merge; -CREATE TABLE IF NOT EXISTS test.merge (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 8192); +CREATE TABLE IF NOT EXISTS merge (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 8192); SET min_insert_block_size_rows = 0, min_insert_block_size_bytes = 0; SET max_block_size = 8200; -INSERT INTO test.merge (x) SELECT number AS x FROM (SELECT * FROM system.numbers LIMIT 8200) ORDER BY rand(); -INSERT INTO test.merge (x) SELECT number AS x FROM (SELECT * FROM system.numbers LIMIT 8200) ORDER BY rand(); +INSERT INTO merge (x) SELECT number AS x FROM (SELECT * FROM system.numbers LIMIT 8200) ORDER BY rand(); +INSERT INTO merge (x) SELECT number AS x FROM (SELECT * FROM system.numbers LIMIT 8200) ORDER BY rand(); -OPTIMIZE TABLE test.merge; +OPTIMIZE TABLE merge; -SELECT count(), uniqExact(x), min(x), max(x), sum(x), sum(cityHash64(x)) FROM test.merge; +SELECT count(), uniqExact(x), min(x), max(x), sum(x), sum(cityHash64(x)) FROM merge; -DROP TABLE test.merge; +DROP TABLE merge; -CREATE TABLE IF NOT EXISTS test.merge (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 8192); +CREATE TABLE IF NOT EXISTS merge (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 8192); SET max_block_size = 10000; -INSERT INTO test.merge (x) SELECT number AS x FROM (SELECT number FROM system.numbers LIMIT 10000); -INSERT INTO test.merge (x) SELECT number AS x FROM (SELECT number + 5000 AS number FROM system.numbers LIMIT 10000); +INSERT INTO merge (x) SELECT number AS x FROM (SELECT number FROM system.numbers LIMIT 10000); +INSERT INTO merge (x) SELECT number AS x FROM (SELECT number + 5000 AS number FROM system.numbers LIMIT 10000); -OPTIMIZE TABLE test.merge; +OPTIMIZE TABLE merge; -SELECT count(), uniqExact(x), min(x), max(x), sum(x), sum(cityHash64(x)) FROM test.merge; +SELECT count(), uniqExact(x), min(x), max(x), sum(x), sum(cityHash64(x)) FROM merge; -DROP TABLE test.merge; +DROP TABLE merge; diff --git a/dbms/tests/queries/0_stateless/00288_empty_stripelog.sql b/dbms/tests/queries/0_stateless/00288_empty_stripelog.sql index fddbbedaac2..700d904471d 100644 --- a/dbms/tests/queries/0_stateless/00288_empty_stripelog.sql +++ b/dbms/tests/queries/0_stateless/00288_empty_stripelog.sql @@ -1,8 +1,8 @@ -DROP TABLE IF EXISTS test.stripelog; -CREATE TABLE test.stripelog (x UInt8) ENGINE = StripeLog; +DROP TABLE IF EXISTS stripelog; +CREATE TABLE stripelog (x UInt8) ENGINE = StripeLog; -SELECT * FROM test.stripelog ORDER BY x; -INSERT INTO test.stripelog VALUES (1), (2); -SELECT * FROM test.stripelog ORDER BY x; +SELECT * FROM stripelog ORDER BY x; +INSERT INTO stripelog VALUES (1), (2); +SELECT * FROM stripelog ORDER BY x; -DROP TABLE test.stripelog; +DROP TABLE stripelog; diff --git a/dbms/tests/queries/0_stateless/00294_shard_enums.reference b/dbms/tests/queries/0_stateless/00294_shard_enums.reference index 06528e21138..dc212804d61 100644 --- a/dbms/tests/queries/0_stateless/00294_shard_enums.reference +++ b/dbms/tests/queries/0_stateless/00294_shard_enums.reference @@ -1,28 +1,28 @@ -d Date DEFAULT CAST(\'2015-12-29\', \'Date\') -k UInt8 DEFAULT 0 -e Enum8(\'hello\' = 1, \'world\' = 2) -sign Enum8(\'minus\' = -1, \'plus\' = 1) -letter Enum16(\'*\' = -256, \'a\' = 0, \'b\' = 1, \'c\' = 2) +d Date DEFAULT CAST(\'2015-12-29\', \'Date\') +k UInt8 DEFAULT 0 +e Enum8(\'hello\' = 1, \'world\' = 2) +sign Enum8(\'minus\' = -1, \'plus\' = 1) +letter Enum16(\'*\' = -256, \'a\' = 0, \'b\' = 1, \'c\' = 2) 2015-12-29 0 hello minus * -d Date DEFAULT CAST(\'2015-12-29\', \'Date\') -k UInt8 DEFAULT 0 -e Enum8(\'hello\' = 1, \'world\' = 2, \'!\' = 3) -sign Enum8(\'minus\' = -1, \'plus\' = 1) -letter Enum16(\'*\' = -256, \'a\' = 0, \'b\' = 1, \'c\' = 2) +d Date DEFAULT CAST(\'2015-12-29\', \'Date\') +k UInt8 DEFAULT 0 +e Enum8(\'hello\' = 1, \'world\' = 2, \'!\' = 3) +sign Enum8(\'minus\' = -1, \'plus\' = 1) +letter Enum16(\'*\' = -256, \'a\' = 0, \'b\' = 1, \'c\' = 2) 2015-12-29 0 hello minus * 2015-12-29 0 ! plus b -d Date DEFAULT CAST(\'2015-12-29\', \'Date\') -k UInt8 DEFAULT 0 -e Enum16(\'hello\' = 1, \'world\' = 2, \'!\' = 3) -sign Enum16(\'minus\' = -1, \'plus\' = 1) -letter Enum16(\'no letter\' = -256, \'a\' = 0, \'b\' = 1, \'c\' = 2) +d Date DEFAULT CAST(\'2015-12-29\', \'Date\') +k UInt8 DEFAULT 0 +e Enum16(\'hello\' = 1, \'world\' = 2, \'!\' = 3) +sign Enum16(\'minus\' = -1, \'plus\' = 1) +letter Enum16(\'no letter\' = -256, \'a\' = 0, \'b\' = 1, \'c\' = 2) 2015-12-29 0 hello minus no letter 2015-12-29 0 ! plus b -d Date DEFAULT CAST(\'2015-12-29\', \'Date\') -k UInt8 DEFAULT 0 -e Enum8(\'hello\' = 1, \'world\' = 2, \'!\' = 3) -sign Enum8(\'minus\' = -1, \'plus\' = 1) -letter Enum16(\'no letter\' = -256, \'a\' = 0, \'b\' = 1, \'c\' = 2) +d Date DEFAULT CAST(\'2015-12-29\', \'Date\') +k UInt8 DEFAULT 0 +e Enum8(\'hello\' = 1, \'world\' = 2, \'!\' = 3) +sign Enum8(\'minus\' = -1, \'plus\' = 1) +letter Enum16(\'no letter\' = -256, \'a\' = 0, \'b\' = 1, \'c\' = 2) 2015-12-29 0 hello minus no letter 2015-12-29 0 ! plus b 2015-12-29 0 world minus c diff --git a/dbms/tests/queries/0_stateless/00297_attach_negative_numbers_zookeeper.sql.disabled b/dbms/tests/queries/0_stateless/00297_attach_negative_numbers_zookeeper.sql.disabled index 1394b0d5ee6..000e768e943 100644 --- a/dbms/tests/queries/0_stateless/00297_attach_negative_numbers_zookeeper.sql.disabled +++ b/dbms/tests/queries/0_stateless/00297_attach_negative_numbers_zookeeper.sql.disabled @@ -1,170 +1,170 @@ -DROP TABLE IF EXISTS test.r1; -DROP TABLE IF EXISTS test.r2; +DROP TABLE IF EXISTS r1; +DROP TABLE IF EXISTS r2; -CREATE TABLE test.r1 (d Date DEFAULT '2016-01-01', x UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01/r/', 'r1', d, x, 111); +CREATE TABLE r1 (d Date DEFAULT '2016-01-01', x UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01/r/', 'r1', d, x, 111); SET min_insert_block_size_rows = 0, min_insert_block_size_bytes = 0; SET max_block_size = 1; -INSERT INTO test.r1 (x) SELECT number + 1000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 2000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 3000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 4000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 5000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 6000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 7000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 8000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 9000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 10000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 1000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 2000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 3000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 4000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 5000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 6000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 7000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 8000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 9000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 10000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 11000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 12000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 13000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 14000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 15000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 16000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 17000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 18000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 19000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 20000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 11000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 12000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 13000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 14000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 15000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 16000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 17000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 18000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 19000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 20000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 21000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 22000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 23000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 24000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 25000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 26000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 27000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 28000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 29000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 30000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 21000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 22000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 23000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 24000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 25000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 26000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 27000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 28000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 29000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 30000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 31000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 32000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 33000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 34000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 35000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 36000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 37000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 38000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 39000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 40000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 31000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 32000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 33000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 34000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 35000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 36000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 37000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 38000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 39000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 40000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 41000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 42000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 43000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 44000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 45000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 46000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 47000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 48000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 49000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 50000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 41000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 42000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 43000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 44000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 45000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 46000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 47000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 48000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 49000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 50000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 51000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 52000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 53000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 54000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 55000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 56000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 57000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 58000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 59000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 60000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 51000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 52000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 53000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 54000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 55000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 56000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 57000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 58000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 59000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 60000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 61000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 62000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 63000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 64000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 65000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 66000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 67000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 68000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 69000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; -INSERT INTO test.r1 (x) SELECT number + 70000 AS x FROM system.numbers LIMIT 10; -ALTER TABLE test.r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 61000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 62000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 63000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 64000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 65000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 66000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 67000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 68000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 69000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; +INSERT INTO r1 (x) SELECT number + 70000 AS x FROM system.numbers LIMIT 10; +ALTER TABLE r1 DETACH PARTITION 201601; -SELECT count() FROM test.r1; +SELECT count() FROM r1; -CREATE TABLE test.r2 (d Date DEFAULT '2016-01-01', x UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01/r/', 'r2', d, x, 111); +CREATE TABLE r2 (d Date DEFAULT '2016-01-01', x UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/tables/01/r/', 'r2', d, x, 111); -SELECT count() FROM test.r2; +SELECT count() FROM r2; SET replication_alter_partitions_sync = 2; -ALTER TABLE test.r1 ATTACH PARTITION 201601; +ALTER TABLE r1 ATTACH PARTITION 201601; -SELECT count() FROM test.r1; -SELECT count() FROM test.r2; +SELECT count() FROM r1; +SELECT count() FROM r2; -DROP TABLE test.r1; -DROP TABLE test.r2; +DROP TABLE r1; +DROP TABLE r2; diff --git a/dbms/tests/queries/0_stateless/00298_enum_width_and_cast.sql b/dbms/tests/queries/0_stateless/00298_enum_width_and_cast.sql index bd5a93c2ace..3dda3e41270 100644 --- a/dbms/tests/queries/0_stateless/00298_enum_width_and_cast.sql +++ b/dbms/tests/queries/0_stateless/00298_enum_width_and_cast.sql @@ -1,12 +1,12 @@ -DROP TABLE IF EXISTS test.enum; +DROP TABLE IF EXISTS enum; -CREATE TABLE test.enum (x Enum8('Hello' = -100, '\\' = 0, '\t\\t' = 111), y UInt8) ENGINE = TinyLog; -INSERT INTO test.enum (y) VALUES (0); -SELECT * FROM test.enum ORDER BY x, y FORMAT PrettyCompact; -INSERT INTO test.enum (x) VALUES ('\\'); -SELECT * FROM test.enum ORDER BY x, y FORMAT PrettyCompact; -INSERT INTO test.enum (x) VALUES ('\t\\t'); -SELECT * FROM test.enum ORDER BY x, y FORMAT PrettyCompact; -SELECT x, y, toInt8(x), toString(x) AS s, CAST(s AS Enum8('Hello' = -100, '\\' = 0, '\t\\t' = 111)) AS casted FROM test.enum ORDER BY x, y FORMAT PrettyCompact; +CREATE TABLE enum (x Enum8('Hello' = -100, '\\' = 0, '\t\\t' = 111), y UInt8) ENGINE = TinyLog; +INSERT INTO enum (y) VALUES (0); +SELECT * FROM enum ORDER BY x, y FORMAT PrettyCompact; +INSERT INTO enum (x) VALUES ('\\'); +SELECT * FROM enum ORDER BY x, y FORMAT PrettyCompact; +INSERT INTO enum (x) VALUES ('\t\\t'); +SELECT * FROM enum ORDER BY x, y FORMAT PrettyCompact; +SELECT x, y, toInt8(x), toString(x) AS s, CAST(s AS Enum8('Hello' = -100, '\\' = 0, '\t\\t' = 111)) AS casted FROM enum ORDER BY x, y FORMAT PrettyCompact; -DROP TABLE test.enum; +DROP TABLE enum; diff --git a/dbms/tests/queries/0_stateless/00299_stripe_log_multiple_inserts.sql b/dbms/tests/queries/0_stateless/00299_stripe_log_multiple_inserts.sql index 51c3226eba7..0539dc757ce 100644 --- a/dbms/tests/queries/0_stateless/00299_stripe_log_multiple_inserts.sql +++ b/dbms/tests/queries/0_stateless/00299_stripe_log_multiple_inserts.sql @@ -1,37 +1,37 @@ -DROP TABLE IF EXISTS test.log; +DROP TABLE IF EXISTS log; -CREATE TABLE test.log (x UInt8) ENGINE = StripeLog; +CREATE TABLE log (x UInt8) ENGINE = StripeLog; -SELECT * FROM test.log ORDER BY x; -INSERT INTO test.log VALUES (0); -SELECT * FROM test.log ORDER BY x; -INSERT INTO test.log VALUES (1); -SELECT * FROM test.log ORDER BY x; -INSERT INTO test.log VALUES (2); -SELECT * FROM test.log ORDER BY x; +SELECT * FROM log ORDER BY x; +INSERT INTO log VALUES (0); +SELECT * FROM log ORDER BY x; +INSERT INTO log VALUES (1); +SELECT * FROM log ORDER BY x; +INSERT INTO log VALUES (2); +SELECT * FROM log ORDER BY x; -DROP TABLE test.log; +DROP TABLE log; -CREATE TABLE test.log (x UInt8) ENGINE = TinyLog; +CREATE TABLE log (x UInt8) ENGINE = TinyLog; -SELECT * FROM test.log ORDER BY x; -INSERT INTO test.log VALUES (0); -SELECT * FROM test.log ORDER BY x; -INSERT INTO test.log VALUES (1); -SELECT * FROM test.log ORDER BY x; -INSERT INTO test.log VALUES (2); -SELECT * FROM test.log ORDER BY x; +SELECT * FROM log ORDER BY x; +INSERT INTO log VALUES (0); +SELECT * FROM log ORDER BY x; +INSERT INTO log VALUES (1); +SELECT * FROM log ORDER BY x; +INSERT INTO log VALUES (2); +SELECT * FROM log ORDER BY x; -DROP TABLE test.log; +DROP TABLE log; -CREATE TABLE test.log (x UInt8) ENGINE = Log; +CREATE TABLE log (x UInt8) ENGINE = Log; -SELECT * FROM test.log ORDER BY x; -INSERT INTO test.log VALUES (0); -SELECT * FROM test.log ORDER BY x; -INSERT INTO test.log VALUES (1); -SELECT * FROM test.log ORDER BY x; -INSERT INTO test.log VALUES (2); -SELECT * FROM test.log ORDER BY x; +SELECT * FROM log ORDER BY x; +INSERT INTO log VALUES (0); +SELECT * FROM log ORDER BY x; +INSERT INTO log VALUES (1); +SELECT * FROM log ORDER BY x; +INSERT INTO log VALUES (2); +SELECT * FROM log ORDER BY x; -DROP TABLE test.log; +DROP TABLE log; diff --git a/dbms/tests/queries/0_stateless/00301_csv.sh b/dbms/tests/queries/0_stateless/00301_csv.sh index 857850000b9..7f968d70056 100755 --- a/dbms/tests/queries/0_stateless/00301_csv.sh +++ b/dbms/tests/queries/0_stateless/00301_csv.sh @@ -3,24 +3,24 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.csv"; -$CLICKHOUSE_CLIENT --query="CREATE TABLE test.csv (s String, n UInt64, d Date) ENGINE = Memory"; +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS csv"; +$CLICKHOUSE_CLIENT --query="CREATE TABLE csv (s String, n UInt64, d Date) ENGINE = Memory"; echo '"Hello, world", 123, "2016-01-01" "Hello, ""world""", "456", 2016-01-02, Hello "world", 789 ,2016-01-03 "Hello - world", 100, 2016-01-04,' | $CLICKHOUSE_CLIENT --query="INSERT INTO test.csv FORMAT CSV"; + world", 100, 2016-01-04,' | $CLICKHOUSE_CLIENT --query="INSERT INTO csv FORMAT CSV"; -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.csv ORDER BY d"; -$CLICKHOUSE_CLIENT --query="DROP TABLE test.csv"; +$CLICKHOUSE_CLIENT --query="SELECT * FROM csv ORDER BY d"; +$CLICKHOUSE_CLIENT --query="DROP TABLE csv"; -$CLICKHOUSE_CLIENT --query="CREATE TABLE test.csv (t DateTime('Europe/Moscow'), s String) ENGINE = Memory"; +$CLICKHOUSE_CLIENT --query="CREATE TABLE csv (t DateTime('Europe/Moscow'), s String) ENGINE = Memory"; echo '"2016-01-01 01:02:03","1" 2016-01-02 01:02:03, "2" 1502792101,"3" -99999,"4"' | $CLICKHOUSE_CLIENT --query="INSERT INTO test.csv FORMAT CSV"; +99999,"4"' | $CLICKHOUSE_CLIENT --query="INSERT INTO csv FORMAT CSV"; -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.csv ORDER BY s"; -$CLICKHOUSE_CLIENT --query="DROP TABLE test.csv"; +$CLICKHOUSE_CLIENT --query="SELECT * FROM csv ORDER BY s"; +$CLICKHOUSE_CLIENT --query="DROP TABLE csv"; diff --git a/dbms/tests/queries/0_stateless/00305_http_and_readonly.sh b/dbms/tests/queries/0_stateless/00305_http_and_readonly.sh index 71c1b601acd..56ae8131a15 100755 --- a/dbms/tests/queries/0_stateless/00305_http_and_readonly.sh +++ b/dbms/tests/queries/0_stateless/00305_http_and_readonly.sh @@ -13,11 +13,11 @@ ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=SELECT+name,value,changed+FROM+s ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=SELECT+name,value,changed+FROM+system.settings+WHERE+name+IN+('readonly','max_rows_to_read')&readonly=1&max_rows_to_read=10000&default_format=PrettySpaceNoEscapes" -d' ' ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=SELECT+name,value,changed+FROM+system.settings+WHERE+name+IN+('readonly','max_rows_to_read')&readonly=2&max_rows_to_read=10000&default_format=PrettySpaceNoEscapes" -d' ' -${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}?query=DROP+TABLE+IF+EXISTS+test.nonexistent" 2>&1 | grep -q '500 Internal Server Error' && echo 'Ok' || echo 'Fail' -${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}?readonly=0&query=DROP+TABLE+IF+EXISTS+test.nonexistent" 2>&1 | grep -q '500 Internal Server Error' && echo 'Ok' || echo 'Fail' +${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}?query=DROP+TABLE+IF+EXISTS+nonexistent" 2>&1 | grep -q '500 Internal Server Error' && echo 'Ok' || echo 'Fail' +${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}?readonly=0&query=DROP+TABLE+IF+EXISTS+nonexistent" 2>&1 | grep -q '500 Internal Server Error' && echo 'Ok' || echo 'Fail' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=DROP+TABLE+IF+EXISTS+test.nonexistent" -d ' ' | wc -l -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?readonly=0&query=DROP+TABLE+IF+EXISTS+test.nonexistent" -d ' ' | wc -l +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=DROP+TABLE+IF+EXISTS+nonexistent" -d ' ' | wc -l +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?readonly=0&query=DROP+TABLE+IF+EXISTS+nonexistent" -d ' ' | wc -l -${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}?readonly=1&query=DROP+TABLE+IF+EXISTS+test.nonexistent" -d ' ' 2>&1 | grep -q '500 Internal Server Error' && echo 'Ok' || echo 'Fail' -${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}?readonly=2&query=DROP+TABLE+IF+EXISTS+test.nonexistent" -d ' ' 2>&1 | grep -q '500 Internal Server Error' && echo 'Ok' || echo 'Fail' +${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}?readonly=1&query=DROP+TABLE+IF+EXISTS+nonexistent" -d ' ' 2>&1 | grep -q '500 Internal Server Error' && echo 'Ok' || echo 'Fail' +${CLICKHOUSE_CURL} -vsS "${CLICKHOUSE_URL}?readonly=2&query=DROP+TABLE+IF+EXISTS+nonexistent" -d ' ' 2>&1 | grep -q '500 Internal Server Error' && echo 'Ok' || echo 'Fail' diff --git a/dbms/tests/queries/0_stateless/00306_insert_values_and_expressions.sql b/dbms/tests/queries/0_stateless/00306_insert_values_and_expressions.sql index 8cfe8cfc430..a57e9e69fe6 100644 --- a/dbms/tests/queries/0_stateless/00306_insert_values_and_expressions.sql +++ b/dbms/tests/queries/0_stateless/00306_insert_values_and_expressions.sql @@ -1,7 +1,7 @@ -DROP TABLE IF EXISTS test.insert; -CREATE TABLE test.insert (i UInt64, s String, u UUID, d Date, t DateTime, a Array(UInt32)) ENGINE = Memory; +DROP TABLE IF EXISTS insert; +CREATE TABLE insert (i UInt64, s String, u UUID, d Date, t DateTime, a Array(UInt32)) ENGINE = Memory; -INSERT INTO test.insert VALUES (1, 'Hello', 'ab41bdd6-5cd4-11e7-907b-a6006ad3dba0', '2016-01-01', '2016-01-02 03:04:05', [1, 2, 3]), (1 + 1, concat('Hello', ', world'), toUUID(0), toDate('2016-01-01') + 1, toStartOfMinute(toDateTime('2016-01-02 03:04:05')), [[0,1],[2]][1]), (round(pi()), concat('hello', ', world!'), toUUID(toString('ab41bdd6-5cd4-11e7-907b-a6006ad3dba0')), toDate(toDateTime('2016-01-03 03:04:05')), toStartOfHour(toDateTime('2016-01-02 03:04:05')), []), (4, 'World', 'ab41bdd6-5cd4-11e7-907b-a6006ad3dba0', '2016-01-04', '2016-12-11 10:09:08', [3,2,1]); +INSERT INTO insert VALUES (1, 'Hello', 'ab41bdd6-5cd4-11e7-907b-a6006ad3dba0', '2016-01-01', '2016-01-02 03:04:05', [1, 2, 3]), (1 + 1, concat('Hello', ', world'), toUUID(0), toDate('2016-01-01') + 1, toStartOfMinute(toDateTime('2016-01-02 03:04:05')), [[0,1],[2]][1]), (round(pi()), concat('hello', ', world!'), toUUID(toString('ab41bdd6-5cd4-11e7-907b-a6006ad3dba0')), toDate(toDateTime('2016-01-03 03:04:05')), toStartOfHour(toDateTime('2016-01-02 03:04:05')), []), (4, 'World', 'ab41bdd6-5cd4-11e7-907b-a6006ad3dba0', '2016-01-04', '2016-12-11 10:09:08', [3,2,1]); -SELECT * FROM test.insert ORDER BY i; -DROP TABLE test.insert; +SELECT * FROM insert ORDER BY i; +DROP TABLE insert; diff --git a/dbms/tests/queries/0_stateless/00310_tskv.sh b/dbms/tests/queries/0_stateless/00310_tskv.sh index 4cb6bf474ef..859753519ec 100755 --- a/dbms/tests/queries/0_stateless/00310_tskv.sh +++ b/dbms/tests/queries/0_stateless/00310_tskv.sh @@ -3,15 +3,15 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.tskv"; -$CLICKHOUSE_CLIENT --query="CREATE TABLE test.tskv (tskv_format String, timestamp DateTime, timezone String, text String, binary_data String) ENGINE = Memory"; +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS tskv"; +$CLICKHOUSE_CLIENT --query="CREATE TABLE tskv (tskv_format String, timestamp DateTime, timezone String, text String, binary_data String) ENGINE = Memory"; echo -n 'tskv tskv_format=custom-service-log timestamp=2013-01-01 00:00:00 timezone=+0400 text=multiline\ntext binary_data=can contain \0 symbol binary_data=abc text=Hello, world binary_data=def text= tskv -' | $CLICKHOUSE_CLIENT --query="INSERT INTO test.tskv FORMAT TSKV"; +' | $CLICKHOUSE_CLIENT --query="INSERT INTO tskv FORMAT TSKV"; -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.tskv ORDER BY binary_data"; -$CLICKHOUSE_CLIENT --query="DROP TABLE test.tskv"; +$CLICKHOUSE_CLIENT --query="SELECT * FROM tskv ORDER BY binary_data"; +$CLICKHOUSE_CLIENT --query="DROP TABLE tskv"; diff --git a/dbms/tests/queries/0_stateless/00311_array_primary_key.sql b/dbms/tests/queries/0_stateless/00311_array_primary_key.sql index 21576d32661..0ea368609da 100644 --- a/dbms/tests/queries/0_stateless/00311_array_primary_key.sql +++ b/dbms/tests/queries/0_stateless/00311_array_primary_key.sql @@ -1,18 +1,18 @@ -DROP TABLE IF EXISTS test.array_pk; -CREATE TABLE test.array_pk (key Array(UInt8), s String, n UInt64, d Date MATERIALIZED '2000-01-01') ENGINE = MergeTree(d, (key, s, n), 1); +DROP TABLE IF EXISTS array_pk; +CREATE TABLE array_pk (key Array(UInt8), s String, n UInt64, d Date MATERIALIZED '2000-01-01') ENGINE = MergeTree(d, (key, s, n), 1); -INSERT INTO test.array_pk VALUES ([1, 2, 3], 'Hello, world!', 1); -INSERT INTO test.array_pk VALUES ([1, 2], 'Hello', 2); -INSERT INTO test.array_pk VALUES ([2], 'Goodbye', 3); -INSERT INTO test.array_pk VALUES ([], 'abc', 4); -INSERT INTO test.array_pk VALUES ([2, 3, 4], 'def', 5); -INSERT INTO test.array_pk VALUES ([5, 6], 'ghi', 6); +INSERT INTO array_pk VALUES ([1, 2, 3], 'Hello, world!', 1); +INSERT INTO array_pk VALUES ([1, 2], 'Hello', 2); +INSERT INTO array_pk VALUES ([2], 'Goodbye', 3); +INSERT INTO array_pk VALUES ([], 'abc', 4); +INSERT INTO array_pk VALUES ([2, 3, 4], 'def', 5); +INSERT INTO array_pk VALUES ([5, 6], 'ghi', 6); -SELECT * FROM test.array_pk ORDER BY n; +SELECT * FROM array_pk ORDER BY n; -DETACH TABLE test.array_pk; -ATTACH TABLE test.array_pk (key Array(UInt8), s String, n UInt64, d Date MATERIALIZED '2000-01-01') ENGINE = MergeTree(d, (key, s, n), 1); +DETACH TABLE array_pk; +ATTACH TABLE array_pk (key Array(UInt8), s String, n UInt64, d Date MATERIALIZED '2000-01-01') ENGINE = MergeTree(d, (key, s, n), 1); -SELECT * FROM test.array_pk ORDER BY n; +SELECT * FROM array_pk ORDER BY n; -DROP TABLE test.array_pk; +DROP TABLE array_pk; diff --git a/dbms/tests/queries/0_stateless/00314_sample_factor_virtual_column.sql b/dbms/tests/queries/0_stateless/00314_sample_factor_virtual_column.sql index da44cee2733..b0eee63a685 100644 --- a/dbms/tests/queries/0_stateless/00314_sample_factor_virtual_column.sql +++ b/dbms/tests/queries/0_stateless/00314_sample_factor_virtual_column.sql @@ -1,20 +1,20 @@ -DROP TABLE IF EXISTS test.sample1; -DROP TABLE IF EXISTS test.sample2; -DROP TABLE IF EXISTS test.sample_merge; +DROP TABLE IF EXISTS sample1; +DROP TABLE IF EXISTS sample2; +DROP TABLE IF EXISTS sample_merge; -CREATE TABLE test.sample1 (x UInt64, d Date DEFAULT today()) ENGINE = MergeTree(d, intHash64(x), intHash64(x), 10); -CREATE TABLE test.sample2 (x UInt64, d Date DEFAULT today()) ENGINE = MergeTree(d, intHash64(x), intHash64(x), 10); +CREATE TABLE sample1 (x UInt64, d Date DEFAULT today()) ENGINE = MergeTree(d, intHash64(x), intHash64(x), 10); +CREATE TABLE sample2 (x UInt64, d Date DEFAULT today()) ENGINE = MergeTree(d, intHash64(x), intHash64(x), 10); SET min_insert_block_size_rows = 0, min_insert_block_size_bytes = 0; -INSERT INTO test.sample1 (x) SELECT number AS x FROM system.numbers LIMIT 1000000; -INSERT INTO test.sample2 (x) SELECT number AS x FROM system.numbers LIMIT 2000000; +INSERT INTO sample1 (x) SELECT number AS x FROM system.numbers LIMIT 1000000; +INSERT INTO sample2 (x) SELECT number AS x FROM system.numbers LIMIT 2000000; -CREATE TABLE test.sample_merge AS test.sample1 ENGINE = Merge(test, '^sample\\d$'); +CREATE TABLE sample_merge AS sample1 ENGINE = Merge(test, '^sample\\d$'); -SELECT abs(sum(_sample_factor) - 3000000) / 3000000 < 0.001 FROM test.sample_merge SAMPLE 100000; +SELECT abs(sum(_sample_factor) - 3000000) / 3000000 < 0.001 FROM sample_merge SAMPLE 100000; SELECT abs(sum(_sample_factor) - 3000000) / 3000000 < 0.001 FROM merge(test, '^sample\\d$') SAMPLE 100000; -DROP TABLE test.sample1; -DROP TABLE test.sample2; -DROP TABLE test.sample_merge; +DROP TABLE sample1; +DROP TABLE sample2; +DROP TABLE sample_merge; diff --git a/dbms/tests/queries/0_stateless/00318_pk_tuple_order.sql b/dbms/tests/queries/0_stateless/00318_pk_tuple_order.sql index de554fd8b38..8e2992167ee 100644 --- a/dbms/tests/queries/0_stateless/00318_pk_tuple_order.sql +++ b/dbms/tests/queries/0_stateless/00318_pk_tuple_order.sql @@ -1,68 +1,68 @@ -DROP TABLE IF EXISTS test.pk; +DROP TABLE IF EXISTS pk; -CREATE TABLE test.pk (d Date DEFAULT '2000-01-01', x UInt64, y UInt64, z UInt64) ENGINE = MergeTree(d, (x, y, z), 1); +CREATE TABLE pk (d Date DEFAULT '2000-01-01', x UInt64, y UInt64, z UInt64) ENGINE = MergeTree(d, (x, y, z), 1); -INSERT INTO test.pk (x, y, z) VALUES (1, 11, 1235), (1, 11, 4395), (1, 22, 3545), (1, 22, 6984), (1, 33, 4596), (2, 11, 4563), (2, 11, 4578), (2, 11, 3572), (2, 22, 5786), (2, 22, 5786), (2, 22, 2791), (2, 22, 2791), (3, 33, 2791), (3, 33, 2791), (3, 33, 1235), (3, 44, 4935), (3, 44, 4578), (3, 55, 5786), (3, 55, 2791), (3, 55, 1235); +INSERT INTO pk (x, y, z) VALUES (1, 11, 1235), (1, 11, 4395), (1, 22, 3545), (1, 22, 6984), (1, 33, 4596), (2, 11, 4563), (2, 11, 4578), (2, 11, 3572), (2, 22, 5786), (2, 22, 5786), (2, 22, 2791), (2, 22, 2791), (3, 33, 2791), (3, 33, 2791), (3, 33, 1235), (3, 44, 4935), (3, 44, 4578), (3, 55, 5786), (3, 55, 2791), (3, 55, 1235); SET min_insert_block_size_rows = 0, min_insert_block_size_bytes = 0; SET max_block_size = 1; SET max_rows_to_read = 4; -SELECT * FROM test.pk WHERE x = 2 AND y = 11; +SELECT * FROM pk WHERE x = 2 AND y = 11; SET max_rows_to_read = 5; -SELECT * FROM test.pk WHERE x = 1; +SELECT * FROM pk WHERE x = 1; SET max_rows_to_read = 9; -SELECT * FROM test.pk WHERE x = 3; +SELECT * FROM pk WHERE x = 3; SET max_rows_to_read = 3; -SELECT * FROM test.pk WHERE x = 3 AND y = 44; +SELECT * FROM pk WHERE x = 3 AND y = 44; SET max_rows_to_read = 2; -SELECT * FROM test.pk WHERE x = 3 AND y = 44 AND z = 4935; -SELECT * FROM test.pk WHERE x = 3 AND y = 44 AND z = 4578; +SELECT * FROM pk WHERE x = 3 AND y = 44 AND z = 4935; +SELECT * FROM pk WHERE x = 3 AND y = 44 AND z = 4578; SET max_rows_to_read = 1; -SELECT * FROM test.pk WHERE x = 3 AND y = 44 AND z = 4934; -SELECT * FROM test.pk WHERE x = 3 AND y = 44 AND z = 4936; -SELECT * FROM test.pk WHERE x = 3 AND y = 44 AND z = 4577; -SELECT * FROM test.pk WHERE x = 3 AND y = 44 AND z = 4579; +SELECT * FROM pk WHERE x = 3 AND y = 44 AND z = 4934; +SELECT * FROM pk WHERE x = 3 AND y = 44 AND z = 4936; +SELECT * FROM pk WHERE x = 3 AND y = 44 AND z = 4577; +SELECT * FROM pk WHERE x = 3 AND y = 44 AND z = 4579; SET max_rows_to_read = 1; -SELECT * FROM test.pk WHERE x = 3 AND y = 55 AND z > 5786; +SELECT * FROM pk WHERE x = 3 AND y = 55 AND z > 5786; SET max_rows_to_read = 2; -SELECT * FROM test.pk WHERE x = 3 AND y = 55 AND z >= 5786; +SELECT * FROM pk WHERE x = 3 AND y = 55 AND z >= 5786; SET max_rows_to_read = 3; -SELECT * FROM test.pk WHERE x = 3 AND y = 55 AND z > 1235; +SELECT * FROM pk WHERE x = 3 AND y = 55 AND z > 1235; SET max_rows_to_read = 4; -SELECT * FROM test.pk WHERE x = 3 AND y = 55 AND z >= 1235; -SELECT * FROM test.pk WHERE x = 3 AND y = 55 AND z >= 1000; -SELECT * FROM test.pk WHERE x = 3 AND y = 55 AND z >= 1000 AND x < 10000; -SELECT * FROM test.pk WHERE x = 3 AND y = 55; -SELECT * FROM test.pk WHERE x = 3 AND y >= 50; -SELECT * FROM test.pk WHERE x = 3 AND y > 44; -SELECT * FROM test.pk WHERE x >= 3 AND y > 44; -SELECT * FROM test.pk WHERE x > 2 AND y > 44; +SELECT * FROM pk WHERE x = 3 AND y = 55 AND z >= 1235; +SELECT * FROM pk WHERE x = 3 AND y = 55 AND z >= 1000; +SELECT * FROM pk WHERE x = 3 AND y = 55 AND z >= 1000 AND x < 10000; +SELECT * FROM pk WHERE x = 3 AND y = 55; +SELECT * FROM pk WHERE x = 3 AND y >= 50; +SELECT * FROM pk WHERE x = 3 AND y > 44; +SELECT * FROM pk WHERE x >= 3 AND y > 44; +SELECT * FROM pk WHERE x > 2 AND y > 44; SET max_rows_to_read = 2; -SELECT * FROM test.pk WHERE x = 3 AND y = 55 AND z = 5786; +SELECT * FROM pk WHERE x = 3 AND y = 55 AND z = 5786; SET max_rows_to_read = 15; SET merge_tree_min_rows_for_seek = 0; -SELECT * FROM test.pk WHERE z = 2791; -SELECT * FROM test.pk WHERE z = 5786; -SELECT * FROM test.pk WHERE z = 1235; -SELECT * FROM test.pk WHERE z = 4578; +SELECT * FROM pk WHERE z = 2791; +SELECT * FROM pk WHERE z = 5786; +SELECT * FROM pk WHERE z = 1235; +SELECT * FROM pk WHERE z = 4578; SET max_rows_to_read = 10; -SELECT * FROM test.pk WHERE y = 11; -SELECT * FROM test.pk WHERE y = 22; -SELECT * FROM test.pk WHERE y = 33; -SELECT * FROM test.pk WHERE y = 44; -SELECT * FROM test.pk WHERE y = 55; +SELECT * FROM pk WHERE y = 11; +SELECT * FROM pk WHERE y = 22; +SELECT * FROM pk WHERE y = 33; +SELECT * FROM pk WHERE y = 44; +SELECT * FROM pk WHERE y = 55; -DROP TABLE test.pk; +DROP TABLE pk; diff --git a/dbms/tests/queries/0_stateless/00319_index_for_like.sql b/dbms/tests/queries/0_stateless/00319_index_for_like.sql index 54f03b2f3f8..57ebce439f3 100644 --- a/dbms/tests/queries/0_stateless/00319_index_for_like.sql +++ b/dbms/tests/queries/0_stateless/00319_index_for_like.sql @@ -1,54 +1,54 @@ -DROP TABLE IF EXISTS test.index_for_like; -CREATE TABLE test.index_for_like (s String, d Date DEFAULT today()) ENGINE = MergeTree(d, (s, d), 1); +DROP TABLE IF EXISTS index_for_like; +CREATE TABLE index_for_like (s String, d Date DEFAULT today()) ENGINE = MergeTree(d, (s, d), 1); -INSERT INTO test.index_for_like (s) VALUES ('Hello'), ('Hello, World'), ('Hello, World 1'), ('Hello 1'), ('Goodbye'), ('Goodbye, World'), ('Goodbye 1'), ('Goodbye, World 1'); +INSERT INTO index_for_like (s) VALUES ('Hello'), ('Hello, World'), ('Hello, World 1'), ('Hello 1'), ('Goodbye'), ('Goodbye, World'), ('Goodbye 1'), ('Goodbye, World 1'); SET max_rows_to_read = 3; -SELECT s FROM test.index_for_like WHERE s LIKE 'Hello, World%'; +SELECT s FROM index_for_like WHERE s LIKE 'Hello, World%'; SET max_rows_to_read = 2; -SELECT s FROM test.index_for_like WHERE s LIKE 'Hello, World %'; +SELECT s FROM index_for_like WHERE s LIKE 'Hello, World %'; SET max_rows_to_read = 2; -SELECT s FROM test.index_for_like WHERE s LIKE 'Hello, World 1%'; +SELECT s FROM index_for_like WHERE s LIKE 'Hello, World 1%'; SET max_rows_to_read = 1; -SELECT s FROM test.index_for_like WHERE s LIKE 'Hello, World 2%'; +SELECT s FROM index_for_like WHERE s LIKE 'Hello, World 2%'; SET max_rows_to_read = 1; -SELECT s FROM test.index_for_like WHERE s LIKE 'Hello, Worle%'; +SELECT s FROM index_for_like WHERE s LIKE 'Hello, Worle%'; SET max_rows_to_read = 3; -SELECT s FROM test.index_for_like WHERE s LIKE 'Hello, Wor%'; +SELECT s FROM index_for_like WHERE s LIKE 'Hello, Wor%'; SET max_rows_to_read = 5; -SELECT s FROM test.index_for_like WHERE s LIKE 'Hello%'; +SELECT s FROM index_for_like WHERE s LIKE 'Hello%'; SET max_rows_to_read = 2; -SELECT s FROM test.index_for_like WHERE s LIKE 'Hello %'; +SELECT s FROM index_for_like WHERE s LIKE 'Hello %'; SET max_rows_to_read = 3; -SELECT s FROM test.index_for_like WHERE s LIKE 'Hello,%'; +SELECT s FROM index_for_like WHERE s LIKE 'Hello,%'; SET max_rows_to_read = 1; -SELECT s FROM test.index_for_like WHERE s LIKE 'Hello;%'; +SELECT s FROM index_for_like WHERE s LIKE 'Hello;%'; SET max_rows_to_read = 5; -SELECT s FROM test.index_for_like WHERE s LIKE 'H%'; +SELECT s FROM index_for_like WHERE s LIKE 'H%'; SET max_rows_to_read = 4; -SELECT s FROM test.index_for_like WHERE s LIKE 'Good%'; +SELECT s FROM index_for_like WHERE s LIKE 'Good%'; SET max_rows_to_read = 8; -SELECT s FROM test.index_for_like WHERE s LIKE '%'; -SELECT s FROM test.index_for_like WHERE s LIKE '%Hello%'; -SELECT s FROM test.index_for_like WHERE s LIKE '%Hello'; +SELECT s FROM index_for_like WHERE s LIKE '%'; +SELECT s FROM index_for_like WHERE s LIKE '%Hello%'; +SELECT s FROM index_for_like WHERE s LIKE '%Hello'; SET max_rows_to_read = 3; -SELECT s FROM test.index_for_like WHERE s LIKE 'Hello, World% %'; -SELECT s FROM test.index_for_like WHERE s LIKE 'Hello, Worl_%'; +SELECT s FROM index_for_like WHERE s LIKE 'Hello, World% %'; +SELECT s FROM index_for_like WHERE s LIKE 'Hello, Worl_%'; SET max_rows_to_read = 1; -SELECT s FROM test.index_for_like WHERE s LIKE 'Hello, Worl\\_%'; +SELECT s FROM index_for_like WHERE s LIKE 'Hello, Worl\\_%'; -DROP TABLE test.index_for_like; +DROP TABLE index_for_like; diff --git a/dbms/tests/queries/0_stateless/00321_pk_set.sql b/dbms/tests/queries/0_stateless/00321_pk_set.sql index 85a006ee133..073a87a6e13 100644 --- a/dbms/tests/queries/0_stateless/00321_pk_set.sql +++ b/dbms/tests/queries/0_stateless/00321_pk_set.sql @@ -1,19 +1,19 @@ -DROP TABLE IF EXISTS test.pk_set; +DROP TABLE IF EXISTS pk_set; -CREATE TABLE test.pk_set (d Date, n UInt64, host String, code UInt64) ENGINE = MergeTree(d, (n, host, code), 1); -INSERT INTO test.pk_set (n, host, code) VALUES (1, 'market', 100), (11, 'news', 100); +CREATE TABLE pk_set (d Date, n UInt64, host String, code UInt64) ENGINE = MergeTree(d, (n, host, code), 1); +INSERT INTO pk_set (n, host, code) VALUES (1, 'market', 100), (11, 'news', 100); -SELECT count() FROM test.pk_set WHERE host IN ('admin.market1', 'admin.market2') AND code = 100; -SELECT count() FROM test.pk_set WHERE host IN ('admin.market1', 'admin.market2') AND code = 100 AND n = 11; -SELECT count() FROM test.pk_set WHERE host IN ('admin.market1', 'admin.market2') AND code = 100 AND n >= 11; -SELECT count() FROM test.pk_set WHERE host IN ('market', 'admin.market2', 'admin.market3', 'admin.market4', 'abc') AND code = 100 AND n = 11; -SELECT count() FROM test.pk_set WHERE host IN ('market', 'admin.market2', 'admin.market3', 'admin.market4', 'abc') AND code = 100 AND n >= 11; -SELECT count() FROM test.pk_set WHERE host IN ('admin.market2', 'admin.market3', 'admin.market4', 'abc') AND code = 100 AND n = 11; -SELECT count() FROM test.pk_set WHERE host IN ('admin.market2', 'admin.market3', 'admin.market4', 'abc', 'news') AND code = 100 AND n = 11; +SELECT count() FROM pk_set WHERE host IN ('admin.market1', 'admin.market2') AND code = 100; +SELECT count() FROM pk_set WHERE host IN ('admin.market1', 'admin.market2') AND code = 100 AND n = 11; +SELECT count() FROM pk_set WHERE host IN ('admin.market1', 'admin.market2') AND code = 100 AND n >= 11; +SELECT count() FROM pk_set WHERE host IN ('market', 'admin.market2', 'admin.market3', 'admin.market4', 'abc') AND code = 100 AND n = 11; +SELECT count() FROM pk_set WHERE host IN ('market', 'admin.market2', 'admin.market3', 'admin.market4', 'abc') AND code = 100 AND n >= 11; +SELECT count() FROM pk_set WHERE host IN ('admin.market2', 'admin.market3', 'admin.market4', 'abc') AND code = 100 AND n = 11; +SELECT count() FROM pk_set WHERE host IN ('admin.market2', 'admin.market3', 'admin.market4', 'abc', 'news') AND code = 100 AND n = 11; -- that barely reproduces the problem -- better way: --- for i in {1..1000}; do echo "SELECT count() FROM test.pk_set WHERE host IN ('a'"$(seq 1 $i | sed -r "s/.+/,'\\0'/")") AND code = 100 AND n = 11;"; done > queries.tsv +-- for i in {1..1000}; do echo "SELECT count() FROM pk_set WHERE host IN ('a'"$(seq 1 $i | sed -r "s/.+/,'\\0'/")") AND code = 100 AND n = 11;"; done > queries.tsv -- clickhouse-benchmark < queries.tsv -DROP TABLE test.pk_set; +DROP TABLE pk_set; diff --git a/dbms/tests/queries/0_stateless/00325_replacing_merge_tree.sql.disabled b/dbms/tests/queries/0_stateless/00325_replacing_merge_tree.sql.disabled index 374146682a0..6014cb3bb67 100644 --- a/dbms/tests/queries/0_stateless/00325_replacing_merge_tree.sql.disabled +++ b/dbms/tests/queries/0_stateless/00325_replacing_merge_tree.sql.disabled @@ -1,96 +1,96 @@ -DROP TABLE IF EXISTS test.replacing; -CREATE TABLE test.replacing (d Date, k UInt64, s String, v UInt16) ENGINE = ReplacingMergeTree(d, k, 8192, v); +DROP TABLE IF EXISTS replacing; +CREATE TABLE replacing (d Date, k UInt64, s String, v UInt16) ENGINE = ReplacingMergeTree(d, k, 8192, v); -INSERT INTO test.replacing VALUES ('2000-01-01', 1, 'Hello', 0); -SELECT _part_index, * FROM test.replacing ORDER BY k, v, _part_index; -SELECT _part_index, * FROM test.replacing FINAL ORDER BY k, v, _part_index; +INSERT INTO replacing VALUES ('2000-01-01', 1, 'Hello', 0); +SELECT _part_index, * FROM replacing ORDER BY k, v, _part_index; +SELECT _part_index, * FROM replacing FINAL ORDER BY k, v, _part_index; -INSERT INTO test.replacing VALUES ('2000-01-01', 1, 'World', 0); -SELECT _part_index, * FROM test.replacing ORDER BY k, v, _part_index; -SELECT _part_index, * FROM test.replacing FINAL ORDER BY k, v, _part_index; +INSERT INTO replacing VALUES ('2000-01-01', 1, 'World', 0); +SELECT _part_index, * FROM replacing ORDER BY k, v, _part_index; +SELECT _part_index, * FROM replacing FINAL ORDER BY k, v, _part_index; -OPTIMIZE TABLE test.replacing; -SELECT _part_index, * FROM test.replacing ORDER BY k, v, _part_index; -SELECT _part_index, * FROM test.replacing FINAL ORDER BY k, v, _part_index; +OPTIMIZE TABLE replacing; +SELECT _part_index, * FROM replacing ORDER BY k, v, _part_index; +SELECT _part_index, * FROM replacing FINAL ORDER BY k, v, _part_index; -INSERT INTO test.replacing VALUES ('2000-01-01', 1, 'Hello', 10); -SELECT _part_index, * FROM test.replacing ORDER BY k, v, _part_index; -SELECT _part_index, * FROM test.replacing FINAL ORDER BY k, v, _part_index; +INSERT INTO replacing VALUES ('2000-01-01', 1, 'Hello', 10); +SELECT _part_index, * FROM replacing ORDER BY k, v, _part_index; +SELECT _part_index, * FROM replacing FINAL ORDER BY k, v, _part_index; -INSERT INTO test.replacing VALUES ('2000-01-01', 1, 'Hello!', 9); -INSERT INTO test.replacing VALUES ('2000-01-01', 2, 'abc', 1); -INSERT INTO test.replacing VALUES ('2000-01-01', 2, 'def', 1); -INSERT INTO test.replacing VALUES ('2000-01-01', 2, 'ghi', 0); -SELECT * FROM test.replacing FINAL ORDER BY k, v, _part_index; +INSERT INTO replacing VALUES ('2000-01-01', 1, 'Hello!', 9); +INSERT INTO replacing VALUES ('2000-01-01', 2, 'abc', 1); +INSERT INTO replacing VALUES ('2000-01-01', 2, 'def', 1); +INSERT INTO replacing VALUES ('2000-01-01', 2, 'ghi', 0); +SELECT * FROM replacing FINAL ORDER BY k, v, _part_index; -OPTIMIZE TABLE test.replacing; -OPTIMIZE TABLE test.replacing; -OPTIMIZE TABLE test.replacing; -SELECT _part_index, * FROM test.replacing ORDER BY k, v, _part_index; -SELECT _part_index, * FROM test.replacing FINAL ORDER BY k, v, _part_index; +OPTIMIZE TABLE replacing; +OPTIMIZE TABLE replacing; +OPTIMIZE TABLE replacing; +SELECT _part_index, * FROM replacing ORDER BY k, v, _part_index; +SELECT _part_index, * FROM replacing FINAL ORDER BY k, v, _part_index; -DROP TABLE test.replacing; +DROP TABLE replacing; -DROP TABLE IF EXISTS test.replacing; -CREATE TABLE test.replacing (d Date, k UInt64, s String, v UInt16) ENGINE = ReplacingMergeTree(d, k, 1, v); +DROP TABLE IF EXISTS replacing; +CREATE TABLE replacing (d Date, k UInt64, s String, v UInt16) ENGINE = ReplacingMergeTree(d, k, 1, v); -INSERT INTO test.replacing VALUES ('2000-01-01', 1, 'Hello', 0); -SELECT _part_index, * FROM test.replacing ORDER BY k, v, _part_index; -SELECT _part_index, * FROM test.replacing FINAL ORDER BY k, v, _part_index; +INSERT INTO replacing VALUES ('2000-01-01', 1, 'Hello', 0); +SELECT _part_index, * FROM replacing ORDER BY k, v, _part_index; +SELECT _part_index, * FROM replacing FINAL ORDER BY k, v, _part_index; -INSERT INTO test.replacing VALUES ('2000-01-01', 1, 'World', 0); -SELECT _part_index, * FROM test.replacing ORDER BY k, v, _part_index; -SELECT _part_index, * FROM test.replacing FINAL ORDER BY k, v, _part_index; +INSERT INTO replacing VALUES ('2000-01-01', 1, 'World', 0); +SELECT _part_index, * FROM replacing ORDER BY k, v, _part_index; +SELECT _part_index, * FROM replacing FINAL ORDER BY k, v, _part_index; -OPTIMIZE TABLE test.replacing; -SELECT _part_index, * FROM test.replacing ORDER BY k, v, _part_index; -SELECT _part_index, * FROM test.replacing FINAL ORDER BY k, v, _part_index; +OPTIMIZE TABLE replacing; +SELECT _part_index, * FROM replacing ORDER BY k, v, _part_index; +SELECT _part_index, * FROM replacing FINAL ORDER BY k, v, _part_index; -INSERT INTO test.replacing VALUES ('2000-01-01', 1, 'Hello', 10); -SELECT _part_index, * FROM test.replacing ORDER BY k, v, _part_index; -SELECT _part_index, * FROM test.replacing FINAL ORDER BY k, v, _part_index; +INSERT INTO replacing VALUES ('2000-01-01', 1, 'Hello', 10); +SELECT _part_index, * FROM replacing ORDER BY k, v, _part_index; +SELECT _part_index, * FROM replacing FINAL ORDER BY k, v, _part_index; -INSERT INTO test.replacing VALUES ('2000-01-01', 1, 'Hello!', 9); -INSERT INTO test.replacing VALUES ('2000-01-01', 2, 'abc', 1); -INSERT INTO test.replacing VALUES ('2000-01-01', 2, 'def', 1); -INSERT INTO test.replacing VALUES ('2000-01-01', 2, 'ghi', 0); -SELECT * FROM test.replacing FINAL ORDER BY k, v, _part_index; +INSERT INTO replacing VALUES ('2000-01-01', 1, 'Hello!', 9); +INSERT INTO replacing VALUES ('2000-01-01', 2, 'abc', 1); +INSERT INTO replacing VALUES ('2000-01-01', 2, 'def', 1); +INSERT INTO replacing VALUES ('2000-01-01', 2, 'ghi', 0); +SELECT * FROM replacing FINAL ORDER BY k, v, _part_index; -OPTIMIZE TABLE test.replacing PARTITION 200001 FINAL; -SELECT _part_index, * FROM test.replacing ORDER BY k, v, _part_index; -SELECT _part_index, * FROM test.replacing FINAL ORDER BY k, v, _part_index; +OPTIMIZE TABLE replacing PARTITION 200001 FINAL; +SELECT _part_index, * FROM replacing ORDER BY k, v, _part_index; +SELECT _part_index, * FROM replacing FINAL ORDER BY k, v, _part_index; -DROP TABLE test.replacing; +DROP TABLE replacing; -DROP TABLE IF EXISTS test.replacing; -CREATE TABLE test.replacing (d Date, k UInt64, s String) ENGINE = ReplacingMergeTree(d, k, 2); +DROP TABLE IF EXISTS replacing; +CREATE TABLE replacing (d Date, k UInt64, s String) ENGINE = ReplacingMergeTree(d, k, 2); -INSERT INTO test.replacing VALUES ('2000-01-01', 1, 'Hello'); -SELECT _part_index, * FROM test.replacing ORDER BY k, _part_index; -SELECT _part_index, * FROM test.replacing FINAL ORDER BY k, _part_index; +INSERT INTO replacing VALUES ('2000-01-01', 1, 'Hello'); +SELECT _part_index, * FROM replacing ORDER BY k, _part_index; +SELECT _part_index, * FROM replacing FINAL ORDER BY k, _part_index; -INSERT INTO test.replacing VALUES ('2000-01-01', 1, 'World'); -SELECT _part_index, * FROM test.replacing ORDER BY k, _part_index; -SELECT _part_index, * FROM test.replacing FINAL ORDER BY k, _part_index; +INSERT INTO replacing VALUES ('2000-01-01', 1, 'World'); +SELECT _part_index, * FROM replacing ORDER BY k, _part_index; +SELECT _part_index, * FROM replacing FINAL ORDER BY k, _part_index; -OPTIMIZE TABLE test.replacing; -SELECT _part_index, * FROM test.replacing ORDER BY k, _part_index; -SELECT _part_index, * FROM test.replacing FINAL ORDER BY k, _part_index; +OPTIMIZE TABLE replacing; +SELECT _part_index, * FROM replacing ORDER BY k, _part_index; +SELECT _part_index, * FROM replacing FINAL ORDER BY k, _part_index; -INSERT INTO test.replacing VALUES ('2000-01-01', 1, 'Hello'); -SELECT _part_index, * FROM test.replacing ORDER BY k, _part_index; -SELECT _part_index, * FROM test.replacing FINAL ORDER BY k, _part_index; +INSERT INTO replacing VALUES ('2000-01-01', 1, 'Hello'); +SELECT _part_index, * FROM replacing ORDER BY k, _part_index; +SELECT _part_index, * FROM replacing FINAL ORDER BY k, _part_index; -INSERT INTO test.replacing VALUES ('2000-01-01', 1, 'Hello!'); -INSERT INTO test.replacing VALUES ('2000-01-01', 2, 'abc'); -INSERT INTO test.replacing VALUES ('2000-01-01', 2, 'def'); -INSERT INTO test.replacing VALUES ('2000-01-01', 2, 'ghi'); -SELECT * FROM test.replacing FINAL ORDER BY k, _part_index; +INSERT INTO replacing VALUES ('2000-01-01', 1, 'Hello!'); +INSERT INTO replacing VALUES ('2000-01-01', 2, 'abc'); +INSERT INTO replacing VALUES ('2000-01-01', 2, 'def'); +INSERT INTO replacing VALUES ('2000-01-01', 2, 'ghi'); +SELECT * FROM replacing FINAL ORDER BY k, _part_index; -OPTIMIZE TABLE test.replacing PARTITION 200001 FINAL; -SELECT _part_index, * FROM test.replacing ORDER BY k, _part_index; -SELECT _part_index, * FROM test.replacing FINAL ORDER BY k, _part_index; +OPTIMIZE TABLE replacing PARTITION 200001 FINAL; +SELECT _part_index, * FROM replacing ORDER BY k, _part_index; +SELECT _part_index, * FROM replacing FINAL ORDER BY k, _part_index; -DROP TABLE test.replacing; +DROP TABLE replacing; diff --git a/dbms/tests/queries/0_stateless/00326_long_function_multi_if.sql b/dbms/tests/queries/0_stateless/00326_long_function_multi_if.sql index ce6e696d992..3509a076e3c 100644 --- a/dbms/tests/queries/0_stateless/00326_long_function_multi_if.sql +++ b/dbms/tests/queries/0_stateless/00326_long_function_multi_if.sql @@ -1370,571 +1370,571 @@ SELECT multiIf((number % 2) = 0, [toFloat64(1), toFloat64(2)], (number % 3) = 0, SELECT 'String branches'; -DROP TABLE IF EXISTS test.multi_if_check; -CREATE TABLE test.multi_if_check(col1 UInt64, col2 String, col3 String, col4 String) ENGINE=TinyLog; -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(1, 'A', 'AB', 'ABC'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(2, 'B', 'BC', 'BCD'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(3, 'C', 'CD', 'CDE'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(4, 'D', 'DE', 'DEF'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(5, 'E', 'EF', 'EFG'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(6, 'F', 'FG', 'FGH'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(7, 'G', 'GH', 'GHI'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(8, 'H', 'HI', 'HIJ'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(9, 'I', 'IJ', 'IJK'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(10, 'J', 'JK', 'JKL'); +DROP TABLE IF EXISTS multi_if_check; +CREATE TABLE multi_if_check(col1 UInt64, col2 String, col3 String, col4 String) ENGINE=TinyLog; +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(1, 'A', 'AB', 'ABC'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(2, 'B', 'BC', 'BCD'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(3, 'C', 'CD', 'CDE'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(4, 'D', 'DE', 'DEF'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(5, 'E', 'EF', 'EFG'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(6, 'F', 'FG', 'FGH'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(7, 'G', 'GH', 'GHI'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(8, 'H', 'HI', 'HIJ'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(9, 'I', 'IJ', 'IJK'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(10, 'J', 'JK', 'JKL'); -SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, col3, col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, col3, toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, col3, toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, col3, 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, toFixedString(col3, 16), col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, toFixedString(col3, 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, toFixedString(col3, 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, toFixedString(col3, 16), 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, toFixedString('bar', 16), col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, toFixedString('bar', 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, toFixedString('bar', 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, toFixedString('bar', 16), 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, 'bar', col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, 'bar', toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, 'bar', toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, 'bar', 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, 1, col3, col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, 1, col3, toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, 1, col3, toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, 1, col3, 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, 1, toFixedString(col3, 16), col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, 1, toFixedString(col3, 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, 1, toFixedString(col3, 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, 1, toFixedString(col3, 16), 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, 1, toFixedString('bar', 16), col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, 1, toFixedString('bar', 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, 1, toFixedString('bar', 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, 1, toFixedString('bar', 16), 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, 1, 'bar', col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, 1, 'bar', toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, 1, 'bar', toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, col2, 1, 'bar', 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, col3, col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, col3, toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, col3, toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, col3, 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString(col3, 16), col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString(col3, 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString(col3, 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString(col3, 16), 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString('bar', 16), col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString('bar', 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString('bar', 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString('bar', 16), 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, 'bar', col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, 'bar', toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, 'bar', toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, 'bar', 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, col3, col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, col3, toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, col3, toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, col3, 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, toFixedString(col3, 16), col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, toFixedString(col3, 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, toFixedString(col3, 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, toFixedString(col3, 16), 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, toFixedString('bar', 16), col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, toFixedString('bar', 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, toFixedString('bar', 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, toFixedString('bar', 16), 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, 'bar', col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, 'bar', toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, 'bar', toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, 'bar', 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, col3, col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, col3, toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, col3, toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, col3, 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString(col3, 16), col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString(col3, 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString(col3, 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString(col3, 16), 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString('bar', 16), col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString('bar', 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString('bar', 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString('bar', 16), 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, 'bar', col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, 'bar', toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, 'bar', toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, 'bar', 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, col3, col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, col3, toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, col3, toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, col3, 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, toFixedString(col3, 16), col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, toFixedString(col3, 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, toFixedString(col3, 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, toFixedString(col3, 16), 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, toFixedString('bar', 16), col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, toFixedString('bar', 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, toFixedString('bar', 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, toFixedString('bar', 16), 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, 'bar', col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, 'bar', toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, 'bar', toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, 'bar', 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, col3, col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, col3, toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, col3, toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, col3, 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, toFixedString(col3, 16), col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, toFixedString(col3, 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, toFixedString(col3, 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, toFixedString(col3, 16), 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, toFixedString('bar', 16), col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, toFixedString('bar', 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, toFixedString('bar', 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, toFixedString('bar', 16), 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, 'bar', col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, 'bar', toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, 'bar', toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, 'bar', 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', 1, col3, col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', 1, col3, toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', 1, col3, toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', 1, col3, 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', 1, toFixedString(col3, 16), col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', 1, toFixedString(col3, 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', 1, toFixedString(col3, 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', 1, toFixedString(col3, 16), 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', 1, toFixedString('bar', 16), col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', 1, toFixedString('bar', 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', 1, toFixedString('bar', 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', 1, toFixedString('bar', 16), 'baz') FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', 1, 'bar', col4) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', 1, 'bar', toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', 1, 'bar', toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, 'foo', 1, 'bar', 'baz') FROM test.multi_if_check; -SELECT multiIf(1, col2, (col1 % 3) = 0, col3, col4) FROM test.multi_if_check; -SELECT multiIf(1, col2, (col1 % 3) = 0, col3, toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, col2, (col1 % 3) = 0, col3, toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, col2, (col1 % 3) = 0, col3, 'baz') FROM test.multi_if_check; -SELECT multiIf(1, col2, (col1 % 3) = 0, toFixedString(col3, 16), col4) FROM test.multi_if_check; -SELECT multiIf(1, col2, (col1 % 3) = 0, toFixedString(col3, 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, col2, (col1 % 3) = 0, toFixedString(col3, 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, col2, (col1 % 3) = 0, toFixedString(col3, 16), 'baz') FROM test.multi_if_check; -SELECT multiIf(1, col2, (col1 % 3) = 0, toFixedString('bar', 16), col4) FROM test.multi_if_check; -SELECT multiIf(1, col2, (col1 % 3) = 0, toFixedString('bar', 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, col2, (col1 % 3) = 0, toFixedString('bar', 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, col2, (col1 % 3) = 0, toFixedString('bar', 16), 'baz') FROM test.multi_if_check; -SELECT multiIf(1, col2, (col1 % 3) = 0, 'bar', col4) FROM test.multi_if_check; -SELECT multiIf(1, col2, (col1 % 3) = 0, 'bar', toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, col2, (col1 % 3) = 0, 'bar', toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, col2, (col1 % 3) = 0, 'bar', 'baz') FROM test.multi_if_check; -SELECT multiIf(1, col2, 1, col3, col4) FROM test.multi_if_check; -SELECT multiIf(1, col2, 1, col3, toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, col2, 1, col3, toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, col2, 1, col3, 'baz') FROM test.multi_if_check; -SELECT multiIf(1, col2, 1, toFixedString(col3, 16), col4) FROM test.multi_if_check; -SELECT multiIf(1, col2, 1, toFixedString(col3, 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, col2, 1, toFixedString(col3, 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, col2, 1, toFixedString(col3, 16), 'baz') FROM test.multi_if_check; -SELECT multiIf(1, col2, 1, toFixedString('bar', 16), col4) FROM test.multi_if_check; -SELECT multiIf(1, col2, 1, toFixedString('bar', 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, col2, 1, toFixedString('bar', 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, col2, 1, toFixedString('bar', 16), 'baz') FROM test.multi_if_check; -SELECT multiIf(1, col2, 1, 'bar', col4) FROM test.multi_if_check; -SELECT multiIf(1, col2, 1, 'bar', toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, col2, 1, 'bar', toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, col2, 1, 'bar', 'baz') FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, col3, col4) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, col3, toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, col3, toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, col3, 'baz') FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString(col3, 16), col4) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString(col3, 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString(col3, 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString(col3, 16), 'baz') FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString('bar', 16), col4) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString('bar', 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString('bar', 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString('bar', 16), 'baz') FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, 'bar', col4) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, 'bar', toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, 'bar', toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, 'bar', 'baz') FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), 1, col3, col4) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), 1, col3, toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), 1, col3, toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), 1, col3, 'baz') FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), 1, toFixedString(col3, 16), col4) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), 1, toFixedString(col3, 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), 1, toFixedString(col3, 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), 1, toFixedString(col3, 16), 'baz') FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), 1, toFixedString('bar', 16), col4) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), 1, toFixedString('bar', 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), 1, toFixedString('bar', 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), 1, toFixedString('bar', 16), 'baz') FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), 1, 'bar', col4) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), 1, 'bar', toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), 1, 'bar', toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString(col2, 16), 1, 'bar', 'baz') FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, col3, col4) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, col3, toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, col3, toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, col3, 'baz') FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString(col3, 16), col4) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString(col3, 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString(col3, 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString(col3, 16), 'baz') FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString('bar', 16), col4) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString('bar', 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString('bar', 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString('bar', 16), 'baz') FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, 'bar', col4) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, 'bar', toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, 'bar', toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, 'bar', 'baz') FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), 1, col3, col4) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), 1, col3, toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), 1, col3, toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), 1, col3, 'baz') FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), 1, toFixedString(col3, 16), col4) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), 1, toFixedString(col3, 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), 1, toFixedString(col3, 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), 1, toFixedString(col3, 16), 'baz') FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), 1, toFixedString('bar', 16), col4) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), 1, toFixedString('bar', 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), 1, toFixedString('bar', 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), 1, toFixedString('bar', 16), 'baz') FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), 1, 'bar', col4) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), 1, 'bar', toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), 1, 'bar', toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, toFixedString('foo', 16), 1, 'bar', 'baz') FROM test.multi_if_check; -SELECT multiIf(1, 'foo', (col1 % 3) = 0, col3, col4) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', (col1 % 3) = 0, col3, toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', (col1 % 3) = 0, col3, toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', (col1 % 3) = 0, col3, 'baz') FROM test.multi_if_check; -SELECT multiIf(1, 'foo', (col1 % 3) = 0, toFixedString(col3, 16), col4) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', (col1 % 3) = 0, toFixedString(col3, 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', (col1 % 3) = 0, toFixedString(col3, 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', (col1 % 3) = 0, toFixedString(col3, 16), 'baz') FROM test.multi_if_check; -SELECT multiIf(1, 'foo', (col1 % 3) = 0, toFixedString('bar', 16), col4) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', (col1 % 3) = 0, toFixedString('bar', 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', (col1 % 3) = 0, toFixedString('bar', 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', (col1 % 3) = 0, toFixedString('bar', 16), 'baz') FROM test.multi_if_check; -SELECT multiIf(1, 'foo', (col1 % 3) = 0, 'bar', col4) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', (col1 % 3) = 0, 'bar', toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', (col1 % 3) = 0, 'bar', toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', (col1 % 3) = 0, 'bar', 'baz') FROM test.multi_if_check; -SELECT multiIf(1, 'foo', 1, col3, col4) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', 1, col3, toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', 1, col3, toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', 1, col3, 'baz') FROM test.multi_if_check; -SELECT multiIf(1, 'foo', 1, toFixedString(col3, 16), col4) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', 1, toFixedString(col3, 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', 1, toFixedString(col3, 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', 1, toFixedString(col3, 16), 'baz') FROM test.multi_if_check; -SELECT multiIf(1, 'foo', 1, toFixedString('bar', 16), col4) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', 1, toFixedString('bar', 16), toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', 1, toFixedString('bar', 16), toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', 1, toFixedString('bar', 16), 'baz') FROM test.multi_if_check; -SELECT multiIf(1, 'foo', 1, 'bar', col4) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', 1, 'bar', toFixedString(col4, 16)) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', 1, 'bar', toFixedString('baz', 16)) FROM test.multi_if_check; -SELECT multiIf(1, 'foo', 1, 'bar', 'baz') FROM test.multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, col3, col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, col3, toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, col3, toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, col3, 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, toFixedString(col3, 16), col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, toFixedString(col3, 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, toFixedString(col3, 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, toFixedString(col3, 16), 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, toFixedString('bar', 16), col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, toFixedString('bar', 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, toFixedString('bar', 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, toFixedString('bar', 16), 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, 'bar', col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, 'bar', toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, 'bar', toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, (col1 % 3) = 0, 'bar', 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, 1, col3, col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, 1, col3, toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, 1, col3, toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, 1, col3, 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, 1, toFixedString(col3, 16), col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, 1, toFixedString(col3, 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, 1, toFixedString(col3, 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, 1, toFixedString(col3, 16), 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, 1, toFixedString('bar', 16), col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, 1, toFixedString('bar', 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, 1, toFixedString('bar', 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, 1, toFixedString('bar', 16), 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, 1, 'bar', col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, 1, 'bar', toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, 1, 'bar', toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, col2, 1, 'bar', 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, col3, col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, col3, toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, col3, toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, col3, 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString(col3, 16), col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString(col3, 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString(col3, 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString(col3, 16), 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString('bar', 16), col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString('bar', 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString('bar', 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString('bar', 16), 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, 'bar', col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, 'bar', toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, 'bar', toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), (col1 % 3) = 0, 'bar', 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, col3, col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, col3, toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, col3, toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, col3, 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, toFixedString(col3, 16), col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, toFixedString(col3, 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, toFixedString(col3, 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, toFixedString(col3, 16), 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, toFixedString('bar', 16), col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, toFixedString('bar', 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, toFixedString('bar', 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, toFixedString('bar', 16), 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, 'bar', col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, 'bar', toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, 'bar', toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString(col2, 16), 1, 'bar', 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, col3, col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, col3, toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, col3, toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, col3, 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString(col3, 16), col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString(col3, 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString(col3, 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString(col3, 16), 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString('bar', 16), col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString('bar', 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString('bar', 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString('bar', 16), 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, 'bar', col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, 'bar', toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, 'bar', toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), (col1 % 3) = 0, 'bar', 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, col3, col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, col3, toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, col3, toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, col3, 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, toFixedString(col3, 16), col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, toFixedString(col3, 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, toFixedString(col3, 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, toFixedString(col3, 16), 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, toFixedString('bar', 16), col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, toFixedString('bar', 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, toFixedString('bar', 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, toFixedString('bar', 16), 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, 'bar', col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, 'bar', toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, 'bar', toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, toFixedString('foo', 16), 1, 'bar', 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, col3, col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, col3, toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, col3, toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, col3, 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, toFixedString(col3, 16), col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, toFixedString(col3, 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, toFixedString(col3, 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, toFixedString(col3, 16), 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, toFixedString('bar', 16), col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, toFixedString('bar', 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, toFixedString('bar', 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, toFixedString('bar', 16), 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, 'bar', col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, 'bar', toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, 'bar', toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', (col1 % 3) = 0, 'bar', 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', 1, col3, col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', 1, col3, toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', 1, col3, toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', 1, col3, 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', 1, toFixedString(col3, 16), col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', 1, toFixedString(col3, 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', 1, toFixedString(col3, 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', 1, toFixedString(col3, 16), 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', 1, toFixedString('bar', 16), col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', 1, toFixedString('bar', 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', 1, toFixedString('bar', 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', 1, toFixedString('bar', 16), 'baz') FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', 1, 'bar', col4) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', 1, 'bar', toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', 1, 'bar', toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, 'foo', 1, 'bar', 'baz') FROM multi_if_check; +SELECT multiIf(1, col2, (col1 % 3) = 0, col3, col4) FROM multi_if_check; +SELECT multiIf(1, col2, (col1 % 3) = 0, col3, toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, col2, (col1 % 3) = 0, col3, toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, col2, (col1 % 3) = 0, col3, 'baz') FROM multi_if_check; +SELECT multiIf(1, col2, (col1 % 3) = 0, toFixedString(col3, 16), col4) FROM multi_if_check; +SELECT multiIf(1, col2, (col1 % 3) = 0, toFixedString(col3, 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, col2, (col1 % 3) = 0, toFixedString(col3, 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, col2, (col1 % 3) = 0, toFixedString(col3, 16), 'baz') FROM multi_if_check; +SELECT multiIf(1, col2, (col1 % 3) = 0, toFixedString('bar', 16), col4) FROM multi_if_check; +SELECT multiIf(1, col2, (col1 % 3) = 0, toFixedString('bar', 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, col2, (col1 % 3) = 0, toFixedString('bar', 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, col2, (col1 % 3) = 0, toFixedString('bar', 16), 'baz') FROM multi_if_check; +SELECT multiIf(1, col2, (col1 % 3) = 0, 'bar', col4) FROM multi_if_check; +SELECT multiIf(1, col2, (col1 % 3) = 0, 'bar', toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, col2, (col1 % 3) = 0, 'bar', toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, col2, (col1 % 3) = 0, 'bar', 'baz') FROM multi_if_check; +SELECT multiIf(1, col2, 1, col3, col4) FROM multi_if_check; +SELECT multiIf(1, col2, 1, col3, toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, col2, 1, col3, toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, col2, 1, col3, 'baz') FROM multi_if_check; +SELECT multiIf(1, col2, 1, toFixedString(col3, 16), col4) FROM multi_if_check; +SELECT multiIf(1, col2, 1, toFixedString(col3, 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, col2, 1, toFixedString(col3, 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, col2, 1, toFixedString(col3, 16), 'baz') FROM multi_if_check; +SELECT multiIf(1, col2, 1, toFixedString('bar', 16), col4) FROM multi_if_check; +SELECT multiIf(1, col2, 1, toFixedString('bar', 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, col2, 1, toFixedString('bar', 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, col2, 1, toFixedString('bar', 16), 'baz') FROM multi_if_check; +SELECT multiIf(1, col2, 1, 'bar', col4) FROM multi_if_check; +SELECT multiIf(1, col2, 1, 'bar', toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, col2, 1, 'bar', toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, col2, 1, 'bar', 'baz') FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, col3, col4) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, col3, toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, col3, toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, col3, 'baz') FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString(col3, 16), col4) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString(col3, 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString(col3, 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString(col3, 16), 'baz') FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString('bar', 16), col4) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString('bar', 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString('bar', 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, toFixedString('bar', 16), 'baz') FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, 'bar', col4) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, 'bar', toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, 'bar', toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), (col1 % 3) = 0, 'bar', 'baz') FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), 1, col3, col4) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), 1, col3, toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), 1, col3, toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), 1, col3, 'baz') FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), 1, toFixedString(col3, 16), col4) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), 1, toFixedString(col3, 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), 1, toFixedString(col3, 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), 1, toFixedString(col3, 16), 'baz') FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), 1, toFixedString('bar', 16), col4) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), 1, toFixedString('bar', 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), 1, toFixedString('bar', 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), 1, toFixedString('bar', 16), 'baz') FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), 1, 'bar', col4) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), 1, 'bar', toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), 1, 'bar', toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString(col2, 16), 1, 'bar', 'baz') FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, col3, col4) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, col3, toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, col3, toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, col3, 'baz') FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString(col3, 16), col4) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString(col3, 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString(col3, 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString(col3, 16), 'baz') FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString('bar', 16), col4) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString('bar', 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString('bar', 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, toFixedString('bar', 16), 'baz') FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, 'bar', col4) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, 'bar', toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, 'bar', toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), (col1 % 3) = 0, 'bar', 'baz') FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), 1, col3, col4) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), 1, col3, toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), 1, col3, toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), 1, col3, 'baz') FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), 1, toFixedString(col3, 16), col4) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), 1, toFixedString(col3, 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), 1, toFixedString(col3, 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), 1, toFixedString(col3, 16), 'baz') FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), 1, toFixedString('bar', 16), col4) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), 1, toFixedString('bar', 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), 1, toFixedString('bar', 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), 1, toFixedString('bar', 16), 'baz') FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), 1, 'bar', col4) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), 1, 'bar', toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), 1, 'bar', toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, toFixedString('foo', 16), 1, 'bar', 'baz') FROM multi_if_check; +SELECT multiIf(1, 'foo', (col1 % 3) = 0, col3, col4) FROM multi_if_check; +SELECT multiIf(1, 'foo', (col1 % 3) = 0, col3, toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, 'foo', (col1 % 3) = 0, col3, toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, 'foo', (col1 % 3) = 0, col3, 'baz') FROM multi_if_check; +SELECT multiIf(1, 'foo', (col1 % 3) = 0, toFixedString(col3, 16), col4) FROM multi_if_check; +SELECT multiIf(1, 'foo', (col1 % 3) = 0, toFixedString(col3, 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, 'foo', (col1 % 3) = 0, toFixedString(col3, 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, 'foo', (col1 % 3) = 0, toFixedString(col3, 16), 'baz') FROM multi_if_check; +SELECT multiIf(1, 'foo', (col1 % 3) = 0, toFixedString('bar', 16), col4) FROM multi_if_check; +SELECT multiIf(1, 'foo', (col1 % 3) = 0, toFixedString('bar', 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, 'foo', (col1 % 3) = 0, toFixedString('bar', 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, 'foo', (col1 % 3) = 0, toFixedString('bar', 16), 'baz') FROM multi_if_check; +SELECT multiIf(1, 'foo', (col1 % 3) = 0, 'bar', col4) FROM multi_if_check; +SELECT multiIf(1, 'foo', (col1 % 3) = 0, 'bar', toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, 'foo', (col1 % 3) = 0, 'bar', toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, 'foo', (col1 % 3) = 0, 'bar', 'baz') FROM multi_if_check; +SELECT multiIf(1, 'foo', 1, col3, col4) FROM multi_if_check; +SELECT multiIf(1, 'foo', 1, col3, toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, 'foo', 1, col3, toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, 'foo', 1, col3, 'baz') FROM multi_if_check; +SELECT multiIf(1, 'foo', 1, toFixedString(col3, 16), col4) FROM multi_if_check; +SELECT multiIf(1, 'foo', 1, toFixedString(col3, 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, 'foo', 1, toFixedString(col3, 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, 'foo', 1, toFixedString(col3, 16), 'baz') FROM multi_if_check; +SELECT multiIf(1, 'foo', 1, toFixedString('bar', 16), col4) FROM multi_if_check; +SELECT multiIf(1, 'foo', 1, toFixedString('bar', 16), toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, 'foo', 1, toFixedString('bar', 16), toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, 'foo', 1, toFixedString('bar', 16), 'baz') FROM multi_if_check; +SELECT multiIf(1, 'foo', 1, 'bar', col4) FROM multi_if_check; +SELECT multiIf(1, 'foo', 1, 'bar', toFixedString(col4, 16)) FROM multi_if_check; +SELECT multiIf(1, 'foo', 1, 'bar', toFixedString('baz', 16)) FROM multi_if_check; +SELECT multiIf(1, 'foo', 1, 'bar', 'baz') FROM multi_if_check; -DROP TABLE IF EXISTS test.multi_if_check; +DROP TABLE IF EXISTS multi_if_check; SELECT 'String array branches'; -CREATE TABLE test.multi_if_check(col1 UInt64, col2 String, col3 String, col4 String, col5 String, col6 String, col7 String) ENGINE=TinyLog; -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(1, 'A', 'AB', 'ABC', 'ABCD', 'ABCDE', 'ABCDEF'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(2, 'B', 'BC', 'BCD', 'BCDE', 'BCDEF', 'BCDEFG'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(3, 'C', 'CD', 'CDE', 'CDEF', 'CDEFG', 'CDEFGH'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(4, 'D', 'DE', 'DEF', 'DEFG', 'DEFGH', 'DEFGHI'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(5, 'E', 'EF', 'EFG', 'EFGH', 'EFGHI', 'EFGHIJ'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(6, 'F', 'FG', 'FGH', 'FGHI', 'FGHIJ', 'FGHIJK'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(7, 'G', 'GH', 'GHI', 'GHIJ', 'GHIJK', 'GHIJKL'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(8, 'H', 'HI', 'HIJ', 'HIJK', 'HIJKL', 'HIJKLM'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(9, 'I', 'IJ', 'IJK', 'IJKL', 'IJKLM', 'IJKLMN'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(10, 'J', 'JK', 'JKL', 'JKLM', 'JKLMN', 'JKLMNO'); +CREATE TABLE multi_if_check(col1 UInt64, col2 String, col3 String, col4 String, col5 String, col6 String, col7 String) ENGINE=TinyLog; +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(1, 'A', 'AB', 'ABC', 'ABCD', 'ABCDE', 'ABCDEF'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(2, 'B', 'BC', 'BCD', 'BCDE', 'BCDEF', 'BCDEFG'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(3, 'C', 'CD', 'CDE', 'CDEF', 'CDEFG', 'CDEFGH'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(4, 'D', 'DE', 'DEF', 'DEFG', 'DEFGH', 'DEFGHI'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(5, 'E', 'EF', 'EFG', 'EFGH', 'EFGHI', 'EFGHIJ'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(6, 'F', 'FG', 'FGH', 'FGHI', 'FGHIJ', 'FGHIJK'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(7, 'G', 'GH', 'GHI', 'GHIJ', 'GHIJK', 'GHIJKL'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(8, 'H', 'HI', 'HIJ', 'HIJK', 'HIJKL', 'HIJKLM'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(9, 'I', 'IJ', 'IJK', 'IJKL', 'IJKLM', 'IJKLMN'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(10, 'J', 'JK', 'JKL', 'JKLM', 'JKLMN', 'JKLMNO'); -SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, [col4, col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, [col4, col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, [col4, col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, [col4, col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, [col4, 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, [col4, 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, [col4, 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, [col4, 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, ['foo', col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, ['foo', col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, ['foo', col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, ['foo', col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, ['foo', 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, ['foo', 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, ['foo', 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, ['foo', 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, [col4, col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, [col4, col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, [col4, col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, [col4, col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, [col4, 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, [col4, 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, [col4, 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, [col4, 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, ['foo', col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, ['foo', col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, ['foo', col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, ['foo', col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, ['foo', 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, ['foo', 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, ['foo', 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, ['foo', 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, [col4, col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, [col4, col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, [col4, col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, [col4, col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, [col4, 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, [col4, 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, [col4, 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, [col4, 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, ['foo', col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, ['foo', col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, ['foo', col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, ['foo', col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, ['foo', 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, ['foo', 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, ['foo', 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, ['foo', 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, [col4, col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, [col4, col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, [col4, col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, [col4, col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, [col4, 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, [col4, 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, [col4, 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, [col4, 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, ['foo', col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, ['foo', col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, ['foo', col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, ['foo', col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, ['foo', 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, ['foo', 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, ['foo', 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, ['foo', 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, [col4, col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, [col4, col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, [col4, col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, [col4, col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, [col4, 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, [col4, 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, [col4, 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, [col4, 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, ['foo', col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, ['foo', col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, ['foo', col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, ['foo', col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, ['foo', 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, ['foo', 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, ['foo', 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, ['foo', 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, [col4, col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, [col4, col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, [col4, col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, [col4, col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, [col4, 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, [col4, 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, [col4, 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, [col4, 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, ['foo', col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, ['foo', col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, ['foo', col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, ['foo', col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, ['foo', 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, ['foo', 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, ['foo', 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, ['foo', 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, [col4, col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, [col4, col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, [col4, col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, [col4, col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, [col4, 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, [col4, 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, [col4, 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, [col4, 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, ['foo', col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, ['foo', col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, ['foo', col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, ['foo', col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, ['foo', 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, ['foo', 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, ['foo', 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, ['foo', 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, [col4, col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, [col4, col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, [col4, col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, [col4, col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, [col4, 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, [col4, 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, [col4, 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, [col4, 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, ['foo', col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, ['foo', col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, ['foo', col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, ['foo', col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, ['foo', 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, ['foo', 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, ['foo', 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, ['foo', 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, [col4, col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, [col4, col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, [col4, col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, [col4, col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, [col4, 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, [col4, 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, [col4, 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, [col4, 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, ['foo', col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, ['foo', col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, ['foo', col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, ['foo', col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, ['foo', 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, ['foo', 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, ['foo', 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, ['foo', 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], 1, [col4, col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], 1, [col4, col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], 1, [col4, col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], 1, [col4, col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], 1, [col4, 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], 1, [col4, 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], 1, [col4, 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], 1, [col4, 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], 1, ['foo', col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], 1, ['foo', col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], 1, ['foo', col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], 1, ['foo', col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], 1, ['foo', 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], 1, ['foo', 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], 1, ['foo', 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, col3], 1, ['foo', 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, [col4, col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, [col4, col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, [col4, col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, [col4, col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, [col4, 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, [col4, 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, [col4, 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, [col4, 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, ['foo', col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, ['foo', col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, ['foo', col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, ['foo', col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, ['foo', 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, ['foo', 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, ['foo', 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, ['foo', 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], 1, [col4, col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], 1, [col4, col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], 1, [col4, col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], 1, [col4, col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], 1, [col4, 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], 1, [col4, 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], 1, [col4, 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], 1, [col4, 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], 1, ['foo', col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], 1, ['foo', col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], 1, ['foo', col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], 1, ['foo', col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], 1, ['foo', 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], 1, ['foo', 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], 1, ['foo', 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, [col2, 'bar'], 1, ['foo', 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, [col4, col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, [col4, col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, [col4, col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, [col4, col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, [col4, 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, [col4, 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, [col4, 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, [col4, 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, ['foo', col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, ['foo', col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, ['foo', col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, ['foo', col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, ['foo', 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, ['foo', 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, ['foo', 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, ['foo', 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], 1, [col4, col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], 1, [col4, col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], 1, [col4, col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], 1, [col4, col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], 1, [col4, 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], 1, [col4, 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], 1, [col4, 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], 1, [col4, 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], 1, ['foo', col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], 1, ['foo', col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], 1, ['foo', col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], 1, ['foo', col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], 1, ['foo', 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], 1, ['foo', 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], 1, ['foo', 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', col3], 1, ['foo', 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, [col4, col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, [col4, col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, [col4, col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, [col4, col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, [col4, 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, [col4, 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, [col4, 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, [col4, 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, ['foo', col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, ['foo', col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, ['foo', col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, ['foo', col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, ['foo', 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, ['foo', 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, ['foo', 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, ['foo', 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], 1, [col4, col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], 1, [col4, col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], 1, [col4, col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], 1, [col4, col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], 1, [col4, 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], 1, [col4, 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], 1, [col4, 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], 1, [col4, 'bar'], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], 1, ['foo', col5], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], 1, ['foo', col5], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], 1, ['foo', col5], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], 1, ['foo', col5], ['foo', 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], 1, ['foo', 'bar'], [col6, col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], 1, ['foo', 'bar'], [col6, 'bar']) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], 1, ['foo', 'bar'], ['foo', col7]) FROM test.multi_if_check; -SELECT multiIf(1, ['foo', 'bar'], 1, ['foo', 'bar'], ['foo', 'bar']) FROM test.multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, [col4, col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, [col4, col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, [col4, col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, [col4, col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, [col4, 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, [col4, 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, [col4, 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, [col4, 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, ['foo', col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, ['foo', col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, ['foo', col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, ['foo', col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, ['foo', 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, ['foo', 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, ['foo', 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], (col1 % 3) = 0, ['foo', 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, [col4, col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, [col4, col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, [col4, col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, [col4, col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, [col4, 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, [col4, 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, [col4, 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, [col4, 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, ['foo', col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, ['foo', col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, ['foo', col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, ['foo', col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, ['foo', 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, ['foo', 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, ['foo', 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, col3], 1, ['foo', 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, [col4, col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, [col4, col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, [col4, col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, [col4, col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, [col4, 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, [col4, 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, [col4, 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, [col4, 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, ['foo', col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, ['foo', col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, ['foo', col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, ['foo', col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, ['foo', 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, ['foo', 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, ['foo', 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], (col1 % 3) = 0, ['foo', 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, [col4, col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, [col4, col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, [col4, col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, [col4, col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, [col4, 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, [col4, 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, [col4, 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, [col4, 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, ['foo', col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, ['foo', col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, ['foo', col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, ['foo', col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, ['foo', 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, ['foo', 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, ['foo', 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, [col2, 'bar'], 1, ['foo', 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, [col4, col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, [col4, col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, [col4, col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, [col4, col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, [col4, 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, [col4, 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, [col4, 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, [col4, 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, ['foo', col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, ['foo', col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, ['foo', col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, ['foo', col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, ['foo', 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, ['foo', 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, ['foo', 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], (col1 % 3) = 0, ['foo', 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, [col4, col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, [col4, col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, [col4, col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, [col4, col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, [col4, 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, [col4, 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, [col4, 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, [col4, 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, ['foo', col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, ['foo', col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, ['foo', col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, ['foo', col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, ['foo', 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, ['foo', 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, ['foo', 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', col3], 1, ['foo', 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, [col4, col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, [col4, col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, [col4, col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, [col4, col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, [col4, 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, [col4, 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, [col4, 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, [col4, 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, ['foo', col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, ['foo', col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, ['foo', col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, ['foo', col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, ['foo', 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, ['foo', 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, ['foo', 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], (col1 % 3) = 0, ['foo', 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, [col4, col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, [col4, col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, [col4, col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, [col4, col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, [col4, 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, [col4, 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, [col4, 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, [col4, 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, ['foo', col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, ['foo', col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, ['foo', col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, ['foo', col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, ['foo', 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, ['foo', 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, ['foo', 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf((col1 % 2) = 0, ['foo', 'bar'], 1, ['foo', 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, [col4, col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, [col4, col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, [col4, col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, [col4, col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, [col4, 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, [col4, 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, [col4, 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, [col4, 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, ['foo', col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, ['foo', col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, ['foo', col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, ['foo', col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, ['foo', 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, ['foo', 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, ['foo', 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], (col1 % 3) = 0, ['foo', 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], 1, [col4, col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], 1, [col4, col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], 1, [col4, col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], 1, [col4, col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], 1, [col4, 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], 1, [col4, 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], 1, [col4, 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], 1, [col4, 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], 1, ['foo', col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], 1, ['foo', col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], 1, ['foo', col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], 1, ['foo', col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], 1, ['foo', 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], 1, ['foo', 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], 1, ['foo', 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, col3], 1, ['foo', 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, [col4, col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, [col4, col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, [col4, col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, [col4, col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, [col4, 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, [col4, 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, [col4, 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, [col4, 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, ['foo', col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, ['foo', col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, ['foo', col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, ['foo', col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, ['foo', 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, ['foo', 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, ['foo', 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], (col1 % 3) = 0, ['foo', 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], 1, [col4, col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], 1, [col4, col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], 1, [col4, col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], 1, [col4, col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], 1, [col4, 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], 1, [col4, 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], 1, [col4, 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], 1, [col4, 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], 1, ['foo', col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], 1, ['foo', col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], 1, ['foo', col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], 1, ['foo', col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], 1, ['foo', 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], 1, ['foo', 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], 1, ['foo', 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, [col2, 'bar'], 1, ['foo', 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, [col4, col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, [col4, col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, [col4, col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, [col4, col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, [col4, 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, [col4, 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, [col4, 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, [col4, 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, ['foo', col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, ['foo', col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, ['foo', col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, ['foo', col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, ['foo', 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, ['foo', 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, ['foo', 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], (col1 % 3) = 0, ['foo', 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], 1, [col4, col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], 1, [col4, col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], 1, [col4, col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], 1, [col4, col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], 1, [col4, 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], 1, [col4, 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], 1, [col4, 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], 1, [col4, 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], 1, ['foo', col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], 1, ['foo', col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], 1, ['foo', col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], 1, ['foo', col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], 1, ['foo', 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], 1, ['foo', 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], 1, ['foo', 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', col3], 1, ['foo', 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, [col4, col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, [col4, col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, [col4, col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, [col4, col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, [col4, 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, [col4, 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, [col4, 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, [col4, 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, ['foo', col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, ['foo', col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, ['foo', col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, ['foo', col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, ['foo', 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, ['foo', 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, ['foo', 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], (col1 % 3) = 0, ['foo', 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], 1, [col4, col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], 1, [col4, col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], 1, [col4, col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], 1, [col4, col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], 1, [col4, 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], 1, [col4, 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], 1, [col4, 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], 1, [col4, 'bar'], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], 1, ['foo', col5], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], 1, ['foo', col5], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], 1, ['foo', col5], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], 1, ['foo', col5], ['foo', 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], 1, ['foo', 'bar'], [col6, col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], 1, ['foo', 'bar'], [col6, 'bar']) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], 1, ['foo', 'bar'], ['foo', col7]) FROM multi_if_check; +SELECT multiIf(1, ['foo', 'bar'], 1, ['foo', 'bar'], ['foo', 'bar']) FROM multi_if_check; -DROP TABLE IF EXISTS test.multi_if_check; +DROP TABLE IF EXISTS multi_if_check; SELECT 'Miscellaneous'; -CREATE TABLE test.multi_if_check(col1 UInt64) ENGINE=TinyLog; -INSERT INTO test.multi_if_check(col1) VALUES (11225),(20273),(213),(240),(12),(187),(29252); -INSERT INTO test.multi_if_check(col1) VALUES (1),(65),(208),(9),(154),(20),(191),(2),(66),(970),(56),(144),(49),(10317),(145),(21623),(225); -INSERT INTO test.multi_if_check(col1) VALUES (10658),(11182),(11036),(194),(16),(54),(23),(172),(10748),(52),(63),(11282),(237),(55),(190); -INSERT INTO test.multi_if_check(col1) VALUES (11162),(197),(4),(64),(17),(59),(51),(1091),(14),(13),(10645),(73),(157),(169),(43),(47),(11111); -INSERT INTO test.multi_if_check(col1) VALUES (11002),(99),(42),(142),(40),(20259),(15),(976),(11220),(193),(21),(3),(973),(35),(148),(10277),(10253); -INSERT INTO test.multi_if_check(col1) VALUES (155),(972),(159),(959),(39),(50),(236),(969),(114678),(143),(37),(20167),(20086),(10536),(28948),(10355); -INSERT INTO test.multi_if_check(col1) VALUES (7),(192),(11119),(67),(6),(8),(10841),(141),(10951),(222),(10752),(10363),(10842),(24881),(11287),(198); -INSERT INTO test.multi_if_check(col1) VALUES (11453),(26),(147),(44),(19),(76),(29349),(10987),(28896),(75),(11168),(11084),(62),(46),(10747),(24); -INSERT INTO test.multi_if_check(col1) VALUES (10664),(966),(11256),(53),(10945),(10871),(158),(20544),(20540),(163),(10262),(11080),(0),(11159),(239); -INSERT INTO test.multi_if_check(col1) VALUES (10995),(11),(11143),(11212),(24893),(10318),(68),(21949),(28),(971),(153),(10689),(38),(11474),(11029); -INSERT INTO test.multi_if_check(col1) VALUES (11067),(21636),(965),(10761),(10324),(164),(977),(45),(10),(10944),(964),(20224),(20536),(102880),(33); -INSERT INTO test.multi_if_check(col1) VALUES (11232),(10315),(78),(11217),(10373),(11514),(10343),(48),(22),(20197),(10367),(36),(11116),(195),(10274); -INSERT INTO test.multi_if_check(col1) VALUES (115),(11069),(30),(11266),(10891),(11235),(112529),(206),(10393),(10712),(10649),(11164),(10511),(10295); -INSERT INTO test.multi_if_check(col1) VALUES (11139),(10347),(146),(11079),(961),(11231),(10358),(10653),(11358),(165),(11115),(1095),(960),(10992),(20221); -INSERT INTO test.multi_if_check(col1) VALUES (5),(10716),(102),(974),(10691),(102444),(11391),(10897),(10306),(10298),(10896),(21609),(118),(11148),(11451); -INSERT INTO test.multi_if_check(col1) VALUES (10398),(221),(975),(80),(162),(28051),(10838),(10765),(1058),(11464),(74),(21134),(21422),(10313),(28401),(20539); -INSERT INTO test.multi_if_check(col1) VALUES (10418),(235),(25),(179),(26030),(28381),(11091),(27398),(11108),(968),(10300),(11469),(35393),(10733),(11283),(11202); +CREATE TABLE multi_if_check(col1 UInt64) ENGINE=TinyLog; +INSERT INTO multi_if_check(col1) VALUES (11225),(20273),(213),(240),(12),(187),(29252); +INSERT INTO multi_if_check(col1) VALUES (1),(65),(208),(9),(154),(20),(191),(2),(66),(970),(56),(144),(49),(10317),(145),(21623),(225); +INSERT INTO multi_if_check(col1) VALUES (10658),(11182),(11036),(194),(16),(54),(23),(172),(10748),(52),(63),(11282),(237),(55),(190); +INSERT INTO multi_if_check(col1) VALUES (11162),(197),(4),(64),(17),(59),(51),(1091),(14),(13),(10645),(73),(157),(169),(43),(47),(11111); +INSERT INTO multi_if_check(col1) VALUES (11002),(99),(42),(142),(40),(20259),(15),(976),(11220),(193),(21),(3),(973),(35),(148),(10277),(10253); +INSERT INTO multi_if_check(col1) VALUES (155),(972),(159),(959),(39),(50),(236),(969),(114678),(143),(37),(20167),(20086),(10536),(28948),(10355); +INSERT INTO multi_if_check(col1) VALUES (7),(192),(11119),(67),(6),(8),(10841),(141),(10951),(222),(10752),(10363),(10842),(24881),(11287),(198); +INSERT INTO multi_if_check(col1) VALUES (11453),(26),(147),(44),(19),(76),(29349),(10987),(28896),(75),(11168),(11084),(62),(46),(10747),(24); +INSERT INTO multi_if_check(col1) VALUES (10664),(966),(11256),(53),(10945),(10871),(158),(20544),(20540),(163),(10262),(11080),(0),(11159),(239); +INSERT INTO multi_if_check(col1) VALUES (10995),(11),(11143),(11212),(24893),(10318),(68),(21949),(28),(971),(153),(10689),(38),(11474),(11029); +INSERT INTO multi_if_check(col1) VALUES (11067),(21636),(965),(10761),(10324),(164),(977),(45),(10),(10944),(964),(20224),(20536),(102880),(33); +INSERT INTO multi_if_check(col1) VALUES (11232),(10315),(78),(11217),(10373),(11514),(10343),(48),(22),(20197),(10367),(36),(11116),(195),(10274); +INSERT INTO multi_if_check(col1) VALUES (115),(11069),(30),(11266),(10891),(11235),(112529),(206),(10393),(10712),(10649),(11164),(10511),(10295); +INSERT INTO multi_if_check(col1) VALUES (11139),(10347),(146),(11079),(961),(11231),(10358),(10653),(11358),(165),(11115),(1095),(960),(10992),(20221); +INSERT INTO multi_if_check(col1) VALUES (5),(10716),(102),(974),(10691),(102444),(11391),(10897),(10306),(10298),(10896),(21609),(118),(11148),(11451); +INSERT INTO multi_if_check(col1) VALUES (10398),(221),(975),(80),(162),(28051),(10838),(10765),(1058),(11464),(74),(21134),(21422),(10313),(28401),(20539); +INSERT INTO multi_if_check(col1) VALUES (10418),(235),(25),(179),(26030),(28381),(11091),(27398),(11108),(968),(10300),(11469),(35393),(10733),(11283),(11202); -SELECT DISTINCT col1, multiIf(col1 != 213, 'Москва', 'Мир') AS k FROM test.multi_if_check LIMIT 10; -DROP TABLE IF EXISTS test.multi_if_check; +SELECT DISTINCT col1, multiIf(col1 != 213, 'Москва', 'Мир') AS k FROM multi_if_check LIMIT 10; +DROP TABLE IF EXISTS multi_if_check; diff --git a/dbms/tests/queries/0_stateless/00327_summing_composite_nested.sql b/dbms/tests/queries/0_stateless/00327_summing_composite_nested.sql index e21389528e4..73efd231a83 100644 --- a/dbms/tests/queries/0_stateless/00327_summing_composite_nested.sql +++ b/dbms/tests/queries/0_stateless/00327_summing_composite_nested.sql @@ -1,28 +1,28 @@ -DROP TABLE IF EXISTS test.summing_composite_key; -CREATE TABLE test.summing_composite_key (d Date, k UInt64, FirstMap Nested(k1 UInt32, k2ID Int8, s Float64), SecondMap Nested(k1ID UInt64, k2Key UInt32, k3Type Int32, s Int64)) ENGINE = SummingMergeTree(d, k, 1); +DROP TABLE IF EXISTS summing_composite_key; +CREATE TABLE summing_composite_key (d Date, k UInt64, FirstMap Nested(k1 UInt32, k2ID Int8, s Float64), SecondMap Nested(k1ID UInt64, k2Key UInt32, k3Type Int32, s Int64)) ENGINE = SummingMergeTree(d, k, 1); -INSERT INTO test.summing_composite_key VALUES ('2000-01-01', 1, [1,2], [3,4], [10,11], [0,1,2], [3,4,5], [-1,-2,-3], [1,10,100]), ('2000-01-01', 1, [2,1], [4,3], [20,22], [2,2,1], [5,5,0], [-3,-3,-33], [10,100,1000]), ('2000-01-01', 2, [1,2], [3,4], [10,11], [0,1,2], [3,4,5], [-1,-2,-3], [1,10,100]), ('2000-01-01', 2, [2,1,1], [4,3,3], [20,22,33], [2,2], [5,5], [-3,-3], [10,100]), ('2000-01-01', 2, [1,2], [3,4], [10,11], [0,1,2], [3,4,5], [-1,-2,-3], [1,10,100]); +INSERT INTO summing_composite_key VALUES ('2000-01-01', 1, [1,2], [3,4], [10,11], [0,1,2], [3,4,5], [-1,-2,-3], [1,10,100]), ('2000-01-01', 1, [2,1], [4,3], [20,22], [2,2,1], [5,5,0], [-3,-3,-33], [10,100,1000]), ('2000-01-01', 2, [1,2], [3,4], [10,11], [0,1,2], [3,4,5], [-1,-2,-3], [1,10,100]), ('2000-01-01', 2, [2,1,1], [4,3,3], [20,22,33], [2,2], [5,5], [-3,-3], [10,100]), ('2000-01-01', 2, [1,2], [3,4], [10,11], [0,1,2], [3,4,5], [-1,-2,-3], [1,10,100]); -SELECT * FROM test.summing_composite_key ORDER BY d, k, _part_index; +SELECT * FROM summing_composite_key ORDER BY d, k, _part_index; -SELECT d, k, m.k1, m.k2ID, m.s FROM test.summing_composite_key ARRAY JOIN FirstMap AS m ORDER BY d, k, m.k1, m.k2ID, m.s; -SELECT d, k, m.k1, m.k2ID, sum(m.s) FROM test.summing_composite_key ARRAY JOIN FirstMap AS m GROUP BY d, k, m.k1, m.k2ID ORDER BY d, k, m.k1, m.k2ID; -SELECT d, k, m.k1, m.k2ID,m. s FROM test.summing_composite_key FINAL ARRAY JOIN FirstMap AS m ORDER BY d, k, m.k1, m.k2ID, m.s; +SELECT d, k, m.k1, m.k2ID, m.s FROM summing_composite_key ARRAY JOIN FirstMap AS m ORDER BY d, k, m.k1, m.k2ID, m.s; +SELECT d, k, m.k1, m.k2ID, sum(m.s) FROM summing_composite_key ARRAY JOIN FirstMap AS m GROUP BY d, k, m.k1, m.k2ID ORDER BY d, k, m.k1, m.k2ID; +SELECT d, k, m.k1, m.k2ID,m. s FROM summing_composite_key FINAL ARRAY JOIN FirstMap AS m ORDER BY d, k, m.k1, m.k2ID, m.s; -SELECT d, k, m.k1ID, m.k2Key, m.k3Type, m.s FROM test.summing_composite_key ARRAY JOIN SecondMap AS m ORDER BY d, k, m.k1ID, m.k2Key, m.k3Type, m.s; -SELECT d, k, m.k1ID, m.k2Key, m.k3Type, sum(m.s) FROM test.summing_composite_key ARRAY JOIN SecondMap AS m GROUP BY d, k, m.k1ID, m.k2Key, m.k3Type ORDER BY d, k, m.k1ID, m.k2Key, m.k3Type; -SELECT d, k, m.k1ID, m.k2Key, m.k3Type, m.s FROM test.summing_composite_key FINAL ARRAY JOIN SecondMap AS m ORDER BY d, k, m.k1ID, m.k2Key, m.k3Type, m.s; +SELECT d, k, m.k1ID, m.k2Key, m.k3Type, m.s FROM summing_composite_key ARRAY JOIN SecondMap AS m ORDER BY d, k, m.k1ID, m.k2Key, m.k3Type, m.s; +SELECT d, k, m.k1ID, m.k2Key, m.k3Type, sum(m.s) FROM summing_composite_key ARRAY JOIN SecondMap AS m GROUP BY d, k, m.k1ID, m.k2Key, m.k3Type ORDER BY d, k, m.k1ID, m.k2Key, m.k3Type; +SELECT d, k, m.k1ID, m.k2Key, m.k3Type, m.s FROM summing_composite_key FINAL ARRAY JOIN SecondMap AS m ORDER BY d, k, m.k1ID, m.k2Key, m.k3Type, m.s; -OPTIMIZE TABLE test.summing_composite_key PARTITION 200001 FINAL; +OPTIMIZE TABLE summing_composite_key PARTITION 200001 FINAL; -SELECT * FROM test.summing_composite_key ORDER BY d, k, _part_index; +SELECT * FROM summing_composite_key ORDER BY d, k, _part_index; -SELECT d, k, m.k1, m.k2ID, m.s FROM test.summing_composite_key ARRAY JOIN FirstMap AS m ORDER BY d, k, m.k1, m.k2ID, m.s; -SELECT d, k, m.k1, m.k2ID, sum(m.s) FROM test.summing_composite_key ARRAY JOIN FirstMap AS m GROUP BY d, k, m.k1, m.k2ID ORDER BY d, k, m.k1, m.k2ID; -SELECT d, k, m.k1, m.k2ID, m.s FROM test.summing_composite_key FINAL ARRAY JOIN FirstMap AS m ORDER BY d, k, m.k1, m.k2ID, m.s; +SELECT d, k, m.k1, m.k2ID, m.s FROM summing_composite_key ARRAY JOIN FirstMap AS m ORDER BY d, k, m.k1, m.k2ID, m.s; +SELECT d, k, m.k1, m.k2ID, sum(m.s) FROM summing_composite_key ARRAY JOIN FirstMap AS m GROUP BY d, k, m.k1, m.k2ID ORDER BY d, k, m.k1, m.k2ID; +SELECT d, k, m.k1, m.k2ID, m.s FROM summing_composite_key FINAL ARRAY JOIN FirstMap AS m ORDER BY d, k, m.k1, m.k2ID, m.s; -SELECT d, k, m.k1ID, m.k2Key, m.k3Type, m.s FROM test.summing_composite_key ARRAY JOIN SecondMap AS m ORDER BY d, k, m.k1ID, m.k2Key, m.k3Type, m.s; -SELECT d, k, m.k1ID, m.k2Key, m.k3Type, sum(m.s) FROM test.summing_composite_key ARRAY JOIN SecondMap AS m GROUP BY d, k, m.k1ID, m.k2Key, m.k3Type ORDER BY d, k, m.k1ID, m.k2Key, m.k3Type; -SELECT d, k, m.k1ID, m.k2Key, m.k3Type, m.s FROM test.summing_composite_key FINAL ARRAY JOIN SecondMap AS m ORDER BY d, k, m.k1ID, m.k2Key, m.k3Type, m.s; +SELECT d, k, m.k1ID, m.k2Key, m.k3Type, m.s FROM summing_composite_key ARRAY JOIN SecondMap AS m ORDER BY d, k, m.k1ID, m.k2Key, m.k3Type, m.s; +SELECT d, k, m.k1ID, m.k2Key, m.k3Type, sum(m.s) FROM summing_composite_key ARRAY JOIN SecondMap AS m GROUP BY d, k, m.k1ID, m.k2Key, m.k3Type ORDER BY d, k, m.k1ID, m.k2Key, m.k3Type; +SELECT d, k, m.k1ID, m.k2Key, m.k3Type, m.s FROM summing_composite_key FINAL ARRAY JOIN SecondMap AS m ORDER BY d, k, m.k1ID, m.k2Key, m.k3Type, m.s; -DROP TABLE test.summing_composite_key; +DROP TABLE summing_composite_key; diff --git a/dbms/tests/queries/0_stateless/00328_long_case_construction.sql b/dbms/tests/queries/0_stateless/00328_long_case_construction.sql index 411ccbb7dbe..d0fc90d0884 100644 --- a/dbms/tests/queries/0_stateless/00328_long_case_construction.sql +++ b/dbms/tests/queries/0_stateless/00328_long_case_construction.sql @@ -1367,560 +1367,560 @@ SELECT CASE WHEN (number % 2) = 0 THEN [toFloat64(1), toFloat64(2)] WHEN (number /* No CASE expression. String clauses. */ -DROP TABLE IF EXISTS test.multi_if_check; -CREATE TABLE test.multi_if_check(col1 UInt64, col2 String, col3 String, col4 String) ENGINE=TinyLog; -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(1, 'A', 'AB', 'ABC'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(2, 'B', 'BC', 'BCD'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(3, 'C', 'CD', 'CDE'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(4, 'D', 'DE', 'DEF'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(5, 'E', 'EF', 'EFG'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(6, 'F', 'FG', 'FGH'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(7, 'G', 'GH', 'GHI'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(8, 'H', 'HI', 'HIJ'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(9, 'I', 'IJ', 'IJK'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4) VALUES(10, 'J', 'JK', 'JKL'); +DROP TABLE IF EXISTS multi_if_check; +CREATE TABLE multi_if_check(col1 UInt64, col2 String, col3 String, col4 String) ENGINE=TinyLog; +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(1, 'A', 'AB', 'ABC'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(2, 'B', 'BC', 'BCD'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(3, 'C', 'CD', 'CDE'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(4, 'D', 'DE', 'DEF'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(5, 'E', 'EF', 'EFG'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(6, 'F', 'FG', 'FGH'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(7, 'G', 'GH', 'GHI'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(8, 'H', 'HI', 'HIJ'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(9, 'I', 'IJ', 'IJK'); +INSERT INTO multi_if_check(col1, col2, col3, col4) VALUES(10, 'J', 'JK', 'JKL'); -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN col3 ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN col3 ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN 'bar' ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN 'bar' ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN col3 ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN col3 ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN col3 ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN col3 ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN toFixedString(col3, 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN toFixedString(col3, 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN toFixedString('bar', 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN toFixedString('bar', 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN 'bar' ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN 'bar' ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN 'bar' ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN 'bar' ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN col3 ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN col3 ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN col3 ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN col3 ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN col3 ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN col3 ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString(col3, 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString(col3, 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString('bar', 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString('bar', 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN 'bar' ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN 'bar' ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN 'bar' ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN 'bar' ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN col3 ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN col3 ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN col3 ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN col3 ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN col3 ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN col3 ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString(col3, 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString(col3, 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString('bar', 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString('bar', 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN 'bar' ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN 'bar' ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN 'bar' ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN 'bar' ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN col3 ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN col3 ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN 'bar' ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN 'bar' ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN col3 ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN col3 ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN col3 ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN col3 ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN toFixedString(col3, 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN toFixedString(col3, 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN toFixedString('bar', 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN toFixedString('bar', 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN 'bar' ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN 'bar' ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN 'bar' ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN 'bar' ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN col3 ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN col3 ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN 'bar' ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN 'bar' ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN col3 ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN col3 ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN col3 ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN col3 ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN toFixedString(col3, 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN toFixedString(col3, 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN toFixedString('bar', 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN toFixedString('bar', 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN 'bar' ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN 'bar' ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN 'bar' ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN 'bar' ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN col3 ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN col3 ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN col3 ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN col3 ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN col3 ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN col3 ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString(col3, 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString(col3, 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString('bar', 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString('bar', 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN 'bar' ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN 'bar' ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN 'bar' ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN 'bar' ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN col3 ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN col3 ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN col3 ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN col3 ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN col3 ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN col3 ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString(col3, 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString(col3, 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString('bar', 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString('bar', 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN 'bar' ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN 'bar' ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN 'bar' ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN 'bar' ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN col3 ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN col3 ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN 'bar' ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN 'bar' ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN col3 ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN col3 ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN col3 ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN col3 ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN toFixedString(col3, 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN toFixedString(col3, 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN toFixedString('bar', 16) ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN toFixedString('bar', 16) ELSE 'baz' END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN 'bar' ELSE col4 END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN 'bar' ELSE toFixedString(col4, 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN 'bar' ELSE toFixedString('baz', 16) END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN 'bar' ELSE 'baz' END FROM test.multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN col3 ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN col3 ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN 'bar' ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN (col1 % 3) = 0 THEN 'bar' ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN col3 ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN col3 ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN col3 ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN col3 ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN toFixedString(col3, 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN toFixedString(col3, 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN toFixedString('bar', 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN toFixedString('bar', 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN 'bar' ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN 'bar' ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN 'bar' ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN col2 WHEN 1 THEN 'bar' ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN col3 ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN col3 ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN col3 ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN col3 ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN col3 ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN col3 ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString(col3, 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString(col3, 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString('bar', 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString('bar', 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN 'bar' ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN 'bar' ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN 'bar' ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString(col2, 16) WHEN 1 THEN 'bar' ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN col3 ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN col3 ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN col3 ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN col3 ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN col3 ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN col3 ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString(col3, 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString(col3, 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString('bar', 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString('bar', 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN 'bar' ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN 'bar' ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN 'bar' ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN toFixedString('foo', 16) WHEN 1 THEN 'bar' ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN col3 ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN col3 ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN 'bar' ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN (col1 % 3) = 0 THEN 'bar' ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN col3 ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN col3 ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN col3 ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN col3 ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN toFixedString(col3, 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN toFixedString(col3, 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN toFixedString('bar', 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN toFixedString('bar', 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN 'bar' ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN 'bar' ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN 'bar' ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN 'foo' WHEN 1 THEN 'bar' ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN col3 ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN col3 ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN 'bar' ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN (col1 % 3) = 0 THEN 'bar' ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN col3 ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN col3 ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN col3 ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN col3 ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN toFixedString(col3, 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN toFixedString(col3, 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN toFixedString('bar', 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN toFixedString('bar', 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN 'bar' ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN 'bar' ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN 'bar' ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN col2 WHEN 1 THEN 'bar' ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN col3 ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN col3 ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN col3 ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN col3 ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN col3 ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN col3 ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString(col3, 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString(col3, 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString('bar', 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN toFixedString('bar', 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN 'bar' ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN 'bar' ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN 'bar' ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString(col2, 16) WHEN 1 THEN 'bar' ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN col3 ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN col3 ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN (col1 % 3) = 0 THEN 'bar' ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN col3 ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN col3 ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN col3 ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN col3 ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString(col3, 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString(col3, 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString('bar', 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN toFixedString('bar', 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN 'bar' ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN 'bar' ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN 'bar' ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN toFixedString('foo', 16) WHEN 1 THEN 'bar' ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN col3 ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN col3 ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN col3 ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString(col3, 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN toFixedString('bar', 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN 'bar' ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN 'bar' ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN (col1 % 3) = 0 THEN 'bar' ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN col3 ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN col3 ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN col3 ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN col3 ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN toFixedString(col3, 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN toFixedString(col3, 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN toFixedString(col3, 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN toFixedString('bar', 16) ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN toFixedString('bar', 16) ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN toFixedString('bar', 16) ELSE 'baz' END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN 'bar' ELSE col4 END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN 'bar' ELSE toFixedString(col4, 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN 'bar' ELSE toFixedString('baz', 16) END FROM multi_if_check; +SELECT CASE WHEN 1 THEN 'foo' WHEN 1 THEN 'bar' ELSE 'baz' END FROM multi_if_check; -DROP TABLE IF EXISTS test.multi_if_check; +DROP TABLE IF EXISTS multi_if_check; /* No CASE expression. String array clauses. */ -CREATE TABLE test.multi_if_check(col1 UInt64, col2 String, col3 String, col4 String, col5 String, col6 String, col7 String) ENGINE=TinyLog; -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(1, 'A', 'AB', 'ABC', 'ABCD', 'ABCDE', 'ABCDEF'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(2, 'B', 'BC', 'BCD', 'BCDE', 'BCDEF', 'BCDEFG'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(3, 'C', 'CD', 'CDE', 'CDEF', 'CDEFG', 'CDEFGH'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(4, 'D', 'DE', 'DEF', 'DEFG', 'DEFGH', 'DEFGHI'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(5, 'E', 'EF', 'EFG', 'EFGH', 'EFGHI', 'EFGHIJ'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(6, 'F', 'FG', 'FGH', 'FGHI', 'FGHIJ', 'FGHIJK'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(7, 'G', 'GH', 'GHI', 'GHIJ', 'GHIJK', 'GHIJKL'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(8, 'H', 'HI', 'HIJ', 'HIJK', 'HIJKL', 'HIJKLM'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(9, 'I', 'IJ', 'IJK', 'IJKL', 'IJKLM', 'IJKLMN'); -INSERT INTO test.multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(10, 'J', 'JK', 'JKL', 'JKLM', 'JKLMN', 'JKLMNO'); +CREATE TABLE multi_if_check(col1 UInt64, col2 String, col3 String, col4 String, col5 String, col6 String, col7 String) ENGINE=TinyLog; +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(1, 'A', 'AB', 'ABC', 'ABCD', 'ABCDE', 'ABCDEF'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(2, 'B', 'BC', 'BCD', 'BCDE', 'BCDEF', 'BCDEFG'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(3, 'C', 'CD', 'CDE', 'CDEF', 'CDEFG', 'CDEFGH'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(4, 'D', 'DE', 'DEF', 'DEFG', 'DEFGH', 'DEFGHI'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(5, 'E', 'EF', 'EFG', 'EFGH', 'EFGHI', 'EFGHIJ'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(6, 'F', 'FG', 'FGH', 'FGHI', 'FGHIJ', 'FGHIJK'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(7, 'G', 'GH', 'GHI', 'GHIJ', 'GHIJK', 'GHIJKL'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(8, 'H', 'HI', 'HIJ', 'HIJK', 'HIJKL', 'HIJKLM'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(9, 'I', 'IJ', 'IJK', 'IJKL', 'IJKLM', 'IJKLMN'); +INSERT INTO multi_if_check(col1, col2, col3, col4, col5, col6, col7) VALUES(10, 'J', 'JK', 'JKL', 'JKLM', 'JKLMN', 'JKLMNO'); -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN [col4, col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN [col4, col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN [col4, col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN [col4, 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN ['foo', col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN ['foo', col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN [col4, col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN [col4, col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN [col4, col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN ['foo', col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN ['foo', col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN [col4, col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN [col4, col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN [col4, col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN [col4, 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN ['foo', col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN ['foo', col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN [col4, col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN [col4, col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN [col4, col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN [col4, col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN [col4, col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN [col4, col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN [col4, 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN ['foo', col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN ['foo', col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN [col4, col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN [col4, col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN [col4, col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN ['foo', col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN ['foo', col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN [col4, col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN [col4, col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN [col4, col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN [col4, 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN ['foo', col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN ['foo', col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN [col4, col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN [col4, col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN [col4, col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', col5] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', col5] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM test.multi_if_check; -SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM test.multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN [col4, col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN [col4, col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN [col4, col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN [col4, 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN ['foo', col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN ['foo', col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, col3] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN [col4, col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN [col4, col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN [col4, col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN ['foo', col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN ['foo', col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN [col2, 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN [col4, col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN [col4, col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN [col4, col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN [col4, 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN ['foo', col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN ['foo', col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', col3] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN [col4, col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN [col4, col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN [col4, col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN (col1 % 2) = 0 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN [col4, col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN [col4, col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN [col4, col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN [col4, 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN ['foo', col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN ['foo', col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, col3] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN [col4, col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN [col4, col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN [col4, col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN ['foo', col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN ['foo', col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN [col2, 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN [col4, col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN [col4, col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN [col4, col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN [col4, 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN ['foo', col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN ['foo', col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', col3] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN (col1 % 3) = 0 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN [col4, col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN [col4, col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN [col4, col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN [col4, col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN [col4, 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', col5] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', col5] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', col5] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', col5] ELSE ['foo', 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE [col6, 'bar'] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', col7] END FROM multi_if_check; +SELECT CASE WHEN 1 THEN ['foo', 'bar'] WHEN 1 THEN ['foo', 'bar'] ELSE ['foo', 'bar'] END FROM multi_if_check; -DROP TABLE IF EXISTS test.multi_if_check; +DROP TABLE IF EXISTS multi_if_check; /* CASE expression. Numeric clauses. */ -CREATE TABLE test.multi_if_check(col1 UInt64) ENGINE=TinyLog; -INSERT INTO test.multi_if_check(col1) SELECT toUInt64((number * 37 + 13) % 3) AS col1 FROM system.numbers LIMIT 10; +CREATE TABLE multi_if_check(col1 UInt64) ENGINE=TinyLog; +INSERT INTO multi_if_check(col1) SELECT toUInt64((number * 37 + 13) % 3) AS col1 FROM system.numbers LIMIT 10; -SELECT CASE col1 WHEN 0 THEN 1 WHEN 1 THEN 2 ELSE 3 END FROM test.multi_if_check; +SELECT CASE col1 WHEN 0 THEN 1 WHEN 1 THEN 2 ELSE 3 END FROM multi_if_check; /* CASE expression. String clauses. */ -SELECT CASE col1 WHEN 1 THEN 'A' WHEN 2 THEN 'AB' ELSE 'ABC' END FROM test.multi_if_check; +SELECT CASE col1 WHEN 1 THEN 'A' WHEN 2 THEN 'AB' ELSE 'ABC' END FROM multi_if_check; -DROP TABLE IF EXISTS test.multi_if_check; +DROP TABLE IF EXISTS multi_if_check; diff --git a/dbms/tests/queries/0_stateless/00330_view_subqueries.sql b/dbms/tests/queries/0_stateless/00330_view_subqueries.sql index 9a6cca0a7e3..bcf7dda8d62 100644 --- a/dbms/tests/queries/0_stateless/00330_view_subqueries.sql +++ b/dbms/tests/queries/0_stateless/00330_view_subqueries.sql @@ -1,11 +1,11 @@ -DROP TABLE IF EXISTS test.v1; -DROP TABLE IF EXISTS test.v2; +DROP TABLE IF EXISTS v1; +DROP TABLE IF EXISTS v2; -CREATE VIEW test.v1 AS SELECT 1 FROM (SELECT 1); -SELECT * FROM test.v1; +CREATE VIEW v1 AS SELECT 1 FROM (SELECT 1); +SELECT * FROM v1; -CREATE VIEW test.v2 AS SELECT number * number FROM (SELECT number FROM system.numbers LIMIT 10); -SELECT * FROM test.v2; +CREATE VIEW v2 AS SELECT number * number FROM (SELECT number FROM system.numbers LIMIT 10); +SELECT * FROM v2; -DROP TABLE test.v1; -DROP TABLE test.v2; +DROP TABLE v1; +DROP TABLE v2; diff --git a/dbms/tests/queries/0_stateless/00331_final_and_prewhere.sql b/dbms/tests/queries/0_stateless/00331_final_and_prewhere.sql index 5e1acb2d0e2..02af6d9b450 100644 --- a/dbms/tests/queries/0_stateless/00331_final_and_prewhere.sql +++ b/dbms/tests/queries/0_stateless/00331_final_and_prewhere.sql @@ -1,12 +1,12 @@ -DROP TABLE IF EXISTS test.replace; +DROP TABLE IF EXISTS replace; -CREATE TABLE test.replace ( EventDate Date, Id UInt64, Data String, Version UInt32) ENGINE = ReplacingMergeTree(EventDate, Id, 8192, Version); -INSERT INTO test.replace VALUES ('2016-06-02', 1, 'version 1', 1); -INSERT INTO test.replace VALUES ('2016-06-02', 2, 'version 1', 1); -INSERT INTO test.replace VALUES ('2016-06-02', 1, 'version 0', 0); +CREATE TABLE replace ( EventDate Date, Id UInt64, Data String, Version UInt32) ENGINE = ReplacingMergeTree(EventDate, Id, 8192, Version); +INSERT INTO replace VALUES ('2016-06-02', 1, 'version 1', 1); +INSERT INTO replace VALUES ('2016-06-02', 2, 'version 1', 1); +INSERT INTO replace VALUES ('2016-06-02', 1, 'version 0', 0); -SELECT * FROM test.replace ORDER BY Id, Version; -SELECT * FROM test.replace FINAL ORDER BY Id, Version; -SELECT * FROM test.replace FINAL WHERE Version = 0 ORDER BY Id, Version; +SELECT * FROM replace ORDER BY Id, Version; +SELECT * FROM replace FINAL ORDER BY Id, Version; +SELECT * FROM replace FINAL WHERE Version = 0 ORDER BY Id, Version; -DROP TABLE test.replace; +DROP TABLE replace; diff --git a/dbms/tests/queries/0_stateless/00334_column_aggregate_function_limit.sql b/dbms/tests/queries/0_stateless/00334_column_aggregate_function_limit.sql index c45e27222a1..70334ad91a7 100644 --- a/dbms/tests/queries/0_stateless/00334_column_aggregate_function_limit.sql +++ b/dbms/tests/queries/0_stateless/00334_column_aggregate_function_limit.sql @@ -1,9 +1,9 @@ -DROP TABLE IF EXISTS test.ontime; +DROP TABLE IF EXISTS ontime; -CREATE TABLE test.ontime (FlightDate Date, Carrier String, FlightNum String) ENGINE = Memory; +CREATE TABLE ontime (FlightDate Date, Carrier String, FlightNum String) ENGINE = Memory; -INSERT INTO test.ontime VALUES ('1987-10-01','AA','2'),('1987-10-01','AA','2'),('1987-10-01','AA','7'),('1987-10-01','AA','7'),('1987-10-01','AA','26'),('1987-10-01','AA','34'),('1987-10-01','AA','36'),('1987-10-01','AA','91'),('1987-10-01','AA','101'),('1987-10-01','AA','101'),('1987-10-01','AA','109'),('1987-10-01','AA','109'),('1987-10-01','AA','112'),('1987-10-01','AA','123'),('1987-10-01','AA','160'),('1987-10-01','AA','165'),('1987-10-01','AA','165'),('1987-10-01','AA','165'),('1987-10-01','AA','176'),('1987-10-01','AA','176'),('1987-10-01','AA','176'),('1987-10-01','AA','176'),('1987-10-01','AA','179'),('1987-10-01','AA','179'),('1987-10-01','AA','215'),('1987-10-01','AA','215'),('1987-10-01','AA','231'),('1987-10-01','AA','231'),('1987-10-01','AA','263'),('1987-10-01','AA','263'),('1987-10-01','AA','268'),('1987-10-01','AA','268'),('1987-10-01','AA','281'),('1987-10-01','AA','287'),('1987-10-01','AA','287'),('1987-10-01','AA','309'),('1987-10-01','AA','309'),('1987-10-01','AA','309'),('1987-10-01','AA','341'),('1987-10-01','AA','344'),('1987-10-01','AA','344'),('1987-10-01','AA','347'),('1987-10-01','AA','347'),('1987-10-01','AA','368'),('1987-10-01','AA','381'),('1987-10-01','AA','381'),('1987-10-01','AA','381'),('1987-10-01','AA','396'),('1987-10-01','AA','396'),('1987-10-01','AA','397'),('1987-10-01','AA','397'),('1987-10-01','AA','417'),('1987-10-01','AA','417'),('1987-10-01','AA','446'),('1987-10-01','AA','451'),('1987-10-01','AA','451'),('1987-10-01','AA','460'),('1987-10-01','AA','460'),('1987-10-01','AA','491'),('1987-10-01','AA','504'),('1987-10-01','AA','504'),('1987-10-01','AA','519'),('1987-10-01','AA','519'),('1987-10-01','AA','523'),('1987-10-01','AA','523'),('1987-10-01','AA','525'),('1987-10-01','AA','525'),('1987-10-01','AA','525'),('1987-10-01','AA','533'),('1987-10-01','AA','533'),('1987-10-01','AA','533'),('1987-10-01','AA','546'),('1987-10-01','AA','546'),('1987-10-01','AA','556'),('1987-10-01','AA','556'),('1987-10-01','AA','556'),('1987-10-01','AA','597'),('1987-10-01','AA','597'),('1987-10-01','AA','597'),('1987-10-01','AA','601'),('1987-10-01','AA','601'),('1987-10-01','AA','627'),('1987-10-01','AA','670'),('1987-10-01','AA','673'),('1987-10-01','AA','673'),('1987-10-01','AA','680'),('1987-10-01','AA','680'),('1987-10-01','AA','817'),('1987-10-01','AA','817'),('1987-10-01','AA','824'),('1987-10-01','AA','824'),('1987-10-01','AA','824'),('1987-10-01','AA','824'),('1987-10-01','AA','832'),('1987-10-01','AA','832'),('1987-10-01','AA','852'),('1987-10-01','AA','852'),('1987-10-01','AA','866'),('1987-10-01','AA','866'),('1987-10-01','AA','871'),('1987-10-01','AA','871'),('1987-10-01','AA','880'),('1987-10-01','AA','880'),('1987-10-01','AA','880'),('1987-10-01','AA','880'),('1987-10-01','AA','883'),('1987-10-01','AA','883'),('1987-10-01','AA','885'),('1987-10-01','AA','885'),('1987-10-01','AA','885'),('1987-10-01','AA','890'),('1987-10-01','AA','893'),('1987-10-01','AA','893'),('1987-10-01','AA','905'),('1987-10-01','AA','905'),('1987-10-01','AA','929'),('1987-10-01','AA','929'),('1987-10-01','AA','936'),('1987-10-01','AA','936'),('1987-10-01','AA','937'),('1987-10-01','AA','937'),('1987-10-01','AA','955'),('1987-10-01','AA','966'),('1987-10-01','AA','1002'),('1987-10-01','AA','1002'),('1987-10-01','AA','1004'),('1987-10-01','AA','1004'),('1987-10-01','AA','1015'),('1987-10-01','AA','1015'),('1987-10-01','AA','1021'),('1987-10-01','AA','1021'),('1987-10-01','AA','1041'),('1987-10-01','AA','1041'),('1987-10-01','AA','1046'),('1987-10-01','AA','1046'),('1987-10-01','AA','1048'),('1987-10-01','AA','1048'),('1987-10-01','AA','1061'),('1987-10-01','AA','1061'),('1987-10-01','AA','1088'),('1987-10-01','AA','1088'),('1987-10-01','AA','2033'),('1987-10-01','AA','2033'),('1987-10-01','AA','2050'),('1987-10-01','AA','2058'),('1987-10-01','AA','2071'),('1987-10-01','AA','2071'),('1987-10-01','AA','2086'),('1987-10-01','AA','2105'),('1987-10-01','AA','2111'),('1987-10-01','AA','2123'),('1987-10-01','AA','2123'),('1987-10-01','AA','2147'),('1987-10-01','AA','2147'),('1987-10-01','AA','2199'),('1987-10-01','AA','2199'),('1987-10-01','AA','2207'),('1987-10-01','AA','2207'),('1987-10-01','AA','2217'),('1987-10-01','AA','2230'),('1987-10-01','AA','2245'),('1987-10-01','AA','2251'),('1987-10-01','AA','2251'),('1987-10-01','AA','2275'),('1987-10-01','AA','2278'),('1987-10-01','AA','2351'),('1987-10-01','AA','2357'),('1987-10-01','AA','2490'),('1987-10-01','AA','2528'),('1987-10-01','AA','2528'),('1987-10-01','AA','2735'),('1987-10-01','AA','2735'),('1987-10-01','AA','2751'),('1987-10-01','AL','2'),('1987-10-01','AL','2'),('1987-10-01','AL','7'),('1987-10-01','AL','7'),('1987-10-01','AL','26'),('1987-10-01','AL','26'),('1987-10-01','AL','34'),('1987-10-01','AL','34'),('1987-10-01','AL','36'),('1987-10-01','AL','36'),('1987-10-01','AL','45'),('1987-10-01','AL','45'),('1987-10-01','AL','45'),('1987-10-01','AL','91'),('1987-10-01','AL','91'),('1987-10-01','AL','104'),('1987-10-01','AL','104'),('1987-10-01','AL','104'),('1987-10-01','AL','109'),('1987-10-01','AL','112'),('1987-10-01','AL','112'),('1987-10-01','AL','123'),('1987-10-01','AL','149'),('1987-10-01','AL','160'),('1987-10-01','AL','160'),('1987-10-01','AL','165'),('1987-10-01','AL','171'),('1987-10-01','AL','171'),('1987-10-01','AL','176'),('1987-10-01','AL','176'),('1987-10-01','AL','179'),('1987-10-01','AL','215'),('1987-10-01','AL','231'),('1987-10-01','AL','263'),('1987-10-01','AL','263'),('1987-10-01','AL','268'),('1987-10-01','AL','268'),('1987-10-01','AL','268'),('1987-10-01','AL','281'),('1987-10-01','AL','281'),('1987-10-01','AL','287'),('1987-10-01','AL','287'),('1987-10-01','AL','309'),('1987-10-01','AL','309'),('1987-10-01','AL','341'),('1987-10-01','AL','344'),('1987-10-01','AL','344'),('1987-10-01','AL','357'),('1987-10-01','AL','357'),('1987-10-01','AL','368'),('1987-10-01','AL','381'),('1987-10-01','AL','396'),('1987-10-01','AL','397'),('1987-10-01','AL','397'),('1987-10-01','AL','416'),('1987-10-01','AL','416'),('1987-10-01','AL','417'),('1987-10-01','AL','438'),('1987-10-01','AL','446'),('1987-10-01','AL','451'),('1987-10-01','AL','451'),('1987-10-01','AL','491'),('1987-10-01','AL','491'),('1987-10-01','AL','523'),('1987-10-01','AL','523'),('1987-10-01','AL','523'),('1987-10-01','AL','525'),('1987-10-01','AL','525'),('1987-10-01','AL','533'),('1987-10-01','AL','533'),('1987-10-01','AL','546'),('1987-10-01','AL','546'),('1987-10-01','AL','556'),('1987-10-01','AL','556'),('1987-10-01','AL','601'),('1987-10-01','AL','601'),('1987-10-01','AL','627'),('1987-10-01','AL','629'),('1987-10-01','AL','670'),('1987-10-01','AL','670'),('1987-10-01','AL','670'),('1987-10-01','AL','673'),('1987-10-01','AL','680'),('1987-10-01','AL','700'),('1987-10-02','AA','2'),('1987-10-02','AA','2'),('1987-10-02','AA','2'),('1987-10-02','AA','7'),('1987-10-02','AA','7'),('1987-10-02','AA','26'),('1987-10-02','AA','34'),('1987-10-02','AA','36'),('1987-10-02','AA','91'),('1987-10-02','AA','101'),('1987-10-02','AA','101'),('1987-10-02','AA','109'),('1987-10-02','AA','109'),('1987-10-02','AA','112'),('1987-10-02','AA','123'),('1987-10-02','AA','123'),('1987-10-02','AA','160'),('1987-10-02','AA','165'),('1987-10-02','AA','165'),('1987-10-02','AA','165'),('1987-10-02','AA','176'),('1987-10-02','AA','176'),('1987-10-02','AA','176'),('1987-10-02','AA','176'),('1987-10-02','AA','179'),('1987-10-02','AA','179'),('1987-10-02','AA','215'),('1987-10-02','AA','215'),('1987-10-02','AA','231'),('1987-10-02','AA','231'),('1987-10-02','AA','263'),('1987-10-02','AA','263'),('1987-10-02','AA','268'),('1987-10-02','AA','281'),('1987-10-02','AA','287'),('1987-10-02','AA','287'),('1987-10-02','AA','309'),('1987-10-02','AA','309'),('1987-10-02','AA','309'),('1987-10-02','AA','341'),('1987-10-02','AA','344'),('1987-10-02','AA','344'),('1987-10-02','AA','347'),('1987-10-02','AA','347'),('1987-10-02','AA','368'),('1987-10-02','AA','381'),('1987-10-02','AA','381'),('1987-10-02','AA','381'),('1987-10-02','AA','396'),('1987-10-02','AA','396'),('1987-10-02','AA','397'),('1987-10-02','AA','397'),('1987-10-02','AA','417'),('1987-10-02','AA','417'),('1987-10-02','AA','446'),('1987-10-02','AA','451'),('1987-10-02','AA','451'),('1987-10-02','AA','460'),('1987-10-02','AA','460'),('1987-10-02','AA','491'),('1987-10-02','AA','504'),('1987-10-02','AA','504'),('1987-10-02','AA','519'),('1987-10-02','AA','519'),('1987-10-02','AA','523'),('1987-10-02','AA','523'),('1987-10-02','AA','525'),('1987-10-02','AA','525'),('1987-10-02','AA','525'),('1987-10-02','AA','533'),('1987-10-02','AA','533'),('1987-10-02','AA','533'),('1987-10-02','AA','546'),('1987-10-02','AA','546'),('1987-10-02','AA','546'),('1987-10-02','AA','546'),('1987-10-02','AA','556'),('1987-10-02','AA','556'),('1987-10-02','AA','556'),('1987-10-02','AA','597'),('1987-10-02','AA','597'),('1987-10-02','AA','597'),('1987-10-02','AA','601'),('1987-10-02','AA','601'),('1987-10-02','AA','627'),('1987-10-02','AA','629'),('1987-10-02','AA','629'),('1987-10-02','AA','670'),('1987-10-02','AA','673'),('1987-10-02','AA','673'),('1987-10-02','AA','680'),('1987-10-02','AA','680'),('1987-10-02','AA','817'),('1987-10-02','AA','817'),('1987-10-02','AA','824'),('1987-10-02','AA','824'),('1987-10-02','AA','824'),('1987-10-02','AA','824'),('1987-10-02','AA','832'),('1987-10-02','AA','832'),('1987-10-02','AA','852'),('1987-10-02','AA','866'),('1987-10-02','AA','866'),('1987-10-02','AA','871'),('1987-10-02','AA','871'),('1987-10-02','AA','880'),('1987-10-02','AA','880'),('1987-10-02','AA','880'),('1987-10-02','AA','880'),('1987-10-02','AA','883'),('1987-10-02','AA','883'),('1987-10-02','AA','885'),('1987-10-02','AA','885'),('1987-10-02','AA','885'),('1987-10-02','AA','890'),('1987-10-02','AA','890'),('1987-10-02','AA','893'),('1987-10-02','AA','893'),('1987-10-02','AA','905'),('1987-10-02','AA','905'),('1987-10-02','AA','915'),('1987-10-02','AA','929'),('1987-10-02','AA','929'),('1987-10-02','AA','936'),('1987-10-02','AA','936'),('1987-10-02','AA','937'),('1987-10-02','AA','937'),('1987-10-02','AA','955'),('1987-10-02','AA','955'),('1987-10-02','AA','966'),('1987-10-02','AA','1002'),('1987-10-02','AA','1002'),('1987-10-02','AA','1004'),('1987-10-02','AA','1004'),('1987-10-02','AA','1015'),('1987-10-02','AA','1015'),('1987-10-02','AA','1021'),('1987-10-02','AA','1021'),('1987-10-02','AA','1041'),('1987-10-02','AA','1041'),('1987-10-02','AA','1046'),('1987-10-02','AA','1046'),('1987-10-02','AA','1048'),('1987-10-02','AA','1048'),('1987-10-02','AA','1061'),('1987-10-02','AA','1061'),('1987-10-02','AA','1088'),('1987-10-02','AA','1088'),('1987-10-02','AA','2033'),('1987-10-02','AA','2033'),('1987-10-02','AA','2050'),('1987-10-02','AA','2058'),('1987-10-02','AA','2071'),('1987-10-02','AA','2071'),('1987-10-02','AA','2086'),('1987-10-02','AA','2105'),('1987-10-02','AA','2111'),('1987-10-02','AA','2123'),('1987-10-02','AA','2123'),('1987-10-02','AA','2147'),('1987-10-02','AA','2147'),('1987-10-02','AA','2199'),('1987-10-02','AA','2199'),('1987-10-02','AA','2207'),('1987-10-02','AA','2207'),('1987-10-02','AA','2217'),('1987-10-02','AA','2230'),('1987-10-02','AA','2245'),('1987-10-02','AA','2251'),('1987-10-02','AA','2251'),('1987-10-02','AA','2275'),('1987-10-02','AA','2278'),('1987-10-02','AA','2351'),('1987-10-02','AA','2357'),('1987-10-02','AA','2361'),('1987-10-02','AA','2490'),('1987-10-02','AA','2528'),('1987-10-02','AA','2528'),('1987-10-02','AA','2735'),('1987-10-02','AA','2735'),('1987-10-02','AA','2751'),('1987-10-02','AL','2'),('1987-10-02','AL','2'),('1987-10-02','AL','7'),('1987-10-02','AL','7'),('1987-10-02','AL','26'),('1987-10-02','AL','26'),('1987-10-02','AL','34'),('1987-10-02','AL','34'),('1987-10-02','AL','36'),('1987-10-02','AL','36'),('1987-10-02','AL','45'),('1987-10-02','AL','45'),('1987-10-02','AL','45'),('1987-10-02','AL','91'),('1987-10-02','AL','91'),('1987-10-02','AL','104'),('1987-10-02','AL','104'),('1987-10-02','AL','104'),('1987-10-02','AL','109'),('1987-10-02','AL','112'),('1987-10-02','AL','112'),('1987-10-02','AL','123'),('1987-10-02','AL','149'),('1987-10-02','AL','160'),('1987-10-02','AL','160'),('1987-10-02','AL','165'),('1987-10-02','AL','171'),('1987-10-02','AL','171'),('1987-10-02','AL','176'),('1987-10-02','AL','176'),('1987-10-02','AL','179'),('1987-10-02','AL','215'),('1987-10-02','AL','231'),('1987-10-02','AL','263'),('1987-10-02','AL','263'),('1987-10-02','AL','268'),('1987-10-02','AL','268'),('1987-10-02','AL','268'),('1987-10-02','AL','281'),('1987-10-02','AL','281'),('1987-10-02','AL','287'),('1987-10-02','AL','287'),('1987-10-02','AL','309'),('1987-10-02','AL','309'),('1987-10-02','AL','341'),('1987-10-02','AL','344'),('1987-10-02','AL','344'),('1987-10-02','AL','357'),('1987-10-02','AL','357'),('1987-10-02','AL','368'),('1987-10-02','AL','381'),('1987-10-02','AL','396'),('1987-10-02','AL','397'),('1987-10-02','AL','397'),('1987-10-02','AL','416'),('1987-10-02','AL','416'),('1987-10-02','AL','417'),('1987-10-02','AL','438'),('1987-10-02','AL','438'),('1987-10-02','AL','446'),('1987-10-02','AL','451'),('1987-10-02','AL','451'),('1987-10-02','AL','491'),('1987-10-02','AL','491'),('1987-10-02','AL','523'),('1987-10-02','AL','523'),('1987-10-02','AL','523'),('1987-10-02','AL','525'),('1987-10-02','AL','525'),('1987-10-02','AL','533'),('1987-10-02','AL','533'),('1987-10-02','AL','546'),('1987-10-02','AL','546'),('1987-10-02','AL','556'),('1987-10-02','AL','556'),('1987-10-02','AL','601'),('1987-10-02','AL','601'),('1987-10-02','AL','627'),('1987-10-02','AL','629'),('1987-10-02','AL','670'),('1987-10-02','AL','670'),('1987-10-02','AL','670'),('1987-10-02','AL','673'),('1987-10-02','AL','680'),('1987-10-03','AA','2'),('1987-10-03','AA','2'),('1987-10-03','AA','2'),('1987-10-03','AA','7'),('1987-10-03','AA','7'),('1987-10-03','AA','26'),('1987-10-03','AA','34'),('1987-10-03','AA','36'),('1987-10-03','AA','91'),('1987-10-03','AA','101'),('1987-10-03','AA','101'),('1987-10-03','AA','109'),('1987-10-03','AA','109'),('1987-10-03','AA','112'),('1987-10-03','AA','123'),('1987-10-03','AA','123'),('1987-10-03','AA','165'),('1987-10-03','AA','165'),('1987-10-03','AA','165'),('1987-10-03','AA','176'),('1987-10-03','AA','176'),('1987-10-03','AA','176'),('1987-10-03','AA','176'),('1987-10-03','AA','179'),('1987-10-03','AA','179'),('1987-10-03','AA','215'),('1987-10-03','AA','215'),('1987-10-03','AA','231'),('1987-10-03','AA','231'),('1987-10-03','AA','263'),('1987-10-03','AA','263'),('1987-10-03','AA','268'),('1987-10-03','AA','281'),('1987-10-03','AA','287'),('1987-10-03','AA','287'),('1987-10-03','AA','309'),('1987-10-03','AA','309'),('1987-10-03','AA','309'),('1987-10-03','AA','341'),('1987-10-03','AA','344'),('1987-10-03','AA','344'),('1987-10-03','AA','347'),('1987-10-03','AA','347'),('1987-10-03','AA','368'),('1987-10-03','AA','381'),('1987-10-03','AA','381'),('1987-10-03','AA','381'),('1987-10-03','AA','396'),('1987-10-03','AA','396'),('1987-10-03','AA','397'),('1987-10-03','AA','397'),('1987-10-03','AA','417'),('1987-10-03','AA','417'),('1987-10-03','AA','446'),('1987-10-03','AA','451'),('1987-10-03','AA','451'),('1987-10-03','AA','460'),('1987-10-03','AA','460'),('1987-10-03','AA','491'),('1987-10-03','AA','491'),('1987-10-03','AA','504'),('1987-10-03','AA','504'),('1987-10-03','AA','519'),('1987-10-03','AA','519'),('1987-10-03','AA','523'),('1987-10-03','AA','523'),('1987-10-03','AA','525'),('1987-10-03','AA','525'),('1987-10-03','AA','525'),('1987-10-03','AA','533'),('1987-10-03','AA','533'),('1987-10-03','AA','546'),('1987-10-03','AA','546'),('1987-10-03','AA','546'),('1987-10-03','AA','546'),('1987-10-03','AA','556'),('1987-10-03','AA','556'),('1987-10-03','AA','556'),('1987-10-03','AA','597'),('1987-10-03','AA','597'),('1987-10-03','AA','597'),('1987-10-03','AA','601'),('1987-10-03','AA','601'),('1987-10-03','AA','627'),('1987-10-03','AA','629'),('1987-10-03','AA','629'),('1987-10-03','AA','670'),('1987-10-03','AA','673'),('1987-10-03','AA','673'),('1987-10-03','AA','680'),('1987-10-03','AA','680'),('1987-10-03','AA','817'),('1987-10-03','AA','817'),('1987-10-03','AA','824'),('1987-10-03','AA','824'),('1987-10-03','AA','824'),('1987-10-03','AA','824'),('1987-10-03','AA','832'),('1987-10-03','AA','832'),('1987-10-03','AA','852'),('1987-10-03','AA','852'),('1987-10-03','AA','866'),('1987-10-03','AA','866'),('1987-10-03','AA','871'),('1987-10-03','AA','871'),('1987-10-03','AA','880'),('1987-10-03','AA','880'),('1987-10-03','AA','880'),('1987-10-03','AA','880'),('1987-10-03','AA','883'),('1987-10-03','AA','883'),('1987-10-03','AA','885'),('1987-10-03','AA','885'),('1987-10-03','AA','885'),('1987-10-03','AA','890'),('1987-10-03','AA','890'),('1987-10-03','AA','893'),('1987-10-03','AA','893'),('1987-10-03','AA','905'),('1987-10-03','AA','905'),('1987-10-03','AA','915'),('1987-10-03','AA','929'),('1987-10-03','AA','929'),('1987-10-03','AA','936'),('1987-10-03','AA','936'),('1987-10-03','AA','937'),('1987-10-03','AA','937'),('1987-10-03','AA','955'),('1987-10-03','AA','955'),('1987-10-03','AA','966'),('1987-10-03','AA','1002'),('1987-10-03','AA','1002'),('1987-10-03','AA','1004'),('1987-10-03','AA','1004'),('1987-10-03','AA','1015'),('1987-10-03','AA','1015'),('1987-10-03','AA','1021'),('1987-10-03','AA','1041'),('1987-10-03','AA','1041'),('1987-10-03','AA','1046'),('1987-10-03','AA','1046'),('1987-10-03','AA','1048'),('1987-10-03','AA','1048'),('1987-10-03','AA','1061'),('1987-10-03','AA','1061'),('1987-10-03','AA','1088'),('1987-10-03','AA','1088'),('1987-10-03','AA','2033'),('1987-10-03','AA','2033'),('1987-10-03','AA','2050'),('1987-10-03','AA','2058'),('1987-10-03','AA','2071'),('1987-10-03','AA','2071'),('1987-10-03','AA','2086'),('1987-10-03','AA','2105'),('1987-10-03','AA','2111'),('1987-10-03','AA','2123'),('1987-10-03','AA','2123'),('1987-10-03','AA','2147'),('1987-10-03','AA','2147'),('1987-10-03','AA','2199'),('1987-10-03','AA','2207'),('1987-10-03','AA','2207'),('1987-10-03','AA','2245'),('1987-10-03','AA','2251'),('1987-10-03','AA','2251'),('1987-10-03','AA','2275'),('1987-10-03','AA','2278'),('1987-10-03','AA','2361'),('1987-10-03','AA','2490'),('1987-10-03','AA','2528'),('1987-10-03','AA','2528'),('1987-10-03','AA','2735'),('1987-10-03','AA','2735'),('1987-10-03','AL','2'),('1987-10-03','AL','2'),('1987-10-03','AL','7'),('1987-10-03','AL','7'),('1987-10-03','AL','26'),('1987-10-03','AL','26'),('1987-10-03','AL','34'),('1987-10-03','AL','34'),('1987-10-03','AL','36'),('1987-10-03','AL','36'),('1987-10-03','AL','45'),('1987-10-03','AL','45'),('1987-10-03','AL','45'),('1987-10-03','AL','91'),('1987-10-03','AL','91'),('1987-10-03','AL','104'),('1987-10-03','AL','104'),('1987-10-03','AL','109'),('1987-10-03','AL','112'),('1987-10-03','AL','112'),('1987-10-03','AL','149'),('1987-10-03','AL','160'),('1987-10-03','AL','160'),('1987-10-03','AL','165'),('1987-10-03','AL','171'),('1987-10-03','AL','171'),('1987-10-03','AL','176'),('1987-10-03','AL','176'),('1987-10-03','AL','179'),('1987-10-03','AL','215'),('1987-10-03','AL','231'),('1987-10-03','AL','263'),('1987-10-03','AL','287'),('1987-10-03','AL','287'),('1987-10-03','AL','309'),('1987-10-03','AL','309'),('1987-10-03','AL','344'),('1987-10-03','AL','344'),('1987-10-03','AL','357'),('1987-10-03','AL','357'),('1987-10-03','AL','381'),('1987-10-03','AL','396'),('1987-10-03','AL','397'),('1987-10-03','AL','397'),('1987-10-03','AL','397'),('1987-10-03','AL','416'),('1987-10-03','AL','417'),('1987-10-03','AL','438'),('1987-10-03','AL','451'),('1987-10-03','AL','451'),('1987-10-03','AL','491'),('1987-10-03','AL','491'),('1987-10-03','AL','523'),('1987-10-03','AL','523'),('1987-10-03','AL','525'),('1987-10-03','AL','525'),('1987-10-03','AL','533'),('1987-10-03','AL','546'),('1987-10-03','AL','546'),('1987-10-03','AL','556'),('1987-10-03','AL','556'),('1987-10-03','AL','601'),('1987-10-03','AL','601'),('1987-10-03','AL','627'),('1987-10-03','AL','670'),('1987-10-03','AL','673'),('1987-10-03','AL','680'),('1987-10-03','AL','905'),('1987-10-03','AL','936'),('1987-10-03','AL','966'),('1987-10-04','AA','2'),('1987-10-04','AA','2'),('1987-10-04','AA','2'),('1987-10-04','AA','7'),('1987-10-04','AA','7'),('1987-10-04','AA','26'),('1987-10-04','AA','34'),('1987-10-04','AA','36'),('1987-10-04','AA','91'),('1987-10-04','AA','101'),('1987-10-04','AA','101'),('1987-10-04','AA','109'),('1987-10-04','AA','109'),('1987-10-04','AA','112'),('1987-10-04','AA','123'),('1987-10-04','AA','123'),('1987-10-04','AA','160'),('1987-10-04','AA','165'),('1987-10-04','AA','165'),('1987-10-04','AA','165'),('1987-10-04','AA','176'),('1987-10-04','AA','176'),('1987-10-04','AA','176'),('1987-10-04','AA','176'),('1987-10-04','AA','179'),('1987-10-04','AA','179'),('1987-10-04','AA','215'),('1987-10-04','AA','215'),('1987-10-04','AA','231'),('1987-10-04','AA','231'),('1987-10-04','AA','263'),('1987-10-04','AA','263'),('1987-10-04','AA','268'),('1987-10-04','AA','268'),('1987-10-04','AA','281'),('1987-10-04','AA','287'),('1987-10-04','AA','287'),('1987-10-04','AA','309'),('1987-10-04','AA','309'),('1987-10-04','AA','309'),('1987-10-04','AA','341'),('1987-10-04','AA','344'),('1987-10-04','AA','344'),('1987-10-04','AA','347'),('1987-10-04','AA','347'),('1987-10-04','AA','381'),('1987-10-04','AA','381'),('1987-10-04','AA','381'),('1987-10-04','AA','396'),('1987-10-04','AA','396'),('1987-10-04','AA','397'),('1987-10-04','AA','397'),('1987-10-04','AA','417'),('1987-10-04','AA','417'),('1987-10-04','AA','446'),('1987-10-04','AA','451'),('1987-10-04','AA','451'),('1987-10-04','AA','460'),('1987-10-04','AA','460'),('1987-10-04','AA','491'),('1987-10-04','AA','491'),('1987-10-04','AA','504'),('1987-10-04','AA','504'),('1987-10-04','AA','519'),('1987-10-04','AA','519'),('1987-10-04','AA','523'),('1987-10-04','AA','523'),('1987-10-04','AA','525'),('1987-10-04','AA','525'),('1987-10-04','AA','525'),('1987-10-04','AA','533'),('1987-10-04','AA','533'),('1987-10-04','AA','533'),('1987-10-04','AA','546'),('1987-10-04','AA','546'),('1987-10-04','AA','546'),('1987-10-04','AA','546'),('1987-10-04','AA','556'),('1987-10-04','AA','556'),('1987-10-04','AA','556'),('1987-10-04','AA','597'),('1987-10-04','AA','597'),('1987-10-04','AA','597'),('1987-10-04','AA','601'),('1987-10-04','AA','601'),('1987-10-04','AA','627'),('1987-10-04','AA','629'),('1987-10-04','AA','629'),('1987-10-04','AA','670'),('1987-10-04','AA','673'),('1987-10-04','AA','673'),('1987-10-04','AA','680'),('1987-10-04','AA','680'),('1987-10-04','AA','817'),('1987-10-04','AA','817'),('1987-10-04','AA','824'),('1987-10-04','AA','824'),('1987-10-04','AA','824'),('1987-10-04','AA','832'),('1987-10-04','AA','832'),('1987-10-04','AA','852'),('1987-10-04','AA','852'),('1987-10-04','AA','866'),('1987-10-04','AA','866'),('1987-10-04','AA','871'),('1987-10-04','AA','871'),('1987-10-04','AA','880'),('1987-10-04','AA','880'),('1987-10-04','AA','880'),('1987-10-04','AA','880'),('1987-10-04','AA','883'),('1987-10-04','AA','883'),('1987-10-04','AA','885'),('1987-10-04','AA','885'),('1987-10-04','AA','890'),('1987-10-04','AA','890'),('1987-10-04','AA','893'),('1987-10-04','AA','893'),('1987-10-04','AA','905'),('1987-10-04','AA','905'),('1987-10-04','AA','915'),('1987-10-04','AA','929'),('1987-10-04','AA','929'),('1987-10-04','AA','936'),('1987-10-04','AA','936'),('1987-10-04','AA','937'),('1987-10-04','AA','937'),('1987-10-04','AA','955'),('1987-10-04','AA','955'),('1987-10-04','AA','966'),('1987-10-04','AA','1002'),('1987-10-04','AA','1002'),('1987-10-04','AA','1004'),('1987-10-04','AA','1004'),('1987-10-04','AA','1015'),('1987-10-04','AA','1021'),('1987-10-04','AA','1021'),('1987-10-04','AA','1041'),('1987-10-04','AA','1041'),('1987-10-04','AA','1046'),('1987-10-04','AA','1046'),('1987-10-04','AA','1048'),('1987-10-04','AA','1048'),('1987-10-04','AA','1061'),('1987-10-04','AA','1061'),('1987-10-04','AA','1088'),('1987-10-04','AA','1088'),('1987-10-04','AA','2033'),('1987-10-04','AA','2033'),('1987-10-04','AA','2050'),('1987-10-04','AA','2058'),('1987-10-04','AA','2071'),('1987-10-04','AA','2071'),('1987-10-04','AA','2086'),('1987-10-04','AA','2111'),('1987-10-04','AA','2123'),('1987-10-04','AA','2123'),('1987-10-04','AA','2147'),('1987-10-04','AA','2147'),('1987-10-04','AA','2199'),('1987-10-04','AA','2199'),('1987-10-04','AA','2207'),('1987-10-04','AA','2207'),('1987-10-04','AA','2230'),('1987-10-04','AA','2245'),('1987-10-04','AA','2251'),('1987-10-04','AA','2251'),('1987-10-04','AA','2275'),('1987-10-04','AA','2278'),('1987-10-04','AA','2357'),('1987-10-04','AA','2361'),('1987-10-04','AA','2490'),('1987-10-04','AA','2528'),('1987-10-04','AA','2528'),('1987-10-04','AA','2735'),('1987-10-04','AA','2735'),('1987-10-04','AA','2751'),('1987-10-04','AL','7'),('1987-10-04','AL','7'),('1987-10-04','AL','26'),('1987-10-04','AL','26'),('1987-10-04','AL','34'),('1987-10-04','AL','34'),('1987-10-04','AL','36'),('1987-10-04','AL','36'),('1987-10-04','AL','45'),('1987-10-04','AL','45'),('1987-10-04','AL','45'),('1987-10-04','AL','91'),('1987-10-04','AL','91'),('1987-10-04','AL','104'),('1987-10-04','AL','123'),('1987-10-04','AL','149'),('1987-10-04','AL','160'),('1987-10-04','AL','160'),('1987-10-04','AL','165'),('1987-10-04','AL','171'),('1987-10-04','AL','171'),('1987-10-04','AL','176'),('1987-10-04','AL','176'),('1987-10-04','AL','179'),('1987-10-04','AL','215'),('1987-10-04','AL','231'),('1987-10-04','AL','263'),('1987-10-04','AL','263'),('1987-10-04','AL','281'),('1987-10-04','AL','281'),('1987-10-04','AL','309'),('1987-10-04','AL','309'),('1987-10-04','AL','341'),('1987-10-04','AL','344'),('1987-10-04','AL','344'),('1987-10-04','AL','357'),('1987-10-04','AL','357'),('1987-10-04','AL','368'),('1987-10-04','AL','416'),('1987-10-04','AL','416'),('1987-10-04','AL','417'),('1987-10-04','AL','438'),('1987-10-04','AL','438'),('1987-10-04','AL','451'),('1987-10-04','AL','491'),('1987-10-04','AL','491'),('1987-10-04','AL','525'),('1987-10-04','AL','525'),('1987-10-04','AL','533'),('1987-10-04','AL','533'),('1987-10-04','AL','546'),('1987-10-04','AL','546'),('1987-10-04','AL','556'),('1987-10-04','AL','556'),('1987-10-04','AL','601'),('1987-10-04','AL','627'),('1987-10-04','AL','629'),('1987-10-04','AL','670'),('1987-10-04','AL','670'),('1987-10-04','AL','670'),('1987-10-04','AL','673'),('1987-10-04','AL','680'),('1987-10-04','AL','937'),('1987-10-04','AL','937'),('1987-10-04','AL','955'),('1987-10-12','AA','2'),('1987-10-12','AA','2'),('1987-10-12','AA','2'),('1987-10-12','AA','7'),('1987-10-12','AA','7'),('1987-10-12','AA','26'),('1987-10-12','AA','34'),('1987-10-12','AA','36'),('1987-10-12','AA','91'),('1987-10-12','AA','101'),('1987-10-12','AA','101'),('1987-10-12','AA','109'),('1987-10-12','AA','109'),('1987-10-12','AA','112'),('1987-10-12','AA','123'),('1987-10-12','AA','123'),('1987-10-12','AA','160'),('1987-10-12','AA','165'),('1987-10-12','AA','165'),('1987-10-12','AA','165'),('1987-10-12','AA','176'),('1987-10-12','AA','176'),('1987-10-12','AA','176'),('1987-10-12','AA','176'),('1987-10-12','AA','179'),('1987-10-12','AA','179'),('1987-10-12','AA','215'),('1987-10-12','AA','215'),('1987-10-12','AA','231'),('1987-10-12','AA','263'),('1987-10-12','AA','263'),('1987-10-12','AA','268'),('1987-10-12','AA','268'),('1987-10-12','AA','281'),('1987-10-12','AA','287'),('1987-10-12','AA','287'),('1987-10-12','AA','309'),('1987-10-12','AA','309'),('1987-10-12','AA','309'),('1987-10-12','AA','341'),('1987-10-12','AA','344'),('1987-10-12','AA','344'),('1987-10-12','AA','347'),('1987-10-12','AA','347'),('1987-10-12','AA','368'),('1987-10-12','AA','381'),('1987-10-12','AA','381'),('1987-10-12','AA','381'),('1987-10-12','AA','396'),('1987-10-12','AA','396'),('1987-10-12','AA','397'),('1987-10-12','AA','397'),('1987-10-12','AA','417'),('1987-10-12','AA','417'),('1987-10-12','AA','446'),('1987-10-12','AA','451'),('1987-10-12','AA','451'),('1987-10-12','AA','460'),('1987-10-12','AA','460'),('1987-10-12','AA','491'),('1987-10-12','AA','504'),('1987-10-12','AA','504'),('1987-10-12','AA','519'),('1987-10-12','AA','523'),('1987-10-12','AA','523'),('1987-10-12','AA','525'),('1987-10-12','AA','525'),('1987-10-12','AA','525'),('1987-10-12','AA','533'),('1987-10-12','AA','533'),('1987-10-12','AA','533'),('1987-10-12','AA','546'),('1987-10-12','AA','546'),('1987-10-12','AA','546'),('1987-10-12','AA','546'),('1987-10-12','AA','556'),('1987-10-12','AA','556'),('1987-10-12','AA','556'),('1987-10-12','AA','597'),('1987-10-12','AA','597'),('1987-10-12','AA','597'),('1987-10-12','AA','601'),('1987-10-12','AA','601'),('1987-10-12','AA','627'),('1987-10-12','AA','629'),('1987-10-12','AA','629'),('1987-10-12','AA','670'),('1987-10-12','AA','673'),('1987-10-12','AA','673'),('1987-10-12','AA','680'),('1987-10-12','AA','680'),('1987-10-12','AA','817'),('1987-10-12','AA','817'),('1987-10-12','AA','824'),('1987-10-12','AA','824'),('1987-10-12','AA','824'),('1987-10-12','AA','824'),('1987-10-12','AA','832'),('1987-10-12','AA','832'),('1987-10-12','AA','852'),('1987-10-12','AA','852'),('1987-10-12','AA','866'),('1987-10-12','AA','866'),('1987-10-12','AA','871'),('1987-10-12','AA','871'),('1987-10-12','AA','880'),('1987-10-12','AA','880'),('1987-10-12','AA','880'),('1987-10-12','AA','880'),('1987-10-12','AA','883'),('1987-10-12','AA','883'),('1987-10-12','AA','885'),('1987-10-12','AA','885'),('1987-10-12','AA','885'),('1987-10-12','AA','890'),('1987-10-12','AA','890'),('1987-10-12','AA','893'),('1987-10-12','AA','893'),('1987-10-12','AA','905'),('1987-10-12','AA','905'),('1987-10-12','AA','915'),('1987-10-12','AA','929'),('1987-10-12','AA','929'),('1987-10-12','AA','936'),('1987-10-12','AA','936'),('1987-10-12','AA','937'),('1987-10-12','AA','937'),('1987-10-12','AA','955'),('1987-10-12','AA','955'),('1987-10-12','AA','966'),('1987-10-12','AA','1002'),('1987-10-12','AA','1002'),('1987-10-12','AA','1004'),('1987-10-12','AA','1015'),('1987-10-12','AA','1015'),('1987-10-12','AA','1021'),('1987-10-12','AA','1021'),('1987-10-12','AA','1041'),('1987-10-12','AA','1041'),('1987-10-12','AA','1046'),('1987-10-12','AA','1046'),('1987-10-12','AA','1048'),('1987-10-12','AA','1048'),('1987-10-12','AA','1061'),('1987-10-12','AA','1061'),('1987-10-12','AA','1088'),('1987-10-12','AA','1088'),('1987-10-12','AA','2033'),('1987-10-12','AA','2033'),('1987-10-12','AA','2050'),('1987-10-12','AA','2058'),('1987-10-12','AA','2071'),('1987-10-12','AA','2071'),('1987-10-12','AA','2086'),('1987-10-12','AA','2105'),('1987-10-12','AA','2111'),('1987-10-12','AA','2123'),('1987-10-12','AA','2123'),('1987-10-12','AA','2147'),('1987-10-12','AA','2147'),('1987-10-12','AA','2199'),('1987-10-12','AA','2199'),('1987-10-12','AA','2207'),('1987-10-12','AA','2207'),('1987-10-12','AA','2217'),('1987-10-12','AA','2230'),('1987-10-12','AA','2245'),('1987-10-12','AA','2251'),('1987-10-12','AA','2251'),('1987-10-12','AA','2275'),('1987-10-12','AA','2278'),('1987-10-12','AA','2351'),('1987-10-12','AA','2357'),('1987-10-12','AA','2361'),('1987-10-12','AA','2490'),('1987-10-12','AA','2528'),('1987-10-12','AA','2528'),('1987-10-12','AA','2735'),('1987-10-12','AA','2735'),('1987-10-12','AA','2751'),('1987-10-12','AL','2'),('1987-10-12','AL','2'),('1987-10-12','AL','7'),('1987-10-12','AL','7'),('1987-10-12','AL','26'),('1987-10-12','AL','26'),('1987-10-12','AL','34'),('1987-10-12','AL','34'),('1987-10-12','AL','36'),('1987-10-12','AL','36'),('1987-10-12','AL','45'),('1987-10-12','AL','45'),('1987-10-12','AL','45'),('1987-10-12','AL','91'),('1987-10-12','AL','91'),('1987-10-12','AL','104'),('1987-10-12','AL','104'),('1987-10-12','AL','104'),('1987-10-12','AL','109'),('1987-10-12','AL','112'),('1987-10-12','AL','112'),('1987-10-12','AL','123'),('1987-10-12','AL','149'),('1987-10-12','AL','160'),('1987-10-12','AL','160'),('1987-10-12','AL','165'),('1987-10-12','AL','171'),('1987-10-12','AL','171'),('1987-10-12','AL','176'),('1987-10-12','AL','176'),('1987-10-12','AL','179'),('1987-10-12','AL','215'),('1987-10-12','AL','231'),('1987-10-12','AL','263'),('1987-10-12','AL','263'),('1987-10-12','AL','268'),('1987-10-12','AL','268'),('1987-10-12','AL','268'),('1987-10-12','AL','281'),('1987-10-12','AL','281'),('1987-10-12','AL','287'),('1987-10-12','AL','287'),('1987-10-12','AL','309'),('1987-10-12','AL','309'),('1987-10-12','AL','341'),('1987-10-12','AL','344'),('1987-10-12','AL','344'),('1987-10-12','AL','357'),('1987-10-12','AL','357'),('1987-10-12','AL','368'),('1987-10-12','AL','381'),('1987-10-12','AL','396'),('1987-10-12','AL','397'),('1987-10-12','AL','397'),('1987-10-12','AL','416'),('1987-10-12','AL','416'),('1987-10-12','AL','417'),('1987-10-12','AL','438'),('1987-10-12','AL','438'),('1987-10-12','AL','446'),('1987-10-12','AL','451'),('1987-10-12','AL','451'),('1987-10-12','AL','491'),('1987-10-12','AL','491'),('1987-10-12','AL','523'),('1987-10-12','AL','523'),('1987-10-12','AL','523'),('1987-10-12','AL','525'),('1987-10-12','AL','525'),('1987-10-12','AL','533'),('1987-10-12','AL','533'),('1987-10-12','AL','546'),('1987-10-12','AL','546'),('1987-10-12','AL','556'),('1987-10-12','AL','556'),('1987-10-12','AL','627'),('1987-10-12','AL','629'),('1987-10-12','AL','670'),('1987-10-12','AL','670'),('1987-10-12','AL','670'),('1987-10-12','AL','673'),('1987-10-13','AA','2'),('1987-10-13','AA','2'),('1987-10-13','AA','2'),('1987-10-13','AA','7'),('1987-10-13','AA','7'),('1987-10-13','AA','26'),('1987-10-13','AA','34'),('1987-10-13','AA','36'),('1987-10-13','AA','91'),('1987-10-13','AA','101'),('1987-10-13','AA','101'),('1987-10-13','AA','109'),('1987-10-13','AA','109'),('1987-10-13','AA','112'),('1987-10-13','AA','123'),('1987-10-13','AA','123'),('1987-10-13','AA','160'),('1987-10-13','AA','165'),('1987-10-13','AA','165'),('1987-10-13','AA','165'),('1987-10-13','AA','176'),('1987-10-13','AA','176'),('1987-10-13','AA','176'),('1987-10-13','AA','176'),('1987-10-13','AA','179'),('1987-10-13','AA','179'),('1987-10-13','AA','215'),('1987-10-13','AA','215'),('1987-10-13','AA','231'),('1987-10-13','AA','231'),('1987-10-13','AA','263'),('1987-10-13','AA','263'),('1987-10-13','AA','268'),('1987-10-13','AA','268'),('1987-10-13','AA','281'),('1987-10-13','AA','287'),('1987-10-13','AA','287'),('1987-10-13','AA','309'),('1987-10-13','AA','309'),('1987-10-13','AA','309'),('1987-10-13','AA','341'),('1987-10-13','AA','344'),('1987-10-13','AA','344'),('1987-10-13','AA','347'),('1987-10-13','AA','347'),('1987-10-13','AA','368'),('1987-10-13','AA','381'),('1987-10-13','AA','381'),('1987-10-13','AA','381'),('1987-10-13','AA','396'),('1987-10-13','AA','396'),('1987-10-13','AA','397'),('1987-10-13','AA','397'),('1987-10-13','AA','417'),('1987-10-13','AA','417'),('1987-10-13','AA','446'),('1987-10-13','AA','451'),('1987-10-13','AA','451'),('1987-10-13','AA','460'),('1987-10-13','AA','460'),('1987-10-13','AA','491'),('1987-10-13','AA','504'),('1987-10-13','AA','504'),('1987-10-13','AA','519'),('1987-10-13','AA','519'),('1987-10-13','AA','523'),('1987-10-13','AA','523'),('1987-10-13','AA','525'),('1987-10-13','AA','525'),('1987-10-13','AA','533'),('1987-10-13','AA','533'),('1987-10-13','AA','533'),('1987-10-13','AA','546'),('1987-10-13','AA','546'),('1987-10-13','AA','546'),('1987-10-13','AA','556'),('1987-10-13','AA','556'),('1987-10-13','AA','556'),('1987-10-13','AA','597'),('1987-10-13','AA','597'),('1987-10-13','AA','597'),('1987-10-13','AA','601'),('1987-10-13','AA','601'),('1987-10-13','AA','627'),('1987-10-13','AA','629'),('1987-10-13','AA','629'),('1987-10-13','AA','673'),('1987-10-13','AA','673'),('1987-10-13','AA','680'),('1987-10-13','AA','817'),('1987-10-13','AA','817'),('1987-10-13','AA','824'),('1987-10-13','AA','824'),('1987-10-13','AA','824'),('1987-10-13','AA','832'),('1987-10-13','AA','832'),('1987-10-13','AA','852'),('1987-10-13','AA','866'),('1987-10-13','AA','866'),('1987-10-13','AA','871'),('1987-10-13','AA','871'),('1987-10-13','AA','880'),('1987-10-13','AA','880'),('1987-10-13','AA','880'),('1987-10-13','AA','880'),('1987-10-13','AA','883'),('1987-10-13','AA','883'),('1987-10-13','AA','885'),('1987-10-13','AA','885'),('1987-10-13','AA','885'),('1987-10-13','AA','890'),('1987-10-13','AA','890'),('1987-10-13','AA','893'),('1987-10-13','AA','893'),('1987-10-13','AA','905'),('1987-10-13','AA','905'),('1987-10-13','AA','915'),('1987-10-13','AA','929'),('1987-10-13','AA','929'),('1987-10-13','AA','936'),('1987-10-13','AA','936'),('1987-10-13','AA','937'),('1987-10-13','AA','937'),('1987-10-13','AA','955'),('1987-10-13','AA','955'),('1987-10-13','AA','966'),('1987-10-13','AA','1002'),('1987-10-13','AA','1002'),('1987-10-13','AA','1004'),('1987-10-13','AA','1004'),('1987-10-13','AA','1015'),('1987-10-13','AA','1015'),('1987-10-13','AA','1021'),('1987-10-13','AA','1021'),('1987-10-13','AA','1041'),('1987-10-13','AA','1041'),('1987-10-13','AA','1046'),('1987-10-13','AA','1046'),('1987-10-13','AA','1048'),('1987-10-13','AA','1048'),('1987-10-13','AA','1061'),('1987-10-13','AA','1061'),('1987-10-13','AA','1088'),('1987-10-13','AA','1088'),('1987-10-13','AA','2033'),('1987-10-13','AA','2050'),('1987-10-13','AA','2071'),('1987-10-13','AA','2071'),('1987-10-13','AA','2086'),('1987-10-13','AA','2105'),('1987-10-13','AA','2111'),('1987-10-13','AA','2123'),('1987-10-13','AA','2123'),('1987-10-13','AA','2147'),('1987-10-13','AA','2147'),('1987-10-13','AA','2199'),('1987-10-13','AA','2199'),('1987-10-13','AA','2207'),('1987-10-13','AA','2207'),('1987-10-13','AA','2217'),('1987-10-13','AA','2230'),('1987-10-13','AA','2245'),('1987-10-13','AA','2251'),('1987-10-13','AA','2251'),('1987-10-13','AA','2275'),('1987-10-13','AA','2351'),('1987-10-13','AA','2357'),('1987-10-13','AA','2361'),('1987-10-13','AA','2490'),('1987-10-13','AA','2528'),('1987-10-13','AA','2528'),('1987-10-13','AA','2735'),('1987-10-13','AA','2735'),('1987-10-13','AA','2751'),('1987-10-13','AL','2'),('1987-10-13','AL','2'),('1987-10-13','AL','7'),('1987-10-13','AL','7'),('1987-10-13','AL','26'),('1987-10-13','AL','26'),('1987-10-13','AL','34'),('1987-10-13','AL','34'),('1987-10-13','AL','36'),('1987-10-13','AL','36'),('1987-10-13','AL','45'),('1987-10-13','AL','45'),('1987-10-13','AL','45'),('1987-10-13','AL','91'),('1987-10-13','AL','91'),('1987-10-13','AL','104'),('1987-10-13','AL','104'),('1987-10-13','AL','104'),('1987-10-13','AL','109'),('1987-10-13','AL','112'),('1987-10-13','AL','112'),('1987-10-13','AL','123'),('1987-10-13','AL','149'),('1987-10-13','AL','160'),('1987-10-13','AL','160'),('1987-10-13','AL','171'),('1987-10-13','AL','171'),('1987-10-13','AL','176'),('1987-10-13','AL','176'),('1987-10-13','AL','179'),('1987-10-13','AL','231'),('1987-10-13','AL','263'),('1987-10-13','AL','263'),('1987-10-13','AL','268'),('1987-10-13','AL','268'),('1987-10-13','AL','268'),('1987-10-13','AL','281'),('1987-10-13','AL','281'),('1987-10-13','AL','287'),('1987-10-13','AL','287'),('1987-10-13','AL','309'),('1987-10-13','AL','309'),('1987-10-13','AL','341'),('1987-10-13','AL','357'),('1987-10-13','AL','357'),('1987-10-13','AL','368'),('1987-10-13','AL','381'),('1987-10-13','AL','396'),('1987-10-13','AL','397'),('1987-10-13','AL','397'),('1987-10-13','AL','416'),('1987-10-13','AL','417'),('1987-10-13','AL','438'),('1987-10-13','AL','438'),('1987-10-13','AL','446'),('1987-10-13','AL','451'),('1987-10-13','AL','451'),('1987-10-13','AL','491'),('1987-10-13','AL','491'),('1987-10-13','AL','523'),('1987-10-13','AL','523'),('1987-10-13','AL','523'),('1987-10-13','AL','525'),('1987-10-13','AL','525'),('1987-10-13','AL','533'),('1987-10-13','AL','533'),('1987-10-13','AL','546'),('1987-10-13','AL','546'),('1987-10-13','AL','556'),('1987-10-13','AL','556'),('1987-10-13','AL','601'),('1987-10-13','AL','601'),('1987-10-13','AL','627'),('1987-10-13','AL','629'),('1987-10-13','AL','670'),('1987-10-13','AL','670'),('1987-10-13','AL','670'),('1987-10-13','AL','673'),('1987-10-13','AL','680'),('1987-10-14','AA','2'),('1987-10-14','AA','2'),('1987-10-14','AA','2'),('1987-10-14','AA','7'),('1987-10-14','AA','7'),('1987-10-14','AA','26'),('1987-10-14','AA','34'),('1987-10-14','AA','36'),('1987-10-14','AA','91'),('1987-10-14','AA','101'),('1987-10-14','AA','101'),('1987-10-14','AA','109'),('1987-10-14','AA','109'),('1987-10-14','AA','112'),('1987-10-14','AA','123'),('1987-10-14','AA','123'),('1987-10-14','AA','160'),('1987-10-14','AA','165'),('1987-10-14','AA','165'),('1987-10-14','AA','176'),('1987-10-14','AA','176'),('1987-10-14','AA','176'),('1987-10-14','AA','176'),('1987-10-14','AA','179'),('1987-10-14','AA','179'),('1987-10-14','AA','215'),('1987-10-14','AA','215'),('1987-10-14','AA','231'),('1987-10-14','AA','231'),('1987-10-14','AA','263'),('1987-10-14','AA','263'),('1987-10-14','AA','268'),('1987-10-14','AA','268'),('1987-10-14','AA','281'),('1987-10-14','AA','287'),('1987-10-14','AA','309'),('1987-10-14','AA','309'),('1987-10-14','AA','309'),('1987-10-14','AA','341'),('1987-10-14','AA','344'),('1987-10-14','AA','344'),('1987-10-14','AA','347'),('1987-10-14','AA','347'),('1987-10-14','AA','368'),('1987-10-14','AA','381'),('1987-10-14','AA','381'),('1987-10-14','AA','381'),('1987-10-14','AA','396'),('1987-10-14','AA','396'),('1987-10-14','AA','397'),('1987-10-14','AA','417'),('1987-10-14','AA','446'),('1987-10-14','AA','451'),('1987-10-14','AA','451'),('1987-10-14','AA','460'),('1987-10-14','AA','460'),('1987-10-14','AA','491'),('1987-10-14','AA','504'),('1987-10-14','AA','519'),('1987-10-14','AA','519'),('1987-10-14','AA','523'),('1987-10-14','AA','523'),('1987-10-14','AA','525'),('1987-10-14','AA','525'),('1987-10-14','AA','533'),('1987-10-14','AA','533'),('1987-10-14','AA','533'),('1987-10-14','AA','546'),('1987-10-14','AA','546'),('1987-10-14','AA','546'),('1987-10-14','AA','546'),('1987-10-14','AA','556'),('1987-10-14','AA','556'),('1987-10-14','AA','556'),('1987-10-14','AA','597'),('1987-10-14','AA','597'),('1987-10-14','AA','597'),('1987-10-14','AA','601'),('1987-10-14','AA','601'),('1987-10-14','AA','627'),('1987-10-14','AA','629'),('1987-10-14','AA','629'),('1987-10-14','AA','670'),('1987-10-14','AA','673'),('1987-10-14','AA','673'),('1987-10-14','AA','680'),('1987-10-14','AA','680'),('1987-10-14','AA','817'),('1987-10-14','AA','817'),('1987-10-14','AA','824'),('1987-10-14','AA','824'),('1987-10-14','AA','824'),('1987-10-14','AA','824'),('1987-10-14','AA','832'),('1987-10-14','AA','832'),('1987-10-14','AA','852'),('1987-10-14','AA','866'),('1987-10-14','AA','866'),('1987-10-14','AA','871'),('1987-10-14','AA','871'),('1987-10-14','AA','880'),('1987-10-14','AA','880'),('1987-10-14','AA','880'),('1987-10-14','AA','883'),('1987-10-14','AA','883'),('1987-10-14','AA','885'),('1987-10-14','AA','885'),('1987-10-14','AA','885'),('1987-10-14','AA','890'),('1987-10-14','AA','890'),('1987-10-14','AA','893'),('1987-10-14','AA','893'),('1987-10-14','AA','905'),('1987-10-14','AA','905'),('1987-10-14','AA','915'),('1987-10-14','AA','929'),('1987-10-14','AA','929'),('1987-10-14','AA','936'),('1987-10-14','AA','936'),('1987-10-14','AA','937'),('1987-10-14','AA','937'),('1987-10-14','AA','955'),('1987-10-14','AA','955'),('1987-10-14','AA','966'),('1987-10-14','AA','1002'),('1987-10-14','AA','1002'),('1987-10-14','AA','1004'),('1987-10-14','AA','1004'),('1987-10-14','AA','1015'),('1987-10-14','AA','1015'),('1987-10-14','AA','1021'),('1987-10-14','AA','1021'),('1987-10-14','AA','1041'),('1987-10-14','AA','1041'),('1987-10-14','AA','1046'),('1987-10-14','AA','1046'),('1987-10-14','AA','1048'),('1987-10-14','AA','1048'),('1987-10-14','AA','1061'),('1987-10-14','AA','1061'),('1987-10-14','AA','1088'),('1987-10-14','AA','1088'),('1987-10-14','AA','2033'),('1987-10-14','AA','2033'),('1987-10-14','AA','2050'),('1987-10-14','AA','2058'),('1987-10-14','AA','2071'),('1987-10-14','AA','2071'),('1987-10-14','AA','2086'),('1987-10-14','AA','2111'),('1987-10-14','AA','2123'),('1987-10-14','AA','2123'),('1987-10-14','AA','2147'),('1987-10-14','AA','2147'),('1987-10-14','AA','2199'),('1987-10-14','AA','2199'),('1987-10-14','AA','2207'),('1987-10-14','AA','2207'),('1987-10-14','AA','2217'),('1987-10-14','AA','2230'),('1987-10-14','AA','2251'),('1987-10-14','AA','2251'),('1987-10-14','AA','2278'),('1987-10-14','AA','2351'),('1987-10-14','AA','2357'),('1987-10-14','AA','2490'),('1987-10-14','AA','2528'),('1987-10-14','AA','2528'),('1987-10-14','AA','2735'),('1987-10-14','AA','2735'),('1987-10-14','AA','2751'),('1987-10-14','AL','2'),('1987-10-14','AL','2'),('1987-10-14','AL','7'),('1987-10-14','AL','7'),('1987-10-14','AL','26'),('1987-10-14','AL','26'),('1987-10-14','AL','34'),('1987-10-14','AL','36'),('1987-10-14','AL','36'),('1987-10-14','AL','45'),('1987-10-14','AL','45'),('1987-10-14','AL','91'),('1987-10-14','AL','91'),('1987-10-14','AL','104'),('1987-10-14','AL','104'),('1987-10-14','AL','104'),('1987-10-14','AL','109'),('1987-10-14','AL','112'),('1987-10-14','AL','112'),('1987-10-14','AL','123'),('1987-10-14','AL','149'),('1987-10-14','AL','160'),('1987-10-14','AL','160'),('1987-10-14','AL','165'),('1987-10-14','AL','171'),('1987-10-14','AL','171'),('1987-10-14','AL','176'),('1987-10-14','AL','176'),('1987-10-14','AL','179'),('1987-10-14','AL','215'),('1987-10-14','AL','231'),('1987-10-14','AL','263'),('1987-10-14','AL','263'),('1987-10-14','AL','268'),('1987-10-14','AL','268'),('1987-10-14','AL','268'),('1987-10-14','AL','281'),('1987-10-14','AL','281'),('1987-10-14','AL','287'),('1987-10-14','AL','287'),('1987-10-14','AL','309'),('1987-10-14','AL','309'),('1987-10-14','AL','341'),('1987-10-14','AL','344'),('1987-10-14','AL','344'),('1987-10-14','AL','357'),('1987-10-14','AL','357'),('1987-10-14','AL','368'),('1987-10-14','AL','381'),('1987-10-14','AL','396'),('1987-10-14','AL','397'),('1987-10-14','AL','397'),('1987-10-14','AL','416'),('1987-10-14','AL','416'),('1987-10-14','AL','417'),('1987-10-14','AL','438'),('1987-10-14','AL','438'),('1987-10-14','AL','446'),('1987-10-14','AL','451'),('1987-10-14','AL','451'),('1987-10-14','AL','491'),('1987-10-14','AL','491'),('1987-10-14','AL','523'),('1987-10-14','AL','523'),('1987-10-14','AL','523'),('1987-10-14','AL','525'),('1987-10-14','AL','525'),('1987-10-14','AL','533'),('1987-10-14','AL','533'),('1987-10-14','AL','546'),('1987-10-14','AL','546'),('1987-10-14','AL','556'),('1987-10-14','AL','556'),('1987-10-14','AL','601'),('1987-10-14','AL','601'),('1987-10-14','AL','627'),('1987-10-14','AL','629'),('1987-10-14','AL','670'),('1987-10-14','AL','670'),('1987-10-14','AL','670'),('1987-10-14','AL','673'),('1987-10-14','AL','680'),('1987-10-15','AA','2'),('1987-10-15','AA','2'),('1987-10-15','AA','2'),('1987-10-15','AA','7'),('1987-10-15','AA','7'),('1987-10-15','AA','26'),('1987-10-15','AA','34'),('1987-10-15','AA','36'),('1987-10-15','AA','91'),('1987-10-15','AA','101'),('1987-10-15','AA','101'),('1987-10-15','AA','109'),('1987-10-15','AA','109'),('1987-10-15','AA','112'),('1987-10-15','AA','123'),('1987-10-15','AA','123'),('1987-10-15','AA','160'),('1987-10-15','AA','165'),('1987-10-15','AA','165'),('1987-10-15','AA','165'),('1987-10-15','AA','176'),('1987-10-15','AA','176'),('1987-10-15','AA','176'),('1987-10-15','AA','176'),('1987-10-15','AA','179'),('1987-10-15','AA','179'),('1987-10-15','AA','215'),('1987-10-15','AA','215'),('1987-10-15','AA','231'),('1987-10-15','AA','263'),('1987-10-15','AA','263'),('1987-10-15','AA','268'),('1987-10-15','AA','268'),('1987-10-15','AA','281'),('1987-10-15','AA','287'),('1987-10-15','AA','287'),('1987-10-15','AA','309'),('1987-10-15','AA','309'),('1987-10-15','AA','309'),('1987-10-15','AA','341'),('1987-10-15','AA','344'),('1987-10-15','AA','344'),('1987-10-15','AA','347'),('1987-10-15','AA','347'),('1987-10-15','AA','368'),('1987-10-15','AA','381'),('1987-10-15','AA','381'),('1987-10-15','AA','396'),('1987-10-15','AA','396'),('1987-10-15','AA','397'),('1987-10-15','AA','397'),('1987-10-15','AA','417'),('1987-10-15','AA','417'),('1987-10-15','AA','446'),('1987-10-15','AA','451'),('1987-10-15','AA','451'),('1987-10-15','AA','460'),('1987-10-15','AA','460'),('1987-10-15','AA','491'),('1987-10-15','AA','504'),('1987-10-15','AA','504'),('1987-10-15','AA','519'),('1987-10-15','AA','519'),('1987-10-15','AA','523'),('1987-10-15','AA','523'),('1987-10-15','AA','525'),('1987-10-15','AA','525'),('1987-10-15','AA','525'),('1987-10-15','AA','533'),('1987-10-15','AA','533'),('1987-10-15','AA','533'),('1987-10-15','AA','546'),('1987-10-15','AA','546'),('1987-10-15','AA','546'),('1987-10-15','AA','546'),('1987-10-15','AA','556'),('1987-10-15','AA','556'),('1987-10-15','AA','556'),('1987-10-15','AA','597'),('1987-10-15','AA','597'),('1987-10-15','AA','597'),('1987-10-15','AA','601'),('1987-10-15','AA','601'),('1987-10-15','AA','629'),('1987-10-15','AA','629'),('1987-10-15','AA','670'),('1987-10-15','AA','673'),('1987-10-15','AA','673'),('1987-10-15','AA','680'),('1987-10-15','AA','680'),('1987-10-15','AA','817'),('1987-10-15','AA','817'),('1987-10-15','AA','824'),('1987-10-15','AA','824'),('1987-10-15','AA','824'),('1987-10-15','AA','824'),('1987-10-15','AA','832'),('1987-10-15','AA','832'),('1987-10-15','AA','852'),('1987-10-15','AA','866'),('1987-10-15','AA','866'),('1987-10-15','AA','871'),('1987-10-15','AA','871'),('1987-10-15','AA','880'),('1987-10-15','AA','880'),('1987-10-15','AA','880'),('1987-10-15','AA','883'),('1987-10-15','AA','883'),('1987-10-15','AA','885'),('1987-10-15','AA','885'),('1987-10-15','AA','885'),('1987-10-15','AA','890'),('1987-10-15','AA','890'),('1987-10-15','AA','893'),('1987-10-15','AA','893'),('1987-10-15','AA','905'),('1987-10-15','AA','905'),('1987-10-15','AA','915'),('1987-10-15','AA','929'),('1987-10-15','AA','929'),('1987-10-15','AA','936'),('1987-10-15','AA','936'),('1987-10-15','AA','937'),('1987-10-15','AA','955'),('1987-10-15','AA','955'),('1987-10-15','AA','966'),('1987-10-15','AA','1002'),('1987-10-15','AA','1002'),('1987-10-15','AA','1004'),('1987-10-15','AA','1004'),('1987-10-15','AA','1015'),('1987-10-15','AA','1015'),('1987-10-15','AA','1021'),('1987-10-15','AA','1021'),('1987-10-15','AA','1041'),('1987-10-15','AA','1041'),('1987-10-15','AA','1046'),('1987-10-15','AA','1046'),('1987-10-15','AA','1048'),('1987-10-15','AA','1048'),('1987-10-15','AA','1061'),('1987-10-15','AA','1061'),('1987-10-15','AA','1088'),('1987-10-15','AA','1088'),('1987-10-15','AA','2033'),('1987-10-15','AA','2033'),('1987-10-15','AA','2050'),('1987-10-15','AA','2058'),('1987-10-15','AA','2071'),('1987-10-15','AA','2071'),('1987-10-15','AA','2086'),('1987-10-15','AA','2105'),('1987-10-15','AA','2111'),('1987-10-15','AA','2123'),('1987-10-15','AA','2123'),('1987-10-15','AA','2147'),('1987-10-15','AA','2147'),('1987-10-15','AA','2199'),('1987-10-15','AA','2199'),('1987-10-15','AA','2207'),('1987-10-15','AA','2207'),('1987-10-15','AA','2217'),('1987-10-15','AA','2230'),('1987-10-15','AA','2245'),('1987-10-15','AA','2251'),('1987-10-15','AA','2251'),('1987-10-15','AA','2275'),('1987-10-15','AA','2278'),('1987-10-15','AA','2351'),('1987-10-15','AA','2357'),('1987-10-15','AA','2361'),('1987-10-15','AA','2490'),('1987-10-15','AA','2528'),('1987-10-15','AA','2528'),('1987-10-15','AA','2735'),('1987-10-15','AA','2735'),('1987-10-15','AA','2751'),('1987-10-15','AL','2'),('1987-10-15','AL','2'),('1987-10-15','AL','7'),('1987-10-15','AL','7'),('1987-10-15','AL','26'),('1987-10-15','AL','26'),('1987-10-15','AL','34'),('1987-10-15','AL','34'),('1987-10-15','AL','36'),('1987-10-15','AL','36'),('1987-10-15','AL','45'),('1987-10-15','AL','45'),('1987-10-15','AL','45'),('1987-10-15','AL','91'),('1987-10-15','AL','91'),('1987-10-15','AL','104'),('1987-10-15','AL','104'),('1987-10-15','AL','104'),('1987-10-15','AL','109'),('1987-10-15','AL','112'),('1987-10-15','AL','112'),('1987-10-15','AL','123'),('1987-10-15','AL','149'),('1987-10-15','AL','160'),('1987-10-15','AL','160'),('1987-10-15','AL','165'),('1987-10-15','AL','171'),('1987-10-15','AL','171'),('1987-10-15','AL','176'),('1987-10-15','AL','176'),('1987-10-15','AL','179'),('1987-10-15','AL','215'),('1987-10-15','AL','231'),('1987-10-15','AL','263'),('1987-10-15','AL','263'),('1987-10-15','AL','268'),('1987-10-15','AL','268'),('1987-10-15','AL','268'),('1987-10-15','AL','281'),('1987-10-15','AL','281'),('1987-10-15','AL','287'),('1987-10-15','AL','287'),('1987-10-15','AL','309'),('1987-10-15','AL','309'),('1987-10-15','AL','341'),('1987-10-15','AL','344'),('1987-10-15','AL','344'),('1987-10-15','AL','357'),('1987-10-15','AL','357'),('1987-10-15','AL','368'),('1987-10-15','AL','381'),('1987-10-15','AL','396'),('1987-10-15','AL','397'),('1987-10-15','AL','397'),('1987-10-15','AL','416'),('1987-10-15','AL','416'),('1987-10-15','AL','417'),('1987-10-15','AL','438'),('1987-10-15','AL','438'),('1987-10-15','AL','446'),('1987-10-15','AL','451'),('1987-10-15','AL','451'),('1987-10-15','AL','491'),('1987-10-15','AL','491'),('1987-10-15','AL','523'),('1987-10-15','AL','523'),('1987-10-15','AL','523'),('1987-10-15','AL','525'),('1987-10-15','AL','525'),('1987-10-15','AL','533'),('1987-10-15','AL','533'),('1987-10-15','AL','546'),('1987-10-15','AL','546'),('1987-10-15','AL','556'),('1987-10-15','AL','556'),('1987-10-15','AL','601'),('1987-10-15','AL','601'),('1987-10-15','AL','627'),('1987-10-15','AL','629'),('1987-10-15','AL','670'),('1987-10-15','AL','670'),('1987-10-15','AL','670'),('1987-10-15','AL','673'),('1987-10-15','AL','680'),('1987-10-16','AA','2'),('1987-10-16','AA','2'),('1987-10-16','AA','2'),('1987-10-16','AA','7'),('1987-10-16','AA','7'),('1987-10-16','AA','26'),('1987-10-16','AA','34'),('1987-10-16','AA','36'),('1987-10-16','AA','91'),('1987-10-16','AA','101'),('1987-10-16','AA','101'),('1987-10-16','AA','109'),('1987-10-16','AA','109'),('1987-10-16','AA','112'),('1987-10-16','AA','123'),('1987-10-16','AA','160'),('1987-10-16','AA','165'),('1987-10-16','AA','165'),('1987-10-16','AA','176'),('1987-10-16','AA','176'),('1987-10-16','AA','176'),('1987-10-16','AA','176'),('1987-10-16','AA','179'),('1987-10-16','AA','179'),('1987-10-16','AA','215'),('1987-10-16','AA','215'),('1987-10-16','AA','231'),('1987-10-16','AA','263'),('1987-10-16','AA','263'),('1987-10-16','AA','268'),('1987-10-16','AA','281'),('1987-10-16','AA','287'),('1987-10-16','AA','287'),('1987-10-16','AA','309'),('1987-10-16','AA','309'),('1987-10-16','AA','309'),('1987-10-16','AA','341'),('1987-10-16','AA','344'),('1987-10-16','AA','344'),('1987-10-16','AA','347'),('1987-10-16','AA','347'),('1987-10-16','AA','368'),('1987-10-16','AA','381'),('1987-10-16','AA','381'),('1987-10-16','AA','381'),('1987-10-16','AA','396'),('1987-10-16','AA','396'),('1987-10-16','AA','397'),('1987-10-16','AA','417'),('1987-10-16','AA','417'),('1987-10-16','AA','446'),('1987-10-16','AA','451'),('1987-10-16','AA','451'),('1987-10-16','AA','460'),('1987-10-16','AA','460'),('1987-10-16','AA','491'),('1987-10-16','AA','504'),('1987-10-16','AA','504'),('1987-10-16','AA','519'),('1987-10-16','AA','519'),('1987-10-16','AA','523'),('1987-10-16','AA','523'),('1987-10-16','AA','525'),('1987-10-16','AA','525'),('1987-10-16','AA','533'),('1987-10-16','AA','533'),('1987-10-16','AA','546'),('1987-10-16','AA','546'),('1987-10-16','AA','546'),('1987-10-16','AA','546'),('1987-10-16','AA','556'),('1987-10-16','AA','556'),('1987-10-16','AA','556'),('1987-10-16','AA','597'),('1987-10-16','AA','597'),('1987-10-16','AA','597'),('1987-10-16','AA','601'),('1987-10-16','AA','601'),('1987-10-16','AA','627'),('1987-10-16','AA','629'),('1987-10-16','AA','629'),('1987-10-16','AA','670'),('1987-10-16','AA','673'),('1987-10-16','AA','673'),('1987-10-16','AA','680'),('1987-10-16','AA','680'),('1987-10-16','AA','817'),('1987-10-16','AA','817'),('1987-10-16','AA','824'),('1987-10-16','AA','824'),('1987-10-16','AA','824'),('1987-10-16','AA','824'),('1987-10-16','AA','832'),('1987-10-16','AA','832'),('1987-10-16','AA','852'),('1987-10-16','AA','866'),('1987-10-16','AA','866'),('1987-10-16','AA','871'),('1987-10-16','AA','871'),('1987-10-16','AA','880'),('1987-10-16','AA','880'),('1987-10-16','AA','880'),('1987-10-16','AA','880'),('1987-10-16','AA','883'),('1987-10-16','AA','883'),('1987-10-16','AA','885'),('1987-10-16','AA','885'),('1987-10-16','AA','885'),('1987-10-16','AA','890'),('1987-10-16','AA','890'),('1987-10-16','AA','893'),('1987-10-16','AA','893'),('1987-10-16','AA','905'),('1987-10-16','AA','905'),('1987-10-16','AA','915'),('1987-10-16','AA','929'),('1987-10-16','AA','929'),('1987-10-16','AA','936'),('1987-10-16','AA','936'),('1987-10-16','AA','937'),('1987-10-16','AA','937'),('1987-10-16','AA','955'),('1987-10-16','AA','955'),('1987-10-16','AA','966'),('1987-10-16','AA','1002'),('1987-10-16','AA','1002'),('1987-10-16','AA','1004'),('1987-10-16','AA','1004'),('1987-10-16','AA','1015'),('1987-10-16','AA','1015'),('1987-10-16','AA','1021'),('1987-10-16','AA','1021'),('1987-10-16','AA','1041'),('1987-10-16','AA','1041'),('1987-10-16','AA','1046'),('1987-10-16','AA','1046'),('1987-10-16','AA','1048'),('1987-10-16','AA','1048'),('1987-10-16','AA','1061'),('1987-10-16','AA','1061'),('1987-10-16','AA','1088'),('1987-10-16','AA','1088'),('1987-10-16','AA','2033'),('1987-10-16','AA','2033'),('1987-10-16','AA','2050'),('1987-10-16','AA','2058'),('1987-10-16','AA','2071'),('1987-10-16','AA','2071'),('1987-10-16','AA','2086'),('1987-10-16','AA','2105'),('1987-10-16','AA','2111'),('1987-10-16','AA','2123'),('1987-10-16','AA','2123'),('1987-10-16','AA','2147'),('1987-10-16','AA','2147'),('1987-10-16','AA','2199'),('1987-10-16','AA','2199'),('1987-10-16','AA','2207'),('1987-10-16','AA','2207'),('1987-10-16','AA','2217'),('1987-10-16','AA','2230'),('1987-10-16','AA','2245'),('1987-10-16','AA','2251'),('1987-10-16','AA','2251'),('1987-10-16','AA','2275'),('1987-10-16','AA','2278'),('1987-10-16','AA','2351'),('1987-10-16','AA','2357'),('1987-10-16','AA','2361'),('1987-10-16','AA','2490'),('1987-10-16','AA','2528'),('1987-10-16','AA','2528'),('1987-10-16','AA','2735'),('1987-10-16','AA','2735'),('1987-10-16','AA','2751'),('1987-10-16','AL','2'),('1987-10-16','AL','2'),('1987-10-16','AL','7'),('1987-10-16','AL','7'),('1987-10-16','AL','26'),('1987-10-16','AL','26'),('1987-10-16','AL','34'),('1987-10-16','AL','36'),('1987-10-16','AL','36'),('1987-10-16','AL','45'),('1987-10-16','AL','45'),('1987-10-16','AL','45'),('1987-10-16','AL','91'),('1987-10-16','AL','91'),('1987-10-16','AL','104'),('1987-10-16','AL','104'),('1987-10-16','AL','109'),('1987-10-16','AL','112'),('1987-10-16','AL','112'),('1987-10-16','AL','123'),('1987-10-16','AL','149'),('1987-10-16','AL','160'),('1987-10-16','AL','160'),('1987-10-16','AL','165'),('1987-10-16','AL','171'),('1987-10-16','AL','171'),('1987-10-16','AL','176'),('1987-10-16','AL','176'),('1987-10-16','AL','179'),('1987-10-16','AL','215'),('1987-10-16','AL','231'),('1987-10-16','AL','263'),('1987-10-16','AL','263'),('1987-10-16','AL','268'),('1987-10-16','AL','268'),('1987-10-16','AL','268'),('1987-10-16','AL','281'),('1987-10-16','AL','281'),('1987-10-16','AL','287'),('1987-10-16','AL','287'),('1987-10-16','AL','309'),('1987-10-16','AL','309'),('1987-10-16','AL','341'),('1987-10-16','AL','344'),('1987-10-16','AL','344'),('1987-10-16','AL','357'),('1987-10-16','AL','357'),('1987-10-16','AL','368'),('1987-10-16','AL','381'),('1987-10-16','AL','396'),('1987-10-16','AL','397'),('1987-10-16','AL','397'),('1987-10-16','AL','416'),('1987-10-16','AL','416'),('1987-10-16','AL','417'),('1987-10-16','AL','438'),('1987-10-16','AL','438'),('1987-10-16','AL','446'),('1987-10-16','AL','451'),('1987-10-16','AL','451'),('1987-10-16','AL','491'),('1987-10-16','AL','491'),('1987-10-16','AL','523'),('1987-10-16','AL','523'),('1987-10-16','AL','523'),('1987-10-16','AL','525'),('1987-10-16','AL','525'),('1987-10-16','AL','533'),('1987-10-16','AL','533'),('1987-10-16','AL','546'),('1987-10-16','AL','546'),('1987-10-16','AL','556'),('1987-10-16','AL','556'),('1987-10-16','AL','601'),('1987-10-16','AL','601'),('1987-10-16','AL','627'),('1987-10-16','AL','629'),('1987-10-16','AL','670'),('1987-10-16','AL','670'),('1987-10-16','AL','670'),('1987-10-16','AL','673'),('1987-10-16','AL','680'),('1987-10-17','AA','2'),('1987-10-17','AA','2'),('1987-10-17','AA','2'),('1987-10-17','AA','7'),('1987-10-17','AA','7'),('1987-10-17','AA','26'),('1987-10-17','AA','36'),('1987-10-17','AA','91'),('1987-10-17','AA','101'),('1987-10-17','AA','101'),('1987-10-17','AA','109'),('1987-10-17','AA','109'),('1987-10-17','AA','112'),('1987-10-17','AA','123'),('1987-10-17','AA','123'),('1987-10-17','AA','160'),('1987-10-17','AA','165'),('1987-10-17','AA','165'),('1987-10-17','AA','165'),('1987-10-17','AA','176'),('1987-10-17','AA','176'),('1987-10-17','AA','176'),('1987-10-17','AA','176'),('1987-10-17','AA','179'),('1987-10-17','AA','179'),('1987-10-17','AA','215'),('1987-10-17','AA','215'),('1987-10-17','AA','231'),('1987-10-17','AA','231'),('1987-10-17','AA','263'),('1987-10-17','AA','263'),('1987-10-17','AA','268'),('1987-10-17','AA','268'),('1987-10-17','AA','281'),('1987-10-17','AA','287'),('1987-10-17','AA','287'),('1987-10-17','AA','309'),('1987-10-17','AA','309'),('1987-10-17','AA','309'),('1987-10-17','AA','341'),('1987-10-17','AA','344'),('1987-10-17','AA','344'),('1987-10-17','AA','347'),('1987-10-17','AA','347'),('1987-10-17','AA','368'),('1987-10-17','AA','381'),('1987-10-17','AA','381'),('1987-10-17','AA','381'),('1987-10-17','AA','396'),('1987-10-17','AA','396'),('1987-10-17','AA','397'),('1987-10-17','AA','417'),('1987-10-17','AA','446'),('1987-10-17','AA','451'),('1987-10-17','AA','451'),('1987-10-17','AA','460'),('1987-10-17','AA','460'),('1987-10-17','AA','491'),('1987-10-17','AA','491'),('1987-10-17','AA','504'),('1987-10-17','AA','504'),('1987-10-17','AA','519'),('1987-10-17','AA','519'),('1987-10-17','AA','523'),('1987-10-17','AA','523'),('1987-10-17','AA','525'),('1987-10-17','AA','525'),('1987-10-17','AA','525'),('1987-10-17','AA','533'),('1987-10-17','AA','533'),('1987-10-17','AA','546'),('1987-10-17','AA','546'),('1987-10-17','AA','546'),('1987-10-17','AA','546'),('1987-10-17','AA','556'),('1987-10-17','AA','556'),('1987-10-17','AA','556'),('1987-10-17','AA','597'),('1987-10-17','AA','597'),('1987-10-17','AA','597'),('1987-10-17','AA','601'),('1987-10-17','AA','627'),('1987-10-17','AA','629'),('1987-10-17','AA','629'),('1987-10-17','AA','670'),('1987-10-17','AA','673'),('1987-10-17','AA','673'),('1987-10-17','AA','680'),('1987-10-17','AA','680'),('1987-10-17','AA','817'),('1987-10-17','AA','817'),('1987-10-17','AA','824'),('1987-10-17','AA','824'),('1987-10-17','AA','824'),('1987-10-17','AA','824'),('1987-10-17','AA','832'),('1987-10-17','AA','832'),('1987-10-17','AA','852'),('1987-10-17','AA','852'),('1987-10-17','AA','866'),('1987-10-17','AA','866'),('1987-10-17','AA','871'),('1987-10-17','AA','871'),('1987-10-17','AA','880'),('1987-10-17','AA','880'),('1987-10-17','AA','880'),('1987-10-17','AA','880'),('1987-10-17','AA','883'),('1987-10-17','AA','883'),('1987-10-17','AA','885'),('1987-10-17','AA','885'),('1987-10-17','AA','885'),('1987-10-17','AA','890'),('1987-10-17','AA','890'),('1987-10-17','AA','893'),('1987-10-17','AA','893'),('1987-10-17','AA','905'),('1987-10-17','AA','905'),('1987-10-17','AA','915'),('1987-10-17','AA','929'),('1987-10-17','AA','936'),('1987-10-17','AA','936'),('1987-10-17','AA','937'),('1987-10-17','AA','937'),('1987-10-17','AA','955'),('1987-10-17','AA','955'),('1987-10-17','AA','966'),('1987-10-17','AA','1002'),('1987-10-17','AA','1002'),('1987-10-17','AA','1004'),('1987-10-17','AA','1004'),('1987-10-17','AA','1015'),('1987-10-17','AA','1015'),('1987-10-17','AA','1021'),('1987-10-17','AA','1021'),('1987-10-17','AA','1041'),('1987-10-17','AA','1041'),('1987-10-17','AA','1046'),('1987-10-17','AA','1046'),('1987-10-17','AA','1048'),('1987-10-17','AA','1048'),('1987-10-17','AA','1061'),('1987-10-17','AA','1061'),('1987-10-17','AA','1088'),('1987-10-17','AA','1088'),('1987-10-17','AA','2033'),('1987-10-17','AA','2033'),('1987-10-17','AA','2050'),('1987-10-17','AA','2058'),('1987-10-17','AA','2071'),('1987-10-17','AA','2086'),('1987-10-17','AA','2105'),('1987-10-17','AA','2111'),('1987-10-17','AA','2123'),('1987-10-17','AA','2123'),('1987-10-17','AA','2147'),('1987-10-17','AA','2147'),('1987-10-17','AA','2199'),('1987-10-17','AA','2199'),('1987-10-17','AA','2207'),('1987-10-17','AA','2207'),('1987-10-17','AA','2217'),('1987-10-17','AA','2230'),('1987-10-17','AA','2251'),('1987-10-17','AA','2251'),('1987-10-17','AA','2275'),('1987-10-17','AA','2278'),('1987-10-17','AA','2351'),('1987-10-17','AA','2357'),('1987-10-17','AA','2361'),('1987-10-17','AA','2490'),('1987-10-17','AA','2528'),('1987-10-17','AA','2528'),('1987-10-17','AA','2735'),('1987-10-17','AA','2735'),('1987-10-17','AL','2'),('1987-10-17','AL','2'),('1987-10-17','AL','7'),('1987-10-17','AL','7'),('1987-10-17','AL','26'),('1987-10-17','AL','26'),('1987-10-17','AL','34'),('1987-10-17','AL','36'),('1987-10-17','AL','36'),('1987-10-17','AL','45'),('1987-10-17','AL','45'),('1987-10-17','AL','45'),('1987-10-17','AL','91'),('1987-10-17','AL','91'),('1987-10-17','AL','104'),('1987-10-17','AL','104'),('1987-10-17','AL','109'),('1987-10-17','AL','112'),('1987-10-17','AL','112'),('1987-10-17','AL','149'),('1987-10-17','AL','160'),('1987-10-17','AL','160'),('1987-10-17','AL','165'),('1987-10-17','AL','171'),('1987-10-17','AL','171'),('1987-10-17','AL','176'),('1987-10-17','AL','176'),('1987-10-17','AL','179'),('1987-10-17','AL','215'),('1987-10-17','AL','231'),('1987-10-17','AL','263'),('1987-10-17','AL','268'),('1987-10-17','AL','268'),('1987-10-17','AL','268'),('1987-10-17','AL','287'),('1987-10-17','AL','287'),('1987-10-17','AL','309'),('1987-10-17','AL','309'),('1987-10-17','AL','344'),('1987-10-17','AL','344'),('1987-10-17','AL','357'),('1987-10-17','AL','357'),('1987-10-17','AL','381'),('1987-10-17','AL','396'),('1987-10-17','AL','397'),('1987-10-17','AL','397'),('1987-10-17','AL','397'),('1987-10-17','AL','416'),('1987-10-17','AL','417'),('1987-10-17','AL','438'),('1987-10-17','AL','438'),('1987-10-17','AL','451'),('1987-10-17','AL','451'),('1987-10-17','AL','491'),('1987-10-17','AL','491'),('1987-10-17','AL','523'),('1987-10-17','AL','523'),('1987-10-17','AL','525'),('1987-10-17','AL','525'),('1987-10-17','AL','533'),('1987-10-17','AL','546'),('1987-10-17','AL','546'),('1987-10-17','AL','556'),('1987-10-17','AL','556'),('1987-10-17','AL','601'),('1987-10-17','AL','601'),('1987-10-17','AL','627'),('1987-10-17','AL','670'),('1987-10-17','AL','673'),('1987-10-17','AL','680'),('1987-10-17','AL','936'),('1987-10-17','AL','966'),('1987-10-18','AA','2'),('1987-10-18','AA','2'),('1987-10-18','AA','2'),('1987-10-18','AA','7'),('1987-10-18','AA','7'),('1987-10-18','AA','26'),('1987-10-18','AA','34'),('1987-10-18','AA','36'),('1987-10-18','AA','91'),('1987-10-18','AA','101'),('1987-10-18','AA','101'),('1987-10-18','AA','109'),('1987-10-18','AA','109'),('1987-10-18','AA','112'),('1987-10-18','AA','123'),('1987-10-18','AA','123'),('1987-10-18','AA','160'),('1987-10-18','AA','165'),('1987-10-18','AA','165'),('1987-10-18','AA','165'),('1987-10-18','AA','176'),('1987-10-18','AA','176'),('1987-10-18','AA','176'),('1987-10-18','AA','176'),('1987-10-18','AA','179'),('1987-10-18','AA','179'),('1987-10-18','AA','215'),('1987-10-18','AA','231'),('1987-10-18','AA','231'),('1987-10-18','AA','263'),('1987-10-18','AA','268'),('1987-10-18','AA','268'),('1987-10-18','AA','281'),('1987-10-18','AA','287'),('1987-10-18','AA','287'),('1987-10-18','AA','309'),('1987-10-18','AA','309'),('1987-10-18','AA','309'),('1987-10-18','AA','341'),('1987-10-18','AA','344'),('1987-10-18','AA','344'),('1987-10-18','AA','347'),('1987-10-18','AA','347'),('1987-10-18','AA','368'),('1987-10-18','AA','381'),('1987-10-18','AA','381'),('1987-10-18','AA','381'),('1987-10-18','AA','396'),('1987-10-18','AA','396'),('1987-10-18','AA','397'),('1987-10-18','AA','397'),('1987-10-18','AA','417'),('1987-10-18','AA','417'),('1987-10-18','AA','451'),('1987-10-18','AA','451'),('1987-10-18','AA','460'),('1987-10-18','AA','491'),('1987-10-18','AA','491'),('1987-10-18','AA','504'),('1987-10-18','AA','504'),('1987-10-18','AA','519'),('1987-10-18','AA','519'),('1987-10-18','AA','523'),('1987-10-18','AA','523'),('1987-10-18','AA','525'),('1987-10-18','AA','525'),('1987-10-18','AA','525'),('1987-10-18','AA','533'),('1987-10-18','AA','533'),('1987-10-18','AA','546'),('1987-10-18','AA','546'),('1987-10-18','AA','546'),('1987-10-18','AA','546'),('1987-10-18','AA','556'),('1987-10-18','AA','556'),('1987-10-18','AA','556'),('1987-10-18','AA','597'),('1987-10-18','AA','597'),('1987-10-18','AA','597'),('1987-10-18','AA','601'),('1987-10-18','AA','601'),('1987-10-18','AA','629'),('1987-10-18','AA','629'),('1987-10-18','AA','670'),('1987-10-18','AA','673'),('1987-10-18','AA','680'),('1987-10-18','AA','680'),('1987-10-18','AA','817'),('1987-10-18','AA','817'),('1987-10-18','AA','824'),('1987-10-18','AA','824'),('1987-10-18','AA','824'),('1987-10-18','AA','824'),('1987-10-18','AA','832'),('1987-10-18','AA','832'),('1987-10-18','AA','852'),('1987-10-18','AA','866'),('1987-10-18','AA','866'),('1987-10-18','AA','871'),('1987-10-18','AA','871'),('1987-10-18','AA','880'),('1987-10-18','AA','880'),('1987-10-18','AA','880'),('1987-10-18','AA','880'),('1987-10-18','AA','883'),('1987-10-18','AA','883'),('1987-10-18','AA','885'),('1987-10-18','AA','885'),('1987-10-18','AA','885'),('1987-10-18','AA','890'),('1987-10-18','AA','890'),('1987-10-18','AA','893'),('1987-10-18','AA','893'),('1987-10-18','AA','905'),('1987-10-18','AA','905'),('1987-10-18','AA','915'),('1987-10-18','AA','929'),('1987-10-18','AA','929'),('1987-10-18','AA','936'),('1987-10-18','AA','936'),('1987-10-18','AA','937'),('1987-10-18','AA','937'),('1987-10-18','AA','955'),('1987-10-18','AA','966'),('1987-10-18','AA','1002'),('1987-10-18','AA','1002'),('1987-10-18','AA','1004'),('1987-10-18','AA','1004'),('1987-10-18','AA','1015'),('1987-10-18','AA','1015'),('1987-10-18','AA','1021'),('1987-10-18','AA','1021'),('1987-10-18','AA','1041'),('1987-10-18','AA','1041'),('1987-10-18','AA','1046'),('1987-10-18','AA','1046'),('1987-10-18','AA','1048'),('1987-10-18','AA','1048'),('1987-10-18','AA','1061'),('1987-10-18','AA','1061'),('1987-10-18','AA','1088'),('1987-10-18','AA','1088'),('1987-10-18','AA','2033'),('1987-10-18','AA','2033'),('1987-10-18','AA','2050'),('1987-10-18','AA','2058'),('1987-10-18','AA','2071'),('1987-10-18','AA','2071'),('1987-10-18','AA','2086'),('1987-10-18','AA','2111'),('1987-10-18','AA','2123'),('1987-10-18','AA','2147'),('1987-10-18','AA','2147'),('1987-10-18','AA','2199'),('1987-10-18','AA','2199'),('1987-10-18','AA','2207'),('1987-10-18','AA','2207'),('1987-10-18','AA','2230'),('1987-10-18','AA','2245'),('1987-10-18','AA','2251'),('1987-10-18','AA','2251'),('1987-10-18','AA','2275'),('1987-10-18','AA','2278'),('1987-10-18','AA','2351'),('1987-10-18','AA','2357'),('1987-10-18','AA','2361'),('1987-10-18','AA','2490'),('1987-10-18','AA','2528'),('1987-10-18','AA','2528'),('1987-10-18','AA','2735'),('1987-10-18','AA','2735'),('1987-10-18','AA','2751'),('1987-10-18','AL','2'),('1987-10-18','AL','2'),('1987-10-18','AL','7'),('1987-10-18','AL','7'),('1987-10-18','AL','26'),('1987-10-18','AL','26'),('1987-10-18','AL','34'),('1987-10-18','AL','34'),('1987-10-18','AL','36'),('1987-10-18','AL','36'),('1987-10-18','AL','45'),('1987-10-18','AL','45'),('1987-10-18','AL','45'),('1987-10-18','AL','91'),('1987-10-18','AL','91'),('1987-10-18','AL','104'),('1987-10-18','AL','104'),('1987-10-18','AL','104'),('1987-10-18','AL','112'),('1987-10-18','AL','123'),('1987-10-18','AL','160'),('1987-10-18','AL','160'),('1987-10-18','AL','165'),('1987-10-18','AL','171'),('1987-10-18','AL','171'),('1987-10-18','AL','176'),('1987-10-18','AL','176'),('1987-10-18','AL','179'),('1987-10-18','AL','215'),('1987-10-18','AL','231'),('1987-10-18','AL','263'),('1987-10-18','AL','263'),('1987-10-18','AL','281'),('1987-10-18','AL','281'),('1987-10-18','AL','309'),('1987-10-18','AL','309'),('1987-10-18','AL','341'),('1987-10-18','AL','344'),('1987-10-18','AL','344'),('1987-10-18','AL','357'),('1987-10-18','AL','357'),('1987-10-18','AL','368'),('1987-10-18','AL','396'),('1987-10-18','AL','416'),('1987-10-18','AL','416'),('1987-10-18','AL','417'),('1987-10-18','AL','438'),('1987-10-18','AL','438'),('1987-10-18','AL','446'),('1987-10-18','AL','451'),('1987-10-18','AL','491'),('1987-10-18','AL','523'),('1987-10-18','AL','523'),('1987-10-18','AL','523'),('1987-10-18','AL','525'),('1987-10-18','AL','525'),('1987-10-18','AL','533'),('1987-10-18','AL','533'),('1987-10-18','AL','546'),('1987-10-18','AL','546'),('1987-10-18','AL','556'),('1987-10-18','AL','601'),('1987-10-18','AL','601'),('1987-10-18','AL','627'),('1987-10-18','AL','629'),('1987-10-18','AL','670'),('1987-10-18','AL','670'),('1987-10-18','AL','670'),('1987-10-18','AL','673'),('1987-10-18','AL','680'),('1987-10-18','AL','937'),('1987-10-18','AL','937'),('1987-10-18','AL','955'),('1987-10-19','AA','2'),('1987-10-19','AA','2'),('1987-10-19','AA','2'),('1987-10-19','AA','7'),('1987-10-19','AA','7'),('1987-10-19','AA','26'),('1987-10-19','AA','34'),('1987-10-19','AA','36'),('1987-10-19','AA','91'),('1987-10-19','AA','101'),('1987-10-19','AA','101'),('1987-10-19','AA','109'),('1987-10-19','AA','109'),('1987-10-19','AA','112'),('1987-10-19','AA','123'),('1987-10-19','AA','123'),('1987-10-19','AA','160'),('1987-10-19','AA','165'),('1987-10-19','AA','165'),('1987-10-19','AA','165'),('1987-10-19','AA','176'),('1987-10-19','AA','176'),('1987-10-19','AA','176'),('1987-10-19','AA','176'),('1987-10-19','AA','179'),('1987-10-19','AA','179'),('1987-10-19','AA','215'),('1987-10-19','AA','215'),('1987-10-19','AA','231'),('1987-10-19','AA','231'),('1987-10-19','AA','263'),('1987-10-19','AA','263'),('1987-10-19','AA','268'),('1987-10-19','AA','268'),('1987-10-19','AA','281'),('1987-10-19','AA','287'),('1987-10-19','AA','287'),('1987-10-19','AA','309'),('1987-10-19','AA','309'),('1987-10-19','AA','341'),('1987-10-19','AA','344'),('1987-10-19','AA','344'),('1987-10-19','AA','347'),('1987-10-19','AA','347'),('1987-10-19','AA','368'),('1987-10-19','AA','381'),('1987-10-19','AA','381'),('1987-10-19','AA','381'),('1987-10-19','AA','396'),('1987-10-19','AA','396'),('1987-10-19','AA','397'),('1987-10-19','AA','397'),('1987-10-19','AA','417'),('1987-10-19','AA','417'),('1987-10-19','AA','446'),('1987-10-19','AA','451'),('1987-10-19','AA','451'),('1987-10-19','AA','491'),('1987-10-19','AA','504'),('1987-10-19','AA','504'),('1987-10-19','AA','519'),('1987-10-19','AA','519'),('1987-10-19','AA','523'),('1987-10-19','AA','523'),('1987-10-19','AA','525'),('1987-10-19','AA','525'),('1987-10-19','AA','525'),('1987-10-19','AA','533'),('1987-10-19','AA','533'),('1987-10-19','AA','546'),('1987-10-19','AA','546'),('1987-10-19','AA','546'),('1987-10-19','AA','546'),('1987-10-19','AA','556'),('1987-10-19','AA','556'),('1987-10-19','AA','556'),('1987-10-19','AA','597'),('1987-10-19','AA','597'),('1987-10-19','AA','597'),('1987-10-19','AA','601'),('1987-10-19','AA','601'),('1987-10-19','AA','627'),('1987-10-19','AA','629'),('1987-10-19','AA','629'),('1987-10-19','AA','670'),('1987-10-19','AA','673'),('1987-10-19','AA','673'),('1987-10-19','AA','680'),('1987-10-19','AA','680'),('1987-10-19','AA','817'),('1987-10-19','AA','817'),('1987-10-19','AA','824'),('1987-10-19','AA','824'),('1987-10-19','AA','824'),('1987-10-19','AA','832'),('1987-10-19','AA','832'),('1987-10-19','AA','852'),('1987-10-19','AA','852'),('1987-10-19','AA','866'),('1987-10-19','AA','866'),('1987-10-19','AA','871'),('1987-10-19','AA','871'),('1987-10-19','AA','880'),('1987-10-19','AA','880'),('1987-10-19','AA','880'),('1987-10-19','AA','880'),('1987-10-19','AA','883'),('1987-10-19','AA','883'),('1987-10-19','AA','885'),('1987-10-19','AA','885'),('1987-10-19','AA','890'),('1987-10-19','AA','890'),('1987-10-19','AA','893'),('1987-10-19','AA','893'),('1987-10-19','AA','905'),('1987-10-19','AA','905'),('1987-10-19','AA','915'),('1987-10-19','AA','929'),('1987-10-19','AA','929'),('1987-10-19','AA','936'),('1987-10-19','AA','936'),('1987-10-19','AA','937'),('1987-10-19','AA','955'),('1987-10-19','AA','955'),('1987-10-19','AA','966'),('1987-10-19','AA','1002'),('1987-10-19','AA','1002'),('1987-10-19','AA','1004'),('1987-10-19','AA','1004'),('1987-10-19','AA','1015'),('1987-10-19','AA','1015'),('1987-10-19','AA','1021'),('1987-10-19','AA','1021'),('1987-10-19','AA','1041'),('1987-10-19','AA','1041'),('1987-10-19','AA','1046'),('1987-10-19','AA','1046'),('1987-10-19','AA','1048'),('1987-10-19','AA','1048'),('1987-10-19','AA','1061'),('1987-10-19','AA','1061'),('1987-10-19','AA','1088'),('1987-10-19','AA','1088'),('1987-10-19','AA','2033'),('1987-10-19','AA','2033'),('1987-10-19','AA','2050'),('1987-10-19','AA','2058'),('1987-10-19','AA','2071'),('1987-10-19','AA','2071'),('1987-10-19','AA','2086'),('1987-10-19','AA','2105'),('1987-10-19','AA','2111'),('1987-10-19','AA','2123'),('1987-10-19','AA','2123'),('1987-10-19','AA','2147'),('1987-10-19','AA','2147'),('1987-10-19','AA','2199'),('1987-10-19','AA','2199'),('1987-10-19','AA','2207'),('1987-10-19','AA','2207'),('1987-10-19','AA','2217'),('1987-10-19','AA','2230'),('1987-10-19','AA','2245'),('1987-10-19','AA','2251'),('1987-10-19','AA','2251'),('1987-10-19','AA','2275'),('1987-10-19','AA','2278'),('1987-10-19','AA','2357'),('1987-10-19','AA','2361'),('1987-10-19','AA','2490'),('1987-10-19','AA','2528'),('1987-10-19','AA','2735'),('1987-10-19','AA','2735'),('1987-10-19','AA','2751'),('1987-10-19','AL','2'),('1987-10-19','AL','2'),('1987-10-19','AL','7'),('1987-10-19','AL','7'),('1987-10-19','AL','26'),('1987-10-19','AL','26'),('1987-10-19','AL','34'),('1987-10-19','AL','34'),('1987-10-19','AL','36'),('1987-10-19','AL','36'),('1987-10-19','AL','45'),('1987-10-19','AL','45'),('1987-10-19','AL','45'),('1987-10-19','AL','91'),('1987-10-19','AL','91'),('1987-10-19','AL','104'),('1987-10-19','AL','104'),('1987-10-19','AL','104'),('1987-10-19','AL','109'),('1987-10-19','AL','112'),('1987-10-19','AL','112'),('1987-10-19','AL','123'),('1987-10-19','AL','149'),('1987-10-19','AL','160'),('1987-10-19','AL','160'),('1987-10-19','AL','165'),('1987-10-19','AL','171'),('1987-10-19','AL','171'),('1987-10-19','AL','176'),('1987-10-19','AL','176'),('1987-10-19','AL','179'),('1987-10-19','AL','215'),('1987-10-19','AL','231'),('1987-10-19','AL','263'),('1987-10-19','AL','263'),('1987-10-19','AL','268'),('1987-10-19','AL','268'),('1987-10-19','AL','268'),('1987-10-19','AL','281'),('1987-10-19','AL','281'),('1987-10-19','AL','287'),('1987-10-19','AL','287'),('1987-10-19','AL','309'),('1987-10-19','AL','309'),('1987-10-19','AL','341'),('1987-10-19','AL','344'),('1987-10-19','AL','344'),('1987-10-19','AL','357'),('1987-10-19','AL','357'),('1987-10-19','AL','368'),('1987-10-19','AL','381'),('1987-10-19','AL','396'),('1987-10-19','AL','416'),('1987-10-19','AL','416'),('1987-10-19','AL','417'),('1987-10-19','AL','438'),('1987-10-19','AL','438'),('1987-10-19','AL','446'),('1987-10-19','AL','451'),('1987-10-19','AL','451'),('1987-10-19','AL','491'),('1987-10-19','AL','491'),('1987-10-19','AL','523'),('1987-10-19','AL','523'),('1987-10-19','AL','523'),('1987-10-19','AL','525'),('1987-10-19','AL','525'),('1987-10-19','AL','533'),('1987-10-19','AL','533'),('1987-10-19','AL','546'),('1987-10-19','AL','546'),('1987-10-19','AL','556'),('1987-10-19','AL','556'),('1987-10-19','AL','601'),('1987-10-19','AL','601'),('1987-10-19','AL','627'),('1987-10-19','AL','629'),('1987-10-19','AL','670'),('1987-10-19','AL','670'),('1987-10-19','AL','670'),('1987-10-20','AA','2'),('1987-10-20','AA','2'),('1987-10-20','AA','2'),('1987-10-20','AA','7'),('1987-10-20','AA','7'),('1987-10-20','AA','34'),('1987-10-20','AA','36'),('1987-10-20','AA','91'),('1987-10-20','AA','101'),('1987-10-20','AA','101'),('1987-10-20','AA','109'),('1987-10-20','AA','109'),('1987-10-20','AA','112'),('1987-10-20','AA','123'),('1987-10-20','AA','123'),('1987-10-20','AA','160'),('1987-10-20','AA','165'),('1987-10-20','AA','165'),('1987-10-20','AA','165'),('1987-10-20','AA','176'),('1987-10-20','AA','176'),('1987-10-20','AA','176'),('1987-10-20','AA','176'),('1987-10-20','AA','179'),('1987-10-20','AA','179'),('1987-10-20','AA','215'),('1987-10-20','AA','215'),('1987-10-20','AA','231'),('1987-10-20','AA','231'),('1987-10-20','AA','263'),('1987-10-20','AA','263'),('1987-10-20','AA','268'),('1987-10-20','AA','268'),('1987-10-20','AA','281'),('1987-10-20','AA','287'),('1987-10-20','AA','287'),('1987-10-20','AA','309'),('1987-10-20','AA','309'),('1987-10-20','AA','309'),('1987-10-20','AA','341'),('1987-10-20','AA','344'),('1987-10-20','AA','344'),('1987-10-20','AA','347'),('1987-10-20','AA','347'),('1987-10-20','AA','368'),('1987-10-20','AA','381'),('1987-10-20','AA','381'),('1987-10-20','AA','381'),('1987-10-20','AA','396'),('1987-10-20','AA','396'),('1987-10-20','AA','397'),('1987-10-20','AA','397'),('1987-10-20','AA','417'),('1987-10-20','AA','417'),('1987-10-20','AA','446'),('1987-10-20','AA','460'),('1987-10-20','AA','460'),('1987-10-20','AA','491'),('1987-10-20','AA','504'),('1987-10-20','AA','504'),('1987-10-20','AA','519'),('1987-10-20','AA','519'),('1987-10-20','AA','523'),('1987-10-20','AA','525'),('1987-10-20','AA','525'),('1987-10-20','AA','525'),('1987-10-20','AA','533'),('1987-10-20','AA','533'),('1987-10-20','AA','533'),('1987-10-20','AA','546'),('1987-10-20','AA','546'),('1987-10-20','AA','546'),('1987-10-20','AA','546'),('1987-10-20','AA','556'),('1987-10-20','AA','556'),('1987-10-20','AA','597'),('1987-10-20','AA','597'),('1987-10-20','AA','601'),('1987-10-20','AA','601'),('1987-10-20','AA','629'),('1987-10-20','AA','670'),('1987-10-20','AA','673'),('1987-10-20','AA','673'),('1987-10-20','AA','680'),('1987-10-20','AA','680'),('1987-10-20','AA','817'),('1987-10-20','AA','824'),('1987-10-20','AA','824'),('1987-10-20','AA','824'),('1987-10-20','AA','832'),('1987-10-20','AA','832'),('1987-10-20','AA','852'),('1987-10-20','AA','852'),('1987-10-20','AA','866'),('1987-10-20','AA','866'),('1987-10-20','AA','871'),('1987-10-20','AA','871'),('1987-10-20','AA','880'),('1987-10-20','AA','880'),('1987-10-20','AA','880'),('1987-10-20','AA','880'),('1987-10-20','AA','883'),('1987-10-20','AA','883'),('1987-10-20','AA','885'),('1987-10-20','AA','885'),('1987-10-20','AA','885'),('1987-10-20','AA','890'),('1987-10-20','AA','890'),('1987-10-20','AA','893'),('1987-10-20','AA','893'),('1987-10-20','AA','905'),('1987-10-20','AA','905'),('1987-10-20','AA','915'),('1987-10-20','AA','929'),('1987-10-20','AA','929'),('1987-10-20','AA','936'),('1987-10-20','AA','937'),('1987-10-20','AA','937'),('1987-10-20','AA','955'),('1987-10-20','AA','955'),('1987-10-20','AA','966'),('1987-10-20','AA','1002'),('1987-10-20','AA','1002'),('1987-10-20','AA','1004'),('1987-10-20','AA','1004'),('1987-10-20','AA','1015'),('1987-10-20','AA','1015'),('1987-10-20','AA','1021'),('1987-10-20','AA','1021'),('1987-10-20','AA','1041'),('1987-10-20','AA','1041'),('1987-10-20','AA','1046'),('1987-10-20','AA','1046'),('1987-10-20','AA','1048'),('1987-10-20','AA','1048'),('1987-10-20','AA','1061'),('1987-10-20','AA','1061'),('1987-10-20','AA','1088'),('1987-10-20','AA','1088'),('1987-10-20','AA','2033'),('1987-10-20','AA','2033'),('1987-10-20','AA','2050'),('1987-10-20','AA','2058'),('1987-10-20','AA','2071'),('1987-10-20','AA','2071'),('1987-10-20','AA','2086'),('1987-10-20','AA','2105'),('1987-10-20','AA','2111'),('1987-10-20','AA','2123'),('1987-10-20','AA','2123'),('1987-10-20','AA','2147'),('1987-10-20','AA','2199'),('1987-10-20','AA','2207'),('1987-10-20','AA','2217'),('1987-10-20','AA','2230'),('1987-10-20','AA','2245'),('1987-10-20','AA','2251'),('1987-10-20','AA','2251'),('1987-10-20','AA','2275'),('1987-10-20','AA','2278'),('1987-10-20','AA','2351'),('1987-10-20','AA','2357'),('1987-10-20','AA','2361'),('1987-10-20','AA','2490'),('1987-10-20','AA','2528'),('1987-10-20','AA','2528'),('1987-10-20','AA','2735'),('1987-10-20','AA','2735'),('1987-10-20','AA','2751'),('1987-10-20','AL','2'),('1987-10-20','AL','2'),('1987-10-20','AL','7'),('1987-10-20','AL','7'),('1987-10-20','AL','26'),('1987-10-20','AL','26'),('1987-10-20','AL','34'),('1987-10-20','AL','34'),('1987-10-20','AL','36'),('1987-10-20','AL','36'),('1987-10-20','AL','45'),('1987-10-20','AL','45'),('1987-10-20','AL','45'),('1987-10-20','AL','104'),('1987-10-20','AL','104'),('1987-10-20','AL','104'),('1987-10-20','AL','109'),('1987-10-20','AL','112'),('1987-10-20','AL','112'),('1987-10-20','AL','123'),('1987-10-20','AL','149'),('1987-10-20','AL','160'),('1987-10-20','AL','160'),('1987-10-20','AL','165'),('1987-10-20','AL','171'),('1987-10-20','AL','171'),('1987-10-20','AL','176'),('1987-10-20','AL','176'),('1987-10-20','AL','179'),('1987-10-20','AL','215'),('1987-10-20','AL','231'),('1987-10-20','AL','263'),('1987-10-20','AL','263'),('1987-10-20','AL','268'),('1987-10-20','AL','268'),('1987-10-20','AL','268'),('1987-10-20','AL','281'),('1987-10-20','AL','281'),('1987-10-20','AL','287'),('1987-10-20','AL','287'),('1987-10-20','AL','309'),('1987-10-20','AL','309'),('1987-10-20','AL','341'),('1987-10-20','AL','344'),('1987-10-20','AL','344'),('1987-10-20','AL','357'),('1987-10-20','AL','357'),('1987-10-20','AL','368'),('1987-10-20','AL','381'),('1987-10-20','AL','396'),('1987-10-20','AL','397'),('1987-10-20','AL','397'),('1987-10-20','AL','416'),('1987-10-20','AL','416'),('1987-10-20','AL','417'),('1987-10-20','AL','438'),('1987-10-20','AL','438'),('1987-10-20','AL','446'),('1987-10-20','AL','451'),('1987-10-20','AL','451'),('1987-10-20','AL','491'),('1987-10-20','AL','491'),('1987-10-20','AL','523'),('1987-10-20','AL','523'),('1987-10-20','AL','523'),('1987-10-20','AL','525'),('1987-10-20','AL','525'),('1987-10-20','AL','533'),('1987-10-20','AL','533'),('1987-10-20','AL','546'),('1987-10-20','AL','546'),('1987-10-20','AL','556'),('1987-10-20','AL','556'),('1987-10-20','AL','601'),('1987-10-20','AL','601'),('1987-10-20','AL','627'),('1987-10-20','AL','629'),('1987-10-20','AL','670'),('1987-10-20','AL','670'),('1987-10-20','AL','670'),('1987-10-20','AL','673'),('1987-10-20','AL','680'),('1987-10-05','AA','2'),('1987-10-05','AA','2'),('1987-10-05','AA','2'),('1987-10-05','AA','7'),('1987-10-05','AA','7'),('1987-10-05','AA','26'),('1987-10-05','AA','34'),('1987-10-05','AA','36'),('1987-10-05','AA','91'),('1987-10-05','AA','101'),('1987-10-05','AA','101'),('1987-10-05','AA','109'),('1987-10-05','AA','109'),('1987-10-05','AA','112'),('1987-10-05','AA','123'),('1987-10-05','AA','123'),('1987-10-05','AA','165'),('1987-10-05','AA','165'),('1987-10-05','AA','165'),('1987-10-05','AA','176'),('1987-10-05','AA','176'),('1987-10-05','AA','176'),('1987-10-05','AA','176'),('1987-10-05','AA','179'),('1987-10-05','AA','179'),('1987-10-05','AA','215'),('1987-10-05','AA','215'),('1987-10-05','AA','231'),('1987-10-05','AA','263'),('1987-10-05','AA','263'),('1987-10-05','AA','281'),('1987-10-05','AA','287'),('1987-10-05','AA','287'),('1987-10-05','AA','309'),('1987-10-05','AA','309'),('1987-10-05','AA','309'),('1987-10-05','AA','341'),('1987-10-05','AA','347'),('1987-10-05','AA','347'),('1987-10-05','AA','368'),('1987-10-05','AA','381'),('1987-10-05','AA','381'),('1987-10-05','AA','381'),('1987-10-05','AA','396'),('1987-10-05','AA','396'),('1987-10-05','AA','397'),('1987-10-05','AA','397'),('1987-10-05','AA','417'),('1987-10-05','AA','417'),('1987-10-05','AA','446'),('1987-10-05','AA','451'),('1987-10-05','AA','451'),('1987-10-05','AA','460'),('1987-10-05','AA','460'),('1987-10-05','AA','491'),('1987-10-05','AA','504'),('1987-10-05','AA','504'),('1987-10-05','AA','519'),('1987-10-05','AA','519'),('1987-10-05','AA','523'),('1987-10-05','AA','523'),('1987-10-05','AA','525'),('1987-10-05','AA','525'),('1987-10-05','AA','525'),('1987-10-05','AA','533'),('1987-10-05','AA','533'),('1987-10-05','AA','533'),('1987-10-05','AA','546'),('1987-10-05','AA','546'),('1987-10-05','AA','546'),('1987-10-05','AA','546'),('1987-10-05','AA','556'),('1987-10-05','AA','556'),('1987-10-05','AA','556'),('1987-10-05','AA','597'),('1987-10-05','AA','597'),('1987-10-05','AA','597'),('1987-10-05','AA','601'),('1987-10-05','AA','601'),('1987-10-05','AA','627'),('1987-10-05','AA','629'),('1987-10-05','AA','629'),('1987-10-05','AA','670'),('1987-10-05','AA','673'),('1987-10-05','AA','673'),('1987-10-05','AA','680'),('1987-10-05','AA','680'),('1987-10-05','AA','817'),('1987-10-05','AA','817'),('1987-10-05','AA','824'),('1987-10-05','AA','824'),('1987-10-05','AA','824'),('1987-10-05','AA','824'),('1987-10-05','AA','832'),('1987-10-05','AA','832'),('1987-10-05','AA','852'),('1987-10-05','AA','852'),('1987-10-05','AA','866'),('1987-10-05','AA','866'),('1987-10-05','AA','871'),('1987-10-05','AA','871'),('1987-10-05','AA','880'),('1987-10-05','AA','880'),('1987-10-05','AA','880'),('1987-10-05','AA','880'),('1987-10-05','AA','883'),('1987-10-05','AA','883'),('1987-10-05','AA','885'),('1987-10-05','AA','885'),('1987-10-05','AA','885'),('1987-10-05','AA','890'),('1987-10-05','AA','890'),('1987-10-05','AA','893'),('1987-10-05','AA','893'),('1987-10-05','AA','905'),('1987-10-05','AA','905'),('1987-10-05','AA','915'),('1987-10-05','AA','929'),('1987-10-05','AA','929'),('1987-10-05','AA','936'),('1987-10-05','AA','936'),('1987-10-05','AA','937'),('1987-10-05','AA','937'),('1987-10-05','AA','955'),('1987-10-05','AA','955'),('1987-10-05','AA','966'),('1987-10-05','AA','1002'),('1987-10-05','AA','1002'),('1987-10-05','AA','1004'),('1987-10-05','AA','1004'),('1987-10-05','AA','1015'),('1987-10-05','AA','1015'),('1987-10-05','AA','1021'),('1987-10-05','AA','1021'),('1987-10-05','AA','1041'),('1987-10-05','AA','1041'),('1987-10-05','AA','1046'),('1987-10-05','AA','1046'),('1987-10-05','AA','1048'),('1987-10-05','AA','1048'),('1987-10-05','AA','1061'),('1987-10-05','AA','1061'),('1987-10-05','AA','1088'),('1987-10-05','AA','1088'),('1987-10-05','AA','2033'),('1987-10-05','AA','2033'),('1987-10-05','AA','2050'),('1987-10-05','AA','2058'),('1987-10-05','AA','2071'),('1987-10-05','AA','2071'),('1987-10-05','AA','2086'),('1987-10-05','AA','2105'),('1987-10-05','AA','2111'),('1987-10-05','AA','2123'),('1987-10-05','AA','2123'),('1987-10-05','AA','2147'),('1987-10-05','AA','2147'),('1987-10-05','AA','2199'),('1987-10-05','AA','2199'),('1987-10-05','AA','2207'),('1987-10-05','AA','2207'),('1987-10-05','AA','2217'),('1987-10-05','AA','2230'),('1987-10-05','AA','2245'),('1987-10-05','AA','2251'),('1987-10-05','AA','2251'),('1987-10-05','AA','2275'),('1987-10-05','AA','2278'),('1987-10-05','AA','2351'),('1987-10-05','AA','2357'),('1987-10-05','AA','2361'),('1987-10-05','AA','2528'),('1987-10-05','AA','2528'),('1987-10-05','AA','2735'),('1987-10-05','AA','2735'),('1987-10-05','AA','2751'),('1987-10-05','AL','2'),('1987-10-05','AL','2'),('1987-10-05','AL','7'),('1987-10-05','AL','7'),('1987-10-05','AL','26'),('1987-10-05','AL','26'),('1987-10-05','AL','36'),('1987-10-05','AL','36'),('1987-10-05','AL','45'),('1987-10-05','AL','45'),('1987-10-05','AL','45'),('1987-10-05','AL','91'),('1987-10-05','AL','91'),('1987-10-05','AL','104'),('1987-10-05','AL','104'),('1987-10-05','AL','104'),('1987-10-05','AL','109'),('1987-10-05','AL','112'),('1987-10-05','AL','112'),('1987-10-05','AL','123'),('1987-10-05','AL','149'),('1987-10-05','AL','160'),('1987-10-05','AL','160'),('1987-10-05','AL','165'),('1987-10-05','AL','171'),('1987-10-05','AL','171'),('1987-10-05','AL','176'),('1987-10-05','AL','176'),('1987-10-05','AL','179'),('1987-10-05','AL','215'),('1987-10-05','AL','231'),('1987-10-05','AL','263'),('1987-10-05','AL','263'),('1987-10-05','AL','268'),('1987-10-05','AL','268'),('1987-10-05','AL','268'),('1987-10-05','AL','281'),('1987-10-05','AL','281'),('1987-10-05','AL','287'),('1987-10-05','AL','287'),('1987-10-05','AL','309'),('1987-10-05','AL','309'),('1987-10-05','AL','341'),('1987-10-05','AL','344'),('1987-10-05','AL','344'),('1987-10-05','AL','357'),('1987-10-05','AL','357'),('1987-10-05','AL','368'),('1987-10-05','AL','381'),('1987-10-05','AL','396'),('1987-10-05','AL','397'),('1987-10-05','AL','397'),('1987-10-05','AL','416'),('1987-10-05','AL','416'),('1987-10-05','AL','417'),('1987-10-05','AL','438'),('1987-10-05','AL','438'),('1987-10-05','AL','446'),('1987-10-05','AL','451'),('1987-10-05','AL','451'),('1987-10-05','AL','491'),('1987-10-05','AL','491'),('1987-10-05','AL','523'),('1987-10-05','AL','523'),('1987-10-05','AL','523'),('1987-10-05','AL','525'),('1987-10-05','AL','525'),('1987-10-05','AL','533'),('1987-10-05','AL','533'),('1987-10-05','AL','546'),('1987-10-05','AL','546'),('1987-10-05','AL','601'),('1987-10-05','AL','601'),('1987-10-05','AL','627'),('1987-10-05','AL','629'),('1987-10-05','AL','670'),('1987-10-05','AL','670'),('1987-10-05','AL','670'),('1987-10-05','AL','673'),('1987-10-05','AL','680'),('1987-10-06','AA','2'),('1987-10-06','AA','2'),('1987-10-06','AA','7'),('1987-10-06','AA','7'),('1987-10-06','AA','34'),('1987-10-06','AA','36'),('1987-10-06','AA','91'),('1987-10-06','AA','101'),('1987-10-06','AA','109'),('1987-10-06','AA','109'),('1987-10-06','AA','112'),('1987-10-06','AA','123'),('1987-10-06','AA','123'),('1987-10-06','AA','165'),('1987-10-06','AA','165'),('1987-10-06','AA','165'),('1987-10-06','AA','176'),('1987-10-06','AA','176'),('1987-10-06','AA','176'),('1987-10-06','AA','176'),('1987-10-06','AA','179'),('1987-10-06','AA','179'),('1987-10-06','AA','215'),('1987-10-06','AA','215'),('1987-10-06','AA','231'),('1987-10-06','AA','231'),('1987-10-06','AA','263'),('1987-10-06','AA','263'),('1987-10-06','AA','268'),('1987-10-06','AA','268'),('1987-10-06','AA','287'),('1987-10-06','AA','287'),('1987-10-06','AA','309'),('1987-10-06','AA','309'),('1987-10-06','AA','309'),('1987-10-06','AA','341'),('1987-10-06','AA','344'),('1987-10-06','AA','344'),('1987-10-06','AA','347'),('1987-10-06','AA','347'),('1987-10-06','AA','368'),('1987-10-06','AA','381'),('1987-10-06','AA','381'),('1987-10-06','AA','381'),('1987-10-06','AA','396'),('1987-10-06','AA','396'),('1987-10-06','AA','397'),('1987-10-06','AA','397'),('1987-10-06','AA','417'),('1987-10-06','AA','417'),('1987-10-06','AA','446'),('1987-10-06','AA','451'),('1987-10-06','AA','451'),('1987-10-06','AA','460'),('1987-10-06','AA','460'),('1987-10-06','AA','491'),('1987-10-06','AA','504'),('1987-10-06','AA','504'),('1987-10-06','AA','519'),('1987-10-06','AA','519'),('1987-10-06','AA','523'),('1987-10-06','AA','523'),('1987-10-06','AA','525'),('1987-10-06','AA','525'),('1987-10-06','AA','525'),('1987-10-06','AA','533'),('1987-10-06','AA','533'),('1987-10-06','AA','533'),('1987-10-06','AA','546'),('1987-10-06','AA','546'),('1987-10-06','AA','546'),('1987-10-06','AA','546'),('1987-10-06','AA','556'),('1987-10-06','AA','556'),('1987-10-06','AA','556'),('1987-10-06','AA','597'),('1987-10-06','AA','597'),('1987-10-06','AA','597'),('1987-10-06','AA','601'),('1987-10-06','AA','601'),('1987-10-06','AA','627'),('1987-10-06','AA','629'),('1987-10-06','AA','629'),('1987-10-06','AA','670'),('1987-10-06','AA','673'),('1987-10-06','AA','673'),('1987-10-06','AA','680'),('1987-10-06','AA','680'),('1987-10-06','AA','817'),('1987-10-06','AA','817'),('1987-10-06','AA','824'),('1987-10-06','AA','824'),('1987-10-06','AA','824'),('1987-10-06','AA','824'),('1987-10-06','AA','832'),('1987-10-06','AA','832'),('1987-10-06','AA','852'),('1987-10-06','AA','852'),('1987-10-06','AA','866'),('1987-10-06','AA','871'),('1987-10-06','AA','871'),('1987-10-06','AA','880'),('1987-10-06','AA','880'),('1987-10-06','AA','880'),('1987-10-06','AA','880'),('1987-10-06','AA','883'),('1987-10-06','AA','883'),('1987-10-06','AA','885'),('1987-10-06','AA','885'),('1987-10-06','AA','885'),('1987-10-06','AA','890'),('1987-10-06','AA','890'),('1987-10-06','AA','893'),('1987-10-06','AA','893'),('1987-10-06','AA','905'),('1987-10-06','AA','905'),('1987-10-06','AA','915'),('1987-10-06','AA','929'),('1987-10-06','AA','929'),('1987-10-06','AA','936'),('1987-10-06','AA','936'),('1987-10-06','AA','937'),('1987-10-06','AA','937'),('1987-10-06','AA','955'),('1987-10-06','AA','955'),('1987-10-06','AA','966'),('1987-10-06','AA','1002'),('1987-10-06','AA','1002'),('1987-10-06','AA','1004'),('1987-10-06','AA','1004'),('1987-10-06','AA','1015'),('1987-10-06','AA','1015'),('1987-10-06','AA','1021'),('1987-10-06','AA','1021'),('1987-10-06','AA','1041'),('1987-10-06','AA','1041'),('1987-10-06','AA','1046'),('1987-10-06','AA','1046'),('1987-10-06','AA','1048'),('1987-10-06','AA','1061'),('1987-10-06','AA','1088'),('1987-10-06','AA','1088'),('1987-10-06','AA','2033'),('1987-10-06','AA','2033'),('1987-10-06','AA','2050'),('1987-10-06','AA','2058'),('1987-10-06','AA','2071'),('1987-10-06','AA','2071'),('1987-10-06','AA','2086'),('1987-10-06','AA','2105'),('1987-10-06','AA','2111'),('1987-10-06','AA','2123'),('1987-10-06','AA','2123'),('1987-10-06','AA','2147'),('1987-10-06','AA','2147'),('1987-10-06','AA','2199'),('1987-10-06','AA','2199'),('1987-10-06','AA','2207'),('1987-10-06','AA','2207'),('1987-10-06','AA','2217'),('1987-10-06','AA','2230'),('1987-10-06','AA','2245'),('1987-10-06','AA','2251'),('1987-10-06','AA','2251'),('1987-10-06','AA','2275'),('1987-10-06','AA','2278'),('1987-10-06','AA','2351'),('1987-10-06','AA','2357'),('1987-10-06','AA','2490'),('1987-10-06','AA','2528'),('1987-10-06','AA','2528'),('1987-10-06','AA','2735'),('1987-10-06','AA','2735'),('1987-10-06','AA','2751'),('1987-10-06','AL','2'),('1987-10-06','AL','2'),('1987-10-06','AL','7'),('1987-10-06','AL','7'),('1987-10-06','AL','26'),('1987-10-06','AL','26'),('1987-10-06','AL','34'),('1987-10-06','AL','34'),('1987-10-06','AL','36'),('1987-10-06','AL','36'),('1987-10-06','AL','45'),('1987-10-06','AL','45'),('1987-10-06','AL','45'),('1987-10-06','AL','91'),('1987-10-06','AL','91'),('1987-10-06','AL','104'),('1987-10-06','AL','104'),('1987-10-06','AL','104'),('1987-10-06','AL','109'),('1987-10-06','AL','112'),('1987-10-06','AL','112'),('1987-10-06','AL','123'),('1987-10-06','AL','149'),('1987-10-06','AL','160'),('1987-10-06','AL','160'),('1987-10-06','AL','165'),('1987-10-06','AL','171'),('1987-10-06','AL','171'),('1987-10-06','AL','176'),('1987-10-06','AL','176'),('1987-10-06','AL','179'),('1987-10-06','AL','231'),('1987-10-06','AL','263'),('1987-10-06','AL','263'),('1987-10-06','AL','268'),('1987-10-06','AL','268'),('1987-10-06','AL','268'),('1987-10-06','AL','281'),('1987-10-06','AL','281'),('1987-10-06','AL','287'),('1987-10-06','AL','287'),('1987-10-06','AL','309'),('1987-10-06','AL','309'),('1987-10-06','AL','341'),('1987-10-06','AL','344'),('1987-10-06','AL','344'),('1987-10-06','AL','357'),('1987-10-06','AL','357'),('1987-10-06','AL','381'),('1987-10-06','AL','397'),('1987-10-06','AL','397'),('1987-10-06','AL','416'),('1987-10-06','AL','416'),('1987-10-06','AL','417'),('1987-10-06','AL','438'),('1987-10-06','AL','438'),('1987-10-06','AL','446'),('1987-10-06','AL','451'),('1987-10-06','AL','451'),('1987-10-06','AL','491'),('1987-10-06','AL','491'),('1987-10-06','AL','523'),('1987-10-06','AL','523'),('1987-10-06','AL','523'),('1987-10-06','AL','525'),('1987-10-06','AL','525'),('1987-10-06','AL','533'),('1987-10-06','AL','533'),('1987-10-06','AL','546'),('1987-10-06','AL','546'),('1987-10-06','AL','601'),('1987-10-06','AL','601'),('1987-10-06','AL','627'),('1987-10-06','AL','629'),('1987-10-06','AL','670'),('1987-10-06','AL','670'),('1987-10-06','AL','670'),('1987-10-06','AL','673'),('1987-10-06','AL','680'),('1987-10-07','AA','2'),('1987-10-07','AA','2'),('1987-10-07','AA','2'),('1987-10-07','AA','7'),('1987-10-07','AA','7'),('1987-10-07','AA','26'),('1987-10-07','AA','34'),('1987-10-07','AA','36'),('1987-10-07','AA','91'),('1987-10-07','AA','101'),('1987-10-07','AA','101'),('1987-10-07','AA','109'),('1987-10-07','AA','112'),('1987-10-07','AA','123'),('1987-10-07','AA','123'),('1987-10-07','AA','160'),('1987-10-07','AA','165'),('1987-10-07','AA','165'),('1987-10-07','AA','165'),('1987-10-07','AA','176'),('1987-10-07','AA','176'),('1987-10-07','AA','176'),('1987-10-07','AA','176'),('1987-10-07','AA','179'),('1987-10-07','AA','179'),('1987-10-07','AA','215'),('1987-10-07','AA','215'),('1987-10-07','AA','231'),('1987-10-07','AA','231'),('1987-10-07','AA','263'),('1987-10-07','AA','263'),('1987-10-07','AA','268'),('1987-10-07','AA','268'),('1987-10-07','AA','281'),('1987-10-07','AA','287'),('1987-10-07','AA','287'),('1987-10-07','AA','309'),('1987-10-07','AA','309'),('1987-10-07','AA','309'),('1987-10-07','AA','341'),('1987-10-07','AA','344'),('1987-10-07','AA','344'),('1987-10-07','AA','347'),('1987-10-07','AA','347'),('1987-10-07','AA','368'),('1987-10-07','AA','381'),('1987-10-07','AA','381'),('1987-10-07','AA','381'),('1987-10-07','AA','396'),('1987-10-07','AA','396'),('1987-10-07','AA','397'),('1987-10-07','AA','397'),('1987-10-07','AA','417'),('1987-10-07','AA','417'),('1987-10-07','AA','446'),('1987-10-07','AA','451'),('1987-10-07','AA','451'),('1987-10-07','AA','460'),('1987-10-07','AA','460'),('1987-10-07','AA','504'),('1987-10-07','AA','504'),('1987-10-07','AA','519'),('1987-10-07','AA','519'),('1987-10-07','AA','523'),('1987-10-07','AA','523'),('1987-10-07','AA','525'),('1987-10-07','AA','525'),('1987-10-07','AA','525'),('1987-10-07','AA','533'),('1987-10-07','AA','533'),('1987-10-07','AA','533'),('1987-10-07','AA','546'),('1987-10-07','AA','546'),('1987-10-07','AA','546'),('1987-10-07','AA','546'),('1987-10-07','AA','556'),('1987-10-07','AA','556'),('1987-10-07','AA','556'),('1987-10-07','AA','597'),('1987-10-07','AA','597'),('1987-10-07','AA','597'),('1987-10-07','AA','601'),('1987-10-07','AA','601'),('1987-10-07','AA','627'),('1987-10-07','AA','629'),('1987-10-07','AA','629'),('1987-10-07','AA','670'),('1987-10-07','AA','673'),('1987-10-07','AA','673'),('1987-10-07','AA','680'),('1987-10-07','AA','680'),('1987-10-07','AA','817'),('1987-10-07','AA','817'),('1987-10-07','AA','824'),('1987-10-07','AA','824'),('1987-10-07','AA','824'),('1987-10-07','AA','824'),('1987-10-07','AA','832'),('1987-10-07','AA','832'),('1987-10-07','AA','852'),('1987-10-07','AA','852'),('1987-10-07','AA','866'),('1987-10-07','AA','866'),('1987-10-07','AA','871'),('1987-10-07','AA','871'),('1987-10-07','AA','880'),('1987-10-07','AA','880'),('1987-10-07','AA','880'),('1987-10-07','AA','880'),('1987-10-07','AA','883'),('1987-10-07','AA','883'),('1987-10-07','AA','885'),('1987-10-07','AA','885'),('1987-10-07','AA','890'),('1987-10-07','AA','890'),('1987-10-07','AA','893'),('1987-10-07','AA','893'),('1987-10-07','AA','905'),('1987-10-07','AA','905'),('1987-10-07','AA','915'),('1987-10-07','AA','929'),('1987-10-07','AA','929'),('1987-10-07','AA','936'),('1987-10-07','AA','936'),('1987-10-07','AA','937'),('1987-10-07','AA','937'),('1987-10-07','AA','955'),('1987-10-07','AA','955'),('1987-10-07','AA','966'),('1987-10-07','AA','1002'),('1987-10-07','AA','1002'),('1987-10-07','AA','1004'),('1987-10-07','AA','1004'),('1987-10-07','AA','1015'),('1987-10-07','AA','1015'),('1987-10-07','AA','1021'),('1987-10-07','AA','1021'),('1987-10-07','AA','1041'),('1987-10-07','AA','1041'),('1987-10-07','AA','1046'),('1987-10-07','AA','1046'),('1987-10-07','AA','1048'),('1987-10-07','AA','1048'),('1987-10-07','AA','1061'),('1987-10-07','AA','1061'),('1987-10-07','AA','1088'),('1987-10-07','AA','1088'),('1987-10-07','AA','2033'),('1987-10-07','AA','2033'),('1987-10-07','AA','2050'),('1987-10-07','AA','2058'),('1987-10-07','AA','2071'),('1987-10-07','AA','2071'),('1987-10-07','AA','2086'),('1987-10-07','AA','2105'),('1987-10-07','AA','2111'),('1987-10-07','AA','2123'),('1987-10-07','AA','2123'),('1987-10-07','AA','2147'),('1987-10-07','AA','2147'),('1987-10-07','AA','2199'),('1987-10-07','AA','2199'),('1987-10-07','AA','2207'),('1987-10-07','AA','2207'),('1987-10-07','AA','2217'),('1987-10-07','AA','2230'),('1987-10-07','AA','2245'),('1987-10-07','AA','2251'),('1987-10-07','AA','2251'),('1987-10-07','AA','2275'),('1987-10-07','AA','2351'),('1987-10-07','AA','2357'),('1987-10-07','AA','2361'),('1987-10-07','AA','2490'),('1987-10-07','AA','2528'),('1987-10-07','AA','2528'),('1987-10-07','AA','2735'),('1987-10-07','AA','2735'),('1987-10-07','AA','2751'),('1987-10-07','AL','2'),('1987-10-07','AL','2'),('1987-10-07','AL','7'),('1987-10-07','AL','7'),('1987-10-07','AL','26'),('1987-10-07','AL','26'),('1987-10-07','AL','34'),('1987-10-07','AL','34'),('1987-10-07','AL','36'),('1987-10-07','AL','36'),('1987-10-07','AL','45'),('1987-10-07','AL','45'),('1987-10-07','AL','45'),('1987-10-07','AL','91'),('1987-10-07','AL','91'),('1987-10-07','AL','104'),('1987-10-07','AL','104'),('1987-10-07','AL','104'),('1987-10-07','AL','109'),('1987-10-07','AL','112'),('1987-10-07','AL','112'),('1987-10-07','AL','123'),('1987-10-07','AL','149'),('1987-10-07','AL','160'),('1987-10-07','AL','160'),('1987-10-07','AL','165'),('1987-10-07','AL','171'),('1987-10-07','AL','171'),('1987-10-07','AL','176'),('1987-10-07','AL','176'),('1987-10-07','AL','179'),('1987-10-07','AL','215'),('1987-10-07','AL','231'),('1987-10-07','AL','263'),('1987-10-07','AL','263'),('1987-10-07','AL','268'),('1987-10-07','AL','268'),('1987-10-07','AL','268'),('1987-10-07','AL','281'),('1987-10-07','AL','281'),('1987-10-07','AL','287'),('1987-10-07','AL','287'),('1987-10-07','AL','309'),('1987-10-07','AL','309'),('1987-10-07','AL','341'),('1987-10-07','AL','344'),('1987-10-07','AL','344'),('1987-10-07','AL','357'),('1987-10-07','AL','357'),('1987-10-07','AL','368'),('1987-10-07','AL','381'),('1987-10-07','AL','396'),('1987-10-07','AL','397'),('1987-10-07','AL','397'),('1987-10-07','AL','416'),('1987-10-07','AL','416'),('1987-10-07','AL','417'),('1987-10-07','AL','438'),('1987-10-07','AL','438'),('1987-10-07','AL','446'),('1987-10-07','AL','451'),('1987-10-07','AL','451'),('1987-10-07','AL','491'),('1987-10-07','AL','491'),('1987-10-07','AL','523'),('1987-10-07','AL','523'),('1987-10-07','AL','523'),('1987-10-07','AL','525'),('1987-10-07','AL','525'),('1987-10-07','AL','533'),('1987-10-07','AL','533'),('1987-10-07','AL','546'),('1987-10-07','AL','546'),('1987-10-07','AL','556'),('1987-10-07','AL','556'),('1987-10-07','AL','601'),('1987-10-07','AL','627'),('1987-10-07','AL','629'),('1987-10-07','AL','670'),('1987-10-07','AL','670'),('1987-10-07','AL','670'),('1987-10-07','AL','673'),('1987-10-07','AL','680'),('1987-10-08','AA','2'),('1987-10-08','AA','2'),('1987-10-08','AA','2'),('1987-10-08','AA','7'),('1987-10-08','AA','7'),('1987-10-08','AA','26'),('1987-10-08','AA','34'),('1987-10-08','AA','36'),('1987-10-08','AA','91'),('1987-10-08','AA','101'),('1987-10-08','AA','101'),('1987-10-08','AA','109'),('1987-10-08','AA','109'),('1987-10-08','AA','112'),('1987-10-08','AA','123'),('1987-10-08','AA','123'),('1987-10-08','AA','160'),('1987-10-08','AA','165'),('1987-10-08','AA','165'),('1987-10-08','AA','165'),('1987-10-08','AA','176'),('1987-10-08','AA','176'),('1987-10-08','AA','176'),('1987-10-08','AA','176'),('1987-10-08','AA','179'),('1987-10-08','AA','179'),('1987-10-08','AA','215'),('1987-10-08','AA','215'),('1987-10-08','AA','231'),('1987-10-08','AA','231'),('1987-10-08','AA','263'),('1987-10-08','AA','263'),('1987-10-08','AA','268'),('1987-10-08','AA','268'),('1987-10-08','AA','281'),('1987-10-08','AA','287'),('1987-10-08','AA','287'),('1987-10-08','AA','309'),('1987-10-08','AA','309'),('1987-10-08','AA','309'),('1987-10-08','AA','344'),('1987-10-08','AA','344'),('1987-10-08','AA','347'),('1987-10-08','AA','347'),('1987-10-08','AA','368'),('1987-10-08','AA','381'),('1987-10-08','AA','381'),('1987-10-08','AA','381'),('1987-10-08','AA','396'),('1987-10-08','AA','396'),('1987-10-08','AA','397'),('1987-10-08','AA','397'),('1987-10-08','AA','417'),('1987-10-08','AA','417'),('1987-10-08','AA','446'),('1987-10-08','AA','451'),('1987-10-08','AA','460'),('1987-10-08','AA','460'),('1987-10-08','AA','491'),('1987-10-08','AA','504'),('1987-10-08','AA','504'),('1987-10-08','AA','519'),('1987-10-08','AA','519'),('1987-10-08','AA','523'),('1987-10-08','AA','525'),('1987-10-08','AA','533'),('1987-10-08','AA','533'),('1987-10-08','AA','533'),('1987-10-08','AA','546'),('1987-10-08','AA','546'),('1987-10-08','AA','546'),('1987-10-08','AA','546'),('1987-10-08','AA','556'),('1987-10-08','AA','556'),('1987-10-08','AA','556'),('1987-10-08','AA','597'),('1987-10-08','AA','597'),('1987-10-08','AA','597'),('1987-10-08','AA','601'),('1987-10-08','AA','601'),('1987-10-08','AA','627'),('1987-10-08','AA','629'),('1987-10-08','AA','629'),('1987-10-08','AA','670'),('1987-10-08','AA','673'),('1987-10-08','AA','673'),('1987-10-08','AA','680'),('1987-10-08','AA','680'),('1987-10-08','AA','817'),('1987-10-08','AA','817'),('1987-10-08','AA','824'),('1987-10-08','AA','824'),('1987-10-08','AA','832'),('1987-10-08','AA','832'),('1987-10-08','AA','852'),('1987-10-08','AA','866'),('1987-10-08','AA','866'),('1987-10-08','AA','871'),('1987-10-08','AA','871'),('1987-10-08','AA','880'),('1987-10-08','AA','880'),('1987-10-08','AA','880'),('1987-10-08','AA','880'),('1987-10-08','AA','883'),('1987-10-08','AA','883'),('1987-10-08','AA','885'),('1987-10-08','AA','885'),('1987-10-08','AA','885'),('1987-10-08','AA','890'),('1987-10-08','AA','890'),('1987-10-08','AA','893'),('1987-10-08','AA','893'),('1987-10-08','AA','905'),('1987-10-08','AA','905'),('1987-10-08','AA','915'),('1987-10-08','AA','929'),('1987-10-08','AA','929'),('1987-10-08','AA','936'),('1987-10-08','AA','936'),('1987-10-08','AA','937'),('1987-10-08','AA','937'),('1987-10-08','AA','955'),('1987-10-08','AA','955'),('1987-10-08','AA','966'),('1987-10-08','AA','1002'),('1987-10-08','AA','1002'),('1987-10-08','AA','1004'),('1987-10-08','AA','1004'),('1987-10-08','AA','1015'),('1987-10-08','AA','1015'),('1987-10-08','AA','1021'),('1987-10-08','AA','1021'),('1987-10-08','AA','1041'),('1987-10-08','AA','1041'),('1987-10-08','AA','1046'),('1987-10-08','AA','1046'),('1987-10-08','AA','1048'),('1987-10-08','AA','1061'),('1987-10-08','AA','1061'),('1987-10-08','AA','1088'),('1987-10-08','AA','1088'),('1987-10-08','AA','2033'),('1987-10-08','AA','2033'),('1987-10-08','AA','2050'),('1987-10-08','AA','2058'),('1987-10-08','AA','2071'),('1987-10-08','AA','2071'),('1987-10-08','AA','2086'),('1987-10-08','AA','2111'),('1987-10-08','AA','2123'),('1987-10-08','AA','2123'),('1987-10-08','AA','2147'),('1987-10-08','AA','2147'),('1987-10-08','AA','2199'),('1987-10-08','AA','2199'),('1987-10-08','AA','2207'),('1987-10-08','AA','2207'),('1987-10-08','AA','2217'),('1987-10-08','AA','2230'),('1987-10-08','AA','2245'),('1987-10-08','AA','2251'),('1987-10-08','AA','2251'),('1987-10-08','AA','2275'),('1987-10-08','AA','2278'),('1987-10-08','AA','2351'),('1987-10-08','AA','2357'),('1987-10-08','AA','2361'),('1987-10-08','AA','2490'),('1987-10-08','AA','2528'),('1987-10-08','AA','2528'),('1987-10-08','AA','2735'),('1987-10-08','AA','2735'),('1987-10-08','AA','2751'),('1987-10-08','AL','2'),('1987-10-08','AL','2'),('1987-10-08','AL','7'),('1987-10-08','AL','7'),('1987-10-08','AL','26'),('1987-10-08','AL','26'),('1987-10-08','AL','34'),('1987-10-08','AL','34'),('1987-10-08','AL','36'),('1987-10-08','AL','36'),('1987-10-08','AL','45'),('1987-10-08','AL','45'),('1987-10-08','AL','45'),('1987-10-08','AL','91'),('1987-10-08','AL','91'),('1987-10-08','AL','104'),('1987-10-08','AL','104'),('1987-10-08','AL','104'),('1987-10-08','AL','109'),('1987-10-08','AL','112'),('1987-10-08','AL','112'),('1987-10-08','AL','123'),('1987-10-08','AL','149'),('1987-10-08','AL','160'),('1987-10-08','AL','160'),('1987-10-08','AL','165'),('1987-10-08','AL','171'),('1987-10-08','AL','171'),('1987-10-08','AL','176'),('1987-10-08','AL','176'),('1987-10-08','AL','179'),('1987-10-08','AL','215'),('1987-10-08','AL','231'),('1987-10-08','AL','263'),('1987-10-08','AL','263'),('1987-10-08','AL','268'),('1987-10-08','AL','268'),('1987-10-08','AL','268'),('1987-10-08','AL','281'),('1987-10-08','AL','281'),('1987-10-08','AL','287'),('1987-10-08','AL','287'),('1987-10-08','AL','309'),('1987-10-08','AL','309'),('1987-10-08','AL','341'),('1987-10-08','AL','344'),('1987-10-08','AL','344'),('1987-10-08','AL','357'),('1987-10-08','AL','357'),('1987-10-08','AL','368'),('1987-10-08','AL','381'),('1987-10-08','AL','396'),('1987-10-08','AL','397'),('1987-10-08','AL','397'),('1987-10-08','AL','416'),('1987-10-08','AL','416'),('1987-10-08','AL','417'),('1987-10-08','AL','438'),('1987-10-08','AL','438'),('1987-10-08','AL','446'),('1987-10-08','AL','451'),('1987-10-08','AL','451'),('1987-10-08','AL','491'),('1987-10-08','AL','491'),('1987-10-08','AL','523'),('1987-10-08','AL','523'),('1987-10-08','AL','523'),('1987-10-08','AL','525'),('1987-10-08','AL','525'),('1987-10-08','AL','533'),('1987-10-08','AL','533'),('1987-10-08','AL','546'),('1987-10-08','AL','546'),('1987-10-08','AL','556'),('1987-10-08','AL','556'),('1987-10-08','AL','601'),('1987-10-08','AL','601'),('1987-10-08','AL','627'),('1987-10-08','AL','629'),('1987-10-08','AL','670'),('1987-10-08','AL','670'),('1987-10-08','AL','670'),('1987-10-08','AL','680'),('1987-10-09','AA','2'),('1987-10-09','AA','2'),('1987-10-09','AA','2'),('1987-10-09','AA','7'),('1987-10-09','AA','7'),('1987-10-09','AA','26'),('1987-10-09','AA','34'),('1987-10-09','AA','36'),('1987-10-09','AA','91'),('1987-10-09','AA','101'),('1987-10-09','AA','101'),('1987-10-09','AA','109'),('1987-10-09','AA','109'),('1987-10-09','AA','112'),('1987-10-09','AA','123'),('1987-10-09','AA','123'),('1987-10-09','AA','160'),('1987-10-09','AA','165'),('1987-10-09','AA','165'),('1987-10-09','AA','176'),('1987-10-09','AA','176'),('1987-10-09','AA','176'),('1987-10-09','AA','176'),('1987-10-09','AA','179'),('1987-10-09','AA','179'),('1987-10-09','AA','215'),('1987-10-09','AA','215'),('1987-10-09','AA','231'),('1987-10-09','AA','263'),('1987-10-09','AA','263'),('1987-10-09','AA','268'),('1987-10-09','AA','268'),('1987-10-09','AA','281'),('1987-10-09','AA','287'),('1987-10-09','AA','309'),('1987-10-09','AA','309'),('1987-10-09','AA','309'),('1987-10-09','AA','344'),('1987-10-09','AA','344'),('1987-10-09','AA','347'),('1987-10-09','AA','347'),('1987-10-09','AA','368'),('1987-10-09','AA','381'),('1987-10-09','AA','381'),('1987-10-09','AA','381'),('1987-10-09','AA','396'),('1987-10-09','AA','396'),('1987-10-09','AA','397'),('1987-10-09','AA','397'),('1987-10-09','AA','417'),('1987-10-09','AA','417'),('1987-10-09','AA','451'),('1987-10-09','AA','451'),('1987-10-09','AA','460'),('1987-10-09','AA','460'),('1987-10-09','AA','491'),('1987-10-09','AA','504'),('1987-10-09','AA','504'),('1987-10-09','AA','519'),('1987-10-09','AA','519'),('1987-10-09','AA','523'),('1987-10-09','AA','523'),('1987-10-09','AA','525'),('1987-10-09','AA','525'),('1987-10-09','AA','525'),('1987-10-09','AA','533'),('1987-10-09','AA','533'),('1987-10-09','AA','533'),('1987-10-09','AA','546'),('1987-10-09','AA','546'),('1987-10-09','AA','546'),('1987-10-09','AA','546'),('1987-10-09','AA','556'),('1987-10-09','AA','556'),('1987-10-09','AA','556'),('1987-10-09','AA','597'),('1987-10-09','AA','597'),('1987-10-09','AA','597'),('1987-10-09','AA','601'),('1987-10-09','AA','601'),('1987-10-09','AA','629'),('1987-10-09','AA','629'),('1987-10-09','AA','670'),('1987-10-09','AA','673'),('1987-10-09','AA','673'),('1987-10-09','AA','680'),('1987-10-09','AA','680'),('1987-10-09','AA','817'),('1987-10-09','AA','824'),('1987-10-09','AA','824'),('1987-10-09','AA','824'),('1987-10-09','AA','824'),('1987-10-09','AA','832'),('1987-10-09','AA','832'),('1987-10-09','AA','852'),('1987-10-09','AA','852'),('1987-10-09','AA','866'),('1987-10-09','AA','866'),('1987-10-09','AA','871'),('1987-10-09','AA','880'),('1987-10-09','AA','880'),('1987-10-09','AA','880'),('1987-10-09','AA','883'),('1987-10-09','AA','883'),('1987-10-09','AA','885'),('1987-10-09','AA','885'),('1987-10-09','AA','885'),('1987-10-09','AA','890'),('1987-10-09','AA','890'),('1987-10-09','AA','893'),('1987-10-09','AA','893'),('1987-10-09','AA','905'),('1987-10-09','AA','905'),('1987-10-09','AA','915'),('1987-10-09','AA','929'),('1987-10-09','AA','929'),('1987-10-09','AA','936'),('1987-10-09','AA','936'),('1987-10-09','AA','937'),('1987-10-09','AA','937'),('1987-10-09','AA','955'),('1987-10-09','AA','955'),('1987-10-09','AA','966'),('1987-10-09','AA','1002'),('1987-10-09','AA','1002'),('1987-10-09','AA','1004'),('1987-10-09','AA','1004'),('1987-10-09','AA','1015'),('1987-10-09','AA','1015'),('1987-10-09','AA','1021'),('1987-10-09','AA','1021'),('1987-10-09','AA','1041'),('1987-10-09','AA','1041'),('1987-10-09','AA','1046'),('1987-10-09','AA','1046'),('1987-10-09','AA','1048'),('1987-10-09','AA','1048'),('1987-10-09','AA','1061'),('1987-10-09','AA','1061'),('1987-10-09','AA','1088'),('1987-10-09','AA','1088'),('1987-10-09','AA','2033'),('1987-10-09','AA','2033'),('1987-10-09','AA','2050'),('1987-10-09','AA','2058'),('1987-10-09','AA','2071'),('1987-10-09','AA','2071'),('1987-10-09','AA','2086'),('1987-10-09','AA','2105'),('1987-10-09','AA','2111'),('1987-10-09','AA','2123'),('1987-10-09','AA','2123'),('1987-10-09','AA','2147'),('1987-10-09','AA','2147'),('1987-10-09','AA','2199'),('1987-10-09','AA','2199'),('1987-10-09','AA','2207'),('1987-10-09','AA','2207'),('1987-10-09','AA','2217'),('1987-10-09','AA','2230'),('1987-10-09','AA','2245'),('1987-10-09','AA','2251'),('1987-10-09','AA','2251'),('1987-10-09','AA','2275'),('1987-10-09','AA','2278'),('1987-10-09','AA','2351'),('1987-10-09','AA','2357'),('1987-10-09','AA','2361'),('1987-10-09','AA','2490'),('1987-10-09','AA','2528'),('1987-10-09','AA','2528'),('1987-10-09','AA','2735'),('1987-10-09','AA','2735'),('1987-10-09','AA','2751'),('1987-10-09','AL','2'),('1987-10-09','AL','2'),('1987-10-09','AL','7'),('1987-10-09','AL','7'),('1987-10-09','AL','26'),('1987-10-09','AL','34'),('1987-10-09','AL','34'),('1987-10-09','AL','36'),('1987-10-09','AL','36'),('1987-10-09','AL','45'),('1987-10-09','AL','45'),('1987-10-09','AL','45'),('1987-10-09','AL','91'),('1987-10-09','AL','91'),('1987-10-09','AL','104'),('1987-10-09','AL','104'),('1987-10-09','AL','104'),('1987-10-09','AL','109'),('1987-10-09','AL','112'),('1987-10-09','AL','112'),('1987-10-09','AL','123'),('1987-10-09','AL','149'),('1987-10-09','AL','160'),('1987-10-09','AL','160'),('1987-10-09','AL','165'),('1987-10-09','AL','171'),('1987-10-09','AL','171'),('1987-10-09','AL','176'),('1987-10-09','AL','176'),('1987-10-09','AL','179'),('1987-10-09','AL','215'),('1987-10-09','AL','231'),('1987-10-09','AL','263'),('1987-10-09','AL','263'),('1987-10-09','AL','268'),('1987-10-09','AL','268'),('1987-10-09','AL','268'),('1987-10-09','AL','281'),('1987-10-09','AL','281'),('1987-10-09','AL','287'),('1987-10-09','AL','287'),('1987-10-09','AL','309'),('1987-10-09','AL','309'),('1987-10-09','AL','341'),('1987-10-09','AL','344'),('1987-10-09','AL','344'),('1987-10-09','AL','368'),('1987-10-09','AL','381'),('1987-10-09','AL','396'),('1987-10-09','AL','397'),('1987-10-09','AL','397'),('1987-10-09','AL','416'),('1987-10-09','AL','416'),('1987-10-09','AL','417'),('1987-10-09','AL','438'),('1987-10-09','AL','438'),('1987-10-09','AL','446'),('1987-10-09','AL','451'),('1987-10-09','AL','491'),('1987-10-09','AL','491'),('1987-10-09','AL','523'),('1987-10-09','AL','523'),('1987-10-09','AL','523'),('1987-10-09','AL','525'),('1987-10-09','AL','525'),('1987-10-09','AL','533'),('1987-10-09','AL','533'),('1987-10-09','AL','546'),('1987-10-09','AL','546'),('1987-10-09','AL','556'),('1987-10-09','AL','556'),('1987-10-09','AL','601'),('1987-10-09','AL','601'),('1987-10-09','AL','627'),('1987-10-09','AL','629'),('1987-10-09','AL','670'),('1987-10-09','AL','670'),('1987-10-09','AL','670'),('1987-10-09','AL','673'),('1987-10-09','AL','680'),('1987-10-10','AA','2'),('1987-10-10','AA','2'),('1987-10-10','AA','2'),('1987-10-10','AA','7'),('1987-10-10','AA','7'),('1987-10-10','AA','26'),('1987-10-10','AA','34'),('1987-10-10','AA','36'),('1987-10-10','AA','91'),('1987-10-10','AA','101'),('1987-10-10','AA','101'),('1987-10-10','AA','109'),('1987-10-10','AA','109'),('1987-10-10','AA','112'),('1987-10-10','AA','123'),('1987-10-10','AA','123'),('1987-10-10','AA','160'),('1987-10-10','AA','165'),('1987-10-10','AA','165'),('1987-10-10','AA','165'),('1987-10-10','AA','176'),('1987-10-10','AA','176'),('1987-10-10','AA','176'),('1987-10-10','AA','176'),('1987-10-10','AA','179'),('1987-10-10','AA','179'),('1987-10-10','AA','215'),('1987-10-10','AA','215'),('1987-10-10','AA','231'),('1987-10-10','AA','263'),('1987-10-10','AA','263'),('1987-10-10','AA','268'),('1987-10-10','AA','268'),('1987-10-10','AA','281'),('1987-10-10','AA','287'),('1987-10-10','AA','287'),('1987-10-10','AA','309'),('1987-10-10','AA','309'),('1987-10-10','AA','309'),('1987-10-10','AA','341'),('1987-10-10','AA','344'),('1987-10-10','AA','344'),('1987-10-10','AA','347'),('1987-10-10','AA','347'),('1987-10-10','AA','368'),('1987-10-10','AA','381'),('1987-10-10','AA','381'),('1987-10-10','AA','381'),('1987-10-10','AA','396'),('1987-10-10','AA','396'),('1987-10-10','AA','397'),('1987-10-10','AA','417'),('1987-10-10','AA','417'),('1987-10-10','AA','446'),('1987-10-10','AA','451'),('1987-10-10','AA','451'),('1987-10-10','AA','460'),('1987-10-10','AA','460'),('1987-10-10','AA','491'),('1987-10-10','AA','491'),('1987-10-10','AA','504'),('1987-10-10','AA','504'),('1987-10-10','AA','519'),('1987-10-10','AA','523'),('1987-10-10','AA','523'),('1987-10-10','AA','525'),('1987-10-10','AA','525'),('1987-10-10','AA','525'),('1987-10-10','AA','533'),('1987-10-10','AA','533'),('1987-10-10','AA','546'),('1987-10-10','AA','546'),('1987-10-10','AA','546'),('1987-10-10','AA','546'),('1987-10-10','AA','556'),('1987-10-10','AA','556'),('1987-10-10','AA','556'),('1987-10-10','AA','597'),('1987-10-10','AA','597'),('1987-10-10','AA','597'),('1987-10-10','AA','601'),('1987-10-10','AA','601'),('1987-10-10','AA','627'),('1987-10-10','AA','629'),('1987-10-10','AA','629'),('1987-10-10','AA','670'),('1987-10-10','AA','673'),('1987-10-10','AA','673'),('1987-10-10','AA','680'),('1987-10-10','AA','680'),('1987-10-10','AA','817'),('1987-10-10','AA','817'),('1987-10-10','AA','824'),('1987-10-10','AA','824'),('1987-10-10','AA','824'),('1987-10-10','AA','824'),('1987-10-10','AA','832'),('1987-10-10','AA','832'),('1987-10-10','AA','852'),('1987-10-10','AA','852'),('1987-10-10','AA','866'),('1987-10-10','AA','866'),('1987-10-10','AA','871'),('1987-10-10','AA','871'),('1987-10-10','AA','880'),('1987-10-10','AA','880'),('1987-10-10','AA','880'),('1987-10-10','AA','880'),('1987-10-10','AA','883'),('1987-10-10','AA','883'),('1987-10-10','AA','885'),('1987-10-10','AA','885'),('1987-10-10','AA','885'),('1987-10-10','AA','890'),('1987-10-10','AA','890'),('1987-10-10','AA','893'),('1987-10-10','AA','893'),('1987-10-10','AA','905'),('1987-10-10','AA','905'),('1987-10-10','AA','915'),('1987-10-10','AA','929'),('1987-10-10','AA','929'),('1987-10-10','AA','936'),('1987-10-10','AA','936'),('1987-10-10','AA','937'),('1987-10-10','AA','955'),('1987-10-10','AA','955'),('1987-10-10','AA','966'),('1987-10-10','AA','1002'),('1987-10-10','AA','1002'),('1987-10-10','AA','1004'),('1987-10-10','AA','1004'),('1987-10-10','AA','1015'),('1987-10-10','AA','1015'),('1987-10-10','AA','1021'),('1987-10-10','AA','1021'),('1987-10-10','AA','1041'),('1987-10-10','AA','1041'),('1987-10-10','AA','1046'),('1987-10-10','AA','1046'),('1987-10-10','AA','1048'),('1987-10-10','AA','1048'),('1987-10-10','AA','1061'),('1987-10-10','AA','1061'),('1987-10-10','AA','1088'),('1987-10-10','AA','1088'),('1987-10-10','AA','2033'),('1987-10-10','AA','2033'),('1987-10-10','AA','2050'),('1987-10-10','AA','2058'),('1987-10-10','AA','2071'),('1987-10-10','AA','2071'),('1987-10-10','AA','2086'),('1987-10-10','AA','2111'),('1987-10-10','AA','2123'),('1987-10-10','AA','2123'),('1987-10-10','AA','2147'),('1987-10-10','AA','2147'),('1987-10-10','AA','2199'),('1987-10-10','AA','2207'),('1987-10-10','AA','2207'),('1987-10-10','AA','2217'),('1987-10-10','AA','2230'),('1987-10-10','AA','2245'),('1987-10-10','AA','2251'),('1987-10-10','AA','2251'),('1987-10-10','AA','2275'),('1987-10-10','AA','2278'),('1987-10-10','AA','2351'),('1987-10-10','AA','2357'),('1987-10-10','AA','2361'),('1987-10-10','AA','2490'),('1987-10-10','AA','2528'),('1987-10-10','AA','2528'),('1987-10-10','AA','2735'),('1987-10-10','AA','2735'),('1987-10-10','AL','2'),('1987-10-10','AL','2'),('1987-10-10','AL','7'),('1987-10-10','AL','7'),('1987-10-10','AL','26'),('1987-10-10','AL','26'),('1987-10-10','AL','34'),('1987-10-10','AL','34'),('1987-10-10','AL','36'),('1987-10-10','AL','36'),('1987-10-10','AL','45'),('1987-10-10','AL','45'),('1987-10-10','AL','45'),('1987-10-10','AL','91'),('1987-10-10','AL','91'),('1987-10-10','AL','104'),('1987-10-10','AL','104'),('1987-10-10','AL','109'),('1987-10-10','AL','112'),('1987-10-10','AL','112'),('1987-10-10','AL','149'),('1987-10-10','AL','160'),('1987-10-10','AL','165'),('1987-10-10','AL','171'),('1987-10-10','AL','171'),('1987-10-10','AL','176'),('1987-10-10','AL','176'),('1987-10-10','AL','179'),('1987-10-10','AL','215'),('1987-10-10','AL','231'),('1987-10-10','AL','263'),('1987-10-10','AL','268'),('1987-10-10','AL','268'),('1987-10-10','AL','268'),('1987-10-10','AL','287'),('1987-10-10','AL','287'),('1987-10-10','AL','309'),('1987-10-10','AL','309'),('1987-10-10','AL','344'),('1987-10-10','AL','344'),('1987-10-10','AL','357'),('1987-10-10','AL','396'),('1987-10-10','AL','397'),('1987-10-10','AL','397'),('1987-10-10','AL','397'),('1987-10-10','AL','416'),('1987-10-10','AL','417'),('1987-10-10','AL','438'),('1987-10-10','AL','438'),('1987-10-10','AL','451'),('1987-10-10','AL','451'),('1987-10-10','AL','491'),('1987-10-10','AL','491'),('1987-10-10','AL','523'),('1987-10-10','AL','523'),('1987-10-10','AL','525'),('1987-10-10','AL','525'),('1987-10-10','AL','533'),('1987-10-10','AL','546'),('1987-10-10','AL','546'),('1987-10-10','AL','556'),('1987-10-10','AL','556'),('1987-10-10','AL','601'),('1987-10-10','AL','601'),('1987-10-10','AL','627'),('1987-10-10','AL','670'),('1987-10-10','AL','673'),('1987-10-10','AL','680'),('1987-10-10','AL','905'),('1987-10-10','AL','936'),('1987-10-10','AL','966'),('1987-10-11','AA','2'),('1987-10-11','AA','2'),('1987-10-11','AA','2'),('1987-10-11','AA','7'),('1987-10-11','AA','7'),('1987-10-11','AA','26'),('1987-10-11','AA','36'),('1987-10-11','AA','91'),('1987-10-11','AA','101'),('1987-10-11','AA','101'),('1987-10-11','AA','109'),('1987-10-11','AA','109'),('1987-10-11','AA','112'),('1987-10-11','AA','123'),('1987-10-11','AA','160'),('1987-10-11','AA','165'),('1987-10-11','AA','165'),('1987-10-11','AA','165'),('1987-10-11','AA','176'),('1987-10-11','AA','176'),('1987-10-11','AA','176'),('1987-10-11','AA','176'),('1987-10-11','AA','179'),('1987-10-11','AA','179'),('1987-10-11','AA','215'),('1987-10-11','AA','215'),('1987-10-11','AA','231'),('1987-10-11','AA','263'),('1987-10-11','AA','263'),('1987-10-11','AA','268'),('1987-10-11','AA','268'),('1987-10-11','AA','281'),('1987-10-11','AA','287'),('1987-10-11','AA','287'),('1987-10-11','AA','309'),('1987-10-11','AA','309'),('1987-10-11','AA','309'),('1987-10-11','AA','341'),('1987-10-11','AA','344'),('1987-10-11','AA','344'),('1987-10-11','AA','347'),('1987-10-11','AA','347'),('1987-10-11','AA','368'),('1987-10-11','AA','381'),('1987-10-11','AA','381'),('1987-10-11','AA','381'),('1987-10-11','AA','396'),('1987-10-11','AA','396'),('1987-10-11','AA','397'),('1987-10-11','AA','397'),('1987-10-11','AA','417'),('1987-10-11','AA','417'),('1987-10-11','AA','446'),('1987-10-11','AA','451'),('1987-10-11','AA','451'),('1987-10-11','AA','460'),('1987-10-11','AA','460'),('1987-10-11','AA','491'),('1987-10-11','AA','491'),('1987-10-11','AA','504'),('1987-10-11','AA','504'),('1987-10-11','AA','519'),('1987-10-11','AA','519'),('1987-10-11','AA','523'),('1987-10-11','AA','523'),('1987-10-11','AA','525'),('1987-10-11','AA','525'),('1987-10-11','AA','525'),('1987-10-11','AA','533'),('1987-10-11','AA','533'),('1987-10-11','AA','533'),('1987-10-11','AA','546'),('1987-10-11','AA','546'),('1987-10-11','AA','546'),('1987-10-11','AA','546'),('1987-10-11','AA','556'),('1987-10-11','AA','556'),('1987-10-11','AA','556'),('1987-10-11','AA','597'),('1987-10-11','AA','597'),('1987-10-11','AA','597'),('1987-10-11','AA','601'),('1987-10-11','AA','601'),('1987-10-11','AA','627'),('1987-10-11','AA','629'),('1987-10-11','AA','629'),('1987-10-11','AA','670'),('1987-10-11','AA','673'),('1987-10-11','AA','673'),('1987-10-11','AA','680'),('1987-10-11','AA','680'),('1987-10-11','AA','817'),('1987-10-11','AA','817'),('1987-10-11','AA','824'),('1987-10-11','AA','824'),('1987-10-11','AA','824'),('1987-10-11','AA','824'),('1987-10-11','AA','832'),('1987-10-11','AA','832'),('1987-10-11','AA','852'),('1987-10-11','AA','852'),('1987-10-11','AA','866'),('1987-10-11','AA','866'),('1987-10-11','AA','871'),('1987-10-11','AA','871'),('1987-10-11','AA','880'),('1987-10-11','AA','880'),('1987-10-11','AA','880'),('1987-10-11','AA','880'),('1987-10-11','AA','883'),('1987-10-11','AA','883'),('1987-10-11','AA','885'),('1987-10-11','AA','885'),('1987-10-11','AA','885'),('1987-10-11','AA','890'),('1987-10-11','AA','890'),('1987-10-11','AA','893'),('1987-10-11','AA','893'),('1987-10-11','AA','905'),('1987-10-11','AA','905'),('1987-10-11','AA','915'),('1987-10-11','AA','929'),('1987-10-11','AA','929'),('1987-10-11','AA','936'),('1987-10-11','AA','936'),('1987-10-11','AA','937'),('1987-10-11','AA','937'),('1987-10-11','AA','955'),('1987-10-11','AA','955'),('1987-10-11','AA','966'),('1987-10-11','AA','1002'),('1987-10-11','AA','1002'),('1987-10-11','AA','1004'),('1987-10-11','AA','1004'),('1987-10-11','AA','1015'),('1987-10-11','AA','1015'),('1987-10-11','AA','1021'),('1987-10-11','AA','1021'),('1987-10-11','AA','1041'),('1987-10-11','AA','1041'),('1987-10-11','AA','1046'),('1987-10-11','AA','1046'),('1987-10-11','AA','1048'),('1987-10-11','AA','1048'),('1987-10-11','AA','1061'),('1987-10-11','AA','1061'),('1987-10-11','AA','1088'),('1987-10-11','AA','1088'),('1987-10-11','AA','2033'),('1987-10-11','AA','2033'),('1987-10-11','AA','2058'),('1987-10-11','AA','2071'),('1987-10-11','AA','2071'),('1987-10-11','AA','2086'),('1987-10-11','AA','2111'),('1987-10-11','AA','2123'),('1987-10-11','AA','2123'),('1987-10-11','AA','2147'),('1987-10-11','AA','2147'),('1987-10-11','AA','2199'),('1987-10-11','AA','2199'),('1987-10-11','AA','2199'),('1987-10-11','AA','2207'),('1987-10-11','AA','2207'),('1987-10-11','AA','2230'),('1987-10-11','AA','2245'),('1987-10-11','AA','2251'),('1987-10-11','AA','2251'),('1987-10-11','AA','2275'),('1987-10-11','AA','2278'),('1987-10-11','AA','2351'),('1987-10-11','AA','2357'),('1987-10-11','AA','2361'),('1987-10-11','AA','2490'),('1987-10-11','AA','2528'),('1987-10-11','AA','2528'),('1987-10-11','AA','2735'),('1987-10-11','AA','2735'),('1987-10-11','AA','2751'),('1987-10-11','AL','2'),('1987-10-11','AL','2'),('1987-10-11','AL','7'),('1987-10-11','AL','7'),('1987-10-11','AL','26'),('1987-10-11','AL','26'),('1987-10-11','AL','34'),('1987-10-11','AL','34'),('1987-10-11','AL','36'),('1987-10-11','AL','36'),('1987-10-11','AL','45'),('1987-10-11','AL','45'),('1987-10-11','AL','45'),('1987-10-11','AL','91'),('1987-10-11','AL','91'),('1987-10-11','AL','104'),('1987-10-11','AL','104'),('1987-10-11','AL','104'),('1987-10-11','AL','112'),('1987-10-11','AL','123'),('1987-10-11','AL','149'),('1987-10-11','AL','160'),('1987-10-11','AL','160'),('1987-10-11','AL','165'),('1987-10-11','AL','171'),('1987-10-11','AL','171'),('1987-10-11','AL','176'),('1987-10-11','AL','176'),('1987-10-11','AL','179'),('1987-10-11','AL','215'),('1987-10-11','AL','231'),('1987-10-11','AL','263'),('1987-10-11','AL','263'),('1987-10-11','AL','281'),('1987-10-11','AL','281'),('1987-10-11','AL','309'),('1987-10-11','AL','309'),('1987-10-11','AL','341'),('1987-10-11','AL','344'),('1987-10-11','AL','344'),('1987-10-11','AL','357'),('1987-10-11','AL','357'),('1987-10-11','AL','368'),('1987-10-11','AL','396'),('1987-10-11','AL','416'),('1987-10-11','AL','416'),('1987-10-11','AL','417'),('1987-10-11','AL','438'),('1987-10-11','AL','438'),('1987-10-11','AL','446'),('1987-10-11','AL','451'),('1987-10-11','AL','491'),('1987-10-11','AL','491'),('1987-10-11','AL','523'),('1987-10-11','AL','523'),('1987-10-11','AL','523'),('1987-10-11','AL','525'),('1987-10-11','AL','525'),('1987-10-11','AL','533'),('1987-10-11','AL','533'),('1987-10-11','AL','546'),('1987-10-11','AL','546'),('1987-10-11','AL','556'),('1987-10-11','AL','556'),('1987-10-11','AL','601'),('1987-10-11','AL','601'),('1987-10-11','AL','627'),('1987-10-11','AL','629'),('1987-10-11','AL','670'),('1987-10-11','AL','670'),('1987-10-11','AL','670'),('1987-10-11','AL','673'),('1987-10-11','AL','680'),('1987-10-11','AL','937'),('1987-10-11','AL','937'),('1987-10-11','AL','955'),('1987-10-21','AA','2'),('1987-10-21','AA','2'),('1987-10-21','AA','2'),('1987-10-21','AA','7'),('1987-10-21','AA','7'),('1987-10-21','AA','26'),('1987-10-21','AA','34'),('1987-10-21','AA','36'),('1987-10-21','AA','91'),('1987-10-21','AA','101'),('1987-10-21','AA','101'),('1987-10-21','AA','109'),('1987-10-21','AA','109'),('1987-10-21','AA','123'),('1987-10-21','AA','123'),('1987-10-21','AA','160'),('1987-10-21','AA','165'),('1987-10-21','AA','165'),('1987-10-21','AA','165'),('1987-10-21','AA','176'),('1987-10-21','AA','176'),('1987-10-21','AA','176'),('1987-10-21','AA','176'),('1987-10-21','AA','179'),('1987-10-21','AA','179'),('1987-10-21','AA','215'),('1987-10-21','AA','231'),('1987-10-21','AA','231'),('1987-10-21','AA','263'),('1987-10-21','AA','263'),('1987-10-21','AA','268'),('1987-10-21','AA','268'),('1987-10-21','AA','281'),('1987-10-21','AA','287'),('1987-10-21','AA','287'),('1987-10-21','AA','309'),('1987-10-21','AA','309'),('1987-10-21','AA','309'),('1987-10-21','AA','341'),('1987-10-21','AA','344'),('1987-10-21','AA','344'),('1987-10-21','AA','347'),('1987-10-21','AA','347'),('1987-10-21','AA','368'),('1987-10-21','AA','381'),('1987-10-21','AA','381'),('1987-10-21','AA','381'),('1987-10-21','AA','396'),('1987-10-21','AA','396'),('1987-10-21','AA','397'),('1987-10-21','AA','397'),('1987-10-21','AA','417'),('1987-10-21','AA','417'),('1987-10-21','AA','446'),('1987-10-21','AA','451'),('1987-10-21','AA','451'),('1987-10-21','AA','460'),('1987-10-21','AA','460'),('1987-10-21','AA','491'),('1987-10-21','AA','504'),('1987-10-21','AA','504'),('1987-10-21','AA','519'),('1987-10-21','AA','519'),('1987-10-21','AA','523'),('1987-10-21','AA','523'),('1987-10-21','AA','525'),('1987-10-21','AA','525'),('1987-10-21','AA','525'),('1987-10-21','AA','533'),('1987-10-21','AA','533'),('1987-10-21','AA','533'),('1987-10-21','AA','546'),('1987-10-21','AA','546'),('1987-10-21','AA','546'),('1987-10-21','AA','546'),('1987-10-21','AA','556'),('1987-10-21','AA','556'),('1987-10-21','AA','556'),('1987-10-21','AA','597'),('1987-10-21','AA','597'),('1987-10-21','AA','597'),('1987-10-21','AA','601'),('1987-10-21','AA','601'),('1987-10-21','AA','627'),('1987-10-21','AA','629'),('1987-10-21','AA','629'),('1987-10-21','AA','673'),('1987-10-21','AA','673'),('1987-10-21','AA','680'),('1987-10-21','AA','680'),('1987-10-21','AA','817'),('1987-10-21','AA','817'),('1987-10-21','AA','824'),('1987-10-21','AA','824'),('1987-10-21','AA','824'),('1987-10-21','AA','832'),('1987-10-21','AA','832'),('1987-10-21','AA','852'),('1987-10-21','AA','866'),('1987-10-21','AA','866'),('1987-10-21','AA','871'),('1987-10-21','AA','871'),('1987-10-21','AA','880'),('1987-10-21','AA','880'),('1987-10-21','AA','880'),('1987-10-21','AA','880'),('1987-10-21','AA','883'),('1987-10-21','AA','883'),('1987-10-21','AA','885'),('1987-10-21','AA','885'),('1987-10-21','AA','885'),('1987-10-21','AA','890'),('1987-10-21','AA','890'),('1987-10-21','AA','893'),('1987-10-21','AA','893'),('1987-10-21','AA','905'),('1987-10-21','AA','905'),('1987-10-21','AA','915'),('1987-10-21','AA','929'),('1987-10-21','AA','929'),('1987-10-21','AA','936'),('1987-10-21','AA','936'),('1987-10-21','AA','937'),('1987-10-21','AA','1002'),('1987-10-21','AA','1002'),('1987-10-21','AA','1004'),('1987-10-21','AA','1004'),('1987-10-21','AA','1015'),('1987-10-21','AA','1021'),('1987-10-21','AA','1021'),('1987-10-21','AA','1041'),('1987-10-21','AA','1041'),('1987-10-21','AA','1046'),('1987-10-21','AA','1046'),('1987-10-21','AA','1048'),('1987-10-21','AA','1048'),('1987-10-21','AA','1061'),('1987-10-21','AA','1061'),('1987-10-21','AA','1088'),('1987-10-21','AA','1088'),('1987-10-21','AA','2033'),('1987-10-21','AA','2033'),('1987-10-21','AA','2050'),('1987-10-21','AA','2071'),('1987-10-21','AA','2086'),('1987-10-21','AA','2105'),('1987-10-21','AA','2111'),('1987-10-21','AA','2123'),('1987-10-21','AA','2123'),('1987-10-21','AA','2147'),('1987-10-21','AA','2147'),('1987-10-21','AA','2199'),('1987-10-21','AA','2199'),('1987-10-21','AA','2207'),('1987-10-21','AA','2207'),('1987-10-21','AA','2217'),('1987-10-21','AA','2230'),('1987-10-21','AA','2245'),('1987-10-21','AA','2251'),('1987-10-21','AA','2251'),('1987-10-21','AA','2275'),('1987-10-21','AA','2278'),('1987-10-21','AA','2351'),('1987-10-21','AA','2357'),('1987-10-21','AA','2361'),('1987-10-21','AA','2490'),('1987-10-21','AA','2528'),('1987-10-21','AA','2528'),('1987-10-21','AA','2735'),('1987-10-21','AA','2735'),('1987-10-21','AA','2751'),('1987-10-21','AL','2'),('1987-10-21','AL','2'),('1987-10-21','AL','7'),('1987-10-21','AL','7'),('1987-10-21','AL','26'),('1987-10-21','AL','26'),('1987-10-21','AL','34'),('1987-10-21','AL','34'),('1987-10-21','AL','36'),('1987-10-21','AL','36'),('1987-10-21','AL','45'),('1987-10-21','AL','45'),('1987-10-21','AL','45'),('1987-10-21','AL','91'),('1987-10-21','AL','91'),('1987-10-21','AL','104'),('1987-10-21','AL','104'),('1987-10-21','AL','104'),('1987-10-21','AL','109'),('1987-10-21','AL','112'),('1987-10-21','AL','112'),('1987-10-21','AL','123'),('1987-10-21','AL','149'),('1987-10-21','AL','160'),('1987-10-21','AL','160'),('1987-10-21','AL','165'),('1987-10-21','AL','171'),('1987-10-21','AL','171'),('1987-10-21','AL','176'),('1987-10-21','AL','176'),('1987-10-21','AL','179'),('1987-10-21','AL','215'),('1987-10-21','AL','263'),('1987-10-21','AL','263'),('1987-10-21','AL','268'),('1987-10-21','AL','268'),('1987-10-21','AL','268'),('1987-10-21','AL','281'),('1987-10-21','AL','281'),('1987-10-21','AL','287'),('1987-10-21','AL','287'),('1987-10-21','AL','309'),('1987-10-21','AL','309'),('1987-10-21','AL','341'),('1987-10-21','AL','344'),('1987-10-21','AL','344'),('1987-10-21','AL','357'),('1987-10-21','AL','357'),('1987-10-21','AL','368'),('1987-10-21','AL','381'),('1987-10-21','AL','396'),('1987-10-21','AL','397'),('1987-10-21','AL','397'),('1987-10-21','AL','416'),('1987-10-21','AL','416'),('1987-10-21','AL','417'),('1987-10-21','AL','438'),('1987-10-21','AL','438'),('1987-10-21','AL','446'),('1987-10-21','AL','451'),('1987-10-21','AL','451'),('1987-10-21','AL','491'),('1987-10-21','AL','491'),('1987-10-21','AL','523'),('1987-10-21','AL','523'),('1987-10-21','AL','523'),('1987-10-21','AL','525'),('1987-10-21','AL','525'),('1987-10-21','AL','533'),('1987-10-21','AL','533'),('1987-10-21','AL','546'),('1987-10-21','AL','546'),('1987-10-21','AL','556'),('1987-10-21','AL','556'),('1987-10-21','AL','601'),('1987-10-21','AL','601'),('1987-10-21','AL','627'),('1987-10-21','AL','629'),('1987-10-21','AL','670'),('1987-10-21','AL','670'),('1987-10-21','AL','670'),('1987-10-21','AL','673'),('1987-10-21','AL','680'),('1987-10-22','AA','2'),('1987-10-22','AA','2'),('1987-10-22','AA','2'),('1987-10-22','AA','7'),('1987-10-22','AA','7'),('1987-10-22','AA','26'),('1987-10-22','AA','34'),('1987-10-22','AA','36'),('1987-10-22','AA','91'),('1987-10-22','AA','101'),('1987-10-22','AA','101'),('1987-10-22','AA','109'),('1987-10-22','AA','109'),('1987-10-22','AA','112'),('1987-10-22','AA','123'),('1987-10-22','AA','123'),('1987-10-22','AA','160'),('1987-10-22','AA','165'),('1987-10-22','AA','165'),('1987-10-22','AA','165'),('1987-10-22','AA','176'),('1987-10-22','AA','176'),('1987-10-22','AA','176'),('1987-10-22','AA','179'),('1987-10-22','AA','215'),('1987-10-22','AA','215'),('1987-10-22','AA','231'),('1987-10-22','AA','231'),('1987-10-22','AA','263'),('1987-10-22','AA','263'),('1987-10-22','AA','268'),('1987-10-22','AA','268'),('1987-10-22','AA','281'),('1987-10-22','AA','287'),('1987-10-22','AA','287'),('1987-10-22','AA','309'),('1987-10-22','AA','309'),('1987-10-22','AA','309'),('1987-10-22','AA','341'),('1987-10-22','AA','344'),('1987-10-22','AA','344'),('1987-10-22','AA','347'),('1987-10-22','AA','368'),('1987-10-22','AA','381'),('1987-10-22','AA','381'),('1987-10-22','AA','381'),('1987-10-22','AA','396'),('1987-10-22','AA','396'),('1987-10-22','AA','397'),('1987-10-22','AA','397'),('1987-10-22','AA','417'),('1987-10-22','AA','417'),('1987-10-22','AA','446'),('1987-10-22','AA','451'),('1987-10-22','AA','451'),('1987-10-22','AA','460'),('1987-10-22','AA','460'),('1987-10-22','AA','491'),('1987-10-22','AA','504'),('1987-10-22','AA','519'),('1987-10-22','AA','519'),('1987-10-22','AA','523'),('1987-10-22','AA','523'),('1987-10-22','AA','525'),('1987-10-22','AA','525'),('1987-10-22','AA','533'),('1987-10-22','AA','533'),('1987-10-22','AA','533'),('1987-10-22','AA','546'),('1987-10-22','AA','546'),('1987-10-22','AA','546'),('1987-10-22','AA','546'),('1987-10-22','AA','556'),('1987-10-22','AA','556'),('1987-10-22','AA','556'),('1987-10-22','AA','597'),('1987-10-22','AA','597'),('1987-10-22','AA','597'),('1987-10-22','AA','601'),('1987-10-22','AA','601'),('1987-10-22','AA','627'),('1987-10-22','AA','629'),('1987-10-22','AA','629'),('1987-10-22','AA','673'),('1987-10-22','AA','673'),('1987-10-22','AA','680'),('1987-10-22','AA','680'),('1987-10-22','AA','817'),('1987-10-22','AA','817'),('1987-10-22','AA','824'),('1987-10-22','AA','824'),('1987-10-22','AA','824'),('1987-10-22','AA','832'),('1987-10-22','AA','832'),('1987-10-22','AA','852'),('1987-10-22','AA','852'),('1987-10-22','AA','866'),('1987-10-22','AA','866'),('1987-10-22','AA','871'),('1987-10-22','AA','871'),('1987-10-22','AA','880'),('1987-10-22','AA','880'),('1987-10-22','AA','880'),('1987-10-22','AA','880'),('1987-10-22','AA','883'),('1987-10-22','AA','883'),('1987-10-22','AA','885'),('1987-10-22','AA','885'),('1987-10-22','AA','885'),('1987-10-22','AA','890'),('1987-10-22','AA','890'),('1987-10-22','AA','893'),('1987-10-22','AA','893'),('1987-10-22','AA','905'),('1987-10-22','AA','905'),('1987-10-22','AA','915'),('1987-10-22','AA','929'),('1987-10-22','AA','929'),('1987-10-22','AA','936'),('1987-10-22','AA','936'),('1987-10-22','AA','937'),('1987-10-22','AA','937'),('1987-10-22','AA','955'),('1987-10-22','AA','955'),('1987-10-22','AA','1002'),('1987-10-22','AA','1002'),('1987-10-22','AA','1004'),('1987-10-22','AA','1015'),('1987-10-22','AA','1015'),('1987-10-22','AA','1021'),('1987-10-22','AA','1021'),('1987-10-22','AA','1041'),('1987-10-22','AA','1041'),('1987-10-22','AA','1046'),('1987-10-22','AA','1046'),('1987-10-22','AA','1048'),('1987-10-22','AA','1048'),('1987-10-22','AA','1061'),('1987-10-22','AA','1061'),('1987-10-22','AA','1088'),('1987-10-22','AA','1088'),('1987-10-22','AA','2033'),('1987-10-22','AA','2058'),('1987-10-22','AA','2071'),('1987-10-22','AA','2071'),('1987-10-22','AA','2086'),('1987-10-22','AA','2105'),('1987-10-22','AA','2111'),('1987-10-22','AA','2147'),('1987-10-22','AA','2147'),('1987-10-22','AA','2199'),('1987-10-22','AA','2207'),('1987-10-22','AA','2207'),('1987-10-22','AA','2217'),('1987-10-22','AA','2230'),('1987-10-22','AA','2245'),('1987-10-22','AA','2251'),('1987-10-22','AA','2251'),('1987-10-22','AA','2275'),('1987-10-22','AA','2278'),('1987-10-22','AA','2351'),('1987-10-22','AA','2357'),('1987-10-22','AA','2361'),('1987-10-22','AA','2490'),('1987-10-22','AA','2528'),('1987-10-22','AA','2528'),('1987-10-22','AA','2735'),('1987-10-22','AA','2735'),('1987-10-22','AA','2751'),('1987-10-22','AL','2'),('1987-10-22','AL','2'),('1987-10-22','AL','7'),('1987-10-22','AL','7'),('1987-10-22','AL','26'),('1987-10-22','AL','26'),('1987-10-22','AL','34'),('1987-10-22','AL','34'),('1987-10-22','AL','36'),('1987-10-22','AL','36'),('1987-10-22','AL','45'),('1987-10-22','AL','45'),('1987-10-22','AL','45'),('1987-10-22','AL','91'),('1987-10-22','AL','91'),('1987-10-22','AL','104'),('1987-10-22','AL','104'),('1987-10-22','AL','104'),('1987-10-22','AL','109'),('1987-10-22','AL','112'),('1987-10-22','AL','112'),('1987-10-22','AL','123'),('1987-10-22','AL','149'),('1987-10-22','AL','160'),('1987-10-22','AL','160'),('1987-10-22','AL','165'),('1987-10-22','AL','171'),('1987-10-22','AL','171'),('1987-10-22','AL','176'),('1987-10-22','AL','176'),('1987-10-22','AL','179'),('1987-10-22','AL','215'),('1987-10-22','AL','231'),('1987-10-22','AL','263'),('1987-10-22','AL','263'),('1987-10-22','AL','268'),('1987-10-22','AL','268'),('1987-10-22','AL','268'),('1987-10-22','AL','281'),('1987-10-22','AL','281'),('1987-10-22','AL','287'),('1987-10-22','AL','287'),('1987-10-22','AL','309'),('1987-10-22','AL','309'),('1987-10-22','AL','341'),('1987-10-22','AL','344'),('1987-10-22','AL','344'),('1987-10-22','AL','357'),('1987-10-22','AL','357'),('1987-10-22','AL','368'),('1987-10-22','AL','381'),('1987-10-22','AL','396'),('1987-10-22','AL','397'),('1987-10-22','AL','397'),('1987-10-22','AL','416'),('1987-10-22','AL','417'),('1987-10-22','AL','438'),('1987-10-22','AL','438'),('1987-10-22','AL','446'),('1987-10-22','AL','451'),('1987-10-22','AL','451'),('1987-10-22','AL','491'),('1987-10-22','AL','491'),('1987-10-22','AL','523'),('1987-10-22','AL','523'),('1987-10-22','AL','523'),('1987-10-22','AL','525'),('1987-10-22','AL','525'),('1987-10-22','AL','533'),('1987-10-22','AL','533'),('1987-10-22','AL','546'),('1987-10-22','AL','546'),('1987-10-22','AL','556'),('1987-10-22','AL','556'),('1987-10-22','AL','601'),('1987-10-22','AL','601'),('1987-10-22','AL','627'),('1987-10-22','AL','629'),('1987-10-22','AL','670'),('1987-10-22','AL','670'),('1987-10-22','AL','670'),('1987-10-22','AL','673'),('1987-10-22','AL','680'),('1987-10-23','AA','2'),('1987-10-23','AA','2'),('1987-10-23','AA','2'),('1987-10-23','AA','7'),('1987-10-23','AA','7'),('1987-10-23','AA','26'),('1987-10-23','AA','34'),('1987-10-23','AA','36'),('1987-10-23','AA','91'),('1987-10-23','AA','101'),('1987-10-23','AA','109'),('1987-10-23','AA','109'),('1987-10-23','AA','112'),('1987-10-23','AA','123'),('1987-10-23','AA','123'),('1987-10-23','AA','160'),('1987-10-23','AA','165'),('1987-10-23','AA','165'),('1987-10-23','AA','165'),('1987-10-23','AA','176'),('1987-10-23','AA','176'),('1987-10-23','AA','176'),('1987-10-23','AA','176'),('1987-10-23','AA','179'),('1987-10-23','AA','179'),('1987-10-23','AA','215'),('1987-10-23','AA','215'),('1987-10-23','AA','231'),('1987-10-23','AA','231'),('1987-10-23','AA','263'),('1987-10-23','AA','263'),('1987-10-23','AA','268'),('1987-10-23','AA','268'),('1987-10-23','AA','281'),('1987-10-23','AA','287'),('1987-10-23','AA','287'),('1987-10-23','AA','309'),('1987-10-23','AA','309'),('1987-10-23','AA','309'),('1987-10-23','AA','341'),('1987-10-23','AA','344'),('1987-10-23','AA','344'),('1987-10-23','AA','347'),('1987-10-23','AA','368'),('1987-10-23','AA','381'),('1987-10-23','AA','381'),('1987-10-23','AA','381'),('1987-10-23','AA','396'),('1987-10-23','AA','396'),('1987-10-23','AA','397'),('1987-10-23','AA','397'),('1987-10-23','AA','417'),('1987-10-23','AA','417'),('1987-10-23','AA','446'),('1987-10-23','AA','451'),('1987-10-23','AA','451'),('1987-10-23','AA','460'),('1987-10-23','AA','491'),('1987-10-23','AA','504'),('1987-10-23','AA','504'),('1987-10-23','AA','519'),('1987-10-23','AA','519'),('1987-10-23','AA','523'),('1987-10-23','AA','523'),('1987-10-23','AA','525'),('1987-10-23','AA','533'),('1987-10-23','AA','533'),('1987-10-23','AA','533'),('1987-10-23','AA','546'),('1987-10-23','AA','546'),('1987-10-23','AA','546'),('1987-10-23','AA','546'),('1987-10-23','AA','556'),('1987-10-23','AA','556'),('1987-10-23','AA','556'),('1987-10-23','AA','597'),('1987-10-23','AA','597'),('1987-10-23','AA','601'),('1987-10-23','AA','601'),('1987-10-23','AA','627'),('1987-10-23','AA','629'),('1987-10-23','AA','629'),('1987-10-23','AA','673'),('1987-10-23','AA','680'),('1987-10-23','AA','680'),('1987-10-23','AA','817'),('1987-10-23','AA','817'),('1987-10-23','AA','824'),('1987-10-23','AA','824'),('1987-10-23','AA','824'),('1987-10-23','AA','824'),('1987-10-23','AA','832'),('1987-10-23','AA','832'),('1987-10-23','AA','852'),('1987-10-23','AA','866'),('1987-10-23','AA','866'),('1987-10-23','AA','871'),('1987-10-23','AA','871'),('1987-10-23','AA','880'),('1987-10-23','AA','880'),('1987-10-23','AA','880'),('1987-10-23','AA','880'),('1987-10-23','AA','883'),('1987-10-23','AA','883'),('1987-10-23','AA','885'),('1987-10-23','AA','885'),('1987-10-23','AA','885'),('1987-10-23','AA','890'),('1987-10-23','AA','890'),('1987-10-23','AA','893'),('1987-10-23','AA','893'),('1987-10-23','AA','905'),('1987-10-23','AA','905'),('1987-10-23','AA','929'),('1987-10-23','AA','929'),('1987-10-23','AA','936'),('1987-10-23','AA','936'),('1987-10-23','AA','937'),('1987-10-23','AA','937'),('1987-10-23','AA','955'),('1987-10-23','AA','955'),('1987-10-23','AA','966'),('1987-10-23','AA','1002'),('1987-10-23','AA','1002'),('1987-10-23','AA','1004'),('1987-10-23','AA','1004'),('1987-10-23','AA','1015'),('1987-10-23','AA','1015'),('1987-10-23','AA','1021'),('1987-10-23','AA','1021'),('1987-10-23','AA','1041'),('1987-10-23','AA','1041'),('1987-10-23','AA','1046'),('1987-10-23','AA','1048'),('1987-10-23','AA','1048'),('1987-10-23','AA','1061'),('1987-10-23','AA','1061'),('1987-10-23','AA','1088'),('1987-10-23','AA','1088'),('1987-10-23','AA','2033'),('1987-10-23','AA','2033'),('1987-10-23','AA','2050'),('1987-10-23','AA','2058'),('1987-10-23','AA','2071'),('1987-10-23','AA','2071'),('1987-10-23','AA','2086'),('1987-10-23','AA','2105'),('1987-10-23','AA','2111'),('1987-10-23','AA','2123'),('1987-10-23','AA','2123'),('1987-10-23','AA','2147'),('1987-10-23','AA','2147'),('1987-10-23','AA','2199'),('1987-10-23','AA','2199'),('1987-10-23','AA','2199'),('1987-10-23','AA','2207'),('1987-10-23','AA','2207'),('1987-10-23','AA','2245'),('1987-10-23','AA','2251'),('1987-10-23','AA','2275'),('1987-10-23','AA','2278'),('1987-10-23','AA','2351'),('1987-10-23','AA','2357'),('1987-10-23','AA','2361'),('1987-10-23','AA','2490'),('1987-10-23','AA','2528'),('1987-10-23','AA','2528'),('1987-10-23','AA','2735'),('1987-10-23','AA','2735'),('1987-10-23','AA','2751'),('1987-10-23','AL','2'),('1987-10-23','AL','2'),('1987-10-23','AL','7'),('1987-10-23','AL','7'),('1987-10-23','AL','26'),('1987-10-23','AL','26'),('1987-10-23','AL','34'),('1987-10-23','AL','34'),('1987-10-23','AL','36'),('1987-10-23','AL','36'),('1987-10-23','AL','45'),('1987-10-23','AL','45'),('1987-10-23','AL','45'),('1987-10-23','AL','91'),('1987-10-23','AL','91'),('1987-10-23','AL','104'),('1987-10-23','AL','104'),('1987-10-23','AL','104'),('1987-10-23','AL','109'),('1987-10-23','AL','112'),('1987-10-23','AL','112'),('1987-10-23','AL','123'),('1987-10-23','AL','149'),('1987-10-23','AL','160'),('1987-10-23','AL','160'),('1987-10-23','AL','165'),('1987-10-23','AL','171'),('1987-10-23','AL','176'),('1987-10-23','AL','176'),('1987-10-23','AL','179'),('1987-10-23','AL','215'),('1987-10-23','AL','231'),('1987-10-23','AL','263'),('1987-10-23','AL','263'),('1987-10-23','AL','268'),('1987-10-23','AL','268'),('1987-10-23','AL','268'),('1987-10-23','AL','281'),('1987-10-23','AL','281'),('1987-10-23','AL','287'),('1987-10-23','AL','287'),('1987-10-23','AL','309'),('1987-10-23','AL','309'),('1987-10-23','AL','341'),('1987-10-23','AL','344'),('1987-10-23','AL','344'),('1987-10-23','AL','357'),('1987-10-23','AL','357'),('1987-10-23','AL','368'),('1987-10-23','AL','381'),('1987-10-23','AL','396'),('1987-10-23','AL','397'),('1987-10-23','AL','397'),('1987-10-23','AL','416'),('1987-10-23','AL','416'),('1987-10-23','AL','417'),('1987-10-23','AL','438'),('1987-10-23','AL','438'),('1987-10-23','AL','446'),('1987-10-23','AL','451'),('1987-10-23','AL','451'),('1987-10-23','AL','491'),('1987-10-23','AL','491'),('1987-10-23','AL','523'),('1987-10-23','AL','523'),('1987-10-23','AL','523'),('1987-10-23','AL','525'),('1987-10-23','AL','525'),('1987-10-23','AL','533'),('1987-10-23','AL','533'),('1987-10-23','AL','546'),('1987-10-23','AL','546'),('1987-10-23','AL','556'),('1987-10-23','AL','556'),('1987-10-23','AL','601'),('1987-10-23','AL','601'),('1987-10-23','AL','627'),('1987-10-23','AL','629'),('1987-10-23','AL','670'),('1987-10-23','AL','670'),('1987-10-23','AL','670'),('1987-10-23','AL','673'),('1987-10-23','AL','680'),('1987-10-24','AA','2'),('1987-10-24','AA','2'),('1987-10-24','AA','7'),('1987-10-24','AA','7'),('1987-10-24','AA','26'),('1987-10-24','AA','34'),('1987-10-24','AA','36'),('1987-10-24','AA','91'),('1987-10-24','AA','101'),('1987-10-24','AA','101'),('1987-10-24','AA','109'),('1987-10-24','AA','109'),('1987-10-24','AA','112'),('1987-10-24','AA','123'),('1987-10-24','AA','123'),('1987-10-24','AA','160'),('1987-10-24','AA','165'),('1987-10-24','AA','165'),('1987-10-24','AA','165'),('1987-10-24','AA','176'),('1987-10-24','AA','176'),('1987-10-24','AA','176'),('1987-10-24','AA','179'),('1987-10-24','AA','179'),('1987-10-24','AA','215'),('1987-10-24','AA','215'),('1987-10-24','AA','231'),('1987-10-24','AA','263'),('1987-10-24','AA','263'),('1987-10-24','AA','268'),('1987-10-24','AA','268'),('1987-10-24','AA','281'),('1987-10-24','AA','287'),('1987-10-24','AA','287'),('1987-10-24','AA','309'),('1987-10-24','AA','309'),('1987-10-24','AA','309'),('1987-10-24','AA','344'),('1987-10-24','AA','344'),('1987-10-24','AA','347'),('1987-10-24','AA','347'),('1987-10-24','AA','368'),('1987-10-24','AA','381'),('1987-10-24','AA','381'),('1987-10-24','AA','381'),('1987-10-24','AA','396'),('1987-10-24','AA','396'),('1987-10-24','AA','397'),('1987-10-24','AA','397'),('1987-10-24','AA','417'),('1987-10-24','AA','417'),('1987-10-24','AA','446'),('1987-10-24','AA','451'),('1987-10-24','AA','451'),('1987-10-24','AA','460'),('1987-10-24','AA','460'),('1987-10-24','AA','491'),('1987-10-24','AA','491'),('1987-10-24','AA','504'),('1987-10-24','AA','504'),('1987-10-24','AA','519'),('1987-10-24','AA','519'),('1987-10-24','AA','523'),('1987-10-24','AA','523'),('1987-10-24','AA','525'),('1987-10-24','AA','525'),('1987-10-24','AA','525'),('1987-10-24','AA','533'),('1987-10-24','AA','533'),('1987-10-24','AA','546'),('1987-10-24','AA','546'),('1987-10-24','AA','546'),('1987-10-24','AA','556'),('1987-10-24','AA','556'),('1987-10-24','AA','556'),('1987-10-24','AA','597'),('1987-10-24','AA','597'),('1987-10-24','AA','597'),('1987-10-24','AA','601'),('1987-10-24','AA','601'),('1987-10-24','AA','627'),('1987-10-24','AA','629'),('1987-10-24','AA','673'),('1987-10-24','AA','673'),('1987-10-24','AA','680'),('1987-10-24','AA','680'),('1987-10-24','AA','817'),('1987-10-24','AA','817'),('1987-10-24','AA','824'),('1987-10-24','AA','824'),('1987-10-24','AA','824'),('1987-10-24','AA','832'),('1987-10-24','AA','832'),('1987-10-24','AA','852'),('1987-10-24','AA','852'),('1987-10-24','AA','866'),('1987-10-24','AA','866'),('1987-10-24','AA','871'),('1987-10-24','AA','871'),('1987-10-24','AA','880'),('1987-10-24','AA','880'),('1987-10-24','AA','880'),('1987-10-24','AA','880'),('1987-10-24','AA','883'),('1987-10-24','AA','883'),('1987-10-24','AA','885'),('1987-10-24','AA','885'),('1987-10-24','AA','885'),('1987-10-24','AA','890'),('1987-10-24','AA','890'),('1987-10-24','AA','893'),('1987-10-24','AA','893'),('1987-10-24','AA','905'),('1987-10-24','AA','905'),('1987-10-24','AA','915'),('1987-10-24','AA','929'),('1987-10-24','AA','929'),('1987-10-24','AA','936'),('1987-10-24','AA','936'),('1987-10-24','AA','937'),('1987-10-24','AA','937'),('1987-10-24','AA','955'),('1987-10-24','AA','955'),('1987-10-24','AA','966'),('1987-10-24','AA','1002'),('1987-10-24','AA','1002'),('1987-10-24','AA','1004'),('1987-10-24','AA','1004'),('1987-10-24','AA','1015'),('1987-10-24','AA','1021'),('1987-10-24','AA','1021'),('1987-10-24','AA','1041'),('1987-10-24','AA','1041'),('1987-10-24','AA','1046'),('1987-10-24','AA','1046'),('1987-10-24','AA','1048'),('1987-10-24','AA','1048'),('1987-10-24','AA','1061'),('1987-10-24','AA','1061'),('1987-10-24','AA','1088'),('1987-10-24','AA','1088'),('1987-10-24','AA','2033'),('1987-10-24','AA','2033'),('1987-10-24','AA','2050'),('1987-10-24','AA','2058'),('1987-10-24','AA','2071'),('1987-10-24','AA','2071'),('1987-10-24','AA','2086'),('1987-10-24','AA','2105'),('1987-10-24','AA','2111'),('1987-10-24','AA','2123'),('1987-10-24','AA','2147'),('1987-10-24','AA','2199'),('1987-10-24','AA','2199'),('1987-10-24','AA','2207'),('1987-10-24','AA','2217'),('1987-10-24','AA','2230'),('1987-10-24','AA','2245'),('1987-10-24','AA','2251'),('1987-10-24','AA','2251'),('1987-10-24','AA','2275'),('1987-10-24','AA','2278'),('1987-10-24','AA','2351'),('1987-10-24','AA','2357'),('1987-10-24','AA','2361'),('1987-10-24','AA','2490'),('1987-10-24','AA','2528'),('1987-10-24','AA','2528'),('1987-10-24','AA','2735'),('1987-10-24','AA','2735'),('1987-10-24','AL','2'),('1987-10-24','AL','2'),('1987-10-24','AL','7'),('1987-10-24','AL','7'),('1987-10-24','AL','26'),('1987-10-24','AL','26'),('1987-10-24','AL','34'),('1987-10-24','AL','34'),('1987-10-24','AL','36'),('1987-10-24','AL','36'),('1987-10-24','AL','45'),('1987-10-24','AL','91'),('1987-10-24','AL','91'),('1987-10-24','AL','104'),('1987-10-24','AL','104'),('1987-10-24','AL','109'),('1987-10-24','AL','112'),('1987-10-24','AL','112'),('1987-10-24','AL','149'),('1987-10-24','AL','160'),('1987-10-24','AL','160'),('1987-10-24','AL','165'),('1987-10-24','AL','171'),('1987-10-24','AL','171'),('1987-10-24','AL','176'),('1987-10-24','AL','176'),('1987-10-24','AL','179'),('1987-10-24','AL','215'),('1987-10-24','AL','231'),('1987-10-24','AL','263'),('1987-10-24','AL','268'),('1987-10-24','AL','268'),('1987-10-24','AL','268'),('1987-10-24','AL','287'),('1987-10-24','AL','287'),('1987-10-24','AL','309'),('1987-10-24','AL','309'),('1987-10-24','AL','344'),('1987-10-24','AL','344'),('1987-10-24','AL','357'),('1987-10-24','AL','357'),('1987-10-24','AL','381'),('1987-10-24','AL','396'),('1987-10-24','AL','397'),('1987-10-24','AL','397'),('1987-10-24','AL','397'),('1987-10-24','AL','416'),('1987-10-24','AL','417'),('1987-10-24','AL','438'),('1987-10-24','AL','438'),('1987-10-24','AL','451'),('1987-10-24','AL','451'),('1987-10-24','AL','491'),('1987-10-24','AL','491'),('1987-10-24','AL','523'),('1987-10-24','AL','523'),('1987-10-24','AL','525'),('1987-10-24','AL','525'),('1987-10-24','AL','533'),('1987-10-24','AL','546'),('1987-10-24','AL','546'),('1987-10-24','AL','556'),('1987-10-24','AL','556'),('1987-10-24','AL','601'),('1987-10-24','AL','601'),('1987-10-24','AL','627'),('1987-10-24','AL','670'),('1987-10-24','AL','673'),('1987-10-24','AL','680'),('1987-10-24','AL','905'),('1987-10-24','AL','936'),('1987-10-24','AL','966'),('1987-10-24','AL','982'),('1987-10-25','AA','2'),('1987-10-25','AA','2'),('1987-10-25','AA','2'),('1987-10-25','AA','7'),('1987-10-25','AA','7'),('1987-10-25','AA','26'),('1987-10-25','AA','34'),('1987-10-25','AA','36'),('1987-10-25','AA','91'),('1987-10-25','AA','101'),('1987-10-25','AA','109'),('1987-10-25','AA','109'),('1987-10-25','AA','123'),('1987-10-25','AA','123'),('1987-10-25','AA','160'),('1987-10-25','AA','165'),('1987-10-25','AA','165'),('1987-10-25','AA','165'),('1987-10-25','AA','176'),('1987-10-25','AA','176'),('1987-10-25','AA','176'),('1987-10-25','AA','176'),('1987-10-25','AA','179'),('1987-10-25','AA','179'),('1987-10-25','AA','215'),('1987-10-25','AA','215'),('1987-10-25','AA','231'),('1987-10-25','AA','231'),('1987-10-25','AA','263'),('1987-10-25','AA','263'),('1987-10-25','AA','268'),('1987-10-25','AA','268'),('1987-10-25','AA','281'),('1987-10-25','AA','287'),('1987-10-25','AA','287'),('1987-10-25','AA','309'),('1987-10-25','AA','309'),('1987-10-25','AA','309'),('1987-10-25','AA','341'),('1987-10-25','AA','344'),('1987-10-25','AA','344'),('1987-10-25','AA','347'),('1987-10-25','AA','347'),('1987-10-25','AA','368'),('1987-10-25','AA','381'),('1987-10-25','AA','381'),('1987-10-25','AA','396'),('1987-10-25','AA','397'),('1987-10-25','AA','397'),('1987-10-25','AA','417'),('1987-10-25','AA','417'),('1987-10-25','AA','446'),('1987-10-25','AA','451'),('1987-10-25','AA','460'),('1987-10-25','AA','460'),('1987-10-25','AA','491'),('1987-10-25','AA','491'),('1987-10-25','AA','504'),('1987-10-25','AA','504'),('1987-10-25','AA','519'),('1987-10-25','AA','519'),('1987-10-25','AA','523'),('1987-10-25','AA','523'),('1987-10-25','AA','525'),('1987-10-25','AA','525'),('1987-10-25','AA','525'),('1987-10-25','AA','533'),('1987-10-25','AA','533'),('1987-10-25','AA','533'),('1987-10-25','AA','546'),('1987-10-25','AA','546'),('1987-10-25','AA','546'),('1987-10-25','AA','546'),('1987-10-25','AA','556'),('1987-10-25','AA','556'),('1987-10-25','AA','556'),('1987-10-25','AA','597'),('1987-10-25','AA','597'),('1987-10-25','AA','597'),('1987-10-25','AA','601'),('1987-10-25','AA','627'),('1987-10-25','AA','629'),('1987-10-25','AA','629'),('1987-10-25','AA','670'),('1987-10-25','AA','673'),('1987-10-25','AA','673'),('1987-10-25','AA','680'),('1987-10-25','AA','680'),('1987-10-25','AA','817'),('1987-10-25','AA','817'),('1987-10-25','AA','824'),('1987-10-25','AA','824'),('1987-10-25','AA','824'),('1987-10-25','AA','824'),('1987-10-25','AA','832'),('1987-10-25','AA','832'),('1987-10-25','AA','852'),('1987-10-25','AA','852'),('1987-10-25','AA','866'),('1987-10-25','AA','866'),('1987-10-25','AA','871'),('1987-10-25','AA','871'),('1987-10-25','AA','880'),('1987-10-25','AA','880'),('1987-10-25','AA','880'),('1987-10-25','AA','880'),('1987-10-25','AA','883'),('1987-10-25','AA','883'),('1987-10-25','AA','885'),('1987-10-25','AA','885'),('1987-10-25','AA','885'),('1987-10-25','AA','890'),('1987-10-25','AA','893'),('1987-10-25','AA','893'),('1987-10-25','AA','905'),('1987-10-25','AA','905'),('1987-10-25','AA','915'),('1987-10-25','AA','929'),('1987-10-25','AA','929'),('1987-10-25','AA','936'),('1987-10-25','AA','936'),('1987-10-25','AA','937'),('1987-10-25','AA','937'),('1987-10-25','AA','955'),('1987-10-25','AA','955'),('1987-10-25','AA','1002'),('1987-10-25','AA','1002'),('1987-10-25','AA','1004'),('1987-10-25','AA','1004'),('1987-10-25','AA','1015'),('1987-10-25','AA','1015'),('1987-10-25','AA','1021'),('1987-10-25','AA','1021'),('1987-10-25','AA','1041'),('1987-10-25','AA','1041'),('1987-10-25','AA','1046'),('1987-10-25','AA','1046'),('1987-10-25','AA','1048'),('1987-10-25','AA','1048'),('1987-10-25','AA','1061'),('1987-10-25','AA','1061'),('1987-10-25','AA','1088'),('1987-10-25','AA','1088'),('1987-10-25','AA','2033'),('1987-10-25','AA','2033'),('1987-10-25','AA','2050'),('1987-10-25','AA','2058'),('1987-10-25','AA','2071'),('1987-10-25','AA','2071'),('1987-10-25','AA','2086'),('1987-10-25','AA','2111'),('1987-10-25','AA','2123'),('1987-10-25','AA','2123'),('1987-10-25','AA','2147'),('1987-10-25','AA','2199'),('1987-10-25','AA','2199'),('1987-10-25','AA','2207'),('1987-10-25','AA','2207'),('1987-10-25','AA','2230'),('1987-10-25','AA','2245'),('1987-10-25','AA','2251'),('1987-10-25','AA','2251'),('1987-10-25','AA','2275'),('1987-10-25','AA','2278'),('1987-10-25','AA','2357'),('1987-10-25','AA','2361'),('1987-10-25','AA','2490'),('1987-10-25','AA','2528'),('1987-10-25','AA','2528'),('1987-10-25','AA','2735'),('1987-10-25','AA','2735'),('1987-10-25','AA','2751'),('1987-10-25','AL','2'),('1987-10-25','AL','2'),('1987-10-25','AL','7'),('1987-10-25','AL','7'),('1987-10-25','AL','26'),('1987-10-25','AL','26'),('1987-10-25','AL','34'),('1987-10-25','AL','34'),('1987-10-25','AL','36'),('1987-10-25','AL','36'),('1987-10-25','AL','45'),('1987-10-25','AL','45'),('1987-10-25','AL','45'),('1987-10-25','AL','91'),('1987-10-25','AL','91'),('1987-10-25','AL','104'),('1987-10-25','AL','104'),('1987-10-25','AL','104'),('1987-10-25','AL','112'),('1987-10-25','AL','123'),('1987-10-25','AL','149'),('1987-10-25','AL','160'),('1987-10-25','AL','160'),('1987-10-25','AL','165'),('1987-10-25','AL','171'),('1987-10-25','AL','171'),('1987-10-25','AL','176'),('1987-10-25','AL','176'),('1987-10-25','AL','179'),('1987-10-25','AL','215'),('1987-10-25','AL','231'),('1987-10-25','AL','263'),('1987-10-25','AL','263'),('1987-10-25','AL','281'),('1987-10-25','AL','281'),('1987-10-25','AL','309'),('1987-10-25','AL','309'),('1987-10-25','AL','341'),('1987-10-25','AL','344'),('1987-10-25','AL','344'),('1987-10-25','AL','357'),('1987-10-25','AL','357'),('1987-10-25','AL','368'),('1987-10-25','AL','396'),('1987-10-25','AL','416'),('1987-10-25','AL','416'),('1987-10-25','AL','417'),('1987-10-25','AL','438'),('1987-10-25','AL','438'),('1987-10-25','AL','446'),('1987-10-25','AL','451'),('1987-10-25','AL','491'),('1987-10-25','AL','523'),('1987-10-25','AL','523'),('1987-10-25','AL','523'),('1987-10-25','AL','525'),('1987-10-25','AL','525'),('1987-10-25','AL','533'),('1987-10-25','AL','533'),('1987-10-25','AL','546'),('1987-10-25','AL','546'),('1987-10-25','AL','556'),('1987-10-25','AL','556'),('1987-10-25','AL','601'),('1987-10-25','AL','601'),('1987-10-25','AL','627'),('1987-10-25','AL','629'),('1987-10-25','AL','670'),('1987-10-25','AL','670'),('1987-10-25','AL','670'),('1987-10-25','AL','673'),('1987-10-25','AL','680'),('1987-10-25','AL','937'),('1987-10-25','AL','937'),('1987-10-25','AL','955'),('1987-10-26','AA','2'),('1987-10-26','AA','2'),('1987-10-26','AA','2'),('1987-10-26','AA','7'),('1987-10-26','AA','7'),('1987-10-26','AA','26'),('1987-10-26','AA','34'),('1987-10-26','AA','36'),('1987-10-26','AA','91'),('1987-10-26','AA','101'),('1987-10-26','AA','101'),('1987-10-26','AA','109'),('1987-10-26','AA','109'),('1987-10-26','AA','112'),('1987-10-26','AA','123'),('1987-10-26','AA','123'),('1987-10-26','AA','160'),('1987-10-26','AA','165'),('1987-10-26','AA','165'),('1987-10-26','AA','165'),('1987-10-26','AA','176'),('1987-10-26','AA','176'),('1987-10-26','AA','176'),('1987-10-26','AA','176'),('1987-10-26','AA','179'),('1987-10-26','AA','179'),('1987-10-26','AA','215'),('1987-10-26','AA','215'),('1987-10-26','AA','231'),('1987-10-26','AA','231'),('1987-10-26','AA','263'),('1987-10-26','AA','263'),('1987-10-26','AA','268'),('1987-10-26','AA','268'),('1987-10-26','AA','281'),('1987-10-26','AA','287'),('1987-10-26','AA','287'),('1987-10-26','AA','309'),('1987-10-26','AA','309'),('1987-10-26','AA','309'),('1987-10-26','AA','341'),('1987-10-26','AA','344'),('1987-10-26','AA','344'),('1987-10-26','AA','347'),('1987-10-26','AA','347'),('1987-10-26','AA','368'),('1987-10-26','AA','381'),('1987-10-26','AA','381'),('1987-10-26','AA','381'),('1987-10-26','AA','396'),('1987-10-26','AA','396'),('1987-10-26','AA','397'),('1987-10-26','AA','397'),('1987-10-26','AA','417'),('1987-10-26','AA','417'),('1987-10-26','AA','446'),('1987-10-26','AA','451'),('1987-10-26','AA','451'),('1987-10-26','AA','491'),('1987-10-26','AA','504'),('1987-10-26','AA','504'),('1987-10-26','AA','519'),('1987-10-26','AA','523'),('1987-10-26','AA','523'),('1987-10-26','AA','525'),('1987-10-26','AA','525'),('1987-10-26','AA','525'),('1987-10-26','AA','533'),('1987-10-26','AA','533'),('1987-10-26','AA','533'),('1987-10-26','AA','546'),('1987-10-26','AA','546'),('1987-10-26','AA','546'),('1987-10-26','AA','546'),('1987-10-26','AA','556'),('1987-10-26','AA','556'),('1987-10-26','AA','556'),('1987-10-26','AA','597'),('1987-10-26','AA','597'),('1987-10-26','AA','597'),('1987-10-26','AA','601'),('1987-10-26','AA','601'),('1987-10-26','AA','627'),('1987-10-26','AA','629'),('1987-10-26','AA','629'),('1987-10-26','AA','670'),('1987-10-26','AA','673'),('1987-10-26','AA','673'),('1987-10-26','AA','680'),('1987-10-26','AA','680'),('1987-10-26','AA','817'),('1987-10-26','AA','817'),('1987-10-26','AA','824'),('1987-10-26','AA','824'),('1987-10-26','AA','832'),('1987-10-26','AA','832'),('1987-10-26','AA','852'),('1987-10-26','AA','852'),('1987-10-26','AA','866'),('1987-10-26','AA','866'),('1987-10-26','AA','871'),('1987-10-26','AA','871'),('1987-10-26','AA','880'),('1987-10-26','AA','880'),('1987-10-26','AA','880'),('1987-10-26','AA','880'),('1987-10-26','AA','883'),('1987-10-26','AA','883'),('1987-10-26','AA','885'),('1987-10-26','AA','885'),('1987-10-26','AA','885'),('1987-10-26','AA','890'),('1987-10-26','AA','890'),('1987-10-26','AA','893'),('1987-10-26','AA','893'),('1987-10-26','AA','905'),('1987-10-26','AA','905'),('1987-10-26','AA','915'),('1987-10-26','AA','929'),('1987-10-26','AA','929'),('1987-10-26','AA','936'),('1987-10-26','AA','936'),('1987-10-26','AA','937'),('1987-10-26','AA','937'),('1987-10-26','AA','955'),('1987-10-26','AA','955'),('1987-10-26','AA','966'),('1987-10-26','AA','1002'),('1987-10-26','AA','1002'),('1987-10-26','AA','1004'),('1987-10-26','AA','1004'),('1987-10-26','AA','1015'),('1987-10-26','AA','1015'),('1987-10-26','AA','1021'),('1987-10-26','AA','1021'),('1987-10-26','AA','1046'),('1987-10-26','AA','1046'),('1987-10-26','AA','1048'),('1987-10-26','AA','1048'),('1987-10-26','AA','1061'),('1987-10-26','AA','1061'),('1987-10-26','AA','1088'),('1987-10-26','AA','1088'),('1987-10-26','AA','2033'),('1987-10-26','AA','2033'),('1987-10-26','AA','2050'),('1987-10-26','AA','2058'),('1987-10-26','AA','2071'),('1987-10-26','AA','2071'),('1987-10-26','AA','2086'),('1987-10-26','AA','2105'),('1987-10-26','AA','2111'),('1987-10-26','AA','2123'),('1987-10-26','AA','2123'),('1987-10-26','AA','2147'),('1987-10-26','AA','2147'),('1987-10-26','AA','2199'),('1987-10-26','AA','2199'),('1987-10-26','AA','2207'),('1987-10-26','AA','2207'),('1987-10-26','AA','2230'),('1987-10-26','AA','2245'),('1987-10-26','AA','2251'),('1987-10-26','AA','2251'),('1987-10-26','AA','2275'),('1987-10-26','AA','2278'),('1987-10-26','AA','2351'),('1987-10-26','AA','2357'),('1987-10-26','AA','2361'),('1987-10-26','AA','2490'),('1987-10-26','AA','2528'),('1987-10-26','AA','2528'),('1987-10-26','AA','2735'),('1987-10-26','AA','2735'),('1987-10-26','AA','2751'),('1987-10-26','AL','2'),('1987-10-26','AL','2'),('1987-10-26','AL','7'),('1987-10-26','AL','7'),('1987-10-26','AL','26'),('1987-10-26','AL','26'),('1987-10-26','AL','34'),('1987-10-26','AL','34'),('1987-10-26','AL','36'),('1987-10-26','AL','36'),('1987-10-26','AL','45'),('1987-10-26','AL','45'),('1987-10-26','AL','45'),('1987-10-26','AL','91'),('1987-10-26','AL','91'),('1987-10-26','AL','104'),('1987-10-26','AL','104'),('1987-10-26','AL','104'),('1987-10-26','AL','109'),('1987-10-26','AL','112'),('1987-10-26','AL','112'),('1987-10-26','AL','123'),('1987-10-26','AL','149'),('1987-10-26','AL','160'),('1987-10-26','AL','160'),('1987-10-26','AL','165'),('1987-10-26','AL','171'),('1987-10-26','AL','171'),('1987-10-26','AL','176'),('1987-10-26','AL','176'),('1987-10-26','AL','179'),('1987-10-26','AL','215'),('1987-10-26','AL','231'),('1987-10-26','AL','263'),('1987-10-26','AL','263'),('1987-10-26','AL','268'),('1987-10-26','AL','268'),('1987-10-26','AL','268'),('1987-10-26','AL','281'),('1987-10-26','AL','281'),('1987-10-26','AL','287'),('1987-10-26','AL','287'),('1987-10-26','AL','309'),('1987-10-26','AL','309'),('1987-10-26','AL','341'),('1987-10-26','AL','344'),('1987-10-26','AL','357'),('1987-10-26','AL','357'),('1987-10-26','AL','368'),('1987-10-26','AL','381'),('1987-10-26','AL','396'),('1987-10-26','AL','397'),('1987-10-26','AL','397'),('1987-10-26','AL','416'),('1987-10-26','AL','416'),('1987-10-26','AL','417'),('1987-10-26','AL','438'),('1987-10-26','AL','438'),('1987-10-26','AL','446'),('1987-10-26','AL','451'),('1987-10-26','AL','451'),('1987-10-26','AL','491'),('1987-10-26','AL','491'),('1987-10-26','AL','523'),('1987-10-26','AL','523'),('1987-10-26','AL','523'),('1987-10-26','AL','525'),('1987-10-26','AL','533'),('1987-10-26','AL','533'),('1987-10-26','AL','546'),('1987-10-26','AL','546'),('1987-10-26','AL','556'),('1987-10-26','AL','556'),('1987-10-26','AL','601'),('1987-10-26','AL','601'),('1987-10-26','AL','627'),('1987-10-26','AL','629'),('1987-10-26','AL','670'),('1987-10-26','AL','670'),('1987-10-26','AL','670'),('1987-10-26','AL','673'),('1987-10-26','AL','680'),('1987-10-27','AA','2'),('1987-10-27','AA','2'),('1987-10-27','AA','2'),('1987-10-27','AA','7'),('1987-10-27','AA','26'),('1987-10-27','AA','34'),('1987-10-27','AA','36'),('1987-10-27','AA','91'),('1987-10-27','AA','101'),('1987-10-27','AA','101'),('1987-10-27','AA','109'),('1987-10-27','AA','109'),('1987-10-27','AA','112'),('1987-10-27','AA','123'),('1987-10-27','AA','123'),('1987-10-27','AA','160'),('1987-10-27','AA','165'),('1987-10-27','AA','165'),('1987-10-27','AA','165'),('1987-10-27','AA','176'),('1987-10-27','AA','176'),('1987-10-27','AA','176'),('1987-10-27','AA','176'),('1987-10-27','AA','179'),('1987-10-27','AA','179'),('1987-10-27','AA','215'),('1987-10-27','AA','215'),('1987-10-27','AA','231'),('1987-10-27','AA','263'),('1987-10-27','AA','263'),('1987-10-27','AA','268'),('1987-10-27','AA','268'),('1987-10-27','AA','281'),('1987-10-27','AA','287'),('1987-10-27','AA','287'),('1987-10-27','AA','309'),('1987-10-27','AA','309'),('1987-10-27','AA','309'),('1987-10-27','AA','341'),('1987-10-27','AA','344'),('1987-10-27','AA','344'),('1987-10-27','AA','347'),('1987-10-27','AA','347'),('1987-10-27','AA','368'),('1987-10-27','AA','381'),('1987-10-27','AA','381'),('1987-10-27','AA','381'),('1987-10-27','AA','396'),('1987-10-27','AA','396'),('1987-10-27','AA','397'),('1987-10-27','AA','397'),('1987-10-27','AA','417'),('1987-10-27','AA','417'),('1987-10-27','AA','446'),('1987-10-27','AA','451'),('1987-10-27','AA','451'),('1987-10-27','AA','460'),('1987-10-27','AA','460'),('1987-10-27','AA','491'),('1987-10-27','AA','504'),('1987-10-27','AA','504'),('1987-10-27','AA','519'),('1987-10-27','AA','519'),('1987-10-27','AA','523'),('1987-10-27','AA','523'),('1987-10-27','AA','525'),('1987-10-27','AA','525'),('1987-10-27','AA','525'),('1987-10-27','AA','533'),('1987-10-27','AA','533'),('1987-10-27','AA','533'),('1987-10-27','AA','546'),('1987-10-27','AA','546'),('1987-10-27','AA','546'),('1987-10-27','AA','546'),('1987-10-27','AA','556'),('1987-10-27','AA','556'),('1987-10-27','AA','556'),('1987-10-27','AA','597'),('1987-10-27','AA','597'),('1987-10-27','AA','597'),('1987-10-27','AA','601'),('1987-10-27','AA','601'),('1987-10-27','AA','627'),('1987-10-27','AA','629'),('1987-10-27','AA','629'),('1987-10-27','AA','670'),('1987-10-27','AA','673'),('1987-10-27','AA','673'),('1987-10-27','AA','680'),('1987-10-27','AA','680'),('1987-10-27','AA','817'),('1987-10-27','AA','817'),('1987-10-27','AA','824'),('1987-10-27','AA','824'),('1987-10-27','AA','824'),('1987-10-27','AA','824'),('1987-10-27','AA','832'),('1987-10-27','AA','832'),('1987-10-27','AA','852'),('1987-10-27','AA','852'),('1987-10-27','AA','866'),('1987-10-27','AA','866'),('1987-10-27','AA','871'),('1987-10-27','AA','871'),('1987-10-27','AA','880'),('1987-10-27','AA','880'),('1987-10-27','AA','880'),('1987-10-27','AA','880'),('1987-10-27','AA','883'),('1987-10-27','AA','883'),('1987-10-27','AA','885'),('1987-10-27','AA','885'),('1987-10-27','AA','885'),('1987-10-27','AA','890'),('1987-10-27','AA','890'),('1987-10-27','AA','893'),('1987-10-27','AA','893'),('1987-10-27','AA','905'),('1987-10-27','AA','905'),('1987-10-27','AA','915'),('1987-10-27','AA','929'),('1987-10-27','AA','929'),('1987-10-27','AA','936'),('1987-10-27','AA','936'),('1987-10-27','AA','937'),('1987-10-27','AA','937'),('1987-10-27','AA','955'),('1987-10-27','AA','955'),('1987-10-27','AA','966'),('1987-10-27','AA','1002'),('1987-10-27','AA','1002'),('1987-10-27','AA','1004'),('1987-10-27','AA','1004'),('1987-10-27','AA','1015'),('1987-10-27','AA','1015'),('1987-10-27','AA','1021'),('1987-10-27','AA','1021'),('1987-10-27','AA','1041'),('1987-10-27','AA','1041'),('1987-10-27','AA','1046'),('1987-10-27','AA','1046'),('1987-10-27','AA','1048'),('1987-10-27','AA','1061'),('1987-10-27','AA','1061'),('1987-10-27','AA','1088'),('1987-10-27','AA','1088'),('1987-10-27','AA','2033'),('1987-10-27','AA','2033'),('1987-10-27','AA','2050'),('1987-10-27','AA','2058'),('1987-10-27','AA','2071'),('1987-10-27','AA','2071'),('1987-10-27','AA','2086'),('1987-10-27','AA','2105'),('1987-10-27','AA','2111'),('1987-10-27','AA','2123'),('1987-10-27','AA','2123'),('1987-10-27','AA','2147'),('1987-10-27','AA','2147'),('1987-10-27','AA','2199'),('1987-10-27','AA','2199'),('1987-10-27','AA','2207'),('1987-10-27','AA','2207'),('1987-10-27','AA','2217'),('1987-10-27','AA','2230'),('1987-10-27','AA','2245'),('1987-10-27','AA','2251'),('1987-10-27','AA','2251'),('1987-10-27','AA','2275'),('1987-10-27','AA','2278'),('1987-10-27','AA','2357'),('1987-10-27','AA','2490'),('1987-10-27','AA','2528'),('1987-10-27','AA','2528'),('1987-10-27','AA','2735'),('1987-10-27','AA','2735'),('1987-10-27','AL','2'),('1987-10-27','AL','2'),('1987-10-27','AL','7'),('1987-10-27','AL','7'),('1987-10-27','AL','26'),('1987-10-27','AL','26'),('1987-10-27','AL','34'),('1987-10-27','AL','34'),('1987-10-27','AL','36'),('1987-10-27','AL','36'),('1987-10-27','AL','45'),('1987-10-27','AL','45'),('1987-10-27','AL','45'),('1987-10-27','AL','91'),('1987-10-27','AL','91'),('1987-10-27','AL','104'),('1987-10-27','AL','104'),('1987-10-27','AL','104'),('1987-10-27','AL','109'),('1987-10-27','AL','112'),('1987-10-27','AL','112'),('1987-10-27','AL','123'),('1987-10-27','AL','149'),('1987-10-27','AL','160'),('1987-10-27','AL','160'),('1987-10-27','AL','165'),('1987-10-27','AL','171'),('1987-10-27','AL','171'),('1987-10-27','AL','176'),('1987-10-27','AL','176'),('1987-10-27','AL','179'),('1987-10-27','AL','215'),('1987-10-27','AL','231'),('1987-10-27','AL','263'),('1987-10-27','AL','263'),('1987-10-27','AL','268'),('1987-10-27','AL','268'),('1987-10-27','AL','268'),('1987-10-27','AL','281'),('1987-10-27','AL','281'),('1987-10-27','AL','287'),('1987-10-27','AL','287'),('1987-10-27','AL','309'),('1987-10-27','AL','309'),('1987-10-27','AL','341'),('1987-10-27','AL','344'),('1987-10-27','AL','344'),('1987-10-27','AL','357'),('1987-10-27','AL','357'),('1987-10-27','AL','368'),('1987-10-27','AL','381'),('1987-10-27','AL','396'),('1987-10-27','AL','397'),('1987-10-27','AL','397'),('1987-10-27','AL','416'),('1987-10-27','AL','416'),('1987-10-27','AL','417'),('1987-10-27','AL','438'),('1987-10-27','AL','438'),('1987-10-27','AL','446'),('1987-10-27','AL','451'),('1987-10-27','AL','451'),('1987-10-27','AL','491'),('1987-10-27','AL','491'),('1987-10-27','AL','523'),('1987-10-27','AL','523'),('1987-10-27','AL','523'),('1987-10-27','AL','525'),('1987-10-27','AL','525'),('1987-10-27','AL','533'),('1987-10-27','AL','533'),('1987-10-27','AL','546'),('1987-10-27','AL','546'),('1987-10-27','AL','556'),('1987-10-27','AL','556'),('1987-10-27','AL','601'),('1987-10-27','AL','601'),('1987-10-27','AL','627'),('1987-10-27','AL','629'),('1987-10-27','AL','670'),('1987-10-27','AL','670'),('1987-10-27','AL','670'),('1987-10-27','AL','673'),('1987-10-27','AL','680'),('1987-10-28','AA','2'),('1987-10-28','AA','2'),('1987-10-28','AA','2'),('1987-10-28','AA','7'),('1987-10-28','AA','7'),('1987-10-28','AA','26'),('1987-10-28','AA','34'),('1987-10-28','AA','36'),('1987-10-28','AA','91'),('1987-10-28','AA','101'),('1987-10-28','AA','101'),('1987-10-28','AA','109'),('1987-10-28','AA','109'),('1987-10-28','AA','112'),('1987-10-28','AA','123'),('1987-10-28','AA','123'),('1987-10-28','AA','165'),('1987-10-28','AA','165'),('1987-10-28','AA','165'),('1987-10-28','AA','176'),('1987-10-28','AA','176'),('1987-10-28','AA','176'),('1987-10-28','AA','176'),('1987-10-28','AA','179'),('1987-10-28','AA','179'),('1987-10-28','AA','215'),('1987-10-28','AA','215'),('1987-10-28','AA','231'),('1987-10-28','AA','231'),('1987-10-28','AA','263'),('1987-10-28','AA','268'),('1987-10-28','AA','268'),('1987-10-28','AA','281'),('1987-10-28','AA','287'),('1987-10-28','AA','287'),('1987-10-28','AA','309'),('1987-10-28','AA','309'),('1987-10-28','AA','309'),('1987-10-28','AA','341'),('1987-10-28','AA','344'),('1987-10-28','AA','344'),('1987-10-28','AA','347'),('1987-10-28','AA','347'),('1987-10-28','AA','368'),('1987-10-28','AA','381'),('1987-10-28','AA','381'),('1987-10-28','AA','381'),('1987-10-28','AA','396'),('1987-10-28','AA','396'),('1987-10-28','AA','397'),('1987-10-28','AA','397'),('1987-10-28','AA','417'),('1987-10-28','AA','417'),('1987-10-28','AA','446'),('1987-10-28','AA','451'),('1987-10-28','AA','451'),('1987-10-28','AA','460'),('1987-10-28','AA','460'),('1987-10-28','AA','491'),('1987-10-28','AA','504'),('1987-10-28','AA','504'),('1987-10-28','AA','519'),('1987-10-28','AA','519'),('1987-10-28','AA','523'),('1987-10-28','AA','523'),('1987-10-28','AA','525'),('1987-10-28','AA','525'),('1987-10-28','AA','525'),('1987-10-28','AA','533'),('1987-10-28','AA','533'),('1987-10-28','AA','533'),('1987-10-28','AA','546'),('1987-10-28','AA','546'),('1987-10-28','AA','546'),('1987-10-28','AA','546'),('1987-10-28','AA','556'),('1987-10-28','AA','556'),('1987-10-28','AA','556'),('1987-10-28','AA','597'),('1987-10-28','AA','597'),('1987-10-28','AA','597'),('1987-10-28','AA','601'),('1987-10-28','AA','601'),('1987-10-28','AA','627'),('1987-10-28','AA','629'),('1987-10-28','AA','629'),('1987-10-28','AA','670'),('1987-10-28','AA','673'),('1987-10-28','AA','673'),('1987-10-28','AA','680'),('1987-10-28','AA','680'),('1987-10-28','AA','817'),('1987-10-28','AA','817'),('1987-10-28','AA','824'),('1987-10-28','AA','824'),('1987-10-28','AA','824'),('1987-10-28','AA','832'),('1987-10-28','AA','832'),('1987-10-28','AA','852'),('1987-10-28','AA','852'),('1987-10-28','AA','866'),('1987-10-28','AA','866'),('1987-10-28','AA','871'),('1987-10-28','AA','871'),('1987-10-28','AA','880'),('1987-10-28','AA','880'),('1987-10-28','AA','880'),('1987-10-28','AA','880'),('1987-10-28','AA','883'),('1987-10-28','AA','883'),('1987-10-28','AA','885'),('1987-10-28','AA','885'),('1987-10-28','AA','890'),('1987-10-28','AA','890'),('1987-10-28','AA','893'),('1987-10-28','AA','893'),('1987-10-28','AA','905'),('1987-10-28','AA','905'),('1987-10-28','AA','915'),('1987-10-28','AA','929'),('1987-10-28','AA','929'),('1987-10-28','AA','936'),('1987-10-28','AA','936'),('1987-10-28','AA','937'),('1987-10-28','AA','937'),('1987-10-28','AA','955'),('1987-10-28','AA','955'),('1987-10-28','AA','966'),('1987-10-28','AA','1002'),('1987-10-28','AA','1002'),('1987-10-28','AA','1004'),('1987-10-28','AA','1004'),('1987-10-28','AA','1015'),('1987-10-28','AA','1021'),('1987-10-28','AA','1021'),('1987-10-28','AA','1041'),('1987-10-28','AA','1041'),('1987-10-28','AA','1046'),('1987-10-28','AA','1046'),('1987-10-28','AA','1048'),('1987-10-28','AA','1048'),('1987-10-28','AA','1061'),('1987-10-28','AA','1061'),('1987-10-28','AA','1088'),('1987-10-28','AA','1088'),('1987-10-28','AA','2033'),('1987-10-28','AA','2033'),('1987-10-28','AA','2050'),('1987-10-28','AA','2058'),('1987-10-28','AA','2071'),('1987-10-28','AA','2071'),('1987-10-28','AA','2086'),('1987-10-28','AA','2105'),('1987-10-28','AA','2111'),('1987-10-28','AA','2123'),('1987-10-28','AA','2123'),('1987-10-28','AA','2147'),('1987-10-28','AA','2199'),('1987-10-28','AA','2199'),('1987-10-28','AA','2207'),('1987-10-28','AA','2207'),('1987-10-28','AA','2217'),('1987-10-28','AA','2230'),('1987-10-28','AA','2245'),('1987-10-28','AA','2251'),('1987-10-28','AA','2251'),('1987-10-28','AA','2275'),('1987-10-28','AA','2278'),('1987-10-28','AA','2351'),('1987-10-28','AA','2361'),('1987-10-28','AA','2490'),('1987-10-28','AA','2528'),('1987-10-28','AA','2528'),('1987-10-28','AA','2751'),('1987-10-28','AL','2'),('1987-10-28','AL','2'),('1987-10-28','AL','7'),('1987-10-28','AL','7'),('1987-10-28','AL','26'),('1987-10-28','AL','34'),('1987-10-28','AL','34'),('1987-10-28','AL','45'),('1987-10-28','AL','91'),('1987-10-28','AL','91'),('1987-10-28','AL','104'),('1987-10-28','AL','104'),('1987-10-28','AL','104'),('1987-10-28','AL','109'),('1987-10-28','AL','112'),('1987-10-28','AL','112'),('1987-10-28','AL','123'),('1987-10-28','AL','149'),('1987-10-28','AL','160'),('1987-10-28','AL','160'),('1987-10-28','AL','165'),('1987-10-28','AL','171'),('1987-10-28','AL','171'),('1987-10-28','AL','176'),('1987-10-28','AL','176'),('1987-10-28','AL','179'),('1987-10-28','AL','215'),('1987-10-28','AL','231'),('1987-10-28','AL','263'),('1987-10-28','AL','263'),('1987-10-28','AL','268'),('1987-10-28','AL','268'),('1987-10-28','AL','268'),('1987-10-28','AL','281'),('1987-10-28','AL','281'),('1987-10-28','AL','287'),('1987-10-28','AL','287'),('1987-10-28','AL','309'),('1987-10-28','AL','309'),('1987-10-28','AL','341'),('1987-10-28','AL','344'),('1987-10-28','AL','344'),('1987-10-28','AL','357'),('1987-10-28','AL','357'),('1987-10-28','AL','368'),('1987-10-28','AL','381'),('1987-10-28','AL','396'),('1987-10-28','AL','397'),('1987-10-28','AL','397'),('1987-10-28','AL','416'),('1987-10-28','AL','416'),('1987-10-28','AL','417'),('1987-10-28','AL','438'),('1987-10-28','AL','438'),('1987-10-28','AL','446'),('1987-10-28','AL','451'),('1987-10-28','AL','451'),('1987-10-28','AL','491'),('1987-10-28','AL','491'),('1987-10-28','AL','523'),('1987-10-28','AL','523'),('1987-10-28','AL','523'),('1987-10-28','AL','525'),('1987-10-28','AL','525'),('1987-10-28','AL','533'),('1987-10-28','AL','533'),('1987-10-28','AL','546'),('1987-10-28','AL','546'),('1987-10-28','AL','556'),('1987-10-28','AL','556'),('1987-10-28','AL','601'),('1987-10-28','AL','601'),('1987-10-28','AL','627'),('1987-10-28','AL','629'),('1987-10-28','AL','670'),('1987-10-28','AL','670'),('1987-10-28','AL','670'),('1987-10-28','AL','673'),('1987-10-28','AL','680'),('1987-10-29','AA','2'),('1987-10-29','AA','2'),('1987-10-29','AA','2'),('1987-10-29','AA','7'),('1987-10-29','AA','7'),('1987-10-29','AA','26'),('1987-10-29','AA','34'),('1987-10-29','AA','36'),('1987-10-29','AA','91'),('1987-10-29','AA','101'),('1987-10-29','AA','101'),('1987-10-29','AA','109'),('1987-10-29','AA','109'),('1987-10-29','AA','112'),('1987-10-29','AA','123'),('1987-10-29','AA','123'),('1987-10-29','AA','160'),('1987-10-29','AA','165'),('1987-10-29','AA','165'),('1987-10-29','AA','165'),('1987-10-29','AA','176'),('1987-10-29','AA','176'),('1987-10-29','AA','176'),('1987-10-29','AA','176'),('1987-10-29','AA','179'),('1987-10-29','AA','179'),('1987-10-29','AA','215'),('1987-10-29','AA','215'),('1987-10-29','AA','231'),('1987-10-29','AA','231'),('1987-10-29','AA','263'),('1987-10-29','AA','263'),('1987-10-29','AA','268'),('1987-10-29','AA','268'),('1987-10-29','AA','281'),('1987-10-29','AA','287'),('1987-10-29','AA','287'),('1987-10-29','AA','309'),('1987-10-29','AA','309'),('1987-10-29','AA','309'),('1987-10-29','AA','341'),('1987-10-29','AA','344'),('1987-10-29','AA','344'),('1987-10-29','AA','347'),('1987-10-29','AA','347'),('1987-10-29','AA','368'),('1987-10-29','AA','381'),('1987-10-29','AA','381'),('1987-10-29','AA','381'),('1987-10-29','AA','396'),('1987-10-29','AA','396'),('1987-10-29','AA','397'),('1987-10-29','AA','397'),('1987-10-29','AA','417'),('1987-10-29','AA','417'),('1987-10-29','AA','451'),('1987-10-29','AA','451'),('1987-10-29','AA','460'),('1987-10-29','AA','460'),('1987-10-29','AA','491'),('1987-10-29','AA','504'),('1987-10-29','AA','504'),('1987-10-29','AA','519'),('1987-10-29','AA','519'),('1987-10-29','AA','523'),('1987-10-29','AA','523'),('1987-10-29','AA','525'),('1987-10-29','AA','525'),('1987-10-29','AA','525'),('1987-10-29','AA','533'),('1987-10-29','AA','533'),('1987-10-29','AA','533'),('1987-10-29','AA','546'),('1987-10-29','AA','546'),('1987-10-29','AA','546'),('1987-10-29','AA','546'),('1987-10-29','AA','556'),('1987-10-29','AA','556'),('1987-10-29','AA','556'),('1987-10-29','AA','597'),('1987-10-29','AA','597'),('1987-10-29','AA','597'),('1987-10-29','AA','601'),('1987-10-29','AA','601'),('1987-10-29','AA','627'),('1987-10-29','AA','629'),('1987-10-29','AA','670'),('1987-10-29','AA','673'),('1987-10-29','AA','680'),('1987-10-29','AA','680'),('1987-10-29','AA','817'),('1987-10-29','AA','817'),('1987-10-29','AA','824'),('1987-10-29','AA','824'),('1987-10-29','AA','824'),('1987-10-29','AA','824'),('1987-10-29','AA','832'),('1987-10-29','AA','832'),('1987-10-29','AA','852'),('1987-10-29','AA','852'),('1987-10-29','AA','866'),('1987-10-29','AA','866'),('1987-10-29','AA','871'),('1987-10-29','AA','871'),('1987-10-29','AA','880'),('1987-10-29','AA','880'),('1987-10-29','AA','880'),('1987-10-29','AA','880'),('1987-10-29','AA','883'),('1987-10-29','AA','883'),('1987-10-29','AA','885'),('1987-10-29','AA','885'),('1987-10-29','AA','885'),('1987-10-29','AA','890'),('1987-10-29','AA','890'),('1987-10-29','AA','893'),('1987-10-29','AA','893'),('1987-10-29','AA','905'),('1987-10-29','AA','915'),('1987-10-29','AA','929'),('1987-10-29','AA','929'),('1987-10-29','AA','936'),('1987-10-29','AA','936'),('1987-10-29','AA','937'),('1987-10-29','AA','937'),('1987-10-29','AA','955'),('1987-10-29','AA','955'),('1987-10-29','AA','966'),('1987-10-29','AA','1002'),('1987-10-29','AA','1002'),('1987-10-29','AA','1004'),('1987-10-29','AA','1004'),('1987-10-29','AA','1015'),('1987-10-29','AA','1015'),('1987-10-29','AA','1021'),('1987-10-29','AA','1021'),('1987-10-29','AA','1041'),('1987-10-29','AA','1041'),('1987-10-29','AA','1046'),('1987-10-29','AA','1048'),('1987-10-29','AA','1048'),('1987-10-29','AA','1061'),('1987-10-29','AA','1061'),('1987-10-29','AA','1088'),('1987-10-29','AA','1088'),('1987-10-29','AA','2033'),('1987-10-29','AA','2033'),('1987-10-29','AA','2050'),('1987-10-29','AA','2058'),('1987-10-29','AA','2071'),('1987-10-29','AA','2071'),('1987-10-29','AA','2086'),('1987-10-29','AA','2105'),('1987-10-29','AA','2111'),('1987-10-29','AA','2123'),('1987-10-29','AA','2123'),('1987-10-29','AA','2147'),('1987-10-29','AA','2147'),('1987-10-29','AA','2199'),('1987-10-29','AA','2199'),('1987-10-29','AA','2207'),('1987-10-29','AA','2207'),('1987-10-29','AA','2217'),('1987-10-29','AA','2230'),('1987-10-29','AA','2251'),('1987-10-29','AA','2251'),('1987-10-29','AA','2275'),('1987-10-29','AA','2278'),('1987-10-29','AA','2351'),('1987-10-29','AA','2357'),('1987-10-29','AA','2361'),('1987-10-29','AA','2490'),('1987-10-29','AA','2528'),('1987-10-29','AA','2735'),('1987-10-29','AA','2735'),('1987-10-29','AA','2751'),('1987-10-29','AL','2'),('1987-10-29','AL','2'),('1987-10-29','AL','7'),('1987-10-29','AL','7'),('1987-10-29','AL','26'),('1987-10-29','AL','26'),('1987-10-29','AL','34'),('1987-10-29','AL','34'),('1987-10-29','AL','36'),('1987-10-29','AL','36'),('1987-10-29','AL','45'),('1987-10-29','AL','45'),('1987-10-29','AL','45'),('1987-10-29','AL','91'),('1987-10-29','AL','91'),('1987-10-29','AL','104'),('1987-10-29','AL','109'),('1987-10-29','AL','112'),('1987-10-29','AL','112'),('1987-10-29','AL','123'),('1987-10-29','AL','149'),('1987-10-29','AL','160'),('1987-10-29','AL','160'),('1987-10-29','AL','165'),('1987-10-29','AL','171'),('1987-10-29','AL','171'),('1987-10-29','AL','176'),('1987-10-29','AL','176'),('1987-10-29','AL','179'),('1987-10-29','AL','215'),('1987-10-29','AL','231'),('1987-10-29','AL','263'),('1987-10-29','AL','263'),('1987-10-29','AL','268'),('1987-10-29','AL','268'),('1987-10-29','AL','268'),('1987-10-29','AL','281'),('1987-10-29','AL','281'),('1987-10-29','AL','287'),('1987-10-29','AL','287'),('1987-10-29','AL','309'),('1987-10-29','AL','309'),('1987-10-29','AL','341'),('1987-10-29','AL','344'),('1987-10-29','AL','344'),('1987-10-29','AL','357'),('1987-10-29','AL','357'),('1987-10-29','AL','368'),('1987-10-29','AL','381'),('1987-10-29','AL','396'),('1987-10-29','AL','397'),('1987-10-29','AL','397'),('1987-10-29','AL','416'),('1987-10-29','AL','416'),('1987-10-29','AL','417'),('1987-10-29','AL','438'),('1987-10-29','AL','438'),('1987-10-29','AL','446'),('1987-10-29','AL','451'),('1987-10-29','AL','451'),('1987-10-29','AL','491'),('1987-10-29','AL','491'),('1987-10-29','AL','523'),('1987-10-29','AL','523'),('1987-10-29','AL','523'),('1987-10-29','AL','525'),('1987-10-29','AL','525'),('1987-10-29','AL','533'),('1987-10-29','AL','533'),('1987-10-29','AL','546'),('1987-10-29','AL','546'),('1987-10-29','AL','556'),('1987-10-29','AL','556'),('1987-10-29','AL','601'),('1987-10-29','AL','601'),('1987-10-29','AL','627'),('1987-10-29','AL','629'),('1987-10-29','AL','670'),('1987-10-29','AL','670'),('1987-10-29','AL','670'),('1987-10-29','AL','673'),('1987-10-29','AL','680'),('1987-10-30','AA','2'),('1987-10-30','AA','2'),('1987-10-30','AA','2'),('1987-10-30','AA','7'),('1987-10-30','AA','7'),('1987-10-30','AA','26'),('1987-10-30','AA','34'),('1987-10-30','AA','91'),('1987-10-30','AA','101'),('1987-10-30','AA','101'),('1987-10-30','AA','109'),('1987-10-30','AA','109'),('1987-10-30','AA','109'),('1987-10-30','AA','112'),('1987-10-30','AA','123'),('1987-10-30','AA','165'),('1987-10-30','AA','165'),('1987-10-30','AA','165'),('1987-10-30','AA','176'),('1987-10-30','AA','176'),('1987-10-30','AA','176'),('1987-10-30','AA','176'),('1987-10-30','AA','179'),('1987-10-30','AA','179'),('1987-10-30','AA','215'),('1987-10-30','AA','215'),('1987-10-30','AA','231'),('1987-10-30','AA','231'),('1987-10-30','AA','263'),('1987-10-30','AA','268'),('1987-10-30','AA','268'),('1987-10-30','AA','281'),('1987-10-30','AA','287'),('1987-10-30','AA','287'),('1987-10-30','AA','309'),('1987-10-30','AA','309'),('1987-10-30','AA','309'),('1987-10-30','AA','344'),('1987-10-30','AA','344'),('1987-10-30','AA','347'),('1987-10-30','AA','347'),('1987-10-30','AA','368'),('1987-10-30','AA','381'),('1987-10-30','AA','381'),('1987-10-30','AA','381'),('1987-10-30','AA','396'),('1987-10-30','AA','396'),('1987-10-30','AA','397'),('1987-10-30','AA','397'),('1987-10-30','AA','417'),('1987-10-30','AA','417'),('1987-10-30','AA','446'),('1987-10-30','AA','451'),('1987-10-30','AA','451'),('1987-10-30','AA','460'),('1987-10-30','AA','460'),('1987-10-30','AA','491'),('1987-10-30','AA','504'),('1987-10-30','AA','504'),('1987-10-30','AA','519'),('1987-10-30','AA','519'),('1987-10-30','AA','523'),('1987-10-30','AA','523'),('1987-10-30','AA','525'),('1987-10-30','AA','525'),('1987-10-30','AA','525'),('1987-10-30','AA','533'),('1987-10-30','AA','533'),('1987-10-30','AA','533'),('1987-10-30','AA','546'),('1987-10-30','AA','546'),('1987-10-30','AA','546'),('1987-10-30','AA','546'),('1987-10-30','AA','556'),('1987-10-30','AA','556'),('1987-10-30','AA','556'),('1987-10-30','AA','597'),('1987-10-30','AA','597'),('1987-10-30','AA','597'),('1987-10-30','AA','601'),('1987-10-30','AA','601'),('1987-10-30','AA','627'),('1987-10-30','AA','629'),('1987-10-30','AA','629'),('1987-10-30','AA','670'),('1987-10-30','AA','673'),('1987-10-30','AA','673'),('1987-10-30','AA','680'),('1987-10-30','AA','817'),('1987-10-30','AA','817'),('1987-10-30','AA','824'),('1987-10-30','AA','824'),('1987-10-30','AA','824'),('1987-10-30','AA','824'),('1987-10-30','AA','832'),('1987-10-30','AA','832'),('1987-10-30','AA','852'),('1987-10-30','AA','866'),('1987-10-30','AA','866'),('1987-10-30','AA','871'),('1987-10-30','AA','871'),('1987-10-30','AA','880'),('1987-10-30','AA','880'),('1987-10-30','AA','880'),('1987-10-30','AA','880'),('1987-10-30','AA','883'),('1987-10-30','AA','883'),('1987-10-30','AA','885'),('1987-10-30','AA','885'),('1987-10-30','AA','885'),('1987-10-30','AA','890'),('1987-10-30','AA','890'),('1987-10-30','AA','893'),('1987-10-30','AA','893'),('1987-10-30','AA','905'),('1987-10-30','AA','905'),('1987-10-30','AA','915'),('1987-10-30','AA','929'),('1987-10-30','AA','929'),('1987-10-30','AA','936'),('1987-10-30','AA','936'),('1987-10-30','AA','937'),('1987-10-30','AA','937'),('1987-10-30','AA','955'),('1987-10-30','AA','955'),('1987-10-30','AA','966'),('1987-10-30','AA','1002'),('1987-10-30','AA','1002'),('1987-10-30','AA','1004'),('1987-10-30','AA','1004'),('1987-10-30','AA','1015'),('1987-10-30','AA','1015'),('1987-10-30','AA','1021'),('1987-10-30','AA','1021'),('1987-10-30','AA','1041'),('1987-10-30','AA','1041'),('1987-10-30','AA','1046'),('1987-10-30','AA','1046'),('1987-10-30','AA','1048'),('1987-10-30','AA','1048'),('1987-10-30','AA','1061'),('1987-10-30','AA','1061'),('1987-10-30','AA','1088'),('1987-10-30','AA','1088'),('1987-10-30','AA','2033'),('1987-10-30','AA','2033'),('1987-10-30','AA','2050'),('1987-10-30','AA','2058'),('1987-10-30','AA','2071'),('1987-10-30','AA','2071'),('1987-10-30','AA','2086'),('1987-10-30','AA','2105'),('1987-10-30','AA','2111'),('1987-10-30','AA','2123'),('1987-10-30','AA','2123'),('1987-10-30','AA','2147'),('1987-10-30','AA','2147'),('1987-10-30','AA','2199'),('1987-10-30','AA','2199'),('1987-10-30','AA','2207'),('1987-10-30','AA','2207'),('1987-10-30','AA','2217'),('1987-10-30','AA','2230'),('1987-10-30','AA','2245'),('1987-10-30','AA','2251'),('1987-10-30','AA','2275'),('1987-10-30','AA','2278'),('1987-10-30','AA','2351'),('1987-10-30','AA','2357'),('1987-10-30','AA','2361'),('1987-10-30','AA','2490'),('1987-10-30','AA','2528'),('1987-10-30','AA','2528'),('1987-10-30','AA','2735'),('1987-10-30','AA','2735'),('1987-10-30','AA','2751'),('1987-10-30','AL','2'),('1987-10-30','AL','2'),('1987-10-30','AL','7'),('1987-10-30','AL','7'),('1987-10-30','AL','26'),('1987-10-30','AL','26'),('1987-10-30','AL','34'),('1987-10-30','AL','34'),('1987-10-30','AL','36'),('1987-10-30','AL','36'),('1987-10-30','AL','45'),('1987-10-30','AL','45'),('1987-10-30','AL','45'),('1987-10-30','AL','91'),('1987-10-30','AL','91'),('1987-10-30','AL','104'),('1987-10-30','AL','104'),('1987-10-30','AL','104'),('1987-10-30','AL','109'),('1987-10-30','AL','112'),('1987-10-30','AL','112'),('1987-10-30','AL','123'),('1987-10-30','AL','149'),('1987-10-30','AL','160'),('1987-10-30','AL','160'),('1987-10-30','AL','165'),('1987-10-30','AL','171'),('1987-10-30','AL','171'),('1987-10-30','AL','176'),('1987-10-30','AL','176'),('1987-10-30','AL','179'),('1987-10-30','AL','215'),('1987-10-30','AL','231'),('1987-10-30','AL','263'),('1987-10-30','AL','263'),('1987-10-30','AL','268'),('1987-10-30','AL','268'),('1987-10-30','AL','268'),('1987-10-30','AL','281'),('1987-10-30','AL','281'),('1987-10-30','AL','287'),('1987-10-30','AL','287'),('1987-10-30','AL','309'),('1987-10-30','AL','309'),('1987-10-30','AL','341'),('1987-10-30','AL','344'),('1987-10-30','AL','344'),('1987-10-30','AL','357'),('1987-10-30','AL','357'),('1987-10-30','AL','368'),('1987-10-30','AL','381'),('1987-10-30','AL','396'),('1987-10-30','AL','397'),('1987-10-30','AL','397'),('1987-10-30','AL','416'),('1987-10-30','AL','416'),('1987-10-30','AL','417'),('1987-10-30','AL','438'),('1987-10-30','AL','438'),('1987-10-30','AL','446'),('1987-10-30','AL','451'),('1987-10-30','AL','451'),('1987-10-30','AL','491'),('1987-10-30','AL','491'),('1987-10-30','AL','523'),('1987-10-30','AL','523'),('1987-10-30','AL','523'),('1987-10-30','AL','525'),('1987-10-30','AL','525'),('1987-10-30','AL','533'),('1987-10-30','AL','533'),('1987-10-30','AL','546'),('1987-10-30','AL','546'),('1987-10-30','AL','556'),('1987-10-30','AL','556'),('1987-10-30','AL','601'),('1987-10-30','AL','601'),('1987-10-30','AL','627'),('1987-10-30','AL','629'),('1987-10-30','AL','670'),('1987-10-30','AL','670'),('1987-10-30','AL','670'),('1987-10-30','AL','673'),('1987-10-30','AL','680'),('1987-10-31','AA','2'),('1987-10-31','AA','2'),('1987-10-31','AA','2'),('1987-10-31','AA','7'),('1987-10-31','AA','7'),('1987-10-31','AA','26'),('1987-10-31','AA','34'),('1987-10-31','AA','36'),('1987-10-31','AA','91'),('1987-10-31','AA','101'),('1987-10-31','AA','101'),('1987-10-31','AA','109'),('1987-10-31','AA','109'),('1987-10-31','AA','112'),('1987-10-31','AA','123'),('1987-10-31','AA','123'),('1987-10-31','AA','160'),('1987-10-31','AA','165'),('1987-10-31','AA','165'),('1987-10-31','AA','165'),('1987-10-31','AA','176'),('1987-10-31','AA','176'),('1987-10-31','AA','176'),('1987-10-31','AA','176'),('1987-10-31','AA','179'),('1987-10-31','AA','179'),('1987-10-31','AA','215'),('1987-10-31','AA','215'),('1987-10-31','AA','231'),('1987-10-31','AA','263'),('1987-10-31','AA','268'),('1987-10-31','AA','268'),('1987-10-31','AA','281'),('1987-10-31','AA','287'),('1987-10-31','AA','287'),('1987-10-31','AA','309'),('1987-10-31','AA','309'),('1987-10-31','AA','309'),('1987-10-31','AA','341'),('1987-10-31','AA','344'),('1987-10-31','AA','344'),('1987-10-31','AA','347'),('1987-10-31','AA','347'),('1987-10-31','AA','368'),('1987-10-31','AA','381'),('1987-10-31','AA','381'),('1987-10-31','AA','381'),('1987-10-31','AA','396'),('1987-10-31','AA','396'),('1987-10-31','AA','397'),('1987-10-31','AA','417'),('1987-10-31','AA','417'),('1987-10-31','AA','446'),('1987-10-31','AA','451'),('1987-10-31','AA','451'),('1987-10-31','AA','491'),('1987-10-31','AA','491'),('1987-10-31','AA','504'),('1987-10-31','AA','504'),('1987-10-31','AA','519'),('1987-10-31','AA','519'),('1987-10-31','AA','523'),('1987-10-31','AA','523'),('1987-10-31','AA','525'),('1987-10-31','AA','525'),('1987-10-31','AA','533'),('1987-10-31','AA','533'),('1987-10-31','AA','546'),('1987-10-31','AA','546'),('1987-10-31','AA','546'),('1987-10-31','AA','546'),('1987-10-31','AA','556'),('1987-10-31','AA','556'),('1987-10-31','AA','556'),('1987-10-31','AA','597'),('1987-10-31','AA','597'),('1987-10-31','AA','597'),('1987-10-31','AA','601'),('1987-10-31','AA','601'),('1987-10-31','AA','627'),('1987-10-31','AA','629'),('1987-10-31','AA','670'),('1987-10-31','AA','673'),('1987-10-31','AA','673'),('1987-10-31','AA','680'),('1987-10-31','AA','680'),('1987-10-31','AA','817'),('1987-10-31','AA','817'),('1987-10-31','AA','824'),('1987-10-31','AA','824'),('1987-10-31','AA','824'),('1987-10-31','AA','832'),('1987-10-31','AA','832'),('1987-10-31','AA','852'),('1987-10-31','AA','852'),('1987-10-31','AA','866'),('1987-10-31','AA','871'),('1987-10-31','AA','871'),('1987-10-31','AA','880'),('1987-10-31','AA','880'),('1987-10-31','AA','880'),('1987-10-31','AA','883'),('1987-10-31','AA','885'),('1987-10-31','AA','885'),('1987-10-31','AA','885'),('1987-10-31','AA','890'),('1987-10-31','AA','890'),('1987-10-31','AA','893'),('1987-10-31','AA','893'),('1987-10-31','AA','905'),('1987-10-31','AA','905'),('1987-10-31','AA','915'),('1987-10-31','AA','929'),('1987-10-31','AA','929'),('1987-10-31','AA','936'),('1987-10-31','AA','936'),('1987-10-31','AA','937'),('1987-10-31','AA','937'),('1987-10-31','AA','955'),('1987-10-31','AA','955'),('1987-10-31','AA','1002'),('1987-10-31','AA','1002'),('1987-10-31','AA','1004'),('1987-10-31','AA','1004'),('1987-10-31','AA','1015'),('1987-10-31','AA','1015'),('1987-10-31','AA','1021'),('1987-10-31','AA','1021'),('1987-10-31','AA','1041'),('1987-10-31','AA','1041'),('1987-10-31','AA','1046'),('1987-10-31','AA','1046'),('1987-10-31','AA','1048'),('1987-10-31','AA','1048'),('1987-10-31','AA','1061'),('1987-10-31','AA','1061'),('1987-10-31','AA','1088'),('1987-10-31','AA','1088'),('1987-10-31','AA','2033'),('1987-10-31','AA','2058'),('1987-10-31','AA','2086'),('1987-10-31','AA','2105'),('1987-10-31','AA','2123'),('1987-10-31','AA','2123'),('1987-10-31','AA','2147'),('1987-10-31','AA','2147'),('1987-10-31','AA','2199'),('1987-10-31','AA','2199'),('1987-10-31','AA','2207'),('1987-10-31','AA','2207'),('1987-10-31','AA','2217'),('1987-10-31','AA','2230'),('1987-10-31','AA','2251'),('1987-10-31','AA','2251'),('1987-10-31','AA','2275'),('1987-10-31','AA','2278'),('1987-10-31','AA','2351'),('1987-10-31','AA','2357'),('1987-10-31','AA','2361'),('1987-10-31','AA','2528'),('1987-10-31','AA','2528'),('1987-10-31','AA','2735'),('1987-10-31','AA','2735'),('1987-10-31','AL','2'),('1987-10-31','AL','2'),('1987-10-31','AL','7'),('1987-10-31','AL','7'),('1987-10-31','AL','26'),('1987-10-31','AL','26'),('1987-10-31','AL','34'),('1987-10-31','AL','34'),('1987-10-31','AL','36'),('1987-10-31','AL','36'),('1987-10-31','AL','91'),('1987-10-31','AL','91'),('1987-10-31','AL','104'),('1987-10-31','AL','104'),('1987-10-31','AL','109'),('1987-10-31','AL','112'),('1987-10-31','AL','112'),('1987-10-31','AL','149'),('1987-10-31','AL','160'),('1987-10-31','AL','160'),('1987-10-31','AL','165'),('1987-10-31','AL','171'),('1987-10-31','AL','171'),('1987-10-31','AL','176'),('1987-10-31','AL','176'),('1987-10-31','AL','179'),('1987-10-31','AL','215'),('1987-10-31','AL','231'),('1987-10-31','AL','263'),('1987-10-31','AL','268'),('1987-10-31','AL','268'),('1987-10-31','AL','268'),('1987-10-31','AL','287'),('1987-10-31','AL','287'),('1987-10-31','AL','309'),('1987-10-31','AL','309'),('1987-10-31','AL','344'),('1987-10-31','AL','344'),('1987-10-31','AL','357'),('1987-10-31','AL','357'),('1987-10-31','AL','381'),('1987-10-31','AL','396'),('1987-10-31','AL','397'),('1987-10-31','AL','397'),('1987-10-31','AL','397'),('1987-10-31','AL','416'),('1987-10-31','AL','417'),('1987-10-31','AL','438'),('1987-10-31','AL','438'),('1987-10-31','AL','451'),('1987-10-31','AL','451'),('1987-10-31','AL','491'),('1987-10-31','AL','491'),('1987-10-31','AL','523'),('1987-10-31','AL','523'),('1987-10-31','AL','525'),('1987-10-31','AL','525'),('1987-10-31','AL','533'),('1987-10-31','AL','546'),('1987-10-31','AL','546'),('1987-10-31','AL','556'),('1987-10-31','AL','556'),('1987-10-31','AL','601'),('1987-10-31','AL','601'),('1987-10-31','AL','627'),('1987-10-31','AL','670'),('1987-10-31','AL','673'),('1987-10-31','AL','680'),('1987-10-31','AL','745'),('1987-10-31','AL','797'),('1987-10-31','AL','905'),('1987-10-31','AL','936'),('1987-10-31','AL','966'),('1987-10-31','AL','982'); +INSERT INTO ontime VALUES ('1987-10-01','AA','2'),('1987-10-01','AA','2'),('1987-10-01','AA','7'),('1987-10-01','AA','7'),('1987-10-01','AA','26'),('1987-10-01','AA','34'),('1987-10-01','AA','36'),('1987-10-01','AA','91'),('1987-10-01','AA','101'),('1987-10-01','AA','101'),('1987-10-01','AA','109'),('1987-10-01','AA','109'),('1987-10-01','AA','112'),('1987-10-01','AA','123'),('1987-10-01','AA','160'),('1987-10-01','AA','165'),('1987-10-01','AA','165'),('1987-10-01','AA','165'),('1987-10-01','AA','176'),('1987-10-01','AA','176'),('1987-10-01','AA','176'),('1987-10-01','AA','176'),('1987-10-01','AA','179'),('1987-10-01','AA','179'),('1987-10-01','AA','215'),('1987-10-01','AA','215'),('1987-10-01','AA','231'),('1987-10-01','AA','231'),('1987-10-01','AA','263'),('1987-10-01','AA','263'),('1987-10-01','AA','268'),('1987-10-01','AA','268'),('1987-10-01','AA','281'),('1987-10-01','AA','287'),('1987-10-01','AA','287'),('1987-10-01','AA','309'),('1987-10-01','AA','309'),('1987-10-01','AA','309'),('1987-10-01','AA','341'),('1987-10-01','AA','344'),('1987-10-01','AA','344'),('1987-10-01','AA','347'),('1987-10-01','AA','347'),('1987-10-01','AA','368'),('1987-10-01','AA','381'),('1987-10-01','AA','381'),('1987-10-01','AA','381'),('1987-10-01','AA','396'),('1987-10-01','AA','396'),('1987-10-01','AA','397'),('1987-10-01','AA','397'),('1987-10-01','AA','417'),('1987-10-01','AA','417'),('1987-10-01','AA','446'),('1987-10-01','AA','451'),('1987-10-01','AA','451'),('1987-10-01','AA','460'),('1987-10-01','AA','460'),('1987-10-01','AA','491'),('1987-10-01','AA','504'),('1987-10-01','AA','504'),('1987-10-01','AA','519'),('1987-10-01','AA','519'),('1987-10-01','AA','523'),('1987-10-01','AA','523'),('1987-10-01','AA','525'),('1987-10-01','AA','525'),('1987-10-01','AA','525'),('1987-10-01','AA','533'),('1987-10-01','AA','533'),('1987-10-01','AA','533'),('1987-10-01','AA','546'),('1987-10-01','AA','546'),('1987-10-01','AA','556'),('1987-10-01','AA','556'),('1987-10-01','AA','556'),('1987-10-01','AA','597'),('1987-10-01','AA','597'),('1987-10-01','AA','597'),('1987-10-01','AA','601'),('1987-10-01','AA','601'),('1987-10-01','AA','627'),('1987-10-01','AA','670'),('1987-10-01','AA','673'),('1987-10-01','AA','673'),('1987-10-01','AA','680'),('1987-10-01','AA','680'),('1987-10-01','AA','817'),('1987-10-01','AA','817'),('1987-10-01','AA','824'),('1987-10-01','AA','824'),('1987-10-01','AA','824'),('1987-10-01','AA','824'),('1987-10-01','AA','832'),('1987-10-01','AA','832'),('1987-10-01','AA','852'),('1987-10-01','AA','852'),('1987-10-01','AA','866'),('1987-10-01','AA','866'),('1987-10-01','AA','871'),('1987-10-01','AA','871'),('1987-10-01','AA','880'),('1987-10-01','AA','880'),('1987-10-01','AA','880'),('1987-10-01','AA','880'),('1987-10-01','AA','883'),('1987-10-01','AA','883'),('1987-10-01','AA','885'),('1987-10-01','AA','885'),('1987-10-01','AA','885'),('1987-10-01','AA','890'),('1987-10-01','AA','893'),('1987-10-01','AA','893'),('1987-10-01','AA','905'),('1987-10-01','AA','905'),('1987-10-01','AA','929'),('1987-10-01','AA','929'),('1987-10-01','AA','936'),('1987-10-01','AA','936'),('1987-10-01','AA','937'),('1987-10-01','AA','937'),('1987-10-01','AA','955'),('1987-10-01','AA','966'),('1987-10-01','AA','1002'),('1987-10-01','AA','1002'),('1987-10-01','AA','1004'),('1987-10-01','AA','1004'),('1987-10-01','AA','1015'),('1987-10-01','AA','1015'),('1987-10-01','AA','1021'),('1987-10-01','AA','1021'),('1987-10-01','AA','1041'),('1987-10-01','AA','1041'),('1987-10-01','AA','1046'),('1987-10-01','AA','1046'),('1987-10-01','AA','1048'),('1987-10-01','AA','1048'),('1987-10-01','AA','1061'),('1987-10-01','AA','1061'),('1987-10-01','AA','1088'),('1987-10-01','AA','1088'),('1987-10-01','AA','2033'),('1987-10-01','AA','2033'),('1987-10-01','AA','2050'),('1987-10-01','AA','2058'),('1987-10-01','AA','2071'),('1987-10-01','AA','2071'),('1987-10-01','AA','2086'),('1987-10-01','AA','2105'),('1987-10-01','AA','2111'),('1987-10-01','AA','2123'),('1987-10-01','AA','2123'),('1987-10-01','AA','2147'),('1987-10-01','AA','2147'),('1987-10-01','AA','2199'),('1987-10-01','AA','2199'),('1987-10-01','AA','2207'),('1987-10-01','AA','2207'),('1987-10-01','AA','2217'),('1987-10-01','AA','2230'),('1987-10-01','AA','2245'),('1987-10-01','AA','2251'),('1987-10-01','AA','2251'),('1987-10-01','AA','2275'),('1987-10-01','AA','2278'),('1987-10-01','AA','2351'),('1987-10-01','AA','2357'),('1987-10-01','AA','2490'),('1987-10-01','AA','2528'),('1987-10-01','AA','2528'),('1987-10-01','AA','2735'),('1987-10-01','AA','2735'),('1987-10-01','AA','2751'),('1987-10-01','AL','2'),('1987-10-01','AL','2'),('1987-10-01','AL','7'),('1987-10-01','AL','7'),('1987-10-01','AL','26'),('1987-10-01','AL','26'),('1987-10-01','AL','34'),('1987-10-01','AL','34'),('1987-10-01','AL','36'),('1987-10-01','AL','36'),('1987-10-01','AL','45'),('1987-10-01','AL','45'),('1987-10-01','AL','45'),('1987-10-01','AL','91'),('1987-10-01','AL','91'),('1987-10-01','AL','104'),('1987-10-01','AL','104'),('1987-10-01','AL','104'),('1987-10-01','AL','109'),('1987-10-01','AL','112'),('1987-10-01','AL','112'),('1987-10-01','AL','123'),('1987-10-01','AL','149'),('1987-10-01','AL','160'),('1987-10-01','AL','160'),('1987-10-01','AL','165'),('1987-10-01','AL','171'),('1987-10-01','AL','171'),('1987-10-01','AL','176'),('1987-10-01','AL','176'),('1987-10-01','AL','179'),('1987-10-01','AL','215'),('1987-10-01','AL','231'),('1987-10-01','AL','263'),('1987-10-01','AL','263'),('1987-10-01','AL','268'),('1987-10-01','AL','268'),('1987-10-01','AL','268'),('1987-10-01','AL','281'),('1987-10-01','AL','281'),('1987-10-01','AL','287'),('1987-10-01','AL','287'),('1987-10-01','AL','309'),('1987-10-01','AL','309'),('1987-10-01','AL','341'),('1987-10-01','AL','344'),('1987-10-01','AL','344'),('1987-10-01','AL','357'),('1987-10-01','AL','357'),('1987-10-01','AL','368'),('1987-10-01','AL','381'),('1987-10-01','AL','396'),('1987-10-01','AL','397'),('1987-10-01','AL','397'),('1987-10-01','AL','416'),('1987-10-01','AL','416'),('1987-10-01','AL','417'),('1987-10-01','AL','438'),('1987-10-01','AL','446'),('1987-10-01','AL','451'),('1987-10-01','AL','451'),('1987-10-01','AL','491'),('1987-10-01','AL','491'),('1987-10-01','AL','523'),('1987-10-01','AL','523'),('1987-10-01','AL','523'),('1987-10-01','AL','525'),('1987-10-01','AL','525'),('1987-10-01','AL','533'),('1987-10-01','AL','533'),('1987-10-01','AL','546'),('1987-10-01','AL','546'),('1987-10-01','AL','556'),('1987-10-01','AL','556'),('1987-10-01','AL','601'),('1987-10-01','AL','601'),('1987-10-01','AL','627'),('1987-10-01','AL','629'),('1987-10-01','AL','670'),('1987-10-01','AL','670'),('1987-10-01','AL','670'),('1987-10-01','AL','673'),('1987-10-01','AL','680'),('1987-10-01','AL','700'),('1987-10-02','AA','2'),('1987-10-02','AA','2'),('1987-10-02','AA','2'),('1987-10-02','AA','7'),('1987-10-02','AA','7'),('1987-10-02','AA','26'),('1987-10-02','AA','34'),('1987-10-02','AA','36'),('1987-10-02','AA','91'),('1987-10-02','AA','101'),('1987-10-02','AA','101'),('1987-10-02','AA','109'),('1987-10-02','AA','109'),('1987-10-02','AA','112'),('1987-10-02','AA','123'),('1987-10-02','AA','123'),('1987-10-02','AA','160'),('1987-10-02','AA','165'),('1987-10-02','AA','165'),('1987-10-02','AA','165'),('1987-10-02','AA','176'),('1987-10-02','AA','176'),('1987-10-02','AA','176'),('1987-10-02','AA','176'),('1987-10-02','AA','179'),('1987-10-02','AA','179'),('1987-10-02','AA','215'),('1987-10-02','AA','215'),('1987-10-02','AA','231'),('1987-10-02','AA','231'),('1987-10-02','AA','263'),('1987-10-02','AA','263'),('1987-10-02','AA','268'),('1987-10-02','AA','281'),('1987-10-02','AA','287'),('1987-10-02','AA','287'),('1987-10-02','AA','309'),('1987-10-02','AA','309'),('1987-10-02','AA','309'),('1987-10-02','AA','341'),('1987-10-02','AA','344'),('1987-10-02','AA','344'),('1987-10-02','AA','347'),('1987-10-02','AA','347'),('1987-10-02','AA','368'),('1987-10-02','AA','381'),('1987-10-02','AA','381'),('1987-10-02','AA','381'),('1987-10-02','AA','396'),('1987-10-02','AA','396'),('1987-10-02','AA','397'),('1987-10-02','AA','397'),('1987-10-02','AA','417'),('1987-10-02','AA','417'),('1987-10-02','AA','446'),('1987-10-02','AA','451'),('1987-10-02','AA','451'),('1987-10-02','AA','460'),('1987-10-02','AA','460'),('1987-10-02','AA','491'),('1987-10-02','AA','504'),('1987-10-02','AA','504'),('1987-10-02','AA','519'),('1987-10-02','AA','519'),('1987-10-02','AA','523'),('1987-10-02','AA','523'),('1987-10-02','AA','525'),('1987-10-02','AA','525'),('1987-10-02','AA','525'),('1987-10-02','AA','533'),('1987-10-02','AA','533'),('1987-10-02','AA','533'),('1987-10-02','AA','546'),('1987-10-02','AA','546'),('1987-10-02','AA','546'),('1987-10-02','AA','546'),('1987-10-02','AA','556'),('1987-10-02','AA','556'),('1987-10-02','AA','556'),('1987-10-02','AA','597'),('1987-10-02','AA','597'),('1987-10-02','AA','597'),('1987-10-02','AA','601'),('1987-10-02','AA','601'),('1987-10-02','AA','627'),('1987-10-02','AA','629'),('1987-10-02','AA','629'),('1987-10-02','AA','670'),('1987-10-02','AA','673'),('1987-10-02','AA','673'),('1987-10-02','AA','680'),('1987-10-02','AA','680'),('1987-10-02','AA','817'),('1987-10-02','AA','817'),('1987-10-02','AA','824'),('1987-10-02','AA','824'),('1987-10-02','AA','824'),('1987-10-02','AA','824'),('1987-10-02','AA','832'),('1987-10-02','AA','832'),('1987-10-02','AA','852'),('1987-10-02','AA','866'),('1987-10-02','AA','866'),('1987-10-02','AA','871'),('1987-10-02','AA','871'),('1987-10-02','AA','880'),('1987-10-02','AA','880'),('1987-10-02','AA','880'),('1987-10-02','AA','880'),('1987-10-02','AA','883'),('1987-10-02','AA','883'),('1987-10-02','AA','885'),('1987-10-02','AA','885'),('1987-10-02','AA','885'),('1987-10-02','AA','890'),('1987-10-02','AA','890'),('1987-10-02','AA','893'),('1987-10-02','AA','893'),('1987-10-02','AA','905'),('1987-10-02','AA','905'),('1987-10-02','AA','915'),('1987-10-02','AA','929'),('1987-10-02','AA','929'),('1987-10-02','AA','936'),('1987-10-02','AA','936'),('1987-10-02','AA','937'),('1987-10-02','AA','937'),('1987-10-02','AA','955'),('1987-10-02','AA','955'),('1987-10-02','AA','966'),('1987-10-02','AA','1002'),('1987-10-02','AA','1002'),('1987-10-02','AA','1004'),('1987-10-02','AA','1004'),('1987-10-02','AA','1015'),('1987-10-02','AA','1015'),('1987-10-02','AA','1021'),('1987-10-02','AA','1021'),('1987-10-02','AA','1041'),('1987-10-02','AA','1041'),('1987-10-02','AA','1046'),('1987-10-02','AA','1046'),('1987-10-02','AA','1048'),('1987-10-02','AA','1048'),('1987-10-02','AA','1061'),('1987-10-02','AA','1061'),('1987-10-02','AA','1088'),('1987-10-02','AA','1088'),('1987-10-02','AA','2033'),('1987-10-02','AA','2033'),('1987-10-02','AA','2050'),('1987-10-02','AA','2058'),('1987-10-02','AA','2071'),('1987-10-02','AA','2071'),('1987-10-02','AA','2086'),('1987-10-02','AA','2105'),('1987-10-02','AA','2111'),('1987-10-02','AA','2123'),('1987-10-02','AA','2123'),('1987-10-02','AA','2147'),('1987-10-02','AA','2147'),('1987-10-02','AA','2199'),('1987-10-02','AA','2199'),('1987-10-02','AA','2207'),('1987-10-02','AA','2207'),('1987-10-02','AA','2217'),('1987-10-02','AA','2230'),('1987-10-02','AA','2245'),('1987-10-02','AA','2251'),('1987-10-02','AA','2251'),('1987-10-02','AA','2275'),('1987-10-02','AA','2278'),('1987-10-02','AA','2351'),('1987-10-02','AA','2357'),('1987-10-02','AA','2361'),('1987-10-02','AA','2490'),('1987-10-02','AA','2528'),('1987-10-02','AA','2528'),('1987-10-02','AA','2735'),('1987-10-02','AA','2735'),('1987-10-02','AA','2751'),('1987-10-02','AL','2'),('1987-10-02','AL','2'),('1987-10-02','AL','7'),('1987-10-02','AL','7'),('1987-10-02','AL','26'),('1987-10-02','AL','26'),('1987-10-02','AL','34'),('1987-10-02','AL','34'),('1987-10-02','AL','36'),('1987-10-02','AL','36'),('1987-10-02','AL','45'),('1987-10-02','AL','45'),('1987-10-02','AL','45'),('1987-10-02','AL','91'),('1987-10-02','AL','91'),('1987-10-02','AL','104'),('1987-10-02','AL','104'),('1987-10-02','AL','104'),('1987-10-02','AL','109'),('1987-10-02','AL','112'),('1987-10-02','AL','112'),('1987-10-02','AL','123'),('1987-10-02','AL','149'),('1987-10-02','AL','160'),('1987-10-02','AL','160'),('1987-10-02','AL','165'),('1987-10-02','AL','171'),('1987-10-02','AL','171'),('1987-10-02','AL','176'),('1987-10-02','AL','176'),('1987-10-02','AL','179'),('1987-10-02','AL','215'),('1987-10-02','AL','231'),('1987-10-02','AL','263'),('1987-10-02','AL','263'),('1987-10-02','AL','268'),('1987-10-02','AL','268'),('1987-10-02','AL','268'),('1987-10-02','AL','281'),('1987-10-02','AL','281'),('1987-10-02','AL','287'),('1987-10-02','AL','287'),('1987-10-02','AL','309'),('1987-10-02','AL','309'),('1987-10-02','AL','341'),('1987-10-02','AL','344'),('1987-10-02','AL','344'),('1987-10-02','AL','357'),('1987-10-02','AL','357'),('1987-10-02','AL','368'),('1987-10-02','AL','381'),('1987-10-02','AL','396'),('1987-10-02','AL','397'),('1987-10-02','AL','397'),('1987-10-02','AL','416'),('1987-10-02','AL','416'),('1987-10-02','AL','417'),('1987-10-02','AL','438'),('1987-10-02','AL','438'),('1987-10-02','AL','446'),('1987-10-02','AL','451'),('1987-10-02','AL','451'),('1987-10-02','AL','491'),('1987-10-02','AL','491'),('1987-10-02','AL','523'),('1987-10-02','AL','523'),('1987-10-02','AL','523'),('1987-10-02','AL','525'),('1987-10-02','AL','525'),('1987-10-02','AL','533'),('1987-10-02','AL','533'),('1987-10-02','AL','546'),('1987-10-02','AL','546'),('1987-10-02','AL','556'),('1987-10-02','AL','556'),('1987-10-02','AL','601'),('1987-10-02','AL','601'),('1987-10-02','AL','627'),('1987-10-02','AL','629'),('1987-10-02','AL','670'),('1987-10-02','AL','670'),('1987-10-02','AL','670'),('1987-10-02','AL','673'),('1987-10-02','AL','680'),('1987-10-03','AA','2'),('1987-10-03','AA','2'),('1987-10-03','AA','2'),('1987-10-03','AA','7'),('1987-10-03','AA','7'),('1987-10-03','AA','26'),('1987-10-03','AA','34'),('1987-10-03','AA','36'),('1987-10-03','AA','91'),('1987-10-03','AA','101'),('1987-10-03','AA','101'),('1987-10-03','AA','109'),('1987-10-03','AA','109'),('1987-10-03','AA','112'),('1987-10-03','AA','123'),('1987-10-03','AA','123'),('1987-10-03','AA','165'),('1987-10-03','AA','165'),('1987-10-03','AA','165'),('1987-10-03','AA','176'),('1987-10-03','AA','176'),('1987-10-03','AA','176'),('1987-10-03','AA','176'),('1987-10-03','AA','179'),('1987-10-03','AA','179'),('1987-10-03','AA','215'),('1987-10-03','AA','215'),('1987-10-03','AA','231'),('1987-10-03','AA','231'),('1987-10-03','AA','263'),('1987-10-03','AA','263'),('1987-10-03','AA','268'),('1987-10-03','AA','281'),('1987-10-03','AA','287'),('1987-10-03','AA','287'),('1987-10-03','AA','309'),('1987-10-03','AA','309'),('1987-10-03','AA','309'),('1987-10-03','AA','341'),('1987-10-03','AA','344'),('1987-10-03','AA','344'),('1987-10-03','AA','347'),('1987-10-03','AA','347'),('1987-10-03','AA','368'),('1987-10-03','AA','381'),('1987-10-03','AA','381'),('1987-10-03','AA','381'),('1987-10-03','AA','396'),('1987-10-03','AA','396'),('1987-10-03','AA','397'),('1987-10-03','AA','397'),('1987-10-03','AA','417'),('1987-10-03','AA','417'),('1987-10-03','AA','446'),('1987-10-03','AA','451'),('1987-10-03','AA','451'),('1987-10-03','AA','460'),('1987-10-03','AA','460'),('1987-10-03','AA','491'),('1987-10-03','AA','491'),('1987-10-03','AA','504'),('1987-10-03','AA','504'),('1987-10-03','AA','519'),('1987-10-03','AA','519'),('1987-10-03','AA','523'),('1987-10-03','AA','523'),('1987-10-03','AA','525'),('1987-10-03','AA','525'),('1987-10-03','AA','525'),('1987-10-03','AA','533'),('1987-10-03','AA','533'),('1987-10-03','AA','546'),('1987-10-03','AA','546'),('1987-10-03','AA','546'),('1987-10-03','AA','546'),('1987-10-03','AA','556'),('1987-10-03','AA','556'),('1987-10-03','AA','556'),('1987-10-03','AA','597'),('1987-10-03','AA','597'),('1987-10-03','AA','597'),('1987-10-03','AA','601'),('1987-10-03','AA','601'),('1987-10-03','AA','627'),('1987-10-03','AA','629'),('1987-10-03','AA','629'),('1987-10-03','AA','670'),('1987-10-03','AA','673'),('1987-10-03','AA','673'),('1987-10-03','AA','680'),('1987-10-03','AA','680'),('1987-10-03','AA','817'),('1987-10-03','AA','817'),('1987-10-03','AA','824'),('1987-10-03','AA','824'),('1987-10-03','AA','824'),('1987-10-03','AA','824'),('1987-10-03','AA','832'),('1987-10-03','AA','832'),('1987-10-03','AA','852'),('1987-10-03','AA','852'),('1987-10-03','AA','866'),('1987-10-03','AA','866'),('1987-10-03','AA','871'),('1987-10-03','AA','871'),('1987-10-03','AA','880'),('1987-10-03','AA','880'),('1987-10-03','AA','880'),('1987-10-03','AA','880'),('1987-10-03','AA','883'),('1987-10-03','AA','883'),('1987-10-03','AA','885'),('1987-10-03','AA','885'),('1987-10-03','AA','885'),('1987-10-03','AA','890'),('1987-10-03','AA','890'),('1987-10-03','AA','893'),('1987-10-03','AA','893'),('1987-10-03','AA','905'),('1987-10-03','AA','905'),('1987-10-03','AA','915'),('1987-10-03','AA','929'),('1987-10-03','AA','929'),('1987-10-03','AA','936'),('1987-10-03','AA','936'),('1987-10-03','AA','937'),('1987-10-03','AA','937'),('1987-10-03','AA','955'),('1987-10-03','AA','955'),('1987-10-03','AA','966'),('1987-10-03','AA','1002'),('1987-10-03','AA','1002'),('1987-10-03','AA','1004'),('1987-10-03','AA','1004'),('1987-10-03','AA','1015'),('1987-10-03','AA','1015'),('1987-10-03','AA','1021'),('1987-10-03','AA','1041'),('1987-10-03','AA','1041'),('1987-10-03','AA','1046'),('1987-10-03','AA','1046'),('1987-10-03','AA','1048'),('1987-10-03','AA','1048'),('1987-10-03','AA','1061'),('1987-10-03','AA','1061'),('1987-10-03','AA','1088'),('1987-10-03','AA','1088'),('1987-10-03','AA','2033'),('1987-10-03','AA','2033'),('1987-10-03','AA','2050'),('1987-10-03','AA','2058'),('1987-10-03','AA','2071'),('1987-10-03','AA','2071'),('1987-10-03','AA','2086'),('1987-10-03','AA','2105'),('1987-10-03','AA','2111'),('1987-10-03','AA','2123'),('1987-10-03','AA','2123'),('1987-10-03','AA','2147'),('1987-10-03','AA','2147'),('1987-10-03','AA','2199'),('1987-10-03','AA','2207'),('1987-10-03','AA','2207'),('1987-10-03','AA','2245'),('1987-10-03','AA','2251'),('1987-10-03','AA','2251'),('1987-10-03','AA','2275'),('1987-10-03','AA','2278'),('1987-10-03','AA','2361'),('1987-10-03','AA','2490'),('1987-10-03','AA','2528'),('1987-10-03','AA','2528'),('1987-10-03','AA','2735'),('1987-10-03','AA','2735'),('1987-10-03','AL','2'),('1987-10-03','AL','2'),('1987-10-03','AL','7'),('1987-10-03','AL','7'),('1987-10-03','AL','26'),('1987-10-03','AL','26'),('1987-10-03','AL','34'),('1987-10-03','AL','34'),('1987-10-03','AL','36'),('1987-10-03','AL','36'),('1987-10-03','AL','45'),('1987-10-03','AL','45'),('1987-10-03','AL','45'),('1987-10-03','AL','91'),('1987-10-03','AL','91'),('1987-10-03','AL','104'),('1987-10-03','AL','104'),('1987-10-03','AL','109'),('1987-10-03','AL','112'),('1987-10-03','AL','112'),('1987-10-03','AL','149'),('1987-10-03','AL','160'),('1987-10-03','AL','160'),('1987-10-03','AL','165'),('1987-10-03','AL','171'),('1987-10-03','AL','171'),('1987-10-03','AL','176'),('1987-10-03','AL','176'),('1987-10-03','AL','179'),('1987-10-03','AL','215'),('1987-10-03','AL','231'),('1987-10-03','AL','263'),('1987-10-03','AL','287'),('1987-10-03','AL','287'),('1987-10-03','AL','309'),('1987-10-03','AL','309'),('1987-10-03','AL','344'),('1987-10-03','AL','344'),('1987-10-03','AL','357'),('1987-10-03','AL','357'),('1987-10-03','AL','381'),('1987-10-03','AL','396'),('1987-10-03','AL','397'),('1987-10-03','AL','397'),('1987-10-03','AL','397'),('1987-10-03','AL','416'),('1987-10-03','AL','417'),('1987-10-03','AL','438'),('1987-10-03','AL','451'),('1987-10-03','AL','451'),('1987-10-03','AL','491'),('1987-10-03','AL','491'),('1987-10-03','AL','523'),('1987-10-03','AL','523'),('1987-10-03','AL','525'),('1987-10-03','AL','525'),('1987-10-03','AL','533'),('1987-10-03','AL','546'),('1987-10-03','AL','546'),('1987-10-03','AL','556'),('1987-10-03','AL','556'),('1987-10-03','AL','601'),('1987-10-03','AL','601'),('1987-10-03','AL','627'),('1987-10-03','AL','670'),('1987-10-03','AL','673'),('1987-10-03','AL','680'),('1987-10-03','AL','905'),('1987-10-03','AL','936'),('1987-10-03','AL','966'),('1987-10-04','AA','2'),('1987-10-04','AA','2'),('1987-10-04','AA','2'),('1987-10-04','AA','7'),('1987-10-04','AA','7'),('1987-10-04','AA','26'),('1987-10-04','AA','34'),('1987-10-04','AA','36'),('1987-10-04','AA','91'),('1987-10-04','AA','101'),('1987-10-04','AA','101'),('1987-10-04','AA','109'),('1987-10-04','AA','109'),('1987-10-04','AA','112'),('1987-10-04','AA','123'),('1987-10-04','AA','123'),('1987-10-04','AA','160'),('1987-10-04','AA','165'),('1987-10-04','AA','165'),('1987-10-04','AA','165'),('1987-10-04','AA','176'),('1987-10-04','AA','176'),('1987-10-04','AA','176'),('1987-10-04','AA','176'),('1987-10-04','AA','179'),('1987-10-04','AA','179'),('1987-10-04','AA','215'),('1987-10-04','AA','215'),('1987-10-04','AA','231'),('1987-10-04','AA','231'),('1987-10-04','AA','263'),('1987-10-04','AA','263'),('1987-10-04','AA','268'),('1987-10-04','AA','268'),('1987-10-04','AA','281'),('1987-10-04','AA','287'),('1987-10-04','AA','287'),('1987-10-04','AA','309'),('1987-10-04','AA','309'),('1987-10-04','AA','309'),('1987-10-04','AA','341'),('1987-10-04','AA','344'),('1987-10-04','AA','344'),('1987-10-04','AA','347'),('1987-10-04','AA','347'),('1987-10-04','AA','381'),('1987-10-04','AA','381'),('1987-10-04','AA','381'),('1987-10-04','AA','396'),('1987-10-04','AA','396'),('1987-10-04','AA','397'),('1987-10-04','AA','397'),('1987-10-04','AA','417'),('1987-10-04','AA','417'),('1987-10-04','AA','446'),('1987-10-04','AA','451'),('1987-10-04','AA','451'),('1987-10-04','AA','460'),('1987-10-04','AA','460'),('1987-10-04','AA','491'),('1987-10-04','AA','491'),('1987-10-04','AA','504'),('1987-10-04','AA','504'),('1987-10-04','AA','519'),('1987-10-04','AA','519'),('1987-10-04','AA','523'),('1987-10-04','AA','523'),('1987-10-04','AA','525'),('1987-10-04','AA','525'),('1987-10-04','AA','525'),('1987-10-04','AA','533'),('1987-10-04','AA','533'),('1987-10-04','AA','533'),('1987-10-04','AA','546'),('1987-10-04','AA','546'),('1987-10-04','AA','546'),('1987-10-04','AA','546'),('1987-10-04','AA','556'),('1987-10-04','AA','556'),('1987-10-04','AA','556'),('1987-10-04','AA','597'),('1987-10-04','AA','597'),('1987-10-04','AA','597'),('1987-10-04','AA','601'),('1987-10-04','AA','601'),('1987-10-04','AA','627'),('1987-10-04','AA','629'),('1987-10-04','AA','629'),('1987-10-04','AA','670'),('1987-10-04','AA','673'),('1987-10-04','AA','673'),('1987-10-04','AA','680'),('1987-10-04','AA','680'),('1987-10-04','AA','817'),('1987-10-04','AA','817'),('1987-10-04','AA','824'),('1987-10-04','AA','824'),('1987-10-04','AA','824'),('1987-10-04','AA','832'),('1987-10-04','AA','832'),('1987-10-04','AA','852'),('1987-10-04','AA','852'),('1987-10-04','AA','866'),('1987-10-04','AA','866'),('1987-10-04','AA','871'),('1987-10-04','AA','871'),('1987-10-04','AA','880'),('1987-10-04','AA','880'),('1987-10-04','AA','880'),('1987-10-04','AA','880'),('1987-10-04','AA','883'),('1987-10-04','AA','883'),('1987-10-04','AA','885'),('1987-10-04','AA','885'),('1987-10-04','AA','890'),('1987-10-04','AA','890'),('1987-10-04','AA','893'),('1987-10-04','AA','893'),('1987-10-04','AA','905'),('1987-10-04','AA','905'),('1987-10-04','AA','915'),('1987-10-04','AA','929'),('1987-10-04','AA','929'),('1987-10-04','AA','936'),('1987-10-04','AA','936'),('1987-10-04','AA','937'),('1987-10-04','AA','937'),('1987-10-04','AA','955'),('1987-10-04','AA','955'),('1987-10-04','AA','966'),('1987-10-04','AA','1002'),('1987-10-04','AA','1002'),('1987-10-04','AA','1004'),('1987-10-04','AA','1004'),('1987-10-04','AA','1015'),('1987-10-04','AA','1021'),('1987-10-04','AA','1021'),('1987-10-04','AA','1041'),('1987-10-04','AA','1041'),('1987-10-04','AA','1046'),('1987-10-04','AA','1046'),('1987-10-04','AA','1048'),('1987-10-04','AA','1048'),('1987-10-04','AA','1061'),('1987-10-04','AA','1061'),('1987-10-04','AA','1088'),('1987-10-04','AA','1088'),('1987-10-04','AA','2033'),('1987-10-04','AA','2033'),('1987-10-04','AA','2050'),('1987-10-04','AA','2058'),('1987-10-04','AA','2071'),('1987-10-04','AA','2071'),('1987-10-04','AA','2086'),('1987-10-04','AA','2111'),('1987-10-04','AA','2123'),('1987-10-04','AA','2123'),('1987-10-04','AA','2147'),('1987-10-04','AA','2147'),('1987-10-04','AA','2199'),('1987-10-04','AA','2199'),('1987-10-04','AA','2207'),('1987-10-04','AA','2207'),('1987-10-04','AA','2230'),('1987-10-04','AA','2245'),('1987-10-04','AA','2251'),('1987-10-04','AA','2251'),('1987-10-04','AA','2275'),('1987-10-04','AA','2278'),('1987-10-04','AA','2357'),('1987-10-04','AA','2361'),('1987-10-04','AA','2490'),('1987-10-04','AA','2528'),('1987-10-04','AA','2528'),('1987-10-04','AA','2735'),('1987-10-04','AA','2735'),('1987-10-04','AA','2751'),('1987-10-04','AL','7'),('1987-10-04','AL','7'),('1987-10-04','AL','26'),('1987-10-04','AL','26'),('1987-10-04','AL','34'),('1987-10-04','AL','34'),('1987-10-04','AL','36'),('1987-10-04','AL','36'),('1987-10-04','AL','45'),('1987-10-04','AL','45'),('1987-10-04','AL','45'),('1987-10-04','AL','91'),('1987-10-04','AL','91'),('1987-10-04','AL','104'),('1987-10-04','AL','123'),('1987-10-04','AL','149'),('1987-10-04','AL','160'),('1987-10-04','AL','160'),('1987-10-04','AL','165'),('1987-10-04','AL','171'),('1987-10-04','AL','171'),('1987-10-04','AL','176'),('1987-10-04','AL','176'),('1987-10-04','AL','179'),('1987-10-04','AL','215'),('1987-10-04','AL','231'),('1987-10-04','AL','263'),('1987-10-04','AL','263'),('1987-10-04','AL','281'),('1987-10-04','AL','281'),('1987-10-04','AL','309'),('1987-10-04','AL','309'),('1987-10-04','AL','341'),('1987-10-04','AL','344'),('1987-10-04','AL','344'),('1987-10-04','AL','357'),('1987-10-04','AL','357'),('1987-10-04','AL','368'),('1987-10-04','AL','416'),('1987-10-04','AL','416'),('1987-10-04','AL','417'),('1987-10-04','AL','438'),('1987-10-04','AL','438'),('1987-10-04','AL','451'),('1987-10-04','AL','491'),('1987-10-04','AL','491'),('1987-10-04','AL','525'),('1987-10-04','AL','525'),('1987-10-04','AL','533'),('1987-10-04','AL','533'),('1987-10-04','AL','546'),('1987-10-04','AL','546'),('1987-10-04','AL','556'),('1987-10-04','AL','556'),('1987-10-04','AL','601'),('1987-10-04','AL','627'),('1987-10-04','AL','629'),('1987-10-04','AL','670'),('1987-10-04','AL','670'),('1987-10-04','AL','670'),('1987-10-04','AL','673'),('1987-10-04','AL','680'),('1987-10-04','AL','937'),('1987-10-04','AL','937'),('1987-10-04','AL','955'),('1987-10-12','AA','2'),('1987-10-12','AA','2'),('1987-10-12','AA','2'),('1987-10-12','AA','7'),('1987-10-12','AA','7'),('1987-10-12','AA','26'),('1987-10-12','AA','34'),('1987-10-12','AA','36'),('1987-10-12','AA','91'),('1987-10-12','AA','101'),('1987-10-12','AA','101'),('1987-10-12','AA','109'),('1987-10-12','AA','109'),('1987-10-12','AA','112'),('1987-10-12','AA','123'),('1987-10-12','AA','123'),('1987-10-12','AA','160'),('1987-10-12','AA','165'),('1987-10-12','AA','165'),('1987-10-12','AA','165'),('1987-10-12','AA','176'),('1987-10-12','AA','176'),('1987-10-12','AA','176'),('1987-10-12','AA','176'),('1987-10-12','AA','179'),('1987-10-12','AA','179'),('1987-10-12','AA','215'),('1987-10-12','AA','215'),('1987-10-12','AA','231'),('1987-10-12','AA','263'),('1987-10-12','AA','263'),('1987-10-12','AA','268'),('1987-10-12','AA','268'),('1987-10-12','AA','281'),('1987-10-12','AA','287'),('1987-10-12','AA','287'),('1987-10-12','AA','309'),('1987-10-12','AA','309'),('1987-10-12','AA','309'),('1987-10-12','AA','341'),('1987-10-12','AA','344'),('1987-10-12','AA','344'),('1987-10-12','AA','347'),('1987-10-12','AA','347'),('1987-10-12','AA','368'),('1987-10-12','AA','381'),('1987-10-12','AA','381'),('1987-10-12','AA','381'),('1987-10-12','AA','396'),('1987-10-12','AA','396'),('1987-10-12','AA','397'),('1987-10-12','AA','397'),('1987-10-12','AA','417'),('1987-10-12','AA','417'),('1987-10-12','AA','446'),('1987-10-12','AA','451'),('1987-10-12','AA','451'),('1987-10-12','AA','460'),('1987-10-12','AA','460'),('1987-10-12','AA','491'),('1987-10-12','AA','504'),('1987-10-12','AA','504'),('1987-10-12','AA','519'),('1987-10-12','AA','523'),('1987-10-12','AA','523'),('1987-10-12','AA','525'),('1987-10-12','AA','525'),('1987-10-12','AA','525'),('1987-10-12','AA','533'),('1987-10-12','AA','533'),('1987-10-12','AA','533'),('1987-10-12','AA','546'),('1987-10-12','AA','546'),('1987-10-12','AA','546'),('1987-10-12','AA','546'),('1987-10-12','AA','556'),('1987-10-12','AA','556'),('1987-10-12','AA','556'),('1987-10-12','AA','597'),('1987-10-12','AA','597'),('1987-10-12','AA','597'),('1987-10-12','AA','601'),('1987-10-12','AA','601'),('1987-10-12','AA','627'),('1987-10-12','AA','629'),('1987-10-12','AA','629'),('1987-10-12','AA','670'),('1987-10-12','AA','673'),('1987-10-12','AA','673'),('1987-10-12','AA','680'),('1987-10-12','AA','680'),('1987-10-12','AA','817'),('1987-10-12','AA','817'),('1987-10-12','AA','824'),('1987-10-12','AA','824'),('1987-10-12','AA','824'),('1987-10-12','AA','824'),('1987-10-12','AA','832'),('1987-10-12','AA','832'),('1987-10-12','AA','852'),('1987-10-12','AA','852'),('1987-10-12','AA','866'),('1987-10-12','AA','866'),('1987-10-12','AA','871'),('1987-10-12','AA','871'),('1987-10-12','AA','880'),('1987-10-12','AA','880'),('1987-10-12','AA','880'),('1987-10-12','AA','880'),('1987-10-12','AA','883'),('1987-10-12','AA','883'),('1987-10-12','AA','885'),('1987-10-12','AA','885'),('1987-10-12','AA','885'),('1987-10-12','AA','890'),('1987-10-12','AA','890'),('1987-10-12','AA','893'),('1987-10-12','AA','893'),('1987-10-12','AA','905'),('1987-10-12','AA','905'),('1987-10-12','AA','915'),('1987-10-12','AA','929'),('1987-10-12','AA','929'),('1987-10-12','AA','936'),('1987-10-12','AA','936'),('1987-10-12','AA','937'),('1987-10-12','AA','937'),('1987-10-12','AA','955'),('1987-10-12','AA','955'),('1987-10-12','AA','966'),('1987-10-12','AA','1002'),('1987-10-12','AA','1002'),('1987-10-12','AA','1004'),('1987-10-12','AA','1015'),('1987-10-12','AA','1015'),('1987-10-12','AA','1021'),('1987-10-12','AA','1021'),('1987-10-12','AA','1041'),('1987-10-12','AA','1041'),('1987-10-12','AA','1046'),('1987-10-12','AA','1046'),('1987-10-12','AA','1048'),('1987-10-12','AA','1048'),('1987-10-12','AA','1061'),('1987-10-12','AA','1061'),('1987-10-12','AA','1088'),('1987-10-12','AA','1088'),('1987-10-12','AA','2033'),('1987-10-12','AA','2033'),('1987-10-12','AA','2050'),('1987-10-12','AA','2058'),('1987-10-12','AA','2071'),('1987-10-12','AA','2071'),('1987-10-12','AA','2086'),('1987-10-12','AA','2105'),('1987-10-12','AA','2111'),('1987-10-12','AA','2123'),('1987-10-12','AA','2123'),('1987-10-12','AA','2147'),('1987-10-12','AA','2147'),('1987-10-12','AA','2199'),('1987-10-12','AA','2199'),('1987-10-12','AA','2207'),('1987-10-12','AA','2207'),('1987-10-12','AA','2217'),('1987-10-12','AA','2230'),('1987-10-12','AA','2245'),('1987-10-12','AA','2251'),('1987-10-12','AA','2251'),('1987-10-12','AA','2275'),('1987-10-12','AA','2278'),('1987-10-12','AA','2351'),('1987-10-12','AA','2357'),('1987-10-12','AA','2361'),('1987-10-12','AA','2490'),('1987-10-12','AA','2528'),('1987-10-12','AA','2528'),('1987-10-12','AA','2735'),('1987-10-12','AA','2735'),('1987-10-12','AA','2751'),('1987-10-12','AL','2'),('1987-10-12','AL','2'),('1987-10-12','AL','7'),('1987-10-12','AL','7'),('1987-10-12','AL','26'),('1987-10-12','AL','26'),('1987-10-12','AL','34'),('1987-10-12','AL','34'),('1987-10-12','AL','36'),('1987-10-12','AL','36'),('1987-10-12','AL','45'),('1987-10-12','AL','45'),('1987-10-12','AL','45'),('1987-10-12','AL','91'),('1987-10-12','AL','91'),('1987-10-12','AL','104'),('1987-10-12','AL','104'),('1987-10-12','AL','104'),('1987-10-12','AL','109'),('1987-10-12','AL','112'),('1987-10-12','AL','112'),('1987-10-12','AL','123'),('1987-10-12','AL','149'),('1987-10-12','AL','160'),('1987-10-12','AL','160'),('1987-10-12','AL','165'),('1987-10-12','AL','171'),('1987-10-12','AL','171'),('1987-10-12','AL','176'),('1987-10-12','AL','176'),('1987-10-12','AL','179'),('1987-10-12','AL','215'),('1987-10-12','AL','231'),('1987-10-12','AL','263'),('1987-10-12','AL','263'),('1987-10-12','AL','268'),('1987-10-12','AL','268'),('1987-10-12','AL','268'),('1987-10-12','AL','281'),('1987-10-12','AL','281'),('1987-10-12','AL','287'),('1987-10-12','AL','287'),('1987-10-12','AL','309'),('1987-10-12','AL','309'),('1987-10-12','AL','341'),('1987-10-12','AL','344'),('1987-10-12','AL','344'),('1987-10-12','AL','357'),('1987-10-12','AL','357'),('1987-10-12','AL','368'),('1987-10-12','AL','381'),('1987-10-12','AL','396'),('1987-10-12','AL','397'),('1987-10-12','AL','397'),('1987-10-12','AL','416'),('1987-10-12','AL','416'),('1987-10-12','AL','417'),('1987-10-12','AL','438'),('1987-10-12','AL','438'),('1987-10-12','AL','446'),('1987-10-12','AL','451'),('1987-10-12','AL','451'),('1987-10-12','AL','491'),('1987-10-12','AL','491'),('1987-10-12','AL','523'),('1987-10-12','AL','523'),('1987-10-12','AL','523'),('1987-10-12','AL','525'),('1987-10-12','AL','525'),('1987-10-12','AL','533'),('1987-10-12','AL','533'),('1987-10-12','AL','546'),('1987-10-12','AL','546'),('1987-10-12','AL','556'),('1987-10-12','AL','556'),('1987-10-12','AL','627'),('1987-10-12','AL','629'),('1987-10-12','AL','670'),('1987-10-12','AL','670'),('1987-10-12','AL','670'),('1987-10-12','AL','673'),('1987-10-13','AA','2'),('1987-10-13','AA','2'),('1987-10-13','AA','2'),('1987-10-13','AA','7'),('1987-10-13','AA','7'),('1987-10-13','AA','26'),('1987-10-13','AA','34'),('1987-10-13','AA','36'),('1987-10-13','AA','91'),('1987-10-13','AA','101'),('1987-10-13','AA','101'),('1987-10-13','AA','109'),('1987-10-13','AA','109'),('1987-10-13','AA','112'),('1987-10-13','AA','123'),('1987-10-13','AA','123'),('1987-10-13','AA','160'),('1987-10-13','AA','165'),('1987-10-13','AA','165'),('1987-10-13','AA','165'),('1987-10-13','AA','176'),('1987-10-13','AA','176'),('1987-10-13','AA','176'),('1987-10-13','AA','176'),('1987-10-13','AA','179'),('1987-10-13','AA','179'),('1987-10-13','AA','215'),('1987-10-13','AA','215'),('1987-10-13','AA','231'),('1987-10-13','AA','231'),('1987-10-13','AA','263'),('1987-10-13','AA','263'),('1987-10-13','AA','268'),('1987-10-13','AA','268'),('1987-10-13','AA','281'),('1987-10-13','AA','287'),('1987-10-13','AA','287'),('1987-10-13','AA','309'),('1987-10-13','AA','309'),('1987-10-13','AA','309'),('1987-10-13','AA','341'),('1987-10-13','AA','344'),('1987-10-13','AA','344'),('1987-10-13','AA','347'),('1987-10-13','AA','347'),('1987-10-13','AA','368'),('1987-10-13','AA','381'),('1987-10-13','AA','381'),('1987-10-13','AA','381'),('1987-10-13','AA','396'),('1987-10-13','AA','396'),('1987-10-13','AA','397'),('1987-10-13','AA','397'),('1987-10-13','AA','417'),('1987-10-13','AA','417'),('1987-10-13','AA','446'),('1987-10-13','AA','451'),('1987-10-13','AA','451'),('1987-10-13','AA','460'),('1987-10-13','AA','460'),('1987-10-13','AA','491'),('1987-10-13','AA','504'),('1987-10-13','AA','504'),('1987-10-13','AA','519'),('1987-10-13','AA','519'),('1987-10-13','AA','523'),('1987-10-13','AA','523'),('1987-10-13','AA','525'),('1987-10-13','AA','525'),('1987-10-13','AA','533'),('1987-10-13','AA','533'),('1987-10-13','AA','533'),('1987-10-13','AA','546'),('1987-10-13','AA','546'),('1987-10-13','AA','546'),('1987-10-13','AA','556'),('1987-10-13','AA','556'),('1987-10-13','AA','556'),('1987-10-13','AA','597'),('1987-10-13','AA','597'),('1987-10-13','AA','597'),('1987-10-13','AA','601'),('1987-10-13','AA','601'),('1987-10-13','AA','627'),('1987-10-13','AA','629'),('1987-10-13','AA','629'),('1987-10-13','AA','673'),('1987-10-13','AA','673'),('1987-10-13','AA','680'),('1987-10-13','AA','817'),('1987-10-13','AA','817'),('1987-10-13','AA','824'),('1987-10-13','AA','824'),('1987-10-13','AA','824'),('1987-10-13','AA','832'),('1987-10-13','AA','832'),('1987-10-13','AA','852'),('1987-10-13','AA','866'),('1987-10-13','AA','866'),('1987-10-13','AA','871'),('1987-10-13','AA','871'),('1987-10-13','AA','880'),('1987-10-13','AA','880'),('1987-10-13','AA','880'),('1987-10-13','AA','880'),('1987-10-13','AA','883'),('1987-10-13','AA','883'),('1987-10-13','AA','885'),('1987-10-13','AA','885'),('1987-10-13','AA','885'),('1987-10-13','AA','890'),('1987-10-13','AA','890'),('1987-10-13','AA','893'),('1987-10-13','AA','893'),('1987-10-13','AA','905'),('1987-10-13','AA','905'),('1987-10-13','AA','915'),('1987-10-13','AA','929'),('1987-10-13','AA','929'),('1987-10-13','AA','936'),('1987-10-13','AA','936'),('1987-10-13','AA','937'),('1987-10-13','AA','937'),('1987-10-13','AA','955'),('1987-10-13','AA','955'),('1987-10-13','AA','966'),('1987-10-13','AA','1002'),('1987-10-13','AA','1002'),('1987-10-13','AA','1004'),('1987-10-13','AA','1004'),('1987-10-13','AA','1015'),('1987-10-13','AA','1015'),('1987-10-13','AA','1021'),('1987-10-13','AA','1021'),('1987-10-13','AA','1041'),('1987-10-13','AA','1041'),('1987-10-13','AA','1046'),('1987-10-13','AA','1046'),('1987-10-13','AA','1048'),('1987-10-13','AA','1048'),('1987-10-13','AA','1061'),('1987-10-13','AA','1061'),('1987-10-13','AA','1088'),('1987-10-13','AA','1088'),('1987-10-13','AA','2033'),('1987-10-13','AA','2050'),('1987-10-13','AA','2071'),('1987-10-13','AA','2071'),('1987-10-13','AA','2086'),('1987-10-13','AA','2105'),('1987-10-13','AA','2111'),('1987-10-13','AA','2123'),('1987-10-13','AA','2123'),('1987-10-13','AA','2147'),('1987-10-13','AA','2147'),('1987-10-13','AA','2199'),('1987-10-13','AA','2199'),('1987-10-13','AA','2207'),('1987-10-13','AA','2207'),('1987-10-13','AA','2217'),('1987-10-13','AA','2230'),('1987-10-13','AA','2245'),('1987-10-13','AA','2251'),('1987-10-13','AA','2251'),('1987-10-13','AA','2275'),('1987-10-13','AA','2351'),('1987-10-13','AA','2357'),('1987-10-13','AA','2361'),('1987-10-13','AA','2490'),('1987-10-13','AA','2528'),('1987-10-13','AA','2528'),('1987-10-13','AA','2735'),('1987-10-13','AA','2735'),('1987-10-13','AA','2751'),('1987-10-13','AL','2'),('1987-10-13','AL','2'),('1987-10-13','AL','7'),('1987-10-13','AL','7'),('1987-10-13','AL','26'),('1987-10-13','AL','26'),('1987-10-13','AL','34'),('1987-10-13','AL','34'),('1987-10-13','AL','36'),('1987-10-13','AL','36'),('1987-10-13','AL','45'),('1987-10-13','AL','45'),('1987-10-13','AL','45'),('1987-10-13','AL','91'),('1987-10-13','AL','91'),('1987-10-13','AL','104'),('1987-10-13','AL','104'),('1987-10-13','AL','104'),('1987-10-13','AL','109'),('1987-10-13','AL','112'),('1987-10-13','AL','112'),('1987-10-13','AL','123'),('1987-10-13','AL','149'),('1987-10-13','AL','160'),('1987-10-13','AL','160'),('1987-10-13','AL','171'),('1987-10-13','AL','171'),('1987-10-13','AL','176'),('1987-10-13','AL','176'),('1987-10-13','AL','179'),('1987-10-13','AL','231'),('1987-10-13','AL','263'),('1987-10-13','AL','263'),('1987-10-13','AL','268'),('1987-10-13','AL','268'),('1987-10-13','AL','268'),('1987-10-13','AL','281'),('1987-10-13','AL','281'),('1987-10-13','AL','287'),('1987-10-13','AL','287'),('1987-10-13','AL','309'),('1987-10-13','AL','309'),('1987-10-13','AL','341'),('1987-10-13','AL','357'),('1987-10-13','AL','357'),('1987-10-13','AL','368'),('1987-10-13','AL','381'),('1987-10-13','AL','396'),('1987-10-13','AL','397'),('1987-10-13','AL','397'),('1987-10-13','AL','416'),('1987-10-13','AL','417'),('1987-10-13','AL','438'),('1987-10-13','AL','438'),('1987-10-13','AL','446'),('1987-10-13','AL','451'),('1987-10-13','AL','451'),('1987-10-13','AL','491'),('1987-10-13','AL','491'),('1987-10-13','AL','523'),('1987-10-13','AL','523'),('1987-10-13','AL','523'),('1987-10-13','AL','525'),('1987-10-13','AL','525'),('1987-10-13','AL','533'),('1987-10-13','AL','533'),('1987-10-13','AL','546'),('1987-10-13','AL','546'),('1987-10-13','AL','556'),('1987-10-13','AL','556'),('1987-10-13','AL','601'),('1987-10-13','AL','601'),('1987-10-13','AL','627'),('1987-10-13','AL','629'),('1987-10-13','AL','670'),('1987-10-13','AL','670'),('1987-10-13','AL','670'),('1987-10-13','AL','673'),('1987-10-13','AL','680'),('1987-10-14','AA','2'),('1987-10-14','AA','2'),('1987-10-14','AA','2'),('1987-10-14','AA','7'),('1987-10-14','AA','7'),('1987-10-14','AA','26'),('1987-10-14','AA','34'),('1987-10-14','AA','36'),('1987-10-14','AA','91'),('1987-10-14','AA','101'),('1987-10-14','AA','101'),('1987-10-14','AA','109'),('1987-10-14','AA','109'),('1987-10-14','AA','112'),('1987-10-14','AA','123'),('1987-10-14','AA','123'),('1987-10-14','AA','160'),('1987-10-14','AA','165'),('1987-10-14','AA','165'),('1987-10-14','AA','176'),('1987-10-14','AA','176'),('1987-10-14','AA','176'),('1987-10-14','AA','176'),('1987-10-14','AA','179'),('1987-10-14','AA','179'),('1987-10-14','AA','215'),('1987-10-14','AA','215'),('1987-10-14','AA','231'),('1987-10-14','AA','231'),('1987-10-14','AA','263'),('1987-10-14','AA','263'),('1987-10-14','AA','268'),('1987-10-14','AA','268'),('1987-10-14','AA','281'),('1987-10-14','AA','287'),('1987-10-14','AA','309'),('1987-10-14','AA','309'),('1987-10-14','AA','309'),('1987-10-14','AA','341'),('1987-10-14','AA','344'),('1987-10-14','AA','344'),('1987-10-14','AA','347'),('1987-10-14','AA','347'),('1987-10-14','AA','368'),('1987-10-14','AA','381'),('1987-10-14','AA','381'),('1987-10-14','AA','381'),('1987-10-14','AA','396'),('1987-10-14','AA','396'),('1987-10-14','AA','397'),('1987-10-14','AA','417'),('1987-10-14','AA','446'),('1987-10-14','AA','451'),('1987-10-14','AA','451'),('1987-10-14','AA','460'),('1987-10-14','AA','460'),('1987-10-14','AA','491'),('1987-10-14','AA','504'),('1987-10-14','AA','519'),('1987-10-14','AA','519'),('1987-10-14','AA','523'),('1987-10-14','AA','523'),('1987-10-14','AA','525'),('1987-10-14','AA','525'),('1987-10-14','AA','533'),('1987-10-14','AA','533'),('1987-10-14','AA','533'),('1987-10-14','AA','546'),('1987-10-14','AA','546'),('1987-10-14','AA','546'),('1987-10-14','AA','546'),('1987-10-14','AA','556'),('1987-10-14','AA','556'),('1987-10-14','AA','556'),('1987-10-14','AA','597'),('1987-10-14','AA','597'),('1987-10-14','AA','597'),('1987-10-14','AA','601'),('1987-10-14','AA','601'),('1987-10-14','AA','627'),('1987-10-14','AA','629'),('1987-10-14','AA','629'),('1987-10-14','AA','670'),('1987-10-14','AA','673'),('1987-10-14','AA','673'),('1987-10-14','AA','680'),('1987-10-14','AA','680'),('1987-10-14','AA','817'),('1987-10-14','AA','817'),('1987-10-14','AA','824'),('1987-10-14','AA','824'),('1987-10-14','AA','824'),('1987-10-14','AA','824'),('1987-10-14','AA','832'),('1987-10-14','AA','832'),('1987-10-14','AA','852'),('1987-10-14','AA','866'),('1987-10-14','AA','866'),('1987-10-14','AA','871'),('1987-10-14','AA','871'),('1987-10-14','AA','880'),('1987-10-14','AA','880'),('1987-10-14','AA','880'),('1987-10-14','AA','883'),('1987-10-14','AA','883'),('1987-10-14','AA','885'),('1987-10-14','AA','885'),('1987-10-14','AA','885'),('1987-10-14','AA','890'),('1987-10-14','AA','890'),('1987-10-14','AA','893'),('1987-10-14','AA','893'),('1987-10-14','AA','905'),('1987-10-14','AA','905'),('1987-10-14','AA','915'),('1987-10-14','AA','929'),('1987-10-14','AA','929'),('1987-10-14','AA','936'),('1987-10-14','AA','936'),('1987-10-14','AA','937'),('1987-10-14','AA','937'),('1987-10-14','AA','955'),('1987-10-14','AA','955'),('1987-10-14','AA','966'),('1987-10-14','AA','1002'),('1987-10-14','AA','1002'),('1987-10-14','AA','1004'),('1987-10-14','AA','1004'),('1987-10-14','AA','1015'),('1987-10-14','AA','1015'),('1987-10-14','AA','1021'),('1987-10-14','AA','1021'),('1987-10-14','AA','1041'),('1987-10-14','AA','1041'),('1987-10-14','AA','1046'),('1987-10-14','AA','1046'),('1987-10-14','AA','1048'),('1987-10-14','AA','1048'),('1987-10-14','AA','1061'),('1987-10-14','AA','1061'),('1987-10-14','AA','1088'),('1987-10-14','AA','1088'),('1987-10-14','AA','2033'),('1987-10-14','AA','2033'),('1987-10-14','AA','2050'),('1987-10-14','AA','2058'),('1987-10-14','AA','2071'),('1987-10-14','AA','2071'),('1987-10-14','AA','2086'),('1987-10-14','AA','2111'),('1987-10-14','AA','2123'),('1987-10-14','AA','2123'),('1987-10-14','AA','2147'),('1987-10-14','AA','2147'),('1987-10-14','AA','2199'),('1987-10-14','AA','2199'),('1987-10-14','AA','2207'),('1987-10-14','AA','2207'),('1987-10-14','AA','2217'),('1987-10-14','AA','2230'),('1987-10-14','AA','2251'),('1987-10-14','AA','2251'),('1987-10-14','AA','2278'),('1987-10-14','AA','2351'),('1987-10-14','AA','2357'),('1987-10-14','AA','2490'),('1987-10-14','AA','2528'),('1987-10-14','AA','2528'),('1987-10-14','AA','2735'),('1987-10-14','AA','2735'),('1987-10-14','AA','2751'),('1987-10-14','AL','2'),('1987-10-14','AL','2'),('1987-10-14','AL','7'),('1987-10-14','AL','7'),('1987-10-14','AL','26'),('1987-10-14','AL','26'),('1987-10-14','AL','34'),('1987-10-14','AL','36'),('1987-10-14','AL','36'),('1987-10-14','AL','45'),('1987-10-14','AL','45'),('1987-10-14','AL','91'),('1987-10-14','AL','91'),('1987-10-14','AL','104'),('1987-10-14','AL','104'),('1987-10-14','AL','104'),('1987-10-14','AL','109'),('1987-10-14','AL','112'),('1987-10-14','AL','112'),('1987-10-14','AL','123'),('1987-10-14','AL','149'),('1987-10-14','AL','160'),('1987-10-14','AL','160'),('1987-10-14','AL','165'),('1987-10-14','AL','171'),('1987-10-14','AL','171'),('1987-10-14','AL','176'),('1987-10-14','AL','176'),('1987-10-14','AL','179'),('1987-10-14','AL','215'),('1987-10-14','AL','231'),('1987-10-14','AL','263'),('1987-10-14','AL','263'),('1987-10-14','AL','268'),('1987-10-14','AL','268'),('1987-10-14','AL','268'),('1987-10-14','AL','281'),('1987-10-14','AL','281'),('1987-10-14','AL','287'),('1987-10-14','AL','287'),('1987-10-14','AL','309'),('1987-10-14','AL','309'),('1987-10-14','AL','341'),('1987-10-14','AL','344'),('1987-10-14','AL','344'),('1987-10-14','AL','357'),('1987-10-14','AL','357'),('1987-10-14','AL','368'),('1987-10-14','AL','381'),('1987-10-14','AL','396'),('1987-10-14','AL','397'),('1987-10-14','AL','397'),('1987-10-14','AL','416'),('1987-10-14','AL','416'),('1987-10-14','AL','417'),('1987-10-14','AL','438'),('1987-10-14','AL','438'),('1987-10-14','AL','446'),('1987-10-14','AL','451'),('1987-10-14','AL','451'),('1987-10-14','AL','491'),('1987-10-14','AL','491'),('1987-10-14','AL','523'),('1987-10-14','AL','523'),('1987-10-14','AL','523'),('1987-10-14','AL','525'),('1987-10-14','AL','525'),('1987-10-14','AL','533'),('1987-10-14','AL','533'),('1987-10-14','AL','546'),('1987-10-14','AL','546'),('1987-10-14','AL','556'),('1987-10-14','AL','556'),('1987-10-14','AL','601'),('1987-10-14','AL','601'),('1987-10-14','AL','627'),('1987-10-14','AL','629'),('1987-10-14','AL','670'),('1987-10-14','AL','670'),('1987-10-14','AL','670'),('1987-10-14','AL','673'),('1987-10-14','AL','680'),('1987-10-15','AA','2'),('1987-10-15','AA','2'),('1987-10-15','AA','2'),('1987-10-15','AA','7'),('1987-10-15','AA','7'),('1987-10-15','AA','26'),('1987-10-15','AA','34'),('1987-10-15','AA','36'),('1987-10-15','AA','91'),('1987-10-15','AA','101'),('1987-10-15','AA','101'),('1987-10-15','AA','109'),('1987-10-15','AA','109'),('1987-10-15','AA','112'),('1987-10-15','AA','123'),('1987-10-15','AA','123'),('1987-10-15','AA','160'),('1987-10-15','AA','165'),('1987-10-15','AA','165'),('1987-10-15','AA','165'),('1987-10-15','AA','176'),('1987-10-15','AA','176'),('1987-10-15','AA','176'),('1987-10-15','AA','176'),('1987-10-15','AA','179'),('1987-10-15','AA','179'),('1987-10-15','AA','215'),('1987-10-15','AA','215'),('1987-10-15','AA','231'),('1987-10-15','AA','263'),('1987-10-15','AA','263'),('1987-10-15','AA','268'),('1987-10-15','AA','268'),('1987-10-15','AA','281'),('1987-10-15','AA','287'),('1987-10-15','AA','287'),('1987-10-15','AA','309'),('1987-10-15','AA','309'),('1987-10-15','AA','309'),('1987-10-15','AA','341'),('1987-10-15','AA','344'),('1987-10-15','AA','344'),('1987-10-15','AA','347'),('1987-10-15','AA','347'),('1987-10-15','AA','368'),('1987-10-15','AA','381'),('1987-10-15','AA','381'),('1987-10-15','AA','396'),('1987-10-15','AA','396'),('1987-10-15','AA','397'),('1987-10-15','AA','397'),('1987-10-15','AA','417'),('1987-10-15','AA','417'),('1987-10-15','AA','446'),('1987-10-15','AA','451'),('1987-10-15','AA','451'),('1987-10-15','AA','460'),('1987-10-15','AA','460'),('1987-10-15','AA','491'),('1987-10-15','AA','504'),('1987-10-15','AA','504'),('1987-10-15','AA','519'),('1987-10-15','AA','519'),('1987-10-15','AA','523'),('1987-10-15','AA','523'),('1987-10-15','AA','525'),('1987-10-15','AA','525'),('1987-10-15','AA','525'),('1987-10-15','AA','533'),('1987-10-15','AA','533'),('1987-10-15','AA','533'),('1987-10-15','AA','546'),('1987-10-15','AA','546'),('1987-10-15','AA','546'),('1987-10-15','AA','546'),('1987-10-15','AA','556'),('1987-10-15','AA','556'),('1987-10-15','AA','556'),('1987-10-15','AA','597'),('1987-10-15','AA','597'),('1987-10-15','AA','597'),('1987-10-15','AA','601'),('1987-10-15','AA','601'),('1987-10-15','AA','629'),('1987-10-15','AA','629'),('1987-10-15','AA','670'),('1987-10-15','AA','673'),('1987-10-15','AA','673'),('1987-10-15','AA','680'),('1987-10-15','AA','680'),('1987-10-15','AA','817'),('1987-10-15','AA','817'),('1987-10-15','AA','824'),('1987-10-15','AA','824'),('1987-10-15','AA','824'),('1987-10-15','AA','824'),('1987-10-15','AA','832'),('1987-10-15','AA','832'),('1987-10-15','AA','852'),('1987-10-15','AA','866'),('1987-10-15','AA','866'),('1987-10-15','AA','871'),('1987-10-15','AA','871'),('1987-10-15','AA','880'),('1987-10-15','AA','880'),('1987-10-15','AA','880'),('1987-10-15','AA','883'),('1987-10-15','AA','883'),('1987-10-15','AA','885'),('1987-10-15','AA','885'),('1987-10-15','AA','885'),('1987-10-15','AA','890'),('1987-10-15','AA','890'),('1987-10-15','AA','893'),('1987-10-15','AA','893'),('1987-10-15','AA','905'),('1987-10-15','AA','905'),('1987-10-15','AA','915'),('1987-10-15','AA','929'),('1987-10-15','AA','929'),('1987-10-15','AA','936'),('1987-10-15','AA','936'),('1987-10-15','AA','937'),('1987-10-15','AA','955'),('1987-10-15','AA','955'),('1987-10-15','AA','966'),('1987-10-15','AA','1002'),('1987-10-15','AA','1002'),('1987-10-15','AA','1004'),('1987-10-15','AA','1004'),('1987-10-15','AA','1015'),('1987-10-15','AA','1015'),('1987-10-15','AA','1021'),('1987-10-15','AA','1021'),('1987-10-15','AA','1041'),('1987-10-15','AA','1041'),('1987-10-15','AA','1046'),('1987-10-15','AA','1046'),('1987-10-15','AA','1048'),('1987-10-15','AA','1048'),('1987-10-15','AA','1061'),('1987-10-15','AA','1061'),('1987-10-15','AA','1088'),('1987-10-15','AA','1088'),('1987-10-15','AA','2033'),('1987-10-15','AA','2033'),('1987-10-15','AA','2050'),('1987-10-15','AA','2058'),('1987-10-15','AA','2071'),('1987-10-15','AA','2071'),('1987-10-15','AA','2086'),('1987-10-15','AA','2105'),('1987-10-15','AA','2111'),('1987-10-15','AA','2123'),('1987-10-15','AA','2123'),('1987-10-15','AA','2147'),('1987-10-15','AA','2147'),('1987-10-15','AA','2199'),('1987-10-15','AA','2199'),('1987-10-15','AA','2207'),('1987-10-15','AA','2207'),('1987-10-15','AA','2217'),('1987-10-15','AA','2230'),('1987-10-15','AA','2245'),('1987-10-15','AA','2251'),('1987-10-15','AA','2251'),('1987-10-15','AA','2275'),('1987-10-15','AA','2278'),('1987-10-15','AA','2351'),('1987-10-15','AA','2357'),('1987-10-15','AA','2361'),('1987-10-15','AA','2490'),('1987-10-15','AA','2528'),('1987-10-15','AA','2528'),('1987-10-15','AA','2735'),('1987-10-15','AA','2735'),('1987-10-15','AA','2751'),('1987-10-15','AL','2'),('1987-10-15','AL','2'),('1987-10-15','AL','7'),('1987-10-15','AL','7'),('1987-10-15','AL','26'),('1987-10-15','AL','26'),('1987-10-15','AL','34'),('1987-10-15','AL','34'),('1987-10-15','AL','36'),('1987-10-15','AL','36'),('1987-10-15','AL','45'),('1987-10-15','AL','45'),('1987-10-15','AL','45'),('1987-10-15','AL','91'),('1987-10-15','AL','91'),('1987-10-15','AL','104'),('1987-10-15','AL','104'),('1987-10-15','AL','104'),('1987-10-15','AL','109'),('1987-10-15','AL','112'),('1987-10-15','AL','112'),('1987-10-15','AL','123'),('1987-10-15','AL','149'),('1987-10-15','AL','160'),('1987-10-15','AL','160'),('1987-10-15','AL','165'),('1987-10-15','AL','171'),('1987-10-15','AL','171'),('1987-10-15','AL','176'),('1987-10-15','AL','176'),('1987-10-15','AL','179'),('1987-10-15','AL','215'),('1987-10-15','AL','231'),('1987-10-15','AL','263'),('1987-10-15','AL','263'),('1987-10-15','AL','268'),('1987-10-15','AL','268'),('1987-10-15','AL','268'),('1987-10-15','AL','281'),('1987-10-15','AL','281'),('1987-10-15','AL','287'),('1987-10-15','AL','287'),('1987-10-15','AL','309'),('1987-10-15','AL','309'),('1987-10-15','AL','341'),('1987-10-15','AL','344'),('1987-10-15','AL','344'),('1987-10-15','AL','357'),('1987-10-15','AL','357'),('1987-10-15','AL','368'),('1987-10-15','AL','381'),('1987-10-15','AL','396'),('1987-10-15','AL','397'),('1987-10-15','AL','397'),('1987-10-15','AL','416'),('1987-10-15','AL','416'),('1987-10-15','AL','417'),('1987-10-15','AL','438'),('1987-10-15','AL','438'),('1987-10-15','AL','446'),('1987-10-15','AL','451'),('1987-10-15','AL','451'),('1987-10-15','AL','491'),('1987-10-15','AL','491'),('1987-10-15','AL','523'),('1987-10-15','AL','523'),('1987-10-15','AL','523'),('1987-10-15','AL','525'),('1987-10-15','AL','525'),('1987-10-15','AL','533'),('1987-10-15','AL','533'),('1987-10-15','AL','546'),('1987-10-15','AL','546'),('1987-10-15','AL','556'),('1987-10-15','AL','556'),('1987-10-15','AL','601'),('1987-10-15','AL','601'),('1987-10-15','AL','627'),('1987-10-15','AL','629'),('1987-10-15','AL','670'),('1987-10-15','AL','670'),('1987-10-15','AL','670'),('1987-10-15','AL','673'),('1987-10-15','AL','680'),('1987-10-16','AA','2'),('1987-10-16','AA','2'),('1987-10-16','AA','2'),('1987-10-16','AA','7'),('1987-10-16','AA','7'),('1987-10-16','AA','26'),('1987-10-16','AA','34'),('1987-10-16','AA','36'),('1987-10-16','AA','91'),('1987-10-16','AA','101'),('1987-10-16','AA','101'),('1987-10-16','AA','109'),('1987-10-16','AA','109'),('1987-10-16','AA','112'),('1987-10-16','AA','123'),('1987-10-16','AA','160'),('1987-10-16','AA','165'),('1987-10-16','AA','165'),('1987-10-16','AA','176'),('1987-10-16','AA','176'),('1987-10-16','AA','176'),('1987-10-16','AA','176'),('1987-10-16','AA','179'),('1987-10-16','AA','179'),('1987-10-16','AA','215'),('1987-10-16','AA','215'),('1987-10-16','AA','231'),('1987-10-16','AA','263'),('1987-10-16','AA','263'),('1987-10-16','AA','268'),('1987-10-16','AA','281'),('1987-10-16','AA','287'),('1987-10-16','AA','287'),('1987-10-16','AA','309'),('1987-10-16','AA','309'),('1987-10-16','AA','309'),('1987-10-16','AA','341'),('1987-10-16','AA','344'),('1987-10-16','AA','344'),('1987-10-16','AA','347'),('1987-10-16','AA','347'),('1987-10-16','AA','368'),('1987-10-16','AA','381'),('1987-10-16','AA','381'),('1987-10-16','AA','381'),('1987-10-16','AA','396'),('1987-10-16','AA','396'),('1987-10-16','AA','397'),('1987-10-16','AA','417'),('1987-10-16','AA','417'),('1987-10-16','AA','446'),('1987-10-16','AA','451'),('1987-10-16','AA','451'),('1987-10-16','AA','460'),('1987-10-16','AA','460'),('1987-10-16','AA','491'),('1987-10-16','AA','504'),('1987-10-16','AA','504'),('1987-10-16','AA','519'),('1987-10-16','AA','519'),('1987-10-16','AA','523'),('1987-10-16','AA','523'),('1987-10-16','AA','525'),('1987-10-16','AA','525'),('1987-10-16','AA','533'),('1987-10-16','AA','533'),('1987-10-16','AA','546'),('1987-10-16','AA','546'),('1987-10-16','AA','546'),('1987-10-16','AA','546'),('1987-10-16','AA','556'),('1987-10-16','AA','556'),('1987-10-16','AA','556'),('1987-10-16','AA','597'),('1987-10-16','AA','597'),('1987-10-16','AA','597'),('1987-10-16','AA','601'),('1987-10-16','AA','601'),('1987-10-16','AA','627'),('1987-10-16','AA','629'),('1987-10-16','AA','629'),('1987-10-16','AA','670'),('1987-10-16','AA','673'),('1987-10-16','AA','673'),('1987-10-16','AA','680'),('1987-10-16','AA','680'),('1987-10-16','AA','817'),('1987-10-16','AA','817'),('1987-10-16','AA','824'),('1987-10-16','AA','824'),('1987-10-16','AA','824'),('1987-10-16','AA','824'),('1987-10-16','AA','832'),('1987-10-16','AA','832'),('1987-10-16','AA','852'),('1987-10-16','AA','866'),('1987-10-16','AA','866'),('1987-10-16','AA','871'),('1987-10-16','AA','871'),('1987-10-16','AA','880'),('1987-10-16','AA','880'),('1987-10-16','AA','880'),('1987-10-16','AA','880'),('1987-10-16','AA','883'),('1987-10-16','AA','883'),('1987-10-16','AA','885'),('1987-10-16','AA','885'),('1987-10-16','AA','885'),('1987-10-16','AA','890'),('1987-10-16','AA','890'),('1987-10-16','AA','893'),('1987-10-16','AA','893'),('1987-10-16','AA','905'),('1987-10-16','AA','905'),('1987-10-16','AA','915'),('1987-10-16','AA','929'),('1987-10-16','AA','929'),('1987-10-16','AA','936'),('1987-10-16','AA','936'),('1987-10-16','AA','937'),('1987-10-16','AA','937'),('1987-10-16','AA','955'),('1987-10-16','AA','955'),('1987-10-16','AA','966'),('1987-10-16','AA','1002'),('1987-10-16','AA','1002'),('1987-10-16','AA','1004'),('1987-10-16','AA','1004'),('1987-10-16','AA','1015'),('1987-10-16','AA','1015'),('1987-10-16','AA','1021'),('1987-10-16','AA','1021'),('1987-10-16','AA','1041'),('1987-10-16','AA','1041'),('1987-10-16','AA','1046'),('1987-10-16','AA','1046'),('1987-10-16','AA','1048'),('1987-10-16','AA','1048'),('1987-10-16','AA','1061'),('1987-10-16','AA','1061'),('1987-10-16','AA','1088'),('1987-10-16','AA','1088'),('1987-10-16','AA','2033'),('1987-10-16','AA','2033'),('1987-10-16','AA','2050'),('1987-10-16','AA','2058'),('1987-10-16','AA','2071'),('1987-10-16','AA','2071'),('1987-10-16','AA','2086'),('1987-10-16','AA','2105'),('1987-10-16','AA','2111'),('1987-10-16','AA','2123'),('1987-10-16','AA','2123'),('1987-10-16','AA','2147'),('1987-10-16','AA','2147'),('1987-10-16','AA','2199'),('1987-10-16','AA','2199'),('1987-10-16','AA','2207'),('1987-10-16','AA','2207'),('1987-10-16','AA','2217'),('1987-10-16','AA','2230'),('1987-10-16','AA','2245'),('1987-10-16','AA','2251'),('1987-10-16','AA','2251'),('1987-10-16','AA','2275'),('1987-10-16','AA','2278'),('1987-10-16','AA','2351'),('1987-10-16','AA','2357'),('1987-10-16','AA','2361'),('1987-10-16','AA','2490'),('1987-10-16','AA','2528'),('1987-10-16','AA','2528'),('1987-10-16','AA','2735'),('1987-10-16','AA','2735'),('1987-10-16','AA','2751'),('1987-10-16','AL','2'),('1987-10-16','AL','2'),('1987-10-16','AL','7'),('1987-10-16','AL','7'),('1987-10-16','AL','26'),('1987-10-16','AL','26'),('1987-10-16','AL','34'),('1987-10-16','AL','36'),('1987-10-16','AL','36'),('1987-10-16','AL','45'),('1987-10-16','AL','45'),('1987-10-16','AL','45'),('1987-10-16','AL','91'),('1987-10-16','AL','91'),('1987-10-16','AL','104'),('1987-10-16','AL','104'),('1987-10-16','AL','109'),('1987-10-16','AL','112'),('1987-10-16','AL','112'),('1987-10-16','AL','123'),('1987-10-16','AL','149'),('1987-10-16','AL','160'),('1987-10-16','AL','160'),('1987-10-16','AL','165'),('1987-10-16','AL','171'),('1987-10-16','AL','171'),('1987-10-16','AL','176'),('1987-10-16','AL','176'),('1987-10-16','AL','179'),('1987-10-16','AL','215'),('1987-10-16','AL','231'),('1987-10-16','AL','263'),('1987-10-16','AL','263'),('1987-10-16','AL','268'),('1987-10-16','AL','268'),('1987-10-16','AL','268'),('1987-10-16','AL','281'),('1987-10-16','AL','281'),('1987-10-16','AL','287'),('1987-10-16','AL','287'),('1987-10-16','AL','309'),('1987-10-16','AL','309'),('1987-10-16','AL','341'),('1987-10-16','AL','344'),('1987-10-16','AL','344'),('1987-10-16','AL','357'),('1987-10-16','AL','357'),('1987-10-16','AL','368'),('1987-10-16','AL','381'),('1987-10-16','AL','396'),('1987-10-16','AL','397'),('1987-10-16','AL','397'),('1987-10-16','AL','416'),('1987-10-16','AL','416'),('1987-10-16','AL','417'),('1987-10-16','AL','438'),('1987-10-16','AL','438'),('1987-10-16','AL','446'),('1987-10-16','AL','451'),('1987-10-16','AL','451'),('1987-10-16','AL','491'),('1987-10-16','AL','491'),('1987-10-16','AL','523'),('1987-10-16','AL','523'),('1987-10-16','AL','523'),('1987-10-16','AL','525'),('1987-10-16','AL','525'),('1987-10-16','AL','533'),('1987-10-16','AL','533'),('1987-10-16','AL','546'),('1987-10-16','AL','546'),('1987-10-16','AL','556'),('1987-10-16','AL','556'),('1987-10-16','AL','601'),('1987-10-16','AL','601'),('1987-10-16','AL','627'),('1987-10-16','AL','629'),('1987-10-16','AL','670'),('1987-10-16','AL','670'),('1987-10-16','AL','670'),('1987-10-16','AL','673'),('1987-10-16','AL','680'),('1987-10-17','AA','2'),('1987-10-17','AA','2'),('1987-10-17','AA','2'),('1987-10-17','AA','7'),('1987-10-17','AA','7'),('1987-10-17','AA','26'),('1987-10-17','AA','36'),('1987-10-17','AA','91'),('1987-10-17','AA','101'),('1987-10-17','AA','101'),('1987-10-17','AA','109'),('1987-10-17','AA','109'),('1987-10-17','AA','112'),('1987-10-17','AA','123'),('1987-10-17','AA','123'),('1987-10-17','AA','160'),('1987-10-17','AA','165'),('1987-10-17','AA','165'),('1987-10-17','AA','165'),('1987-10-17','AA','176'),('1987-10-17','AA','176'),('1987-10-17','AA','176'),('1987-10-17','AA','176'),('1987-10-17','AA','179'),('1987-10-17','AA','179'),('1987-10-17','AA','215'),('1987-10-17','AA','215'),('1987-10-17','AA','231'),('1987-10-17','AA','231'),('1987-10-17','AA','263'),('1987-10-17','AA','263'),('1987-10-17','AA','268'),('1987-10-17','AA','268'),('1987-10-17','AA','281'),('1987-10-17','AA','287'),('1987-10-17','AA','287'),('1987-10-17','AA','309'),('1987-10-17','AA','309'),('1987-10-17','AA','309'),('1987-10-17','AA','341'),('1987-10-17','AA','344'),('1987-10-17','AA','344'),('1987-10-17','AA','347'),('1987-10-17','AA','347'),('1987-10-17','AA','368'),('1987-10-17','AA','381'),('1987-10-17','AA','381'),('1987-10-17','AA','381'),('1987-10-17','AA','396'),('1987-10-17','AA','396'),('1987-10-17','AA','397'),('1987-10-17','AA','417'),('1987-10-17','AA','446'),('1987-10-17','AA','451'),('1987-10-17','AA','451'),('1987-10-17','AA','460'),('1987-10-17','AA','460'),('1987-10-17','AA','491'),('1987-10-17','AA','491'),('1987-10-17','AA','504'),('1987-10-17','AA','504'),('1987-10-17','AA','519'),('1987-10-17','AA','519'),('1987-10-17','AA','523'),('1987-10-17','AA','523'),('1987-10-17','AA','525'),('1987-10-17','AA','525'),('1987-10-17','AA','525'),('1987-10-17','AA','533'),('1987-10-17','AA','533'),('1987-10-17','AA','546'),('1987-10-17','AA','546'),('1987-10-17','AA','546'),('1987-10-17','AA','546'),('1987-10-17','AA','556'),('1987-10-17','AA','556'),('1987-10-17','AA','556'),('1987-10-17','AA','597'),('1987-10-17','AA','597'),('1987-10-17','AA','597'),('1987-10-17','AA','601'),('1987-10-17','AA','627'),('1987-10-17','AA','629'),('1987-10-17','AA','629'),('1987-10-17','AA','670'),('1987-10-17','AA','673'),('1987-10-17','AA','673'),('1987-10-17','AA','680'),('1987-10-17','AA','680'),('1987-10-17','AA','817'),('1987-10-17','AA','817'),('1987-10-17','AA','824'),('1987-10-17','AA','824'),('1987-10-17','AA','824'),('1987-10-17','AA','824'),('1987-10-17','AA','832'),('1987-10-17','AA','832'),('1987-10-17','AA','852'),('1987-10-17','AA','852'),('1987-10-17','AA','866'),('1987-10-17','AA','866'),('1987-10-17','AA','871'),('1987-10-17','AA','871'),('1987-10-17','AA','880'),('1987-10-17','AA','880'),('1987-10-17','AA','880'),('1987-10-17','AA','880'),('1987-10-17','AA','883'),('1987-10-17','AA','883'),('1987-10-17','AA','885'),('1987-10-17','AA','885'),('1987-10-17','AA','885'),('1987-10-17','AA','890'),('1987-10-17','AA','890'),('1987-10-17','AA','893'),('1987-10-17','AA','893'),('1987-10-17','AA','905'),('1987-10-17','AA','905'),('1987-10-17','AA','915'),('1987-10-17','AA','929'),('1987-10-17','AA','936'),('1987-10-17','AA','936'),('1987-10-17','AA','937'),('1987-10-17','AA','937'),('1987-10-17','AA','955'),('1987-10-17','AA','955'),('1987-10-17','AA','966'),('1987-10-17','AA','1002'),('1987-10-17','AA','1002'),('1987-10-17','AA','1004'),('1987-10-17','AA','1004'),('1987-10-17','AA','1015'),('1987-10-17','AA','1015'),('1987-10-17','AA','1021'),('1987-10-17','AA','1021'),('1987-10-17','AA','1041'),('1987-10-17','AA','1041'),('1987-10-17','AA','1046'),('1987-10-17','AA','1046'),('1987-10-17','AA','1048'),('1987-10-17','AA','1048'),('1987-10-17','AA','1061'),('1987-10-17','AA','1061'),('1987-10-17','AA','1088'),('1987-10-17','AA','1088'),('1987-10-17','AA','2033'),('1987-10-17','AA','2033'),('1987-10-17','AA','2050'),('1987-10-17','AA','2058'),('1987-10-17','AA','2071'),('1987-10-17','AA','2086'),('1987-10-17','AA','2105'),('1987-10-17','AA','2111'),('1987-10-17','AA','2123'),('1987-10-17','AA','2123'),('1987-10-17','AA','2147'),('1987-10-17','AA','2147'),('1987-10-17','AA','2199'),('1987-10-17','AA','2199'),('1987-10-17','AA','2207'),('1987-10-17','AA','2207'),('1987-10-17','AA','2217'),('1987-10-17','AA','2230'),('1987-10-17','AA','2251'),('1987-10-17','AA','2251'),('1987-10-17','AA','2275'),('1987-10-17','AA','2278'),('1987-10-17','AA','2351'),('1987-10-17','AA','2357'),('1987-10-17','AA','2361'),('1987-10-17','AA','2490'),('1987-10-17','AA','2528'),('1987-10-17','AA','2528'),('1987-10-17','AA','2735'),('1987-10-17','AA','2735'),('1987-10-17','AL','2'),('1987-10-17','AL','2'),('1987-10-17','AL','7'),('1987-10-17','AL','7'),('1987-10-17','AL','26'),('1987-10-17','AL','26'),('1987-10-17','AL','34'),('1987-10-17','AL','36'),('1987-10-17','AL','36'),('1987-10-17','AL','45'),('1987-10-17','AL','45'),('1987-10-17','AL','45'),('1987-10-17','AL','91'),('1987-10-17','AL','91'),('1987-10-17','AL','104'),('1987-10-17','AL','104'),('1987-10-17','AL','109'),('1987-10-17','AL','112'),('1987-10-17','AL','112'),('1987-10-17','AL','149'),('1987-10-17','AL','160'),('1987-10-17','AL','160'),('1987-10-17','AL','165'),('1987-10-17','AL','171'),('1987-10-17','AL','171'),('1987-10-17','AL','176'),('1987-10-17','AL','176'),('1987-10-17','AL','179'),('1987-10-17','AL','215'),('1987-10-17','AL','231'),('1987-10-17','AL','263'),('1987-10-17','AL','268'),('1987-10-17','AL','268'),('1987-10-17','AL','268'),('1987-10-17','AL','287'),('1987-10-17','AL','287'),('1987-10-17','AL','309'),('1987-10-17','AL','309'),('1987-10-17','AL','344'),('1987-10-17','AL','344'),('1987-10-17','AL','357'),('1987-10-17','AL','357'),('1987-10-17','AL','381'),('1987-10-17','AL','396'),('1987-10-17','AL','397'),('1987-10-17','AL','397'),('1987-10-17','AL','397'),('1987-10-17','AL','416'),('1987-10-17','AL','417'),('1987-10-17','AL','438'),('1987-10-17','AL','438'),('1987-10-17','AL','451'),('1987-10-17','AL','451'),('1987-10-17','AL','491'),('1987-10-17','AL','491'),('1987-10-17','AL','523'),('1987-10-17','AL','523'),('1987-10-17','AL','525'),('1987-10-17','AL','525'),('1987-10-17','AL','533'),('1987-10-17','AL','546'),('1987-10-17','AL','546'),('1987-10-17','AL','556'),('1987-10-17','AL','556'),('1987-10-17','AL','601'),('1987-10-17','AL','601'),('1987-10-17','AL','627'),('1987-10-17','AL','670'),('1987-10-17','AL','673'),('1987-10-17','AL','680'),('1987-10-17','AL','936'),('1987-10-17','AL','966'),('1987-10-18','AA','2'),('1987-10-18','AA','2'),('1987-10-18','AA','2'),('1987-10-18','AA','7'),('1987-10-18','AA','7'),('1987-10-18','AA','26'),('1987-10-18','AA','34'),('1987-10-18','AA','36'),('1987-10-18','AA','91'),('1987-10-18','AA','101'),('1987-10-18','AA','101'),('1987-10-18','AA','109'),('1987-10-18','AA','109'),('1987-10-18','AA','112'),('1987-10-18','AA','123'),('1987-10-18','AA','123'),('1987-10-18','AA','160'),('1987-10-18','AA','165'),('1987-10-18','AA','165'),('1987-10-18','AA','165'),('1987-10-18','AA','176'),('1987-10-18','AA','176'),('1987-10-18','AA','176'),('1987-10-18','AA','176'),('1987-10-18','AA','179'),('1987-10-18','AA','179'),('1987-10-18','AA','215'),('1987-10-18','AA','231'),('1987-10-18','AA','231'),('1987-10-18','AA','263'),('1987-10-18','AA','268'),('1987-10-18','AA','268'),('1987-10-18','AA','281'),('1987-10-18','AA','287'),('1987-10-18','AA','287'),('1987-10-18','AA','309'),('1987-10-18','AA','309'),('1987-10-18','AA','309'),('1987-10-18','AA','341'),('1987-10-18','AA','344'),('1987-10-18','AA','344'),('1987-10-18','AA','347'),('1987-10-18','AA','347'),('1987-10-18','AA','368'),('1987-10-18','AA','381'),('1987-10-18','AA','381'),('1987-10-18','AA','381'),('1987-10-18','AA','396'),('1987-10-18','AA','396'),('1987-10-18','AA','397'),('1987-10-18','AA','397'),('1987-10-18','AA','417'),('1987-10-18','AA','417'),('1987-10-18','AA','451'),('1987-10-18','AA','451'),('1987-10-18','AA','460'),('1987-10-18','AA','491'),('1987-10-18','AA','491'),('1987-10-18','AA','504'),('1987-10-18','AA','504'),('1987-10-18','AA','519'),('1987-10-18','AA','519'),('1987-10-18','AA','523'),('1987-10-18','AA','523'),('1987-10-18','AA','525'),('1987-10-18','AA','525'),('1987-10-18','AA','525'),('1987-10-18','AA','533'),('1987-10-18','AA','533'),('1987-10-18','AA','546'),('1987-10-18','AA','546'),('1987-10-18','AA','546'),('1987-10-18','AA','546'),('1987-10-18','AA','556'),('1987-10-18','AA','556'),('1987-10-18','AA','556'),('1987-10-18','AA','597'),('1987-10-18','AA','597'),('1987-10-18','AA','597'),('1987-10-18','AA','601'),('1987-10-18','AA','601'),('1987-10-18','AA','629'),('1987-10-18','AA','629'),('1987-10-18','AA','670'),('1987-10-18','AA','673'),('1987-10-18','AA','680'),('1987-10-18','AA','680'),('1987-10-18','AA','817'),('1987-10-18','AA','817'),('1987-10-18','AA','824'),('1987-10-18','AA','824'),('1987-10-18','AA','824'),('1987-10-18','AA','824'),('1987-10-18','AA','832'),('1987-10-18','AA','832'),('1987-10-18','AA','852'),('1987-10-18','AA','866'),('1987-10-18','AA','866'),('1987-10-18','AA','871'),('1987-10-18','AA','871'),('1987-10-18','AA','880'),('1987-10-18','AA','880'),('1987-10-18','AA','880'),('1987-10-18','AA','880'),('1987-10-18','AA','883'),('1987-10-18','AA','883'),('1987-10-18','AA','885'),('1987-10-18','AA','885'),('1987-10-18','AA','885'),('1987-10-18','AA','890'),('1987-10-18','AA','890'),('1987-10-18','AA','893'),('1987-10-18','AA','893'),('1987-10-18','AA','905'),('1987-10-18','AA','905'),('1987-10-18','AA','915'),('1987-10-18','AA','929'),('1987-10-18','AA','929'),('1987-10-18','AA','936'),('1987-10-18','AA','936'),('1987-10-18','AA','937'),('1987-10-18','AA','937'),('1987-10-18','AA','955'),('1987-10-18','AA','966'),('1987-10-18','AA','1002'),('1987-10-18','AA','1002'),('1987-10-18','AA','1004'),('1987-10-18','AA','1004'),('1987-10-18','AA','1015'),('1987-10-18','AA','1015'),('1987-10-18','AA','1021'),('1987-10-18','AA','1021'),('1987-10-18','AA','1041'),('1987-10-18','AA','1041'),('1987-10-18','AA','1046'),('1987-10-18','AA','1046'),('1987-10-18','AA','1048'),('1987-10-18','AA','1048'),('1987-10-18','AA','1061'),('1987-10-18','AA','1061'),('1987-10-18','AA','1088'),('1987-10-18','AA','1088'),('1987-10-18','AA','2033'),('1987-10-18','AA','2033'),('1987-10-18','AA','2050'),('1987-10-18','AA','2058'),('1987-10-18','AA','2071'),('1987-10-18','AA','2071'),('1987-10-18','AA','2086'),('1987-10-18','AA','2111'),('1987-10-18','AA','2123'),('1987-10-18','AA','2147'),('1987-10-18','AA','2147'),('1987-10-18','AA','2199'),('1987-10-18','AA','2199'),('1987-10-18','AA','2207'),('1987-10-18','AA','2207'),('1987-10-18','AA','2230'),('1987-10-18','AA','2245'),('1987-10-18','AA','2251'),('1987-10-18','AA','2251'),('1987-10-18','AA','2275'),('1987-10-18','AA','2278'),('1987-10-18','AA','2351'),('1987-10-18','AA','2357'),('1987-10-18','AA','2361'),('1987-10-18','AA','2490'),('1987-10-18','AA','2528'),('1987-10-18','AA','2528'),('1987-10-18','AA','2735'),('1987-10-18','AA','2735'),('1987-10-18','AA','2751'),('1987-10-18','AL','2'),('1987-10-18','AL','2'),('1987-10-18','AL','7'),('1987-10-18','AL','7'),('1987-10-18','AL','26'),('1987-10-18','AL','26'),('1987-10-18','AL','34'),('1987-10-18','AL','34'),('1987-10-18','AL','36'),('1987-10-18','AL','36'),('1987-10-18','AL','45'),('1987-10-18','AL','45'),('1987-10-18','AL','45'),('1987-10-18','AL','91'),('1987-10-18','AL','91'),('1987-10-18','AL','104'),('1987-10-18','AL','104'),('1987-10-18','AL','104'),('1987-10-18','AL','112'),('1987-10-18','AL','123'),('1987-10-18','AL','160'),('1987-10-18','AL','160'),('1987-10-18','AL','165'),('1987-10-18','AL','171'),('1987-10-18','AL','171'),('1987-10-18','AL','176'),('1987-10-18','AL','176'),('1987-10-18','AL','179'),('1987-10-18','AL','215'),('1987-10-18','AL','231'),('1987-10-18','AL','263'),('1987-10-18','AL','263'),('1987-10-18','AL','281'),('1987-10-18','AL','281'),('1987-10-18','AL','309'),('1987-10-18','AL','309'),('1987-10-18','AL','341'),('1987-10-18','AL','344'),('1987-10-18','AL','344'),('1987-10-18','AL','357'),('1987-10-18','AL','357'),('1987-10-18','AL','368'),('1987-10-18','AL','396'),('1987-10-18','AL','416'),('1987-10-18','AL','416'),('1987-10-18','AL','417'),('1987-10-18','AL','438'),('1987-10-18','AL','438'),('1987-10-18','AL','446'),('1987-10-18','AL','451'),('1987-10-18','AL','491'),('1987-10-18','AL','523'),('1987-10-18','AL','523'),('1987-10-18','AL','523'),('1987-10-18','AL','525'),('1987-10-18','AL','525'),('1987-10-18','AL','533'),('1987-10-18','AL','533'),('1987-10-18','AL','546'),('1987-10-18','AL','546'),('1987-10-18','AL','556'),('1987-10-18','AL','601'),('1987-10-18','AL','601'),('1987-10-18','AL','627'),('1987-10-18','AL','629'),('1987-10-18','AL','670'),('1987-10-18','AL','670'),('1987-10-18','AL','670'),('1987-10-18','AL','673'),('1987-10-18','AL','680'),('1987-10-18','AL','937'),('1987-10-18','AL','937'),('1987-10-18','AL','955'),('1987-10-19','AA','2'),('1987-10-19','AA','2'),('1987-10-19','AA','2'),('1987-10-19','AA','7'),('1987-10-19','AA','7'),('1987-10-19','AA','26'),('1987-10-19','AA','34'),('1987-10-19','AA','36'),('1987-10-19','AA','91'),('1987-10-19','AA','101'),('1987-10-19','AA','101'),('1987-10-19','AA','109'),('1987-10-19','AA','109'),('1987-10-19','AA','112'),('1987-10-19','AA','123'),('1987-10-19','AA','123'),('1987-10-19','AA','160'),('1987-10-19','AA','165'),('1987-10-19','AA','165'),('1987-10-19','AA','165'),('1987-10-19','AA','176'),('1987-10-19','AA','176'),('1987-10-19','AA','176'),('1987-10-19','AA','176'),('1987-10-19','AA','179'),('1987-10-19','AA','179'),('1987-10-19','AA','215'),('1987-10-19','AA','215'),('1987-10-19','AA','231'),('1987-10-19','AA','231'),('1987-10-19','AA','263'),('1987-10-19','AA','263'),('1987-10-19','AA','268'),('1987-10-19','AA','268'),('1987-10-19','AA','281'),('1987-10-19','AA','287'),('1987-10-19','AA','287'),('1987-10-19','AA','309'),('1987-10-19','AA','309'),('1987-10-19','AA','341'),('1987-10-19','AA','344'),('1987-10-19','AA','344'),('1987-10-19','AA','347'),('1987-10-19','AA','347'),('1987-10-19','AA','368'),('1987-10-19','AA','381'),('1987-10-19','AA','381'),('1987-10-19','AA','381'),('1987-10-19','AA','396'),('1987-10-19','AA','396'),('1987-10-19','AA','397'),('1987-10-19','AA','397'),('1987-10-19','AA','417'),('1987-10-19','AA','417'),('1987-10-19','AA','446'),('1987-10-19','AA','451'),('1987-10-19','AA','451'),('1987-10-19','AA','491'),('1987-10-19','AA','504'),('1987-10-19','AA','504'),('1987-10-19','AA','519'),('1987-10-19','AA','519'),('1987-10-19','AA','523'),('1987-10-19','AA','523'),('1987-10-19','AA','525'),('1987-10-19','AA','525'),('1987-10-19','AA','525'),('1987-10-19','AA','533'),('1987-10-19','AA','533'),('1987-10-19','AA','546'),('1987-10-19','AA','546'),('1987-10-19','AA','546'),('1987-10-19','AA','546'),('1987-10-19','AA','556'),('1987-10-19','AA','556'),('1987-10-19','AA','556'),('1987-10-19','AA','597'),('1987-10-19','AA','597'),('1987-10-19','AA','597'),('1987-10-19','AA','601'),('1987-10-19','AA','601'),('1987-10-19','AA','627'),('1987-10-19','AA','629'),('1987-10-19','AA','629'),('1987-10-19','AA','670'),('1987-10-19','AA','673'),('1987-10-19','AA','673'),('1987-10-19','AA','680'),('1987-10-19','AA','680'),('1987-10-19','AA','817'),('1987-10-19','AA','817'),('1987-10-19','AA','824'),('1987-10-19','AA','824'),('1987-10-19','AA','824'),('1987-10-19','AA','832'),('1987-10-19','AA','832'),('1987-10-19','AA','852'),('1987-10-19','AA','852'),('1987-10-19','AA','866'),('1987-10-19','AA','866'),('1987-10-19','AA','871'),('1987-10-19','AA','871'),('1987-10-19','AA','880'),('1987-10-19','AA','880'),('1987-10-19','AA','880'),('1987-10-19','AA','880'),('1987-10-19','AA','883'),('1987-10-19','AA','883'),('1987-10-19','AA','885'),('1987-10-19','AA','885'),('1987-10-19','AA','890'),('1987-10-19','AA','890'),('1987-10-19','AA','893'),('1987-10-19','AA','893'),('1987-10-19','AA','905'),('1987-10-19','AA','905'),('1987-10-19','AA','915'),('1987-10-19','AA','929'),('1987-10-19','AA','929'),('1987-10-19','AA','936'),('1987-10-19','AA','936'),('1987-10-19','AA','937'),('1987-10-19','AA','955'),('1987-10-19','AA','955'),('1987-10-19','AA','966'),('1987-10-19','AA','1002'),('1987-10-19','AA','1002'),('1987-10-19','AA','1004'),('1987-10-19','AA','1004'),('1987-10-19','AA','1015'),('1987-10-19','AA','1015'),('1987-10-19','AA','1021'),('1987-10-19','AA','1021'),('1987-10-19','AA','1041'),('1987-10-19','AA','1041'),('1987-10-19','AA','1046'),('1987-10-19','AA','1046'),('1987-10-19','AA','1048'),('1987-10-19','AA','1048'),('1987-10-19','AA','1061'),('1987-10-19','AA','1061'),('1987-10-19','AA','1088'),('1987-10-19','AA','1088'),('1987-10-19','AA','2033'),('1987-10-19','AA','2033'),('1987-10-19','AA','2050'),('1987-10-19','AA','2058'),('1987-10-19','AA','2071'),('1987-10-19','AA','2071'),('1987-10-19','AA','2086'),('1987-10-19','AA','2105'),('1987-10-19','AA','2111'),('1987-10-19','AA','2123'),('1987-10-19','AA','2123'),('1987-10-19','AA','2147'),('1987-10-19','AA','2147'),('1987-10-19','AA','2199'),('1987-10-19','AA','2199'),('1987-10-19','AA','2207'),('1987-10-19','AA','2207'),('1987-10-19','AA','2217'),('1987-10-19','AA','2230'),('1987-10-19','AA','2245'),('1987-10-19','AA','2251'),('1987-10-19','AA','2251'),('1987-10-19','AA','2275'),('1987-10-19','AA','2278'),('1987-10-19','AA','2357'),('1987-10-19','AA','2361'),('1987-10-19','AA','2490'),('1987-10-19','AA','2528'),('1987-10-19','AA','2735'),('1987-10-19','AA','2735'),('1987-10-19','AA','2751'),('1987-10-19','AL','2'),('1987-10-19','AL','2'),('1987-10-19','AL','7'),('1987-10-19','AL','7'),('1987-10-19','AL','26'),('1987-10-19','AL','26'),('1987-10-19','AL','34'),('1987-10-19','AL','34'),('1987-10-19','AL','36'),('1987-10-19','AL','36'),('1987-10-19','AL','45'),('1987-10-19','AL','45'),('1987-10-19','AL','45'),('1987-10-19','AL','91'),('1987-10-19','AL','91'),('1987-10-19','AL','104'),('1987-10-19','AL','104'),('1987-10-19','AL','104'),('1987-10-19','AL','109'),('1987-10-19','AL','112'),('1987-10-19','AL','112'),('1987-10-19','AL','123'),('1987-10-19','AL','149'),('1987-10-19','AL','160'),('1987-10-19','AL','160'),('1987-10-19','AL','165'),('1987-10-19','AL','171'),('1987-10-19','AL','171'),('1987-10-19','AL','176'),('1987-10-19','AL','176'),('1987-10-19','AL','179'),('1987-10-19','AL','215'),('1987-10-19','AL','231'),('1987-10-19','AL','263'),('1987-10-19','AL','263'),('1987-10-19','AL','268'),('1987-10-19','AL','268'),('1987-10-19','AL','268'),('1987-10-19','AL','281'),('1987-10-19','AL','281'),('1987-10-19','AL','287'),('1987-10-19','AL','287'),('1987-10-19','AL','309'),('1987-10-19','AL','309'),('1987-10-19','AL','341'),('1987-10-19','AL','344'),('1987-10-19','AL','344'),('1987-10-19','AL','357'),('1987-10-19','AL','357'),('1987-10-19','AL','368'),('1987-10-19','AL','381'),('1987-10-19','AL','396'),('1987-10-19','AL','416'),('1987-10-19','AL','416'),('1987-10-19','AL','417'),('1987-10-19','AL','438'),('1987-10-19','AL','438'),('1987-10-19','AL','446'),('1987-10-19','AL','451'),('1987-10-19','AL','451'),('1987-10-19','AL','491'),('1987-10-19','AL','491'),('1987-10-19','AL','523'),('1987-10-19','AL','523'),('1987-10-19','AL','523'),('1987-10-19','AL','525'),('1987-10-19','AL','525'),('1987-10-19','AL','533'),('1987-10-19','AL','533'),('1987-10-19','AL','546'),('1987-10-19','AL','546'),('1987-10-19','AL','556'),('1987-10-19','AL','556'),('1987-10-19','AL','601'),('1987-10-19','AL','601'),('1987-10-19','AL','627'),('1987-10-19','AL','629'),('1987-10-19','AL','670'),('1987-10-19','AL','670'),('1987-10-19','AL','670'),('1987-10-20','AA','2'),('1987-10-20','AA','2'),('1987-10-20','AA','2'),('1987-10-20','AA','7'),('1987-10-20','AA','7'),('1987-10-20','AA','34'),('1987-10-20','AA','36'),('1987-10-20','AA','91'),('1987-10-20','AA','101'),('1987-10-20','AA','101'),('1987-10-20','AA','109'),('1987-10-20','AA','109'),('1987-10-20','AA','112'),('1987-10-20','AA','123'),('1987-10-20','AA','123'),('1987-10-20','AA','160'),('1987-10-20','AA','165'),('1987-10-20','AA','165'),('1987-10-20','AA','165'),('1987-10-20','AA','176'),('1987-10-20','AA','176'),('1987-10-20','AA','176'),('1987-10-20','AA','176'),('1987-10-20','AA','179'),('1987-10-20','AA','179'),('1987-10-20','AA','215'),('1987-10-20','AA','215'),('1987-10-20','AA','231'),('1987-10-20','AA','231'),('1987-10-20','AA','263'),('1987-10-20','AA','263'),('1987-10-20','AA','268'),('1987-10-20','AA','268'),('1987-10-20','AA','281'),('1987-10-20','AA','287'),('1987-10-20','AA','287'),('1987-10-20','AA','309'),('1987-10-20','AA','309'),('1987-10-20','AA','309'),('1987-10-20','AA','341'),('1987-10-20','AA','344'),('1987-10-20','AA','344'),('1987-10-20','AA','347'),('1987-10-20','AA','347'),('1987-10-20','AA','368'),('1987-10-20','AA','381'),('1987-10-20','AA','381'),('1987-10-20','AA','381'),('1987-10-20','AA','396'),('1987-10-20','AA','396'),('1987-10-20','AA','397'),('1987-10-20','AA','397'),('1987-10-20','AA','417'),('1987-10-20','AA','417'),('1987-10-20','AA','446'),('1987-10-20','AA','460'),('1987-10-20','AA','460'),('1987-10-20','AA','491'),('1987-10-20','AA','504'),('1987-10-20','AA','504'),('1987-10-20','AA','519'),('1987-10-20','AA','519'),('1987-10-20','AA','523'),('1987-10-20','AA','525'),('1987-10-20','AA','525'),('1987-10-20','AA','525'),('1987-10-20','AA','533'),('1987-10-20','AA','533'),('1987-10-20','AA','533'),('1987-10-20','AA','546'),('1987-10-20','AA','546'),('1987-10-20','AA','546'),('1987-10-20','AA','546'),('1987-10-20','AA','556'),('1987-10-20','AA','556'),('1987-10-20','AA','597'),('1987-10-20','AA','597'),('1987-10-20','AA','601'),('1987-10-20','AA','601'),('1987-10-20','AA','629'),('1987-10-20','AA','670'),('1987-10-20','AA','673'),('1987-10-20','AA','673'),('1987-10-20','AA','680'),('1987-10-20','AA','680'),('1987-10-20','AA','817'),('1987-10-20','AA','824'),('1987-10-20','AA','824'),('1987-10-20','AA','824'),('1987-10-20','AA','832'),('1987-10-20','AA','832'),('1987-10-20','AA','852'),('1987-10-20','AA','852'),('1987-10-20','AA','866'),('1987-10-20','AA','866'),('1987-10-20','AA','871'),('1987-10-20','AA','871'),('1987-10-20','AA','880'),('1987-10-20','AA','880'),('1987-10-20','AA','880'),('1987-10-20','AA','880'),('1987-10-20','AA','883'),('1987-10-20','AA','883'),('1987-10-20','AA','885'),('1987-10-20','AA','885'),('1987-10-20','AA','885'),('1987-10-20','AA','890'),('1987-10-20','AA','890'),('1987-10-20','AA','893'),('1987-10-20','AA','893'),('1987-10-20','AA','905'),('1987-10-20','AA','905'),('1987-10-20','AA','915'),('1987-10-20','AA','929'),('1987-10-20','AA','929'),('1987-10-20','AA','936'),('1987-10-20','AA','937'),('1987-10-20','AA','937'),('1987-10-20','AA','955'),('1987-10-20','AA','955'),('1987-10-20','AA','966'),('1987-10-20','AA','1002'),('1987-10-20','AA','1002'),('1987-10-20','AA','1004'),('1987-10-20','AA','1004'),('1987-10-20','AA','1015'),('1987-10-20','AA','1015'),('1987-10-20','AA','1021'),('1987-10-20','AA','1021'),('1987-10-20','AA','1041'),('1987-10-20','AA','1041'),('1987-10-20','AA','1046'),('1987-10-20','AA','1046'),('1987-10-20','AA','1048'),('1987-10-20','AA','1048'),('1987-10-20','AA','1061'),('1987-10-20','AA','1061'),('1987-10-20','AA','1088'),('1987-10-20','AA','1088'),('1987-10-20','AA','2033'),('1987-10-20','AA','2033'),('1987-10-20','AA','2050'),('1987-10-20','AA','2058'),('1987-10-20','AA','2071'),('1987-10-20','AA','2071'),('1987-10-20','AA','2086'),('1987-10-20','AA','2105'),('1987-10-20','AA','2111'),('1987-10-20','AA','2123'),('1987-10-20','AA','2123'),('1987-10-20','AA','2147'),('1987-10-20','AA','2199'),('1987-10-20','AA','2207'),('1987-10-20','AA','2217'),('1987-10-20','AA','2230'),('1987-10-20','AA','2245'),('1987-10-20','AA','2251'),('1987-10-20','AA','2251'),('1987-10-20','AA','2275'),('1987-10-20','AA','2278'),('1987-10-20','AA','2351'),('1987-10-20','AA','2357'),('1987-10-20','AA','2361'),('1987-10-20','AA','2490'),('1987-10-20','AA','2528'),('1987-10-20','AA','2528'),('1987-10-20','AA','2735'),('1987-10-20','AA','2735'),('1987-10-20','AA','2751'),('1987-10-20','AL','2'),('1987-10-20','AL','2'),('1987-10-20','AL','7'),('1987-10-20','AL','7'),('1987-10-20','AL','26'),('1987-10-20','AL','26'),('1987-10-20','AL','34'),('1987-10-20','AL','34'),('1987-10-20','AL','36'),('1987-10-20','AL','36'),('1987-10-20','AL','45'),('1987-10-20','AL','45'),('1987-10-20','AL','45'),('1987-10-20','AL','104'),('1987-10-20','AL','104'),('1987-10-20','AL','104'),('1987-10-20','AL','109'),('1987-10-20','AL','112'),('1987-10-20','AL','112'),('1987-10-20','AL','123'),('1987-10-20','AL','149'),('1987-10-20','AL','160'),('1987-10-20','AL','160'),('1987-10-20','AL','165'),('1987-10-20','AL','171'),('1987-10-20','AL','171'),('1987-10-20','AL','176'),('1987-10-20','AL','176'),('1987-10-20','AL','179'),('1987-10-20','AL','215'),('1987-10-20','AL','231'),('1987-10-20','AL','263'),('1987-10-20','AL','263'),('1987-10-20','AL','268'),('1987-10-20','AL','268'),('1987-10-20','AL','268'),('1987-10-20','AL','281'),('1987-10-20','AL','281'),('1987-10-20','AL','287'),('1987-10-20','AL','287'),('1987-10-20','AL','309'),('1987-10-20','AL','309'),('1987-10-20','AL','341'),('1987-10-20','AL','344'),('1987-10-20','AL','344'),('1987-10-20','AL','357'),('1987-10-20','AL','357'),('1987-10-20','AL','368'),('1987-10-20','AL','381'),('1987-10-20','AL','396'),('1987-10-20','AL','397'),('1987-10-20','AL','397'),('1987-10-20','AL','416'),('1987-10-20','AL','416'),('1987-10-20','AL','417'),('1987-10-20','AL','438'),('1987-10-20','AL','438'),('1987-10-20','AL','446'),('1987-10-20','AL','451'),('1987-10-20','AL','451'),('1987-10-20','AL','491'),('1987-10-20','AL','491'),('1987-10-20','AL','523'),('1987-10-20','AL','523'),('1987-10-20','AL','523'),('1987-10-20','AL','525'),('1987-10-20','AL','525'),('1987-10-20','AL','533'),('1987-10-20','AL','533'),('1987-10-20','AL','546'),('1987-10-20','AL','546'),('1987-10-20','AL','556'),('1987-10-20','AL','556'),('1987-10-20','AL','601'),('1987-10-20','AL','601'),('1987-10-20','AL','627'),('1987-10-20','AL','629'),('1987-10-20','AL','670'),('1987-10-20','AL','670'),('1987-10-20','AL','670'),('1987-10-20','AL','673'),('1987-10-20','AL','680'),('1987-10-05','AA','2'),('1987-10-05','AA','2'),('1987-10-05','AA','2'),('1987-10-05','AA','7'),('1987-10-05','AA','7'),('1987-10-05','AA','26'),('1987-10-05','AA','34'),('1987-10-05','AA','36'),('1987-10-05','AA','91'),('1987-10-05','AA','101'),('1987-10-05','AA','101'),('1987-10-05','AA','109'),('1987-10-05','AA','109'),('1987-10-05','AA','112'),('1987-10-05','AA','123'),('1987-10-05','AA','123'),('1987-10-05','AA','165'),('1987-10-05','AA','165'),('1987-10-05','AA','165'),('1987-10-05','AA','176'),('1987-10-05','AA','176'),('1987-10-05','AA','176'),('1987-10-05','AA','176'),('1987-10-05','AA','179'),('1987-10-05','AA','179'),('1987-10-05','AA','215'),('1987-10-05','AA','215'),('1987-10-05','AA','231'),('1987-10-05','AA','263'),('1987-10-05','AA','263'),('1987-10-05','AA','281'),('1987-10-05','AA','287'),('1987-10-05','AA','287'),('1987-10-05','AA','309'),('1987-10-05','AA','309'),('1987-10-05','AA','309'),('1987-10-05','AA','341'),('1987-10-05','AA','347'),('1987-10-05','AA','347'),('1987-10-05','AA','368'),('1987-10-05','AA','381'),('1987-10-05','AA','381'),('1987-10-05','AA','381'),('1987-10-05','AA','396'),('1987-10-05','AA','396'),('1987-10-05','AA','397'),('1987-10-05','AA','397'),('1987-10-05','AA','417'),('1987-10-05','AA','417'),('1987-10-05','AA','446'),('1987-10-05','AA','451'),('1987-10-05','AA','451'),('1987-10-05','AA','460'),('1987-10-05','AA','460'),('1987-10-05','AA','491'),('1987-10-05','AA','504'),('1987-10-05','AA','504'),('1987-10-05','AA','519'),('1987-10-05','AA','519'),('1987-10-05','AA','523'),('1987-10-05','AA','523'),('1987-10-05','AA','525'),('1987-10-05','AA','525'),('1987-10-05','AA','525'),('1987-10-05','AA','533'),('1987-10-05','AA','533'),('1987-10-05','AA','533'),('1987-10-05','AA','546'),('1987-10-05','AA','546'),('1987-10-05','AA','546'),('1987-10-05','AA','546'),('1987-10-05','AA','556'),('1987-10-05','AA','556'),('1987-10-05','AA','556'),('1987-10-05','AA','597'),('1987-10-05','AA','597'),('1987-10-05','AA','597'),('1987-10-05','AA','601'),('1987-10-05','AA','601'),('1987-10-05','AA','627'),('1987-10-05','AA','629'),('1987-10-05','AA','629'),('1987-10-05','AA','670'),('1987-10-05','AA','673'),('1987-10-05','AA','673'),('1987-10-05','AA','680'),('1987-10-05','AA','680'),('1987-10-05','AA','817'),('1987-10-05','AA','817'),('1987-10-05','AA','824'),('1987-10-05','AA','824'),('1987-10-05','AA','824'),('1987-10-05','AA','824'),('1987-10-05','AA','832'),('1987-10-05','AA','832'),('1987-10-05','AA','852'),('1987-10-05','AA','852'),('1987-10-05','AA','866'),('1987-10-05','AA','866'),('1987-10-05','AA','871'),('1987-10-05','AA','871'),('1987-10-05','AA','880'),('1987-10-05','AA','880'),('1987-10-05','AA','880'),('1987-10-05','AA','880'),('1987-10-05','AA','883'),('1987-10-05','AA','883'),('1987-10-05','AA','885'),('1987-10-05','AA','885'),('1987-10-05','AA','885'),('1987-10-05','AA','890'),('1987-10-05','AA','890'),('1987-10-05','AA','893'),('1987-10-05','AA','893'),('1987-10-05','AA','905'),('1987-10-05','AA','905'),('1987-10-05','AA','915'),('1987-10-05','AA','929'),('1987-10-05','AA','929'),('1987-10-05','AA','936'),('1987-10-05','AA','936'),('1987-10-05','AA','937'),('1987-10-05','AA','937'),('1987-10-05','AA','955'),('1987-10-05','AA','955'),('1987-10-05','AA','966'),('1987-10-05','AA','1002'),('1987-10-05','AA','1002'),('1987-10-05','AA','1004'),('1987-10-05','AA','1004'),('1987-10-05','AA','1015'),('1987-10-05','AA','1015'),('1987-10-05','AA','1021'),('1987-10-05','AA','1021'),('1987-10-05','AA','1041'),('1987-10-05','AA','1041'),('1987-10-05','AA','1046'),('1987-10-05','AA','1046'),('1987-10-05','AA','1048'),('1987-10-05','AA','1048'),('1987-10-05','AA','1061'),('1987-10-05','AA','1061'),('1987-10-05','AA','1088'),('1987-10-05','AA','1088'),('1987-10-05','AA','2033'),('1987-10-05','AA','2033'),('1987-10-05','AA','2050'),('1987-10-05','AA','2058'),('1987-10-05','AA','2071'),('1987-10-05','AA','2071'),('1987-10-05','AA','2086'),('1987-10-05','AA','2105'),('1987-10-05','AA','2111'),('1987-10-05','AA','2123'),('1987-10-05','AA','2123'),('1987-10-05','AA','2147'),('1987-10-05','AA','2147'),('1987-10-05','AA','2199'),('1987-10-05','AA','2199'),('1987-10-05','AA','2207'),('1987-10-05','AA','2207'),('1987-10-05','AA','2217'),('1987-10-05','AA','2230'),('1987-10-05','AA','2245'),('1987-10-05','AA','2251'),('1987-10-05','AA','2251'),('1987-10-05','AA','2275'),('1987-10-05','AA','2278'),('1987-10-05','AA','2351'),('1987-10-05','AA','2357'),('1987-10-05','AA','2361'),('1987-10-05','AA','2528'),('1987-10-05','AA','2528'),('1987-10-05','AA','2735'),('1987-10-05','AA','2735'),('1987-10-05','AA','2751'),('1987-10-05','AL','2'),('1987-10-05','AL','2'),('1987-10-05','AL','7'),('1987-10-05','AL','7'),('1987-10-05','AL','26'),('1987-10-05','AL','26'),('1987-10-05','AL','36'),('1987-10-05','AL','36'),('1987-10-05','AL','45'),('1987-10-05','AL','45'),('1987-10-05','AL','45'),('1987-10-05','AL','91'),('1987-10-05','AL','91'),('1987-10-05','AL','104'),('1987-10-05','AL','104'),('1987-10-05','AL','104'),('1987-10-05','AL','109'),('1987-10-05','AL','112'),('1987-10-05','AL','112'),('1987-10-05','AL','123'),('1987-10-05','AL','149'),('1987-10-05','AL','160'),('1987-10-05','AL','160'),('1987-10-05','AL','165'),('1987-10-05','AL','171'),('1987-10-05','AL','171'),('1987-10-05','AL','176'),('1987-10-05','AL','176'),('1987-10-05','AL','179'),('1987-10-05','AL','215'),('1987-10-05','AL','231'),('1987-10-05','AL','263'),('1987-10-05','AL','263'),('1987-10-05','AL','268'),('1987-10-05','AL','268'),('1987-10-05','AL','268'),('1987-10-05','AL','281'),('1987-10-05','AL','281'),('1987-10-05','AL','287'),('1987-10-05','AL','287'),('1987-10-05','AL','309'),('1987-10-05','AL','309'),('1987-10-05','AL','341'),('1987-10-05','AL','344'),('1987-10-05','AL','344'),('1987-10-05','AL','357'),('1987-10-05','AL','357'),('1987-10-05','AL','368'),('1987-10-05','AL','381'),('1987-10-05','AL','396'),('1987-10-05','AL','397'),('1987-10-05','AL','397'),('1987-10-05','AL','416'),('1987-10-05','AL','416'),('1987-10-05','AL','417'),('1987-10-05','AL','438'),('1987-10-05','AL','438'),('1987-10-05','AL','446'),('1987-10-05','AL','451'),('1987-10-05','AL','451'),('1987-10-05','AL','491'),('1987-10-05','AL','491'),('1987-10-05','AL','523'),('1987-10-05','AL','523'),('1987-10-05','AL','523'),('1987-10-05','AL','525'),('1987-10-05','AL','525'),('1987-10-05','AL','533'),('1987-10-05','AL','533'),('1987-10-05','AL','546'),('1987-10-05','AL','546'),('1987-10-05','AL','601'),('1987-10-05','AL','601'),('1987-10-05','AL','627'),('1987-10-05','AL','629'),('1987-10-05','AL','670'),('1987-10-05','AL','670'),('1987-10-05','AL','670'),('1987-10-05','AL','673'),('1987-10-05','AL','680'),('1987-10-06','AA','2'),('1987-10-06','AA','2'),('1987-10-06','AA','7'),('1987-10-06','AA','7'),('1987-10-06','AA','34'),('1987-10-06','AA','36'),('1987-10-06','AA','91'),('1987-10-06','AA','101'),('1987-10-06','AA','109'),('1987-10-06','AA','109'),('1987-10-06','AA','112'),('1987-10-06','AA','123'),('1987-10-06','AA','123'),('1987-10-06','AA','165'),('1987-10-06','AA','165'),('1987-10-06','AA','165'),('1987-10-06','AA','176'),('1987-10-06','AA','176'),('1987-10-06','AA','176'),('1987-10-06','AA','176'),('1987-10-06','AA','179'),('1987-10-06','AA','179'),('1987-10-06','AA','215'),('1987-10-06','AA','215'),('1987-10-06','AA','231'),('1987-10-06','AA','231'),('1987-10-06','AA','263'),('1987-10-06','AA','263'),('1987-10-06','AA','268'),('1987-10-06','AA','268'),('1987-10-06','AA','287'),('1987-10-06','AA','287'),('1987-10-06','AA','309'),('1987-10-06','AA','309'),('1987-10-06','AA','309'),('1987-10-06','AA','341'),('1987-10-06','AA','344'),('1987-10-06','AA','344'),('1987-10-06','AA','347'),('1987-10-06','AA','347'),('1987-10-06','AA','368'),('1987-10-06','AA','381'),('1987-10-06','AA','381'),('1987-10-06','AA','381'),('1987-10-06','AA','396'),('1987-10-06','AA','396'),('1987-10-06','AA','397'),('1987-10-06','AA','397'),('1987-10-06','AA','417'),('1987-10-06','AA','417'),('1987-10-06','AA','446'),('1987-10-06','AA','451'),('1987-10-06','AA','451'),('1987-10-06','AA','460'),('1987-10-06','AA','460'),('1987-10-06','AA','491'),('1987-10-06','AA','504'),('1987-10-06','AA','504'),('1987-10-06','AA','519'),('1987-10-06','AA','519'),('1987-10-06','AA','523'),('1987-10-06','AA','523'),('1987-10-06','AA','525'),('1987-10-06','AA','525'),('1987-10-06','AA','525'),('1987-10-06','AA','533'),('1987-10-06','AA','533'),('1987-10-06','AA','533'),('1987-10-06','AA','546'),('1987-10-06','AA','546'),('1987-10-06','AA','546'),('1987-10-06','AA','546'),('1987-10-06','AA','556'),('1987-10-06','AA','556'),('1987-10-06','AA','556'),('1987-10-06','AA','597'),('1987-10-06','AA','597'),('1987-10-06','AA','597'),('1987-10-06','AA','601'),('1987-10-06','AA','601'),('1987-10-06','AA','627'),('1987-10-06','AA','629'),('1987-10-06','AA','629'),('1987-10-06','AA','670'),('1987-10-06','AA','673'),('1987-10-06','AA','673'),('1987-10-06','AA','680'),('1987-10-06','AA','680'),('1987-10-06','AA','817'),('1987-10-06','AA','817'),('1987-10-06','AA','824'),('1987-10-06','AA','824'),('1987-10-06','AA','824'),('1987-10-06','AA','824'),('1987-10-06','AA','832'),('1987-10-06','AA','832'),('1987-10-06','AA','852'),('1987-10-06','AA','852'),('1987-10-06','AA','866'),('1987-10-06','AA','871'),('1987-10-06','AA','871'),('1987-10-06','AA','880'),('1987-10-06','AA','880'),('1987-10-06','AA','880'),('1987-10-06','AA','880'),('1987-10-06','AA','883'),('1987-10-06','AA','883'),('1987-10-06','AA','885'),('1987-10-06','AA','885'),('1987-10-06','AA','885'),('1987-10-06','AA','890'),('1987-10-06','AA','890'),('1987-10-06','AA','893'),('1987-10-06','AA','893'),('1987-10-06','AA','905'),('1987-10-06','AA','905'),('1987-10-06','AA','915'),('1987-10-06','AA','929'),('1987-10-06','AA','929'),('1987-10-06','AA','936'),('1987-10-06','AA','936'),('1987-10-06','AA','937'),('1987-10-06','AA','937'),('1987-10-06','AA','955'),('1987-10-06','AA','955'),('1987-10-06','AA','966'),('1987-10-06','AA','1002'),('1987-10-06','AA','1002'),('1987-10-06','AA','1004'),('1987-10-06','AA','1004'),('1987-10-06','AA','1015'),('1987-10-06','AA','1015'),('1987-10-06','AA','1021'),('1987-10-06','AA','1021'),('1987-10-06','AA','1041'),('1987-10-06','AA','1041'),('1987-10-06','AA','1046'),('1987-10-06','AA','1046'),('1987-10-06','AA','1048'),('1987-10-06','AA','1061'),('1987-10-06','AA','1088'),('1987-10-06','AA','1088'),('1987-10-06','AA','2033'),('1987-10-06','AA','2033'),('1987-10-06','AA','2050'),('1987-10-06','AA','2058'),('1987-10-06','AA','2071'),('1987-10-06','AA','2071'),('1987-10-06','AA','2086'),('1987-10-06','AA','2105'),('1987-10-06','AA','2111'),('1987-10-06','AA','2123'),('1987-10-06','AA','2123'),('1987-10-06','AA','2147'),('1987-10-06','AA','2147'),('1987-10-06','AA','2199'),('1987-10-06','AA','2199'),('1987-10-06','AA','2207'),('1987-10-06','AA','2207'),('1987-10-06','AA','2217'),('1987-10-06','AA','2230'),('1987-10-06','AA','2245'),('1987-10-06','AA','2251'),('1987-10-06','AA','2251'),('1987-10-06','AA','2275'),('1987-10-06','AA','2278'),('1987-10-06','AA','2351'),('1987-10-06','AA','2357'),('1987-10-06','AA','2490'),('1987-10-06','AA','2528'),('1987-10-06','AA','2528'),('1987-10-06','AA','2735'),('1987-10-06','AA','2735'),('1987-10-06','AA','2751'),('1987-10-06','AL','2'),('1987-10-06','AL','2'),('1987-10-06','AL','7'),('1987-10-06','AL','7'),('1987-10-06','AL','26'),('1987-10-06','AL','26'),('1987-10-06','AL','34'),('1987-10-06','AL','34'),('1987-10-06','AL','36'),('1987-10-06','AL','36'),('1987-10-06','AL','45'),('1987-10-06','AL','45'),('1987-10-06','AL','45'),('1987-10-06','AL','91'),('1987-10-06','AL','91'),('1987-10-06','AL','104'),('1987-10-06','AL','104'),('1987-10-06','AL','104'),('1987-10-06','AL','109'),('1987-10-06','AL','112'),('1987-10-06','AL','112'),('1987-10-06','AL','123'),('1987-10-06','AL','149'),('1987-10-06','AL','160'),('1987-10-06','AL','160'),('1987-10-06','AL','165'),('1987-10-06','AL','171'),('1987-10-06','AL','171'),('1987-10-06','AL','176'),('1987-10-06','AL','176'),('1987-10-06','AL','179'),('1987-10-06','AL','231'),('1987-10-06','AL','263'),('1987-10-06','AL','263'),('1987-10-06','AL','268'),('1987-10-06','AL','268'),('1987-10-06','AL','268'),('1987-10-06','AL','281'),('1987-10-06','AL','281'),('1987-10-06','AL','287'),('1987-10-06','AL','287'),('1987-10-06','AL','309'),('1987-10-06','AL','309'),('1987-10-06','AL','341'),('1987-10-06','AL','344'),('1987-10-06','AL','344'),('1987-10-06','AL','357'),('1987-10-06','AL','357'),('1987-10-06','AL','381'),('1987-10-06','AL','397'),('1987-10-06','AL','397'),('1987-10-06','AL','416'),('1987-10-06','AL','416'),('1987-10-06','AL','417'),('1987-10-06','AL','438'),('1987-10-06','AL','438'),('1987-10-06','AL','446'),('1987-10-06','AL','451'),('1987-10-06','AL','451'),('1987-10-06','AL','491'),('1987-10-06','AL','491'),('1987-10-06','AL','523'),('1987-10-06','AL','523'),('1987-10-06','AL','523'),('1987-10-06','AL','525'),('1987-10-06','AL','525'),('1987-10-06','AL','533'),('1987-10-06','AL','533'),('1987-10-06','AL','546'),('1987-10-06','AL','546'),('1987-10-06','AL','601'),('1987-10-06','AL','601'),('1987-10-06','AL','627'),('1987-10-06','AL','629'),('1987-10-06','AL','670'),('1987-10-06','AL','670'),('1987-10-06','AL','670'),('1987-10-06','AL','673'),('1987-10-06','AL','680'),('1987-10-07','AA','2'),('1987-10-07','AA','2'),('1987-10-07','AA','2'),('1987-10-07','AA','7'),('1987-10-07','AA','7'),('1987-10-07','AA','26'),('1987-10-07','AA','34'),('1987-10-07','AA','36'),('1987-10-07','AA','91'),('1987-10-07','AA','101'),('1987-10-07','AA','101'),('1987-10-07','AA','109'),('1987-10-07','AA','112'),('1987-10-07','AA','123'),('1987-10-07','AA','123'),('1987-10-07','AA','160'),('1987-10-07','AA','165'),('1987-10-07','AA','165'),('1987-10-07','AA','165'),('1987-10-07','AA','176'),('1987-10-07','AA','176'),('1987-10-07','AA','176'),('1987-10-07','AA','176'),('1987-10-07','AA','179'),('1987-10-07','AA','179'),('1987-10-07','AA','215'),('1987-10-07','AA','215'),('1987-10-07','AA','231'),('1987-10-07','AA','231'),('1987-10-07','AA','263'),('1987-10-07','AA','263'),('1987-10-07','AA','268'),('1987-10-07','AA','268'),('1987-10-07','AA','281'),('1987-10-07','AA','287'),('1987-10-07','AA','287'),('1987-10-07','AA','309'),('1987-10-07','AA','309'),('1987-10-07','AA','309'),('1987-10-07','AA','341'),('1987-10-07','AA','344'),('1987-10-07','AA','344'),('1987-10-07','AA','347'),('1987-10-07','AA','347'),('1987-10-07','AA','368'),('1987-10-07','AA','381'),('1987-10-07','AA','381'),('1987-10-07','AA','381'),('1987-10-07','AA','396'),('1987-10-07','AA','396'),('1987-10-07','AA','397'),('1987-10-07','AA','397'),('1987-10-07','AA','417'),('1987-10-07','AA','417'),('1987-10-07','AA','446'),('1987-10-07','AA','451'),('1987-10-07','AA','451'),('1987-10-07','AA','460'),('1987-10-07','AA','460'),('1987-10-07','AA','504'),('1987-10-07','AA','504'),('1987-10-07','AA','519'),('1987-10-07','AA','519'),('1987-10-07','AA','523'),('1987-10-07','AA','523'),('1987-10-07','AA','525'),('1987-10-07','AA','525'),('1987-10-07','AA','525'),('1987-10-07','AA','533'),('1987-10-07','AA','533'),('1987-10-07','AA','533'),('1987-10-07','AA','546'),('1987-10-07','AA','546'),('1987-10-07','AA','546'),('1987-10-07','AA','546'),('1987-10-07','AA','556'),('1987-10-07','AA','556'),('1987-10-07','AA','556'),('1987-10-07','AA','597'),('1987-10-07','AA','597'),('1987-10-07','AA','597'),('1987-10-07','AA','601'),('1987-10-07','AA','601'),('1987-10-07','AA','627'),('1987-10-07','AA','629'),('1987-10-07','AA','629'),('1987-10-07','AA','670'),('1987-10-07','AA','673'),('1987-10-07','AA','673'),('1987-10-07','AA','680'),('1987-10-07','AA','680'),('1987-10-07','AA','817'),('1987-10-07','AA','817'),('1987-10-07','AA','824'),('1987-10-07','AA','824'),('1987-10-07','AA','824'),('1987-10-07','AA','824'),('1987-10-07','AA','832'),('1987-10-07','AA','832'),('1987-10-07','AA','852'),('1987-10-07','AA','852'),('1987-10-07','AA','866'),('1987-10-07','AA','866'),('1987-10-07','AA','871'),('1987-10-07','AA','871'),('1987-10-07','AA','880'),('1987-10-07','AA','880'),('1987-10-07','AA','880'),('1987-10-07','AA','880'),('1987-10-07','AA','883'),('1987-10-07','AA','883'),('1987-10-07','AA','885'),('1987-10-07','AA','885'),('1987-10-07','AA','890'),('1987-10-07','AA','890'),('1987-10-07','AA','893'),('1987-10-07','AA','893'),('1987-10-07','AA','905'),('1987-10-07','AA','905'),('1987-10-07','AA','915'),('1987-10-07','AA','929'),('1987-10-07','AA','929'),('1987-10-07','AA','936'),('1987-10-07','AA','936'),('1987-10-07','AA','937'),('1987-10-07','AA','937'),('1987-10-07','AA','955'),('1987-10-07','AA','955'),('1987-10-07','AA','966'),('1987-10-07','AA','1002'),('1987-10-07','AA','1002'),('1987-10-07','AA','1004'),('1987-10-07','AA','1004'),('1987-10-07','AA','1015'),('1987-10-07','AA','1015'),('1987-10-07','AA','1021'),('1987-10-07','AA','1021'),('1987-10-07','AA','1041'),('1987-10-07','AA','1041'),('1987-10-07','AA','1046'),('1987-10-07','AA','1046'),('1987-10-07','AA','1048'),('1987-10-07','AA','1048'),('1987-10-07','AA','1061'),('1987-10-07','AA','1061'),('1987-10-07','AA','1088'),('1987-10-07','AA','1088'),('1987-10-07','AA','2033'),('1987-10-07','AA','2033'),('1987-10-07','AA','2050'),('1987-10-07','AA','2058'),('1987-10-07','AA','2071'),('1987-10-07','AA','2071'),('1987-10-07','AA','2086'),('1987-10-07','AA','2105'),('1987-10-07','AA','2111'),('1987-10-07','AA','2123'),('1987-10-07','AA','2123'),('1987-10-07','AA','2147'),('1987-10-07','AA','2147'),('1987-10-07','AA','2199'),('1987-10-07','AA','2199'),('1987-10-07','AA','2207'),('1987-10-07','AA','2207'),('1987-10-07','AA','2217'),('1987-10-07','AA','2230'),('1987-10-07','AA','2245'),('1987-10-07','AA','2251'),('1987-10-07','AA','2251'),('1987-10-07','AA','2275'),('1987-10-07','AA','2351'),('1987-10-07','AA','2357'),('1987-10-07','AA','2361'),('1987-10-07','AA','2490'),('1987-10-07','AA','2528'),('1987-10-07','AA','2528'),('1987-10-07','AA','2735'),('1987-10-07','AA','2735'),('1987-10-07','AA','2751'),('1987-10-07','AL','2'),('1987-10-07','AL','2'),('1987-10-07','AL','7'),('1987-10-07','AL','7'),('1987-10-07','AL','26'),('1987-10-07','AL','26'),('1987-10-07','AL','34'),('1987-10-07','AL','34'),('1987-10-07','AL','36'),('1987-10-07','AL','36'),('1987-10-07','AL','45'),('1987-10-07','AL','45'),('1987-10-07','AL','45'),('1987-10-07','AL','91'),('1987-10-07','AL','91'),('1987-10-07','AL','104'),('1987-10-07','AL','104'),('1987-10-07','AL','104'),('1987-10-07','AL','109'),('1987-10-07','AL','112'),('1987-10-07','AL','112'),('1987-10-07','AL','123'),('1987-10-07','AL','149'),('1987-10-07','AL','160'),('1987-10-07','AL','160'),('1987-10-07','AL','165'),('1987-10-07','AL','171'),('1987-10-07','AL','171'),('1987-10-07','AL','176'),('1987-10-07','AL','176'),('1987-10-07','AL','179'),('1987-10-07','AL','215'),('1987-10-07','AL','231'),('1987-10-07','AL','263'),('1987-10-07','AL','263'),('1987-10-07','AL','268'),('1987-10-07','AL','268'),('1987-10-07','AL','268'),('1987-10-07','AL','281'),('1987-10-07','AL','281'),('1987-10-07','AL','287'),('1987-10-07','AL','287'),('1987-10-07','AL','309'),('1987-10-07','AL','309'),('1987-10-07','AL','341'),('1987-10-07','AL','344'),('1987-10-07','AL','344'),('1987-10-07','AL','357'),('1987-10-07','AL','357'),('1987-10-07','AL','368'),('1987-10-07','AL','381'),('1987-10-07','AL','396'),('1987-10-07','AL','397'),('1987-10-07','AL','397'),('1987-10-07','AL','416'),('1987-10-07','AL','416'),('1987-10-07','AL','417'),('1987-10-07','AL','438'),('1987-10-07','AL','438'),('1987-10-07','AL','446'),('1987-10-07','AL','451'),('1987-10-07','AL','451'),('1987-10-07','AL','491'),('1987-10-07','AL','491'),('1987-10-07','AL','523'),('1987-10-07','AL','523'),('1987-10-07','AL','523'),('1987-10-07','AL','525'),('1987-10-07','AL','525'),('1987-10-07','AL','533'),('1987-10-07','AL','533'),('1987-10-07','AL','546'),('1987-10-07','AL','546'),('1987-10-07','AL','556'),('1987-10-07','AL','556'),('1987-10-07','AL','601'),('1987-10-07','AL','627'),('1987-10-07','AL','629'),('1987-10-07','AL','670'),('1987-10-07','AL','670'),('1987-10-07','AL','670'),('1987-10-07','AL','673'),('1987-10-07','AL','680'),('1987-10-08','AA','2'),('1987-10-08','AA','2'),('1987-10-08','AA','2'),('1987-10-08','AA','7'),('1987-10-08','AA','7'),('1987-10-08','AA','26'),('1987-10-08','AA','34'),('1987-10-08','AA','36'),('1987-10-08','AA','91'),('1987-10-08','AA','101'),('1987-10-08','AA','101'),('1987-10-08','AA','109'),('1987-10-08','AA','109'),('1987-10-08','AA','112'),('1987-10-08','AA','123'),('1987-10-08','AA','123'),('1987-10-08','AA','160'),('1987-10-08','AA','165'),('1987-10-08','AA','165'),('1987-10-08','AA','165'),('1987-10-08','AA','176'),('1987-10-08','AA','176'),('1987-10-08','AA','176'),('1987-10-08','AA','176'),('1987-10-08','AA','179'),('1987-10-08','AA','179'),('1987-10-08','AA','215'),('1987-10-08','AA','215'),('1987-10-08','AA','231'),('1987-10-08','AA','231'),('1987-10-08','AA','263'),('1987-10-08','AA','263'),('1987-10-08','AA','268'),('1987-10-08','AA','268'),('1987-10-08','AA','281'),('1987-10-08','AA','287'),('1987-10-08','AA','287'),('1987-10-08','AA','309'),('1987-10-08','AA','309'),('1987-10-08','AA','309'),('1987-10-08','AA','344'),('1987-10-08','AA','344'),('1987-10-08','AA','347'),('1987-10-08','AA','347'),('1987-10-08','AA','368'),('1987-10-08','AA','381'),('1987-10-08','AA','381'),('1987-10-08','AA','381'),('1987-10-08','AA','396'),('1987-10-08','AA','396'),('1987-10-08','AA','397'),('1987-10-08','AA','397'),('1987-10-08','AA','417'),('1987-10-08','AA','417'),('1987-10-08','AA','446'),('1987-10-08','AA','451'),('1987-10-08','AA','460'),('1987-10-08','AA','460'),('1987-10-08','AA','491'),('1987-10-08','AA','504'),('1987-10-08','AA','504'),('1987-10-08','AA','519'),('1987-10-08','AA','519'),('1987-10-08','AA','523'),('1987-10-08','AA','525'),('1987-10-08','AA','533'),('1987-10-08','AA','533'),('1987-10-08','AA','533'),('1987-10-08','AA','546'),('1987-10-08','AA','546'),('1987-10-08','AA','546'),('1987-10-08','AA','546'),('1987-10-08','AA','556'),('1987-10-08','AA','556'),('1987-10-08','AA','556'),('1987-10-08','AA','597'),('1987-10-08','AA','597'),('1987-10-08','AA','597'),('1987-10-08','AA','601'),('1987-10-08','AA','601'),('1987-10-08','AA','627'),('1987-10-08','AA','629'),('1987-10-08','AA','629'),('1987-10-08','AA','670'),('1987-10-08','AA','673'),('1987-10-08','AA','673'),('1987-10-08','AA','680'),('1987-10-08','AA','680'),('1987-10-08','AA','817'),('1987-10-08','AA','817'),('1987-10-08','AA','824'),('1987-10-08','AA','824'),('1987-10-08','AA','832'),('1987-10-08','AA','832'),('1987-10-08','AA','852'),('1987-10-08','AA','866'),('1987-10-08','AA','866'),('1987-10-08','AA','871'),('1987-10-08','AA','871'),('1987-10-08','AA','880'),('1987-10-08','AA','880'),('1987-10-08','AA','880'),('1987-10-08','AA','880'),('1987-10-08','AA','883'),('1987-10-08','AA','883'),('1987-10-08','AA','885'),('1987-10-08','AA','885'),('1987-10-08','AA','885'),('1987-10-08','AA','890'),('1987-10-08','AA','890'),('1987-10-08','AA','893'),('1987-10-08','AA','893'),('1987-10-08','AA','905'),('1987-10-08','AA','905'),('1987-10-08','AA','915'),('1987-10-08','AA','929'),('1987-10-08','AA','929'),('1987-10-08','AA','936'),('1987-10-08','AA','936'),('1987-10-08','AA','937'),('1987-10-08','AA','937'),('1987-10-08','AA','955'),('1987-10-08','AA','955'),('1987-10-08','AA','966'),('1987-10-08','AA','1002'),('1987-10-08','AA','1002'),('1987-10-08','AA','1004'),('1987-10-08','AA','1004'),('1987-10-08','AA','1015'),('1987-10-08','AA','1015'),('1987-10-08','AA','1021'),('1987-10-08','AA','1021'),('1987-10-08','AA','1041'),('1987-10-08','AA','1041'),('1987-10-08','AA','1046'),('1987-10-08','AA','1046'),('1987-10-08','AA','1048'),('1987-10-08','AA','1061'),('1987-10-08','AA','1061'),('1987-10-08','AA','1088'),('1987-10-08','AA','1088'),('1987-10-08','AA','2033'),('1987-10-08','AA','2033'),('1987-10-08','AA','2050'),('1987-10-08','AA','2058'),('1987-10-08','AA','2071'),('1987-10-08','AA','2071'),('1987-10-08','AA','2086'),('1987-10-08','AA','2111'),('1987-10-08','AA','2123'),('1987-10-08','AA','2123'),('1987-10-08','AA','2147'),('1987-10-08','AA','2147'),('1987-10-08','AA','2199'),('1987-10-08','AA','2199'),('1987-10-08','AA','2207'),('1987-10-08','AA','2207'),('1987-10-08','AA','2217'),('1987-10-08','AA','2230'),('1987-10-08','AA','2245'),('1987-10-08','AA','2251'),('1987-10-08','AA','2251'),('1987-10-08','AA','2275'),('1987-10-08','AA','2278'),('1987-10-08','AA','2351'),('1987-10-08','AA','2357'),('1987-10-08','AA','2361'),('1987-10-08','AA','2490'),('1987-10-08','AA','2528'),('1987-10-08','AA','2528'),('1987-10-08','AA','2735'),('1987-10-08','AA','2735'),('1987-10-08','AA','2751'),('1987-10-08','AL','2'),('1987-10-08','AL','2'),('1987-10-08','AL','7'),('1987-10-08','AL','7'),('1987-10-08','AL','26'),('1987-10-08','AL','26'),('1987-10-08','AL','34'),('1987-10-08','AL','34'),('1987-10-08','AL','36'),('1987-10-08','AL','36'),('1987-10-08','AL','45'),('1987-10-08','AL','45'),('1987-10-08','AL','45'),('1987-10-08','AL','91'),('1987-10-08','AL','91'),('1987-10-08','AL','104'),('1987-10-08','AL','104'),('1987-10-08','AL','104'),('1987-10-08','AL','109'),('1987-10-08','AL','112'),('1987-10-08','AL','112'),('1987-10-08','AL','123'),('1987-10-08','AL','149'),('1987-10-08','AL','160'),('1987-10-08','AL','160'),('1987-10-08','AL','165'),('1987-10-08','AL','171'),('1987-10-08','AL','171'),('1987-10-08','AL','176'),('1987-10-08','AL','176'),('1987-10-08','AL','179'),('1987-10-08','AL','215'),('1987-10-08','AL','231'),('1987-10-08','AL','263'),('1987-10-08','AL','263'),('1987-10-08','AL','268'),('1987-10-08','AL','268'),('1987-10-08','AL','268'),('1987-10-08','AL','281'),('1987-10-08','AL','281'),('1987-10-08','AL','287'),('1987-10-08','AL','287'),('1987-10-08','AL','309'),('1987-10-08','AL','309'),('1987-10-08','AL','341'),('1987-10-08','AL','344'),('1987-10-08','AL','344'),('1987-10-08','AL','357'),('1987-10-08','AL','357'),('1987-10-08','AL','368'),('1987-10-08','AL','381'),('1987-10-08','AL','396'),('1987-10-08','AL','397'),('1987-10-08','AL','397'),('1987-10-08','AL','416'),('1987-10-08','AL','416'),('1987-10-08','AL','417'),('1987-10-08','AL','438'),('1987-10-08','AL','438'),('1987-10-08','AL','446'),('1987-10-08','AL','451'),('1987-10-08','AL','451'),('1987-10-08','AL','491'),('1987-10-08','AL','491'),('1987-10-08','AL','523'),('1987-10-08','AL','523'),('1987-10-08','AL','523'),('1987-10-08','AL','525'),('1987-10-08','AL','525'),('1987-10-08','AL','533'),('1987-10-08','AL','533'),('1987-10-08','AL','546'),('1987-10-08','AL','546'),('1987-10-08','AL','556'),('1987-10-08','AL','556'),('1987-10-08','AL','601'),('1987-10-08','AL','601'),('1987-10-08','AL','627'),('1987-10-08','AL','629'),('1987-10-08','AL','670'),('1987-10-08','AL','670'),('1987-10-08','AL','670'),('1987-10-08','AL','680'),('1987-10-09','AA','2'),('1987-10-09','AA','2'),('1987-10-09','AA','2'),('1987-10-09','AA','7'),('1987-10-09','AA','7'),('1987-10-09','AA','26'),('1987-10-09','AA','34'),('1987-10-09','AA','36'),('1987-10-09','AA','91'),('1987-10-09','AA','101'),('1987-10-09','AA','101'),('1987-10-09','AA','109'),('1987-10-09','AA','109'),('1987-10-09','AA','112'),('1987-10-09','AA','123'),('1987-10-09','AA','123'),('1987-10-09','AA','160'),('1987-10-09','AA','165'),('1987-10-09','AA','165'),('1987-10-09','AA','176'),('1987-10-09','AA','176'),('1987-10-09','AA','176'),('1987-10-09','AA','176'),('1987-10-09','AA','179'),('1987-10-09','AA','179'),('1987-10-09','AA','215'),('1987-10-09','AA','215'),('1987-10-09','AA','231'),('1987-10-09','AA','263'),('1987-10-09','AA','263'),('1987-10-09','AA','268'),('1987-10-09','AA','268'),('1987-10-09','AA','281'),('1987-10-09','AA','287'),('1987-10-09','AA','309'),('1987-10-09','AA','309'),('1987-10-09','AA','309'),('1987-10-09','AA','344'),('1987-10-09','AA','344'),('1987-10-09','AA','347'),('1987-10-09','AA','347'),('1987-10-09','AA','368'),('1987-10-09','AA','381'),('1987-10-09','AA','381'),('1987-10-09','AA','381'),('1987-10-09','AA','396'),('1987-10-09','AA','396'),('1987-10-09','AA','397'),('1987-10-09','AA','397'),('1987-10-09','AA','417'),('1987-10-09','AA','417'),('1987-10-09','AA','451'),('1987-10-09','AA','451'),('1987-10-09','AA','460'),('1987-10-09','AA','460'),('1987-10-09','AA','491'),('1987-10-09','AA','504'),('1987-10-09','AA','504'),('1987-10-09','AA','519'),('1987-10-09','AA','519'),('1987-10-09','AA','523'),('1987-10-09','AA','523'),('1987-10-09','AA','525'),('1987-10-09','AA','525'),('1987-10-09','AA','525'),('1987-10-09','AA','533'),('1987-10-09','AA','533'),('1987-10-09','AA','533'),('1987-10-09','AA','546'),('1987-10-09','AA','546'),('1987-10-09','AA','546'),('1987-10-09','AA','546'),('1987-10-09','AA','556'),('1987-10-09','AA','556'),('1987-10-09','AA','556'),('1987-10-09','AA','597'),('1987-10-09','AA','597'),('1987-10-09','AA','597'),('1987-10-09','AA','601'),('1987-10-09','AA','601'),('1987-10-09','AA','629'),('1987-10-09','AA','629'),('1987-10-09','AA','670'),('1987-10-09','AA','673'),('1987-10-09','AA','673'),('1987-10-09','AA','680'),('1987-10-09','AA','680'),('1987-10-09','AA','817'),('1987-10-09','AA','824'),('1987-10-09','AA','824'),('1987-10-09','AA','824'),('1987-10-09','AA','824'),('1987-10-09','AA','832'),('1987-10-09','AA','832'),('1987-10-09','AA','852'),('1987-10-09','AA','852'),('1987-10-09','AA','866'),('1987-10-09','AA','866'),('1987-10-09','AA','871'),('1987-10-09','AA','880'),('1987-10-09','AA','880'),('1987-10-09','AA','880'),('1987-10-09','AA','883'),('1987-10-09','AA','883'),('1987-10-09','AA','885'),('1987-10-09','AA','885'),('1987-10-09','AA','885'),('1987-10-09','AA','890'),('1987-10-09','AA','890'),('1987-10-09','AA','893'),('1987-10-09','AA','893'),('1987-10-09','AA','905'),('1987-10-09','AA','905'),('1987-10-09','AA','915'),('1987-10-09','AA','929'),('1987-10-09','AA','929'),('1987-10-09','AA','936'),('1987-10-09','AA','936'),('1987-10-09','AA','937'),('1987-10-09','AA','937'),('1987-10-09','AA','955'),('1987-10-09','AA','955'),('1987-10-09','AA','966'),('1987-10-09','AA','1002'),('1987-10-09','AA','1002'),('1987-10-09','AA','1004'),('1987-10-09','AA','1004'),('1987-10-09','AA','1015'),('1987-10-09','AA','1015'),('1987-10-09','AA','1021'),('1987-10-09','AA','1021'),('1987-10-09','AA','1041'),('1987-10-09','AA','1041'),('1987-10-09','AA','1046'),('1987-10-09','AA','1046'),('1987-10-09','AA','1048'),('1987-10-09','AA','1048'),('1987-10-09','AA','1061'),('1987-10-09','AA','1061'),('1987-10-09','AA','1088'),('1987-10-09','AA','1088'),('1987-10-09','AA','2033'),('1987-10-09','AA','2033'),('1987-10-09','AA','2050'),('1987-10-09','AA','2058'),('1987-10-09','AA','2071'),('1987-10-09','AA','2071'),('1987-10-09','AA','2086'),('1987-10-09','AA','2105'),('1987-10-09','AA','2111'),('1987-10-09','AA','2123'),('1987-10-09','AA','2123'),('1987-10-09','AA','2147'),('1987-10-09','AA','2147'),('1987-10-09','AA','2199'),('1987-10-09','AA','2199'),('1987-10-09','AA','2207'),('1987-10-09','AA','2207'),('1987-10-09','AA','2217'),('1987-10-09','AA','2230'),('1987-10-09','AA','2245'),('1987-10-09','AA','2251'),('1987-10-09','AA','2251'),('1987-10-09','AA','2275'),('1987-10-09','AA','2278'),('1987-10-09','AA','2351'),('1987-10-09','AA','2357'),('1987-10-09','AA','2361'),('1987-10-09','AA','2490'),('1987-10-09','AA','2528'),('1987-10-09','AA','2528'),('1987-10-09','AA','2735'),('1987-10-09','AA','2735'),('1987-10-09','AA','2751'),('1987-10-09','AL','2'),('1987-10-09','AL','2'),('1987-10-09','AL','7'),('1987-10-09','AL','7'),('1987-10-09','AL','26'),('1987-10-09','AL','34'),('1987-10-09','AL','34'),('1987-10-09','AL','36'),('1987-10-09','AL','36'),('1987-10-09','AL','45'),('1987-10-09','AL','45'),('1987-10-09','AL','45'),('1987-10-09','AL','91'),('1987-10-09','AL','91'),('1987-10-09','AL','104'),('1987-10-09','AL','104'),('1987-10-09','AL','104'),('1987-10-09','AL','109'),('1987-10-09','AL','112'),('1987-10-09','AL','112'),('1987-10-09','AL','123'),('1987-10-09','AL','149'),('1987-10-09','AL','160'),('1987-10-09','AL','160'),('1987-10-09','AL','165'),('1987-10-09','AL','171'),('1987-10-09','AL','171'),('1987-10-09','AL','176'),('1987-10-09','AL','176'),('1987-10-09','AL','179'),('1987-10-09','AL','215'),('1987-10-09','AL','231'),('1987-10-09','AL','263'),('1987-10-09','AL','263'),('1987-10-09','AL','268'),('1987-10-09','AL','268'),('1987-10-09','AL','268'),('1987-10-09','AL','281'),('1987-10-09','AL','281'),('1987-10-09','AL','287'),('1987-10-09','AL','287'),('1987-10-09','AL','309'),('1987-10-09','AL','309'),('1987-10-09','AL','341'),('1987-10-09','AL','344'),('1987-10-09','AL','344'),('1987-10-09','AL','368'),('1987-10-09','AL','381'),('1987-10-09','AL','396'),('1987-10-09','AL','397'),('1987-10-09','AL','397'),('1987-10-09','AL','416'),('1987-10-09','AL','416'),('1987-10-09','AL','417'),('1987-10-09','AL','438'),('1987-10-09','AL','438'),('1987-10-09','AL','446'),('1987-10-09','AL','451'),('1987-10-09','AL','491'),('1987-10-09','AL','491'),('1987-10-09','AL','523'),('1987-10-09','AL','523'),('1987-10-09','AL','523'),('1987-10-09','AL','525'),('1987-10-09','AL','525'),('1987-10-09','AL','533'),('1987-10-09','AL','533'),('1987-10-09','AL','546'),('1987-10-09','AL','546'),('1987-10-09','AL','556'),('1987-10-09','AL','556'),('1987-10-09','AL','601'),('1987-10-09','AL','601'),('1987-10-09','AL','627'),('1987-10-09','AL','629'),('1987-10-09','AL','670'),('1987-10-09','AL','670'),('1987-10-09','AL','670'),('1987-10-09','AL','673'),('1987-10-09','AL','680'),('1987-10-10','AA','2'),('1987-10-10','AA','2'),('1987-10-10','AA','2'),('1987-10-10','AA','7'),('1987-10-10','AA','7'),('1987-10-10','AA','26'),('1987-10-10','AA','34'),('1987-10-10','AA','36'),('1987-10-10','AA','91'),('1987-10-10','AA','101'),('1987-10-10','AA','101'),('1987-10-10','AA','109'),('1987-10-10','AA','109'),('1987-10-10','AA','112'),('1987-10-10','AA','123'),('1987-10-10','AA','123'),('1987-10-10','AA','160'),('1987-10-10','AA','165'),('1987-10-10','AA','165'),('1987-10-10','AA','165'),('1987-10-10','AA','176'),('1987-10-10','AA','176'),('1987-10-10','AA','176'),('1987-10-10','AA','176'),('1987-10-10','AA','179'),('1987-10-10','AA','179'),('1987-10-10','AA','215'),('1987-10-10','AA','215'),('1987-10-10','AA','231'),('1987-10-10','AA','263'),('1987-10-10','AA','263'),('1987-10-10','AA','268'),('1987-10-10','AA','268'),('1987-10-10','AA','281'),('1987-10-10','AA','287'),('1987-10-10','AA','287'),('1987-10-10','AA','309'),('1987-10-10','AA','309'),('1987-10-10','AA','309'),('1987-10-10','AA','341'),('1987-10-10','AA','344'),('1987-10-10','AA','344'),('1987-10-10','AA','347'),('1987-10-10','AA','347'),('1987-10-10','AA','368'),('1987-10-10','AA','381'),('1987-10-10','AA','381'),('1987-10-10','AA','381'),('1987-10-10','AA','396'),('1987-10-10','AA','396'),('1987-10-10','AA','397'),('1987-10-10','AA','417'),('1987-10-10','AA','417'),('1987-10-10','AA','446'),('1987-10-10','AA','451'),('1987-10-10','AA','451'),('1987-10-10','AA','460'),('1987-10-10','AA','460'),('1987-10-10','AA','491'),('1987-10-10','AA','491'),('1987-10-10','AA','504'),('1987-10-10','AA','504'),('1987-10-10','AA','519'),('1987-10-10','AA','523'),('1987-10-10','AA','523'),('1987-10-10','AA','525'),('1987-10-10','AA','525'),('1987-10-10','AA','525'),('1987-10-10','AA','533'),('1987-10-10','AA','533'),('1987-10-10','AA','546'),('1987-10-10','AA','546'),('1987-10-10','AA','546'),('1987-10-10','AA','546'),('1987-10-10','AA','556'),('1987-10-10','AA','556'),('1987-10-10','AA','556'),('1987-10-10','AA','597'),('1987-10-10','AA','597'),('1987-10-10','AA','597'),('1987-10-10','AA','601'),('1987-10-10','AA','601'),('1987-10-10','AA','627'),('1987-10-10','AA','629'),('1987-10-10','AA','629'),('1987-10-10','AA','670'),('1987-10-10','AA','673'),('1987-10-10','AA','673'),('1987-10-10','AA','680'),('1987-10-10','AA','680'),('1987-10-10','AA','817'),('1987-10-10','AA','817'),('1987-10-10','AA','824'),('1987-10-10','AA','824'),('1987-10-10','AA','824'),('1987-10-10','AA','824'),('1987-10-10','AA','832'),('1987-10-10','AA','832'),('1987-10-10','AA','852'),('1987-10-10','AA','852'),('1987-10-10','AA','866'),('1987-10-10','AA','866'),('1987-10-10','AA','871'),('1987-10-10','AA','871'),('1987-10-10','AA','880'),('1987-10-10','AA','880'),('1987-10-10','AA','880'),('1987-10-10','AA','880'),('1987-10-10','AA','883'),('1987-10-10','AA','883'),('1987-10-10','AA','885'),('1987-10-10','AA','885'),('1987-10-10','AA','885'),('1987-10-10','AA','890'),('1987-10-10','AA','890'),('1987-10-10','AA','893'),('1987-10-10','AA','893'),('1987-10-10','AA','905'),('1987-10-10','AA','905'),('1987-10-10','AA','915'),('1987-10-10','AA','929'),('1987-10-10','AA','929'),('1987-10-10','AA','936'),('1987-10-10','AA','936'),('1987-10-10','AA','937'),('1987-10-10','AA','955'),('1987-10-10','AA','955'),('1987-10-10','AA','966'),('1987-10-10','AA','1002'),('1987-10-10','AA','1002'),('1987-10-10','AA','1004'),('1987-10-10','AA','1004'),('1987-10-10','AA','1015'),('1987-10-10','AA','1015'),('1987-10-10','AA','1021'),('1987-10-10','AA','1021'),('1987-10-10','AA','1041'),('1987-10-10','AA','1041'),('1987-10-10','AA','1046'),('1987-10-10','AA','1046'),('1987-10-10','AA','1048'),('1987-10-10','AA','1048'),('1987-10-10','AA','1061'),('1987-10-10','AA','1061'),('1987-10-10','AA','1088'),('1987-10-10','AA','1088'),('1987-10-10','AA','2033'),('1987-10-10','AA','2033'),('1987-10-10','AA','2050'),('1987-10-10','AA','2058'),('1987-10-10','AA','2071'),('1987-10-10','AA','2071'),('1987-10-10','AA','2086'),('1987-10-10','AA','2111'),('1987-10-10','AA','2123'),('1987-10-10','AA','2123'),('1987-10-10','AA','2147'),('1987-10-10','AA','2147'),('1987-10-10','AA','2199'),('1987-10-10','AA','2207'),('1987-10-10','AA','2207'),('1987-10-10','AA','2217'),('1987-10-10','AA','2230'),('1987-10-10','AA','2245'),('1987-10-10','AA','2251'),('1987-10-10','AA','2251'),('1987-10-10','AA','2275'),('1987-10-10','AA','2278'),('1987-10-10','AA','2351'),('1987-10-10','AA','2357'),('1987-10-10','AA','2361'),('1987-10-10','AA','2490'),('1987-10-10','AA','2528'),('1987-10-10','AA','2528'),('1987-10-10','AA','2735'),('1987-10-10','AA','2735'),('1987-10-10','AL','2'),('1987-10-10','AL','2'),('1987-10-10','AL','7'),('1987-10-10','AL','7'),('1987-10-10','AL','26'),('1987-10-10','AL','26'),('1987-10-10','AL','34'),('1987-10-10','AL','34'),('1987-10-10','AL','36'),('1987-10-10','AL','36'),('1987-10-10','AL','45'),('1987-10-10','AL','45'),('1987-10-10','AL','45'),('1987-10-10','AL','91'),('1987-10-10','AL','91'),('1987-10-10','AL','104'),('1987-10-10','AL','104'),('1987-10-10','AL','109'),('1987-10-10','AL','112'),('1987-10-10','AL','112'),('1987-10-10','AL','149'),('1987-10-10','AL','160'),('1987-10-10','AL','165'),('1987-10-10','AL','171'),('1987-10-10','AL','171'),('1987-10-10','AL','176'),('1987-10-10','AL','176'),('1987-10-10','AL','179'),('1987-10-10','AL','215'),('1987-10-10','AL','231'),('1987-10-10','AL','263'),('1987-10-10','AL','268'),('1987-10-10','AL','268'),('1987-10-10','AL','268'),('1987-10-10','AL','287'),('1987-10-10','AL','287'),('1987-10-10','AL','309'),('1987-10-10','AL','309'),('1987-10-10','AL','344'),('1987-10-10','AL','344'),('1987-10-10','AL','357'),('1987-10-10','AL','396'),('1987-10-10','AL','397'),('1987-10-10','AL','397'),('1987-10-10','AL','397'),('1987-10-10','AL','416'),('1987-10-10','AL','417'),('1987-10-10','AL','438'),('1987-10-10','AL','438'),('1987-10-10','AL','451'),('1987-10-10','AL','451'),('1987-10-10','AL','491'),('1987-10-10','AL','491'),('1987-10-10','AL','523'),('1987-10-10','AL','523'),('1987-10-10','AL','525'),('1987-10-10','AL','525'),('1987-10-10','AL','533'),('1987-10-10','AL','546'),('1987-10-10','AL','546'),('1987-10-10','AL','556'),('1987-10-10','AL','556'),('1987-10-10','AL','601'),('1987-10-10','AL','601'),('1987-10-10','AL','627'),('1987-10-10','AL','670'),('1987-10-10','AL','673'),('1987-10-10','AL','680'),('1987-10-10','AL','905'),('1987-10-10','AL','936'),('1987-10-10','AL','966'),('1987-10-11','AA','2'),('1987-10-11','AA','2'),('1987-10-11','AA','2'),('1987-10-11','AA','7'),('1987-10-11','AA','7'),('1987-10-11','AA','26'),('1987-10-11','AA','36'),('1987-10-11','AA','91'),('1987-10-11','AA','101'),('1987-10-11','AA','101'),('1987-10-11','AA','109'),('1987-10-11','AA','109'),('1987-10-11','AA','112'),('1987-10-11','AA','123'),('1987-10-11','AA','160'),('1987-10-11','AA','165'),('1987-10-11','AA','165'),('1987-10-11','AA','165'),('1987-10-11','AA','176'),('1987-10-11','AA','176'),('1987-10-11','AA','176'),('1987-10-11','AA','176'),('1987-10-11','AA','179'),('1987-10-11','AA','179'),('1987-10-11','AA','215'),('1987-10-11','AA','215'),('1987-10-11','AA','231'),('1987-10-11','AA','263'),('1987-10-11','AA','263'),('1987-10-11','AA','268'),('1987-10-11','AA','268'),('1987-10-11','AA','281'),('1987-10-11','AA','287'),('1987-10-11','AA','287'),('1987-10-11','AA','309'),('1987-10-11','AA','309'),('1987-10-11','AA','309'),('1987-10-11','AA','341'),('1987-10-11','AA','344'),('1987-10-11','AA','344'),('1987-10-11','AA','347'),('1987-10-11','AA','347'),('1987-10-11','AA','368'),('1987-10-11','AA','381'),('1987-10-11','AA','381'),('1987-10-11','AA','381'),('1987-10-11','AA','396'),('1987-10-11','AA','396'),('1987-10-11','AA','397'),('1987-10-11','AA','397'),('1987-10-11','AA','417'),('1987-10-11','AA','417'),('1987-10-11','AA','446'),('1987-10-11','AA','451'),('1987-10-11','AA','451'),('1987-10-11','AA','460'),('1987-10-11','AA','460'),('1987-10-11','AA','491'),('1987-10-11','AA','491'),('1987-10-11','AA','504'),('1987-10-11','AA','504'),('1987-10-11','AA','519'),('1987-10-11','AA','519'),('1987-10-11','AA','523'),('1987-10-11','AA','523'),('1987-10-11','AA','525'),('1987-10-11','AA','525'),('1987-10-11','AA','525'),('1987-10-11','AA','533'),('1987-10-11','AA','533'),('1987-10-11','AA','533'),('1987-10-11','AA','546'),('1987-10-11','AA','546'),('1987-10-11','AA','546'),('1987-10-11','AA','546'),('1987-10-11','AA','556'),('1987-10-11','AA','556'),('1987-10-11','AA','556'),('1987-10-11','AA','597'),('1987-10-11','AA','597'),('1987-10-11','AA','597'),('1987-10-11','AA','601'),('1987-10-11','AA','601'),('1987-10-11','AA','627'),('1987-10-11','AA','629'),('1987-10-11','AA','629'),('1987-10-11','AA','670'),('1987-10-11','AA','673'),('1987-10-11','AA','673'),('1987-10-11','AA','680'),('1987-10-11','AA','680'),('1987-10-11','AA','817'),('1987-10-11','AA','817'),('1987-10-11','AA','824'),('1987-10-11','AA','824'),('1987-10-11','AA','824'),('1987-10-11','AA','824'),('1987-10-11','AA','832'),('1987-10-11','AA','832'),('1987-10-11','AA','852'),('1987-10-11','AA','852'),('1987-10-11','AA','866'),('1987-10-11','AA','866'),('1987-10-11','AA','871'),('1987-10-11','AA','871'),('1987-10-11','AA','880'),('1987-10-11','AA','880'),('1987-10-11','AA','880'),('1987-10-11','AA','880'),('1987-10-11','AA','883'),('1987-10-11','AA','883'),('1987-10-11','AA','885'),('1987-10-11','AA','885'),('1987-10-11','AA','885'),('1987-10-11','AA','890'),('1987-10-11','AA','890'),('1987-10-11','AA','893'),('1987-10-11','AA','893'),('1987-10-11','AA','905'),('1987-10-11','AA','905'),('1987-10-11','AA','915'),('1987-10-11','AA','929'),('1987-10-11','AA','929'),('1987-10-11','AA','936'),('1987-10-11','AA','936'),('1987-10-11','AA','937'),('1987-10-11','AA','937'),('1987-10-11','AA','955'),('1987-10-11','AA','955'),('1987-10-11','AA','966'),('1987-10-11','AA','1002'),('1987-10-11','AA','1002'),('1987-10-11','AA','1004'),('1987-10-11','AA','1004'),('1987-10-11','AA','1015'),('1987-10-11','AA','1015'),('1987-10-11','AA','1021'),('1987-10-11','AA','1021'),('1987-10-11','AA','1041'),('1987-10-11','AA','1041'),('1987-10-11','AA','1046'),('1987-10-11','AA','1046'),('1987-10-11','AA','1048'),('1987-10-11','AA','1048'),('1987-10-11','AA','1061'),('1987-10-11','AA','1061'),('1987-10-11','AA','1088'),('1987-10-11','AA','1088'),('1987-10-11','AA','2033'),('1987-10-11','AA','2033'),('1987-10-11','AA','2058'),('1987-10-11','AA','2071'),('1987-10-11','AA','2071'),('1987-10-11','AA','2086'),('1987-10-11','AA','2111'),('1987-10-11','AA','2123'),('1987-10-11','AA','2123'),('1987-10-11','AA','2147'),('1987-10-11','AA','2147'),('1987-10-11','AA','2199'),('1987-10-11','AA','2199'),('1987-10-11','AA','2199'),('1987-10-11','AA','2207'),('1987-10-11','AA','2207'),('1987-10-11','AA','2230'),('1987-10-11','AA','2245'),('1987-10-11','AA','2251'),('1987-10-11','AA','2251'),('1987-10-11','AA','2275'),('1987-10-11','AA','2278'),('1987-10-11','AA','2351'),('1987-10-11','AA','2357'),('1987-10-11','AA','2361'),('1987-10-11','AA','2490'),('1987-10-11','AA','2528'),('1987-10-11','AA','2528'),('1987-10-11','AA','2735'),('1987-10-11','AA','2735'),('1987-10-11','AA','2751'),('1987-10-11','AL','2'),('1987-10-11','AL','2'),('1987-10-11','AL','7'),('1987-10-11','AL','7'),('1987-10-11','AL','26'),('1987-10-11','AL','26'),('1987-10-11','AL','34'),('1987-10-11','AL','34'),('1987-10-11','AL','36'),('1987-10-11','AL','36'),('1987-10-11','AL','45'),('1987-10-11','AL','45'),('1987-10-11','AL','45'),('1987-10-11','AL','91'),('1987-10-11','AL','91'),('1987-10-11','AL','104'),('1987-10-11','AL','104'),('1987-10-11','AL','104'),('1987-10-11','AL','112'),('1987-10-11','AL','123'),('1987-10-11','AL','149'),('1987-10-11','AL','160'),('1987-10-11','AL','160'),('1987-10-11','AL','165'),('1987-10-11','AL','171'),('1987-10-11','AL','171'),('1987-10-11','AL','176'),('1987-10-11','AL','176'),('1987-10-11','AL','179'),('1987-10-11','AL','215'),('1987-10-11','AL','231'),('1987-10-11','AL','263'),('1987-10-11','AL','263'),('1987-10-11','AL','281'),('1987-10-11','AL','281'),('1987-10-11','AL','309'),('1987-10-11','AL','309'),('1987-10-11','AL','341'),('1987-10-11','AL','344'),('1987-10-11','AL','344'),('1987-10-11','AL','357'),('1987-10-11','AL','357'),('1987-10-11','AL','368'),('1987-10-11','AL','396'),('1987-10-11','AL','416'),('1987-10-11','AL','416'),('1987-10-11','AL','417'),('1987-10-11','AL','438'),('1987-10-11','AL','438'),('1987-10-11','AL','446'),('1987-10-11','AL','451'),('1987-10-11','AL','491'),('1987-10-11','AL','491'),('1987-10-11','AL','523'),('1987-10-11','AL','523'),('1987-10-11','AL','523'),('1987-10-11','AL','525'),('1987-10-11','AL','525'),('1987-10-11','AL','533'),('1987-10-11','AL','533'),('1987-10-11','AL','546'),('1987-10-11','AL','546'),('1987-10-11','AL','556'),('1987-10-11','AL','556'),('1987-10-11','AL','601'),('1987-10-11','AL','601'),('1987-10-11','AL','627'),('1987-10-11','AL','629'),('1987-10-11','AL','670'),('1987-10-11','AL','670'),('1987-10-11','AL','670'),('1987-10-11','AL','673'),('1987-10-11','AL','680'),('1987-10-11','AL','937'),('1987-10-11','AL','937'),('1987-10-11','AL','955'),('1987-10-21','AA','2'),('1987-10-21','AA','2'),('1987-10-21','AA','2'),('1987-10-21','AA','7'),('1987-10-21','AA','7'),('1987-10-21','AA','26'),('1987-10-21','AA','34'),('1987-10-21','AA','36'),('1987-10-21','AA','91'),('1987-10-21','AA','101'),('1987-10-21','AA','101'),('1987-10-21','AA','109'),('1987-10-21','AA','109'),('1987-10-21','AA','123'),('1987-10-21','AA','123'),('1987-10-21','AA','160'),('1987-10-21','AA','165'),('1987-10-21','AA','165'),('1987-10-21','AA','165'),('1987-10-21','AA','176'),('1987-10-21','AA','176'),('1987-10-21','AA','176'),('1987-10-21','AA','176'),('1987-10-21','AA','179'),('1987-10-21','AA','179'),('1987-10-21','AA','215'),('1987-10-21','AA','231'),('1987-10-21','AA','231'),('1987-10-21','AA','263'),('1987-10-21','AA','263'),('1987-10-21','AA','268'),('1987-10-21','AA','268'),('1987-10-21','AA','281'),('1987-10-21','AA','287'),('1987-10-21','AA','287'),('1987-10-21','AA','309'),('1987-10-21','AA','309'),('1987-10-21','AA','309'),('1987-10-21','AA','341'),('1987-10-21','AA','344'),('1987-10-21','AA','344'),('1987-10-21','AA','347'),('1987-10-21','AA','347'),('1987-10-21','AA','368'),('1987-10-21','AA','381'),('1987-10-21','AA','381'),('1987-10-21','AA','381'),('1987-10-21','AA','396'),('1987-10-21','AA','396'),('1987-10-21','AA','397'),('1987-10-21','AA','397'),('1987-10-21','AA','417'),('1987-10-21','AA','417'),('1987-10-21','AA','446'),('1987-10-21','AA','451'),('1987-10-21','AA','451'),('1987-10-21','AA','460'),('1987-10-21','AA','460'),('1987-10-21','AA','491'),('1987-10-21','AA','504'),('1987-10-21','AA','504'),('1987-10-21','AA','519'),('1987-10-21','AA','519'),('1987-10-21','AA','523'),('1987-10-21','AA','523'),('1987-10-21','AA','525'),('1987-10-21','AA','525'),('1987-10-21','AA','525'),('1987-10-21','AA','533'),('1987-10-21','AA','533'),('1987-10-21','AA','533'),('1987-10-21','AA','546'),('1987-10-21','AA','546'),('1987-10-21','AA','546'),('1987-10-21','AA','546'),('1987-10-21','AA','556'),('1987-10-21','AA','556'),('1987-10-21','AA','556'),('1987-10-21','AA','597'),('1987-10-21','AA','597'),('1987-10-21','AA','597'),('1987-10-21','AA','601'),('1987-10-21','AA','601'),('1987-10-21','AA','627'),('1987-10-21','AA','629'),('1987-10-21','AA','629'),('1987-10-21','AA','673'),('1987-10-21','AA','673'),('1987-10-21','AA','680'),('1987-10-21','AA','680'),('1987-10-21','AA','817'),('1987-10-21','AA','817'),('1987-10-21','AA','824'),('1987-10-21','AA','824'),('1987-10-21','AA','824'),('1987-10-21','AA','832'),('1987-10-21','AA','832'),('1987-10-21','AA','852'),('1987-10-21','AA','866'),('1987-10-21','AA','866'),('1987-10-21','AA','871'),('1987-10-21','AA','871'),('1987-10-21','AA','880'),('1987-10-21','AA','880'),('1987-10-21','AA','880'),('1987-10-21','AA','880'),('1987-10-21','AA','883'),('1987-10-21','AA','883'),('1987-10-21','AA','885'),('1987-10-21','AA','885'),('1987-10-21','AA','885'),('1987-10-21','AA','890'),('1987-10-21','AA','890'),('1987-10-21','AA','893'),('1987-10-21','AA','893'),('1987-10-21','AA','905'),('1987-10-21','AA','905'),('1987-10-21','AA','915'),('1987-10-21','AA','929'),('1987-10-21','AA','929'),('1987-10-21','AA','936'),('1987-10-21','AA','936'),('1987-10-21','AA','937'),('1987-10-21','AA','1002'),('1987-10-21','AA','1002'),('1987-10-21','AA','1004'),('1987-10-21','AA','1004'),('1987-10-21','AA','1015'),('1987-10-21','AA','1021'),('1987-10-21','AA','1021'),('1987-10-21','AA','1041'),('1987-10-21','AA','1041'),('1987-10-21','AA','1046'),('1987-10-21','AA','1046'),('1987-10-21','AA','1048'),('1987-10-21','AA','1048'),('1987-10-21','AA','1061'),('1987-10-21','AA','1061'),('1987-10-21','AA','1088'),('1987-10-21','AA','1088'),('1987-10-21','AA','2033'),('1987-10-21','AA','2033'),('1987-10-21','AA','2050'),('1987-10-21','AA','2071'),('1987-10-21','AA','2086'),('1987-10-21','AA','2105'),('1987-10-21','AA','2111'),('1987-10-21','AA','2123'),('1987-10-21','AA','2123'),('1987-10-21','AA','2147'),('1987-10-21','AA','2147'),('1987-10-21','AA','2199'),('1987-10-21','AA','2199'),('1987-10-21','AA','2207'),('1987-10-21','AA','2207'),('1987-10-21','AA','2217'),('1987-10-21','AA','2230'),('1987-10-21','AA','2245'),('1987-10-21','AA','2251'),('1987-10-21','AA','2251'),('1987-10-21','AA','2275'),('1987-10-21','AA','2278'),('1987-10-21','AA','2351'),('1987-10-21','AA','2357'),('1987-10-21','AA','2361'),('1987-10-21','AA','2490'),('1987-10-21','AA','2528'),('1987-10-21','AA','2528'),('1987-10-21','AA','2735'),('1987-10-21','AA','2735'),('1987-10-21','AA','2751'),('1987-10-21','AL','2'),('1987-10-21','AL','2'),('1987-10-21','AL','7'),('1987-10-21','AL','7'),('1987-10-21','AL','26'),('1987-10-21','AL','26'),('1987-10-21','AL','34'),('1987-10-21','AL','34'),('1987-10-21','AL','36'),('1987-10-21','AL','36'),('1987-10-21','AL','45'),('1987-10-21','AL','45'),('1987-10-21','AL','45'),('1987-10-21','AL','91'),('1987-10-21','AL','91'),('1987-10-21','AL','104'),('1987-10-21','AL','104'),('1987-10-21','AL','104'),('1987-10-21','AL','109'),('1987-10-21','AL','112'),('1987-10-21','AL','112'),('1987-10-21','AL','123'),('1987-10-21','AL','149'),('1987-10-21','AL','160'),('1987-10-21','AL','160'),('1987-10-21','AL','165'),('1987-10-21','AL','171'),('1987-10-21','AL','171'),('1987-10-21','AL','176'),('1987-10-21','AL','176'),('1987-10-21','AL','179'),('1987-10-21','AL','215'),('1987-10-21','AL','263'),('1987-10-21','AL','263'),('1987-10-21','AL','268'),('1987-10-21','AL','268'),('1987-10-21','AL','268'),('1987-10-21','AL','281'),('1987-10-21','AL','281'),('1987-10-21','AL','287'),('1987-10-21','AL','287'),('1987-10-21','AL','309'),('1987-10-21','AL','309'),('1987-10-21','AL','341'),('1987-10-21','AL','344'),('1987-10-21','AL','344'),('1987-10-21','AL','357'),('1987-10-21','AL','357'),('1987-10-21','AL','368'),('1987-10-21','AL','381'),('1987-10-21','AL','396'),('1987-10-21','AL','397'),('1987-10-21','AL','397'),('1987-10-21','AL','416'),('1987-10-21','AL','416'),('1987-10-21','AL','417'),('1987-10-21','AL','438'),('1987-10-21','AL','438'),('1987-10-21','AL','446'),('1987-10-21','AL','451'),('1987-10-21','AL','451'),('1987-10-21','AL','491'),('1987-10-21','AL','491'),('1987-10-21','AL','523'),('1987-10-21','AL','523'),('1987-10-21','AL','523'),('1987-10-21','AL','525'),('1987-10-21','AL','525'),('1987-10-21','AL','533'),('1987-10-21','AL','533'),('1987-10-21','AL','546'),('1987-10-21','AL','546'),('1987-10-21','AL','556'),('1987-10-21','AL','556'),('1987-10-21','AL','601'),('1987-10-21','AL','601'),('1987-10-21','AL','627'),('1987-10-21','AL','629'),('1987-10-21','AL','670'),('1987-10-21','AL','670'),('1987-10-21','AL','670'),('1987-10-21','AL','673'),('1987-10-21','AL','680'),('1987-10-22','AA','2'),('1987-10-22','AA','2'),('1987-10-22','AA','2'),('1987-10-22','AA','7'),('1987-10-22','AA','7'),('1987-10-22','AA','26'),('1987-10-22','AA','34'),('1987-10-22','AA','36'),('1987-10-22','AA','91'),('1987-10-22','AA','101'),('1987-10-22','AA','101'),('1987-10-22','AA','109'),('1987-10-22','AA','109'),('1987-10-22','AA','112'),('1987-10-22','AA','123'),('1987-10-22','AA','123'),('1987-10-22','AA','160'),('1987-10-22','AA','165'),('1987-10-22','AA','165'),('1987-10-22','AA','165'),('1987-10-22','AA','176'),('1987-10-22','AA','176'),('1987-10-22','AA','176'),('1987-10-22','AA','179'),('1987-10-22','AA','215'),('1987-10-22','AA','215'),('1987-10-22','AA','231'),('1987-10-22','AA','231'),('1987-10-22','AA','263'),('1987-10-22','AA','263'),('1987-10-22','AA','268'),('1987-10-22','AA','268'),('1987-10-22','AA','281'),('1987-10-22','AA','287'),('1987-10-22','AA','287'),('1987-10-22','AA','309'),('1987-10-22','AA','309'),('1987-10-22','AA','309'),('1987-10-22','AA','341'),('1987-10-22','AA','344'),('1987-10-22','AA','344'),('1987-10-22','AA','347'),('1987-10-22','AA','368'),('1987-10-22','AA','381'),('1987-10-22','AA','381'),('1987-10-22','AA','381'),('1987-10-22','AA','396'),('1987-10-22','AA','396'),('1987-10-22','AA','397'),('1987-10-22','AA','397'),('1987-10-22','AA','417'),('1987-10-22','AA','417'),('1987-10-22','AA','446'),('1987-10-22','AA','451'),('1987-10-22','AA','451'),('1987-10-22','AA','460'),('1987-10-22','AA','460'),('1987-10-22','AA','491'),('1987-10-22','AA','504'),('1987-10-22','AA','519'),('1987-10-22','AA','519'),('1987-10-22','AA','523'),('1987-10-22','AA','523'),('1987-10-22','AA','525'),('1987-10-22','AA','525'),('1987-10-22','AA','533'),('1987-10-22','AA','533'),('1987-10-22','AA','533'),('1987-10-22','AA','546'),('1987-10-22','AA','546'),('1987-10-22','AA','546'),('1987-10-22','AA','546'),('1987-10-22','AA','556'),('1987-10-22','AA','556'),('1987-10-22','AA','556'),('1987-10-22','AA','597'),('1987-10-22','AA','597'),('1987-10-22','AA','597'),('1987-10-22','AA','601'),('1987-10-22','AA','601'),('1987-10-22','AA','627'),('1987-10-22','AA','629'),('1987-10-22','AA','629'),('1987-10-22','AA','673'),('1987-10-22','AA','673'),('1987-10-22','AA','680'),('1987-10-22','AA','680'),('1987-10-22','AA','817'),('1987-10-22','AA','817'),('1987-10-22','AA','824'),('1987-10-22','AA','824'),('1987-10-22','AA','824'),('1987-10-22','AA','832'),('1987-10-22','AA','832'),('1987-10-22','AA','852'),('1987-10-22','AA','852'),('1987-10-22','AA','866'),('1987-10-22','AA','866'),('1987-10-22','AA','871'),('1987-10-22','AA','871'),('1987-10-22','AA','880'),('1987-10-22','AA','880'),('1987-10-22','AA','880'),('1987-10-22','AA','880'),('1987-10-22','AA','883'),('1987-10-22','AA','883'),('1987-10-22','AA','885'),('1987-10-22','AA','885'),('1987-10-22','AA','885'),('1987-10-22','AA','890'),('1987-10-22','AA','890'),('1987-10-22','AA','893'),('1987-10-22','AA','893'),('1987-10-22','AA','905'),('1987-10-22','AA','905'),('1987-10-22','AA','915'),('1987-10-22','AA','929'),('1987-10-22','AA','929'),('1987-10-22','AA','936'),('1987-10-22','AA','936'),('1987-10-22','AA','937'),('1987-10-22','AA','937'),('1987-10-22','AA','955'),('1987-10-22','AA','955'),('1987-10-22','AA','1002'),('1987-10-22','AA','1002'),('1987-10-22','AA','1004'),('1987-10-22','AA','1015'),('1987-10-22','AA','1015'),('1987-10-22','AA','1021'),('1987-10-22','AA','1021'),('1987-10-22','AA','1041'),('1987-10-22','AA','1041'),('1987-10-22','AA','1046'),('1987-10-22','AA','1046'),('1987-10-22','AA','1048'),('1987-10-22','AA','1048'),('1987-10-22','AA','1061'),('1987-10-22','AA','1061'),('1987-10-22','AA','1088'),('1987-10-22','AA','1088'),('1987-10-22','AA','2033'),('1987-10-22','AA','2058'),('1987-10-22','AA','2071'),('1987-10-22','AA','2071'),('1987-10-22','AA','2086'),('1987-10-22','AA','2105'),('1987-10-22','AA','2111'),('1987-10-22','AA','2147'),('1987-10-22','AA','2147'),('1987-10-22','AA','2199'),('1987-10-22','AA','2207'),('1987-10-22','AA','2207'),('1987-10-22','AA','2217'),('1987-10-22','AA','2230'),('1987-10-22','AA','2245'),('1987-10-22','AA','2251'),('1987-10-22','AA','2251'),('1987-10-22','AA','2275'),('1987-10-22','AA','2278'),('1987-10-22','AA','2351'),('1987-10-22','AA','2357'),('1987-10-22','AA','2361'),('1987-10-22','AA','2490'),('1987-10-22','AA','2528'),('1987-10-22','AA','2528'),('1987-10-22','AA','2735'),('1987-10-22','AA','2735'),('1987-10-22','AA','2751'),('1987-10-22','AL','2'),('1987-10-22','AL','2'),('1987-10-22','AL','7'),('1987-10-22','AL','7'),('1987-10-22','AL','26'),('1987-10-22','AL','26'),('1987-10-22','AL','34'),('1987-10-22','AL','34'),('1987-10-22','AL','36'),('1987-10-22','AL','36'),('1987-10-22','AL','45'),('1987-10-22','AL','45'),('1987-10-22','AL','45'),('1987-10-22','AL','91'),('1987-10-22','AL','91'),('1987-10-22','AL','104'),('1987-10-22','AL','104'),('1987-10-22','AL','104'),('1987-10-22','AL','109'),('1987-10-22','AL','112'),('1987-10-22','AL','112'),('1987-10-22','AL','123'),('1987-10-22','AL','149'),('1987-10-22','AL','160'),('1987-10-22','AL','160'),('1987-10-22','AL','165'),('1987-10-22','AL','171'),('1987-10-22','AL','171'),('1987-10-22','AL','176'),('1987-10-22','AL','176'),('1987-10-22','AL','179'),('1987-10-22','AL','215'),('1987-10-22','AL','231'),('1987-10-22','AL','263'),('1987-10-22','AL','263'),('1987-10-22','AL','268'),('1987-10-22','AL','268'),('1987-10-22','AL','268'),('1987-10-22','AL','281'),('1987-10-22','AL','281'),('1987-10-22','AL','287'),('1987-10-22','AL','287'),('1987-10-22','AL','309'),('1987-10-22','AL','309'),('1987-10-22','AL','341'),('1987-10-22','AL','344'),('1987-10-22','AL','344'),('1987-10-22','AL','357'),('1987-10-22','AL','357'),('1987-10-22','AL','368'),('1987-10-22','AL','381'),('1987-10-22','AL','396'),('1987-10-22','AL','397'),('1987-10-22','AL','397'),('1987-10-22','AL','416'),('1987-10-22','AL','417'),('1987-10-22','AL','438'),('1987-10-22','AL','438'),('1987-10-22','AL','446'),('1987-10-22','AL','451'),('1987-10-22','AL','451'),('1987-10-22','AL','491'),('1987-10-22','AL','491'),('1987-10-22','AL','523'),('1987-10-22','AL','523'),('1987-10-22','AL','523'),('1987-10-22','AL','525'),('1987-10-22','AL','525'),('1987-10-22','AL','533'),('1987-10-22','AL','533'),('1987-10-22','AL','546'),('1987-10-22','AL','546'),('1987-10-22','AL','556'),('1987-10-22','AL','556'),('1987-10-22','AL','601'),('1987-10-22','AL','601'),('1987-10-22','AL','627'),('1987-10-22','AL','629'),('1987-10-22','AL','670'),('1987-10-22','AL','670'),('1987-10-22','AL','670'),('1987-10-22','AL','673'),('1987-10-22','AL','680'),('1987-10-23','AA','2'),('1987-10-23','AA','2'),('1987-10-23','AA','2'),('1987-10-23','AA','7'),('1987-10-23','AA','7'),('1987-10-23','AA','26'),('1987-10-23','AA','34'),('1987-10-23','AA','36'),('1987-10-23','AA','91'),('1987-10-23','AA','101'),('1987-10-23','AA','109'),('1987-10-23','AA','109'),('1987-10-23','AA','112'),('1987-10-23','AA','123'),('1987-10-23','AA','123'),('1987-10-23','AA','160'),('1987-10-23','AA','165'),('1987-10-23','AA','165'),('1987-10-23','AA','165'),('1987-10-23','AA','176'),('1987-10-23','AA','176'),('1987-10-23','AA','176'),('1987-10-23','AA','176'),('1987-10-23','AA','179'),('1987-10-23','AA','179'),('1987-10-23','AA','215'),('1987-10-23','AA','215'),('1987-10-23','AA','231'),('1987-10-23','AA','231'),('1987-10-23','AA','263'),('1987-10-23','AA','263'),('1987-10-23','AA','268'),('1987-10-23','AA','268'),('1987-10-23','AA','281'),('1987-10-23','AA','287'),('1987-10-23','AA','287'),('1987-10-23','AA','309'),('1987-10-23','AA','309'),('1987-10-23','AA','309'),('1987-10-23','AA','341'),('1987-10-23','AA','344'),('1987-10-23','AA','344'),('1987-10-23','AA','347'),('1987-10-23','AA','368'),('1987-10-23','AA','381'),('1987-10-23','AA','381'),('1987-10-23','AA','381'),('1987-10-23','AA','396'),('1987-10-23','AA','396'),('1987-10-23','AA','397'),('1987-10-23','AA','397'),('1987-10-23','AA','417'),('1987-10-23','AA','417'),('1987-10-23','AA','446'),('1987-10-23','AA','451'),('1987-10-23','AA','451'),('1987-10-23','AA','460'),('1987-10-23','AA','491'),('1987-10-23','AA','504'),('1987-10-23','AA','504'),('1987-10-23','AA','519'),('1987-10-23','AA','519'),('1987-10-23','AA','523'),('1987-10-23','AA','523'),('1987-10-23','AA','525'),('1987-10-23','AA','533'),('1987-10-23','AA','533'),('1987-10-23','AA','533'),('1987-10-23','AA','546'),('1987-10-23','AA','546'),('1987-10-23','AA','546'),('1987-10-23','AA','546'),('1987-10-23','AA','556'),('1987-10-23','AA','556'),('1987-10-23','AA','556'),('1987-10-23','AA','597'),('1987-10-23','AA','597'),('1987-10-23','AA','601'),('1987-10-23','AA','601'),('1987-10-23','AA','627'),('1987-10-23','AA','629'),('1987-10-23','AA','629'),('1987-10-23','AA','673'),('1987-10-23','AA','680'),('1987-10-23','AA','680'),('1987-10-23','AA','817'),('1987-10-23','AA','817'),('1987-10-23','AA','824'),('1987-10-23','AA','824'),('1987-10-23','AA','824'),('1987-10-23','AA','824'),('1987-10-23','AA','832'),('1987-10-23','AA','832'),('1987-10-23','AA','852'),('1987-10-23','AA','866'),('1987-10-23','AA','866'),('1987-10-23','AA','871'),('1987-10-23','AA','871'),('1987-10-23','AA','880'),('1987-10-23','AA','880'),('1987-10-23','AA','880'),('1987-10-23','AA','880'),('1987-10-23','AA','883'),('1987-10-23','AA','883'),('1987-10-23','AA','885'),('1987-10-23','AA','885'),('1987-10-23','AA','885'),('1987-10-23','AA','890'),('1987-10-23','AA','890'),('1987-10-23','AA','893'),('1987-10-23','AA','893'),('1987-10-23','AA','905'),('1987-10-23','AA','905'),('1987-10-23','AA','929'),('1987-10-23','AA','929'),('1987-10-23','AA','936'),('1987-10-23','AA','936'),('1987-10-23','AA','937'),('1987-10-23','AA','937'),('1987-10-23','AA','955'),('1987-10-23','AA','955'),('1987-10-23','AA','966'),('1987-10-23','AA','1002'),('1987-10-23','AA','1002'),('1987-10-23','AA','1004'),('1987-10-23','AA','1004'),('1987-10-23','AA','1015'),('1987-10-23','AA','1015'),('1987-10-23','AA','1021'),('1987-10-23','AA','1021'),('1987-10-23','AA','1041'),('1987-10-23','AA','1041'),('1987-10-23','AA','1046'),('1987-10-23','AA','1048'),('1987-10-23','AA','1048'),('1987-10-23','AA','1061'),('1987-10-23','AA','1061'),('1987-10-23','AA','1088'),('1987-10-23','AA','1088'),('1987-10-23','AA','2033'),('1987-10-23','AA','2033'),('1987-10-23','AA','2050'),('1987-10-23','AA','2058'),('1987-10-23','AA','2071'),('1987-10-23','AA','2071'),('1987-10-23','AA','2086'),('1987-10-23','AA','2105'),('1987-10-23','AA','2111'),('1987-10-23','AA','2123'),('1987-10-23','AA','2123'),('1987-10-23','AA','2147'),('1987-10-23','AA','2147'),('1987-10-23','AA','2199'),('1987-10-23','AA','2199'),('1987-10-23','AA','2199'),('1987-10-23','AA','2207'),('1987-10-23','AA','2207'),('1987-10-23','AA','2245'),('1987-10-23','AA','2251'),('1987-10-23','AA','2275'),('1987-10-23','AA','2278'),('1987-10-23','AA','2351'),('1987-10-23','AA','2357'),('1987-10-23','AA','2361'),('1987-10-23','AA','2490'),('1987-10-23','AA','2528'),('1987-10-23','AA','2528'),('1987-10-23','AA','2735'),('1987-10-23','AA','2735'),('1987-10-23','AA','2751'),('1987-10-23','AL','2'),('1987-10-23','AL','2'),('1987-10-23','AL','7'),('1987-10-23','AL','7'),('1987-10-23','AL','26'),('1987-10-23','AL','26'),('1987-10-23','AL','34'),('1987-10-23','AL','34'),('1987-10-23','AL','36'),('1987-10-23','AL','36'),('1987-10-23','AL','45'),('1987-10-23','AL','45'),('1987-10-23','AL','45'),('1987-10-23','AL','91'),('1987-10-23','AL','91'),('1987-10-23','AL','104'),('1987-10-23','AL','104'),('1987-10-23','AL','104'),('1987-10-23','AL','109'),('1987-10-23','AL','112'),('1987-10-23','AL','112'),('1987-10-23','AL','123'),('1987-10-23','AL','149'),('1987-10-23','AL','160'),('1987-10-23','AL','160'),('1987-10-23','AL','165'),('1987-10-23','AL','171'),('1987-10-23','AL','176'),('1987-10-23','AL','176'),('1987-10-23','AL','179'),('1987-10-23','AL','215'),('1987-10-23','AL','231'),('1987-10-23','AL','263'),('1987-10-23','AL','263'),('1987-10-23','AL','268'),('1987-10-23','AL','268'),('1987-10-23','AL','268'),('1987-10-23','AL','281'),('1987-10-23','AL','281'),('1987-10-23','AL','287'),('1987-10-23','AL','287'),('1987-10-23','AL','309'),('1987-10-23','AL','309'),('1987-10-23','AL','341'),('1987-10-23','AL','344'),('1987-10-23','AL','344'),('1987-10-23','AL','357'),('1987-10-23','AL','357'),('1987-10-23','AL','368'),('1987-10-23','AL','381'),('1987-10-23','AL','396'),('1987-10-23','AL','397'),('1987-10-23','AL','397'),('1987-10-23','AL','416'),('1987-10-23','AL','416'),('1987-10-23','AL','417'),('1987-10-23','AL','438'),('1987-10-23','AL','438'),('1987-10-23','AL','446'),('1987-10-23','AL','451'),('1987-10-23','AL','451'),('1987-10-23','AL','491'),('1987-10-23','AL','491'),('1987-10-23','AL','523'),('1987-10-23','AL','523'),('1987-10-23','AL','523'),('1987-10-23','AL','525'),('1987-10-23','AL','525'),('1987-10-23','AL','533'),('1987-10-23','AL','533'),('1987-10-23','AL','546'),('1987-10-23','AL','546'),('1987-10-23','AL','556'),('1987-10-23','AL','556'),('1987-10-23','AL','601'),('1987-10-23','AL','601'),('1987-10-23','AL','627'),('1987-10-23','AL','629'),('1987-10-23','AL','670'),('1987-10-23','AL','670'),('1987-10-23','AL','670'),('1987-10-23','AL','673'),('1987-10-23','AL','680'),('1987-10-24','AA','2'),('1987-10-24','AA','2'),('1987-10-24','AA','7'),('1987-10-24','AA','7'),('1987-10-24','AA','26'),('1987-10-24','AA','34'),('1987-10-24','AA','36'),('1987-10-24','AA','91'),('1987-10-24','AA','101'),('1987-10-24','AA','101'),('1987-10-24','AA','109'),('1987-10-24','AA','109'),('1987-10-24','AA','112'),('1987-10-24','AA','123'),('1987-10-24','AA','123'),('1987-10-24','AA','160'),('1987-10-24','AA','165'),('1987-10-24','AA','165'),('1987-10-24','AA','165'),('1987-10-24','AA','176'),('1987-10-24','AA','176'),('1987-10-24','AA','176'),('1987-10-24','AA','179'),('1987-10-24','AA','179'),('1987-10-24','AA','215'),('1987-10-24','AA','215'),('1987-10-24','AA','231'),('1987-10-24','AA','263'),('1987-10-24','AA','263'),('1987-10-24','AA','268'),('1987-10-24','AA','268'),('1987-10-24','AA','281'),('1987-10-24','AA','287'),('1987-10-24','AA','287'),('1987-10-24','AA','309'),('1987-10-24','AA','309'),('1987-10-24','AA','309'),('1987-10-24','AA','344'),('1987-10-24','AA','344'),('1987-10-24','AA','347'),('1987-10-24','AA','347'),('1987-10-24','AA','368'),('1987-10-24','AA','381'),('1987-10-24','AA','381'),('1987-10-24','AA','381'),('1987-10-24','AA','396'),('1987-10-24','AA','396'),('1987-10-24','AA','397'),('1987-10-24','AA','397'),('1987-10-24','AA','417'),('1987-10-24','AA','417'),('1987-10-24','AA','446'),('1987-10-24','AA','451'),('1987-10-24','AA','451'),('1987-10-24','AA','460'),('1987-10-24','AA','460'),('1987-10-24','AA','491'),('1987-10-24','AA','491'),('1987-10-24','AA','504'),('1987-10-24','AA','504'),('1987-10-24','AA','519'),('1987-10-24','AA','519'),('1987-10-24','AA','523'),('1987-10-24','AA','523'),('1987-10-24','AA','525'),('1987-10-24','AA','525'),('1987-10-24','AA','525'),('1987-10-24','AA','533'),('1987-10-24','AA','533'),('1987-10-24','AA','546'),('1987-10-24','AA','546'),('1987-10-24','AA','546'),('1987-10-24','AA','556'),('1987-10-24','AA','556'),('1987-10-24','AA','556'),('1987-10-24','AA','597'),('1987-10-24','AA','597'),('1987-10-24','AA','597'),('1987-10-24','AA','601'),('1987-10-24','AA','601'),('1987-10-24','AA','627'),('1987-10-24','AA','629'),('1987-10-24','AA','673'),('1987-10-24','AA','673'),('1987-10-24','AA','680'),('1987-10-24','AA','680'),('1987-10-24','AA','817'),('1987-10-24','AA','817'),('1987-10-24','AA','824'),('1987-10-24','AA','824'),('1987-10-24','AA','824'),('1987-10-24','AA','832'),('1987-10-24','AA','832'),('1987-10-24','AA','852'),('1987-10-24','AA','852'),('1987-10-24','AA','866'),('1987-10-24','AA','866'),('1987-10-24','AA','871'),('1987-10-24','AA','871'),('1987-10-24','AA','880'),('1987-10-24','AA','880'),('1987-10-24','AA','880'),('1987-10-24','AA','880'),('1987-10-24','AA','883'),('1987-10-24','AA','883'),('1987-10-24','AA','885'),('1987-10-24','AA','885'),('1987-10-24','AA','885'),('1987-10-24','AA','890'),('1987-10-24','AA','890'),('1987-10-24','AA','893'),('1987-10-24','AA','893'),('1987-10-24','AA','905'),('1987-10-24','AA','905'),('1987-10-24','AA','915'),('1987-10-24','AA','929'),('1987-10-24','AA','929'),('1987-10-24','AA','936'),('1987-10-24','AA','936'),('1987-10-24','AA','937'),('1987-10-24','AA','937'),('1987-10-24','AA','955'),('1987-10-24','AA','955'),('1987-10-24','AA','966'),('1987-10-24','AA','1002'),('1987-10-24','AA','1002'),('1987-10-24','AA','1004'),('1987-10-24','AA','1004'),('1987-10-24','AA','1015'),('1987-10-24','AA','1021'),('1987-10-24','AA','1021'),('1987-10-24','AA','1041'),('1987-10-24','AA','1041'),('1987-10-24','AA','1046'),('1987-10-24','AA','1046'),('1987-10-24','AA','1048'),('1987-10-24','AA','1048'),('1987-10-24','AA','1061'),('1987-10-24','AA','1061'),('1987-10-24','AA','1088'),('1987-10-24','AA','1088'),('1987-10-24','AA','2033'),('1987-10-24','AA','2033'),('1987-10-24','AA','2050'),('1987-10-24','AA','2058'),('1987-10-24','AA','2071'),('1987-10-24','AA','2071'),('1987-10-24','AA','2086'),('1987-10-24','AA','2105'),('1987-10-24','AA','2111'),('1987-10-24','AA','2123'),('1987-10-24','AA','2147'),('1987-10-24','AA','2199'),('1987-10-24','AA','2199'),('1987-10-24','AA','2207'),('1987-10-24','AA','2217'),('1987-10-24','AA','2230'),('1987-10-24','AA','2245'),('1987-10-24','AA','2251'),('1987-10-24','AA','2251'),('1987-10-24','AA','2275'),('1987-10-24','AA','2278'),('1987-10-24','AA','2351'),('1987-10-24','AA','2357'),('1987-10-24','AA','2361'),('1987-10-24','AA','2490'),('1987-10-24','AA','2528'),('1987-10-24','AA','2528'),('1987-10-24','AA','2735'),('1987-10-24','AA','2735'),('1987-10-24','AL','2'),('1987-10-24','AL','2'),('1987-10-24','AL','7'),('1987-10-24','AL','7'),('1987-10-24','AL','26'),('1987-10-24','AL','26'),('1987-10-24','AL','34'),('1987-10-24','AL','34'),('1987-10-24','AL','36'),('1987-10-24','AL','36'),('1987-10-24','AL','45'),('1987-10-24','AL','91'),('1987-10-24','AL','91'),('1987-10-24','AL','104'),('1987-10-24','AL','104'),('1987-10-24','AL','109'),('1987-10-24','AL','112'),('1987-10-24','AL','112'),('1987-10-24','AL','149'),('1987-10-24','AL','160'),('1987-10-24','AL','160'),('1987-10-24','AL','165'),('1987-10-24','AL','171'),('1987-10-24','AL','171'),('1987-10-24','AL','176'),('1987-10-24','AL','176'),('1987-10-24','AL','179'),('1987-10-24','AL','215'),('1987-10-24','AL','231'),('1987-10-24','AL','263'),('1987-10-24','AL','268'),('1987-10-24','AL','268'),('1987-10-24','AL','268'),('1987-10-24','AL','287'),('1987-10-24','AL','287'),('1987-10-24','AL','309'),('1987-10-24','AL','309'),('1987-10-24','AL','344'),('1987-10-24','AL','344'),('1987-10-24','AL','357'),('1987-10-24','AL','357'),('1987-10-24','AL','381'),('1987-10-24','AL','396'),('1987-10-24','AL','397'),('1987-10-24','AL','397'),('1987-10-24','AL','397'),('1987-10-24','AL','416'),('1987-10-24','AL','417'),('1987-10-24','AL','438'),('1987-10-24','AL','438'),('1987-10-24','AL','451'),('1987-10-24','AL','451'),('1987-10-24','AL','491'),('1987-10-24','AL','491'),('1987-10-24','AL','523'),('1987-10-24','AL','523'),('1987-10-24','AL','525'),('1987-10-24','AL','525'),('1987-10-24','AL','533'),('1987-10-24','AL','546'),('1987-10-24','AL','546'),('1987-10-24','AL','556'),('1987-10-24','AL','556'),('1987-10-24','AL','601'),('1987-10-24','AL','601'),('1987-10-24','AL','627'),('1987-10-24','AL','670'),('1987-10-24','AL','673'),('1987-10-24','AL','680'),('1987-10-24','AL','905'),('1987-10-24','AL','936'),('1987-10-24','AL','966'),('1987-10-24','AL','982'),('1987-10-25','AA','2'),('1987-10-25','AA','2'),('1987-10-25','AA','2'),('1987-10-25','AA','7'),('1987-10-25','AA','7'),('1987-10-25','AA','26'),('1987-10-25','AA','34'),('1987-10-25','AA','36'),('1987-10-25','AA','91'),('1987-10-25','AA','101'),('1987-10-25','AA','109'),('1987-10-25','AA','109'),('1987-10-25','AA','123'),('1987-10-25','AA','123'),('1987-10-25','AA','160'),('1987-10-25','AA','165'),('1987-10-25','AA','165'),('1987-10-25','AA','165'),('1987-10-25','AA','176'),('1987-10-25','AA','176'),('1987-10-25','AA','176'),('1987-10-25','AA','176'),('1987-10-25','AA','179'),('1987-10-25','AA','179'),('1987-10-25','AA','215'),('1987-10-25','AA','215'),('1987-10-25','AA','231'),('1987-10-25','AA','231'),('1987-10-25','AA','263'),('1987-10-25','AA','263'),('1987-10-25','AA','268'),('1987-10-25','AA','268'),('1987-10-25','AA','281'),('1987-10-25','AA','287'),('1987-10-25','AA','287'),('1987-10-25','AA','309'),('1987-10-25','AA','309'),('1987-10-25','AA','309'),('1987-10-25','AA','341'),('1987-10-25','AA','344'),('1987-10-25','AA','344'),('1987-10-25','AA','347'),('1987-10-25','AA','347'),('1987-10-25','AA','368'),('1987-10-25','AA','381'),('1987-10-25','AA','381'),('1987-10-25','AA','396'),('1987-10-25','AA','397'),('1987-10-25','AA','397'),('1987-10-25','AA','417'),('1987-10-25','AA','417'),('1987-10-25','AA','446'),('1987-10-25','AA','451'),('1987-10-25','AA','460'),('1987-10-25','AA','460'),('1987-10-25','AA','491'),('1987-10-25','AA','491'),('1987-10-25','AA','504'),('1987-10-25','AA','504'),('1987-10-25','AA','519'),('1987-10-25','AA','519'),('1987-10-25','AA','523'),('1987-10-25','AA','523'),('1987-10-25','AA','525'),('1987-10-25','AA','525'),('1987-10-25','AA','525'),('1987-10-25','AA','533'),('1987-10-25','AA','533'),('1987-10-25','AA','533'),('1987-10-25','AA','546'),('1987-10-25','AA','546'),('1987-10-25','AA','546'),('1987-10-25','AA','546'),('1987-10-25','AA','556'),('1987-10-25','AA','556'),('1987-10-25','AA','556'),('1987-10-25','AA','597'),('1987-10-25','AA','597'),('1987-10-25','AA','597'),('1987-10-25','AA','601'),('1987-10-25','AA','627'),('1987-10-25','AA','629'),('1987-10-25','AA','629'),('1987-10-25','AA','670'),('1987-10-25','AA','673'),('1987-10-25','AA','673'),('1987-10-25','AA','680'),('1987-10-25','AA','680'),('1987-10-25','AA','817'),('1987-10-25','AA','817'),('1987-10-25','AA','824'),('1987-10-25','AA','824'),('1987-10-25','AA','824'),('1987-10-25','AA','824'),('1987-10-25','AA','832'),('1987-10-25','AA','832'),('1987-10-25','AA','852'),('1987-10-25','AA','852'),('1987-10-25','AA','866'),('1987-10-25','AA','866'),('1987-10-25','AA','871'),('1987-10-25','AA','871'),('1987-10-25','AA','880'),('1987-10-25','AA','880'),('1987-10-25','AA','880'),('1987-10-25','AA','880'),('1987-10-25','AA','883'),('1987-10-25','AA','883'),('1987-10-25','AA','885'),('1987-10-25','AA','885'),('1987-10-25','AA','885'),('1987-10-25','AA','890'),('1987-10-25','AA','893'),('1987-10-25','AA','893'),('1987-10-25','AA','905'),('1987-10-25','AA','905'),('1987-10-25','AA','915'),('1987-10-25','AA','929'),('1987-10-25','AA','929'),('1987-10-25','AA','936'),('1987-10-25','AA','936'),('1987-10-25','AA','937'),('1987-10-25','AA','937'),('1987-10-25','AA','955'),('1987-10-25','AA','955'),('1987-10-25','AA','1002'),('1987-10-25','AA','1002'),('1987-10-25','AA','1004'),('1987-10-25','AA','1004'),('1987-10-25','AA','1015'),('1987-10-25','AA','1015'),('1987-10-25','AA','1021'),('1987-10-25','AA','1021'),('1987-10-25','AA','1041'),('1987-10-25','AA','1041'),('1987-10-25','AA','1046'),('1987-10-25','AA','1046'),('1987-10-25','AA','1048'),('1987-10-25','AA','1048'),('1987-10-25','AA','1061'),('1987-10-25','AA','1061'),('1987-10-25','AA','1088'),('1987-10-25','AA','1088'),('1987-10-25','AA','2033'),('1987-10-25','AA','2033'),('1987-10-25','AA','2050'),('1987-10-25','AA','2058'),('1987-10-25','AA','2071'),('1987-10-25','AA','2071'),('1987-10-25','AA','2086'),('1987-10-25','AA','2111'),('1987-10-25','AA','2123'),('1987-10-25','AA','2123'),('1987-10-25','AA','2147'),('1987-10-25','AA','2199'),('1987-10-25','AA','2199'),('1987-10-25','AA','2207'),('1987-10-25','AA','2207'),('1987-10-25','AA','2230'),('1987-10-25','AA','2245'),('1987-10-25','AA','2251'),('1987-10-25','AA','2251'),('1987-10-25','AA','2275'),('1987-10-25','AA','2278'),('1987-10-25','AA','2357'),('1987-10-25','AA','2361'),('1987-10-25','AA','2490'),('1987-10-25','AA','2528'),('1987-10-25','AA','2528'),('1987-10-25','AA','2735'),('1987-10-25','AA','2735'),('1987-10-25','AA','2751'),('1987-10-25','AL','2'),('1987-10-25','AL','2'),('1987-10-25','AL','7'),('1987-10-25','AL','7'),('1987-10-25','AL','26'),('1987-10-25','AL','26'),('1987-10-25','AL','34'),('1987-10-25','AL','34'),('1987-10-25','AL','36'),('1987-10-25','AL','36'),('1987-10-25','AL','45'),('1987-10-25','AL','45'),('1987-10-25','AL','45'),('1987-10-25','AL','91'),('1987-10-25','AL','91'),('1987-10-25','AL','104'),('1987-10-25','AL','104'),('1987-10-25','AL','104'),('1987-10-25','AL','112'),('1987-10-25','AL','123'),('1987-10-25','AL','149'),('1987-10-25','AL','160'),('1987-10-25','AL','160'),('1987-10-25','AL','165'),('1987-10-25','AL','171'),('1987-10-25','AL','171'),('1987-10-25','AL','176'),('1987-10-25','AL','176'),('1987-10-25','AL','179'),('1987-10-25','AL','215'),('1987-10-25','AL','231'),('1987-10-25','AL','263'),('1987-10-25','AL','263'),('1987-10-25','AL','281'),('1987-10-25','AL','281'),('1987-10-25','AL','309'),('1987-10-25','AL','309'),('1987-10-25','AL','341'),('1987-10-25','AL','344'),('1987-10-25','AL','344'),('1987-10-25','AL','357'),('1987-10-25','AL','357'),('1987-10-25','AL','368'),('1987-10-25','AL','396'),('1987-10-25','AL','416'),('1987-10-25','AL','416'),('1987-10-25','AL','417'),('1987-10-25','AL','438'),('1987-10-25','AL','438'),('1987-10-25','AL','446'),('1987-10-25','AL','451'),('1987-10-25','AL','491'),('1987-10-25','AL','523'),('1987-10-25','AL','523'),('1987-10-25','AL','523'),('1987-10-25','AL','525'),('1987-10-25','AL','525'),('1987-10-25','AL','533'),('1987-10-25','AL','533'),('1987-10-25','AL','546'),('1987-10-25','AL','546'),('1987-10-25','AL','556'),('1987-10-25','AL','556'),('1987-10-25','AL','601'),('1987-10-25','AL','601'),('1987-10-25','AL','627'),('1987-10-25','AL','629'),('1987-10-25','AL','670'),('1987-10-25','AL','670'),('1987-10-25','AL','670'),('1987-10-25','AL','673'),('1987-10-25','AL','680'),('1987-10-25','AL','937'),('1987-10-25','AL','937'),('1987-10-25','AL','955'),('1987-10-26','AA','2'),('1987-10-26','AA','2'),('1987-10-26','AA','2'),('1987-10-26','AA','7'),('1987-10-26','AA','7'),('1987-10-26','AA','26'),('1987-10-26','AA','34'),('1987-10-26','AA','36'),('1987-10-26','AA','91'),('1987-10-26','AA','101'),('1987-10-26','AA','101'),('1987-10-26','AA','109'),('1987-10-26','AA','109'),('1987-10-26','AA','112'),('1987-10-26','AA','123'),('1987-10-26','AA','123'),('1987-10-26','AA','160'),('1987-10-26','AA','165'),('1987-10-26','AA','165'),('1987-10-26','AA','165'),('1987-10-26','AA','176'),('1987-10-26','AA','176'),('1987-10-26','AA','176'),('1987-10-26','AA','176'),('1987-10-26','AA','179'),('1987-10-26','AA','179'),('1987-10-26','AA','215'),('1987-10-26','AA','215'),('1987-10-26','AA','231'),('1987-10-26','AA','231'),('1987-10-26','AA','263'),('1987-10-26','AA','263'),('1987-10-26','AA','268'),('1987-10-26','AA','268'),('1987-10-26','AA','281'),('1987-10-26','AA','287'),('1987-10-26','AA','287'),('1987-10-26','AA','309'),('1987-10-26','AA','309'),('1987-10-26','AA','309'),('1987-10-26','AA','341'),('1987-10-26','AA','344'),('1987-10-26','AA','344'),('1987-10-26','AA','347'),('1987-10-26','AA','347'),('1987-10-26','AA','368'),('1987-10-26','AA','381'),('1987-10-26','AA','381'),('1987-10-26','AA','381'),('1987-10-26','AA','396'),('1987-10-26','AA','396'),('1987-10-26','AA','397'),('1987-10-26','AA','397'),('1987-10-26','AA','417'),('1987-10-26','AA','417'),('1987-10-26','AA','446'),('1987-10-26','AA','451'),('1987-10-26','AA','451'),('1987-10-26','AA','491'),('1987-10-26','AA','504'),('1987-10-26','AA','504'),('1987-10-26','AA','519'),('1987-10-26','AA','523'),('1987-10-26','AA','523'),('1987-10-26','AA','525'),('1987-10-26','AA','525'),('1987-10-26','AA','525'),('1987-10-26','AA','533'),('1987-10-26','AA','533'),('1987-10-26','AA','533'),('1987-10-26','AA','546'),('1987-10-26','AA','546'),('1987-10-26','AA','546'),('1987-10-26','AA','546'),('1987-10-26','AA','556'),('1987-10-26','AA','556'),('1987-10-26','AA','556'),('1987-10-26','AA','597'),('1987-10-26','AA','597'),('1987-10-26','AA','597'),('1987-10-26','AA','601'),('1987-10-26','AA','601'),('1987-10-26','AA','627'),('1987-10-26','AA','629'),('1987-10-26','AA','629'),('1987-10-26','AA','670'),('1987-10-26','AA','673'),('1987-10-26','AA','673'),('1987-10-26','AA','680'),('1987-10-26','AA','680'),('1987-10-26','AA','817'),('1987-10-26','AA','817'),('1987-10-26','AA','824'),('1987-10-26','AA','824'),('1987-10-26','AA','832'),('1987-10-26','AA','832'),('1987-10-26','AA','852'),('1987-10-26','AA','852'),('1987-10-26','AA','866'),('1987-10-26','AA','866'),('1987-10-26','AA','871'),('1987-10-26','AA','871'),('1987-10-26','AA','880'),('1987-10-26','AA','880'),('1987-10-26','AA','880'),('1987-10-26','AA','880'),('1987-10-26','AA','883'),('1987-10-26','AA','883'),('1987-10-26','AA','885'),('1987-10-26','AA','885'),('1987-10-26','AA','885'),('1987-10-26','AA','890'),('1987-10-26','AA','890'),('1987-10-26','AA','893'),('1987-10-26','AA','893'),('1987-10-26','AA','905'),('1987-10-26','AA','905'),('1987-10-26','AA','915'),('1987-10-26','AA','929'),('1987-10-26','AA','929'),('1987-10-26','AA','936'),('1987-10-26','AA','936'),('1987-10-26','AA','937'),('1987-10-26','AA','937'),('1987-10-26','AA','955'),('1987-10-26','AA','955'),('1987-10-26','AA','966'),('1987-10-26','AA','1002'),('1987-10-26','AA','1002'),('1987-10-26','AA','1004'),('1987-10-26','AA','1004'),('1987-10-26','AA','1015'),('1987-10-26','AA','1015'),('1987-10-26','AA','1021'),('1987-10-26','AA','1021'),('1987-10-26','AA','1046'),('1987-10-26','AA','1046'),('1987-10-26','AA','1048'),('1987-10-26','AA','1048'),('1987-10-26','AA','1061'),('1987-10-26','AA','1061'),('1987-10-26','AA','1088'),('1987-10-26','AA','1088'),('1987-10-26','AA','2033'),('1987-10-26','AA','2033'),('1987-10-26','AA','2050'),('1987-10-26','AA','2058'),('1987-10-26','AA','2071'),('1987-10-26','AA','2071'),('1987-10-26','AA','2086'),('1987-10-26','AA','2105'),('1987-10-26','AA','2111'),('1987-10-26','AA','2123'),('1987-10-26','AA','2123'),('1987-10-26','AA','2147'),('1987-10-26','AA','2147'),('1987-10-26','AA','2199'),('1987-10-26','AA','2199'),('1987-10-26','AA','2207'),('1987-10-26','AA','2207'),('1987-10-26','AA','2230'),('1987-10-26','AA','2245'),('1987-10-26','AA','2251'),('1987-10-26','AA','2251'),('1987-10-26','AA','2275'),('1987-10-26','AA','2278'),('1987-10-26','AA','2351'),('1987-10-26','AA','2357'),('1987-10-26','AA','2361'),('1987-10-26','AA','2490'),('1987-10-26','AA','2528'),('1987-10-26','AA','2528'),('1987-10-26','AA','2735'),('1987-10-26','AA','2735'),('1987-10-26','AA','2751'),('1987-10-26','AL','2'),('1987-10-26','AL','2'),('1987-10-26','AL','7'),('1987-10-26','AL','7'),('1987-10-26','AL','26'),('1987-10-26','AL','26'),('1987-10-26','AL','34'),('1987-10-26','AL','34'),('1987-10-26','AL','36'),('1987-10-26','AL','36'),('1987-10-26','AL','45'),('1987-10-26','AL','45'),('1987-10-26','AL','45'),('1987-10-26','AL','91'),('1987-10-26','AL','91'),('1987-10-26','AL','104'),('1987-10-26','AL','104'),('1987-10-26','AL','104'),('1987-10-26','AL','109'),('1987-10-26','AL','112'),('1987-10-26','AL','112'),('1987-10-26','AL','123'),('1987-10-26','AL','149'),('1987-10-26','AL','160'),('1987-10-26','AL','160'),('1987-10-26','AL','165'),('1987-10-26','AL','171'),('1987-10-26','AL','171'),('1987-10-26','AL','176'),('1987-10-26','AL','176'),('1987-10-26','AL','179'),('1987-10-26','AL','215'),('1987-10-26','AL','231'),('1987-10-26','AL','263'),('1987-10-26','AL','263'),('1987-10-26','AL','268'),('1987-10-26','AL','268'),('1987-10-26','AL','268'),('1987-10-26','AL','281'),('1987-10-26','AL','281'),('1987-10-26','AL','287'),('1987-10-26','AL','287'),('1987-10-26','AL','309'),('1987-10-26','AL','309'),('1987-10-26','AL','341'),('1987-10-26','AL','344'),('1987-10-26','AL','357'),('1987-10-26','AL','357'),('1987-10-26','AL','368'),('1987-10-26','AL','381'),('1987-10-26','AL','396'),('1987-10-26','AL','397'),('1987-10-26','AL','397'),('1987-10-26','AL','416'),('1987-10-26','AL','416'),('1987-10-26','AL','417'),('1987-10-26','AL','438'),('1987-10-26','AL','438'),('1987-10-26','AL','446'),('1987-10-26','AL','451'),('1987-10-26','AL','451'),('1987-10-26','AL','491'),('1987-10-26','AL','491'),('1987-10-26','AL','523'),('1987-10-26','AL','523'),('1987-10-26','AL','523'),('1987-10-26','AL','525'),('1987-10-26','AL','533'),('1987-10-26','AL','533'),('1987-10-26','AL','546'),('1987-10-26','AL','546'),('1987-10-26','AL','556'),('1987-10-26','AL','556'),('1987-10-26','AL','601'),('1987-10-26','AL','601'),('1987-10-26','AL','627'),('1987-10-26','AL','629'),('1987-10-26','AL','670'),('1987-10-26','AL','670'),('1987-10-26','AL','670'),('1987-10-26','AL','673'),('1987-10-26','AL','680'),('1987-10-27','AA','2'),('1987-10-27','AA','2'),('1987-10-27','AA','2'),('1987-10-27','AA','7'),('1987-10-27','AA','26'),('1987-10-27','AA','34'),('1987-10-27','AA','36'),('1987-10-27','AA','91'),('1987-10-27','AA','101'),('1987-10-27','AA','101'),('1987-10-27','AA','109'),('1987-10-27','AA','109'),('1987-10-27','AA','112'),('1987-10-27','AA','123'),('1987-10-27','AA','123'),('1987-10-27','AA','160'),('1987-10-27','AA','165'),('1987-10-27','AA','165'),('1987-10-27','AA','165'),('1987-10-27','AA','176'),('1987-10-27','AA','176'),('1987-10-27','AA','176'),('1987-10-27','AA','176'),('1987-10-27','AA','179'),('1987-10-27','AA','179'),('1987-10-27','AA','215'),('1987-10-27','AA','215'),('1987-10-27','AA','231'),('1987-10-27','AA','263'),('1987-10-27','AA','263'),('1987-10-27','AA','268'),('1987-10-27','AA','268'),('1987-10-27','AA','281'),('1987-10-27','AA','287'),('1987-10-27','AA','287'),('1987-10-27','AA','309'),('1987-10-27','AA','309'),('1987-10-27','AA','309'),('1987-10-27','AA','341'),('1987-10-27','AA','344'),('1987-10-27','AA','344'),('1987-10-27','AA','347'),('1987-10-27','AA','347'),('1987-10-27','AA','368'),('1987-10-27','AA','381'),('1987-10-27','AA','381'),('1987-10-27','AA','381'),('1987-10-27','AA','396'),('1987-10-27','AA','396'),('1987-10-27','AA','397'),('1987-10-27','AA','397'),('1987-10-27','AA','417'),('1987-10-27','AA','417'),('1987-10-27','AA','446'),('1987-10-27','AA','451'),('1987-10-27','AA','451'),('1987-10-27','AA','460'),('1987-10-27','AA','460'),('1987-10-27','AA','491'),('1987-10-27','AA','504'),('1987-10-27','AA','504'),('1987-10-27','AA','519'),('1987-10-27','AA','519'),('1987-10-27','AA','523'),('1987-10-27','AA','523'),('1987-10-27','AA','525'),('1987-10-27','AA','525'),('1987-10-27','AA','525'),('1987-10-27','AA','533'),('1987-10-27','AA','533'),('1987-10-27','AA','533'),('1987-10-27','AA','546'),('1987-10-27','AA','546'),('1987-10-27','AA','546'),('1987-10-27','AA','546'),('1987-10-27','AA','556'),('1987-10-27','AA','556'),('1987-10-27','AA','556'),('1987-10-27','AA','597'),('1987-10-27','AA','597'),('1987-10-27','AA','597'),('1987-10-27','AA','601'),('1987-10-27','AA','601'),('1987-10-27','AA','627'),('1987-10-27','AA','629'),('1987-10-27','AA','629'),('1987-10-27','AA','670'),('1987-10-27','AA','673'),('1987-10-27','AA','673'),('1987-10-27','AA','680'),('1987-10-27','AA','680'),('1987-10-27','AA','817'),('1987-10-27','AA','817'),('1987-10-27','AA','824'),('1987-10-27','AA','824'),('1987-10-27','AA','824'),('1987-10-27','AA','824'),('1987-10-27','AA','832'),('1987-10-27','AA','832'),('1987-10-27','AA','852'),('1987-10-27','AA','852'),('1987-10-27','AA','866'),('1987-10-27','AA','866'),('1987-10-27','AA','871'),('1987-10-27','AA','871'),('1987-10-27','AA','880'),('1987-10-27','AA','880'),('1987-10-27','AA','880'),('1987-10-27','AA','880'),('1987-10-27','AA','883'),('1987-10-27','AA','883'),('1987-10-27','AA','885'),('1987-10-27','AA','885'),('1987-10-27','AA','885'),('1987-10-27','AA','890'),('1987-10-27','AA','890'),('1987-10-27','AA','893'),('1987-10-27','AA','893'),('1987-10-27','AA','905'),('1987-10-27','AA','905'),('1987-10-27','AA','915'),('1987-10-27','AA','929'),('1987-10-27','AA','929'),('1987-10-27','AA','936'),('1987-10-27','AA','936'),('1987-10-27','AA','937'),('1987-10-27','AA','937'),('1987-10-27','AA','955'),('1987-10-27','AA','955'),('1987-10-27','AA','966'),('1987-10-27','AA','1002'),('1987-10-27','AA','1002'),('1987-10-27','AA','1004'),('1987-10-27','AA','1004'),('1987-10-27','AA','1015'),('1987-10-27','AA','1015'),('1987-10-27','AA','1021'),('1987-10-27','AA','1021'),('1987-10-27','AA','1041'),('1987-10-27','AA','1041'),('1987-10-27','AA','1046'),('1987-10-27','AA','1046'),('1987-10-27','AA','1048'),('1987-10-27','AA','1061'),('1987-10-27','AA','1061'),('1987-10-27','AA','1088'),('1987-10-27','AA','1088'),('1987-10-27','AA','2033'),('1987-10-27','AA','2033'),('1987-10-27','AA','2050'),('1987-10-27','AA','2058'),('1987-10-27','AA','2071'),('1987-10-27','AA','2071'),('1987-10-27','AA','2086'),('1987-10-27','AA','2105'),('1987-10-27','AA','2111'),('1987-10-27','AA','2123'),('1987-10-27','AA','2123'),('1987-10-27','AA','2147'),('1987-10-27','AA','2147'),('1987-10-27','AA','2199'),('1987-10-27','AA','2199'),('1987-10-27','AA','2207'),('1987-10-27','AA','2207'),('1987-10-27','AA','2217'),('1987-10-27','AA','2230'),('1987-10-27','AA','2245'),('1987-10-27','AA','2251'),('1987-10-27','AA','2251'),('1987-10-27','AA','2275'),('1987-10-27','AA','2278'),('1987-10-27','AA','2357'),('1987-10-27','AA','2490'),('1987-10-27','AA','2528'),('1987-10-27','AA','2528'),('1987-10-27','AA','2735'),('1987-10-27','AA','2735'),('1987-10-27','AL','2'),('1987-10-27','AL','2'),('1987-10-27','AL','7'),('1987-10-27','AL','7'),('1987-10-27','AL','26'),('1987-10-27','AL','26'),('1987-10-27','AL','34'),('1987-10-27','AL','34'),('1987-10-27','AL','36'),('1987-10-27','AL','36'),('1987-10-27','AL','45'),('1987-10-27','AL','45'),('1987-10-27','AL','45'),('1987-10-27','AL','91'),('1987-10-27','AL','91'),('1987-10-27','AL','104'),('1987-10-27','AL','104'),('1987-10-27','AL','104'),('1987-10-27','AL','109'),('1987-10-27','AL','112'),('1987-10-27','AL','112'),('1987-10-27','AL','123'),('1987-10-27','AL','149'),('1987-10-27','AL','160'),('1987-10-27','AL','160'),('1987-10-27','AL','165'),('1987-10-27','AL','171'),('1987-10-27','AL','171'),('1987-10-27','AL','176'),('1987-10-27','AL','176'),('1987-10-27','AL','179'),('1987-10-27','AL','215'),('1987-10-27','AL','231'),('1987-10-27','AL','263'),('1987-10-27','AL','263'),('1987-10-27','AL','268'),('1987-10-27','AL','268'),('1987-10-27','AL','268'),('1987-10-27','AL','281'),('1987-10-27','AL','281'),('1987-10-27','AL','287'),('1987-10-27','AL','287'),('1987-10-27','AL','309'),('1987-10-27','AL','309'),('1987-10-27','AL','341'),('1987-10-27','AL','344'),('1987-10-27','AL','344'),('1987-10-27','AL','357'),('1987-10-27','AL','357'),('1987-10-27','AL','368'),('1987-10-27','AL','381'),('1987-10-27','AL','396'),('1987-10-27','AL','397'),('1987-10-27','AL','397'),('1987-10-27','AL','416'),('1987-10-27','AL','416'),('1987-10-27','AL','417'),('1987-10-27','AL','438'),('1987-10-27','AL','438'),('1987-10-27','AL','446'),('1987-10-27','AL','451'),('1987-10-27','AL','451'),('1987-10-27','AL','491'),('1987-10-27','AL','491'),('1987-10-27','AL','523'),('1987-10-27','AL','523'),('1987-10-27','AL','523'),('1987-10-27','AL','525'),('1987-10-27','AL','525'),('1987-10-27','AL','533'),('1987-10-27','AL','533'),('1987-10-27','AL','546'),('1987-10-27','AL','546'),('1987-10-27','AL','556'),('1987-10-27','AL','556'),('1987-10-27','AL','601'),('1987-10-27','AL','601'),('1987-10-27','AL','627'),('1987-10-27','AL','629'),('1987-10-27','AL','670'),('1987-10-27','AL','670'),('1987-10-27','AL','670'),('1987-10-27','AL','673'),('1987-10-27','AL','680'),('1987-10-28','AA','2'),('1987-10-28','AA','2'),('1987-10-28','AA','2'),('1987-10-28','AA','7'),('1987-10-28','AA','7'),('1987-10-28','AA','26'),('1987-10-28','AA','34'),('1987-10-28','AA','36'),('1987-10-28','AA','91'),('1987-10-28','AA','101'),('1987-10-28','AA','101'),('1987-10-28','AA','109'),('1987-10-28','AA','109'),('1987-10-28','AA','112'),('1987-10-28','AA','123'),('1987-10-28','AA','123'),('1987-10-28','AA','165'),('1987-10-28','AA','165'),('1987-10-28','AA','165'),('1987-10-28','AA','176'),('1987-10-28','AA','176'),('1987-10-28','AA','176'),('1987-10-28','AA','176'),('1987-10-28','AA','179'),('1987-10-28','AA','179'),('1987-10-28','AA','215'),('1987-10-28','AA','215'),('1987-10-28','AA','231'),('1987-10-28','AA','231'),('1987-10-28','AA','263'),('1987-10-28','AA','268'),('1987-10-28','AA','268'),('1987-10-28','AA','281'),('1987-10-28','AA','287'),('1987-10-28','AA','287'),('1987-10-28','AA','309'),('1987-10-28','AA','309'),('1987-10-28','AA','309'),('1987-10-28','AA','341'),('1987-10-28','AA','344'),('1987-10-28','AA','344'),('1987-10-28','AA','347'),('1987-10-28','AA','347'),('1987-10-28','AA','368'),('1987-10-28','AA','381'),('1987-10-28','AA','381'),('1987-10-28','AA','381'),('1987-10-28','AA','396'),('1987-10-28','AA','396'),('1987-10-28','AA','397'),('1987-10-28','AA','397'),('1987-10-28','AA','417'),('1987-10-28','AA','417'),('1987-10-28','AA','446'),('1987-10-28','AA','451'),('1987-10-28','AA','451'),('1987-10-28','AA','460'),('1987-10-28','AA','460'),('1987-10-28','AA','491'),('1987-10-28','AA','504'),('1987-10-28','AA','504'),('1987-10-28','AA','519'),('1987-10-28','AA','519'),('1987-10-28','AA','523'),('1987-10-28','AA','523'),('1987-10-28','AA','525'),('1987-10-28','AA','525'),('1987-10-28','AA','525'),('1987-10-28','AA','533'),('1987-10-28','AA','533'),('1987-10-28','AA','533'),('1987-10-28','AA','546'),('1987-10-28','AA','546'),('1987-10-28','AA','546'),('1987-10-28','AA','546'),('1987-10-28','AA','556'),('1987-10-28','AA','556'),('1987-10-28','AA','556'),('1987-10-28','AA','597'),('1987-10-28','AA','597'),('1987-10-28','AA','597'),('1987-10-28','AA','601'),('1987-10-28','AA','601'),('1987-10-28','AA','627'),('1987-10-28','AA','629'),('1987-10-28','AA','629'),('1987-10-28','AA','670'),('1987-10-28','AA','673'),('1987-10-28','AA','673'),('1987-10-28','AA','680'),('1987-10-28','AA','680'),('1987-10-28','AA','817'),('1987-10-28','AA','817'),('1987-10-28','AA','824'),('1987-10-28','AA','824'),('1987-10-28','AA','824'),('1987-10-28','AA','832'),('1987-10-28','AA','832'),('1987-10-28','AA','852'),('1987-10-28','AA','852'),('1987-10-28','AA','866'),('1987-10-28','AA','866'),('1987-10-28','AA','871'),('1987-10-28','AA','871'),('1987-10-28','AA','880'),('1987-10-28','AA','880'),('1987-10-28','AA','880'),('1987-10-28','AA','880'),('1987-10-28','AA','883'),('1987-10-28','AA','883'),('1987-10-28','AA','885'),('1987-10-28','AA','885'),('1987-10-28','AA','890'),('1987-10-28','AA','890'),('1987-10-28','AA','893'),('1987-10-28','AA','893'),('1987-10-28','AA','905'),('1987-10-28','AA','905'),('1987-10-28','AA','915'),('1987-10-28','AA','929'),('1987-10-28','AA','929'),('1987-10-28','AA','936'),('1987-10-28','AA','936'),('1987-10-28','AA','937'),('1987-10-28','AA','937'),('1987-10-28','AA','955'),('1987-10-28','AA','955'),('1987-10-28','AA','966'),('1987-10-28','AA','1002'),('1987-10-28','AA','1002'),('1987-10-28','AA','1004'),('1987-10-28','AA','1004'),('1987-10-28','AA','1015'),('1987-10-28','AA','1021'),('1987-10-28','AA','1021'),('1987-10-28','AA','1041'),('1987-10-28','AA','1041'),('1987-10-28','AA','1046'),('1987-10-28','AA','1046'),('1987-10-28','AA','1048'),('1987-10-28','AA','1048'),('1987-10-28','AA','1061'),('1987-10-28','AA','1061'),('1987-10-28','AA','1088'),('1987-10-28','AA','1088'),('1987-10-28','AA','2033'),('1987-10-28','AA','2033'),('1987-10-28','AA','2050'),('1987-10-28','AA','2058'),('1987-10-28','AA','2071'),('1987-10-28','AA','2071'),('1987-10-28','AA','2086'),('1987-10-28','AA','2105'),('1987-10-28','AA','2111'),('1987-10-28','AA','2123'),('1987-10-28','AA','2123'),('1987-10-28','AA','2147'),('1987-10-28','AA','2199'),('1987-10-28','AA','2199'),('1987-10-28','AA','2207'),('1987-10-28','AA','2207'),('1987-10-28','AA','2217'),('1987-10-28','AA','2230'),('1987-10-28','AA','2245'),('1987-10-28','AA','2251'),('1987-10-28','AA','2251'),('1987-10-28','AA','2275'),('1987-10-28','AA','2278'),('1987-10-28','AA','2351'),('1987-10-28','AA','2361'),('1987-10-28','AA','2490'),('1987-10-28','AA','2528'),('1987-10-28','AA','2528'),('1987-10-28','AA','2751'),('1987-10-28','AL','2'),('1987-10-28','AL','2'),('1987-10-28','AL','7'),('1987-10-28','AL','7'),('1987-10-28','AL','26'),('1987-10-28','AL','34'),('1987-10-28','AL','34'),('1987-10-28','AL','45'),('1987-10-28','AL','91'),('1987-10-28','AL','91'),('1987-10-28','AL','104'),('1987-10-28','AL','104'),('1987-10-28','AL','104'),('1987-10-28','AL','109'),('1987-10-28','AL','112'),('1987-10-28','AL','112'),('1987-10-28','AL','123'),('1987-10-28','AL','149'),('1987-10-28','AL','160'),('1987-10-28','AL','160'),('1987-10-28','AL','165'),('1987-10-28','AL','171'),('1987-10-28','AL','171'),('1987-10-28','AL','176'),('1987-10-28','AL','176'),('1987-10-28','AL','179'),('1987-10-28','AL','215'),('1987-10-28','AL','231'),('1987-10-28','AL','263'),('1987-10-28','AL','263'),('1987-10-28','AL','268'),('1987-10-28','AL','268'),('1987-10-28','AL','268'),('1987-10-28','AL','281'),('1987-10-28','AL','281'),('1987-10-28','AL','287'),('1987-10-28','AL','287'),('1987-10-28','AL','309'),('1987-10-28','AL','309'),('1987-10-28','AL','341'),('1987-10-28','AL','344'),('1987-10-28','AL','344'),('1987-10-28','AL','357'),('1987-10-28','AL','357'),('1987-10-28','AL','368'),('1987-10-28','AL','381'),('1987-10-28','AL','396'),('1987-10-28','AL','397'),('1987-10-28','AL','397'),('1987-10-28','AL','416'),('1987-10-28','AL','416'),('1987-10-28','AL','417'),('1987-10-28','AL','438'),('1987-10-28','AL','438'),('1987-10-28','AL','446'),('1987-10-28','AL','451'),('1987-10-28','AL','451'),('1987-10-28','AL','491'),('1987-10-28','AL','491'),('1987-10-28','AL','523'),('1987-10-28','AL','523'),('1987-10-28','AL','523'),('1987-10-28','AL','525'),('1987-10-28','AL','525'),('1987-10-28','AL','533'),('1987-10-28','AL','533'),('1987-10-28','AL','546'),('1987-10-28','AL','546'),('1987-10-28','AL','556'),('1987-10-28','AL','556'),('1987-10-28','AL','601'),('1987-10-28','AL','601'),('1987-10-28','AL','627'),('1987-10-28','AL','629'),('1987-10-28','AL','670'),('1987-10-28','AL','670'),('1987-10-28','AL','670'),('1987-10-28','AL','673'),('1987-10-28','AL','680'),('1987-10-29','AA','2'),('1987-10-29','AA','2'),('1987-10-29','AA','2'),('1987-10-29','AA','7'),('1987-10-29','AA','7'),('1987-10-29','AA','26'),('1987-10-29','AA','34'),('1987-10-29','AA','36'),('1987-10-29','AA','91'),('1987-10-29','AA','101'),('1987-10-29','AA','101'),('1987-10-29','AA','109'),('1987-10-29','AA','109'),('1987-10-29','AA','112'),('1987-10-29','AA','123'),('1987-10-29','AA','123'),('1987-10-29','AA','160'),('1987-10-29','AA','165'),('1987-10-29','AA','165'),('1987-10-29','AA','165'),('1987-10-29','AA','176'),('1987-10-29','AA','176'),('1987-10-29','AA','176'),('1987-10-29','AA','176'),('1987-10-29','AA','179'),('1987-10-29','AA','179'),('1987-10-29','AA','215'),('1987-10-29','AA','215'),('1987-10-29','AA','231'),('1987-10-29','AA','231'),('1987-10-29','AA','263'),('1987-10-29','AA','263'),('1987-10-29','AA','268'),('1987-10-29','AA','268'),('1987-10-29','AA','281'),('1987-10-29','AA','287'),('1987-10-29','AA','287'),('1987-10-29','AA','309'),('1987-10-29','AA','309'),('1987-10-29','AA','309'),('1987-10-29','AA','341'),('1987-10-29','AA','344'),('1987-10-29','AA','344'),('1987-10-29','AA','347'),('1987-10-29','AA','347'),('1987-10-29','AA','368'),('1987-10-29','AA','381'),('1987-10-29','AA','381'),('1987-10-29','AA','381'),('1987-10-29','AA','396'),('1987-10-29','AA','396'),('1987-10-29','AA','397'),('1987-10-29','AA','397'),('1987-10-29','AA','417'),('1987-10-29','AA','417'),('1987-10-29','AA','451'),('1987-10-29','AA','451'),('1987-10-29','AA','460'),('1987-10-29','AA','460'),('1987-10-29','AA','491'),('1987-10-29','AA','504'),('1987-10-29','AA','504'),('1987-10-29','AA','519'),('1987-10-29','AA','519'),('1987-10-29','AA','523'),('1987-10-29','AA','523'),('1987-10-29','AA','525'),('1987-10-29','AA','525'),('1987-10-29','AA','525'),('1987-10-29','AA','533'),('1987-10-29','AA','533'),('1987-10-29','AA','533'),('1987-10-29','AA','546'),('1987-10-29','AA','546'),('1987-10-29','AA','546'),('1987-10-29','AA','546'),('1987-10-29','AA','556'),('1987-10-29','AA','556'),('1987-10-29','AA','556'),('1987-10-29','AA','597'),('1987-10-29','AA','597'),('1987-10-29','AA','597'),('1987-10-29','AA','601'),('1987-10-29','AA','601'),('1987-10-29','AA','627'),('1987-10-29','AA','629'),('1987-10-29','AA','670'),('1987-10-29','AA','673'),('1987-10-29','AA','680'),('1987-10-29','AA','680'),('1987-10-29','AA','817'),('1987-10-29','AA','817'),('1987-10-29','AA','824'),('1987-10-29','AA','824'),('1987-10-29','AA','824'),('1987-10-29','AA','824'),('1987-10-29','AA','832'),('1987-10-29','AA','832'),('1987-10-29','AA','852'),('1987-10-29','AA','852'),('1987-10-29','AA','866'),('1987-10-29','AA','866'),('1987-10-29','AA','871'),('1987-10-29','AA','871'),('1987-10-29','AA','880'),('1987-10-29','AA','880'),('1987-10-29','AA','880'),('1987-10-29','AA','880'),('1987-10-29','AA','883'),('1987-10-29','AA','883'),('1987-10-29','AA','885'),('1987-10-29','AA','885'),('1987-10-29','AA','885'),('1987-10-29','AA','890'),('1987-10-29','AA','890'),('1987-10-29','AA','893'),('1987-10-29','AA','893'),('1987-10-29','AA','905'),('1987-10-29','AA','915'),('1987-10-29','AA','929'),('1987-10-29','AA','929'),('1987-10-29','AA','936'),('1987-10-29','AA','936'),('1987-10-29','AA','937'),('1987-10-29','AA','937'),('1987-10-29','AA','955'),('1987-10-29','AA','955'),('1987-10-29','AA','966'),('1987-10-29','AA','1002'),('1987-10-29','AA','1002'),('1987-10-29','AA','1004'),('1987-10-29','AA','1004'),('1987-10-29','AA','1015'),('1987-10-29','AA','1015'),('1987-10-29','AA','1021'),('1987-10-29','AA','1021'),('1987-10-29','AA','1041'),('1987-10-29','AA','1041'),('1987-10-29','AA','1046'),('1987-10-29','AA','1048'),('1987-10-29','AA','1048'),('1987-10-29','AA','1061'),('1987-10-29','AA','1061'),('1987-10-29','AA','1088'),('1987-10-29','AA','1088'),('1987-10-29','AA','2033'),('1987-10-29','AA','2033'),('1987-10-29','AA','2050'),('1987-10-29','AA','2058'),('1987-10-29','AA','2071'),('1987-10-29','AA','2071'),('1987-10-29','AA','2086'),('1987-10-29','AA','2105'),('1987-10-29','AA','2111'),('1987-10-29','AA','2123'),('1987-10-29','AA','2123'),('1987-10-29','AA','2147'),('1987-10-29','AA','2147'),('1987-10-29','AA','2199'),('1987-10-29','AA','2199'),('1987-10-29','AA','2207'),('1987-10-29','AA','2207'),('1987-10-29','AA','2217'),('1987-10-29','AA','2230'),('1987-10-29','AA','2251'),('1987-10-29','AA','2251'),('1987-10-29','AA','2275'),('1987-10-29','AA','2278'),('1987-10-29','AA','2351'),('1987-10-29','AA','2357'),('1987-10-29','AA','2361'),('1987-10-29','AA','2490'),('1987-10-29','AA','2528'),('1987-10-29','AA','2735'),('1987-10-29','AA','2735'),('1987-10-29','AA','2751'),('1987-10-29','AL','2'),('1987-10-29','AL','2'),('1987-10-29','AL','7'),('1987-10-29','AL','7'),('1987-10-29','AL','26'),('1987-10-29','AL','26'),('1987-10-29','AL','34'),('1987-10-29','AL','34'),('1987-10-29','AL','36'),('1987-10-29','AL','36'),('1987-10-29','AL','45'),('1987-10-29','AL','45'),('1987-10-29','AL','45'),('1987-10-29','AL','91'),('1987-10-29','AL','91'),('1987-10-29','AL','104'),('1987-10-29','AL','109'),('1987-10-29','AL','112'),('1987-10-29','AL','112'),('1987-10-29','AL','123'),('1987-10-29','AL','149'),('1987-10-29','AL','160'),('1987-10-29','AL','160'),('1987-10-29','AL','165'),('1987-10-29','AL','171'),('1987-10-29','AL','171'),('1987-10-29','AL','176'),('1987-10-29','AL','176'),('1987-10-29','AL','179'),('1987-10-29','AL','215'),('1987-10-29','AL','231'),('1987-10-29','AL','263'),('1987-10-29','AL','263'),('1987-10-29','AL','268'),('1987-10-29','AL','268'),('1987-10-29','AL','268'),('1987-10-29','AL','281'),('1987-10-29','AL','281'),('1987-10-29','AL','287'),('1987-10-29','AL','287'),('1987-10-29','AL','309'),('1987-10-29','AL','309'),('1987-10-29','AL','341'),('1987-10-29','AL','344'),('1987-10-29','AL','344'),('1987-10-29','AL','357'),('1987-10-29','AL','357'),('1987-10-29','AL','368'),('1987-10-29','AL','381'),('1987-10-29','AL','396'),('1987-10-29','AL','397'),('1987-10-29','AL','397'),('1987-10-29','AL','416'),('1987-10-29','AL','416'),('1987-10-29','AL','417'),('1987-10-29','AL','438'),('1987-10-29','AL','438'),('1987-10-29','AL','446'),('1987-10-29','AL','451'),('1987-10-29','AL','451'),('1987-10-29','AL','491'),('1987-10-29','AL','491'),('1987-10-29','AL','523'),('1987-10-29','AL','523'),('1987-10-29','AL','523'),('1987-10-29','AL','525'),('1987-10-29','AL','525'),('1987-10-29','AL','533'),('1987-10-29','AL','533'),('1987-10-29','AL','546'),('1987-10-29','AL','546'),('1987-10-29','AL','556'),('1987-10-29','AL','556'),('1987-10-29','AL','601'),('1987-10-29','AL','601'),('1987-10-29','AL','627'),('1987-10-29','AL','629'),('1987-10-29','AL','670'),('1987-10-29','AL','670'),('1987-10-29','AL','670'),('1987-10-29','AL','673'),('1987-10-29','AL','680'),('1987-10-30','AA','2'),('1987-10-30','AA','2'),('1987-10-30','AA','2'),('1987-10-30','AA','7'),('1987-10-30','AA','7'),('1987-10-30','AA','26'),('1987-10-30','AA','34'),('1987-10-30','AA','91'),('1987-10-30','AA','101'),('1987-10-30','AA','101'),('1987-10-30','AA','109'),('1987-10-30','AA','109'),('1987-10-30','AA','109'),('1987-10-30','AA','112'),('1987-10-30','AA','123'),('1987-10-30','AA','165'),('1987-10-30','AA','165'),('1987-10-30','AA','165'),('1987-10-30','AA','176'),('1987-10-30','AA','176'),('1987-10-30','AA','176'),('1987-10-30','AA','176'),('1987-10-30','AA','179'),('1987-10-30','AA','179'),('1987-10-30','AA','215'),('1987-10-30','AA','215'),('1987-10-30','AA','231'),('1987-10-30','AA','231'),('1987-10-30','AA','263'),('1987-10-30','AA','268'),('1987-10-30','AA','268'),('1987-10-30','AA','281'),('1987-10-30','AA','287'),('1987-10-30','AA','287'),('1987-10-30','AA','309'),('1987-10-30','AA','309'),('1987-10-30','AA','309'),('1987-10-30','AA','344'),('1987-10-30','AA','344'),('1987-10-30','AA','347'),('1987-10-30','AA','347'),('1987-10-30','AA','368'),('1987-10-30','AA','381'),('1987-10-30','AA','381'),('1987-10-30','AA','381'),('1987-10-30','AA','396'),('1987-10-30','AA','396'),('1987-10-30','AA','397'),('1987-10-30','AA','397'),('1987-10-30','AA','417'),('1987-10-30','AA','417'),('1987-10-30','AA','446'),('1987-10-30','AA','451'),('1987-10-30','AA','451'),('1987-10-30','AA','460'),('1987-10-30','AA','460'),('1987-10-30','AA','491'),('1987-10-30','AA','504'),('1987-10-30','AA','504'),('1987-10-30','AA','519'),('1987-10-30','AA','519'),('1987-10-30','AA','523'),('1987-10-30','AA','523'),('1987-10-30','AA','525'),('1987-10-30','AA','525'),('1987-10-30','AA','525'),('1987-10-30','AA','533'),('1987-10-30','AA','533'),('1987-10-30','AA','533'),('1987-10-30','AA','546'),('1987-10-30','AA','546'),('1987-10-30','AA','546'),('1987-10-30','AA','546'),('1987-10-30','AA','556'),('1987-10-30','AA','556'),('1987-10-30','AA','556'),('1987-10-30','AA','597'),('1987-10-30','AA','597'),('1987-10-30','AA','597'),('1987-10-30','AA','601'),('1987-10-30','AA','601'),('1987-10-30','AA','627'),('1987-10-30','AA','629'),('1987-10-30','AA','629'),('1987-10-30','AA','670'),('1987-10-30','AA','673'),('1987-10-30','AA','673'),('1987-10-30','AA','680'),('1987-10-30','AA','817'),('1987-10-30','AA','817'),('1987-10-30','AA','824'),('1987-10-30','AA','824'),('1987-10-30','AA','824'),('1987-10-30','AA','824'),('1987-10-30','AA','832'),('1987-10-30','AA','832'),('1987-10-30','AA','852'),('1987-10-30','AA','866'),('1987-10-30','AA','866'),('1987-10-30','AA','871'),('1987-10-30','AA','871'),('1987-10-30','AA','880'),('1987-10-30','AA','880'),('1987-10-30','AA','880'),('1987-10-30','AA','880'),('1987-10-30','AA','883'),('1987-10-30','AA','883'),('1987-10-30','AA','885'),('1987-10-30','AA','885'),('1987-10-30','AA','885'),('1987-10-30','AA','890'),('1987-10-30','AA','890'),('1987-10-30','AA','893'),('1987-10-30','AA','893'),('1987-10-30','AA','905'),('1987-10-30','AA','905'),('1987-10-30','AA','915'),('1987-10-30','AA','929'),('1987-10-30','AA','929'),('1987-10-30','AA','936'),('1987-10-30','AA','936'),('1987-10-30','AA','937'),('1987-10-30','AA','937'),('1987-10-30','AA','955'),('1987-10-30','AA','955'),('1987-10-30','AA','966'),('1987-10-30','AA','1002'),('1987-10-30','AA','1002'),('1987-10-30','AA','1004'),('1987-10-30','AA','1004'),('1987-10-30','AA','1015'),('1987-10-30','AA','1015'),('1987-10-30','AA','1021'),('1987-10-30','AA','1021'),('1987-10-30','AA','1041'),('1987-10-30','AA','1041'),('1987-10-30','AA','1046'),('1987-10-30','AA','1046'),('1987-10-30','AA','1048'),('1987-10-30','AA','1048'),('1987-10-30','AA','1061'),('1987-10-30','AA','1061'),('1987-10-30','AA','1088'),('1987-10-30','AA','1088'),('1987-10-30','AA','2033'),('1987-10-30','AA','2033'),('1987-10-30','AA','2050'),('1987-10-30','AA','2058'),('1987-10-30','AA','2071'),('1987-10-30','AA','2071'),('1987-10-30','AA','2086'),('1987-10-30','AA','2105'),('1987-10-30','AA','2111'),('1987-10-30','AA','2123'),('1987-10-30','AA','2123'),('1987-10-30','AA','2147'),('1987-10-30','AA','2147'),('1987-10-30','AA','2199'),('1987-10-30','AA','2199'),('1987-10-30','AA','2207'),('1987-10-30','AA','2207'),('1987-10-30','AA','2217'),('1987-10-30','AA','2230'),('1987-10-30','AA','2245'),('1987-10-30','AA','2251'),('1987-10-30','AA','2275'),('1987-10-30','AA','2278'),('1987-10-30','AA','2351'),('1987-10-30','AA','2357'),('1987-10-30','AA','2361'),('1987-10-30','AA','2490'),('1987-10-30','AA','2528'),('1987-10-30','AA','2528'),('1987-10-30','AA','2735'),('1987-10-30','AA','2735'),('1987-10-30','AA','2751'),('1987-10-30','AL','2'),('1987-10-30','AL','2'),('1987-10-30','AL','7'),('1987-10-30','AL','7'),('1987-10-30','AL','26'),('1987-10-30','AL','26'),('1987-10-30','AL','34'),('1987-10-30','AL','34'),('1987-10-30','AL','36'),('1987-10-30','AL','36'),('1987-10-30','AL','45'),('1987-10-30','AL','45'),('1987-10-30','AL','45'),('1987-10-30','AL','91'),('1987-10-30','AL','91'),('1987-10-30','AL','104'),('1987-10-30','AL','104'),('1987-10-30','AL','104'),('1987-10-30','AL','109'),('1987-10-30','AL','112'),('1987-10-30','AL','112'),('1987-10-30','AL','123'),('1987-10-30','AL','149'),('1987-10-30','AL','160'),('1987-10-30','AL','160'),('1987-10-30','AL','165'),('1987-10-30','AL','171'),('1987-10-30','AL','171'),('1987-10-30','AL','176'),('1987-10-30','AL','176'),('1987-10-30','AL','179'),('1987-10-30','AL','215'),('1987-10-30','AL','231'),('1987-10-30','AL','263'),('1987-10-30','AL','263'),('1987-10-30','AL','268'),('1987-10-30','AL','268'),('1987-10-30','AL','268'),('1987-10-30','AL','281'),('1987-10-30','AL','281'),('1987-10-30','AL','287'),('1987-10-30','AL','287'),('1987-10-30','AL','309'),('1987-10-30','AL','309'),('1987-10-30','AL','341'),('1987-10-30','AL','344'),('1987-10-30','AL','344'),('1987-10-30','AL','357'),('1987-10-30','AL','357'),('1987-10-30','AL','368'),('1987-10-30','AL','381'),('1987-10-30','AL','396'),('1987-10-30','AL','397'),('1987-10-30','AL','397'),('1987-10-30','AL','416'),('1987-10-30','AL','416'),('1987-10-30','AL','417'),('1987-10-30','AL','438'),('1987-10-30','AL','438'),('1987-10-30','AL','446'),('1987-10-30','AL','451'),('1987-10-30','AL','451'),('1987-10-30','AL','491'),('1987-10-30','AL','491'),('1987-10-30','AL','523'),('1987-10-30','AL','523'),('1987-10-30','AL','523'),('1987-10-30','AL','525'),('1987-10-30','AL','525'),('1987-10-30','AL','533'),('1987-10-30','AL','533'),('1987-10-30','AL','546'),('1987-10-30','AL','546'),('1987-10-30','AL','556'),('1987-10-30','AL','556'),('1987-10-30','AL','601'),('1987-10-30','AL','601'),('1987-10-30','AL','627'),('1987-10-30','AL','629'),('1987-10-30','AL','670'),('1987-10-30','AL','670'),('1987-10-30','AL','670'),('1987-10-30','AL','673'),('1987-10-30','AL','680'),('1987-10-31','AA','2'),('1987-10-31','AA','2'),('1987-10-31','AA','2'),('1987-10-31','AA','7'),('1987-10-31','AA','7'),('1987-10-31','AA','26'),('1987-10-31','AA','34'),('1987-10-31','AA','36'),('1987-10-31','AA','91'),('1987-10-31','AA','101'),('1987-10-31','AA','101'),('1987-10-31','AA','109'),('1987-10-31','AA','109'),('1987-10-31','AA','112'),('1987-10-31','AA','123'),('1987-10-31','AA','123'),('1987-10-31','AA','160'),('1987-10-31','AA','165'),('1987-10-31','AA','165'),('1987-10-31','AA','165'),('1987-10-31','AA','176'),('1987-10-31','AA','176'),('1987-10-31','AA','176'),('1987-10-31','AA','176'),('1987-10-31','AA','179'),('1987-10-31','AA','179'),('1987-10-31','AA','215'),('1987-10-31','AA','215'),('1987-10-31','AA','231'),('1987-10-31','AA','263'),('1987-10-31','AA','268'),('1987-10-31','AA','268'),('1987-10-31','AA','281'),('1987-10-31','AA','287'),('1987-10-31','AA','287'),('1987-10-31','AA','309'),('1987-10-31','AA','309'),('1987-10-31','AA','309'),('1987-10-31','AA','341'),('1987-10-31','AA','344'),('1987-10-31','AA','344'),('1987-10-31','AA','347'),('1987-10-31','AA','347'),('1987-10-31','AA','368'),('1987-10-31','AA','381'),('1987-10-31','AA','381'),('1987-10-31','AA','381'),('1987-10-31','AA','396'),('1987-10-31','AA','396'),('1987-10-31','AA','397'),('1987-10-31','AA','417'),('1987-10-31','AA','417'),('1987-10-31','AA','446'),('1987-10-31','AA','451'),('1987-10-31','AA','451'),('1987-10-31','AA','491'),('1987-10-31','AA','491'),('1987-10-31','AA','504'),('1987-10-31','AA','504'),('1987-10-31','AA','519'),('1987-10-31','AA','519'),('1987-10-31','AA','523'),('1987-10-31','AA','523'),('1987-10-31','AA','525'),('1987-10-31','AA','525'),('1987-10-31','AA','533'),('1987-10-31','AA','533'),('1987-10-31','AA','546'),('1987-10-31','AA','546'),('1987-10-31','AA','546'),('1987-10-31','AA','546'),('1987-10-31','AA','556'),('1987-10-31','AA','556'),('1987-10-31','AA','556'),('1987-10-31','AA','597'),('1987-10-31','AA','597'),('1987-10-31','AA','597'),('1987-10-31','AA','601'),('1987-10-31','AA','601'),('1987-10-31','AA','627'),('1987-10-31','AA','629'),('1987-10-31','AA','670'),('1987-10-31','AA','673'),('1987-10-31','AA','673'),('1987-10-31','AA','680'),('1987-10-31','AA','680'),('1987-10-31','AA','817'),('1987-10-31','AA','817'),('1987-10-31','AA','824'),('1987-10-31','AA','824'),('1987-10-31','AA','824'),('1987-10-31','AA','832'),('1987-10-31','AA','832'),('1987-10-31','AA','852'),('1987-10-31','AA','852'),('1987-10-31','AA','866'),('1987-10-31','AA','871'),('1987-10-31','AA','871'),('1987-10-31','AA','880'),('1987-10-31','AA','880'),('1987-10-31','AA','880'),('1987-10-31','AA','883'),('1987-10-31','AA','885'),('1987-10-31','AA','885'),('1987-10-31','AA','885'),('1987-10-31','AA','890'),('1987-10-31','AA','890'),('1987-10-31','AA','893'),('1987-10-31','AA','893'),('1987-10-31','AA','905'),('1987-10-31','AA','905'),('1987-10-31','AA','915'),('1987-10-31','AA','929'),('1987-10-31','AA','929'),('1987-10-31','AA','936'),('1987-10-31','AA','936'),('1987-10-31','AA','937'),('1987-10-31','AA','937'),('1987-10-31','AA','955'),('1987-10-31','AA','955'),('1987-10-31','AA','1002'),('1987-10-31','AA','1002'),('1987-10-31','AA','1004'),('1987-10-31','AA','1004'),('1987-10-31','AA','1015'),('1987-10-31','AA','1015'),('1987-10-31','AA','1021'),('1987-10-31','AA','1021'),('1987-10-31','AA','1041'),('1987-10-31','AA','1041'),('1987-10-31','AA','1046'),('1987-10-31','AA','1046'),('1987-10-31','AA','1048'),('1987-10-31','AA','1048'),('1987-10-31','AA','1061'),('1987-10-31','AA','1061'),('1987-10-31','AA','1088'),('1987-10-31','AA','1088'),('1987-10-31','AA','2033'),('1987-10-31','AA','2058'),('1987-10-31','AA','2086'),('1987-10-31','AA','2105'),('1987-10-31','AA','2123'),('1987-10-31','AA','2123'),('1987-10-31','AA','2147'),('1987-10-31','AA','2147'),('1987-10-31','AA','2199'),('1987-10-31','AA','2199'),('1987-10-31','AA','2207'),('1987-10-31','AA','2207'),('1987-10-31','AA','2217'),('1987-10-31','AA','2230'),('1987-10-31','AA','2251'),('1987-10-31','AA','2251'),('1987-10-31','AA','2275'),('1987-10-31','AA','2278'),('1987-10-31','AA','2351'),('1987-10-31','AA','2357'),('1987-10-31','AA','2361'),('1987-10-31','AA','2528'),('1987-10-31','AA','2528'),('1987-10-31','AA','2735'),('1987-10-31','AA','2735'),('1987-10-31','AL','2'),('1987-10-31','AL','2'),('1987-10-31','AL','7'),('1987-10-31','AL','7'),('1987-10-31','AL','26'),('1987-10-31','AL','26'),('1987-10-31','AL','34'),('1987-10-31','AL','34'),('1987-10-31','AL','36'),('1987-10-31','AL','36'),('1987-10-31','AL','91'),('1987-10-31','AL','91'),('1987-10-31','AL','104'),('1987-10-31','AL','104'),('1987-10-31','AL','109'),('1987-10-31','AL','112'),('1987-10-31','AL','112'),('1987-10-31','AL','149'),('1987-10-31','AL','160'),('1987-10-31','AL','160'),('1987-10-31','AL','165'),('1987-10-31','AL','171'),('1987-10-31','AL','171'),('1987-10-31','AL','176'),('1987-10-31','AL','176'),('1987-10-31','AL','179'),('1987-10-31','AL','215'),('1987-10-31','AL','231'),('1987-10-31','AL','263'),('1987-10-31','AL','268'),('1987-10-31','AL','268'),('1987-10-31','AL','268'),('1987-10-31','AL','287'),('1987-10-31','AL','287'),('1987-10-31','AL','309'),('1987-10-31','AL','309'),('1987-10-31','AL','344'),('1987-10-31','AL','344'),('1987-10-31','AL','357'),('1987-10-31','AL','357'),('1987-10-31','AL','381'),('1987-10-31','AL','396'),('1987-10-31','AL','397'),('1987-10-31','AL','397'),('1987-10-31','AL','397'),('1987-10-31','AL','416'),('1987-10-31','AL','417'),('1987-10-31','AL','438'),('1987-10-31','AL','438'),('1987-10-31','AL','451'),('1987-10-31','AL','451'),('1987-10-31','AL','491'),('1987-10-31','AL','491'),('1987-10-31','AL','523'),('1987-10-31','AL','523'),('1987-10-31','AL','525'),('1987-10-31','AL','525'),('1987-10-31','AL','533'),('1987-10-31','AL','546'),('1987-10-31','AL','546'),('1987-10-31','AL','556'),('1987-10-31','AL','556'),('1987-10-31','AL','601'),('1987-10-31','AL','601'),('1987-10-31','AL','627'),('1987-10-31','AL','670'),('1987-10-31','AL','673'),('1987-10-31','AL','680'),('1987-10-31','AL','745'),('1987-10-31','AL','797'),('1987-10-31','AL','905'),('1987-10-31','AL','936'),('1987-10-31','AL','966'),('1987-10-31','AL','982'); -SELECT ignore(finalizeAggregation(Users)) FROM (SELECT FlightDate, Carrier, uniqState(FlightNum) AS Users FROM test.ontime GROUP BY FlightDate, Carrier LIMIT 1); +SELECT ignore(finalizeAggregation(Users)) FROM (SELECT FlightDate, Carrier, uniqState(FlightNum) AS Users FROM ontime GROUP BY FlightDate, Carrier LIMIT 1); -DROP TABLE test.ontime; +DROP TABLE ontime; diff --git a/dbms/tests/queries/0_stateless/00335_bom.sh b/dbms/tests/queries/0_stateless/00335_bom.sh index 4aca4707bd1..aa1ef818026 100755 --- a/dbms/tests/queries/0_stateless/00335_bom.sh +++ b/dbms/tests/queries/0_stateless/00335_bom.sh @@ -3,9 +3,9 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -echo 'DROP TABLE IF EXISTS test.bom' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" --data-binary @- -echo 'CREATE TABLE test.bom (a UInt8, b UInt8, c UInt8) ENGINE = Memory' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" --data-binary @- -echo -ne '1,2,3\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+test.bom+FORMAT+CSV" --data-binary @- -echo -ne '\xEF\xBB\xBF4,5,6\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+test.bom+FORMAT+CSV" --data-binary @- -echo 'SELECT * FROM test.bom ORDER BY a' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" --data-binary @- -echo 'DROP TABLE test.bom' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" --data-binary @- +echo 'DROP TABLE IF EXISTS bom' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" --data-binary @- +echo 'CREATE TABLE bom (a UInt8, b UInt8, c UInt8) ENGINE = Memory' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" --data-binary @- +echo -ne '1,2,3\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+bom+FORMAT+CSV" --data-binary @- +echo -ne '\xEF\xBB\xBF4,5,6\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+bom+FORMAT+CSV" --data-binary @- +echo 'SELECT * FROM bom ORDER BY a' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" --data-binary @- +echo 'DROP TABLE bom' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" --data-binary @- diff --git a/dbms/tests/queries/0_stateless/00338_replicate_array_of_strings.sql b/dbms/tests/queries/0_stateless/00338_replicate_array_of_strings.sql index 40078981c47..9ec8981a573 100644 --- a/dbms/tests/queries/0_stateless/00338_replicate_array_of_strings.sql +++ b/dbms/tests/queries/0_stateless/00338_replicate_array_of_strings.sql @@ -1,28 +1,28 @@ -DROP TABLE IF EXISTS test.bad_arrays; -CREATE TABLE test.bad_arrays (a Array(String), b Array(UInt8)) ENGINE = Memory; +DROP TABLE IF EXISTS bad_arrays; +CREATE TABLE bad_arrays (a Array(String), b Array(UInt8)) ENGINE = Memory; -INSERT INTO test.bad_arrays VALUES ([''],[]),([''],[1]); +INSERT INTO bad_arrays VALUES ([''],[]),([''],[1]); -SELECT a FROM test.bad_arrays ARRAY JOIN b; +SELECT a FROM bad_arrays ARRAY JOIN b; -DROP TABLE test.bad_arrays; +DROP TABLE bad_arrays; -DROP TABLE IF EXISTS test.bad_arrays; -CREATE TABLE test.bad_arrays (a Array(String), b Array(String)) ENGINE = Memory; +DROP TABLE IF EXISTS bad_arrays; +CREATE TABLE bad_arrays (a Array(String), b Array(String)) ENGINE = Memory; -INSERT INTO test.bad_arrays VALUES ([''],[]),([''],[]),([''],[]),([''],[]),([''],[]),([''],[]),([''],[]),([''],[]),([''],[]),(['abc'],['223750']),(['ноутбук acer aspire e5-532-p3p2'],[]),([''],[]),([''],[]),([''],[]),([''],[]),(['лучшие моноблоки 2016'],[]),(['лучшие моноблоки 2016'],[]),([''],[]),([''],[]); +INSERT INTO bad_arrays VALUES ([''],[]),([''],[]),([''],[]),([''],[]),([''],[]),([''],[]),([''],[]),([''],[]),([''],[]),(['abc'],['223750']),(['ноутбук acer aspire e5-532-p3p2'],[]),([''],[]),([''],[]),([''],[]),([''],[]),(['лучшие моноблоки 2016'],[]),(['лучшие моноблоки 2016'],[]),([''],[]),([''],[]); -SELECT a FROM test.bad_arrays ARRAY JOIN b; +SELECT a FROM bad_arrays ARRAY JOIN b; -DROP TABLE test.bad_arrays; +DROP TABLE bad_arrays; -DROP TABLE IF EXISTS test.bad_arrays; -CREATE TABLE test.bad_arrays (a Array(String), b Array(UInt8)) ENGINE = Memory; +DROP TABLE IF EXISTS bad_arrays; +CREATE TABLE bad_arrays (a Array(String), b Array(UInt8)) ENGINE = Memory; -INSERT INTO test.bad_arrays VALUES (['abc','def'],[1,2,3]),([],[1,2]),(['a','b'],[]),(['Hello'],[1,2]),([],[]),(['x','y','z'],[4,5,6]); +INSERT INTO bad_arrays VALUES (['abc','def'],[1,2,3]),([],[1,2]),(['a','b'],[]),(['Hello'],[1,2]),([],[]),(['x','y','z'],[4,5,6]); -SELECT a, b FROM test.bad_arrays ARRAY JOIN b; +SELECT a, b FROM bad_arrays ARRAY JOIN b; -DROP TABLE test.bad_arrays; +DROP TABLE bad_arrays; diff --git a/dbms/tests/queries/0_stateless/00339_parsing_bad_arrays.sh b/dbms/tests/queries/0_stateless/00339_parsing_bad_arrays.sh index 7c1d1e290f7..7363c1ea7c3 100755 --- a/dbms/tests/queries/0_stateless/00339_parsing_bad_arrays.sh +++ b/dbms/tests/queries/0_stateless/00339_parsing_bad_arrays.sh @@ -3,9 +3,9 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d 'DROP TABLE IF EXISTS test.bad_arrays' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d 'CREATE TABLE test.bad_arrays (a Array(String)) ENGINE = Memory' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d 'INSERT INTO test.bad_arrays VALUES ([123])' 2>&1 | grep -c 'Exception' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d "INSERT INTO test.bad_arrays VALUES (['123', concat('Hello', ' world!'), toString(123)])" -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d 'SELECT * FROM test.bad_arrays' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d 'DROP TABLE test.bad_arrays' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d 'DROP TABLE IF EXISTS bad_arrays' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d 'CREATE TABLE bad_arrays (a Array(String)) ENGINE = Memory' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d 'INSERT INTO bad_arrays VALUES ([123])' 2>&1 | grep -c 'Exception' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d "INSERT INTO bad_arrays VALUES (['123', concat('Hello', ' world!'), toString(123)])" +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d 'SELECT * FROM bad_arrays' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d 'DROP TABLE bad_arrays' diff --git a/dbms/tests/queries/0_stateless/00340_squashing_insert_select.sql b/dbms/tests/queries/0_stateless/00340_squashing_insert_select.sql index 97ce68e42af..65b82f4b4f9 100644 --- a/dbms/tests/queries/0_stateless/00340_squashing_insert_select.sql +++ b/dbms/tests/queries/0_stateless/00340_squashing_insert_select.sql @@ -1,18 +1,18 @@ -DROP TABLE IF EXISTS test.numbers_squashed; -CREATE TABLE test.numbers_squashed AS system.numbers ENGINE = StripeLog; +DROP TABLE IF EXISTS numbers_squashed; +CREATE TABLE numbers_squashed AS system.numbers ENGINE = StripeLog; SET max_block_size = 10000; SET min_insert_block_size_rows = 1000000; SET min_insert_block_size_bytes = 0; -INSERT INTO test.numbers_squashed SELECT * FROM system.numbers LIMIT 10000000; -SELECT blockSize() AS b, count() / b AS c FROM test.numbers_squashed GROUP BY blockSize() ORDER BY c DESC; +INSERT INTO numbers_squashed SELECT * FROM system.numbers LIMIT 10000000; +SELECT blockSize() AS b, count() / b AS c FROM numbers_squashed GROUP BY blockSize() ORDER BY c DESC; SET min_insert_block_size_bytes = 1000000; -INSERT INTO test.numbers_squashed SELECT * FROM system.numbers LIMIT 10000000; -SELECT blockSize() AS b, count() / b AS c FROM test.numbers_squashed GROUP BY blockSize() ORDER BY c DESC; +INSERT INTO numbers_squashed SELECT * FROM system.numbers LIMIT 10000000; +SELECT blockSize() AS b, count() / b AS c FROM numbers_squashed GROUP BY blockSize() ORDER BY c DESC; -SELECT count() FROM test.numbers_squashed; +SELECT count() FROM numbers_squashed; -DROP TABLE test.numbers_squashed; +DROP TABLE numbers_squashed; diff --git a/dbms/tests/queries/0_stateless/00341_squashing_insert_select2.sql b/dbms/tests/queries/0_stateless/00341_squashing_insert_select2.sql index dc4e6d2a40c..469fdaaa64a 100644 --- a/dbms/tests/queries/0_stateless/00341_squashing_insert_select2.sql +++ b/dbms/tests/queries/0_stateless/00341_squashing_insert_select2.sql @@ -1,41 +1,41 @@ -DROP TABLE IF EXISTS test.numbers_squashed; -CREATE TABLE test.numbers_squashed (number UInt8) ENGINE = Memory; +DROP TABLE IF EXISTS numbers_squashed; +CREATE TABLE numbers_squashed (number UInt8) ENGINE = Memory; SET min_insert_block_size_rows = 100; SET min_insert_block_size_bytes = 0; SET max_threads = 1; -INSERT INTO test.numbers_squashed +INSERT INTO numbers_squashed SELECT arrayJoin(range(10)) AS number UNION ALL SELECT arrayJoin(range(100)) UNION ALL SELECT arrayJoin(range(10)); -SELECT blockSize() AS b, count() / b AS c FROM test.numbers_squashed GROUP BY blockSize() ORDER BY c DESC, b ASC; -SELECT count() FROM test.numbers_squashed; +SELECT blockSize() AS b, count() / b AS c FROM numbers_squashed GROUP BY blockSize() ORDER BY c DESC, b ASC; +SELECT count() FROM numbers_squashed; -INSERT INTO test.numbers_squashed +INSERT INTO numbers_squashed SELECT arrayJoin(range(100)) AS number UNION ALL SELECT arrayJoin(range(10)) UNION ALL SELECT arrayJoin(range(100)); -SELECT blockSize() AS b, count() / b AS c FROM test.numbers_squashed GROUP BY blockSize() ORDER BY c DESC, b ASC; -SELECT count() FROM test.numbers_squashed; +SELECT blockSize() AS b, count() / b AS c FROM numbers_squashed GROUP BY blockSize() ORDER BY c DESC, b ASC; +SELECT count() FROM numbers_squashed; -INSERT INTO test.numbers_squashed +INSERT INTO numbers_squashed SELECT arrayJoin(range(10)) AS number UNION ALL SELECT arrayJoin(range(100)) UNION ALL SELECT arrayJoin(range(100)); -SELECT blockSize() AS b, count() / b AS c FROM test.numbers_squashed GROUP BY blockSize() ORDER BY c DESC, b ASC; -SELECT count() FROM test.numbers_squashed; +SELECT blockSize() AS b, count() / b AS c FROM numbers_squashed GROUP BY blockSize() ORDER BY c DESC, b ASC; +SELECT count() FROM numbers_squashed; -INSERT INTO test.numbers_squashed +INSERT INTO numbers_squashed SELECT arrayJoin(range(10)) AS number UNION ALL SELECT arrayJoin(range(10)) @@ -46,12 +46,12 @@ SELECT arrayJoin(range(100)) UNION ALL SELECT arrayJoin(range(10)); -SELECT blockSize() AS b, count() / b AS c FROM test.numbers_squashed GROUP BY blockSize() ORDER BY c DESC, b ASC; -SELECT count() FROM test.numbers_squashed; +SELECT blockSize() AS b, count() / b AS c FROM numbers_squashed GROUP BY blockSize() ORDER BY c DESC, b ASC; +SELECT count() FROM numbers_squashed; SET min_insert_block_size_rows = 10; -INSERT INTO test.numbers_squashed +INSERT INTO numbers_squashed SELECT arrayJoin(range(10)) AS number UNION ALL SELECT arrayJoin(range(10)) @@ -62,7 +62,7 @@ SELECT arrayJoin(range(100)) UNION ALL SELECT arrayJoin(range(10)); -SELECT blockSize() AS b, count() / b AS c FROM test.numbers_squashed GROUP BY blockSize() ORDER BY c DESC, b ASC; -SELECT count() FROM test.numbers_squashed; +SELECT blockSize() AS b, count() / b AS c FROM numbers_squashed GROUP BY blockSize() ORDER BY c DESC, b ASC; +SELECT count() FROM numbers_squashed; -DROP TABLE test.numbers_squashed; +DROP TABLE numbers_squashed; diff --git a/dbms/tests/queries/0_stateless/00345_index_accurate_comparison.sql b/dbms/tests/queries/0_stateless/00345_index_accurate_comparison.sql index b1920663010..138a93990cf 100644 --- a/dbms/tests/queries/0_stateless/00345_index_accurate_comparison.sql +++ b/dbms/tests/queries/0_stateless/00345_index_accurate_comparison.sql @@ -1,20 +1,20 @@ -DROP TABLE IF EXISTS test.index; +DROP TABLE IF EXISTS index; -CREATE TABLE test.index +CREATE TABLE index ( key Int32, name String, merge_date Date ) ENGINE = MergeTree(merge_date, key, 8192); -insert into test.index values (1,'1','2016-07-07'); -insert into test.index values (-1,'-1','2016-07-07'); +insert into index values (1,'1','2016-07-07'); +insert into index values (-1,'-1','2016-07-07'); -select * from test.index where key = 1; -select * from test.index where key = -1; -OPTIMIZE TABLE test.index; -select * from test.index where key = 1; -select * from test.index where key = -1; -select * from test.index where key < -0.5; +select * from index where key = 1; +select * from index where key = -1; +OPTIMIZE TABLE index; +select * from index where key = 1; +select * from index where key = -1; +select * from index where key < -0.5; -DROP TABLE test.index; +DROP TABLE index; diff --git a/dbms/tests/queries/0_stateless/00361_shared_array_offsets_and_squash_blocks.sql b/dbms/tests/queries/0_stateless/00361_shared_array_offsets_and_squash_blocks.sql index d7227578ec5..6160edd05b7 100644 --- a/dbms/tests/queries/0_stateless/00361_shared_array_offsets_and_squash_blocks.sql +++ b/dbms/tests/queries/0_stateless/00361_shared_array_offsets_and_squash_blocks.sql @@ -1,17 +1,17 @@ -DROP TABLE IF EXISTS test.nested1; -DROP TABLE IF EXISTS test.nested2; +DROP TABLE IF EXISTS nested1; +DROP TABLE IF EXISTS nested2; -CREATE TABLE test.nested1 (d Date DEFAULT '2000-01-01', x UInt64, n Nested(a String, b String)) ENGINE = MergeTree(d, x, 1); -INSERT INTO test.nested1 (x, n.a, n.b) VALUES (1, ['Hello', 'World'], ['abc', 'def']), (2, [], []); +CREATE TABLE nested1 (d Date DEFAULT '2000-01-01', x UInt64, n Nested(a String, b String)) ENGINE = MergeTree(d, x, 1); +INSERT INTO nested1 (x, n.a, n.b) VALUES (1, ['Hello', 'World'], ['abc', 'def']), (2, [], []); SET max_block_size = 1; -SELECT * FROM test.nested1 ORDER BY x; +SELECT * FROM nested1 ORDER BY x; -CREATE TABLE test.nested2 (d Date DEFAULT '2000-01-01', x UInt64, n Nested(a String, b String)) ENGINE = MergeTree(d, x, 1); +CREATE TABLE nested2 (d Date DEFAULT '2000-01-01', x UInt64, n Nested(a String, b String)) ENGINE = MergeTree(d, x, 1); -INSERT INTO test.nested2 SELECT * FROM test.nested1; +INSERT INTO nested2 SELECT * FROM nested1; -SELECT * FROM test.nested2 ORDER BY x; +SELECT * FROM nested2 ORDER BY x; -DROP TABLE test.nested1; -DROP TABLE test.nested2; +DROP TABLE nested1; +DROP TABLE nested2; diff --git a/dbms/tests/queries/0_stateless/00363_defaults.sql b/dbms/tests/queries/0_stateless/00363_defaults.sql index cc79c4a9d7a..4ebcc7b0f61 100644 --- a/dbms/tests/queries/0_stateless/00363_defaults.sql +++ b/dbms/tests/queries/0_stateless/00363_defaults.sql @@ -1,19 +1,19 @@ -DROP TABLE IF EXISTS test.prewhere_defaults; +DROP TABLE IF EXISTS prewhere_defaults; -CREATE TABLE test.prewhere_defaults (d Date DEFAULT '2000-01-01', k UInt64 DEFAULT 0, x UInt16) ENGINE = MergeTree(d, k, 1); +CREATE TABLE prewhere_defaults (d Date DEFAULT '2000-01-01', k UInt64 DEFAULT 0, x UInt16) ENGINE = MergeTree(d, k, 1); -INSERT INTO test.prewhere_defaults (x) VALUES (1); +INSERT INTO prewhere_defaults (x) VALUES (1); SET max_block_size = 1; -SELECT * FROM test.prewhere_defaults PREWHERE x != 0 ORDER BY x; +SELECT * FROM prewhere_defaults PREWHERE x != 0 ORDER BY x; -ALTER TABLE test.prewhere_defaults ADD COLUMN y UInt16 DEFAULT x; +ALTER TABLE prewhere_defaults ADD COLUMN y UInt16 DEFAULT x; -SELECT * FROM test.prewhere_defaults PREWHERE x != 0 ORDER BY x; +SELECT * FROM prewhere_defaults PREWHERE x != 0 ORDER BY x; -INSERT INTO test.prewhere_defaults (x) VALUES (2); +INSERT INTO prewhere_defaults (x) VALUES (2); -SELECT * FROM test.prewhere_defaults PREWHERE x != 0 ORDER BY x; +SELECT * FROM prewhere_defaults PREWHERE x != 0 ORDER BY x; -DROP TABLE test.prewhere_defaults; +DROP TABLE prewhere_defaults; diff --git a/dbms/tests/queries/0_stateless/00366_multi_statements.sh b/dbms/tests/queries/0_stateless/00366_multi_statements.sh index aa47c0dd0cb..0f2652e0f2e 100755 --- a/dbms/tests/queries/0_stateless/00366_multi_statements.sh +++ b/dbms/tests/queries/0_stateless/00366_multi_statements.sh @@ -18,33 +18,33 @@ $CLICKHOUSE_CLIENT -n --query="SELECT 1; SELECT 2" $CLICKHOUSE_CLIENT -n --query="SELECT 1; SELECT 2;" $CLICKHOUSE_CLIENT -n --query="SELECT 1; SELECT 2; SELECT" 2>&1 | grep -o 'Syntax error' -$CLICKHOUSE_CLIENT -n --query="DROP TABLE IF EXISTS test.t; CREATE TABLE test.t (x UInt64) ENGINE = TinyLog;" +$CLICKHOUSE_CLIENT -n --query="DROP TABLE IF EXISTS t; CREATE TABLE t (x UInt64) ENGINE = TinyLog;" -$CLICKHOUSE_CLIENT --query="INSERT INTO test.t VALUES (1),(2),(3);" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.t" -$CLICKHOUSE_CLIENT --query="INSERT INTO test.t VALUES" <<< "(4),(5),(6)" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.t" +$CLICKHOUSE_CLIENT --query="INSERT INTO t VALUES (1),(2),(3);" +$CLICKHOUSE_CLIENT --query="SELECT * FROM t" +$CLICKHOUSE_CLIENT --query="INSERT INTO t VALUES" <<< "(4),(5),(6)" +$CLICKHOUSE_CLIENT --query="SELECT * FROM t" -$CLICKHOUSE_CLIENT -n --query="INSERT INTO test.t VALUES (1),(2),(3);" -$CLICKHOUSE_CLIENT -n --query="SELECT * FROM test.t" -$CLICKHOUSE_CLIENT -n --query="INSERT INTO test.t VALUES" <<< "(4),(5),(6)" -$CLICKHOUSE_CLIENT -n --query="SELECT * FROM test.t" +$CLICKHOUSE_CLIENT -n --query="INSERT INTO t VALUES (1),(2),(3);" +$CLICKHOUSE_CLIENT -n --query="SELECT * FROM t" +$CLICKHOUSE_CLIENT -n --query="INSERT INTO t VALUES" <<< "(4),(5),(6)" +$CLICKHOUSE_CLIENT -n --query="SELECT * FROM t" -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d "SELECT 1" -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d "SELECT 1;" -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d "SELECT 1; " -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d "SELECT 1 ; " +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}" -d "SELECT 1" +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}" -d "SELECT 1;" +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}" -d "SELECT 1; " +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}" -d "SELECT 1 ; " -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d "SELECT 1; S" 2>&1 | grep -o 'Syntax error' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d "SELECT 1; SELECT 2" 2>&1 | grep -o 'Syntax error' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d "SELECT 1; SELECT 2;" 2>&1 | grep -o 'Syntax error' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d "SELECT 1; SELECT 2; SELECT" 2>&1 | grep -o 'Syntax error' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}" -d "SELECT 1; S" 2>&1 | grep -o 'Syntax error' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}" -d "SELECT 1; SELECT 2" 2>&1 | grep -o 'Syntax error' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}" -d "SELECT 1; SELECT 2;" 2>&1 | grep -o 'Syntax error' +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}" -d "SELECT 1; SELECT 2; SELECT" 2>&1 | grep -o 'Syntax error' -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" -d "INSERT INTO test.t VALUES (1),(2),(3);" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.t" -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT" -d "INTO test.t VALUES (4),(5),(6);" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.t" -${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+test.t+VALUES" -d "(7),(8),(9)" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.t" +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}" -d "INSERT INTO t VALUES (1),(2),(3);" +$CLICKHOUSE_CLIENT --query="SELECT * FROM t" +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}&query=INSERT" -d "INTO t VALUES (4),(5),(6);" +$CLICKHOUSE_CLIENT --query="SELECT * FROM t" +${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}&query=INSERT+INTO+t+VALUES" -d "(7),(8),(9)" +$CLICKHOUSE_CLIENT --query="SELECT * FROM t" -$CLICKHOUSE_CLIENT -n --query="DROP TABLE test.t;" +$CLICKHOUSE_CLIENT -n --query="DROP TABLE t;" diff --git a/dbms/tests/queries/0_stateless/00374_json_each_row_input_with_noisy_fields.sh b/dbms/tests/queries/0_stateless/00374_json_each_row_input_with_noisy_fields.sh index 538a46e0fda..789be95aa38 100755 --- a/dbms/tests/queries/0_stateless/00374_json_each_row_input_with_noisy_fields.sh +++ b/dbms/tests/queries/0_stateless/00374_json_each_row_input_with_noisy_fields.sh @@ -5,8 +5,8 @@ set -e CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.json_noisy" -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.json_noisy (d1 UInt8, d2 String) ENGINE = Memory" +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS json_noisy" +$CLICKHOUSE_CLIENT -q "CREATE TABLE json_noisy (d1 UInt8, d2 String) ENGINE = Memory" echo '{"d1" : 1, "d2" : "ok"} { } @@ -15,20 +15,20 @@ echo '{"d1" : 1, "d2" : "ok"} {"d2":"ok","t1":[[[]],true, null, false, "1","2", 0.03, 1], "d1":"1", "t2":["1","2"]} {"d2":"ok","t1":{"a":{"b": {} ,"c":false},"b":[true,null, false]}, "t2": { "a": [ ] } , "d1":1} {"t0" : -0.1, "t1" : +1, "t2" : 0, "t3" : [0.0, -0.1], "d2" : "ok", "d1" : 1}' \ -| $CLICKHOUSE_CLIENT --input_format_skip_unknown_fields=1 -q "INSERT INTO test.json_noisy FORMAT JSONEachRow" +| $CLICKHOUSE_CLIENT --input_format_skip_unknown_fields=1 -q "INSERT INTO json_noisy FORMAT JSONEachRow" -$CLICKHOUSE_CLIENT --max_threads=1 -q "SELECT * FROM test.json_noisy" -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.json_noisy" +$CLICKHOUSE_CLIENT --max_threads=1 -q "SELECT * FROM json_noisy" +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS json_noisy" # Regular test for DateTime echo -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.json_each_row" -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.json_each_row (d DateTime('Europe/Moscow')) ENGINE = Memory" +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS json_each_row" +$CLICKHOUSE_CLIENT -q "CREATE TABLE json_each_row (d DateTime('Europe/Moscow')) ENGINE = Memory" echo '{"d" : "2017-08-31 18:36:48", "t" : ""} {"d" : "1504193808", "t" : -1} {"d" : 1504193808, "t" : []} {"d" : 01504193808, "t" : []}' \ -| $CLICKHOUSE_CLIENT --input_format_skip_unknown_fields=1 -q "INSERT INTO test.json_each_row FORMAT JSONEachRow" -$CLICKHOUSE_CLIENT -q "SELECT DISTINCT * FROM test.json_each_row" -$CLICKHOUSE_CLIENT -q "DROP TABLE test.json_each_row" +| $CLICKHOUSE_CLIENT --input_format_skip_unknown_fields=1 -q "INSERT INTO json_each_row FORMAT JSONEachRow" +$CLICKHOUSE_CLIENT -q "SELECT DISTINCT * FROM json_each_row" +$CLICKHOUSE_CLIENT -q "DROP TABLE json_each_row" diff --git a/dbms/tests/queries/0_stateless/00384_column_aggregate_function_insert_from.sql b/dbms/tests/queries/0_stateless/00384_column_aggregate_function_insert_from.sql index 0814789d6d6..0c614602866 100644 --- a/dbms/tests/queries/0_stateless/00384_column_aggregate_function_insert_from.sql +++ b/dbms/tests/queries/0_stateless/00384_column_aggregate_function_insert_from.sql @@ -1,22 +1,22 @@ -DROP TABLE IF EXISTS test.aggregates; -CREATE TABLE test.aggregates (d Date, s AggregateFunction(uniq, UInt64)) ENGINE = MergeTree(d, d, 8192); +DROP TABLE IF EXISTS aggregates; +CREATE TABLE aggregates (d Date, s AggregateFunction(uniq, UInt64)) ENGINE = MergeTree(d, d, 8192); -INSERT INTO test.aggregates +INSERT INTO aggregates SELECT toDate('2016-10-31') AS d, uniqState(toUInt64(arrayJoin(range(100)))) AS s UNION ALL SELECT toDate('2016-11-01') AS d, uniqState(toUInt64(arrayJoin(range(100)))) AS s; -INSERT INTO test.aggregates SELECT toDate('2016-10-31') + number AS d, uniqState(toUInt64(arrayJoin(range(100)))) AS s FROM (SELECT * FROM system.numbers LIMIT 2) GROUP BY d; +INSERT INTO aggregates SELECT toDate('2016-10-31') + number AS d, uniqState(toUInt64(arrayJoin(range(100)))) AS s FROM (SELECT * FROM system.numbers LIMIT 2) GROUP BY d; -SELECT d, uniqMerge(s) FROM test.aggregates GROUP BY d ORDER BY d; +SELECT d, uniqMerge(s) FROM aggregates GROUP BY d ORDER BY d; -INSERT INTO test.aggregates +INSERT INTO aggregates SELECT toDate('2016-12-01') AS d, uniqState(toUInt64(arrayJoin(range(100)))) AS s UNION ALL SELECT toDate('2016-12-02') AS d, uniqState(toUInt64(arrayJoin(range(100)))) AS s UNION ALL SELECT toDate('2016-12-03') AS d, uniqState(toUInt64(arrayJoin(range(100)))) AS s; -SELECT d, uniqMerge(s) FROM test.aggregates GROUP BY d ORDER BY d; +SELECT d, uniqMerge(s) FROM aggregates GROUP BY d ORDER BY d; -DROP TABLE test.aggregates; +DROP TABLE aggregates; diff --git a/dbms/tests/queries/0_stateless/00385_storage_file_and_clickhouse-local_app.sh b/dbms/tests/queries/0_stateless/00385_storage_file_and_clickhouse-local_app.sh index 69771ea9247..f6e44e73e60 100755 --- a/dbms/tests/queries/0_stateless/00385_storage_file_and_clickhouse-local_app.sh +++ b/dbms/tests/queries/0_stateless/00385_storage_file_and_clickhouse-local_app.sh @@ -8,23 +8,23 @@ TABLE_HASH="cityHash64(groupArray(cityHash64(*)))" function pack_unpack_compare() { - local buf_file="${CLICKHOUSE_TMP}/test.buf.'.$3" + local buf_file="${CLICKHOUSE_TMP}/buf.'.$3" - ${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.buf" - ${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.buf_file" + ${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS buf" + ${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS buf_file" - ${CLICKHOUSE_CLIENT} --query "CREATE TABLE test.buf ENGINE = Memory AS $1" - local res_orig=$(${CLICKHOUSE_CLIENT} --max_threads=1 --query "SELECT $TABLE_HASH FROM test.buf") + ${CLICKHOUSE_CLIENT} --query "CREATE TABLE buf ENGINE = Memory AS $1" + local res_orig=$(${CLICKHOUSE_CLIENT} --max_threads=1 --query "SELECT $TABLE_HASH FROM buf") - ${CLICKHOUSE_CLIENT} --max_threads=1 --query "CREATE TABLE test.buf_file ENGINE = File($3) AS SELECT * FROM test.buf" - local res_db_file=$(${CLICKHOUSE_CLIENT} --max_threads=1 --query "SELECT $TABLE_HASH FROM test.buf_file") + ${CLICKHOUSE_CLIENT} --max_threads=1 --query "CREATE TABLE buf_file ENGINE = File($3) AS SELECT * FROM buf" + local res_db_file=$(${CLICKHOUSE_CLIENT} --max_threads=1 --query "SELECT $TABLE_HASH FROM buf_file") - ${CLICKHOUSE_CLIENT} --max_threads=1 --query "SELECT * FROM test.buf FORMAT $3" > "$buf_file" + ${CLICKHOUSE_CLIENT} --max_threads=1 --query "SELECT * FROM buf FORMAT $3" > "$buf_file" local res_ch_local1=$(${CLICKHOUSE_LOCAL} --structure "$2" --file "$buf_file" --table "my super table" --input-format "$3" --output-format TabSeparated --query "SELECT $TABLE_HASH FROM \`my super table\`") local res_ch_local2=$(${CLICKHOUSE_LOCAL} --structure "$2" --table "my super table" --input-format "$3" --output-format TabSeparated --query "SELECT $TABLE_HASH FROM \`my super table\`" < "$buf_file") - ${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.buf" - ${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.buf_file" + ${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS buf" + ${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS buf_file" rm -f "$buf_file" stderr echo $((res_orig - res_db_file)) $((res_orig - res_ch_local1)) $((res_orig - res_ch_local2)) diff --git a/dbms/tests/queries/0_stateless/00386_enum_in_pk.sql b/dbms/tests/queries/0_stateless/00386_enum_in_pk.sql index 2aa89c4636f..f02f37e23d3 100644 --- a/dbms/tests/queries/0_stateless/00386_enum_in_pk.sql +++ b/dbms/tests/queries/0_stateless/00386_enum_in_pk.sql @@ -1,42 +1,42 @@ -DROP TABLE IF EXISTS test.enum_pk; -CREATE TABLE test.enum_pk (date Date DEFAULT '0000-00-00', x Enum8('0' = 0, '1' = 1, '2' = 2), d Enum8('0' = 0, '1' = 1, '2' = 2)) ENGINE = MergeTree(date, x, 1); -INSERT INTO test.enum_pk (x, d) VALUES ('0', '0')('1', '1')('0', '0')('1', '1')('1', '1')('0', '0')('0', '0')('2', '2')('0', '0')('1', '1')('1', '1')('1', '1')('1', '1')('0', '0'); +DROP TABLE IF EXISTS enum_pk; +CREATE TABLE enum_pk (date Date DEFAULT '0000-00-00', x Enum8('0' = 0, '1' = 1, '2' = 2), d Enum8('0' = 0, '1' = 1, '2' = 2)) ENGINE = MergeTree(date, x, 1); +INSERT INTO enum_pk (x, d) VALUES ('0', '0')('1', '1')('0', '0')('1', '1')('1', '1')('0', '0')('0', '0')('2', '2')('0', '0')('1', '1')('1', '1')('1', '1')('1', '1')('0', '0'); -SELECT cityHash64(groupArray(x)) FROM test.enum_pk WHERE x = '0'; -SELECT cityHash64(groupArray(d)) FROM test.enum_pk WHERE d = '0'; +SELECT cityHash64(groupArray(x)) FROM enum_pk WHERE x = '0'; +SELECT cityHash64(groupArray(d)) FROM enum_pk WHERE d = '0'; -SELECT cityHash64(groupArray(x)) FROM test.enum_pk WHERE x != '0'; -SELECT cityHash64(groupArray(d)) FROM test.enum_pk WHERE d != '0'; +SELECT cityHash64(groupArray(x)) FROM enum_pk WHERE x != '0'; +SELECT cityHash64(groupArray(d)) FROM enum_pk WHERE d != '0'; -SELECT cityHash64(groupArray(x)) FROM test.enum_pk WHERE x = '1'; -SELECT cityHash64(groupArray(d)) FROM test.enum_pk WHERE d = '1'; +SELECT cityHash64(groupArray(x)) FROM enum_pk WHERE x = '1'; +SELECT cityHash64(groupArray(d)) FROM enum_pk WHERE d = '1'; -SELECT cityHash64(groupArray(x)) FROM test.enum_pk WHERE exp2(toInt64(x != '1')) > 1; -SELECT cityHash64(groupArray(d)) FROM test.enum_pk WHERE exp2(toInt64(d != '1')) > 1; +SELECT cityHash64(groupArray(x)) FROM enum_pk WHERE exp2(toInt64(x != '1')) > 1; +SELECT cityHash64(groupArray(d)) FROM enum_pk WHERE exp2(toInt64(d != '1')) > 1; -SELECT cityHash64(groupArray(x)) FROM test.enum_pk WHERE x = toString(0); -SELECT cityHash64(groupArray(d)) FROM test.enum_pk WHERE d = toString(0); +SELECT cityHash64(groupArray(x)) FROM enum_pk WHERE x = toString(0); +SELECT cityHash64(groupArray(d)) FROM enum_pk WHERE d = toString(0); -SELECT cityHash64(groupArray(x)) FROM test.enum_pk WHERE (x = toString(0)) > 0; -SELECT cityHash64(groupArray(d)) FROM test.enum_pk WHERE (d = toString(0)) > 0; +SELECT cityHash64(groupArray(x)) FROM enum_pk WHERE (x = toString(0)) > 0; +SELECT cityHash64(groupArray(d)) FROM enum_pk WHERE (d = toString(0)) > 0; -SELECT cityHash64(groupArray(x)) FROM test.enum_pk WHERE ((x != toString(1)) > 0) > 0; -SELECT cityHash64(groupArray(d)) FROM test.enum_pk WHERE ((d != toString(1)) > 0) > 0; +SELECT cityHash64(groupArray(x)) FROM enum_pk WHERE ((x != toString(1)) > 0) > 0; +SELECT cityHash64(groupArray(d)) FROM enum_pk WHERE ((d != toString(1)) > 0) > 0; -SELECT cityHash64(groupArray(x)) FROM test.enum_pk WHERE exp2((x != toString(0)) != 0) > 1; -SELECT cityHash64(groupArray(d)) FROM test.enum_pk WHERE exp2((d != toString(0)) != 0) > 1; +SELECT cityHash64(groupArray(x)) FROM enum_pk WHERE exp2((x != toString(0)) != 0) > 1; +SELECT cityHash64(groupArray(d)) FROM enum_pk WHERE exp2((d != toString(0)) != 0) > 1; -SELECT cityHash64(groupArray(x)) FROM test.enum_pk WHERE (-(x != toString(0)) = -1) > 0; -SELECT cityHash64(groupArray(d)) FROM test.enum_pk WHERE (-(d != toString(0)) = -1) > 0; +SELECT cityHash64(groupArray(x)) FROM enum_pk WHERE (-(x != toString(0)) = -1) > 0; +SELECT cityHash64(groupArray(d)) FROM enum_pk WHERE (-(d != toString(0)) = -1) > 0; -SELECT cityHash64(groupArray(x)) FROM test.enum_pk WHERE 1 = 1; -SELECT cityHash64(groupArray(d)) FROM test.enum_pk WHERE 1 = 1; +SELECT cityHash64(groupArray(x)) FROM enum_pk WHERE 1 = 1; +SELECT cityHash64(groupArray(d)) FROM enum_pk WHERE 1 = 1; -SELECT cityHash64(groupArray(x)) FROM test.enum_pk WHERE (x = '0' OR x = '1'); -SELECT cityHash64(groupArray(d)) FROM test.enum_pk WHERE (d = '0' OR d = '1'); +SELECT cityHash64(groupArray(x)) FROM enum_pk WHERE (x = '0' OR x = '1'); +SELECT cityHash64(groupArray(d)) FROM enum_pk WHERE (d = '0' OR d = '1'); -SELECT cityHash64(groupArray(x)) FROM test.enum_pk WHERE x IN ('0', '1'); -SELECT cityHash64(groupArray(d)) FROM test.enum_pk WHERE d IN ('0', '1'); +SELECT cityHash64(groupArray(x)) FROM enum_pk WHERE x IN ('0', '1'); +SELECT cityHash64(groupArray(d)) FROM enum_pk WHERE d IN ('0', '1'); -SELECT cityHash64(groupArray(x)) FROM test.enum_pk WHERE (x != '0' AND x != '1'); -SELECT cityHash64(groupArray(d)) FROM test.enum_pk WHERE (d != '0' AND d != '1'); +SELECT cityHash64(groupArray(x)) FROM enum_pk WHERE (x != '0' AND x != '1'); +SELECT cityHash64(groupArray(d)) FROM enum_pk WHERE (d != '0' AND d != '1'); diff --git a/dbms/tests/queries/0_stateless/00386_long_in_pk.python b/dbms/tests/queries/0_stateless/00386_long_in_pk.python index 4dddb86c718..327e268dc21 100644 --- a/dbms/tests/queries/0_stateless/00386_long_in_pk.python +++ b/dbms/tests/queries/0_stateless/00386_long_in_pk.python @@ -1,10 +1,10 @@ #!/usr/bin/env python def gen_queries(): - create_template = 'create table test.tab (a Int8, b String, c Tuple(Int8), d Tuple(Tuple(Int8)), e Tuple(Int8, String), f Tuple(Tuple(Int8, String))) engine = MergeTree order by ({}) partition by {}' - drop_query = 'drop table if exists test.tab' + create_template = 'create table tab (a Int8, b String, c Tuple(Int8), d Tuple(Tuple(Int8)), e Tuple(Int8, String), f Tuple(Tuple(Int8, String))) engine = MergeTree order by ({}) partition by {}' + drop_query = 'drop table if exists tab' values = ('1', "'a'", 'tuple(1)', 'tuple(tuple(1))', "(1, 'a')", "tuple((1, 'a'))") - insert_query = "insert into test.tab values (1, 'a', tuple(1), tuple(tuple(1)), (1, 'a'), tuple((1, 'a')))" + insert_query = "insert into tab values (1, 'a', tuple(1), tuple(tuple(1)), (1, 'a'), tuple((1, 'a')))" columns = tuple('a b c d'.split()) order_by_columns = tuple('a b c'.split()) partition_by_columns = tuple(' tuple() a'.split()) @@ -17,24 +17,24 @@ def gen_queries(): yield q for column, value in zip(columns, values): - yield 'select {} in {} from test.tab'.format(column, value) - yield 'select {} in tuple({}) from test.tab'.format(column, value) - yield 'select {} in (select {} from test.tab) from test.tab'.format(column, column) + yield 'select {} in {} from tab'.format(column, value) + yield 'select {} in tuple({}) from tab'.format(column, value) + yield 'select {} in (select {} from tab) from tab'.format(column, column) for i in range(len(columns)): for j in range(i, len(columns)): - yield 'select ({}, {}) in tuple({}, {}) from test.tab'.format(columns[i], columns[j], values[i], values[j]) - yield 'select ({}, {}) in (select {}, {} from test.tab) from test.tab'.format(columns[i], columns[j], columns[i], columns[j]) - yield 'select ({}, {}) in (select ({}, {}) from test.tab) from test.tab'.format(columns[i], columns[j], columns[i], columns[j]) + yield 'select ({}, {}) in tuple({}, {}) from tab'.format(columns[i], columns[j], values[i], values[j]) + yield 'select ({}, {}) in (select {}, {} from tab) from tab'.format(columns[i], columns[j], columns[i], columns[j]) + yield 'select ({}, {}) in (select ({}, {}) from tab) from tab'.format(columns[i], columns[j], columns[i], columns[j]) - yield "select e in (1, 'a') from test.tab" - yield "select f in tuple((1, 'a')) from test.tab" - yield "select f in tuple(tuple((1, 'a'))) from test.tab" + yield "select e in (1, 'a') from tab" + yield "select f in tuple((1, 'a')) from tab" + yield "select f in tuple(tuple((1, 'a'))) from tab" - yield 'select e in (select a, b from test.tab) from test.tab' - yield 'select e in (select (a, b) from test.tab) from test.tab' - yield 'select f in (select tuple((a, b)) from test.tab) from test.tab' - yield 'select tuple(f) in (select tuple(tuple((a, b))) from test.tab) from test.tab' + yield 'select e in (select a, b from tab) from tab' + yield 'select e in (select (a, b) from tab) from tab' + yield 'select f in (select tuple((a, b)) from tab) from tab' + yield 'select tuple(f) in (select tuple(tuple((a, b))) from tab) from tab' import requests import os diff --git a/dbms/tests/queries/0_stateless/00388_enum_with_totals.sql b/dbms/tests/queries/0_stateless/00388_enum_with_totals.sql index 3afa5deb092..289174f13fc 100644 --- a/dbms/tests/queries/0_stateless/00388_enum_with_totals.sql +++ b/dbms/tests/queries/0_stateless/00388_enum_with_totals.sql @@ -1,6 +1,6 @@ -DROP TABLE IF EXISTS test.enum_totals; -CREATE TABLE test.enum_totals (e Enum8('hello' = 1, 'world' = 2)) ENGINE = Memory; -INSERT INTO test.enum_totals VALUES ('hello'), ('world'), ('world'); +DROP TABLE IF EXISTS enum_totals; +CREATE TABLE enum_totals (e Enum8('hello' = 1, 'world' = 2)) ENGINE = Memory; +INSERT INTO enum_totals VALUES ('hello'), ('world'), ('world'); -SELECT e, count() FROM test.enum_totals GROUP BY e WITH TOTALS ORDER BY e; -DROP TABLE test.enum_totals; +SELECT e, count() FROM enum_totals GROUP BY e WITH TOTALS ORDER BY e; +DROP TABLE enum_totals; diff --git a/dbms/tests/queries/0_stateless/00392_enum_nested_alter.sql b/dbms/tests/queries/0_stateless/00392_enum_nested_alter.sql index 4221ef79f51..205b9a7fec0 100644 --- a/dbms/tests/queries/0_stateless/00392_enum_nested_alter.sql +++ b/dbms/tests/queries/0_stateless/00392_enum_nested_alter.sql @@ -1,34 +1,34 @@ -DROP TABLE IF EXISTS test.enum_nested_alter; -CREATE TABLE test.enum_nested_alter +DROP TABLE IF EXISTS enum_nested_alter; +CREATE TABLE enum_nested_alter (d Date DEFAULT '2000-01-01', x UInt64, n Nested(a String, e Enum8('Hello' = 1), b UInt8)) ENGINE = MergeTree(d, x, 1); -INSERT INTO test.enum_nested_alter (x, n.e) VALUES (1, ['Hello']); -SELECT * FROM test.enum_nested_alter; +INSERT INTO enum_nested_alter (x, n.e) VALUES (1, ['Hello']); +SELECT * FROM enum_nested_alter; -ALTER TABLE test.enum_nested_alter MODIFY COLUMN n.e Array(Enum8('Hello' = 1, 'World' = 2)); -INSERT INTO test.enum_nested_alter (x, n.e) VALUES (2, ['World']); -SELECT * FROM test.enum_nested_alter ORDER BY x; +ALTER TABLE enum_nested_alter MODIFY COLUMN n.e Array(Enum8('Hello' = 1, 'World' = 2)); +INSERT INTO enum_nested_alter (x, n.e) VALUES (2, ['World']); +SELECT * FROM enum_nested_alter ORDER BY x; -ALTER TABLE test.enum_nested_alter MODIFY COLUMN n.e Array(Enum16('Hello' = 1, 'World' = 2, 'a' = 300)); -SELECT * FROM test.enum_nested_alter ORDER BY x; +ALTER TABLE enum_nested_alter MODIFY COLUMN n.e Array(Enum16('Hello' = 1, 'World' = 2, 'a' = 300)); +SELECT * FROM enum_nested_alter ORDER BY x; -ALTER TABLE test.enum_nested_alter MODIFY COLUMN n.e Array(UInt16); -SELECT * FROM test.enum_nested_alter ORDER BY x; +ALTER TABLE enum_nested_alter MODIFY COLUMN n.e Array(UInt16); +SELECT * FROM enum_nested_alter ORDER BY x; -ALTER TABLE test.enum_nested_alter MODIFY COLUMN n.e Array(Enum16('Hello' = 1, 'World' = 2, 'a' = 300)); -SELECT * FROM test.enum_nested_alter ORDER BY x; +ALTER TABLE enum_nested_alter MODIFY COLUMN n.e Array(Enum16('Hello' = 1, 'World' = 2, 'a' = 300)); +SELECT * FROM enum_nested_alter ORDER BY x; -ALTER TABLE test.enum_nested_alter MODIFY COLUMN n.e Array(String); -SELECT * FROM test.enum_nested_alter ORDER BY x; +ALTER TABLE enum_nested_alter MODIFY COLUMN n.e Array(String); +SELECT * FROM enum_nested_alter ORDER BY x; -ALTER TABLE test.enum_nested_alter MODIFY COLUMN n.e Array(Enum16('Hello' = 1, 'World' = 2, 'a' = 300)); -SELECT * FROM test.enum_nested_alter ORDER BY x; +ALTER TABLE enum_nested_alter MODIFY COLUMN n.e Array(Enum16('Hello' = 1, 'World' = 2, 'a' = 300)); +SELECT * FROM enum_nested_alter ORDER BY x; -DROP TABLE test.enum_nested_alter; +DROP TABLE enum_nested_alter; -CREATE TABLE test.enum_nested_alter +CREATE TABLE enum_nested_alter ( d Date DEFAULT '2000-01-01', x UInt64, @@ -39,30 +39,30 @@ CREATE TABLE test.enum_nested_alter status Enum16('hello' = 1, 'world' = 2))) ENGINE = MergeTree(d, x, 1); -INSERT INTO test.enum_nested_alter (x, tasks.errcategory, tasks.status) VALUES (1, ['system', 'rtb.client'], ['hello', 'world']); -SELECT * FROM test.enum_nested_alter ORDER BY x; +INSERT INTO enum_nested_alter (x, tasks.errcategory, tasks.status) VALUES (1, ['system', 'rtb.client'], ['hello', 'world']); +SELECT * FROM enum_nested_alter ORDER BY x; -ALTER TABLE test.enum_nested_alter +ALTER TABLE enum_nested_alter MODIFY COLUMN tasks.errcategory Array(Enum8( 'undefined' = 0, 'system' = 1, 'generic' = 2, 'asio.netdb' = 3, 'asio.misc' = 4, 'asio.addrinfo' = 5, 'rtb.client' = 6, 'rtb.logic' = 7, 'http.status' = 8, 'http.code' = 9)), MODIFY COLUMN tasks.status Array(Enum8('hello' = 1, 'world' = 2, 'goodbye' = 3)); -INSERT INTO test.enum_nested_alter (x, tasks.errcategory, tasks.status) VALUES (2, ['http.status', 'http.code'], ['hello', 'goodbye']); -SELECT * FROM test.enum_nested_alter ORDER BY x; +INSERT INTO enum_nested_alter (x, tasks.errcategory, tasks.status) VALUES (2, ['http.status', 'http.code'], ['hello', 'goodbye']); +SELECT * FROM enum_nested_alter ORDER BY x; -DROP TABLE test.enum_nested_alter; +DROP TABLE enum_nested_alter; -DROP TABLE IF EXISTS test.enum_nested_alter; -CREATE TABLE test.enum_nested_alter +DROP TABLE IF EXISTS enum_nested_alter; +CREATE TABLE enum_nested_alter (d Date DEFAULT '2000-01-01', x UInt64, n Nested(a String, e Enum8('Hello.world' = 1), b UInt8)) ENGINE = MergeTree(d, x, 1); -INSERT INTO test.enum_nested_alter (x, n.e) VALUES (1, ['Hello.world']); -SELECT * FROM test.enum_nested_alter; +INSERT INTO enum_nested_alter (x, n.e) VALUES (1, ['Hello.world']); +SELECT * FROM enum_nested_alter; -ALTER TABLE test.enum_nested_alter MODIFY COLUMN n.e Array(Enum8('Hello.world' = 1, 'a' = 2)); -SELECT * FROM test.enum_nested_alter; +ALTER TABLE enum_nested_alter MODIFY COLUMN n.e Array(Enum8('Hello.world' = 1, 'a' = 2)); +SELECT * FROM enum_nested_alter; -DROP TABLE test.enum_nested_alter; +DROP TABLE enum_nested_alter; diff --git a/dbms/tests/queries/0_stateless/00394_new_nested_column_keeps_offsets.sql b/dbms/tests/queries/0_stateless/00394_new_nested_column_keeps_offsets.sql index e0f38ed48c1..cb1679e3b53 100644 --- a/dbms/tests/queries/0_stateless/00394_new_nested_column_keeps_offsets.sql +++ b/dbms/tests/queries/0_stateless/00394_new_nested_column_keeps_offsets.sql @@ -1,17 +1,17 @@ -DROP TABLE IF EXISTS test.alter; -CREATE TABLE test.alter (d Date, k UInt64, i32 Int32, n Nested(ui8 UInt8, s String)) ENGINE=MergeTree(d, k, 8192); +DROP TABLE IF EXISTS alter; +CREATE TABLE alter (d Date, k UInt64, i32 Int32, n Nested(ui8 UInt8, s String)) ENGINE=MergeTree(d, k, 8192); -INSERT INTO test.alter VALUES ('2015-01-01', 3, 30, [1,2,3], ['1','12','123']); -INSERT INTO test.alter VALUES ('2015-01-01', 2, 20, [1,2], ['1','12']); -INSERT INTO test.alter VALUES ('2015-01-01', 1, 10, [1], ['1']); +INSERT INTO alter VALUES ('2015-01-01', 3, 30, [1,2,3], ['1','12','123']); +INSERT INTO alter VALUES ('2015-01-01', 2, 20, [1,2], ['1','12']); +INSERT INTO alter VALUES ('2015-01-01', 1, 10, [1], ['1']); -ALTER TABLE test.alter ADD COLUMN `n.i8` Array(Int8) AFTER i32; +ALTER TABLE alter ADD COLUMN `n.i8` Array(Int8) AFTER i32; -SELECT `n.i8`, `n.ui8`, `n.s` FROM test.alter ORDER BY k; -SELECT `n.i8` FROM test.alter ORDER BY k; +SELECT `n.i8`, `n.ui8`, `n.s` FROM alter ORDER BY k; +SELECT `n.i8` FROM alter ORDER BY k; -OPTIMIZE TABLE test.alter; +OPTIMIZE TABLE alter; -SELECT `n.i8` FROM test.alter ORDER BY k; +SELECT `n.i8` FROM alter ORDER BY k; -DROP TABLE IF EXISTS test.alter; +DROP TABLE IF EXISTS alter; diff --git a/dbms/tests/queries/0_stateless/00394_replaceall_vector_fixed.sql b/dbms/tests/queries/0_stateless/00394_replaceall_vector_fixed.sql index 75d693d11e7..47ab3fe4a1c 100644 --- a/dbms/tests/queries/0_stateless/00394_replaceall_vector_fixed.sql +++ b/dbms/tests/queries/0_stateless/00394_replaceall_vector_fixed.sql @@ -1,24 +1,24 @@ -DROP TABLE IF EXISTS test.replaceall; -CREATE TABLE test.replaceall (str FixedString(3)) ENGINE = Memory; +DROP TABLE IF EXISTS replaceall; +CREATE TABLE replaceall (str FixedString(3)) ENGINE = Memory; -INSERT INTO test.replaceall VALUES ('foo'); -INSERT INTO test.replaceall VALUES ('boa'); -INSERT INTO test.replaceall VALUES ('bar'); -INSERT INTO test.replaceall VALUES ('bao'); +INSERT INTO replaceall VALUES ('foo'); +INSERT INTO replaceall VALUES ('boa'); +INSERT INTO replaceall VALUES ('bar'); +INSERT INTO replaceall VALUES ('bao'); SELECT str, replaceAll(str, 'o', '*') AS replaced -FROM test.replaceall +FROM replaceall ORDER BY str ASC; -DROP TABLE test.replaceall; +DROP TABLE replaceall; -CREATE TABLE test.replaceall (date Date DEFAULT today(), fs FixedString(16)) ENGINE = MergeTree(date, (date, fs), 8192); -INSERT INTO test.replaceall (fs) VALUES ('54db0d43009d\0\0\0\0'), ('fe2b58224766cf10'), ('54db0d43009d\0\0\0\0'), ('fe2b58224766cf10'); +CREATE TABLE replaceall (date Date DEFAULT today(), fs FixedString(16)) ENGINE = MergeTree(date, (date, fs), 8192); +INSERT INTO replaceall (fs) VALUES ('54db0d43009d\0\0\0\0'), ('fe2b58224766cf10'), ('54db0d43009d\0\0\0\0'), ('fe2b58224766cf10'); SELECT fs, replaceAll(fs, '\0', '*') -FROM test.replaceall +FROM replaceall ORDER BY fs ASC; -DROP TABLE test.replaceall; +DROP TABLE replaceall; diff --git a/dbms/tests/queries/0_stateless/00395_nullable.sql b/dbms/tests/queries/0_stateless/00395_nullable.sql index 66ac1766087..77efc018a8a 100644 --- a/dbms/tests/queries/0_stateless/00395_nullable.sql +++ b/dbms/tests/queries/0_stateless/00395_nullable.sql @@ -8,124 +8,124 @@ SELECT NULL + NULL; SELECT '----- MergeTree engine -----'; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1( +DROP TABLE IF EXISTS test1; +CREATE TABLE test1( col1 UInt64, col2 Nullable(UInt64), col3 String, col4 Nullable(String), col5 Array(UInt64), col6 Array(Nullable(UInt64)), col7 Array(String), col8 Array(Nullable(String)), d Date) Engine = MergeTree(d, (col1, d), 8192); -INSERT INTO test.test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, NULL, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, 1, 'a', NULL, [1], [1], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, 1, 'a', 'a', [1], [NULL], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], [NULL], '2000-01-01'); -SELECT * FROM test.test1 ORDER BY col1,col2,col3,col4,col5,col6,col7,col8 ASC; +INSERT INTO test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, NULL, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, 1, 'a', NULL, [1], [1], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, 1, 'a', 'a', [1], [NULL], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], [NULL], '2000-01-01'); +SELECT * FROM test1 ORDER BY col1,col2,col3,col4,col5,col6,col7,col8 ASC; SELECT '----- Memory engine -----'; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1( +DROP TABLE IF EXISTS test1; +CREATE TABLE test1( col1 UInt64, col2 Nullable(UInt64), col3 String, col4 Nullable(String), col5 Array(UInt64), col6 Array(Nullable(UInt64)), col7 Array(String), col8 Array(Nullable(String)), d Date) Engine = Memory; -INSERT INTO test.test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, NULL, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, 1, 'a', NULL, [1], [1], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, 1, 'a', 'a', [1], [NULL], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], [NULL], '2000-01-01'); -SELECT * FROM test.test1 ORDER BY col1,col2,col3,col4,col5,col6,col7,col8 ASC; +INSERT INTO test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, NULL, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, 1, 'a', NULL, [1], [1], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, 1, 'a', 'a', [1], [NULL], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], [NULL], '2000-01-01'); +SELECT * FROM test1 ORDER BY col1,col2,col3,col4,col5,col6,col7,col8 ASC; SELECT '----- TinyLog engine -----'; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1( +DROP TABLE IF EXISTS test1; +CREATE TABLE test1( col1 UInt64, col2 Nullable(UInt64), col3 String, col4 Nullable(String), col5 Array(UInt64), col6 Array(Nullable(UInt64)), col7 Array(String), col8 Array(Nullable(String)), d Date) Engine = TinyLog; -INSERT INTO test.test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, NULL, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, 1, 'a', NULL, [1], [1], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, 1, 'a', 'a', [1], [NULL], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], [NULL], '2000-01-01'); -SELECT * FROM test.test1 ORDER BY col1,col2,col3,col4,col5,col6,col7,col8 ASC; +INSERT INTO test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, NULL, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, 1, 'a', NULL, [1], [1], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, 1, 'a', 'a', [1], [NULL], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], [NULL], '2000-01-01'); +SELECT * FROM test1 ORDER BY col1,col2,col3,col4,col5,col6,col7,col8 ASC; SELECT '----- Log engine -----'; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1( +DROP TABLE IF EXISTS test1; +CREATE TABLE test1( col1 UInt64, col2 Nullable(UInt64), col3 String, col4 Nullable(String), col5 Array(UInt64), col6 Array(Nullable(UInt64)), col7 Array(String), col8 Array(Nullable(String)), d Date) Engine = Log; -INSERT INTO test.test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, NULL, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, 1, 'a', NULL, [1], [1], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, 1, 'a', 'a', [1], [NULL], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], [NULL], '2000-01-01'); -SELECT * FROM test.test1 ORDER BY col1,col2,col3,col4,col5,col6,col7,col8 ASC; +INSERT INTO test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, NULL, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, 1, 'a', NULL, [1], [1], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, 1, 'a', 'a', [1], [NULL], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], [NULL], '2000-01-01'); +SELECT * FROM test1 ORDER BY col1,col2,col3,col4,col5,col6,col7,col8 ASC; SELECT '----- StripeLog engine -----'; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1( +DROP TABLE IF EXISTS test1; +CREATE TABLE test1( col1 UInt64, col2 Nullable(UInt64), col3 String, col4 Nullable(String), col5 Array(UInt64), col6 Array(Nullable(UInt64)), col7 Array(String), col8 Array(Nullable(String)), d Date) Engine = StripeLog; -INSERT INTO test.test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, NULL, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, 1, 'a', NULL, [1], [1], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, 1, 'a', 'a', [1], [NULL], ['a'], ['a'], '2000-01-01'); -INSERT INTO test.test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], [NULL], '2000-01-01'); -SELECT * FROM test.test1 ORDER BY col1,col2,col3,col4,col5,col6,col7,col8 ASC; +INSERT INTO test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, NULL, 'a', 'a', [1], [1], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, 1, 'a', NULL, [1], [1], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, 1, 'a', 'a', [1], [NULL], ['a'], ['a'], '2000-01-01'); +INSERT INTO test1 VALUES (1, 1, 'a', 'a', [1], [1], ['a'], [NULL], '2000-01-01'); +SELECT * FROM test1 ORDER BY col1,col2,col3,col4,col5,col6,col7,col8 ASC; SELECT '----- Insert with expression -----'; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Array(Nullable(UInt64))) Engine=Memory; -INSERT INTO test.test1(col1) VALUES ([1+1]); -SELECT col1 FROM test.test1 ORDER BY col1 ASC; +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Array(Nullable(UInt64))) Engine=Memory; +INSERT INTO test1(col1) VALUES ([1+1]); +SELECT col1 FROM test1 ORDER BY col1 ASC; SELECT '----- Insert. Source and target columns have same types up to nullability. -----'; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Nullable(UInt64), col2 UInt64) Engine=Memory; -DROP TABLE IF EXISTS test.test2; -CREATE TABLE test.test2(col1 UInt64, col2 Nullable(UInt64)) Engine=Memory; -INSERT INTO test.test1(col1,col2) VALUES (2,7)(6,9)(5,1)(4,3)(8,2); -INSERT INTO test.test2(col1,col2) SELECT col1,col2 FROM test.test1; -SELECT col1,col2 FROM test.test2 ORDER BY col1,col2 ASC; +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Nullable(UInt64), col2 UInt64) Engine=Memory; +DROP TABLE IF EXISTS test2; +CREATE TABLE test2(col1 UInt64, col2 Nullable(UInt64)) Engine=Memory; +INSERT INTO test1(col1,col2) VALUES (2,7)(6,9)(5,1)(4,3)(8,2); +INSERT INTO test2(col1,col2) SELECT col1,col2 FROM test1; +SELECT col1,col2 FROM test2 ORDER BY col1,col2 ASC; SELECT '----- Apply functions and aggregate functions on columns that may contain null values -----'; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Nullable(UInt64), col2 Nullable(UInt64)) Engine=Memory; -INSERT INTO test.test1(col1,col2) VALUES (2,7)(NULL,6)(9,NULL)(NULL,NULL)(5,1)(42,42); -SELECT col1, col2, col1 + col2, col1 * 7 FROM test.test1 ORDER BY col1,col2 ASC; -SELECT sum(col1) FROM test.test1; -SELECT sum(col1 * 7) FROM test.test1; +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Nullable(UInt64), col2 Nullable(UInt64)) Engine=Memory; +INSERT INTO test1(col1,col2) VALUES (2,7)(NULL,6)(9,NULL)(NULL,NULL)(5,1)(42,42); +SELECT col1, col2, col1 + col2, col1 * 7 FROM test1 ORDER BY col1,col2 ASC; +SELECT sum(col1) FROM test1; +SELECT sum(col1 * 7) FROM test1; SELECT '----- isNull, isNotNull -----'; -SELECT col1, col2, isNull(col1), isNotNull(col2) FROM test.test1 ORDER BY col1,col2 ASC; +SELECT col1, col2, isNull(col1), isNotNull(col2) FROM test1 ORDER BY col1,col2 ASC; SELECT '----- ifNull, nullIf -----'; -SELECT col1, col2, ifNull(col1,col2) FROM test.test1 ORDER BY col1,col2 ASC; -SELECT col1, col2, nullIf(col1,col2) FROM test.test1 ORDER BY col1,col2 ASC; +SELECT col1, col2, ifNull(col1,col2) FROM test1 ORDER BY col1,col2 ASC; +SELECT col1, col2, nullIf(col1,col2) FROM test1 ORDER BY col1,col2 ASC; SELECT '----- coalesce -----'; @@ -134,17 +134,17 @@ SELECT coalesce(NULL, 1); SELECT coalesce(NULL, NULL, 1); SELECT coalesce(NULL, 42, NULL, 1); SELECT coalesce(NULL, NULL, NULL); -SELECT col1, col2, coalesce(col1, col2) FROM test.test1 ORDER BY col1, col2 ASC; -SELECT col1, col2, coalesce(col1, col2, 99) FROM test.test1 ORDER BY col1, col2 ASC; +SELECT col1, col2, coalesce(col1, col2) FROM test1 ORDER BY col1, col2 ASC; +SELECT col1, col2, coalesce(col1, col2, 99) FROM test1 ORDER BY col1, col2 ASC; SELECT '----- assumeNotNull -----'; -SELECT res FROM (SELECT col1, assumeNotNull(col1) AS res FROM test.test1) WHERE col1 IS NOT NULL ORDER BY res ASC; +SELECT res FROM (SELECT col1, assumeNotNull(col1) AS res FROM test1) WHERE col1 IS NOT NULL ORDER BY res ASC; SELECT '----- IS NULL, IS NOT NULL -----'; -SELECT col1 FROM test.test1 WHERE col1 IS NOT NULL ORDER BY col1 ASC; -SELECT col1 FROM test.test1 WHERE col1 IS NULL; +SELECT col1 FROM test1 WHERE col1 IS NOT NULL ORDER BY col1 ASC; +SELECT col1 FROM test1 WHERE col1 IS NULL; SELECT '----- multiIf -----'; @@ -158,15 +158,15 @@ SELECT multiIf(1, toFixedString('A', 16), 1, NULL, toFixedString('DEF', 16)); SELECT multiIf(NULL, 2, 1, 3, 4); SELECT multiIf(1, 2, NULL, 3, 4); -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Nullable(Int8), col2 Nullable(UInt16), col3 Nullable(Float32)) Engine=TinyLog; -INSERT INTO test.test1(col1,col2,col3) VALUES (toInt8(1),toUInt16(2),toFloat32(3))(NULL,toUInt16(1),toFloat32(2))(toInt8(1),NULL,toFloat32(2))(toInt8(1),toUInt16(2),NULL); -SELECT multiIf(col1 == 1, col2, col2 == 2, col3, col3 == 3, col1, 42) FROM test.test1; +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Nullable(Int8), col2 Nullable(UInt16), col3 Nullable(Float32)) Engine=TinyLog; +INSERT INTO test1(col1,col2,col3) VALUES (toInt8(1),toUInt16(2),toFloat32(3))(NULL,toUInt16(1),toFloat32(2))(toInt8(1),NULL,toFloat32(2))(toInt8(1),toUInt16(2),NULL); +SELECT multiIf(col1 == 1, col2, col2 == 2, col3, col3 == 3, col1, 42) FROM test1; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(cond1 Nullable(UInt8), then1 Int8, cond2 UInt8, then2 Nullable(UInt16), then3 Nullable(Float32)) Engine=TinyLog; -INSERT INTO test.test1(cond1,then1,cond2,then2,then3) VALUES(1,1,1,42,99)(0,7,1,99,42)(NULL,6,2,99,NULL); -SELECT multiIf(cond1,then1,cond2,then2,then3) FROM test.test1; +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(cond1 Nullable(UInt8), then1 Int8, cond2 UInt8, then2 Nullable(UInt16), then3 Nullable(Float32)) Engine=TinyLog; +INSERT INTO test1(cond1,then1,cond2,then2,then3) VALUES(1,1,1,42,99)(0,7,1,99,42)(NULL,6,2,99,NULL); +SELECT multiIf(cond1,then1,cond2,then2,then3) FROM test1; SELECT '----- Array functions -----'; @@ -194,59 +194,59 @@ SELECT arrayElement(['a',NULL,'c','d'], 2); SELECT arrayElement(['a',NULL,'c','d'], 3); SELECT arrayElement(['a',NULL,'c','d'], 4); -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 UInt64) Engine=TinyLog; -INSERT INTO test.test1(col1) VALUES(1),(2),(3),(4); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 UInt64) Engine=TinyLog; +INSERT INTO test1(col1) VALUES(1),(2),(3),(4); -SELECT arrayElement([1,NULL,2,3], col1) FROM test.test1; +SELECT arrayElement([1,NULL,2,3], col1) FROM test1; SELECT '----- variable arrays -----'; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Array(Nullable(UInt64))) Engine=TinyLog; -INSERT INTO test.test1(col1) VALUES([2,3,7,NULL]); -INSERT INTO test.test1(col1) VALUES([NULL,3,7,4]); -INSERT INTO test.test1(col1) VALUES([2,NULL,7,NULL]); -INSERT INTO test.test1(col1) VALUES([2,3,NULL,4]); -INSERT INTO test.test1(col1) VALUES([NULL,NULL,NULL,NULL]); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Array(Nullable(UInt64))) Engine=TinyLog; +INSERT INTO test1(col1) VALUES([2,3,7,NULL]); +INSERT INTO test1(col1) VALUES([NULL,3,7,4]); +INSERT INTO test1(col1) VALUES([2,NULL,7,NULL]); +INSERT INTO test1(col1) VALUES([2,3,NULL,4]); +INSERT INTO test1(col1) VALUES([NULL,NULL,NULL,NULL]); -SELECT arrayElement(col1, 1) FROM test.test1; -SELECT arrayElement(col1, 2) FROM test.test1; -SELECT arrayElement(col1, 3) FROM test.test1; -SELECT arrayElement(col1, 4) FROM test.test1; +SELECT arrayElement(col1, 1) FROM test1; +SELECT arrayElement(col1, 2) FROM test1; +SELECT arrayElement(col1, 3) FROM test1; +SELECT arrayElement(col1, 4) FROM test1; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Array(Nullable(String))) Engine=TinyLog; -INSERT INTO test.test1(col1) VALUES(['a','bc','def',NULL]); -INSERT INTO test.test1(col1) VALUES([NULL,'bc','def','ghij']); -INSERT INTO test.test1(col1) VALUES(['a',NULL,'def',NULL]); -INSERT INTO test.test1(col1) VALUES(['a','bc',NULL,'ghij']); -INSERT INTO test.test1(col1) VALUES([NULL,NULL,NULL,NULL]); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Array(Nullable(String))) Engine=TinyLog; +INSERT INTO test1(col1) VALUES(['a','bc','def',NULL]); +INSERT INTO test1(col1) VALUES([NULL,'bc','def','ghij']); +INSERT INTO test1(col1) VALUES(['a',NULL,'def',NULL]); +INSERT INTO test1(col1) VALUES(['a','bc',NULL,'ghij']); +INSERT INTO test1(col1) VALUES([NULL,NULL,NULL,NULL]); -SELECT arrayElement(col1, 1) FROM test.test1; -SELECT arrayElement(col1, 2) FROM test.test1; -SELECT arrayElement(col1, 3) FROM test.test1; -SELECT arrayElement(col1, 4) FROM test.test1; +SELECT arrayElement(col1, 1) FROM test1; +SELECT arrayElement(col1, 2) FROM test1; +SELECT arrayElement(col1, 3) FROM test1; +SELECT arrayElement(col1, 4) FROM test1; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Array(Nullable(UInt64)), col2 UInt64) Engine=TinyLog; -INSERT INTO test.test1(col1,col2) VALUES([2,3,7,NULL], 1); -INSERT INTO test.test1(col1,col2) VALUES([NULL,3,7,4], 2); -INSERT INTO test.test1(col1,col2) VALUES([2,NULL,7,NULL], 3); -INSERT INTO test.test1(col1,col2) VALUES([2,3,NULL,4],4); -INSERT INTO test.test1(col1,col2) VALUES([NULL,NULL,NULL,NULL],3); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Array(Nullable(UInt64)), col2 UInt64) Engine=TinyLog; +INSERT INTO test1(col1,col2) VALUES([2,3,7,NULL], 1); +INSERT INTO test1(col1,col2) VALUES([NULL,3,7,4], 2); +INSERT INTO test1(col1,col2) VALUES([2,NULL,7,NULL], 3); +INSERT INTO test1(col1,col2) VALUES([2,3,NULL,4],4); +INSERT INTO test1(col1,col2) VALUES([NULL,NULL,NULL,NULL],3); -SELECT arrayElement(col1,col2) FROM test.test1; +SELECT arrayElement(col1,col2) FROM test1; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Array(Nullable(String)), col2 UInt64) Engine=TinyLog; -INSERT INTO test.test1(col1,col2) VALUES(['a','bc','def',NULL], 1); -INSERT INTO test.test1(col1,col2) VALUES([NULL,'bc','def','ghij'], 2); -INSERT INTO test.test1(col1,col2) VALUES(['a',NULL,'def','ghij'], 3); -INSERT INTO test.test1(col1,col2) VALUES(['a','bc',NULL,'ghij'],4); -INSERT INTO test.test1(col1,col2) VALUES([NULL,NULL,NULL,NULL],3); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Array(Nullable(String)), col2 UInt64) Engine=TinyLog; +INSERT INTO test1(col1,col2) VALUES(['a','bc','def',NULL], 1); +INSERT INTO test1(col1,col2) VALUES([NULL,'bc','def','ghij'], 2); +INSERT INTO test1(col1,col2) VALUES(['a',NULL,'def','ghij'], 3); +INSERT INTO test1(col1,col2) VALUES(['a','bc',NULL,'ghij'],4); +INSERT INTO test1(col1,col2) VALUES([NULL,NULL,NULL,NULL],3); -SELECT arrayElement(col1,col2) FROM test.test1; +SELECT arrayElement(col1,col2) FROM test1; SELECT '----- has -----'; @@ -263,220 +263,220 @@ SELECT has(['a',NULL,'def','ghij'], NULL); SELECT has(['a',NULL,'def','ghij'], 'def'); SELECT has(['a',NULL,'def','ghij'], 'ghij'); -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 UInt64) Engine=TinyLog; -INSERT INTO test.test1(col1) VALUES(1),(2),(3),(4); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 UInt64) Engine=TinyLog; +INSERT INTO test1(col1) VALUES(1),(2),(3),(4); -SELECT has([1,NULL,2,3], col1) FROM test.test1; +SELECT has([1,NULL,2,3], col1) FROM test1; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Nullable(UInt64)) Engine=TinyLog; -INSERT INTO test.test1(col1) VALUES(1),(2),(3),(4),(NULL); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Nullable(UInt64)) Engine=TinyLog; +INSERT INTO test1(col1) VALUES(1),(2),(3),(4),(NULL); -SELECT has([1,NULL,2,3], col1) FROM test.test1; +SELECT has([1,NULL,2,3], col1) FROM test1; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 String) Engine=TinyLog; -INSERT INTO test.test1(col1) VALUES('a'),('bc'),('def'),('ghij'); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 String) Engine=TinyLog; +INSERT INTO test1(col1) VALUES('a'),('bc'),('def'),('ghij'); -SELECT has(['a',NULL,'def','ghij'], col1) FROM test.test1; +SELECT has(['a',NULL,'def','ghij'], col1) FROM test1; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Nullable(String)) Engine=TinyLog; -INSERT INTO test.test1(col1) VALUES('a'),('bc'),('def'),('ghij'),(NULL); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Nullable(String)) Engine=TinyLog; +INSERT INTO test1(col1) VALUES('a'),('bc'),('def'),('ghij'),(NULL); -SELECT has(['a',NULL,'def','ghij'], col1) FROM test.test1; +SELECT has(['a',NULL,'def','ghij'], col1) FROM test1; SELECT '----- variable arrays -----'; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Array(Nullable(UInt64))) Engine=TinyLog; -INSERT INTO test.test1(col1) VALUES([2,3,7,NULL]); -INSERT INTO test.test1(col1) VALUES([NULL,3,7,4]); -INSERT INTO test.test1(col1) VALUES([2,NULL,7,NULL]); -INSERT INTO test.test1(col1) VALUES([2,3,NULL,4]); -INSERT INTO test.test1(col1) VALUES([NULL,NULL,NULL,NULL]); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Array(Nullable(UInt64))) Engine=TinyLog; +INSERT INTO test1(col1) VALUES([2,3,7,NULL]); +INSERT INTO test1(col1) VALUES([NULL,3,7,4]); +INSERT INTO test1(col1) VALUES([2,NULL,7,NULL]); +INSERT INTO test1(col1) VALUES([2,3,NULL,4]); +INSERT INTO test1(col1) VALUES([NULL,NULL,NULL,NULL]); -SELECT has(col1, 2) FROM test.test1; -SELECT has(col1, 3) FROM test.test1; -SELECT has(col1, 4) FROM test.test1; -SELECT has(col1, 5) FROM test.test1; -SELECT has(col1, 7) FROM test.test1; -SELECT has(col1, NULL) FROM test.test1; +SELECT has(col1, 2) FROM test1; +SELECT has(col1, 3) FROM test1; +SELECT has(col1, 4) FROM test1; +SELECT has(col1, 5) FROM test1; +SELECT has(col1, 7) FROM test1; +SELECT has(col1, NULL) FROM test1; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Array(Nullable(String))) Engine=TinyLog; -INSERT INTO test.test1(col1) VALUES(['a','bc','def',NULL]); -INSERT INTO test.test1(col1) VALUES([NULL,'bc','def','ghij']); -INSERT INTO test.test1(col1) VALUES(['a',NULL,'def',NULL]); -INSERT INTO test.test1(col1) VALUES(['a','bc',NULL,'ghij']); -INSERT INTO test.test1(col1) VALUES([NULL,NULL,NULL,NULL]); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Array(Nullable(String))) Engine=TinyLog; +INSERT INTO test1(col1) VALUES(['a','bc','def',NULL]); +INSERT INTO test1(col1) VALUES([NULL,'bc','def','ghij']); +INSERT INTO test1(col1) VALUES(['a',NULL,'def',NULL]); +INSERT INTO test1(col1) VALUES(['a','bc',NULL,'ghij']); +INSERT INTO test1(col1) VALUES([NULL,NULL,NULL,NULL]); -SELECT has(col1, 'a') FROM test.test1; -SELECT has(col1, 'bc') FROM test.test1; -SELECT has(col1, 'def') FROM test.test1; -SELECT has(col1, 'ghij') FROM test.test1; -SELECT has(col1, NULL) FROM test.test1; +SELECT has(col1, 'a') FROM test1; +SELECT has(col1, 'bc') FROM test1; +SELECT has(col1, 'def') FROM test1; +SELECT has(col1, 'ghij') FROM test1; +SELECT has(col1, NULL) FROM test1; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Array(Nullable(UInt64)), col2 UInt64) Engine=TinyLog; -INSERT INTO test.test1(col1,col2) VALUES([2,3,7,NULL], 2); -INSERT INTO test.test1(col1,col2) VALUES([NULL,3,7,4], 3); -INSERT INTO test.test1(col1,col2) VALUES([2,NULL,7,NULL], 7); -INSERT INTO test.test1(col1,col2) VALUES([2,3,NULL,4],5); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Array(Nullable(UInt64)), col2 UInt64) Engine=TinyLog; +INSERT INTO test1(col1,col2) VALUES([2,3,7,NULL], 2); +INSERT INTO test1(col1,col2) VALUES([NULL,3,7,4], 3); +INSERT INTO test1(col1,col2) VALUES([2,NULL,7,NULL], 7); +INSERT INTO test1(col1,col2) VALUES([2,3,NULL,4],5); -SELECT has(col1,col2) FROM test.test1; +SELECT has(col1,col2) FROM test1; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Array(Nullable(UInt64)), col2 Nullable(UInt64)) Engine=TinyLog; -INSERT INTO test.test1(col1,col2) VALUES([2,3,7,NULL], 2); -INSERT INTO test.test1(col1,col2) VALUES([NULL,3,7,4], 3); -INSERT INTO test.test1(col1,col2) VALUES([2,NULL,7,NULL], 7); -INSERT INTO test.test1(col1,col2) VALUES([2,3,NULL,4],5); -INSERT INTO test.test1(col1,col2) VALUES([NULL,NULL,NULL,NULL],NULL); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Array(Nullable(UInt64)), col2 Nullable(UInt64)) Engine=TinyLog; +INSERT INTO test1(col1,col2) VALUES([2,3,7,NULL], 2); +INSERT INTO test1(col1,col2) VALUES([NULL,3,7,4], 3); +INSERT INTO test1(col1,col2) VALUES([2,NULL,7,NULL], 7); +INSERT INTO test1(col1,col2) VALUES([2,3,NULL,4],5); +INSERT INTO test1(col1,col2) VALUES([NULL,NULL,NULL,NULL],NULL); -SELECT has(col1,col2) FROM test.test1; +SELECT has(col1,col2) FROM test1; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Array(Nullable(String)), col2 String) Engine=TinyLog; -INSERT INTO test.test1(col1,col2) VALUES(['a','bc','def',NULL], 'a'); -INSERT INTO test.test1(col1,col2) VALUES([NULL,'bc','def','ghij'], 'bc'); -INSERT INTO test.test1(col1,col2) VALUES(['a',NULL,'def','ghij'], 'def'); -INSERT INTO test.test1(col1,col2) VALUES(['a','bc',NULL,'ghij'], 'ghij'); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Array(Nullable(String)), col2 String) Engine=TinyLog; +INSERT INTO test1(col1,col2) VALUES(['a','bc','def',NULL], 'a'); +INSERT INTO test1(col1,col2) VALUES([NULL,'bc','def','ghij'], 'bc'); +INSERT INTO test1(col1,col2) VALUES(['a',NULL,'def','ghij'], 'def'); +INSERT INTO test1(col1,col2) VALUES(['a','bc',NULL,'ghij'], 'ghij'); -SELECT has(col1,col2) FROM test.test1; +SELECT has(col1,col2) FROM test1; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Array(Nullable(String)), col2 Nullable(String)) Engine=TinyLog; -INSERT INTO test.test1(col1,col2) VALUES(['a','bc','def',NULL], 'a'); -INSERT INTO test.test1(col1,col2) VALUES([NULL,'bc','def','ghij'], 'bc'); -INSERT INTO test.test1(col1,col2) VALUES(['a',NULL,'def','ghij'], 'def'); -INSERT INTO test.test1(col1,col2) VALUES(['a','bc',NULL,'ghij'], 'ghij'); -INSERT INTO test.test1(col1,col2) VALUES([NULL,NULL,NULL,NULL], NULL); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Array(Nullable(String)), col2 Nullable(String)) Engine=TinyLog; +INSERT INTO test1(col1,col2) VALUES(['a','bc','def',NULL], 'a'); +INSERT INTO test1(col1,col2) VALUES([NULL,'bc','def','ghij'], 'bc'); +INSERT INTO test1(col1,col2) VALUES(['a',NULL,'def','ghij'], 'def'); +INSERT INTO test1(col1,col2) VALUES(['a','bc',NULL,'ghij'], 'ghij'); +INSERT INTO test1(col1,col2) VALUES([NULL,NULL,NULL,NULL], NULL); -SELECT has(col1,col2) FROM test.test1; +SELECT has(col1,col2) FROM test1; SELECT '----- Aggregation -----'; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Nullable(String), col2 Nullable(UInt8), col3 String) ENGINE=TinyLog; -INSERT INTO test.test1(col1,col2,col3) VALUES('A', 0, 'ABCDEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('A', 0, 'BACDEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('A', 1, 'BCADEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('A', 1, 'BCDAEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('B', 1, 'BCDEAFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('B', 1, 'BCDEFAGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('B', 1, 'BCDEFGAH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('B', 1, 'BCDEFGHA'); -INSERT INTO test.test1(col1,col2,col3) VALUES('C', 1, 'ACBDEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('C', NULL, 'ACDBEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('C', NULL, 'ACDEBFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('C', NULL, 'ACDEFBGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES(NULL, 1, 'ACDEFGBH'); -INSERT INTO test.test1(col1,col2,col3) VALUES(NULL, NULL, 'ACDEFGHB'); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Nullable(String), col2 Nullable(UInt8), col3 String) ENGINE=TinyLog; +INSERT INTO test1(col1,col2,col3) VALUES('A', 0, 'ABCDEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES('A', 0, 'BACDEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES('A', 1, 'BCADEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES('A', 1, 'BCDAEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES('B', 1, 'BCDEAFGH'); +INSERT INTO test1(col1,col2,col3) VALUES('B', 1, 'BCDEFAGH'); +INSERT INTO test1(col1,col2,col3) VALUES('B', 1, 'BCDEFGAH'); +INSERT INTO test1(col1,col2,col3) VALUES('B', 1, 'BCDEFGHA'); +INSERT INTO test1(col1,col2,col3) VALUES('C', 1, 'ACBDEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES('C', NULL, 'ACDBEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES('C', NULL, 'ACDEBFGH'); +INSERT INTO test1(col1,col2,col3) VALUES('C', NULL, 'ACDEFBGH'); +INSERT INTO test1(col1,col2,col3) VALUES(NULL, 1, 'ACDEFGBH'); +INSERT INTO test1(col1,col2,col3) VALUES(NULL, NULL, 'ACDEFGHB'); -SELECT col1, col2, count() FROM test.test1 GROUP BY col1, col2 ORDER BY col1, col2; +SELECT col1, col2, count() FROM test1 GROUP BY col1, col2 ORDER BY col1, col2; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 String, col2 Nullable(UInt8), col3 String) ENGINE=TinyLog; -INSERT INTO test.test1(col1,col2,col3) VALUES('A', 0, 'ABCDEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('A', 0, 'BACDEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('A', 1, 'BCADEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('A', 1, 'BCDAEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('B', 1, 'BCDEAFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('B', 1, 'BCDEFAGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('B', 1, 'BCDEFGAH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('B', 1, 'BCDEFGHA'); -INSERT INTO test.test1(col1,col2,col3) VALUES('C', 1, 'ACBDEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('C', NULL, 'ACDBEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('C', NULL, 'ACDEBFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES('C', NULL, 'ACDEFBGH'); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 String, col2 Nullable(UInt8), col3 String) ENGINE=TinyLog; +INSERT INTO test1(col1,col2,col3) VALUES('A', 0, 'ABCDEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES('A', 0, 'BACDEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES('A', 1, 'BCADEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES('A', 1, 'BCDAEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES('B', 1, 'BCDEAFGH'); +INSERT INTO test1(col1,col2,col3) VALUES('B', 1, 'BCDEFAGH'); +INSERT INTO test1(col1,col2,col3) VALUES('B', 1, 'BCDEFGAH'); +INSERT INTO test1(col1,col2,col3) VALUES('B', 1, 'BCDEFGHA'); +INSERT INTO test1(col1,col2,col3) VALUES('C', 1, 'ACBDEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES('C', NULL, 'ACDBEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES('C', NULL, 'ACDEBFGH'); +INSERT INTO test1(col1,col2,col3) VALUES('C', NULL, 'ACDEFBGH'); -SELECT col1, col2, count() FROM test.test1 GROUP BY col1, col2 ORDER BY col1, col2; +SELECT col1, col2, count() FROM test1 GROUP BY col1, col2 ORDER BY col1, col2; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Nullable(String), col2 String) ENGINE=TinyLog; -INSERT INTO test.test1(col1,col2) VALUES('A', 'ABCDEFGH'); -INSERT INTO test.test1(col1,col2) VALUES('A', 'BACDEFGH'); -INSERT INTO test.test1(col1,col2) VALUES('A', 'BCADEFGH'); -INSERT INTO test.test1(col1,col2) VALUES('A', 'BCDAEFGH'); -INSERT INTO test.test1(col1,col2) VALUES('B', 'BCDEAFGH'); -INSERT INTO test.test1(col1,col2) VALUES('B', 'BCDEFAGH'); -INSERT INTO test.test1(col1,col2) VALUES('B', 'BCDEFGAH'); -INSERT INTO test.test1(col1,col2) VALUES('B', 'BCDEFGHA'); -INSERT INTO test.test1(col1,col2) VALUES('C', 'ACBDEFGH'); -INSERT INTO test.test1(col1,col2) VALUES('C', 'ACDBEFGH'); -INSERT INTO test.test1(col1,col2) VALUES('C', 'ACDEBFGH'); -INSERT INTO test.test1(col1,col2) VALUES('C', 'ACDEFBGH'); -INSERT INTO test.test1(col1,col2) VALUES(NULL, 'ACDEFGBH'); -INSERT INTO test.test1(col1,col2) VALUES(NULL, 'ACDEFGHB'); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Nullable(String), col2 String) ENGINE=TinyLog; +INSERT INTO test1(col1,col2) VALUES('A', 'ABCDEFGH'); +INSERT INTO test1(col1,col2) VALUES('A', 'BACDEFGH'); +INSERT INTO test1(col1,col2) VALUES('A', 'BCADEFGH'); +INSERT INTO test1(col1,col2) VALUES('A', 'BCDAEFGH'); +INSERT INTO test1(col1,col2) VALUES('B', 'BCDEAFGH'); +INSERT INTO test1(col1,col2) VALUES('B', 'BCDEFAGH'); +INSERT INTO test1(col1,col2) VALUES('B', 'BCDEFGAH'); +INSERT INTO test1(col1,col2) VALUES('B', 'BCDEFGHA'); +INSERT INTO test1(col1,col2) VALUES('C', 'ACBDEFGH'); +INSERT INTO test1(col1,col2) VALUES('C', 'ACDBEFGH'); +INSERT INTO test1(col1,col2) VALUES('C', 'ACDEBFGH'); +INSERT INTO test1(col1,col2) VALUES('C', 'ACDEFBGH'); +INSERT INTO test1(col1,col2) VALUES(NULL, 'ACDEFGBH'); +INSERT INTO test1(col1,col2) VALUES(NULL, 'ACDEFGHB'); -SELECT col1, count() FROM test.test1 GROUP BY col1 ORDER BY col1; +SELECT col1, count() FROM test1 GROUP BY col1 ORDER BY col1; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Nullable(UInt8), col2 String) ENGINE=TinyLog; -INSERT INTO test.test1(col1,col2) VALUES(0, 'ABCDEFGH'); -INSERT INTO test.test1(col1,col2) VALUES(0, 'BACDEFGH'); -INSERT INTO test.test1(col1,col2) VALUES(1, 'BCADEFGH'); -INSERT INTO test.test1(col1,col2) VALUES(1, 'BCDAEFGH'); -INSERT INTO test.test1(col1,col2) VALUES(1, 'BCDEAFGH'); -INSERT INTO test.test1(col1,col2) VALUES(1, 'BCDEFAGH'); -INSERT INTO test.test1(col1,col2) VALUES(1, 'BCDEFGAH'); -INSERT INTO test.test1(col1,col2) VALUES(1, 'BCDEFGHA'); -INSERT INTO test.test1(col1,col2) VALUES(1, 'ACBDEFGH'); -INSERT INTO test.test1(col1,col2) VALUES(NULL, 'ACDBEFGH'); -INSERT INTO test.test1(col1,col2) VALUES(NULL, 'ACDEBFGH'); -INSERT INTO test.test1(col1,col2) VALUES(NULL, 'ACDEFBGH'); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Nullable(UInt8), col2 String) ENGINE=TinyLog; +INSERT INTO test1(col1,col2) VALUES(0, 'ABCDEFGH'); +INSERT INTO test1(col1,col2) VALUES(0, 'BACDEFGH'); +INSERT INTO test1(col1,col2) VALUES(1, 'BCADEFGH'); +INSERT INTO test1(col1,col2) VALUES(1, 'BCDAEFGH'); +INSERT INTO test1(col1,col2) VALUES(1, 'BCDEAFGH'); +INSERT INTO test1(col1,col2) VALUES(1, 'BCDEFAGH'); +INSERT INTO test1(col1,col2) VALUES(1, 'BCDEFGAH'); +INSERT INTO test1(col1,col2) VALUES(1, 'BCDEFGHA'); +INSERT INTO test1(col1,col2) VALUES(1, 'ACBDEFGH'); +INSERT INTO test1(col1,col2) VALUES(NULL, 'ACDBEFGH'); +INSERT INTO test1(col1,col2) VALUES(NULL, 'ACDEBFGH'); +INSERT INTO test1(col1,col2) VALUES(NULL, 'ACDEFBGH'); -SELECT col1, count() FROM test.test1 GROUP BY col1 ORDER BY col1; +SELECT col1, count() FROM test1 GROUP BY col1 ORDER BY col1; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Nullable(UInt64), col2 UInt64, col3 String) ENGINE=TinyLog; -INSERT INTO test.test1(col1,col2,col3) VALUES(0, 2, 'ABCDEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES(0, 3, 'BACDEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES(1, 5, 'BCADEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES(1, 2, 'BCDAEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES(1, 3, 'BCDEAFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES(1, 5, 'BCDEFAGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES(1, 2, 'BCDEFGAH'); -INSERT INTO test.test1(col1,col2,col3) VALUES(1, 3, 'BCDEFGHA'); -INSERT INTO test.test1(col1,col2,col3) VALUES(1, 5, 'ACBDEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES(NULL, 2, 'ACDBEFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES(NULL, 3, 'ACDEBFGH'); -INSERT INTO test.test1(col1,col2,col3) VALUES(NULL, 3, 'ACDEFBGH'); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Nullable(UInt64), col2 UInt64, col3 String) ENGINE=TinyLog; +INSERT INTO test1(col1,col2,col3) VALUES(0, 2, 'ABCDEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES(0, 3, 'BACDEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES(1, 5, 'BCADEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES(1, 2, 'BCDAEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES(1, 3, 'BCDEAFGH'); +INSERT INTO test1(col1,col2,col3) VALUES(1, 5, 'BCDEFAGH'); +INSERT INTO test1(col1,col2,col3) VALUES(1, 2, 'BCDEFGAH'); +INSERT INTO test1(col1,col2,col3) VALUES(1, 3, 'BCDEFGHA'); +INSERT INTO test1(col1,col2,col3) VALUES(1, 5, 'ACBDEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES(NULL, 2, 'ACDBEFGH'); +INSERT INTO test1(col1,col2,col3) VALUES(NULL, 3, 'ACDEBFGH'); +INSERT INTO test1(col1,col2,col3) VALUES(NULL, 3, 'ACDEFBGH'); -SELECT col1, col2, count() FROM test.test1 GROUP BY col1, col2 ORDER BY col1, col2; +SELECT col1, col2, count() FROM test1 GROUP BY col1, col2 ORDER BY col1, col2; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Nullable(UInt64), col2 UInt64, col3 Nullable(UInt64), col4 String) ENGINE=TinyLog; -INSERT INTO test.test1(col1,col2,col3,col4) VALUES(0, 2, 1, 'ABCDEFGH'); -INSERT INTO test.test1(col1,col2,col3,col4) VALUES(0, 3, NULL, 'BACDEFGH'); -INSERT INTO test.test1(col1,col2,col3,col4) VALUES(1, 5, 1, 'BCADEFGH'); -INSERT INTO test.test1(col1,col2,col3,col4) VALUES(1, 2, NULL, 'BCDAEFGH'); -INSERT INTO test.test1(col1,col2,col3,col4) VALUES(1, 3, 1, 'BCDEAFGH'); -INSERT INTO test.test1(col1,col2,col3,col4) VALUES(1, 5, NULL, 'BCDEFAGH'); -INSERT INTO test.test1(col1,col2,col3,col4) VALUES(1, 2, 1, 'BCDEFGAH'); -INSERT INTO test.test1(col1,col2,col3,col4) VALUES(1, 3, NULL, 'BCDEFGHA'); -INSERT INTO test.test1(col1,col2,col3,col4) VALUES(1, 5, 1, 'ACBDEFGH'); -INSERT INTO test.test1(col1,col2,col3,col4) VALUES(NULL, 2, NULL, 'ACDBEFGH'); -INSERT INTO test.test1(col1,col2,col3,col4) VALUES(NULL, 3, 1, 'ACDEBFGH'); -INSERT INTO test.test1(col1,col2,col3,col4) VALUES(NULL, 3, NULL, 'ACDEFBGH'); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Nullable(UInt64), col2 UInt64, col3 Nullable(UInt64), col4 String) ENGINE=TinyLog; +INSERT INTO test1(col1,col2,col3,col4) VALUES(0, 2, 1, 'ABCDEFGH'); +INSERT INTO test1(col1,col2,col3,col4) VALUES(0, 3, NULL, 'BACDEFGH'); +INSERT INTO test1(col1,col2,col3,col4) VALUES(1, 5, 1, 'BCADEFGH'); +INSERT INTO test1(col1,col2,col3,col4) VALUES(1, 2, NULL, 'BCDAEFGH'); +INSERT INTO test1(col1,col2,col3,col4) VALUES(1, 3, 1, 'BCDEAFGH'); +INSERT INTO test1(col1,col2,col3,col4) VALUES(1, 5, NULL, 'BCDEFAGH'); +INSERT INTO test1(col1,col2,col3,col4) VALUES(1, 2, 1, 'BCDEFGAH'); +INSERT INTO test1(col1,col2,col3,col4) VALUES(1, 3, NULL, 'BCDEFGHA'); +INSERT INTO test1(col1,col2,col3,col4) VALUES(1, 5, 1, 'ACBDEFGH'); +INSERT INTO test1(col1,col2,col3,col4) VALUES(NULL, 2, NULL, 'ACDBEFGH'); +INSERT INTO test1(col1,col2,col3,col4) VALUES(NULL, 3, 1, 'ACDEBFGH'); +INSERT INTO test1(col1,col2,col3,col4) VALUES(NULL, 3, NULL, 'ACDEFBGH'); -SELECT col1, col2, col3, count() FROM test.test1 GROUP BY col1, col2, col3 ORDER BY col1, col2, col3; +SELECT col1, col2, col3, count() FROM test1 GROUP BY col1, col2, col3 ORDER BY col1, col2, col3; -DROP TABLE IF EXISTS test.test1; -CREATE TABLE test.test1(col1 Array(Nullable(UInt8)), col2 String) ENGINE=TinyLog; -INSERT INTO test.test1(col1,col2) VALUES([0], 'ABCDEFGH'); -INSERT INTO test.test1(col1,col2) VALUES([0], 'BACDEFGH'); -INSERT INTO test.test1(col1,col2) VALUES([1], 'BCADEFGH'); -INSERT INTO test.test1(col1,col2) VALUES([1], 'BCDAEFGH'); -INSERT INTO test.test1(col1,col2) VALUES([1], 'BCDEAFGH'); -INSERT INTO test.test1(col1,col2) VALUES([1], 'BCDEFAGH'); -INSERT INTO test.test1(col1,col2) VALUES([1], 'BCDEFGAH'); -INSERT INTO test.test1(col1,col2) VALUES([1], 'BCDEFGHA'); -INSERT INTO test.test1(col1,col2) VALUES([1], 'ACBDEFGH'); -INSERT INTO test.test1(col1,col2) VALUES([NULL], 'ACDBEFGH'); -INSERT INTO test.test1(col1,col2) VALUES([NULL], 'ACDEBFGH'); -INSERT INTO test.test1(col1,col2) VALUES([NULL], 'ACDEFBGH'); +DROP TABLE IF EXISTS test1; +CREATE TABLE test1(col1 Array(Nullable(UInt8)), col2 String) ENGINE=TinyLog; +INSERT INTO test1(col1,col2) VALUES([0], 'ABCDEFGH'); +INSERT INTO test1(col1,col2) VALUES([0], 'BACDEFGH'); +INSERT INTO test1(col1,col2) VALUES([1], 'BCADEFGH'); +INSERT INTO test1(col1,col2) VALUES([1], 'BCDAEFGH'); +INSERT INTO test1(col1,col2) VALUES([1], 'BCDEAFGH'); +INSERT INTO test1(col1,col2) VALUES([1], 'BCDEFAGH'); +INSERT INTO test1(col1,col2) VALUES([1], 'BCDEFGAH'); +INSERT INTO test1(col1,col2) VALUES([1], 'BCDEFGHA'); +INSERT INTO test1(col1,col2) VALUES([1], 'ACBDEFGH'); +INSERT INTO test1(col1,col2) VALUES([NULL], 'ACDBEFGH'); +INSERT INTO test1(col1,col2) VALUES([NULL], 'ACDEBFGH'); +INSERT INTO test1(col1,col2) VALUES([NULL], 'ACDEFBGH'); -SELECT col1, count() FROM test.test1 GROUP BY col1 ORDER BY col1; +SELECT col1, count() FROM test1 GROUP BY col1 ORDER BY col1; diff --git a/dbms/tests/queries/0_stateless/00399_group_uniq_array_date_datetime.sql b/dbms/tests/queries/0_stateless/00399_group_uniq_array_date_datetime.sql index 8f760b5cac6..231005d46cc 100644 --- a/dbms/tests/queries/0_stateless/00399_group_uniq_array_date_datetime.sql +++ b/dbms/tests/queries/0_stateless/00399_group_uniq_array_date_datetime.sql @@ -1,5 +1,5 @@ -DROP TABLE IF EXISTS test.grop_uniq_array_date; -CREATE TABLE test.grop_uniq_array_date (d Date, dt DateTime) ENGINE = Memory; -INSERT INTO test.grop_uniq_array_date VALUES (toDate('2016-12-16'), toDateTime('2016-12-16 12:00:00')) (toDate('2016-12-16'), toDateTime('2016-12-16 12:00:00')); -SELECT groupUniqArray(d), groupUniqArray(dt) FROM test.grop_uniq_array_date; -DROP TABLE IF EXISTS test.grop_uniq_array_date; +DROP TABLE IF EXISTS grop_uniq_array_date; +CREATE TABLE grop_uniq_array_date (d Date, dt DateTime) ENGINE = Memory; +INSERT INTO grop_uniq_array_date VALUES (toDate('2016-12-16'), toDateTime('2016-12-16 12:00:00')) (toDate('2016-12-16'), toDateTime('2016-12-16 12:00:00')); +SELECT groupUniqArray(d), groupUniqArray(dt) FROM grop_uniq_array_date; +DROP TABLE IF EXISTS grop_uniq_array_date; diff --git a/dbms/tests/queries/0_stateless/00401_merge_and_stripelog.sql b/dbms/tests/queries/0_stateless/00401_merge_and_stripelog.sql index 1953947153a..3bbfefbaf2f 100644 --- a/dbms/tests/queries/0_stateless/00401_merge_and_stripelog.sql +++ b/dbms/tests/queries/0_stateless/00401_merge_and_stripelog.sql @@ -1,48 +1,48 @@ -DROP TABLE IF EXISTS test.stripe1; -DROP TABLE IF EXISTS test.stripe2; -DROP TABLE IF EXISTS test.stripe3; -DROP TABLE IF EXISTS test.stripe4; -DROP TABLE IF EXISTS test.stripe5; -DROP TABLE IF EXISTS test.stripe6; -DROP TABLE IF EXISTS test.stripe7; -DROP TABLE IF EXISTS test.stripe8; -DROP TABLE IF EXISTS test.stripe9; -DROP TABLE IF EXISTS test.stripe10; -DROP TABLE IF EXISTS test.merge; +DROP TABLE IF EXISTS stripe1; +DROP TABLE IF EXISTS stripe2; +DROP TABLE IF EXISTS stripe3; +DROP TABLE IF EXISTS stripe4; +DROP TABLE IF EXISTS stripe5; +DROP TABLE IF EXISTS stripe6; +DROP TABLE IF EXISTS stripe7; +DROP TABLE IF EXISTS stripe8; +DROP TABLE IF EXISTS stripe9; +DROP TABLE IF EXISTS stripe10; +DROP TABLE IF EXISTS merge; -CREATE TABLE test.stripe1 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; -CREATE TABLE test.stripe2 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; -CREATE TABLE test.stripe3 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; -CREATE TABLE test.stripe4 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; -CREATE TABLE test.stripe5 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; -CREATE TABLE test.stripe6 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; -CREATE TABLE test.stripe7 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; -CREATE TABLE test.stripe8 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; -CREATE TABLE test.stripe9 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; -CREATE TABLE test.stripe10 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; +CREATE TABLE stripe1 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; +CREATE TABLE stripe2 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; +CREATE TABLE stripe3 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; +CREATE TABLE stripe4 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; +CREATE TABLE stripe5 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; +CREATE TABLE stripe6 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; +CREATE TABLE stripe7 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; +CREATE TABLE stripe8 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; +CREATE TABLE stripe9 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; +CREATE TABLE stripe10 ENGINE = StripeLog AS SELECT number AS x FROM system.numbers LIMIT 10; -CREATE TABLE test.merge AS test.stripe1 ENGINE = Merge(test, '^stripe\\d+'); +CREATE TABLE merge AS stripe1 ENGINE = Merge(test, '^stripe\\d+'); -SELECT x, count() FROM test.merge GROUP BY x ORDER BY x; +SELECT x, count() FROM merge GROUP BY x ORDER BY x; SET max_threads = 1; -SELECT x, count() FROM test.merge GROUP BY x ORDER BY x; +SELECT x, count() FROM merge GROUP BY x ORDER BY x; SET max_threads = 2; -SELECT x, count() FROM test.merge GROUP BY x ORDER BY x; +SELECT x, count() FROM merge GROUP BY x ORDER BY x; SET max_threads = 5; -SELECT x, count() FROM test.merge GROUP BY x ORDER BY x; +SELECT x, count() FROM merge GROUP BY x ORDER BY x; SET max_threads = 10; -SELECT x, count() FROM test.merge GROUP BY x ORDER BY x; +SELECT x, count() FROM merge GROUP BY x ORDER BY x; SET max_threads = 20; -SELECT x, count() FROM test.merge GROUP BY x ORDER BY x; +SELECT x, count() FROM merge GROUP BY x ORDER BY x; -DROP TABLE IF EXISTS test.stripe1; -DROP TABLE IF EXISTS test.stripe2; -DROP TABLE IF EXISTS test.stripe3; -DROP TABLE IF EXISTS test.stripe4; -DROP TABLE IF EXISTS test.stripe5; -DROP TABLE IF EXISTS test.stripe6; -DROP TABLE IF EXISTS test.stripe7; -DROP TABLE IF EXISTS test.stripe8; -DROP TABLE IF EXISTS test.stripe9; -DROP TABLE IF EXISTS test.stripe10; -DROP TABLE IF EXISTS test.merge; +DROP TABLE IF EXISTS stripe1; +DROP TABLE IF EXISTS stripe2; +DROP TABLE IF EXISTS stripe3; +DROP TABLE IF EXISTS stripe4; +DROP TABLE IF EXISTS stripe5; +DROP TABLE IF EXISTS stripe6; +DROP TABLE IF EXISTS stripe7; +DROP TABLE IF EXISTS stripe8; +DROP TABLE IF EXISTS stripe9; +DROP TABLE IF EXISTS stripe10; +DROP TABLE IF EXISTS merge; diff --git a/dbms/tests/queries/0_stateless/00409_shard_limit_by.sql b/dbms/tests/queries/0_stateless/00409_shard_limit_by.sql index 57d9182a9c8..430b29376a1 100644 --- a/dbms/tests/queries/0_stateless/00409_shard_limit_by.sql +++ b/dbms/tests/queries/0_stateless/00409_shard_limit_by.sql @@ -1,27 +1,27 @@ -DROP TABLE IF EXISTS test.limit_by; -CREATE TABLE test.limit_by (Num UInt32, Name String) ENGINE = Memory; +DROP TABLE IF EXISTS limit_by; +CREATE TABLE limit_by (Num UInt32, Name String) ENGINE = Memory; -INSERT INTO test.limit_by (Num, Name) VALUES (1, 'John'); -INSERT INTO test.limit_by (Num, Name) VALUES (1, 'John'); -INSERT INTO test.limit_by (Num, Name) VALUES (3, 'Mary'); -INSERT INTO test.limit_by (Num, Name) VALUES (3, 'Mary'); -INSERT INTO test.limit_by (Num, Name) VALUES (3, 'Mary'); -INSERT INTO test.limit_by (Num, Name) VALUES (4, 'Mary'); -INSERT INTO test.limit_by (Num, Name) VALUES (4, 'Mary'); -INSERT INTO test.limit_by (Num, Name) VALUES (5, 'Bill'); -INSERT INTO test.limit_by (Num, Name) VALUES (7, 'Bill'); -INSERT INTO test.limit_by (Num, Name) VALUES (7, 'Bill'); -INSERT INTO test.limit_by (Num, Name) VALUES (7, 'Mary'); -INSERT INTO test.limit_by (Num, Name) VALUES (7, 'John'); +INSERT INTO limit_by (Num, Name) VALUES (1, 'John'); +INSERT INTO limit_by (Num, Name) VALUES (1, 'John'); +INSERT INTO limit_by (Num, Name) VALUES (3, 'Mary'); +INSERT INTO limit_by (Num, Name) VALUES (3, 'Mary'); +INSERT INTO limit_by (Num, Name) VALUES (3, 'Mary'); +INSERT INTO limit_by (Num, Name) VALUES (4, 'Mary'); +INSERT INTO limit_by (Num, Name) VALUES (4, 'Mary'); +INSERT INTO limit_by (Num, Name) VALUES (5, 'Bill'); +INSERT INTO limit_by (Num, Name) VALUES (7, 'Bill'); +INSERT INTO limit_by (Num, Name) VALUES (7, 'Bill'); +INSERT INTO limit_by (Num, Name) VALUES (7, 'Mary'); +INSERT INTO limit_by (Num, Name) VALUES (7, 'John'); -- Two elemens in each group -SELECT Num FROM test.limit_by ORDER BY Num LIMIT 2 BY Num; +SELECT Num FROM limit_by ORDER BY Num LIMIT 2 BY Num; -- LIMIT BY doesn't affect result of GROUP BY -SELECT Num, count(*) FROM test.limit_by GROUP BY Num ORDER BY Num LIMIT 2 BY Num; +SELECT Num, count(*) FROM limit_by GROUP BY Num ORDER BY Num LIMIT 2 BY Num; -- LIMIT BY can be combined with LIMIT -SELECT Num, Name FROM test.limit_by ORDER BY Num LIMIT 1 BY Num, Name LIMIT 3; +SELECT Num, Name FROM limit_by ORDER BY Num LIMIT 1 BY Num, Name LIMIT 3; -- Distributed LIMIT BY SELECT dummy FROM remote('127.0.0.{2,3}', system.one) LIMIT 1 BY dummy; @@ -32,4 +32,4 @@ SELECT 1 as one FROM remote('127.0.0.{2,3}', system.one) LIMIT 1 BY one; -- Distributed LIMIT BY with LIMIT SELECT toInt8(number / 5 + 100) AS x FROM remote('127.0.0.1', system.numbers) LIMIT 2 BY x LIMIT 5; -DROP TABLE IF EXISTS test.limit_by; +DROP TABLE IF EXISTS limit_by; diff --git a/dbms/tests/queries/0_stateless/00410_aggregation_combinators_with_arenas.sql b/dbms/tests/queries/0_stateless/00410_aggregation_combinators_with_arenas.sql index ba6670f8b16..67f5cc54afd 100644 --- a/dbms/tests/queries/0_stateless/00410_aggregation_combinators_with_arenas.sql +++ b/dbms/tests/queries/0_stateless/00410_aggregation_combinators_with_arenas.sql @@ -1,9 +1,9 @@ -DROP TABLE IF EXISTS test.arena; -CREATE TABLE test.arena (k UInt8, d String) ENGINE = Memory; -INSERT INTO test.arena SELECT number % 10 AS k, hex(intDiv(number, 10) % 1000) AS d FROM system.numbers LIMIT 10000000; -SELECT length(groupUniqArrayIf(d, d != hex(0))) FROM test.arena GROUP BY k; -SELECT length(groupUniqArrayMerge(ds)) FROM (SELECT k, groupUniqArrayState(d) AS ds FROM test.arena GROUP BY k) GROUP BY k; -DROP TABLE IF EXISTS test.arena; +DROP TABLE IF EXISTS arena; +CREATE TABLE arena (k UInt8, d String) ENGINE = Memory; +INSERT INTO arena SELECT number % 10 AS k, hex(intDiv(number, 10) % 1000) AS d FROM system.numbers LIMIT 10000000; +SELECT length(groupUniqArrayIf(d, d != hex(0))) FROM arena GROUP BY k; +SELECT length(groupUniqArrayMerge(ds)) FROM (SELECT k, groupUniqArrayState(d) AS ds FROM arena GROUP BY k) GROUP BY k; +DROP TABLE IF EXISTS arena; SELECT length(arrayReduce('groupUniqArray', [[1, 2], [1], emptyArrayUInt8(), [1], [1, 2]])); SELECT min(x), max(x) FROM (SELECT length(arrayReduce('groupUniqArray', [hex(number), hex(number+1), hex(number)])) AS x FROM system.numbers LIMIT 100000); diff --git a/dbms/tests/queries/0_stateless/00411_merge_tree_where_const_in_set.sql b/dbms/tests/queries/0_stateless/00411_merge_tree_where_const_in_set.sql index a88eafa0f49..614f838c2eb 100644 --- a/dbms/tests/queries/0_stateless/00411_merge_tree_where_const_in_set.sql +++ b/dbms/tests/queries/0_stateless/00411_merge_tree_where_const_in_set.sql @@ -1,12 +1,12 @@ -DROP TABLE IF EXISTS test.const_in_const; -CREATE TABLE test.const_in_const (id UInt64, date Date, uid UInt32, name String, Sign Int8) ENGINE = CollapsingMergeTree(date, intHash32(uid), (id, date, intHash32(uid)), 8192, Sign); -INSERT INTO test.const_in_const VALUES(1, now(), 1, 'test1', 1); -INSERT INTO test.const_in_const VALUES(2, now(), 1, 'test2', 1); -INSERT INTO test.const_in_const VALUES(3, now(), 1, 'test3', 1); -INSERT INTO test.const_in_const VALUES(4, now(), 2, 'test4', 1); -INSERT INTO test.const_in_const VALUES(5, now(), 3, 'test5', 1); +DROP TABLE IF EXISTS const_in_const; +CREATE TABLE const_in_const (id UInt64, date Date, uid UInt32, name String, Sign Int8) ENGINE = CollapsingMergeTree(date, intHash32(uid), (id, date, intHash32(uid)), 8192, Sign); +INSERT INTO const_in_const VALUES(1, now(), 1, 'test1', 1); +INSERT INTO const_in_const VALUES(2, now(), 1, 'test2', 1); +INSERT INTO const_in_const VALUES(3, now(), 1, 'test3', 1); +INSERT INTO const_in_const VALUES(4, now(), 2, 'test4', 1); +INSERT INTO const_in_const VALUES(5, now(), 3, 'test5', 1); -SELECT 1 from test.const_in_const where 42 in (225); -SELECT name FROM test.const_in_const WHERE 1 IN (125, 1, 2) ORDER BY name LIMIT 1; +SELECT 1 from const_in_const where 42 in (225); +SELECT name FROM const_in_const WHERE 1 IN (125, 1, 2) ORDER BY name LIMIT 1; -DROP TABLE IF EXISTS test.const_in_const; +DROP TABLE IF EXISTS const_in_const; diff --git a/dbms/tests/queries/0_stateless/00412_logical_expressions_optimizer.sql b/dbms/tests/queries/0_stateless/00412_logical_expressions_optimizer.sql index c37aaa21efe..5f8b15e980a 100644 --- a/dbms/tests/queries/0_stateless/00412_logical_expressions_optimizer.sql +++ b/dbms/tests/queries/0_stateless/00412_logical_expressions_optimizer.sql @@ -1,7 +1,7 @@ -DROP TABLE IF EXISTS test.merge_tree; -CREATE TABLE test.merge_tree (x UInt64, date Date) ENGINE = MergeTree(date, x, 1); +DROP TABLE IF EXISTS merge_tree; +CREATE TABLE merge_tree (x UInt64, date Date) ENGINE = MergeTree(date, x, 1); -INSERT INTO test.merge_tree VALUES (1, '2000-01-01'); -SELECT x AS y, y FROM test.merge_tree; +INSERT INTO merge_tree VALUES (1, '2000-01-01'); +SELECT x AS y, y FROM merge_tree; -DROP TABLE IF EXISTS test.merge_tree; +DROP TABLE IF EXISTS merge_tree; diff --git a/dbms/tests/queries/0_stateless/00413_distinct.sql b/dbms/tests/queries/0_stateless/00413_distinct.sql index 6fa8c3180d3..8c6cb6fead2 100644 --- a/dbms/tests/queries/0_stateless/00413_distinct.sql +++ b/dbms/tests/queries/0_stateless/00413_distinct.sql @@ -1,22 +1,22 @@ -DROP TABLE IF EXISTS test.distinct; -CREATE TABLE test.distinct (Num UInt32, Name String) ENGINE = Memory; +DROP TABLE IF EXISTS distinct; +CREATE TABLE distinct (Num UInt32, Name String) ENGINE = Memory; -INSERT INTO test.distinct (Num, Name) VALUES (1, 'John'); -INSERT INTO test.distinct (Num, Name) VALUES (1, 'John'); -INSERT INTO test.distinct (Num, Name) VALUES (3, 'Mary'); -INSERT INTO test.distinct (Num, Name) VALUES (3, 'Mary'); -INSERT INTO test.distinct (Num, Name) VALUES (3, 'Mary'); -INSERT INTO test.distinct (Num, Name) VALUES (4, 'Mary'); -INSERT INTO test.distinct (Num, Name) VALUES (4, 'Mary'); -INSERT INTO test.distinct (Num, Name) VALUES (5, 'Bill'); -INSERT INTO test.distinct (Num, Name) VALUES (7, 'Bill'); -INSERT INTO test.distinct (Num, Name) VALUES (7, 'Bill'); -INSERT INTO test.distinct (Num, Name) VALUES (7, 'Mary'); -INSERT INTO test.distinct (Num, Name) VALUES (7, 'John'); +INSERT INTO distinct (Num, Name) VALUES (1, 'John'); +INSERT INTO distinct (Num, Name) VALUES (1, 'John'); +INSERT INTO distinct (Num, Name) VALUES (3, 'Mary'); +INSERT INTO distinct (Num, Name) VALUES (3, 'Mary'); +INSERT INTO distinct (Num, Name) VALUES (3, 'Mary'); +INSERT INTO distinct (Num, Name) VALUES (4, 'Mary'); +INSERT INTO distinct (Num, Name) VALUES (4, 'Mary'); +INSERT INTO distinct (Num, Name) VALUES (5, 'Bill'); +INSERT INTO distinct (Num, Name) VALUES (7, 'Bill'); +INSERT INTO distinct (Num, Name) VALUES (7, 'Bill'); +INSERT INTO distinct (Num, Name) VALUES (7, 'Mary'); +INSERT INTO distinct (Num, Name) VALUES (7, 'John'); -- String field -SELECT Name FROM (SELECT DISTINCT Name FROM test.distinct) ORDER BY Name; +SELECT Name FROM (SELECT DISTINCT Name FROM distinct) ORDER BY Name; -- Num field -SELECT Num FROM (SELECT DISTINCT Num FROM test.distinct) ORDER BY Num; +SELECT Num FROM (SELECT DISTINCT Num FROM distinct) ORDER BY Num; -DROP TABLE IF EXISTS test.distinct; +DROP TABLE IF EXISTS distinct; diff --git a/dbms/tests/queries/0_stateless/00415_into_outfile.reference b/dbms/tests/queries/0_stateless/00415_into_outfile.reference index 967f7615550..a609e77a50a 100644 --- a/dbms/tests/queries/0_stateless/00415_into_outfile.reference +++ b/dbms/tests/queries/0_stateless/00415_into_outfile.reference @@ -6,7 +6,7 @@ performing test: union_all performing test: bad_union_all query failed performing test: describe_table -dummy UInt8 +dummy UInt8 performing test: clickhouse-local 2 3 performing test: http diff --git a/dbms/tests/queries/0_stateless/00418_input_format_allow_errors.sh b/dbms/tests/queries/0_stateless/00418_input_format_allow_errors.sh index 8cadeeac8a4..d490010ceb0 100755 --- a/dbms/tests/queries/0_stateless/00418_input_format_allow_errors.sh +++ b/dbms/tests/queries/0_stateless/00418_input_format_allow_errors.sh @@ -3,25 +3,25 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.formats_test" -$CLICKHOUSE_CLIENT --query="CREATE TABLE test.formats_test (x UInt64, s String) ENGINE = Memory" +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS formats_test" +$CLICKHOUSE_CLIENT --query="CREATE TABLE formats_test (x UInt64, s String) ENGINE = Memory" -echo -ne '1\tHello\n \n3\tGoodbye\n' | $CLICKHOUSE_CLIENT --input_format_allow_errors_num=1 --input_format_allow_errors_ratio=0.1 --query="INSERT INTO test.formats_test FORMAT TSV" +echo -ne '1\tHello\n \n3\tGoodbye\n' | $CLICKHOUSE_CLIENT --input_format_allow_errors_num=1 --input_format_allow_errors_ratio=0.1 --query="INSERT INTO formats_test FORMAT TSV" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.formats_test ORDER BY x, s" +$CLICKHOUSE_CLIENT --query="SELECT * FROM formats_test ORDER BY x, s" -echo -ne '1\tHello\n2\n3\tGoodbye\n\n' | $CLICKHOUSE_CLIENT --input_format_allow_errors_num=1 --input_format_allow_errors_ratio=0.1 --query="INSERT INTO test.formats_test FORMAT TSV" 2> /dev/null; echo $? +echo -ne '1\tHello\n2\n3\tGoodbye\n\n' | $CLICKHOUSE_CLIENT --input_format_allow_errors_num=1 --input_format_allow_errors_ratio=0.1 --query="INSERT INTO formats_test FORMAT TSV" 2> /dev/null; echo $? -echo -ne '1\tHello\n2\n3\tGoodbye\n\n' | $CLICKHOUSE_CLIENT --input_format_allow_errors_num=2 --input_format_allow_errors_ratio=0.1 --query="INSERT INTO test.formats_test FORMAT TSV" +echo -ne '1\tHello\n2\n3\tGoodbye\n\n' | $CLICKHOUSE_CLIENT --input_format_allow_errors_num=2 --input_format_allow_errors_ratio=0.1 --query="INSERT INTO formats_test FORMAT TSV" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.formats_test ORDER BY x, s" +$CLICKHOUSE_CLIENT --query="SELECT * FROM formats_test ORDER BY x, s" -echo -ne '1\tHello\n2\n3\tGoodbye\n\n' | $CLICKHOUSE_CLIENT --input_format_allow_errors_num=1 --input_format_allow_errors_ratio=0.4 --query="INSERT INTO test.formats_test FORMAT TSV" 2> /dev/null; echo $? +echo -ne '1\tHello\n2\n3\tGoodbye\n\n' | $CLICKHOUSE_CLIENT --input_format_allow_errors_num=1 --input_format_allow_errors_ratio=0.4 --query="INSERT INTO formats_test FORMAT TSV" 2> /dev/null; echo $? -echo -ne '1\tHello\n2\n3\tGoodbye\n\n' | $CLICKHOUSE_CLIENT --input_format_allow_errors_num=1 --input_format_allow_errors_ratio=0.6 --query="INSERT INTO test.formats_test FORMAT TSV" +echo -ne '1\tHello\n2\n3\tGoodbye\n\n' | $CLICKHOUSE_CLIENT --input_format_allow_errors_num=1 --input_format_allow_errors_ratio=0.6 --query="INSERT INTO formats_test FORMAT TSV" -echo -ne 'x=1\ts=TSKV\nx=minus2\ts=trash1\ns=trash2\tx=-3\ns=TSKV Ok\tx=4\ns=trash3\tx=-5\n' | $CLICKHOUSE_CLIENT --input_format_allow_errors_num=3 -q "INSERT INTO test.formats_test FORMAT TSKV" +echo -ne 'x=1\ts=TSKV\nx=minus2\ts=trash1\ns=trash2\tx=-3\ns=TSKV Ok\tx=4\ns=trash3\tx=-5\n' | $CLICKHOUSE_CLIENT --input_format_allow_errors_num=3 -q "INSERT INTO formats_test FORMAT TSKV" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.formats_test ORDER BY x, s" +$CLICKHOUSE_CLIENT --query="SELECT * FROM formats_test ORDER BY x, s" -$CLICKHOUSE_CLIENT --query="DROP TABLE test.formats_test" +$CLICKHOUSE_CLIENT --query="DROP TABLE formats_test" diff --git a/dbms/tests/queries/0_stateless/00421_storage_merge__table_index.sh b/dbms/tests/queries/0_stateless/00421_storage_merge__table_index.sh index 1baa5344a4c..60d1e50fc7b 100755 --- a/dbms/tests/queries/0_stateless/00421_storage_merge__table_index.sh +++ b/dbms/tests/queries/0_stateless/00421_storage_merge__table_index.sh @@ -6,14 +6,14 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh for i in `seq -w 0 2 20`; do - $CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.merge_item_$i" - $CLICKHOUSE_CLIENT -q "CREATE TABLE test.merge_item_$i (d Int8) ENGINE = Memory" - $CLICKHOUSE_CLIENT -q "INSERT INTO test.merge_item_$i VALUES ($i)" + $CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS merge_item_$i" + $CLICKHOUSE_CLIENT -q "CREATE TABLE merge_item_$i (d Int8) ENGINE = Memory" + $CLICKHOUSE_CLIENT -q "INSERT INTO merge_item_$i VALUES ($i)" done -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.merge_storage" -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.merge_storage (d Int8) ENGINE = Merge('test', '^merge_item_')" -$CLICKHOUSE_CLIENT --max_threads=1 -q "SELECT _table, d FROM test.merge_storage WHERE _table LIKE 'merge_item_1%' ORDER BY _table" -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.merge_storage" +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS merge_storage" +$CLICKHOUSE_CLIENT -q "CREATE TABLE merge_storage (d Int8) ENGINE = Merge('${CLICKHOUSE_DATABASE}', '^merge_item_')" +$CLICKHOUSE_CLIENT --max_threads=1 -q "SELECT _table, d FROM merge_storage WHERE _table LIKE 'merge_item_1%' ORDER BY _table" +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS merge_storage" -for i in `seq -w 0 2 20`; do $CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.merge_item_$i"; done +for i in `seq -w 0 2 20`; do $CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS merge_item_$i"; done diff --git a/dbms/tests/queries/0_stateless/00423_storage_log_single_thread.sql b/dbms/tests/queries/0_stateless/00423_storage_log_single_thread.sql index 6693b35ea6c..7d5e14c9ee5 100644 --- a/dbms/tests/queries/0_stateless/00423_storage_log_single_thread.sql +++ b/dbms/tests/queries/0_stateless/00423_storage_log_single_thread.sql @@ -1,29 +1,29 @@ -DROP TABLE IF EXISTS test.log; -CREATE TABLE test.log (s String) ENGINE = Log; +DROP TABLE IF EXISTS log; +CREATE TABLE log (s String) ENGINE = Log; -SELECT * FROM test.log LIMIT 1; -SELECT * FROM test.log; +SELECT * FROM log LIMIT 1; +SELECT * FROM log; -DETACH TABLE test.log; -ATTACH TABLE test.log (s String) ENGINE = Log; +DETACH TABLE log; +ATTACH TABLE log (s String) ENGINE = Log; -SELECT * FROM test.log; -SELECT * FROM test.log LIMIT 1; +SELECT * FROM log; +SELECT * FROM log LIMIT 1; -INSERT INTO test.log VALUES ('Hello'), ('World'); +INSERT INTO log VALUES ('Hello'), ('World'); -SELECT * FROM test.log LIMIT 1; +SELECT * FROM log LIMIT 1; -DETACH TABLE test.log; -ATTACH TABLE test.log (s String) ENGINE = Log; +DETACH TABLE log; +ATTACH TABLE log (s String) ENGINE = Log; -SELECT * FROM test.log LIMIT 1; -SELECT * FROM test.log; +SELECT * FROM log LIMIT 1; +SELECT * FROM log; -DETACH TABLE test.log; -ATTACH TABLE test.log (s String) ENGINE = Log; +DETACH TABLE log; +ATTACH TABLE log (s String) ENGINE = Log; -SELECT * FROM test.log; -SELECT * FROM test.log LIMIT 1; +SELECT * FROM log; +SELECT * FROM log LIMIT 1; -DROP TABLE test.log; +DROP TABLE log; diff --git a/dbms/tests/queries/0_stateless/00427_alter_primary_key.sh b/dbms/tests/queries/0_stateless/00427_alter_primary_key.sh index a2d8f355e67..21c39adb900 100755 --- a/dbms/tests/queries/0_stateless/00427_alter_primary_key.sh +++ b/dbms/tests/queries/0_stateless/00427_alter_primary_key.sh @@ -15,24 +15,24 @@ function perform() fi } -perform "DROP TABLE IF EXISTS test.alter" -perform "CREATE TABLE test.alter (d Date, a Enum8('foo'=1), b DateTime, c DateTime) ENGINE=MergeTree(d, (a, b, toTime(c)), 8192)" +perform "DROP TABLE IF EXISTS alter" +perform "CREATE TABLE alter (d Date, a Enum8('foo'=1), b DateTime, c DateTime) ENGINE=MergeTree(d, (a, b, toTime(c)), 8192)" -perform "INSERT INTO test.alter VALUES ('2017-02-09', 'foo', '2017-02-09 00:00:00', '2017-02-09 00:00:00')" +perform "INSERT INTO alter VALUES ('2017-02-09', 'foo', '2017-02-09 00:00:00', '2017-02-09 00:00:00')" # Must fail because d is used as as a date column in MergeTree -perform "ALTER TABLE test.alter MODIFY COLUMN d UInt16" +perform "ALTER TABLE alter MODIFY COLUMN d UInt16" -perform "ALTER TABLE test.alter MODIFY COLUMN a Enum8('foo'=1, 'bar'=2)" -perform "ALTER TABLE test.alter MODIFY COLUMN b UInt32" +perform "ALTER TABLE alter MODIFY COLUMN a Enum8('foo'=1, 'bar'=2)" +perform "ALTER TABLE alter MODIFY COLUMN b UInt32" # Must fail because column c is used in primary key via an expression. -perform "ALTER TABLE test.alter MODIFY COLUMN c UInt32" +perform "ALTER TABLE alter MODIFY COLUMN c UInt32" -perform "INSERT INTO test.alter VALUES ('2017-02-09', 'bar', 1486598400, '2017-02-09 00:00:00')" +perform "INSERT INTO alter VALUES ('2017-02-09', 'bar', 1486598400, '2017-02-09 00:00:00')" -perform "SELECT d FROM test.alter WHERE a = 'bar'" +perform "SELECT d FROM alter WHERE a = 'bar'" -perform "SELECT a, b, b = toUnixTimestamp(c) FROM test.alter ORDER BY a FORMAT TSV" +perform "SELECT a, b, b = toUnixTimestamp(c) FROM alter ORDER BY a FORMAT TSV" -perform "DROP TABLE test.alter" +perform "DROP TABLE alter" diff --git a/dbms/tests/queries/0_stateless/00431_if_nulls.sql b/dbms/tests/queries/0_stateless/00431_if_nulls.sql index 1172df5e7ef..33ec85f8d09 100644 --- a/dbms/tests/queries/0_stateless/00431_if_nulls.sql +++ b/dbms/tests/queries/0_stateless/00431_if_nulls.sql @@ -14,9 +14,9 @@ * Thus we have 5 * 4 * 4 = 80 combinations. */ -DROP TABLE IF EXISTS test.nullable; +DROP TABLE IF EXISTS nullable; -CREATE VIEW test.nullable +CREATE VIEW nullable AS SELECT 1 AS constant_true, 0 AS constant_false, @@ -32,109 +32,109 @@ AS SELECT FROM system.numbers LIMIT 10; -SELECT constant_true ? then_constant : else_constant AS res FROM test.nullable; -SELECT constant_true ? then_constant : constant_null AS res FROM test.nullable; -SELECT constant_true ? then_constant : else_non_constant AS res FROM test.nullable; -SELECT constant_true ? then_constant : else_non_constant_nullable AS res FROM test.nullable; +SELECT constant_true ? then_constant : else_constant AS res FROM nullable; +SELECT constant_true ? then_constant : constant_null AS res FROM nullable; +SELECT constant_true ? then_constant : else_non_constant AS res FROM nullable; +SELECT constant_true ? then_constant : else_non_constant_nullable AS res FROM nullable; -SELECT constant_true ? constant_null : else_constant AS res FROM test.nullable; -SELECT constant_true ? constant_null : constant_null AS res FROM test.nullable; -SELECT constant_true ? constant_null : else_non_constant AS res FROM test.nullable; -SELECT constant_true ? constant_null : else_non_constant_nullable AS res FROM test.nullable; +SELECT constant_true ? constant_null : else_constant AS res FROM nullable; +SELECT constant_true ? constant_null : constant_null AS res FROM nullable; +SELECT constant_true ? constant_null : else_non_constant AS res FROM nullable; +SELECT constant_true ? constant_null : else_non_constant_nullable AS res FROM nullable; -SELECT constant_true ? then_non_constant : else_constant AS res FROM test.nullable; -SELECT constant_true ? then_non_constant : constant_null AS res FROM test.nullable; -SELECT constant_true ? then_non_constant : else_non_constant AS res FROM test.nullable; -SELECT constant_true ? then_non_constant : else_non_constant_nullable AS res FROM test.nullable; +SELECT constant_true ? then_non_constant : else_constant AS res FROM nullable; +SELECT constant_true ? then_non_constant : constant_null AS res FROM nullable; +SELECT constant_true ? then_non_constant : else_non_constant AS res FROM nullable; +SELECT constant_true ? then_non_constant : else_non_constant_nullable AS res FROM nullable; -SELECT constant_true ? then_non_constant_nullable : else_constant AS res FROM test.nullable; -SELECT constant_true ? then_non_constant_nullable : constant_null AS res FROM test.nullable; -SELECT constant_true ? then_non_constant_nullable : else_non_constant AS res FROM test.nullable; -SELECT constant_true ? then_non_constant_nullable : else_non_constant_nullable AS res FROM test.nullable; +SELECT constant_true ? then_non_constant_nullable : else_constant AS res FROM nullable; +SELECT constant_true ? then_non_constant_nullable : constant_null AS res FROM nullable; +SELECT constant_true ? then_non_constant_nullable : else_non_constant AS res FROM nullable; +SELECT constant_true ? then_non_constant_nullable : else_non_constant_nullable AS res FROM nullable; -SELECT constant_false ? then_constant : else_constant AS res FROM test.nullable; -SELECT constant_false ? then_constant : constant_null AS res FROM test.nullable; -SELECT constant_false ? then_constant : else_non_constant AS res FROM test.nullable; -SELECT constant_false ? then_constant : else_non_constant_nullable AS res FROM test.nullable; +SELECT constant_false ? then_constant : else_constant AS res FROM nullable; +SELECT constant_false ? then_constant : constant_null AS res FROM nullable; +SELECT constant_false ? then_constant : else_non_constant AS res FROM nullable; +SELECT constant_false ? then_constant : else_non_constant_nullable AS res FROM nullable; -SELECT constant_false ? constant_null : else_constant AS res FROM test.nullable; -SELECT constant_false ? constant_null : constant_null AS res FROM test.nullable; -SELECT constant_false ? constant_null : else_non_constant AS res FROM test.nullable; -SELECT constant_false ? constant_null : else_non_constant_nullable AS res FROM test.nullable; +SELECT constant_false ? constant_null : else_constant AS res FROM nullable; +SELECT constant_false ? constant_null : constant_null AS res FROM nullable; +SELECT constant_false ? constant_null : else_non_constant AS res FROM nullable; +SELECT constant_false ? constant_null : else_non_constant_nullable AS res FROM nullable; -SELECT constant_false ? then_non_constant : else_constant AS res FROM test.nullable; -SELECT constant_false ? then_non_constant : constant_null AS res FROM test.nullable; -SELECT constant_false ? then_non_constant : else_non_constant AS res FROM test.nullable; -SELECT constant_false ? then_non_constant : else_non_constant_nullable AS res FROM test.nullable; +SELECT constant_false ? then_non_constant : else_constant AS res FROM nullable; +SELECT constant_false ? then_non_constant : constant_null AS res FROM nullable; +SELECT constant_false ? then_non_constant : else_non_constant AS res FROM nullable; +SELECT constant_false ? then_non_constant : else_non_constant_nullable AS res FROM nullable; -SELECT constant_false ? then_non_constant_nullable : else_constant AS res FROM test.nullable; -SELECT constant_false ? then_non_constant_nullable : constant_null AS res FROM test.nullable; -SELECT constant_false ? then_non_constant_nullable : else_non_constant AS res FROM test.nullable; -SELECT constant_false ? then_non_constant_nullable : else_non_constant_nullable AS res FROM test.nullable; +SELECT constant_false ? then_non_constant_nullable : else_constant AS res FROM nullable; +SELECT constant_false ? then_non_constant_nullable : constant_null AS res FROM nullable; +SELECT constant_false ? then_non_constant_nullable : else_non_constant AS res FROM nullable; +SELECT constant_false ? then_non_constant_nullable : else_non_constant_nullable AS res FROM nullable; -SELECT constant_null ? then_constant : else_constant AS res FROM test.nullable; -SELECT constant_null ? then_constant : constant_null AS res FROM test.nullable; -SELECT constant_null ? then_constant : else_non_constant AS res FROM test.nullable; -SELECT constant_null ? then_constant : else_non_constant_nullable AS res FROM test.nullable; +SELECT constant_null ? then_constant : else_constant AS res FROM nullable; +SELECT constant_null ? then_constant : constant_null AS res FROM nullable; +SELECT constant_null ? then_constant : else_non_constant AS res FROM nullable; +SELECT constant_null ? then_constant : else_non_constant_nullable AS res FROM nullable; -SELECT constant_null ? constant_null : else_constant AS res FROM test.nullable; -SELECT constant_null ? constant_null : constant_null AS res FROM test.nullable; -SELECT constant_null ? constant_null : else_non_constant AS res FROM test.nullable; -SELECT constant_null ? constant_null : else_non_constant_nullable AS res FROM test.nullable; +SELECT constant_null ? constant_null : else_constant AS res FROM nullable; +SELECT constant_null ? constant_null : constant_null AS res FROM nullable; +SELECT constant_null ? constant_null : else_non_constant AS res FROM nullable; +SELECT constant_null ? constant_null : else_non_constant_nullable AS res FROM nullable; -SELECT constant_null ? then_non_constant : else_constant AS res FROM test.nullable; -SELECT constant_null ? then_non_constant : constant_null AS res FROM test.nullable; -SELECT constant_null ? then_non_constant : else_non_constant AS res FROM test.nullable; -SELECT constant_null ? then_non_constant : else_non_constant_nullable AS res FROM test.nullable; +SELECT constant_null ? then_non_constant : else_constant AS res FROM nullable; +SELECT constant_null ? then_non_constant : constant_null AS res FROM nullable; +SELECT constant_null ? then_non_constant : else_non_constant AS res FROM nullable; +SELECT constant_null ? then_non_constant : else_non_constant_nullable AS res FROM nullable; -SELECT constant_null ? then_non_constant_nullable : else_constant AS res FROM test.nullable; -SELECT constant_null ? then_non_constant_nullable : constant_null AS res FROM test.nullable; -SELECT constant_null ? then_non_constant_nullable : else_non_constant AS res FROM test.nullable; -SELECT constant_null ? then_non_constant_nullable : else_non_constant_nullable AS res FROM test.nullable; +SELECT constant_null ? then_non_constant_nullable : else_constant AS res FROM nullable; +SELECT constant_null ? then_non_constant_nullable : constant_null AS res FROM nullable; +SELECT constant_null ? then_non_constant_nullable : else_non_constant AS res FROM nullable; +SELECT constant_null ? then_non_constant_nullable : else_non_constant_nullable AS res FROM nullable; -SELECT cond_non_constant ? then_constant : else_constant AS res FROM test.nullable; -SELECT cond_non_constant ? then_constant : constant_null AS res FROM test.nullable; -SELECT cond_non_constant ? then_constant : else_non_constant AS res FROM test.nullable; -SELECT cond_non_constant ? then_constant : else_non_constant_nullable AS res FROM test.nullable; +SELECT cond_non_constant ? then_constant : else_constant AS res FROM nullable; +SELECT cond_non_constant ? then_constant : constant_null AS res FROM nullable; +SELECT cond_non_constant ? then_constant : else_non_constant AS res FROM nullable; +SELECT cond_non_constant ? then_constant : else_non_constant_nullable AS res FROM nullable; -SELECT cond_non_constant ? constant_null : else_constant AS res FROM test.nullable; -SELECT cond_non_constant ? constant_null : constant_null AS res FROM test.nullable; -SELECT cond_non_constant ? constant_null : else_non_constant AS res FROM test.nullable; -SELECT cond_non_constant ? constant_null : else_non_constant_nullable AS res FROM test.nullable; +SELECT cond_non_constant ? constant_null : else_constant AS res FROM nullable; +SELECT cond_non_constant ? constant_null : constant_null AS res FROM nullable; +SELECT cond_non_constant ? constant_null : else_non_constant AS res FROM nullable; +SELECT cond_non_constant ? constant_null : else_non_constant_nullable AS res FROM nullable; -SELECT cond_non_constant ? then_non_constant : else_constant AS res FROM test.nullable; -SELECT cond_non_constant ? then_non_constant : constant_null AS res FROM test.nullable; -SELECT cond_non_constant ? then_non_constant : else_non_constant AS res FROM test.nullable; -SELECT cond_non_constant ? then_non_constant : else_non_constant_nullable AS res FROM test.nullable; +SELECT cond_non_constant ? then_non_constant : else_constant AS res FROM nullable; +SELECT cond_non_constant ? then_non_constant : constant_null AS res FROM nullable; +SELECT cond_non_constant ? then_non_constant : else_non_constant AS res FROM nullable; +SELECT cond_non_constant ? then_non_constant : else_non_constant_nullable AS res FROM nullable; -SELECT cond_non_constant ? then_non_constant_nullable : else_constant AS res FROM test.nullable; -SELECT cond_non_constant ? then_non_constant_nullable : constant_null AS res FROM test.nullable; -SELECT cond_non_constant ? then_non_constant_nullable : else_non_constant AS res FROM test.nullable; -SELECT cond_non_constant ? then_non_constant_nullable : else_non_constant_nullable AS res FROM test.nullable; +SELECT cond_non_constant ? then_non_constant_nullable : else_constant AS res FROM nullable; +SELECT cond_non_constant ? then_non_constant_nullable : constant_null AS res FROM nullable; +SELECT cond_non_constant ? then_non_constant_nullable : else_non_constant AS res FROM nullable; +SELECT cond_non_constant ? then_non_constant_nullable : else_non_constant_nullable AS res FROM nullable; -SELECT cond_non_constant_nullable ? then_constant : else_constant AS res FROM test.nullable; -SELECT cond_non_constant_nullable ? then_constant : constant_null AS res FROM test.nullable; -SELECT cond_non_constant_nullable ? then_constant : else_non_constant AS res FROM test.nullable; -SELECT cond_non_constant_nullable ? then_constant : else_non_constant_nullable AS res FROM test.nullable; +SELECT cond_non_constant_nullable ? then_constant : else_constant AS res FROM nullable; +SELECT cond_non_constant_nullable ? then_constant : constant_null AS res FROM nullable; +SELECT cond_non_constant_nullable ? then_constant : else_non_constant AS res FROM nullable; +SELECT cond_non_constant_nullable ? then_constant : else_non_constant_nullable AS res FROM nullable; -SELECT cond_non_constant_nullable ? constant_null : else_constant AS res FROM test.nullable; -SELECT cond_non_constant_nullable ? constant_null : constant_null AS res FROM test.nullable; -SELECT cond_non_constant_nullable ? constant_null : else_non_constant AS res FROM test.nullable; -SELECT cond_non_constant_nullable ? constant_null : else_non_constant_nullable AS res FROM test.nullable; +SELECT cond_non_constant_nullable ? constant_null : else_constant AS res FROM nullable; +SELECT cond_non_constant_nullable ? constant_null : constant_null AS res FROM nullable; +SELECT cond_non_constant_nullable ? constant_null : else_non_constant AS res FROM nullable; +SELECT cond_non_constant_nullable ? constant_null : else_non_constant_nullable AS res FROM nullable; -SELECT cond_non_constant_nullable ? then_non_constant : else_constant AS res FROM test.nullable; -SELECT cond_non_constant_nullable ? then_non_constant : constant_null AS res FROM test.nullable; -SELECT cond_non_constant_nullable ? then_non_constant : else_non_constant AS res FROM test.nullable; -SELECT cond_non_constant_nullable ? then_non_constant : else_non_constant_nullable AS res FROM test.nullable; +SELECT cond_non_constant_nullable ? then_non_constant : else_constant AS res FROM nullable; +SELECT cond_non_constant_nullable ? then_non_constant : constant_null AS res FROM nullable; +SELECT cond_non_constant_nullable ? then_non_constant : else_non_constant AS res FROM nullable; +SELECT cond_non_constant_nullable ? then_non_constant : else_non_constant_nullable AS res FROM nullable; -SELECT cond_non_constant_nullable ? then_non_constant_nullable : else_constant AS res FROM test.nullable; -SELECT cond_non_constant_nullable ? then_non_constant_nullable : constant_null AS res FROM test.nullable; -SELECT cond_non_constant_nullable ? then_non_constant_nullable : else_non_constant AS res FROM test.nullable; -SELECT cond_non_constant_nullable ? then_non_constant_nullable : else_non_constant_nullable AS res FROM test.nullable; +SELECT cond_non_constant_nullable ? then_non_constant_nullable : else_constant AS res FROM nullable; +SELECT cond_non_constant_nullable ? then_non_constant_nullable : constant_null AS res FROM nullable; +SELECT cond_non_constant_nullable ? then_non_constant_nullable : else_non_constant AS res FROM nullable; +SELECT cond_non_constant_nullable ? then_non_constant_nullable : else_non_constant_nullable AS res FROM nullable; -DROP TABLE test.nullable; +DROP TABLE nullable; diff --git a/dbms/tests/queries/0_stateless/00432_aggregate_function_scalars_and_constants.sql b/dbms/tests/queries/0_stateless/00432_aggregate_function_scalars_and_constants.sql index e8d9704c3a9..c74b4f03371 100644 --- a/dbms/tests/queries/0_stateless/00432_aggregate_function_scalars_and_constants.sql +++ b/dbms/tests/queries/0_stateless/00432_aggregate_function_scalars_and_constants.sql @@ -1,32 +1,32 @@ -DROP TABLE IF EXISTS test.agg_func_col; +DROP TABLE IF EXISTS agg_func_col; -CREATE TABLE test.agg_func_col (p Date, k UInt8, d AggregateFunction(sum, UInt64) DEFAULT arrayReduce('sumState', [toUInt64(200)])) ENGINE = AggregatingMergeTree(p, k, 1); -INSERT INTO test.agg_func_col (k) VALUES (0); -INSERT INTO test.agg_func_col (k, d) SELECT 1 AS k, arrayReduce('sumState', [toUInt64(100)]) AS d; -SELECT k, sumMerge(d) FROM test.agg_func_col GROUP BY k ORDER BY k; +CREATE TABLE agg_func_col (p Date, k UInt8, d AggregateFunction(sum, UInt64) DEFAULT arrayReduce('sumState', [toUInt64(200)])) ENGINE = AggregatingMergeTree(p, k, 1); +INSERT INTO agg_func_col (k) VALUES (0); +INSERT INTO agg_func_col (k, d) SELECT 1 AS k, arrayReduce('sumState', [toUInt64(100)]) AS d; +SELECT k, sumMerge(d) FROM agg_func_col GROUP BY k ORDER BY k; SELECT ''; -ALTER TABLE test.agg_func_col ADD COLUMN af_avg1 AggregateFunction(avg, UInt8); -SELECT k, sumMerge(d), avgMerge(af_avg1) FROM test.agg_func_col GROUP BY k ORDER BY k; +ALTER TABLE agg_func_col ADD COLUMN af_avg1 AggregateFunction(avg, UInt8); +SELECT k, sumMerge(d), avgMerge(af_avg1) FROM agg_func_col GROUP BY k ORDER BY k; SELECT ''; -INSERT INTO test.agg_func_col (k, af_avg1) VALUES (2, arrayReduce('avgState', [101])); -SELECT k, sumMerge(d), avgMerge(af_avg1) FROM test.agg_func_col GROUP BY k ORDER BY k; +INSERT INTO agg_func_col (k, af_avg1) VALUES (2, arrayReduce('avgState', [101])); +SELECT k, sumMerge(d), avgMerge(af_avg1) FROM agg_func_col GROUP BY k ORDER BY k; SELECT ''; -ALTER TABLE test.agg_func_col ADD COLUMN af_gua AggregateFunction(groupUniqArray, String) DEFAULT arrayReduce('groupUniqArrayState', ['---', '---']); -SELECT k, sumMerge(d), avgMerge(af_avg1), groupUniqArrayMerge(af_gua) FROM test.agg_func_col GROUP BY k ORDER BY k; +ALTER TABLE agg_func_col ADD COLUMN af_gua AggregateFunction(groupUniqArray, String) DEFAULT arrayReduce('groupUniqArrayState', ['---', '---']); +SELECT k, sumMerge(d), avgMerge(af_avg1), groupUniqArrayMerge(af_gua) FROM agg_func_col GROUP BY k ORDER BY k; SELECT ''; -INSERT INTO test.agg_func_col (k, af_avg1, af_gua) VALUES (3, arrayReduce('avgState', [102, 102]), arrayReduce('groupUniqArrayState', ['igua', 'igua'])); -SELECT k, sumMerge(d), avgMerge(af_avg1), groupUniqArrayMerge(af_gua) FROM test.agg_func_col GROUP BY k ORDER BY k; +INSERT INTO agg_func_col (k, af_avg1, af_gua) VALUES (3, arrayReduce('avgState', [102, 102]), arrayReduce('groupUniqArrayState', ['igua', 'igua'])); +SELECT k, sumMerge(d), avgMerge(af_avg1), groupUniqArrayMerge(af_gua) FROM agg_func_col GROUP BY k ORDER BY k; -OPTIMIZE TABLE test.agg_func_col; +OPTIMIZE TABLE agg_func_col; SELECT ''; -SELECT k, sumMerge(d), avgMerge(af_avg1), groupUniqArrayMerge(af_gua) FROM test.agg_func_col GROUP BY k ORDER BY k; +SELECT k, sumMerge(d), avgMerge(af_avg1), groupUniqArrayMerge(af_gua) FROM agg_func_col GROUP BY k ORDER BY k; -DROP TABLE IF EXISTS test.agg_func_col; +DROP TABLE IF EXISTS agg_func_col; SELECT ''; SELECT arrayReduce('groupUniqArrayIf', ['---', '---', 't1'], [1, 1, 0]); diff --git a/dbms/tests/queries/0_stateless/00440_nulls_merge_tree.sql b/dbms/tests/queries/0_stateless/00440_nulls_merge_tree.sql index b3386d5444e..7281f960509 100644 --- a/dbms/tests/queries/0_stateless/00440_nulls_merge_tree.sql +++ b/dbms/tests/queries/0_stateless/00440_nulls_merge_tree.sql @@ -1,5 +1,5 @@ -DROP TABLE IF EXISTS test.nulls; -CREATE TABLE test.nulls (d Date, x Nullable(UInt64)) ENGINE = MergeTree(d, d, 8192); -INSERT INTO test.nulls SELECT toDate('2000-01-01'), number % 10 != 0 ? number : NULL FROM system.numbers LIMIT 10000; -SELECT count() FROM test.nulls WHERE x IS NULL; -DROP TABLE test.nulls; +DROP TABLE IF EXISTS nulls; +CREATE TABLE nulls (d Date, x Nullable(UInt64)) ENGINE = MergeTree(d, d, 8192); +INSERT INTO nulls SELECT toDate('2000-01-01'), number % 10 != 0 ? number : NULL FROM system.numbers LIMIT 10000; +SELECT count() FROM nulls WHERE x IS NULL; +DROP TABLE nulls; diff --git a/dbms/tests/queries/0_stateless/00443_preferred_block_size_bytes.sh b/dbms/tests/queries/0_stateless/00443_preferred_block_size_bytes.sh index 8833cefca45..4ab4aa18c18 100755 --- a/dbms/tests/queries/0_stateless/00443_preferred_block_size_bytes.sh +++ b/dbms/tests/queries/0_stateless/00443_preferred_block_size_bytes.sh @@ -5,33 +5,33 @@ set -e CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.preferred_block_size_bytes" -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.preferred_block_size_bytes (p Date, s String) ENGINE = MergeTree(p, p, 1)" -$CLICKHOUSE_CLIENT -q "INSERT INTO test.preferred_block_size_bytes (s) SELECT '16_bytes_-_-_-_' AS s FROM system.numbers LIMIT 10, 90" -$CLICKHOUSE_CLIENT -q "OPTIMIZE TABLE test.preferred_block_size_bytes" -$CLICKHOUSE_CLIENT --preferred_block_size_bytes=26 -q "SELECT DISTINCT blockSize(), ignore(p, s) FROM test.preferred_block_size_bytes" -$CLICKHOUSE_CLIENT --preferred_block_size_bytes=52 -q "SELECT DISTINCT blockSize(), ignore(p, s) FROM test.preferred_block_size_bytes" -$CLICKHOUSE_CLIENT --preferred_block_size_bytes=90 -q "SELECT DISTINCT blockSize(), ignore(p) FROM test.preferred_block_size_bytes" -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.preferred_block_size_bytes" +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS preferred_block_size_bytes" +$CLICKHOUSE_CLIENT -q "CREATE TABLE preferred_block_size_bytes (p Date, s String) ENGINE = MergeTree(p, p, 1)" +$CLICKHOUSE_CLIENT -q "INSERT INTO preferred_block_size_bytes (s) SELECT '16_bytes_-_-_-_' AS s FROM system.numbers LIMIT 10, 90" +$CLICKHOUSE_CLIENT -q "OPTIMIZE TABLE preferred_block_size_bytes" +$CLICKHOUSE_CLIENT --preferred_block_size_bytes=26 -q "SELECT DISTINCT blockSize(), ignore(p, s) FROM preferred_block_size_bytes" +$CLICKHOUSE_CLIENT --preferred_block_size_bytes=52 -q "SELECT DISTINCT blockSize(), ignore(p, s) FROM preferred_block_size_bytes" +$CLICKHOUSE_CLIENT --preferred_block_size_bytes=90 -q "SELECT DISTINCT blockSize(), ignore(p) FROM preferred_block_size_bytes" +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS preferred_block_size_bytes" # PREWHERE using empty column -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.pbs" -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.pbs (p Date, i UInt64, sa Array(String)) ENGINE = MergeTree(p, p, 100)" -$CLICKHOUSE_CLIENT -q "INSERT INTO test.pbs (p, i, sa) SELECT toDate(i % 30) AS p, number AS i, ['a'] AS sa FROM system.numbers LIMIT 1000" -$CLICKHOUSE_CLIENT -q "ALTER TABLE test.pbs ADD COLUMN s UInt8 DEFAULT 0" -$CLICKHOUSE_CLIENT --preferred_block_size_bytes=100000 -q "SELECT count() FROM test.pbs PREWHERE s = 0" -$CLICKHOUSE_CLIENT -q "INSERT INTO test.pbs (p, i, sa) SELECT toDate(i % 30) AS p, number AS i, ['a'] AS sa FROM system.numbers LIMIT 1000" -$CLICKHOUSE_CLIENT --preferred_block_size_bytes=100000 -q "SELECT count() FROM test.pbs PREWHERE s = 0" -$CLICKHOUSE_CLIENT -q "DROP TABLE test.pbs" +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS pbs" +$CLICKHOUSE_CLIENT -q "CREATE TABLE pbs (p Date, i UInt64, sa Array(String)) ENGINE = MergeTree(p, p, 100)" +$CLICKHOUSE_CLIENT -q "INSERT INTO pbs (p, i, sa) SELECT toDate(i % 30) AS p, number AS i, ['a'] AS sa FROM system.numbers LIMIT 1000" +$CLICKHOUSE_CLIENT -q "ALTER TABLE pbs ADD COLUMN s UInt8 DEFAULT 0" +$CLICKHOUSE_CLIENT --preferred_block_size_bytes=100000 -q "SELECT count() FROM pbs PREWHERE s = 0" +$CLICKHOUSE_CLIENT -q "INSERT INTO pbs (p, i, sa) SELECT toDate(i % 30) AS p, number AS i, ['a'] AS sa FROM system.numbers LIMIT 1000" +$CLICKHOUSE_CLIENT --preferred_block_size_bytes=100000 -q "SELECT count() FROM pbs PREWHERE s = 0" +$CLICKHOUSE_CLIENT -q "DROP TABLE pbs" # Nullable PREWHERE -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.nullable_prewhere" -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.nullable_prewhere (p Date, f Nullable(UInt64), d UInt64) ENGINE = MergeTree(p, p, 8)" -$CLICKHOUSE_CLIENT -q "INSERT INTO test.nullable_prewhere SELECT toDate(0) AS p, if(number % 2 = 0, CAST(number AS Nullable(UInt64)), CAST(NULL AS Nullable(UInt64))) AS f, number as d FROM system.numbers LIMIT 1001" -$CLICKHOUSE_CLIENT -q "SELECT sum(d), sum(f), max(d) FROM test.nullable_prewhere PREWHERE NOT isNull(f)" -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.nullable_prewhere" +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS nullable_prewhere" +$CLICKHOUSE_CLIENT -q "CREATE TABLE nullable_prewhere (p Date, f Nullable(UInt64), d UInt64) ENGINE = MergeTree(p, p, 8)" +$CLICKHOUSE_CLIENT -q "INSERT INTO nullable_prewhere SELECT toDate(0) AS p, if(number % 2 = 0, CAST(number AS Nullable(UInt64)), CAST(NULL AS Nullable(UInt64))) AS f, number as d FROM system.numbers LIMIT 1001" +$CLICKHOUSE_CLIENT -q "SELECT sum(d), sum(f), max(d) FROM nullable_prewhere PREWHERE NOT isNull(f)" +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS nullable_prewhere" # Depend on 00282_merging test diff --git a/dbms/tests/queries/0_stateless/00446_clear_column_in_partition_concurrent_zookeeper.sh b/dbms/tests/queries/0_stateless/00446_clear_column_in_partition_concurrent_zookeeper.sh index cf3c1fdadaa..54f5afef086 100755 --- a/dbms/tests/queries/0_stateless/00446_clear_column_in_partition_concurrent_zookeeper.sh +++ b/dbms/tests/queries/0_stateless/00446_clear_column_in_partition_concurrent_zookeeper.sh @@ -5,12 +5,12 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) ch="$CLICKHOUSE_CLIENT --stacktrace -q" -$ch "DROP TABLE IF EXISTS test.clear_column1" -$ch "DROP TABLE IF EXISTS test.clear_column2" -$ch "CREATE TABLE test.clear_column1 (d Date, i Int64, s String) ENGINE = ReplicatedMergeTree('/clickhouse/test/tables/clear_column', '1', d, d, 8192)" -$ch "CREATE TABLE test.clear_column2 (d Date, i Int64, s String) ENGINE = ReplicatedMergeTree('/clickhouse/test/tables/clear_column', '2', d, d, 8192)" +$ch "DROP TABLE IF EXISTS clear_column1" +$ch "DROP TABLE IF EXISTS clear_column2" +$ch "CREATE TABLE clear_column1 (d Date, i Int64, s String) ENGINE = ReplicatedMergeTree('/clickhouse/test/tables/clear_column', '1', d, d, 8192)" +$ch "CREATE TABLE clear_column2 (d Date, i Int64, s String) ENGINE = ReplicatedMergeTree('/clickhouse/test/tables/clear_column', '2', d, d, 8192)" -$ch "ALTER TABLE test.clear_column1 CLEAR COLUMN VasyaUnexistingColumn IN PARTITION '200001'" 1>/dev/null 2>/dev/null +$ch "ALTER TABLE clear_column1 CLEAR COLUMN VasyaUnexistingColumn IN PARTITION '200001'" 1>/dev/null 2>/dev/null rc=$? if [ $rc -eq 0 ]; then echo "An unexisisting column was ALTERed. Code: $rc" @@ -18,21 +18,21 @@ if [ $rc -eq 0 ]; then fi set -e -$ch "INSERT INTO test.clear_column1 VALUES ('2000-01-01', 1, 'a'), ('2000-02-01', 2, 'b')" -$ch "INSERT INTO test.clear_column1 VALUES ('2000-01-01', 3, 'c'), ('2000-02-01', 4, 'd')" +$ch "INSERT INTO clear_column1 VALUES ('2000-01-01', 1, 'a'), ('2000-02-01', 2, 'b')" +$ch "INSERT INTO clear_column1 VALUES ('2000-01-01', 3, 'c'), ('2000-02-01', 4, 'd')" for i in `seq 3`; do - $ch "INSERT INTO test.clear_column1 VALUES ('2000-02-01', 0, ''), ('2000-02-01', 0, '')" & # insert into the same partition - $ch "ALTER TABLE test.clear_column1 CLEAR COLUMN i IN PARTITION '200001'" --replication_alter_partitions_sync=2 & - $ch "ALTER TABLE test.clear_column1 CLEAR COLUMN s IN PARTITION '200001'" --replication_alter_partitions_sync=2 & - $ch "ALTER TABLE test.clear_column1 CLEAR COLUMN i IN PARTITION '200002'" --replication_alter_partitions_sync=2 & - $ch "ALTER TABLE test.clear_column1 CLEAR COLUMN s IN PARTITION '200002'" --replication_alter_partitions_sync=2 & - $ch "INSERT INTO test.clear_column1 VALUES ('2000-03-01', 3, 'c'), ('2000-03-01', 4, 'd')" & # insert into other partition + $ch "INSERT INTO clear_column1 VALUES ('2000-02-01', 0, ''), ('2000-02-01', 0, '')" & # insert into the same partition + $ch "ALTER TABLE clear_column1 CLEAR COLUMN i IN PARTITION '200001'" --replication_alter_partitions_sync=2 & + $ch "ALTER TABLE clear_column1 CLEAR COLUMN s IN PARTITION '200001'" --replication_alter_partitions_sync=2 & + $ch "ALTER TABLE clear_column1 CLEAR COLUMN i IN PARTITION '200002'" --replication_alter_partitions_sync=2 & + $ch "ALTER TABLE clear_column1 CLEAR COLUMN s IN PARTITION '200002'" --replication_alter_partitions_sync=2 & + $ch "INSERT INTO clear_column1 VALUES ('2000-03-01', 3, 'c'), ('2000-03-01', 4, 'd')" & # insert into other partition done wait -$ch "SELECT DISTINCT * FROM test.clear_column1 WHERE d != toDate('2000-03-01') ORDER BY d, i, s" -$ch "SELECT DISTINCT * FROM test.clear_column2 WHERE d != toDate('2000-03-01') ORDER BY d, i, s" +$ch "SELECT DISTINCT * FROM clear_column1 WHERE d != toDate('2000-03-01') ORDER BY d, i, s" +$ch "SELECT DISTINCT * FROM clear_column2 WHERE d != toDate('2000-03-01') ORDER BY d, i, s" -$ch "DROP TABLE IF EXISTS test.clear_column1" -$ch "DROP TABLE IF EXISTS test.clear_column2" +$ch "DROP TABLE IF EXISTS clear_column1" +$ch "DROP TABLE IF EXISTS clear_column2" diff --git a/dbms/tests/queries/0_stateless/00447_foreach_modifier.sql b/dbms/tests/queries/0_stateless/00447_foreach_modifier.sql index 29e957e6501..a62c2e1bc06 100644 --- a/dbms/tests/queries/0_stateless/00447_foreach_modifier.sql +++ b/dbms/tests/queries/0_stateless/00447_foreach_modifier.sql @@ -1,14 +1,14 @@ -CREATE TABLE IF NOT EXISTS test.data (sketch Array(Int8)) ENGINE=Memory; +CREATE TABLE IF NOT EXISTS data (sketch Array(Int8)) ENGINE=Memory; -INSERT INTO test.data VALUES ([-1,-1,-1]), ([4,-1,2]), ([0,25,-1]), ([-1,-1,7]), ([-1,-1,-1]); +INSERT INTO data VALUES ([-1,-1,-1]), ([4,-1,2]), ([0,25,-1]), ([-1,-1,7]), ([-1,-1,-1]); -SELECT max(sketch) FROM test.data; +SELECT max(sketch) FROM data; -SELECT maxArray(sketch) FROM test.data; +SELECT maxArray(sketch) FROM data; -SELECT maxForEach(sketch) FROM test.data; +SELECT maxForEach(sketch) FROM data; -DROP TABLE test.data; +DROP TABLE data; SELECT k, sumForEach(arr) FROM (SELECT number % 3 AS k, range(number) AS arr FROM system.numbers LIMIT 10) GROUP BY k ORDER BY k; diff --git a/dbms/tests/queries/0_stateless/00453_cast_enum.sql b/dbms/tests/queries/0_stateless/00453_cast_enum.sql index 95f66129fb5..3770a21f27e 100644 --- a/dbms/tests/queries/0_stateless/00453_cast_enum.sql +++ b/dbms/tests/queries/0_stateless/00453_cast_enum.sql @@ -1,14 +1,14 @@ -DROP TABLE IF EXISTS test.cast_enums; -CREATE TABLE test.cast_enums +DROP TABLE IF EXISTS cast_enums; +CREATE TABLE cast_enums ( type Enum8('session' = 1, 'pageview' = 2, 'click' = 3), date Date, id UInt64 ) ENGINE = MergeTree(date, (type, date, id), 8192); -INSERT INTO test.cast_enums SELECT 'session' AS type, toDate('2017-01-01') AS date, number AS id FROM system.numbers LIMIT 2; -INSERT INTO test.cast_enums SELECT 2 AS type, toDate('2017-01-01') AS date, number AS id FROM system.numbers LIMIT 2; +INSERT INTO cast_enums SELECT 'session' AS type, toDate('2017-01-01') AS date, number AS id FROM system.numbers LIMIT 2; +INSERT INTO cast_enums SELECT 2 AS type, toDate('2017-01-01') AS date, number AS id FROM system.numbers LIMIT 2; -SELECT type, date, id FROM test.cast_enums ORDER BY type, id; +SELECT type, date, id FROM cast_enums ORDER BY type, id; -DROP TABLE IF EXISTS test.cast_enums; +DROP TABLE IF EXISTS cast_enums; diff --git a/dbms/tests/queries/0_stateless/00456_alter_nullable.sql b/dbms/tests/queries/0_stateless/00456_alter_nullable.sql index fc4903ad3a6..703d1a551a7 100644 --- a/dbms/tests/queries/0_stateless/00456_alter_nullable.sql +++ b/dbms/tests/queries/0_stateless/00456_alter_nullable.sql @@ -1,16 +1,16 @@ -DROP TABLE IF EXISTS test.nullable_alter; -CREATE TABLE test.nullable_alter (d Date DEFAULT '2000-01-01', x String) ENGINE = MergeTree(d, d, 1); +DROP TABLE IF EXISTS nullable_alter; +CREATE TABLE nullable_alter (d Date DEFAULT '2000-01-01', x String) ENGINE = MergeTree(d, d, 1); -INSERT INTO test.nullable_alter (x) VALUES ('Hello'), ('World'); -SELECT x FROM test.nullable_alter ORDER BY x; +INSERT INTO nullable_alter (x) VALUES ('Hello'), ('World'); +SELECT x FROM nullable_alter ORDER BY x; -ALTER TABLE test.nullable_alter MODIFY COLUMN x Nullable(String); -SELECT x FROM test.nullable_alter ORDER BY x; +ALTER TABLE nullable_alter MODIFY COLUMN x Nullable(String); +SELECT x FROM nullable_alter ORDER BY x; -INSERT INTO test.nullable_alter (x) VALUES ('xyz'), (NULL); -SELECT x FROM test.nullable_alter ORDER BY x NULLS FIRST; +INSERT INTO nullable_alter (x) VALUES ('xyz'), (NULL); +SELECT x FROM nullable_alter ORDER BY x NULLS FIRST; -ALTER TABLE test.nullable_alter MODIFY COLUMN x Nullable(FixedString(5)); -SELECT x FROM test.nullable_alter ORDER BY x NULLS FIRST; +ALTER TABLE nullable_alter MODIFY COLUMN x Nullable(FixedString(5)); +SELECT x FROM nullable_alter ORDER BY x NULLS FIRST; -DROP TABLE test.nullable_alter; +DROP TABLE nullable_alter; diff --git a/dbms/tests/queries/0_stateless/00457_log_tinylog_stripelog_nullable.sql b/dbms/tests/queries/0_stateless/00457_log_tinylog_stripelog_nullable.sql index e7b1c376103..ac0861a9b8b 100644 --- a/dbms/tests/queries/0_stateless/00457_log_tinylog_stripelog_nullable.sql +++ b/dbms/tests/queries/0_stateless/00457_log_tinylog_stripelog_nullable.sql @@ -1,40 +1,40 @@ -DROP TABLE IF EXISTS test.nullable; +DROP TABLE IF EXISTS nullable; -CREATE TABLE test.nullable (s String, ns Nullable(String), narr Array(Nullable(UInt64))) ENGINE = Log; +CREATE TABLE nullable (s String, ns Nullable(String), narr Array(Nullable(UInt64))) ENGINE = Log; -INSERT INTO test.nullable SELECT toString(number), number % 3 = 1 ? toString(number) : NULL, arrayMap(x -> x % 2 = 1 ? x : NULL, range(number)) FROM system.numbers LIMIT 10; -SELECT * FROM test.nullable ORDER BY s; -SELECT s FROM test.nullable ORDER BY s; -SELECT ns FROM test.nullable ORDER BY s; -SELECT narr FROM test.nullable ORDER BY s; -SELECT s, narr FROM test.nullable ORDER BY s; +INSERT INTO nullable SELECT toString(number), number % 3 = 1 ? toString(number) : NULL, arrayMap(x -> x % 2 = 1 ? x : NULL, range(number)) FROM system.numbers LIMIT 10; +SELECT * FROM nullable ORDER BY s; +SELECT s FROM nullable ORDER BY s; +SELECT ns FROM nullable ORDER BY s; +SELECT narr FROM nullable ORDER BY s; +SELECT s, narr FROM nullable ORDER BY s; -INSERT INTO test.nullable SELECT toString(number), number % 3 = 1 ? toString(number) : NULL, arrayMap(x -> x % 2 = 1 ? x : NULL, range(number)) FROM system.numbers LIMIT 10, 10; +INSERT INTO nullable SELECT toString(number), number % 3 = 1 ? toString(number) : NULL, arrayMap(x -> x % 2 = 1 ? x : NULL, range(number)) FROM system.numbers LIMIT 10, 10; -DROP TABLE IF EXISTS test.nullable; +DROP TABLE IF EXISTS nullable; -CREATE TABLE test.nullable (s String, ns Nullable(String), narr Array(Nullable(UInt64))) ENGINE = TinyLog; +CREATE TABLE nullable (s String, ns Nullable(String), narr Array(Nullable(UInt64))) ENGINE = TinyLog; -INSERT INTO test.nullable SELECT toString(number), number % 3 = 1 ? toString(number) : NULL, arrayMap(x -> x % 2 = 1 ? x : NULL, range(number)) FROM system.numbers LIMIT 10; -SELECT * FROM test.nullable ORDER BY s; -SELECT s FROM test.nullable ORDER BY s; -SELECT ns FROM test.nullable ORDER BY s; -SELECT narr FROM test.nullable ORDER BY s; -SELECT s, narr FROM test.nullable ORDER BY s; +INSERT INTO nullable SELECT toString(number), number % 3 = 1 ? toString(number) : NULL, arrayMap(x -> x % 2 = 1 ? x : NULL, range(number)) FROM system.numbers LIMIT 10; +SELECT * FROM nullable ORDER BY s; +SELECT s FROM nullable ORDER BY s; +SELECT ns FROM nullable ORDER BY s; +SELECT narr FROM nullable ORDER BY s; +SELECT s, narr FROM nullable ORDER BY s; -INSERT INTO test.nullable SELECT toString(number), number % 3 = 1 ? toString(number) : NULL, arrayMap(x -> x % 2 = 1 ? x : NULL, range(number)) FROM system.numbers LIMIT 10, 10; +INSERT INTO nullable SELECT toString(number), number % 3 = 1 ? toString(number) : NULL, arrayMap(x -> x % 2 = 1 ? x : NULL, range(number)) FROM system.numbers LIMIT 10, 10; -DROP TABLE IF EXISTS test.nullable; +DROP TABLE IF EXISTS nullable; -CREATE TABLE test.nullable (s String, ns Nullable(String), narr Array(Nullable(UInt64))) ENGINE = StripeLog; +CREATE TABLE nullable (s String, ns Nullable(String), narr Array(Nullable(UInt64))) ENGINE = StripeLog; -INSERT INTO test.nullable SELECT toString(number), number % 3 = 1 ? toString(number) : NULL, arrayMap(x -> x % 2 = 1 ? x : NULL, range(number)) FROM system.numbers LIMIT 10; -SELECT * FROM test.nullable ORDER BY s; -SELECT s FROM test.nullable ORDER BY s; -SELECT ns FROM test.nullable ORDER BY s; -SELECT narr FROM test.nullable ORDER BY s; -SELECT s, narr FROM test.nullable ORDER BY s; +INSERT INTO nullable SELECT toString(number), number % 3 = 1 ? toString(number) : NULL, arrayMap(x -> x % 2 = 1 ? x : NULL, range(number)) FROM system.numbers LIMIT 10; +SELECT * FROM nullable ORDER BY s; +SELECT s FROM nullable ORDER BY s; +SELECT ns FROM nullable ORDER BY s; +SELECT narr FROM nullable ORDER BY s; +SELECT s, narr FROM nullable ORDER BY s; -INSERT INTO test.nullable SELECT toString(number), number % 3 = 1 ? toString(number) : NULL, arrayMap(x -> x % 2 = 1 ? x : NULL, range(number)) FROM system.numbers LIMIT 10, 10; +INSERT INTO nullable SELECT toString(number), number % 3 = 1 ? toString(number) : NULL, arrayMap(x -> x % 2 = 1 ? x : NULL, range(number)) FROM system.numbers LIMIT 10, 10; -DROP TABLE test.nullable; +DROP TABLE nullable; diff --git a/dbms/tests/queries/0_stateless/00458_merge_type_cast.sql b/dbms/tests/queries/0_stateless/00458_merge_type_cast.sql index 76195e29c24..f735d51b99a 100644 --- a/dbms/tests/queries/0_stateless/00458_merge_type_cast.sql +++ b/dbms/tests/queries/0_stateless/00458_merge_type_cast.sql @@ -65,7 +65,7 @@ DROP TABLE IF EXISTS test.merge_one_two; CREATE TABLE test.one (x Int32) ENGINE = Memory; CREATE TABLE test.two (x UInt64) ENGINE = Memory; -CREATE TABLE test.merge_one_two (x UInt64) ENGINE = Merge(test, '^one|two$'); +CREATE TABLE test.merge_one_two (x UInt64) ENGINE = Merge(test, '^one$|^two$'); INSERT INTO test.one VALUES (1); INSERT INTO test.two VALUES (1); @@ -86,7 +86,7 @@ DROP TABLE IF EXISTS test.merge_one_two; CREATE TABLE test.one (x String) ENGINE = Memory; CREATE TABLE test.two (x FixedString(16)) ENGINE = Memory; -CREATE TABLE test.merge_one_two (x String) ENGINE = Merge(test, '^one|two$'); +CREATE TABLE test.merge_one_two (x String) ENGINE = Merge(test, '^one$|^two$'); INSERT INTO test.one VALUES ('1'); INSERT INTO test.two VALUES ('1'); @@ -102,7 +102,7 @@ DROP TABLE IF EXISTS test.merge_one_two; CREATE TABLE test.one (x DateTime) ENGINE = Memory; CREATE TABLE test.two (x UInt64) ENGINE = Memory; -CREATE TABLE test.merge_one_two (x UInt64) ENGINE = Merge(test, '^one|two$'); +CREATE TABLE test.merge_one_two (x UInt64) ENGINE = Merge(test, '^one$|^two$'); INSERT INTO test.one VALUES (1); INSERT INTO test.two VALUES (1); @@ -118,7 +118,7 @@ DROP TABLE IF EXISTS test.merge_one_two; CREATE TABLE test.one (x Array(UInt32), z String DEFAULT '', y Array(UInt32)) ENGINE = Memory; CREATE TABLE test.two (x Array(UInt64), z String DEFAULT '', y Array(UInt64)) ENGINE = Memory; -CREATE TABLE test.merge_one_two (x Array(UInt64), z String, y Array(UInt64)) ENGINE = Merge(test, '^one|two$'); +CREATE TABLE test.merge_one_two (x Array(UInt64), z String, y Array(UInt64)) ENGINE = Merge(test, '^one$|^two$'); INSERT INTO test.one (x, y) VALUES ([1], [0]); INSERT INTO test.two (x, y) VALUES ([1], [0]); diff --git a/dbms/tests/queries/0_stateless/00462_json_true_false_literals.sql b/dbms/tests/queries/0_stateless/00462_json_true_false_literals.sql index 1906ac6ebff..37cfe8f4cda 100644 --- a/dbms/tests/queries/0_stateless/00462_json_true_false_literals.sql +++ b/dbms/tests/queries/0_stateless/00462_json_true_false_literals.sql @@ -1,6 +1,6 @@ -DROP TABLE IF EXISTS test.json; -CREATE TABLE test.json (x UInt8, title String) ENGINE = Memory; -INSERT INTO test.json FORMAT JSONEachRow {"x": true, "title": "true"}, {"x": false, "title": "false"}, {"x": 0, "title": "0"}, {"x": 1, "title": "1"} +DROP TABLE IF EXISTS json; +CREATE TABLE json (x UInt8, title String) ENGINE = Memory; +INSERT INTO json FORMAT JSONEachRow {"x": true, "title": "true"}, {"x": false, "title": "false"}, {"x": 0, "title": "0"}, {"x": 1, "title": "1"} -SELECT * FROM test.json ORDER BY title; -DROP TABLE IF EXISTS test.json; +SELECT * FROM json ORDER BY title; +DROP TABLE IF EXISTS json; diff --git a/dbms/tests/queries/0_stateless/00465_nullable_default.sql b/dbms/tests/queries/0_stateless/00465_nullable_default.sql index 357b56207a4..e3b764c4a5a 100644 --- a/dbms/tests/queries/0_stateless/00465_nullable_default.sql +++ b/dbms/tests/queries/0_stateless/00465_nullable_default.sql @@ -1,5 +1,5 @@ -DROP TABLE IF EXISTS test.nullable; -CREATE TABLE test.nullable (id Nullable(UInt32), cat String) ENGINE = Log; -INSERT INTO test.nullable (cat) VALUES ('test'); -SELECT * FROM test.nullable; -DROP TABLE test.nullable; +DROP TABLE IF EXISTS nullable; +CREATE TABLE nullable (id Nullable(UInt32), cat String) ENGINE = Log; +INSERT INTO nullable (cat) VALUES ('test'); +SELECT * FROM nullable; +DROP TABLE nullable; diff --git a/dbms/tests/queries/0_stateless/00467_qualified_names.sql b/dbms/tests/queries/0_stateless/00467_qualified_names.sql index 02464847053..d9ab11f3916 100644 --- a/dbms/tests/queries/0_stateless/00467_qualified_names.sql +++ b/dbms/tests/queries/0_stateless/00467_qualified_names.sql @@ -24,11 +24,11 @@ SELECT system.one.* FROM one; SELECT system.one.dummy FROM `one` AS `t`; SELECT system.one.* FROM one AS `t`; -DROP TABLE IF EXISTS test.nested; -CREATE TABLE test.nested (nest Nested(a UInt8, b String)) ENGINE = Memory; -INSERT INTO test.nested VALUES ([1, 2], ['hello', 'world']); -SELECT nest.a, nest.b, nested.`nest`.`a`, test.nested.nest.b, t.nest.a, t.nest.b, t.* FROM test.nested AS t; -DROP TABLE test.nested; +DROP TABLE IF EXISTS nested; +CREATE TABLE nested (nest Nested(a UInt8, b String)) ENGINE = Memory; +INSERT INTO nested VALUES ([1, 2], ['hello', 'world']); +SELECT nest.a, nest.b, nested.`nest`.`a`, nested.nest.b, t.nest.a, t.nest.b, t.* FROM nested AS t; +DROP TABLE nested; SELECT number FROM numbers(2); SELECT t.number FROM numbers(2) t; diff --git a/dbms/tests/queries/0_stateless/00468_array_join_multiple_arrays_and_use_original_column.sql b/dbms/tests/queries/0_stateless/00468_array_join_multiple_arrays_and_use_original_column.sql index d51113d180b..9ccf647aa11 100644 --- a/dbms/tests/queries/0_stateless/00468_array_join_multiple_arrays_and_use_original_column.sql +++ b/dbms/tests/queries/0_stateless/00468_array_join_multiple_arrays_and_use_original_column.sql @@ -1,12 +1,12 @@ -DROP TABLE IF EXISTS test.nested; -CREATE TABLE test.nested (nest Nested(x UInt8, y UInt8)) ENGINE = Memory; -INSERT INTO test.nested VALUES ([1, 2, 3], [4, 5, 6]); +DROP TABLE IF EXISTS nested; +CREATE TABLE nested (nest Nested(x UInt8, y UInt8)) ENGINE = Memory; +INSERT INTO nested VALUES ([1, 2, 3], [4, 5, 6]); -SELECT nx FROM test.nested ARRAY JOIN nest.x AS nx, nest.y AS ny WHERE notEmpty(nest.y); -SELECT 1 FROM test.nested ARRAY JOIN nest.x AS nx, nest.y AS ny WHERE notEmpty(nest.y); -SELECT nx, ny FROM test.nested ARRAY JOIN nest.x AS nx, nest.y AS ny WHERE notEmpty(nest.y); -SELECT nx FROM test.nested ARRAY JOIN nest.x AS nx, nest.y AS ny WHERE notEmpty(nest.x); -SELECT nx, nest.y FROM test.nested ARRAY JOIN nest.x AS nx, nest.y AS ny; -SELECT nx, ny, nest.x, nest.y FROM test.nested ARRAY JOIN nest.x AS nx, nest.y AS ny; +SELECT nx FROM nested ARRAY JOIN nest.x AS nx, nest.y AS ny WHERE notEmpty(nest.y); +SELECT 1 FROM nested ARRAY JOIN nest.x AS nx, nest.y AS ny WHERE notEmpty(nest.y); +SELECT nx, ny FROM nested ARRAY JOIN nest.x AS nx, nest.y AS ny WHERE notEmpty(nest.y); +SELECT nx FROM nested ARRAY JOIN nest.x AS nx, nest.y AS ny WHERE notEmpty(nest.x); +SELECT nx, nest.y FROM nested ARRAY JOIN nest.x AS nx, nest.y AS ny; +SELECT nx, ny, nest.x, nest.y FROM nested ARRAY JOIN nest.x AS nx, nest.y AS ny; -DROP TABLE test.nested; +DROP TABLE nested; diff --git a/dbms/tests/queries/0_stateless/00469_comparison_of_strings_containing_null_char.sql b/dbms/tests/queries/0_stateless/00469_comparison_of_strings_containing_null_char.sql index e3725274c4e..d5c253705ad 100644 --- a/dbms/tests/queries/0_stateless/00469_comparison_of_strings_containing_null_char.sql +++ b/dbms/tests/queries/0_stateless/00469_comparison_of_strings_containing_null_char.sql @@ -4,30 +4,30 @@ SELECT 'ab\0c' < 'ab\0d', 'ab\0c' > 'ab\0d'; SELECT 'a' < 'a\0b', 'a' > 'a\0b'; SELECT 'a\0\0\0\0' < 'a\0\0\0', 'a\0\0\0\0' > 'a\0\0\0'; -DROP TABLE IF EXISTS test.strings; -CREATE TABLE test.strings(x String, y String) ENGINE = TinyLog; +DROP TABLE IF EXISTS strings; +CREATE TABLE strings(x String, y String) ENGINE = TinyLog; -INSERT INTO test.strings VALUES +INSERT INTO strings VALUES ('abcde\0', 'abcde'), ('aa\0a', 'aa\0b'), ('aa', 'aa\0'), ('a\0\0\0\0', 'a\0\0\0'), ('a\0\0', 'a\0'), ('a', 'a'); SELECT '**** vector-vector comparisons ****'; -SELECT x < y, x > y FROM test.strings; +SELECT x < y, x > y FROM strings; SELECT '**** vector-constant comparisons ****'; -SELECT x < 'aa', x > 'aa' FROM test.strings; +SELECT x < 'aa', x > 'aa' FROM strings; SELECT '****'; -SELECT x < 'a\0', x > 'a\0' FROM test.strings; +SELECT x < 'a\0', x > 'a\0' FROM strings; SELECT '**** single-column sort ****'; -- Uses ColumnString::getPermutation() -SELECT * FROM test.strings ORDER BY x; +SELECT * FROM strings ORDER BY x; SELECT '**** multi-column sort ****'; -- Uses ColumnString::compareAt() -SELECT * FROM test.strings ORDER BY x, y; +SELECT * FROM strings ORDER BY x, y; -DROP TABLE test.strings; +DROP TABLE strings; diff --git a/dbms/tests/queries/0_stateless/00472_create_view_if_not_exists.sql b/dbms/tests/queries/0_stateless/00472_create_view_if_not_exists.sql index 826af849293..bb25cf66607 100644 --- a/dbms/tests/queries/0_stateless/00472_create_view_if_not_exists.sql +++ b/dbms/tests/queries/0_stateless/00472_create_view_if_not_exists.sql @@ -1,9 +1,9 @@ -DROP TABLE IF EXISTS test.t; -DROP TABLE IF EXISTS test.mv; -DROP TABLE IF EXISTS test.`.inner.mv`; +DROP TABLE IF EXISTS t; +DROP TABLE IF EXISTS mv; +DROP TABLE IF EXISTS `.inner.mv`; -CREATE TABLE test.t (x UInt8) ENGINE = Null; -CREATE VIEW IF NOT EXISTS test.mv AS SELECT * FROM test.t; +CREATE TABLE t (x UInt8) ENGINE = Null; +CREATE VIEW IF NOT EXISTS mv AS SELECT * FROM t; -DROP TABLE test.t; -DROP TABLE test.mv; +DROP TABLE t; +DROP TABLE mv; diff --git a/dbms/tests/queries/0_stateless/00475_in_join_db_table.sql b/dbms/tests/queries/0_stateless/00475_in_join_db_table.sql index ed7058bfcb4..3e5a5237468 100644 --- a/dbms/tests/queries/0_stateless/00475_in_join_db_table.sql +++ b/dbms/tests/queries/0_stateless/00475_in_join_db_table.sql @@ -1,23 +1,23 @@ -DROP TABLE IF EXISTS test.set; -CREATE TABLE test.set (x String) ENGINE = Memory; -INSERT INTO test.set VALUES ('hello'); -SELECT (arrayJoin(['hello', 'world']) AS s) IN test.set, s; +DROP TABLE IF EXISTS set; +CREATE TABLE set (x String) ENGINE = Memory; +INSERT INTO set VALUES ('hello'); +SELECT (arrayJoin(['hello', 'world']) AS s) IN set, s; -DROP TABLE test.set; -CREATE TABLE test.set (x String) ENGINE = Set; -INSERT INTO test.set VALUES ('hello'); -SELECT (arrayJoin(['hello', 'world']) AS s) IN test.set, s; +DROP TABLE set; +CREATE TABLE set (x String) ENGINE = Set; +INSERT INTO set VALUES ('hello'); +SELECT (arrayJoin(['hello', 'world']) AS s) IN set, s; -DROP TABLE test.set; +DROP TABLE set; -DROP TABLE IF EXISTS test.join; -CREATE TABLE test.join (k UInt8, x String) ENGINE = Memory; -INSERT INTO test.join VALUES (1, 'hello'); -SELECT k, x FROM (SELECT arrayJoin([1, 2]) AS k) ANY LEFT JOIN test.join USING k; +DROP TABLE IF EXISTS join; +CREATE TABLE join (k UInt8, x String) ENGINE = Memory; +INSERT INTO join VALUES (1, 'hello'); +SELECT k, x FROM (SELECT arrayJoin([1, 2]) AS k) ANY LEFT JOIN join USING k; -DROP TABLE test.join; -CREATE TABLE test.join (k UInt8, x String) ENGINE = Join(ANY, LEFT, k); -INSERT INTO test.join VALUES (1, 'hello'); -SELECT k, x FROM (SELECT arrayJoin([1, 2]) AS k) ANY LEFT JOIN test.join USING k; +DROP TABLE join; +CREATE TABLE join (k UInt8, x String) ENGINE = Join(ANY, LEFT, k); +INSERT INTO join VALUES (1, 'hello'); +SELECT k, x FROM (SELECT arrayJoin([1, 2]) AS k) ANY LEFT JOIN join USING k; -DROP TABLE test.join; +DROP TABLE join; diff --git a/dbms/tests/queries/0_stateless/00481_create_view_for_null.sql b/dbms/tests/queries/0_stateless/00481_create_view_for_null.sql index eea00048e51..a9731c78853 100644 --- a/dbms/tests/queries/0_stateless/00481_create_view_for_null.sql +++ b/dbms/tests/queries/0_stateless/00481_create_view_for_null.sql @@ -1,12 +1,12 @@ -DROP TABLE IF EXISTS test.null; -DROP TABLE IF EXISTS test.null_view; +DROP TABLE IF EXISTS null; +DROP TABLE IF EXISTS null_view; -CREATE TABLE test.null (x UInt8) ENGINE = Null; -CREATE VIEW test.null_view AS SELECT * FROM test.null; -INSERT INTO test.null VALUES (1); +CREATE TABLE null (x UInt8) ENGINE = Null; +CREATE VIEW null_view AS SELECT * FROM null; +INSERT INTO null VALUES (1); -SELECT * FROM test.null; -SELECT * FROM test.null_view; +SELECT * FROM null; +SELECT * FROM null_view; -DROP TABLE test.null; -DROP TABLE test.null_view; +DROP TABLE null; +DROP TABLE null_view; diff --git a/dbms/tests/queries/0_stateless/00481_reading_from_last_granula.sql b/dbms/tests/queries/0_stateless/00481_reading_from_last_granula.sql index a38f6c86b7c..58a206854e6 100644 --- a/dbms/tests/queries/0_stateless/00481_reading_from_last_granula.sql +++ b/dbms/tests/queries/0_stateless/00481_reading_from_last_granula.sql @@ -1,7 +1,7 @@ -DROP TABLE IF EXISTS test.tab; -CREATE TABLE test.tab (date Date, value UInt64, s String, m FixedString(16)) ENGINE = MergeTree(date, (date, value), 8); -INSERT INTO test.tab SELECT today() as date, number as value, '' as s, toFixedString('', 16) as m from system.numbers limit 42; +DROP TABLE IF EXISTS tab; +CREATE TABLE tab (date Date, value UInt64, s String, m FixedString(16)) ENGINE = MergeTree(date, (date, value), 8); +INSERT INTO tab SELECT today() as date, number as value, '' as s, toFixedString('', 16) as m from system.numbers limit 42; SET preferred_max_column_in_block_size_bytes = 32; -SELECT blockSize(), * from test.tab format Null; +SELECT blockSize(), * from tab format Null; SELECT 0; diff --git a/dbms/tests/queries/0_stateless/00483_reading_from_array_structure.sql b/dbms/tests/queries/0_stateless/00483_reading_from_array_structure.sql index 2db72d4d474..20cd1bd60e0 100644 --- a/dbms/tests/queries/0_stateless/00483_reading_from_array_structure.sql +++ b/dbms/tests/queries/0_stateless/00483_reading_from_array_structure.sql @@ -1,12 +1,13 @@ -drop table if exists test.table; -create table test.table (date Date, `Struct.Key1` Array(UInt64), `Struct.Key2` Array(UInt64), padding FixedString(16)) engine = MergeTree(date, (date), 16); -insert into test.table select today() as date, [number], [number + 1], toFixedString('', 16) from system.numbers limit 100; +drop table if exists table; +create table `table` (date Date, `Struct.Key1` Array(UInt64), `Struct.Key2` Array(UInt64), padding FixedString(16)) engine = MergeTree(date, (date), 16); +insert into `table` select today() as date, [number], [number + 1], toFixedString('', 16) from system.numbers limit 100; set preferred_max_column_in_block_size_bytes = 96; -select blockSize(), * from test.table prewhere `Struct.Key1`[1] = 19 and `Struct.Key2`[1] >= 0 format Null; +select blockSize(), * from `table` prewhere `Struct.Key1`[1] = 19 and `Struct.Key2`[1] >= 0 format Null; -drop table if exists test.table; -create table test.table (date Date, `Struct.Key1` Array(UInt64), `Struct.Key2` Array(UInt64), padding FixedString(16), x UInt64) engine = MergeTree(date, (date), 8); -insert into test.table select today() as date, [number], [number + 1], toFixedString('', 16), number from system.numbers limit 100; +drop table if exists `table`; +create table `table` (date Date, `Struct.Key1` Array(UInt64), `Struct.Key2` Array(UInt64), padding FixedString(16), x UInt64) engine = MergeTree(date, (date), 8); +insert into `table` select today() as date, [number], [number + 1], toFixedString('', 16), number from system.numbers limit 100; set preferred_max_column_in_block_size_bytes = 112; -select blockSize(), * from test.table prewhere x = 7 format Null; +select blockSize(), * from table prewhere x = 7 format Null; +drop table if exists `table`; diff --git a/dbms/tests/queries/0_stateless/00484_preferred_max_column_in_block_size_bytes.sql b/dbms/tests/queries/0_stateless/00484_preferred_max_column_in_block_size_bytes.sql index d7eb04704ca..80a91f38ab6 100644 --- a/dbms/tests/queries/0_stateless/00484_preferred_max_column_in_block_size_bytes.sql +++ b/dbms/tests/queries/0_stateless/00484_preferred_max_column_in_block_size_bytes.sql @@ -1,34 +1,34 @@ -drop table if exists test.tab; -create table test.tab (date Date, x UInt64, s FixedString(128)) engine = MergeTree(date, (date, x), 8192); -insert into test.tab select today(), number, toFixedString('', 128) from system.numbers limit 8192; +drop table if exists tab; +create table tab (date Date, x UInt64, s FixedString(128)) engine = MergeTree(date, (date, x), 8192); +insert into tab select today(), number, toFixedString('', 128) from system.numbers limit 8192; set preferred_block_size_bytes = 2000000; set preferred_max_column_in_block_size_bytes = 0; -select max(blockSize()), min(blockSize()), any(ignore(*)) from test.tab; +select max(blockSize()), min(blockSize()), any(ignore(*)) from tab; set preferred_max_column_in_block_size_bytes = 128; -select max(blockSize()), min(blockSize()), any(ignore(*)) from test.tab; +select max(blockSize()), min(blockSize()), any(ignore(*)) from tab; set preferred_max_column_in_block_size_bytes = 256; -select max(blockSize()), min(blockSize()), any(ignore(*)) from test.tab; +select max(blockSize()), min(blockSize()), any(ignore(*)) from tab; set preferred_max_column_in_block_size_bytes = 2097152; -select max(blockSize()), min(blockSize()), any(ignore(*)) from test.tab; +select max(blockSize()), min(blockSize()), any(ignore(*)) from tab; set preferred_max_column_in_block_size_bytes = 4194304; -select max(blockSize()), min(blockSize()), any(ignore(*)) from test.tab; +select max(blockSize()), min(blockSize()), any(ignore(*)) from tab; -drop table if exists test.tab; -create table test.tab (date Date, x UInt64, s FixedString(128)) engine = MergeTree(date, (date, x), 32); -insert into test.tab select today(), number, toFixedString('', 128) from system.numbers limit 47; +drop table if exists tab; +create table tab (date Date, x UInt64, s FixedString(128)) engine = MergeTree(date, (date, x), 32); +insert into tab select today(), number, toFixedString('', 128) from system.numbers limit 47; set preferred_max_column_in_block_size_bytes = 1152; -select blockSize(), * from test.tab where x = 1 or x > 36 format Null; +select blockSize(), * from tab where x = 1 or x > 36 format Null; -drop table if exists test.tab; -create table test.tab (date Date, x UInt64, s FixedString(128)) engine = MergeTree(date, (date, x), 8192); -insert into test.tab select today(), number, toFixedString('', 128) from system.numbers limit 10; +drop table if exists tab; +create table tab (date Date, x UInt64, s FixedString(128)) engine = MergeTree(date, (date, x), 8192); +insert into tab select today(), number, toFixedString('', 128) from system.numbers limit 10; set preferred_max_column_in_block_size_bytes = 128; -select s from test.tab where s == '' format Null; +select s from tab where s == '' format Null; -drop table if exists test.tab; -create table test.tab (date Date, x UInt64, s String) engine = MergeTree(date, (date, x), 8192); -insert into test.tab select today(), number, 'abc' from system.numbers limit 81920; +drop table if exists tab; +create table tab (date Date, x UInt64, s String) engine = MergeTree(date, (date, x), 8192); +insert into tab select today(), number, 'abc' from system.numbers limit 81920; set preferred_block_size_bytes = 0; -select count(*) from test.tab prewhere s != 'abc' format Null; -select count(*) from test.tab prewhere s = 'abc' format Null; +select count(*) from tab prewhere s != 'abc' format Null; +select count(*) from tab prewhere s = 'abc' format Null; diff --git a/dbms/tests/queries/0_stateless/00485_http_insert_format.sh b/dbms/tests/queries/0_stateless/00485_http_insert_format.sh index b62dbb3027e..c06155c3a38 100755 --- a/dbms/tests/queries/0_stateless/00485_http_insert_format.sh +++ b/dbms/tests/queries/0_stateless/00485_http_insert_format.sh @@ -3,15 +3,15 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.format" -$CLICKHOUSE_CLIENT --query="CREATE TABLE test.format (s String, x FixedString(3)) ENGINE = Memory" +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS format" +$CLICKHOUSE_CLIENT --query="CREATE TABLE format (s String, x FixedString(3)) ENGINE = Memory" -echo -ne '\tABC\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+test.format+FORMAT+TabSeparated" --data-binary @- -echo -ne 'INSERT INTO test.format FORMAT TabSeparated\n\tDEF\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" --data-binary @- -echo -ne 'INSERT INTO test.format FORMAT TabSeparated hello\tGHI\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" --data-binary @- -echo -ne 'INSERT INTO test.format FORMAT TabSeparated\r\n\tJKL\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" --data-binary @- -echo -ne 'INSERT INTO test.format FORMAT TabSeparated \t\r\n\tMNO\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" --data-binary @- -echo -ne 'INSERT INTO test.format FORMAT TabSeparated\t\t\thello\tPQR\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}" --data-binary @- +echo -ne '\tABC\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}&query=INSERT+INTO+format+FORMAT+TabSeparated" --data-binary @- +echo -ne 'INSERT INTO format FORMAT TabSeparated\n\tDEF\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}" --data-binary @- +echo -ne 'INSERT INTO format FORMAT TabSeparated hello\tGHI\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}" --data-binary @- +echo -ne 'INSERT INTO format FORMAT TabSeparated\r\n\tJKL\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}" --data-binary @- +echo -ne 'INSERT INTO format FORMAT TabSeparated \t\r\n\tMNO\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}" --data-binary @- +echo -ne 'INSERT INTO format FORMAT TabSeparated\t\t\thello\tPQR\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}" --data-binary @- -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.format ORDER BY s, x FORMAT JSONEachRow" -$CLICKHOUSE_CLIENT --query="DROP TABLE test.format" +$CLICKHOUSE_CLIENT --query="SELECT * FROM format ORDER BY s, x FORMAT JSONEachRow" +$CLICKHOUSE_CLIENT --query="DROP TABLE format" diff --git a/dbms/tests/queries/0_stateless/00488_non_ascii_column_names.sql b/dbms/tests/queries/0_stateless/00488_non_ascii_column_names.sql index 3a0d0542c36..ac84f020eca 100644 --- a/dbms/tests/queries/0_stateless/00488_non_ascii_column_names.sql +++ b/dbms/tests/queries/0_stateless/00488_non_ascii_column_names.sql @@ -1,6 +1,6 @@ -DROP TABLE IF EXISTS test.non_ascii; -CREATE TABLE test.non_ascii (`привет` String, `мир` String) ENGINE = TinyLog; -INSERT INTO test.non_ascii VALUES ('hello', 'world'); -SELECT `привет` FROM test.non_ascii; -SELECT * FROM test.non_ascii; -DROP TABLE test.non_ascii; +DROP TABLE IF EXISTS non_ascii; +CREATE TABLE non_ascii (`привет` String, `мир` String) ENGINE = TinyLog; +INSERT INTO non_ascii VALUES ('hello', 'world'); +SELECT `привет` FROM non_ascii; +SELECT * FROM non_ascii; +DROP TABLE non_ascii; diff --git a/dbms/tests/queries/0_stateless/00489_pk_subexpression.sql b/dbms/tests/queries/0_stateless/00489_pk_subexpression.sql index 4d53c7e29d9..59f310a7605 100644 --- a/dbms/tests/queries/0_stateless/00489_pk_subexpression.sql +++ b/dbms/tests/queries/0_stateless/00489_pk_subexpression.sql @@ -1,29 +1,29 @@ -DROP TABLE IF EXISTS test.pk; +DROP TABLE IF EXISTS pk; -CREATE TABLE test.pk (d Date DEFAULT '2000-01-01', x DateTime, y UInt64, z UInt64) ENGINE = MergeTree(d, (toStartOfMinute(x), y, z), 1); +CREATE TABLE pk (d Date DEFAULT '2000-01-01', x DateTime, y UInt64, z UInt64) ENGINE = MergeTree(d, (toStartOfMinute(x), y, z), 1); -INSERT INTO test.pk (x, y, z) VALUES (1, 11, 1235), (2, 11, 4395), (3, 22, 3545), (4, 22, 6984), (5, 33, 4596), (61, 11, 4563), (62, 11, 4578), (63, 11, 3572), (64, 22, 5786), (65, 22, 5786), (66, 22, 2791), (67, 22, 2791), (121, 33, 2791), (122, 33, 2791), (123, 33, 1235), (124, 44, 4935), (125, 44, 4578), (126, 55, 5786), (127, 55, 2791), (128, 55, 1235); +INSERT INTO pk (x, y, z) VALUES (1, 11, 1235), (2, 11, 4395), (3, 22, 3545), (4, 22, 6984), (5, 33, 4596), (61, 11, 4563), (62, 11, 4578), (63, 11, 3572), (64, 22, 5786), (65, 22, 5786), (66, 22, 2791), (67, 22, 2791), (121, 33, 2791), (122, 33, 2791), (123, 33, 1235), (124, 44, 4935), (125, 44, 4578), (126, 55, 5786), (127, 55, 2791), (128, 55, 1235); SET min_insert_block_size_rows = 0, min_insert_block_size_bytes = 0; SET max_block_size = 1; -- Test inferred limit SET max_rows_to_read = 5; -SELECT toUInt32(x), y, z FROM test.pk WHERE x BETWEEN toDateTime(0) AND toDateTime(59); +SELECT toUInt32(x), y, z FROM pk WHERE x BETWEEN toDateTime(0) AND toDateTime(59); SET max_rows_to_read = 9; -SELECT toUInt32(x), y, z FROM test.pk WHERE x BETWEEN toDateTime(120) AND toDateTime(240); +SELECT toUInt32(x), y, z FROM pk WHERE x BETWEEN toDateTime(120) AND toDateTime(240); -- Index is coarse, cannot read single row SET max_rows_to_read = 5; -SELECT toUInt32(x), y, z FROM test.pk WHERE x = toDateTime(1); +SELECT toUInt32(x), y, z FROM pk WHERE x = toDateTime(1); -- Index works on interval 00:01:00 - 00:01:59 SET max_rows_to_read = 4; -SELECT toUInt32(x), y, z FROM test.pk WHERE x BETWEEN toDateTime(60) AND toDateTime(119) AND y = 11; +SELECT toUInt32(x), y, z FROM pk WHERE x BETWEEN toDateTime(60) AND toDateTime(119) AND y = 11; -- Cannot read less rows as PK is coarser on interval 00:01:00 - 00:02:00 SET max_rows_to_read = 5; -SELECT toUInt32(x), y, z FROM test.pk WHERE x BETWEEN toDateTime(60) AND toDateTime(120) AND y = 11; +SELECT toUInt32(x), y, z FROM pk WHERE x BETWEEN toDateTime(60) AND toDateTime(120) AND y = 11; -DROP TABLE test.pk; +DROP TABLE pk; diff --git a/dbms/tests/queries/0_stateless/00495_reading_const_zero_column.sql b/dbms/tests/queries/0_stateless/00495_reading_const_zero_column.sql index ad94b9c06b3..da529c5b9b7 100644 --- a/dbms/tests/queries/0_stateless/00495_reading_const_zero_column.sql +++ b/dbms/tests/queries/0_stateless/00495_reading_const_zero_column.sql @@ -3,3 +3,4 @@ create table one_table (date Date, one UInt64) engine = MergeTree(date, (date, o insert into one_table select today(), toUInt64(1) from system.numbers limit 100000; SET preferred_block_size_bytes = 8192; select isNull(one) from one_table where isNull(one); +drop table if exists one_table; diff --git a/dbms/tests/queries/0_stateless/00497_whitespaces_in_insert.sh b/dbms/tests/queries/0_stateless/00497_whitespaces_in_insert.sh index c93f78825c8..9fe40e8863f 100755 --- a/dbms/tests/queries/0_stateless/00497_whitespaces_in_insert.sh +++ b/dbms/tests/queries/0_stateless/00497_whitespaces_in_insert.sh @@ -3,29 +3,29 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.ws"; -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.ws (i UInt8) ENGINE = Memory"; +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS ws"; +$CLICKHOUSE_CLIENT -q "CREATE TABLE ws (i UInt8) ENGINE = Memory"; -$CLICKHOUSE_CLIENT -q "INSERT INTO test.ws FORMAT RowBinary ;"; -$CLICKHOUSE_CLIENT -q "INSERT INTO test.ws FORMAT RowBinary ; "; -$CLICKHOUSE_CLIENT -q "INSERT INTO test.ws FORMAT RowBinary +$CLICKHOUSE_CLIENT -q "INSERT INTO ws FORMAT RowBinary ;"; +$CLICKHOUSE_CLIENT -q "INSERT INTO ws FORMAT RowBinary ; "; +$CLICKHOUSE_CLIENT -q "INSERT INTO ws FORMAT RowBinary ; "; -echo -n ";" | $CLICKHOUSE_CLIENT -q "INSERT INTO test.ws FORMAT RowBinary"; +echo -n ";" | $CLICKHOUSE_CLIENT -q "INSERT INTO ws FORMAT RowBinary"; -$CLICKHOUSE_CLIENT --max_threads=1 -q "SELECT * FROM test.ws"; -$CLICKHOUSE_CLIENT -q "DROP TABLE test.ws"; +$CLICKHOUSE_CLIENT --max_threads=1 -q "SELECT * FROM ws"; +$CLICKHOUSE_CLIENT -q "DROP TABLE ws"; $CLICKHOUSE_CLIENT -q "SELECT ''"; -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.ws (s String) ENGINE = Memory"; -$CLICKHOUSE_CLIENT -q "INSERT INTO test.ws FORMAT TSV ; +$CLICKHOUSE_CLIENT -q "CREATE TABLE ws (s String) ENGINE = Memory"; +$CLICKHOUSE_CLIENT -q "INSERT INTO ws FORMAT TSV ; "; -echo ";" | $CLICKHOUSE_CLIENT -q "INSERT INTO test.ws FORMAT TSV" -if $CLICKHOUSE_CLIENT -q "INSERT INTO test.ws FORMAT TSV;" 1>/dev/null 2>/dev/null; then +echo ";" | $CLICKHOUSE_CLIENT -q "INSERT INTO ws FORMAT TSV" +if $CLICKHOUSE_CLIENT -q "INSERT INTO ws FORMAT TSV;" 1>/dev/null 2>/dev/null; then echo ERROR; fi -$CLICKHOUSE_CLIENT --max_threads=1 -q "SELECT * FROM test.ws"; +$CLICKHOUSE_CLIENT --max_threads=1 -q "SELECT * FROM ws"; -$CLICKHOUSE_CLIENT -q "DROP TABLE test.ws"; +$CLICKHOUSE_CLIENT -q "DROP TABLE ws"; diff --git a/dbms/tests/queries/0_stateless/00498_array_functions_concat_slice_push_pop.sql b/dbms/tests/queries/0_stateless/00498_array_functions_concat_slice_push_pop.sql index dd0e85639ce..8f2f0811193 100644 --- a/dbms/tests/queries/0_stateless/00498_array_functions_concat_slice_push_pop.sql +++ b/dbms/tests/queries/0_stateless/00498_array_functions_concat_slice_push_pop.sql @@ -73,296 +73,298 @@ select arrayPopFront([1, 2, 3]); select arrayPopFront([0.1, 0.2, 0.3]); select arrayPopFront(['a', 'b', 'c']); -DROP TABLE if exists test.array_functions; +DROP TABLE if exists array_functions; select ''; select 'table'; -create table test.array_functions (arr1 Array(Int8), arr2 Array(Int8), o Int8, no Nullable(Int8), l Int8, nl Nullable(Int8)) engine = TinyLog; -insert into test.array_functions values ([], [], 1, Null, 1, Null), ([], [1], 1, Null, 1, Null), ([1, 2, 3, 4, 5], [6, 7], 2, Null, 1, Null), ([1, 2, 3, 4, 5, 6, 7], [8], 2, 2, 3, 3), ([1, 2, 3, 4, 5, 6, 7], [], 2, Null, -3, -3), ([1, 2, 3, 4, 5, 6, 7], [], 2, Null, -3, Null), ([1, 2, 3, 4, 5, 6, 7], [], -5, -5, 4, 4), ([1, 2, 3, 4, 5, 6, 7], [], -5, -5, -3, -3); +create table array_functions (arr1 Array(Int8), arr2 Array(Int8), o Int8, no Nullable(Int8), l Int8, nl Nullable(Int8)) engine = TinyLog; +insert into array_functions values ([], [], 1, Null, 1, Null), ([], [1], 1, Null, 1, Null), ([1, 2, 3, 4, 5], [6, 7], 2, Null, 1, Null), ([1, 2, 3, 4, 5, 6, 7], [8], 2, 2, 3, 3), ([1, 2, 3, 4, 5, 6, 7], [], 2, Null, -3, -3), ([1, 2, 3, 4, 5, 6, 7], [], 2, Null, -3, Null), ([1, 2, 3, 4, 5, 6, 7], [], -5, -5, 4, 4), ([1, 2, 3, 4, 5, 6, 7], [], -5, -5, -3, -3); -select * from test.array_functions; +select * from array_functions; select 'concat arr1, arr2'; -select arrayConcat(arr1, arr2), arr1, arr2 from test.array_functions; +select arrayConcat(arr1, arr2), arr1, arr2 from array_functions; select 'concat arr1, arr2, arr1'; -select arrayConcat(arr1, arr2, arr1), arr1, arr2 from test.array_functions; +select arrayConcat(arr1, arr2, arr1), arr1, arr2 from array_functions; select 'arraySlice(arr1, o, l)'; -select arr1, o, l, arraySlice(arr1, o, l) from test.array_functions; +select arr1, o, l, arraySlice(arr1, o, l) from array_functions; select 'arraySlice(arr1, no, nl)'; -select arr1, no, nl, arraySlice(arr1, no, nl) from test.array_functions; +select arr1, no, nl, arraySlice(arr1, no, nl) from array_functions; select 'arraySlice(arr1, 2, l)'; -select arr1, 2, l, arraySlice(arr1, 2, l) from test.array_functions; +select arr1, 2, l, arraySlice(arr1, 2, l) from array_functions; select 'arraySlice(arr1, o, 2)'; -select arr1, o, 2, arraySlice(arr1, o, 2) from test.array_functions; +select arr1, o, 2, arraySlice(arr1, o, 2) from array_functions; select 'arraySlice(arr1, 2, nl)'; -select arr1, 2, nl, arraySlice(arr1, 2, nl) from test.array_functions; +select arr1, 2, nl, arraySlice(arr1, 2, nl) from array_functions; select 'arraySlice(arr1, no, 2)'; -select arr1, no, 2, arraySlice(arr1, no, 2) from test.array_functions; +select arr1, no, 2, arraySlice(arr1, no, 2) from array_functions; select 'arraySlice(arr1, -4, l)'; -select arr1, 2, l, arraySlice(arr1, -4, l) from test.array_functions; +select arr1, 2, l, arraySlice(arr1, -4, l) from array_functions; select 'arraySlice(arr1, o, -2)'; -select arr1, o, 2, arraySlice(arr1, o, -2) from test.array_functions; +select arr1, o, 2, arraySlice(arr1, o, -2) from array_functions; select 'arraySlice(arr1, -4, nl)'; -select arr1, 2, nl, arraySlice(arr1, -4, nl) from test.array_functions; +select arr1, 2, nl, arraySlice(arr1, -4, nl) from array_functions; select 'arraySlice(arr1, no, -2)'; -select arr1, no, 2, arraySlice(arr1, no, -2) from test.array_functions; +select arr1, no, 2, arraySlice(arr1, no, -2) from array_functions; select 'arraySlice(arr1, 2, 4)'; -select arr1, 2, 4, arraySlice(arr1, 2, 4) from test.array_functions; +select arr1, 2, 4, arraySlice(arr1, 2, 4) from array_functions; select 'arraySlice(arr1, 2, -4)'; -select arr1, 2, 4, arraySlice(arr1, 2, -4) from test.array_functions; +select arr1, 2, 4, arraySlice(arr1, 2, -4) from array_functions; select 'arraySlice(arr1, -4, 2)'; -select arr1, 2, 4, arraySlice(arr1, -4, 2) from test.array_functions; +select arr1, 2, 4, arraySlice(arr1, -4, 2) from array_functions; select 'arraySlice(arr1, -4, -1)'; -select arr1, 2, 4, arraySlice(arr1, -4, -1) from test.array_functions; +select arr1, 2, 4, arraySlice(arr1, -4, -1) from array_functions; select 'arrayPushFront(arr1, 1)'; -select arr1, arrayPushFront(arr1, 1) from test.array_functions; +select arr1, arrayPushFront(arr1, 1) from array_functions; select 'arrayPushFront(arr1, 0.1)'; -select arr1, arrayPushFront(arr1, 0.1) from test.array_functions; +select arr1, arrayPushFront(arr1, 0.1) from array_functions; select 'arrayPushFront(arr1, l)'; -select arr1, arrayPushFront(arr1, l) from test.array_functions; +select arr1, arrayPushFront(arr1, l) from array_functions; select 'arrayPushFront(arr1, nl)'; -select arr1, arrayPushFront(arr1, nl) from test.array_functions; +select arr1, arrayPushFront(arr1, nl) from array_functions; select 'arrayPushFront([1, 2, 3], l)'; -select arrayPushFront([1, 2, 3], l) from test.array_functions; -select 'arrayPushFront([1, 2, 3], nl)' from test.array_functions; -select arrayPushFront([1, 2, 3], nl) from test.array_functions; +select arrayPushFront([1, 2, 3], l) from array_functions; +select 'arrayPushFront([1, 2, 3], nl)' from array_functions; +select arrayPushFront([1, 2, 3], nl) from array_functions; select 'arrayPushBack(arr1, 1)'; -select arr1, arrayPushBack(arr1, 1) from test.array_functions; +select arr1, arrayPushBack(arr1, 1) from array_functions; select 'arrayPushBack(arr1, 0.1)'; -select arr1, arrayPushBack(arr1, 0.1) from test.array_functions; +select arr1, arrayPushBack(arr1, 0.1) from array_functions; select 'arrayPushBack(arr1, l)'; -select arr1, arrayPushBack(arr1, l) from test.array_functions; +select arr1, arrayPushBack(arr1, l) from array_functions; select 'arrayPushBack(arr1, nl)'; -select arr1, arrayPushBack(arr1, nl) from test.array_functions; +select arr1, arrayPushBack(arr1, nl) from array_functions; select 'arrayPushBack([1, 2, 3], l)'; -select arrayPushBack([1, 2, 3], l) from test.array_functions; +select arrayPushBack([1, 2, 3], l) from array_functions; select 'arrayPushBack([1, 2, 3], nl)'; -select arrayPushBack([1, 2, 3], nl) from test.array_functions; +select arrayPushBack([1, 2, 3], nl) from array_functions; select 'arrayPopFront(arr1)'; -select arr1, arrayPopFront(arr1) from test.array_functions; +select arr1, arrayPopFront(arr1) from array_functions; select 'arrayPopBack(arr1)'; -select arr1, arrayPopBack(arr1) from test.array_functions; +select arr1, arrayPopBack(arr1) from array_functions; -DROP TABLE if exists test.array_functions; +DROP TABLE if exists array_functions; select ''; select 'table'; -create table test.array_functions (arr1 Array(Nullable(Int8)), arr2 Array(Nullable(Float32)), o Int8, no Nullable(Int8), l Int8, nl Nullable(Int8)) engine = TinyLog; -insert into test.array_functions values ([], [], 1, Null, 1, Null), ([], [1, Null], 1, Null, 1, Null), ([1, 2, 3, 4, 5], [6, Null], 2, Null, 1, Null), ([1, Null, 3, 4, Null, 6, 7], [8], 2, 2, 3, 3),([1, 2, 3, Null, 5, 6, 7], [Null, 1], 2, Null, -3, -3),([1, 2, 3, 4, 5, Null, 7], [1, Null], 2, Null, -3, Null), ([1, 2, 3, 4, 5, 6, 7], [1, 2], -5, -5, 4, 4),([1, Null, 3, Null, 5, 6, 7], [], -5, -5, -3, -3); +create table array_functions (arr1 Array(Nullable(Int8)), arr2 Array(Nullable(Float32)), o Int8, no Nullable(Int8), l Int8, nl Nullable(Int8)) engine = TinyLog; +insert into array_functions values ([], [], 1, Null, 1, Null), ([], [1, Null], 1, Null, 1, Null), ([1, 2, 3, 4, 5], [6, Null], 2, Null, 1, Null), ([1, Null, 3, 4, Null, 6, 7], [8], 2, 2, 3, 3),([1, 2, 3, Null, 5, 6, 7], [Null, 1], 2, Null, -3, -3),([1, 2, 3, 4, 5, Null, 7], [1, Null], 2, Null, -3, Null), ([1, 2, 3, 4, 5, 6, 7], [1, 2], -5, -5, 4, 4),([1, Null, 3, Null, 5, 6, 7], [], -5, -5, -3, -3); -select * from test.array_functions; +select * from array_functions; select 'concat arr1, arr2'; -select arrayConcat(arr1, arr2), arr1, arr2 from test.array_functions; +select arrayConcat(arr1, arr2), arr1, arr2 from array_functions; select 'concat arr1, arr2, arr1'; -select arrayConcat(arr1, arr2, arr1), arr1, arr2 from test.array_functions; +select arrayConcat(arr1, arr2, arr1), arr1, arr2 from array_functions; select 'arraySlice(arr1, o, l)'; -select arr1, o, l, arraySlice(arr1, o, l) from test.array_functions; +select arr1, o, l, arraySlice(arr1, o, l) from array_functions; select 'arraySlice(arr1, no, nl)'; -select arr1, no, nl, arraySlice(arr1, no, nl) from test.array_functions; +select arr1, no, nl, arraySlice(arr1, no, nl) from array_functions; select 'arraySlice(arr1, 2, l)'; -select arr1, 2, l, arraySlice(arr1, 2, l) from test.array_functions; +select arr1, 2, l, arraySlice(arr1, 2, l) from array_functions; select 'arraySlice(arr1, o, 2)'; -select arr1, o, 2, arraySlice(arr1, o, 2) from test.array_functions; +select arr1, o, 2, arraySlice(arr1, o, 2) from array_functions; select 'arraySlice(arr1, 2, nl)'; -select arr1, 2, nl, arraySlice(arr1, 2, nl) from test.array_functions; +select arr1, 2, nl, arraySlice(arr1, 2, nl) from array_functions; select 'arraySlice(arr1, no, 2)'; -select arr1, no, 2, arraySlice(arr1, no, 2) from test.array_functions; +select arr1, no, 2, arraySlice(arr1, no, 2) from array_functions; select 'arraySlice(arr1, -4, l)'; -select arr1, 2, l, arraySlice(arr1, -4, l) from test.array_functions; +select arr1, 2, l, arraySlice(arr1, -4, l) from array_functions; select 'arraySlice(arr1, o, -2)'; -select arr1, o, 2, arraySlice(arr1, o, -2) from test.array_functions; +select arr1, o, 2, arraySlice(arr1, o, -2) from array_functions; select 'arraySlice(arr1, -4, nl)'; -select arr1, 2, nl, arraySlice(arr1, -4, nl) from test.array_functions; +select arr1, 2, nl, arraySlice(arr1, -4, nl) from array_functions; select 'arraySlice(arr1, no, -2)'; -select arr1, no, 2, arraySlice(arr1, no, -2) from test.array_functions; +select arr1, no, 2, arraySlice(arr1, no, -2) from array_functions; select 'arraySlice(arr1, 2, 4)'; -select arr1, 2, 4, arraySlice(arr1, 2, 4) from test.array_functions; +select arr1, 2, 4, arraySlice(arr1, 2, 4) from array_functions; select 'arraySlice(arr1, 2, -4)'; -select arr1, 2, 4, arraySlice(arr1, 2, -4) from test.array_functions; +select arr1, 2, 4, arraySlice(arr1, 2, -4) from array_functions; select 'arraySlice(arr1, -4, 2)'; -select arr1, 2, 4, arraySlice(arr1, -4, 2) from test.array_functions; +select arr1, 2, 4, arraySlice(arr1, -4, 2) from array_functions; select 'arraySlice(arr1, -4, -1)'; -select arr1, 2, 4, arraySlice(arr1, -4, -1) from test.array_functions; +select arr1, 2, 4, arraySlice(arr1, -4, -1) from array_functions; select 'arrayPushFront(arr1, 1)'; -select arr1, arrayPushFront(arr1, 1) from test.array_functions; +select arr1, arrayPushFront(arr1, 1) from array_functions; select 'arrayPushFront(arr1, 0.1)'; -select arr1, arrayPushFront(arr1, 0.1) from test.array_functions; +select arr1, arrayPushFront(arr1, 0.1) from array_functions; select 'arrayPushFront(arr1, l)'; -select arr1, arrayPushFront(arr1, l) from test.array_functions; +select arr1, arrayPushFront(arr1, l) from array_functions; select 'arrayPushFront(arr1, nl)'; -select arr1, arrayPushFront(arr1, nl) from test.array_functions; +select arr1, arrayPushFront(arr1, nl) from array_functions; select 'arrayPushFront([1, 2, 3], l)'; -select arrayPushFront([1, 2, 3], l) from test.array_functions; -select 'arrayPushFront([1, 2, 3], nl)' from test.array_functions; -select arrayPushFront([1, 2, 3], nl) from test.array_functions; +select arrayPushFront([1, 2, 3], l) from array_functions; +select 'arrayPushFront([1, 2, 3], nl)' from array_functions; +select arrayPushFront([1, 2, 3], nl) from array_functions; select 'arrayPushBack(arr1, 1)'; -select arr1, arrayPushBack(arr1, 1) from test.array_functions; +select arr1, arrayPushBack(arr1, 1) from array_functions; select 'arrayPushBack(arr1, 0.1)'; -select arr1, arrayPushBack(arr1, 0.1) from test.array_functions; +select arr1, arrayPushBack(arr1, 0.1) from array_functions; select 'arrayPushBack(arr1, l)'; -select arr1, arrayPushBack(arr1, l) from test.array_functions; +select arr1, arrayPushBack(arr1, l) from array_functions; select 'arrayPushBack(arr1, nl)'; -select arr1, arrayPushBack(arr1, nl) from test.array_functions; +select arr1, arrayPushBack(arr1, nl) from array_functions; select 'arrayPushBack([1, 2, 3], l)'; -select arrayPushBack([1, 2, 3], l) from test.array_functions; +select arrayPushBack([1, 2, 3], l) from array_functions; select 'arrayPushBack([1, 2, 3], nl)'; -select arrayPushBack([1, 2, 3], nl) from test.array_functions; +select arrayPushBack([1, 2, 3], nl) from array_functions; select 'arrayPopFront(arr1)'; -select arr1, arrayPopFront(arr1) from test.array_functions; +select arr1, arrayPopFront(arr1) from array_functions; select 'arrayPopBack(arr1)'; -select arr1, arrayPopBack(arr1) from test.array_functions; +select arr1, arrayPopBack(arr1) from array_functions; -DROP TABLE if exists test.array_functions; +DROP TABLE if exists array_functions; select ''; select 'table'; -create table test.array_functions (arr1 Array(Nullable(Int8)), arr2 Array(UInt8), o Int8, no Nullable(Int8), l Int8, nl Nullable(Int8)) engine = TinyLog; -insert into test.array_functions values ([], [], 1, Null, 1, Null), ([], [1, 2], 1, Null, 1, Null), ([1, 2, 3, 4, 5], [6, 7], 2, Null, 1, Null), ([1, Null,3,4, Null, 6, 7], [8], 2, 2, 3, 3),([1, 2, 3, Null, 5, 6, 7], [0, 1], 2, Null, -3, -3),([1, 2, 3, 4, 5, Null, 7], [1, 2], 2, Null, -3, Null),([1, 2, 3,4, 5, 6, 7], [1, 2], -5, -5, 4, 4),([1, Null, 3, Null, 5, 6, 7], [], -5, -5, -3, -3); +create table array_functions (arr1 Array(Nullable(Int8)), arr2 Array(UInt8), o Int8, no Nullable(Int8), l Int8, nl Nullable(Int8)) engine = TinyLog; +insert into array_functions values ([], [], 1, Null, 1, Null), ([], [1, 2], 1, Null, 1, Null), ([1, 2, 3, 4, 5], [6, 7], 2, Null, 1, Null), ([1, Null,3,4, Null, 6, 7], [8], 2, 2, 3, 3),([1, 2, 3, Null, 5, 6, 7], [0, 1], 2, Null, -3, -3),([1, 2, 3, 4, 5, Null, 7], [1, 2], 2, Null, -3, Null),([1, 2, 3,4, 5, 6, 7], [1, 2], -5, -5, 4, 4),([1, Null, 3, Null, 5, 6, 7], [], -5, -5, -3, -3); -select * from test.array_functions; +select * from array_functions; select 'concat arr1, arr2'; -select arrayConcat(arr1, arr2), arr1, arr2 from test.array_functions; +select arrayConcat(arr1, arr2), arr1, arr2 from array_functions; select 'concat arr1, arr2, arr1'; -select arrayConcat(arr1, arr2, arr1), arr1, arr2 from test.array_functions; +select arrayConcat(arr1, arr2, arr1), arr1, arr2 from array_functions; -select * from test.array_functions; +select * from array_functions; select 'concat arr1, arr2'; -select arrayConcat(arr1, arr2), arr1, arr2 from test.array_functions; +select arrayConcat(arr1, arr2), arr1, arr2 from array_functions; select 'concat arr1, arr2, arr1'; -select arrayConcat(arr1, arr2, arr1), arr1, arr2 from test.array_functions; +select arrayConcat(arr1, arr2, arr1), arr1, arr2 from array_functions; select 'arraySlice(arr1, o, l)'; -select arr1, o, l, arraySlice(arr1, o, l) from test.array_functions; +select arr1, o, l, arraySlice(arr1, o, l) from array_functions; select 'arraySlice(arr1, no, nl)'; -select arr1, no, nl, arraySlice(arr1, no, nl) from test.array_functions; +select arr1, no, nl, arraySlice(arr1, no, nl) from array_functions; select 'arraySlice(arr1, 2, l)'; -select arr1, 2, l, arraySlice(arr1, 2, l) from test.array_functions; +select arr1, 2, l, arraySlice(arr1, 2, l) from array_functions; select 'arraySlice(arr1, o, 2)'; -select arr1, o, 2, arraySlice(arr1, o, 2) from test.array_functions; +select arr1, o, 2, arraySlice(arr1, o, 2) from array_functions; select 'arraySlice(arr1, 2, nl)'; -select arr1, 2, nl, arraySlice(arr1, 2, nl) from test.array_functions; +select arr1, 2, nl, arraySlice(arr1, 2, nl) from array_functions; select 'arraySlice(arr1, no, 2)'; -select arr1, no, 2, arraySlice(arr1, no, 2) from test.array_functions; +select arr1, no, 2, arraySlice(arr1, no, 2) from array_functions; select 'arraySlice(arr1, -4, l)'; -select arr1, 2, l, arraySlice(arr1, -4, l) from test.array_functions; +select arr1, 2, l, arraySlice(arr1, -4, l) from array_functions; select 'arraySlice(arr1, o, -2)'; -select arr1, o, 2, arraySlice(arr1, o, -2) from test.array_functions; +select arr1, o, 2, arraySlice(arr1, o, -2) from array_functions; select 'arraySlice(arr1, -4, nl)'; -select arr1, 2, nl, arraySlice(arr1, -4, nl) from test.array_functions; +select arr1, 2, nl, arraySlice(arr1, -4, nl) from array_functions; select 'arraySlice(arr1, no, -2)'; -select arr1, no, 2, arraySlice(arr1, no, -2) from test.array_functions; +select arr1, no, 2, arraySlice(arr1, no, -2) from array_functions; select 'arraySlice(arr1, 2, 4)'; -select arr1, 2, 4, arraySlice(arr1, 2, 4) from test.array_functions; +select arr1, 2, 4, arraySlice(arr1, 2, 4) from array_functions; select 'arraySlice(arr1, 2, -4)'; -select arr1, 2, 4, arraySlice(arr1, 2, -4) from test.array_functions; +select arr1, 2, 4, arraySlice(arr1, 2, -4) from array_functions; select 'arraySlice(arr1, -4, 2)'; -select arr1, 2, 4, arraySlice(arr1, -4, 2) from test.array_functions; +select arr1, 2, 4, arraySlice(arr1, -4, 2) from array_functions; select 'arraySlice(arr1, -4, -1)'; -select arr1, 2, 4, arraySlice(arr1, -4, -1) from test.array_functions; +select arr1, 2, 4, arraySlice(arr1, -4, -1) from array_functions; select 'arrayPushFront(arr1, 1)'; -select arr1, arrayPushFront(arr1, 1) from test.array_functions; +select arr1, arrayPushFront(arr1, 1) from array_functions; select 'arrayPushFront(arr1, 0.1)'; -select arr1, arrayPushFront(arr1, 0.1) from test.array_functions; +select arr1, arrayPushFront(arr1, 0.1) from array_functions; select 'arrayPushFront(arr1, l)'; -select arr1, arrayPushFront(arr1, l) from test.array_functions; +select arr1, arrayPushFront(arr1, l) from array_functions; select 'arrayPushFront(arr1, nl)'; -select arr1, arrayPushFront(arr1, nl) from test.array_functions; +select arr1, arrayPushFront(arr1, nl) from array_functions; select 'arrayPushFront([1, 2, 3], l)'; -select arrayPushFront([1, 2, 3], l) from test.array_functions; -select 'arrayPushFront([1, 2, 3], nl)' from test.array_functions; -select arrayPushFront([1, 2, 3], nl) from test.array_functions; +select arrayPushFront([1, 2, 3], l) from array_functions; +select 'arrayPushFront([1, 2, 3], nl)' from array_functions; +select arrayPushFront([1, 2, 3], nl) from array_functions; select 'arrayPushBack(arr1, 1)'; -select arr1, arrayPushBack(arr1, 1) from test.array_functions; +select arr1, arrayPushBack(arr1, 1) from array_functions; select 'arrayPushBack(arr1, 0.1)'; -select arr1, arrayPushBack(arr1, 0.1) from test.array_functions; +select arr1, arrayPushBack(arr1, 0.1) from array_functions; select 'arrayPushBack(arr1, l)'; -select arr1, arrayPushBack(arr1, l) from test.array_functions; +select arr1, arrayPushBack(arr1, l) from array_functions; select 'arrayPushBack(arr1, nl)'; -select arr1, arrayPushBack(arr1, nl) from test.array_functions; +select arr1, arrayPushBack(arr1, nl) from array_functions; select 'arrayPushBack([1, 2, 3], l)'; -select arrayPushBack([1, 2, 3], l) from test.array_functions; +select arrayPushBack([1, 2, 3], l) from array_functions; select 'arrayPushBack([1, 2, 3], nl)'; -select arrayPushBack([1, 2, 3], nl) from test.array_functions; +select arrayPushBack([1, 2, 3], nl) from array_functions; select 'arrayPopFront(arr1)'; -select arr1, arrayPopFront(arr1) from test.array_functions; +select arr1, arrayPopFront(arr1) from array_functions; select 'arrayPopBack(arr1)'; -select arr1, arrayPopBack(arr1) from test.array_functions; +select arr1, arrayPopBack(arr1) from array_functions; -DROP TABLE if exists test.array_functions; +DROP TABLE if exists array_functions; select ''; select 'table'; -create table test.array_functions (arr1 Array(Nullable(String)), arr2 Array(String), val String, val2 Nullable(String), o Int8, no Nullable(Int8), l Int8, nl Nullable(Int8)) engine = TinyLog; -insert into test.array_functions values ([], [], '', Null, 1, Null, 1, Null), ([], ['1', '2'], 'a', 'b', 1, Null, 1, Null), (['1', '2', '3', '4', '5'], ['6','7'], 'a', Null, 2, Null, 1, Null), (['1', Null, '3', '4', Null, '6', '7'], ['8'], 'a', 'b', 2, 2, 3, 3),(['1', '2', '3', Null, '5', '6', '7'], ['0','1'], 'a', Null, 2, Null, -3, -3),(['1', '2', '3', '4', '5', Null, '7'], ['1', '2'], 'a', 'b', 2, Null, -3, Null),(['1', '2', '3', '4', '5', '6', '7'],['1', '2'], 'a', Null, -5, -5, 4, 4),(['1', Null, '3', Null, '5', '6', '7'], [], 'a', 'b', -5, -5, -3, -3); +create table array_functions (arr1 Array(Nullable(String)), arr2 Array(String), val String, val2 Nullable(String), o Int8, no Nullable(Int8), l Int8, nl Nullable(Int8)) engine = TinyLog; +insert into array_functions values ([], [], '', Null, 1, Null, 1, Null), ([], ['1', '2'], 'a', 'b', 1, Null, 1, Null), (['1', '2', '3', '4', '5'], ['6','7'], 'a', Null, 2, Null, 1, Null), (['1', Null, '3', '4', Null, '6', '7'], ['8'], 'a', 'b', 2, 2, 3, 3),(['1', '2', '3', Null, '5', '6', '7'], ['0','1'], 'a', Null, 2, Null, -3, -3),(['1', '2', '3', '4', '5', Null, '7'], ['1', '2'], 'a', 'b', 2, Null, -3, Null),(['1', '2', '3', '4', '5', '6', '7'],['1', '2'], 'a', Null, -5, -5, 4, 4),(['1', Null, '3', Null, '5', '6', '7'], [], 'a', 'b', -5, -5, -3, -3); -select * from test.array_functions; +select * from array_functions; select 'concat arr1, arr2'; -select arrayConcat(arr1, arr2), arr1, arr2 from test.array_functions; +select arrayConcat(arr1, arr2), arr1, arr2 from array_functions; select 'concat arr1, arr2, arr1'; -select arrayConcat(arr1, arr2, arr1), arr1, arr2 from test.array_functions; +select arrayConcat(arr1, arr2, arr1), arr1, arr2 from array_functions; select 'arraySlice(arr1, o, l)'; -select arr1, o, l, arraySlice(arr1, o, l) from test.array_functions; +select arr1, o, l, arraySlice(arr1, o, l) from array_functions; select 'arraySlice(arr1, no, nl)'; -select arr1, no, nl, arraySlice(arr1, no, nl) from test.array_functions; +select arr1, no, nl, arraySlice(arr1, no, nl) from array_functions; select 'arraySlice(arr1, 2, l)'; -select arr1, 2, l, arraySlice(arr1, 2, l) from test.array_functions; +select arr1, 2, l, arraySlice(arr1, 2, l) from array_functions; select 'arraySlice(arr1, o, 2)'; -select arr1, o, 2, arraySlice(arr1, o, 2) from test.array_functions; +select arr1, o, 2, arraySlice(arr1, o, 2) from array_functions; select 'arraySlice(arr1, 2, nl)'; -select arr1, 2, nl, arraySlice(arr1, 2, nl) from test.array_functions; +select arr1, 2, nl, arraySlice(arr1, 2, nl) from array_functions; select 'arraySlice(arr1, no, 2)'; -select arr1, no, 2, arraySlice(arr1, no, 2) from test.array_functions; +select arr1, no, 2, arraySlice(arr1, no, 2) from array_functions; select 'arraySlice(arr1, -4, l)'; -select arr1, 2, l, arraySlice(arr1, -4, l) from test.array_functions; +select arr1, 2, l, arraySlice(arr1, -4, l) from array_functions; select 'arraySlice(arr1, o, -2)'; -select arr1, o, 2, arraySlice(arr1, o, -2) from test.array_functions; +select arr1, o, 2, arraySlice(arr1, o, -2) from array_functions; select 'arraySlice(arr1, -4, nl)'; -select arr1, 2, nl, arraySlice(arr1, -4, nl) from test.array_functions; +select arr1, 2, nl, arraySlice(arr1, -4, nl) from array_functions; select 'arraySlice(arr1, no, -2)'; -select arr1, no, 2, arraySlice(arr1, no, -2) from test.array_functions; +select arr1, no, 2, arraySlice(arr1, no, -2) from array_functions; select 'arraySlice(arr1, 2, 4)'; -select arr1, 2, 4, arraySlice(arr1, 2, 4) from test.array_functions; +select arr1, 2, 4, arraySlice(arr1, 2, 4) from array_functions; select 'arraySlice(arr1, 2, -4)'; -select arr1, 2, 4, arraySlice(arr1, 2, -4) from test.array_functions; +select arr1, 2, 4, arraySlice(arr1, 2, -4) from array_functions; select 'arraySlice(arr1, -4, 2)'; -select arr1, 2, 4, arraySlice(arr1, -4, 2) from test.array_functions; +select arr1, 2, 4, arraySlice(arr1, -4, 2) from array_functions; select 'arraySlice(arr1, -4, -1)'; -select arr1, 2, 4, arraySlice(arr1, -4, -1) from test.array_functions; +select arr1, 2, 4, arraySlice(arr1, -4, -1) from array_functions; select 'arrayPushFront(arr1, 1)'; -select arr1, arrayPushFront(arr1, '1') from test.array_functions; +select arr1, arrayPushFront(arr1, '1') from array_functions; select 'arrayPushFront(arr1, val)'; -select arr1, arrayPushFront(arr1, val) from test.array_functions; +select arr1, arrayPushFront(arr1, val) from array_functions; select 'arrayPushFront(arr1, val2)'; -select arr1, arrayPushFront(arr1, val2) from test.array_functions; +select arr1, arrayPushFront(arr1, val2) from array_functions; select 'arrayPushFront([a, b, c], val)'; -select arrayPushFront(['a', 'b', 'c'], val) from test.array_functions; +select arrayPushFront(['a', 'b', 'c'], val) from array_functions; select 'arrayPushFront([a, b, c], val2)'; -select arrayPushFront(['a', 'b', 'c'], val2) from test.array_functions; +select arrayPushFront(['a', 'b', 'c'], val2) from array_functions; select 'arrayPushBack(arr1, 1)'; -select arr1, arrayPushBack(arr1, '1') from test.array_functions; +select arr1, arrayPushBack(arr1, '1') from array_functions; select 'arrayPushBack(arr1, val)'; -select arr1, arrayPushBack(arr1, val) from test.array_functions; +select arr1, arrayPushBack(arr1, val) from array_functions; select 'arrayPushBack(arr1, val2)'; -select arr1, arrayPushBack(arr1, val2) from test.array_functions; +select arr1, arrayPushBack(arr1, val2) from array_functions; select 'arrayPushBack([a, b, c], val)'; -select arrayPushBack(['a', 'b', 'c'], val) from test.array_functions; +select arrayPushBack(['a', 'b', 'c'], val) from array_functions; select 'arrayPushBack([a, b, c], val2)'; -select arrayPushBack(['a', 'b', 'c'], val2) from test.array_functions; +select arrayPushBack(['a', 'b', 'c'], val2) from array_functions; select 'arrayPopFront(arr1)'; -select arr1, arrayPopFront(arr1) from test.array_functions; +select arr1, arrayPopFront(arr1) from array_functions; select 'arrayPopBack(arr1)'; -select arr1, arrayPopBack(arr1) from test.array_functions; +select arr1, arrayPopBack(arr1) from array_functions; + +DROP TABLE if exists array_functions; diff --git a/dbms/tests/queries/0_stateless/00499_json_enum_insert.sql b/dbms/tests/queries/0_stateless/00499_json_enum_insert.sql index 41b3fcc3837..d085177a8e3 100644 --- a/dbms/tests/queries/0_stateless/00499_json_enum_insert.sql +++ b/dbms/tests/queries/0_stateless/00499_json_enum_insert.sql @@ -1,13 +1,13 @@ -DROP TABLE IF EXISTS test.json; -CREATE TABLE test.json (x Enum8('browser' = 1, 'mobile' = 2), y String) ENGINE = Memory; +DROP TABLE IF EXISTS json; +CREATE TABLE json (x Enum8('browser' = 1, 'mobile' = 2), y String) ENGINE = Memory; -INSERT INTO test.json (y) VALUES ('Hello'); -SELECT * FROM test.json ORDER BY y; +INSERT INTO json (y) VALUES ('Hello'); +SELECT * FROM json ORDER BY y; -INSERT INTO test.json (y) FORMAT JSONEachRow {"y": "World 1"}; -SELECT * FROM test.json ORDER BY y; +INSERT INTO json (y) FORMAT JSONEachRow {"y": "World 1"}; +SELECT * FROM json ORDER BY y; -INSERT INTO test.json (x, y) FORMAT JSONEachRow {"y": "World 2"}; -SELECT * FROM test.json ORDER BY y; +INSERT INTO json (x, y) FORMAT JSONEachRow {"y": "World 2"}; +SELECT * FROM json ORDER BY y; -DROP TABLE test.json; +DROP TABLE json; diff --git a/dbms/tests/queries/0_stateless/00500_point_in_polygon_bug.sql b/dbms/tests/queries/0_stateless/00500_point_in_polygon_bug.sql index d85b919fa21..ee1802126cd 100644 --- a/dbms/tests/queries/0_stateless/00500_point_in_polygon_bug.sql +++ b/dbms/tests/queries/0_stateless/00500_point_in_polygon_bug.sql @@ -1,6 +1,6 @@ -drop table if exists test.coords; -create table test.coords (x Float32, y Float32) engine = Memory; -insert into test.coords values (-81.7897198,29.4292161), (-81.7886889,29.4292222), (-81.787658,29.4292283), (-81.7866341,29.4301369), (-81.7866271,29.4292344), (-81.7856171,29.4319479), (-81.7856101,29.4310454), (-81.7856032,29.430143), (-81.7855962,29.4292405), (-81.7845931,29.4328564), (-81.7845862,29.4319539), (-81.7845792,29.4310515), (-81.7845723,29.430149), (-81.7845654,29.4292466), (-81.7835622,29.4328625), (-81.7835553,29.43196), (-81.7835483,29.4310576), (-81.7835414,29.4301551), (-81.7835345,29.4292527), (-81.7825382,29.433771), (-81.7825313,29.4328685), (-81.7825243,29.4319661), (-81.7825174,29.4310636), (-81.7825105,29.4301612), (-81.7825036,29.4292587), (-81.7815142,29.4346795), (-81.7815073,29.433777), (-81.7815003,29.4328746), (-81.7814934,29.4319721), (-81.7814865,29.4310697), (-81.7814796,29.4301672), (-81.7814727,29.4292648), (-81.7804832,29.4346855), (-81.7804763,29.4337831), (-81.7804694,29.4328806), (-81.7804625,29.4319782), (-81.7804556,29.4310757), (-81.7804487,29.4301733), (-81.7804418,29.4292708), (-81.7794592,29.435594), (-81.7794523,29.4346916), (-81.7794454,29.4337891), (-81.7794385,29.4328867), (-81.7794316,29.4319842), (-81.7794247,29.4310818), (-81.7794178,29.4301793), (-81.7794109,29.4292768), (-81.7784282,29.4356001), (-81.7784213,29.4346976), (-81.7784145,29.4337952), (-81.7784076,29.4328927), (-81.7784007,29.4319902), (-81.7783938,29.4310878), (-81.7783869,29.4301853), (-81.77838,29.4292829), (-81.7773973,29.4356061), (-81.7773904,29.4347036), (-81.7773835,29.4338012), (-81.7773766,29.4328987), (-81.7773698,29.4319963), (-81.7773629,29.4310938), (-81.777356,29.4301914), (-81.7773492,29.4292889), (-81.7763732,29.4365146), (-81.7763663,29.4356121), (-81.7763594,29.4347096), (-81.7763526,29.4338072), (-81.7763457,29.4329047), (-81.7763389,29.4320023), (-81.776332,29.4310998), (-81.7763251,29.4301974), (-81.7763183,29.4292949), (-81.7753422,29.4365206), (-81.7753354,29.4356181), (-81.7753285,29.4347156), (-81.7753217,29.4338132), (-81.7753148,29.4329107), (-81.7753079,29.4320083), (-81.7753011,29.4311058), (-81.7752942,29.4302034), (-81.7752874,29.4293009), (-81.7742496,29.4284045), (-81.7742428,29.427502), (-81.774236,29.426599500000002), (-81.7742291,29.4256971), (-81.7742223,29.4247946), (-81.7742154,29.4238922), (-81.7742086,29.4229897), (-81.7742017,29.4220873), (-81.7741949,29.4211848), (-81.774188,29.4202823), (-81.7741812,29.4193799), (-81.7741744,29.4184774), (-81.7741675,29.417575), (-81.7741607,29.4166725), (-81.7741538,29.4157701), (-81.774147,29.4148676), (-81.7741402,29.4139651), (-81.7741333,29.4130627), (-81.7741265,29.4121602), (-81.7741196,29.4112578), (-81.7741128,29.4103553), (-81.774106,29.4094528), (-81.7740991,29.4085504), (-81.7740923,29.4076479), (-81.7740855,29.4067455), (-81.7740786,29.405843), (-81.7740718,29.4049405), (-81.7740649,29.4040381), (-81.7740581,29.4031356), (-81.7740513,29.4022332), (-81.7740444,29.4013307), (-81.7740376,29.4004282), (-81.7740308,29.3995258), (-81.7740239,29.3986233), (-81.7740171,29.3977209), (-81.7740103,29.3968184), (-81.7740034,29.3959159), (-81.7739966,29.3950135), (-81.7739898,29.394111), (-81.7739829,29.3932086), (-81.7739761,29.3923061), (-81.7739693,29.3914036), (-81.7739624,29.3905012), (-81.7739556,29.3895987), (-81.7739488,29.3886963), (-81.7739419,29.3877938), (-81.7739351,29.3868913), (-81.7739283,29.3859889), (-81.7732188,29.4284104), (-81.7732119,29.427508), (-81.7732051,29.4266055), (-81.7731983,29.4257031), (-81.7731914,29.4248006), (-81.7731846,29.4238982), (-81.7731778,29.4229957), (-81.7731709,29.4220932), (-81.7731641,29.4211908), (-81.7731573,29.4202883), (-81.7731504,29.4193859), (-81.7731436,29.4184834), (-81.7731368,29.417581), (-81.7731299,29.4166785), (-81.7731231,29.415776), (-81.7731163,29.4148736), (-81.7731094,29.4139711), (-81.7731026,29.4130687), (-81.7730958,29.4121662), (-81.7730889,29.4112637), (-81.7730821,29.4103613), (-81.7730753,29.4094588), (-81.7730684,29.4085564), (-81.7730616,29.4076539), (-81.7730548,29.4067514), (-81.773048,29.405849), (-81.7730411,29.4049465), (-81.7730343,29.4040441), (-81.7730275,29.4031416), (-81.7730207,29.4022391), (-81.7730138,29.4013367), (-81.773007,29.4004342), (-81.7730002,29.3995318), (-81.7729933,29.3986293), (-81.7729865,29.3977268), (-81.7729797,29.3968244), (-81.7729729,29.3959219), (-81.772966,29.3950195), (-81.7729592,29.394117), (-81.7729524,29.3932145), (-81.7729456,29.3923121), (-81.7729388,29.3914096), (-81.7729319,29.3905072), (-81.7729251,29.3896047), (-81.7729183,29.3887022), (-81.7729115,29.3877998), (-81.7729046,29.3868973), (-81.7728978,29.3859948), (-81.772891,29.3850924), (-81.7728842,29.3841899), (-81.7728774,29.3832875), (-81.7728705,29.382385), (-81.7728637,29.3814825), (-81.7721879,29.4284164), (-81.7721811,29.427514), (-81.7721742,29.4266115), (-81.7721674,29.4257091), (-81.7721606,29.4248066), (-81.7721537,29.4239041), (-81.7721469,29.4230017), (-81.7721401,29.4220992), (-81.7721333,29.4211968), (-81.7721265,29.4202943), (-81.7721196,29.4193918), (-81.7721128,29.4184894), (-81.772106,29.4175869), (-81.7720992,29.4166845), (-81.7720923,29.415782), (-81.7720855,29.4148796), (-81.7720787,29.4139771), (-81.7720719,29.4130746), (-81.772065,29.4121722), (-81.7720582,29.4112697), (-81.7720514,29.4103673), (-81.7720446,29.4094648), (-81.7720378,29.4085623), (-81.7720309,29.4076599), (-81.7720241,29.4067574), (-81.7720173,29.405855), (-81.7720105,29.4049525), (-81.7720037,29.40405), (-81.7719969,29.4031476), (-81.77199,29.402245100000002), (-81.7719832,29.4013427), (-81.7719764,29.4004402), (-81.7719696,29.3995377), (-81.7719628,29.3986353), (-81.771956,29.3977328), (-81.7719491,29.3968304), (-81.7719423,29.3959279), (-81.7719355,29.3950254), (-81.7719287,29.394123), (-81.7719219,29.393220499999998), (-81.7719151,29.3923181), (-81.7719082,29.3914156), (-81.7719014,29.3905131), (-81.7718946,29.3896107), (-81.7718878,29.3887082), (-81.771881,29.3878057), (-81.7718742,29.3869033), (-81.7718674,29.3860008), (-81.7718606,29.3850984), (-81.7718537,29.3841959), (-81.7718469,29.3832934), (-81.7718401,29.382391), (-81.7718333,29.3814885), (-81.771157,29.4284224), (-81.7711502,29.4275199), (-81.7711434,29.4266175), (-81.7711365,29.425715), (-81.7711297,29.4248126), (-81.7711229,29.4239101), (-81.7711161,29.4230077), (-81.7711093,29.4221052), (-81.7711025,29.4212027), (-81.7710957,29.4203003), (-81.7710888,29.4193978), (-81.771082,29.4184954), (-81.7710752,29.4175929), (-81.7710684,29.4166904), (-81.7710616,29.415788), (-81.7710548,29.4148855), (-81.771048,29.4139831), (-81.7710411,29.4130806), (-81.7710343,29.4121781), (-81.7710275,29.4112757), (-81.7710207,29.4103732), (-81.7710139,29.4094708), (-81.7710071,29.4085683), (-81.7710003,29.4076659), (-81.7709935,29.4067634), (-81.7709867,29.4058609), (-81.7709798,29.4049585), (-81.770973,29.404056), (-81.7709662,29.4031536), (-81.7709594,29.4022511), (-81.7709526,29.4013486), (-81.7709458,29.4004462), (-81.770939,29.3995437), (-81.7709322,29.3986412), (-81.7709254,29.3977388), (-81.7709186,29.3968363), (-81.7709118,29.3959339), (-81.770905,29.3950314), (-81.7708982,29.3941289), (-81.7708913,29.3932265), (-81.7708845,29.392324), (-81.7708777,29.3914216), (-81.7708709,29.3905191), (-81.7708641,29.3896166), (-81.7708573,29.3887142), (-81.7708505,29.3878117), (-81.7708437,29.3869092), (-81.7708369,29.3860068), (-81.7708301,29.3851043), (-81.7708233,29.3842019), (-81.7708165,29.3832994), (-81.7708097,29.3823969), (-81.7708029,29.3814945), (-81.7701329,29.4293308), (-81.7701261,29.4284284), (-81.7701193,29.4275259), (-81.7701125,29.4266234), (-81.7701057,29.425721), (-81.7700989,29.4248185), (-81.7700921,29.4239161), (-81.7700853,29.4230136), (-81.7700785,29.4221112), (-81.7700717,29.4212087), (-81.7700649,29.4203062), (-81.770058,29.4194038), (-81.7700512,29.4185013), (-81.7700444,29.4175989), (-81.7700376,29.4166964), (-81.7700308,29.4157939), (-81.770024,29.4148915), (-81.7700172,29.413989), (-81.7700104,29.4130866), (-81.7700036,29.4121841), (-81.7699968,29.4112816), (-81.76999,29.4103792), (-81.7699832,29.4094767), (-81.7699764,29.4085743), (-81.7699696,29.4076718), (-81.7699628,29.4067694), (-81.769956,29.4058669), (-81.7699492,29.4049644), (-81.7699424,29.404062), (-81.7699356,29.4031595), (-81.7699288,29.402257), (-81.769922,29.4013546), (-81.7699152,29.4004521), (-81.7699084,29.3995497), (-81.7699016,29.3986472), (-81.7698948,29.3977447), (-81.769888,29.3968423), (-81.7698812,29.3959398), (-81.7698744,29.3950374), (-81.7698676,29.3941349), (-81.7698608,29.3932324), (-81.769854,29.39233), (-81.7698472,29.3914275), (-81.7698404,29.390525), (-81.7698336,29.3896226), (-81.7698268,29.3887201), (-81.76982,29.3878177), (-81.7698133,29.3869152), (-81.7698065,29.3860127), (-81.7697997,29.3851103), (-81.7697929,29.3842078), (-81.7697861,29.3833053), (-81.7697793,29.3824029), (-81.7697725,29.3815004), (-81.769102,29.4293368), (-81.7690952,29.4284343), (-81.7690884,29.4275319), (-81.7690816,29.4266294), (-81.7690748,29.4257269), (-81.769068,29.4248245), (-81.7690612,29.423922), (-81.7690544,29.4230196), (-81.7690476,29.4221171), (-81.7690409,29.4212147), (-81.7690341,29.4203122), (-81.7690273,29.4194097), (-81.7690205,29.4185073), (-81.7690137,29.4176048), (-81.7690069,29.4167024), (-81.7690001,29.4157999), (-81.7689933,29.4148974), (-81.7689865,29.413995), (-81.7689797,29.4130925), (-81.7689729,29.4121901), (-81.7689661,29.4112876), (-81.7689593,29.4103851), (-81.7689525,29.4094827), (-81.7689457,29.4085802), (-81.7689389,29.4076778), (-81.7689321,29.4067753), (-81.7689253,29.4058728), (-81.7689186,29.4049704), (-81.7689118,29.4040679), (-81.768905,29.4031655), (-81.7688982,29.402263), (-81.7688914,29.4013605), (-81.7688846,29.4004581), (-81.7688778,29.3995556), (-81.768871,29.3986532), (-81.7688642,29.3977507), (-81.7688574,29.3968482), (-81.7688507,29.3959458), (-81.7688439,29.3950433), (-81.7688371,29.3941408), (-81.7688303,29.3932384), (-81.7688235,29.3923359), (-81.7688167,29.3914335), (-81.7688099,29.390531), (-81.7688031,29.3896285), (-81.7687964,29.3887261), (-81.7687896,29.3878236), (-81.7687828,29.3869211), (-81.768776,29.3860187), (-81.7687692,29.3851162), (-81.7687624,29.3842138), (-81.7687557,29.3833113), (-81.7687489,29.3824088), (-81.7687421,29.3815064), (-81.7680711,29.4293427), (-81.7680644,29.4284403), (-81.7680576,29.4275378), (-81.7680508,29.4266353), (-81.768044,29.4257329), (-81.7680372,29.4248304), (-81.7680304,29.423928), (-81.7680236,29.4230255), (-81.7680168,29.4221231), (-81.76801,29.4212206), (-81.7680033,29.4203181), (-81.7679965,29.4194157), (-81.7679897,29.4185132), (-81.7679829,29.4176108), (-81.7679761,29.4167083), (-81.7679693,29.4158058), (-81.7679625,29.4149034), (-81.7679557,29.4140009), (-81.767949,29.4130985), (-81.7679422,29.412196), (-81.7679354,29.4112935), (-81.7679286,29.4103911), (-81.7679218,29.4094886), (-81.767915,29.4085862), (-81.7679083,29.4076837), (-81.7679015,29.4067812), (-81.7678947,29.4058788), (-81.7678879,29.4049763), (-81.7678811,29.4040739), (-81.7678743,29.4031714), (-81.7678676,29.4022689), (-81.7678608,29.4013665), (-81.767854,29.400464), (-81.7678472,29.3995616), (-81.7678404,29.3986591), (-81.7678337,29.3977566), (-81.7678269,29.3968542), (-81.7678201,29.3959517), (-81.7678133,29.3950492), (-81.7678065,29.3941468), (-81.7677998,29.3932443), (-81.767793,29.3923419), (-81.7677862,29.3914394), (-81.7677794,29.3905369), (-81.7677727,29.3896345), (-81.7677659,29.388732), (-81.7677591,29.3878295), (-81.7677523,29.3869271), (-81.7677456,29.3860246), (-81.7677388,29.3851222), (-81.767732,29.3842197), (-81.7677252,29.3833172), (-81.7677185,29.3824148), (-81.7677117,29.3815123), (-81.7670403,29.4293487), (-81.7670335,29.4284462), (-81.7670267,29.4275437), (-81.7670199,29.4266413), (-81.7670131,29.4257388), (-81.7670063,29.4248364), (-81.7669996,29.4239339), (-81.7669928,29.4230315), (-81.766986,29.422128999999998), (-81.7669792,29.4212265), (-81.7669725,29.4203241), (-81.7669657,29.4194216), (-81.7669589,29.4185192), (-81.7669521,29.4176167), (-81.7669453,29.4167142), (-81.7669386,29.4158118), (-81.7669318,29.4149093), (-81.766925,29.4140069), (-81.7669182,29.4131044), (-81.7669115,29.4122019), (-81.7669047,29.4112995), (-81.7668979,29.410397), (-81.7668911,29.4094946), (-81.7668844,29.4085921), (-81.7668776,29.4076896), (-81.7668708,29.4067872), (-81.766864,29.4058847), (-81.7668573,29.4049823), (-81.7668505,29.4040798), (-81.7668437,29.4031773), (-81.7668369,29.4022749), (-81.7668302,29.4013724), (-81.7668234,29.40047), (-81.7668166,29.3995675), (-81.7668099,29.398665), (-81.7668031,29.3977626), (-81.7667963,29.3968601), (-81.7667895,29.3959576), (-81.7667828,29.3950552), (-81.766776,29.3941527), (-81.7667692,29.3932503), (-81.7667625,29.3923478), (-81.7667557,29.3914453), (-81.7667489,29.3905429), (-81.7667422,29.3896404), (-81.7667354,29.3887379), (-81.7667286,29.3878355), (-81.7667219,29.386933), (-81.7667151,29.3860305), (-81.7667083,29.3851281), (-81.7667016,29.3842256), (-81.7666948,29.3833232), (-81.766688,29.3824207), (-81.7666813,29.3815182), (-81.7660094,29.4293546), (-81.7660026,29.4284521), (-81.7659958,29.4275497), (-81.765989,29.4266472), (-81.7659823,29.4257448), (-81.7659755,29.4248423), (-81.7659687,29.4239398), (-81.765962,29.4230374), (-81.7659552,29.4221349), (-81.7659484,29.4212325), (-81.7659417,29.42033), (-81.7659349,29.4194275), (-81.7659281,29.4185251), (-81.7659213,29.4176226), (-81.7659146,29.4167202), (-81.7659078,29.4158177), (-81.765901,29.4149153), (-81.7658943,29.4140128), (-81.7658875,29.4131103), (-81.7658807,29.4122079), (-81.765874,29.4113054), (-81.7658672,29.4104029), (-81.7658604,29.4095005), (-81.7658537,29.408598), (-81.7658469,29.4076956), (-81.7658401,29.4067931), (-81.7658334,29.4058906), (-81.7658266,29.4049882), (-81.7658199,29.4040857), (-81.7658131,29.4031833), (-81.7658063,29.4022808), (-81.7657996,29.4013783), (-81.7657928,29.4004759), (-81.765786,29.3995734), (-81.7657793,29.398671), (-81.7657725,29.3977685), (-81.7657658,29.396866), (-81.765759,29.3959636), (-81.7657522,29.3950611), (-81.7657455,29.3941586), (-81.7657387,29.3932562), (-81.765732,29.3923537), (-81.7657252,29.3914513), (-81.7657184,29.3905488), (-81.7657117,29.3896463), (-81.7657049,29.3887439), (-81.7656982,29.3878414), (-81.7656914,29.3869389), (-81.7656846,29.3860365), (-81.7656779,29.385134), (-81.7656711,29.3842315), (-81.7656644,29.3833291), (-81.7656576,29.3824266), (-81.7656509,29.3815241), (-81.7649785,29.4293605), (-81.7649717,29.4284581), (-81.7649649,29.4275556), (-81.7649582,29.4266531), (-81.7649514,29.4257507), (-81.7649447,29.4248482), (-81.7649379,29.4239458), (-81.7649311,29.4230433), (-81.7649244,29.4221408), (-81.7649176,29.4212384), (-81.7649109,29.4203359), (-81.7649041,29.4194335), (-81.7648973,29.418531), (-81.7648906,29.4176286), (-81.7648838,29.416726099999998), (-81.7648771,29.4158236), (-81.7648703,29.4149212), (-81.7648635,29.4140187), (-81.7648568,29.4131163), (-81.76485,29.4122138), (-81.7648433,29.4113113), (-81.7648365,29.4104089), (-81.7648298,29.4095064), (-81.764823,29.4086039), (-81.7648162,29.4077015), (-81.7648095,29.406799), (-81.7648027,29.4058966), (-81.764796,29.4049941), (-81.7647892,29.4040916), (-81.7647825,29.4031892), (-81.7647757,29.4022867), (-81.764769,29.4013843), (-81.7647622,29.4004818), (-81.7647554,29.3995793), (-81.7647487,29.3986769), (-81.7647419,29.3977744), (-81.7647352,29.3968719), (-81.7647284,29.3959695), (-81.7647217,29.395067), (-81.7647149,29.3941646), (-81.7647082,29.3932621), (-81.7647014,29.3923596), (-81.7646947,29.3914572), (-81.7646879,29.3905547), (-81.7646812,29.3896522), (-81.7646744,29.3887498), (-81.7646677,29.3878473), (-81.7646609,29.3869448), (-81.7646542,29.3860424), (-81.7646474,29.3851399), (-81.7646407,29.3842375), (-81.7646339,29.383335), (-81.7646272,29.3824325), (-81.7646204,29.3815301), (-81.7639476,29.4293664), (-81.7639408,29.428464), (-81.7639341,29.4275615), (-81.7639273,29.4266591), (-81.7639206,29.4257566), (-81.7639138,29.4248541), (-81.7639071,29.4239517), (-81.7639003,29.4230492), (-81.7638936,29.4221468), (-81.7638868,29.4212443), (-81.7638801,29.4203418), (-81.7638733,29.4194394), (-81.7638666,29.4185369), (-81.7638598,29.4176345), (-81.763853,29.416732), (-81.7638463,29.4158295), (-81.7638396,29.4149271), (-81.7638328,29.4140246), (-81.7638261,29.4131222), (-81.7638193,29.4122197), (-81.7638126,29.4113172), (-81.7638058,29.4104148), (-81.7637991,29.4095123), (-81.7637923,29.4086099), (-81.7637856,29.4077074), (-81.7637788,29.4068049), (-81.7637721,29.4059025), (-81.7637653,29.405), (-81.7637586,29.4040976), (-81.7637518,29.4031951), (-81.7637451,29.4022926), (-81.7637383,29.4013902), (-81.7637316,29.4004877), (-81.7637249,29.3995852), (-81.7637181,29.3986828), (-81.7637114,29.3977803), (-81.7637046,29.3968779), (-81.7636979,29.3959754), (-81.7636911,29.3950729), (-81.7636844,29.3941705), (-81.7636777,29.393268), (-81.7636709,29.3923655), (-81.7636642,29.3914631), (-81.7636574,29.3905606), (-81.7636507,29.3896581), (-81.763644,29.3887557), (-81.7636372,29.3878532), (-81.7636305,29.3869508), (-81.7636237,29.3860483), (-81.763617,29.3851458), (-81.7636103,29.3842434), (-81.7636035,29.3833409), (-81.7635968,29.3824384), (-81.76359,29.381536), (-81.7629167,29.4293723), (-81.7629099,29.4284699), (-81.7629032,29.4275674), (-81.7628965,29.426665), (-81.7628897,29.4257625), (-81.762883,29.42486), (-81.7628762,29.4239576), (-81.7628695,29.4230551), (-81.7628627,29.4221527), (-81.762856,29.4212502), (-81.7628493,29.4203478), (-81.7628425,29.4194453), (-81.7628358,29.4185428), (-81.762829,29.4176404), (-81.7628223,29.4167379), (-81.7628155,29.4158355), (-81.7628088,29.414933), (-81.7628021,29.4140305), (-81.7627953,29.4131281), (-81.7627886,29.4122256), (-81.7627818,29.4113231), (-81.7627751,29.4104207), (-81.7627684,29.4095182), (-81.7627616,29.4086158), (-81.7627549,29.4077133), (-81.7627482,29.4068108), (-81.7627414,29.4059084), (-81.7627347,29.4050059), (-81.7627279,29.4041035), (-81.7627212,29.403201), (-81.7627145,29.4022985), (-81.76270769999999,29.4013961), (-81.762701,29.4004936), (-81.7626943,29.3995911), (-81.7626875,29.3986887), (-81.7626808,29.3977862), (-81.7626741,29.3968838), (-81.7626673,29.3959813), (-81.7626606,29.3950788), (-81.7626539,29.3941764), (-81.7626471,29.3932739), (-81.7626404,29.3923714), (-81.7626337,29.391469), (-81.7626269,29.3905665), (-81.7626202,29.389664), (-81.7626135,29.3887616), (-81.7626067,29.3878591), (-81.7626,29.3869567), (-81.7625933,29.3860542), (-81.7625865,29.3851517), (-81.7625798,29.3842493), (-81.7625731,29.383346799999998), (-81.7625664,29.3824443), (-81.7625596,29.3815419), (-81.7618858,29.4293782), (-81.7618791,29.4284758), (-81.7618723,29.4275733), (-81.7618656,29.4266709), (-81.7618589,29.4257684), (-81.7618521,29.4248659), (-81.7618454,29.4239635), (-81.7618386,29.423061), (-81.7618319,29.4221586), (-81.7618252,29.4212561), (-81.7618184,29.4203537), (-81.7618117,29.4194512), (-81.761805,29.4185487), (-81.7617983,29.4176463), (-81.7617915,29.4167438), (-81.7617848,29.4158413), (-81.7617781,29.4149389), (-81.7617713,29.4140364), (-81.7617646,29.413134), (-81.7617579,29.4122315), (-81.7617511,29.411329), (-81.7617444,29.4104266), (-81.7617377,29.4095241), (-81.7617309,29.4086217), (-81.7617242,29.4077192), (-81.7617175,29.4068167), (-81.7617108,29.4059143), (-81.761704,29.4050118), (-81.7616973,29.404109300000002), (-81.7616906,29.4032069), (-81.7616839,29.4023044), (-81.7616771,29.401402), (-81.7616704,29.4004995), (-81.7616637,29.399597), (-81.7616569,29.3986946), (-81.7616502,29.3977921), (-81.7616435,29.3968896), (-81.7616368,29.3959872), (-81.76163,29.3950847), (-81.7616233,29.3941823), (-81.7616166,29.3932798), (-81.7616099,29.3923773), (-81.7616032,29.3914749), (-81.7615964,29.3905724), (-81.7615897,29.3896699), (-81.761583,29.3887675), (-81.7615763,29.387865), (-81.7615695,29.3869625), (-81.7615628,29.3860601), (-81.7615561,29.3851576), (-81.7615494,29.3842551), (-81.7615427,29.3833527), (-81.7615359,29.3824502), (-81.7615292,29.3815478), (-81.7608549,29.4293841), (-81.7608482,29.4284817), (-81.7608414,29.4275792), (-81.7608347,29.4266768), (-81.760828,29.4257743), (-81.7608213,29.4248718), (-81.7608145,29.4239694), (-81.7608078,29.4230669), (-81.7608011,29.4221645), (-81.7607944,29.421262), (-81.7607876,29.4203595), (-81.7607809,29.4194571), (-81.7607742,29.4185546), (-81.7607675,29.4176522), (-81.7607608,29.4167497), (-81.760754,29.4158472), (-81.7607473,29.4149448), (-81.7607406,29.4140423), (-81.7607339,29.4131399), (-81.7607271,29.4122374), (-81.7607204,29.4113349), (-81.7607137,29.4104325), (-81.760707,29.40953), (-81.7607003,29.4086275), (-81.7606935,29.4077251), (-81.7606868,29.4068226), (-81.7606801,29.4059202), (-81.7606734,29.4050177), (-81.7606667,29.4041152), (-81.76066,29.4032128), (-81.7606532,29.4023103), (-81.76064650000001,29.4014078), (-81.7606398,29.4005054), (-81.7606331,29.3996029), (-81.7606264,29.3987005), (-81.7606196,29.397798), (-81.7606129,29.3968955), (-81.7606062,29.3959931), (-81.7605995,29.3950906), (-81.7605928,29.3941881), (-81.7605861,29.3932857), (-81.7605794,29.3923832), (-81.7605726,29.3914807), (-81.7605659,29.3905783), (-81.7605592,29.3896758), (-81.7605525,29.3887734), (-81.7605458,29.3878709), (-81.7605391,29.3869684), (-81.7605324,29.386066), (-81.7605257,29.3851635), (-81.7605189,29.384261), (-81.7605122,29.3833586), (-81.7605055,29.3824561), (-81.7604988,29.3815536), (-81.759824,29.42939), (-81.7598173,29.4284876), (-81.7598106,29.4275851), (-81.7598039,29.4266826), (-81.7597971,29.4257802), (-81.7597904,29.4248777), (-81.7597837,29.4239753), (-81.759777,29.4230728), (-81.7597703,29.4221703), (-81.7597636,29.4212679), (-81.7597568,29.4203654), (-81.7597501,29.419463), (-81.7597434,29.4185605), (-81.7597367,29.417658), (-81.75973,29.4167556), (-81.7597233,29.4158531), (-81.7597166,29.4149507), (-81.7597098,29.4140482), (-81.7597031,29.4131457), (-81.7596964,29.4122433), (-81.7596897,29.4113408), (-81.759683,29.4104384), (-81.7596763,29.4095359), (-81.7596696,29.4086334), (-81.7596629,29.407731), (-81.7596562,29.4068285), (-81.7596494,29.405926), (-81.7596427,29.4050236), (-81.759636,29.4041211), (-81.7596293,29.4032187), (-81.7596226,29.4023162), (-81.7596159,29.4014137), (-81.7596092,29.4005113), (-81.7596025,29.3996088), (-81.7595958,29.3987063), (-81.7595891,29.3978039), (-81.7595824,29.3969014), (-81.7595757,29.3959989), (-81.759569,29.3950965), (-81.7595622,29.394194), (-81.7595555,29.3932916), (-81.7595488,29.3923891), (-81.7595421,29.3914866), (-81.7595354,29.3905842), (-81.7595287,29.3896817), (-81.759522,29.3887792), (-81.7595153,29.3878768), (-81.7595086,29.3869743), (-81.7595019,29.3860718), (-81.7594952,29.3851694), (-81.7594885,29.3842669), (-81.7594818,29.3833644), (-81.7594751,29.382462), (-81.7594684,29.3815595), (-81.7587931,29.4293959), (-81.7587864,29.4284934), (-81.7587797,29.427591), (-81.758773,29.4266885), (-81.7587663,29.4257861), (-81.7587596,29.4248836), (-81.7587529,29.4239811), (-81.7587462,29.4230787), (-81.7587395,29.4221762), (-81.7587327,29.4212738), (-81.758726,29.4203713), (-81.7587193,29.4194688), (-81.7587126,29.4185664), (-81.7587059,29.4176639), (-81.7586992,29.4167615), (-81.7586925,29.415859), (-81.7586858,29.4149565), (-81.7586791,29.4140541), (-81.7586724,29.4131516), (-81.7586657,29.4122491), (-81.758659,29.4113467), (-81.7586523,29.4104442), (-81.7586456,29.4095418), (-81.7586389,29.4086393), (-81.7586322,29.4077368), (-81.7586255,29.4068344), (-81.7586188,29.4059319), (-81.7586121,29.4050294), (-81.7586054,29.404127), (-81.7585987,29.4032245), (-81.758592,29.4023221), (-81.7585853,29.4014196), (-81.7585786,29.4005171), (-81.7585719,29.3996147), (-81.7585652,29.3987122), (-81.7585585,29.3978097), (-81.7585518,29.3969073), (-81.7585451,29.3960048), (-81.7585384,29.3951024), (-81.7585317,29.3941999), (-81.758525,29.3932974), (-81.7585183,29.392395), (-81.7585116,29.3914925), (-81.7585049,29.39059), (-81.7584982,29.3896876), (-81.7584915,29.3887851), (-81.7584848,29.3878826), (-81.7584781,29.3869802), (-81.7584715,29.3860777), (-81.7584648,29.3851752), (-81.7584581,29.3842728), (-81.7584514,29.3833703), (-81.7584447,29.3824678), (-81.758438,29.3815654), (-81.7577622,29.4294018), (-81.7577555,29.4284993), (-81.7577488,29.4275968), (-81.7577421,29.4266944), (-81.7577354,29.4257919), (-81.7577287,29.4248895), (-81.757722,29.423987), (-81.7577153,29.4230845), (-81.7577086,29.4221821), (-81.7577019,29.4212796), (-81.7576952,29.4203772), (-81.7576885,29.4194747), (-81.7576818,29.4185722), (-81.7576752,29.4176698), (-81.7576685,29.4167673), (-81.7576618,29.4158649), (-81.7576551,29.4149624), (-81.7576484,29.4140599), (-81.7576417,29.4131575), (-81.757635,29.412255), (-81.7576283,29.4113525), (-81.7576216,29.4104501), (-81.7576149,29.4095476), (-81.75760819999999,29.4086452), (-81.7576015,29.4077427), (-81.7575948,29.4068402), (-81.7575881,29.4059378), (-81.7575814,29.4050353), (-81.7575748,29.4041328), (-81.7575681,29.403230399999998), (-81.7575614,29.4023279), (-81.7575547,29.4014255), (-81.757548,29.400523), (-81.7575413,29.3996205), (-81.7575346,29.3987181), (-81.7575279,29.3978156), (-81.7575212,29.3969131), (-81.7575145,29.3960107), (-81.7575079,29.3951082), (-81.7575012,29.3942057), (-81.7574945,29.3933033), (-81.7574878,29.3924008), (-81.7574811,29.3914984), (-81.7574744,29.3905959), (-81.7574677,29.3896934), (-81.7574611,29.388791), (-81.7574544,29.3878885), (-81.7574477,29.386986), (-81.757441,29.3860836), (-81.7574343,29.3851811), (-81.7574276,29.384278600000002), (-81.7574209,29.3833762), (-81.7574143,29.3824737), (-81.7574076,29.3815712), (-81.7567313,29.4294076), (-81.7567246,29.4285052), (-81.7567179,29.4276027), (-81.7567113,29.4267002), (-81.7567046,29.4257978), (-81.7566979,29.4248953), (-81.7566912,29.423992900000002), (-81.7566845,29.4230904), (-81.7566778,29.4221879), (-81.7566711,29.4212855), (-81.7566644,29.420383), (-81.7566577,29.4194806), (-81.7566511,29.4185781), (-81.7566444,29.4176756), (-81.7566377,29.4167732), (-81.756631,29.4158707), (-81.7566243,29.4149683), (-81.7566176,29.4140658), (-81.7566109,29.4131633), (-81.7566043,29.4122609), (-81.7565976,29.4113584), (-81.7565909,29.4104559), (-81.7565842,29.4095535), (-81.7565775,29.408651), (-81.7565708,29.4077486), (-81.7565642,29.4068461), (-81.7565575,29.4059436), (-81.7565508,29.4050412), (-81.7565441,29.4041387), (-81.7565374,29.4032362), (-81.7565308,29.4023338), (-81.75652410000001,29.4014313), (-81.7565174,29.4005288), (-81.7565107,29.3996264), (-81.756504,29.3987239), (-81.7564973,29.3978215), (-81.7564907,29.396919), (-81.756484,29.3960165), (-81.7564773,29.3951141), (-81.7564706,29.3942116), (-81.756464,29.3933091), (-81.7564573,29.3924067), (-81.7564506,29.3915042), (-81.7564439,29.3906017), (-81.7564372,29.3896993), (-81.7564306,29.3887968), (-81.7564239,29.3878943), (-81.7564172,29.3869919), (-81.7564105,29.3860894), (-81.7564039,29.3851869), (-81.7563972,29.3842845), (-81.7563905,29.383382), (-81.7563838,29.3824795), (-81.7563772,29.3815771), (-81.7557004,29.4294135), (-81.7556937,29.428511), (-81.7556871,29.4276086), (-81.7556804,29.4267061), (-81.7556737,29.4258036), (-81.755667,29.4249012), (-81.7556603,29.4239987), (-81.7556537,29.4230963), (-81.755647,29.4221938), (-81.7556403,29.4212913), (-81.7556336,29.4203889), (-81.755627,29.4194864), (-81.7556203,29.418584), (-81.7556136,29.4176815), (-81.7556069,29.416779), (-81.7556002,29.4158766), (-81.7555936,29.4149741), (-81.7555869,29.4140716), (-81.7555802,29.4131692), (-81.7555735,29.4122667), (-81.7555669,29.4113643), (-81.7555602,29.4104618), (-81.7555535,29.4095593), (-81.7555468,29.4086569), (-81.7555402,29.4077544), (-81.7555335,29.4068519), (-81.7555268,29.4059495), (-81.7555201,29.405047), (-81.7555135,29.4041446), (-81.7555068,29.4032421), (-81.7555001,29.4023396), (-81.7554935,29.4014372), (-81.7554868,29.4005347), (-81.7554801,29.3996322), (-81.7554734,29.3987298), (-81.7554668,29.3978273), (-81.7554601,29.3969248), (-81.7554534,29.3960224), (-81.7554468,29.3951199), (-81.7554401,29.3942174), (-81.7554334,29.393315), (-81.7554268,29.3924125), (-81.7554201,29.39151), (-81.7554134,29.3906076), (-81.7554067,29.3897051), (-81.7554001,29.3888027), (-81.7553934,29.3879002), (-81.7553867,29.3869977), (-81.7553801,29.3860953), (-81.7553734,29.3851928), (-81.7553667,29.3842903), (-81.7553601,29.3833879), (-81.7553534,29.3824854), (-81.7553468,29.3815829), (-81.7546695,29.4294193), (-81.7546629,29.428516899999998), (-81.7546562,29.4276144), (-81.7546495,29.4267119), (-81.7546428,29.4258095), (-81.7546362,29.424907), (-81.7546295,29.4240046), (-81.7546228,29.4231021), (-81.7546162,29.4221996), (-81.7546095,29.4212972), (-81.7546028,29.4203947), (-81.7545962,29.4194923), (-81.7545895,29.4185898), (-81.7545828,29.4176873), (-81.7545762,29.4167849), (-81.7545695,29.4158824), (-81.7545628,29.4149799), (-81.7545562,29.4140775), (-81.7545495,29.413175), (-81.7545428,29.4122726), (-81.7545362,29.4113701), (-81.7545295,29.4104676), (-81.7545228,29.4095652), (-81.7545162,29.4086627), (-81.7545095,29.4077602), (-81.7545028,29.4068578), (-81.7544962,29.4059553), (-81.7544895,29.4050529), (-81.7544828,29.4041504), (-81.7544762,29.4032479), (-81.7544695,29.4023455), (-81.7544628,29.401443), (-81.7544562,29.4005405), (-81.7544495,29.3996381), (-81.7544429,29.3987356), (-81.7544362,29.3978331), (-81.7544295,29.3969307), (-81.7544229,29.3960282), (-81.7544162,29.3951257), (-81.7544096,29.3942233), (-81.7544029,29.3933208), (-81.7543962,29.3924183), (-81.7543896,29.3915159), (-81.7543829,29.3906134), (-81.7543763,29.389711), (-81.7543696,29.3888085), (-81.7543629,29.387906), (-81.7543563,29.3870036), (-81.7543496,29.3861011), (-81.754343,29.3851986), (-81.7543363,29.3842962), (-81.7543297,29.3833937), (-81.754323,29.3824912), (-81.7543163,29.3815888), (-81.7536386,29.4294252), (-81.753632,29.4285227), (-81.7536253,29.4276202), (-81.7536187,29.4267178), (-81.753612,29.4258153), (-81.7536053,29.4249129), (-81.7535987,29.4240104), (-81.753592,29.4231079), (-81.7535853,29.4222055), (-81.7535787,29.421303), (-81.753572,29.4204006), (-81.7535654,29.4194981), (-81.7535587,29.4185956), (-81.753552,29.4176932), (-81.7535454,29.4167907), (-81.75353870000001,29.4158882), (-81.7535321,29.4149858), (-81.7535254,29.4140833), (-81.7535188,29.4131809), (-81.7535121,29.4122784), (-81.7535054,29.4113759), (-81.7534988,29.4104735), (-81.7534921,29.409571), (-81.7534855,29.4086685), (-81.7534788,29.4077661), (-81.7534722,29.4068636), (-81.7534655,29.4059611), (-81.7534588,29.4050587), (-81.7534522,29.4041562), (-81.7534455,29.4032538), (-81.7534389,29.4023513), (-81.7534322,29.4014488), (-81.7534256,29.4005464), (-81.7534189,29.3996439), (-81.7534123,29.3987414), (-81.7534056,29.397839), (-81.753399,29.3969365), (-81.7533923,29.396034), (-81.7533857,29.3951316), (-81.753379,29.3942291), (-81.7533724,29.3933266), (-81.7533657,29.3924242), (-81.7533591,29.3915217), (-81.7533524,29.3906192), (-81.7533458,29.3897168), (-81.7533391,29.3888143), (-81.7533325,29.3879118), (-81.7533258,29.3870094), (-81.75331919999999,29.3861069), (-81.7533125,29.3852044), (-81.7533059,29.384302), (-81.7532992,29.3833995), (-81.7532926,29.382497), (-81.7532859,29.3815946), (-81.7526077,29.429431), (-81.7526011,29.4285285), (-81.7525944,29.4276261), (-81.7525878,29.4267236), (-81.7525811,29.4258211), (-81.7525745,29.4249187), (-81.7525678,29.4240162), (-81.7525612,29.4231138), (-81.7525545,29.4222113), (-81.7525479,29.4213088), (-81.7525412,29.4204064), (-81.7525346,29.4195039), (-81.7525279,29.4186015), (-81.7525213,29.417699), (-81.7525146,29.4167965), (-81.752508,29.4158941), (-81.7525013,29.4149916), (-81.7524947,29.414089099999998), (-81.752488,29.4131867), (-81.7524814,29.4122842), (-81.7524747,29.4113818), (-81.7524681,29.4104793), (-81.7524614,29.4095768), (-81.7524548,29.4086744), (-81.7524481,29.4077719), (-81.7524415,29.4068694), (-81.7524348,29.405967), (-81.7524282,29.4050645), (-81.7524216,29.404162), (-81.7524149,29.4032596), (-81.7524083,29.4023571), (-81.7524016,29.4014546), (-81.752395,29.4005522), (-81.7523883,29.3996497), (-81.7523817,29.3987473), (-81.752375,29.3978448), (-81.7523684,29.3969423), (-81.7523618,29.3960399), (-81.7523551,29.3951374), (-81.7523485,29.3942349), (-81.7523418,29.3933325), (-81.7523352,29.39243), (-81.7523285,29.3915275), (-81.7523219,29.3906251), (-81.7523153,29.3897226), (-81.7523086,29.3888201), (-81.752302,29.3879177), (-81.7522953,29.3870152), (-81.7522887,29.386112699999998), (-81.7522821,29.3852103), (-81.7522754,29.3843078), (-81.7522688,29.3834053), (-81.7522621,29.3825029), (-81.7522555,29.3816004), (-81.7515768,29.4294368), (-81.7515702,29.4285344), (-81.7515636,29.4276319), (-81.7515569,29.4267294), (-81.7515503,29.425827), (-81.7515436,29.4249245), (-81.751537,29.424022), (-81.7515303,29.4231196), (-81.7515237,29.4222171), (-81.7515171,29.4213147), (-81.7515104,29.4204122), (-81.7515038,29.4195097), (-81.7514971,29.4186073), (-81.7514905,29.4177048), (-81.7514839,29.4168023), (-81.7514772,29.4158999), (-81.7514706,29.4149974), (-81.7514639,29.414095), (-81.7514573,29.4131925), (-81.7514507,29.41229), (-81.751444,29.4113876), (-81.7514374,29.4104851), (-81.7514307,29.4095826), (-81.7514241,29.4086802), (-81.7514175,29.4077777), (-81.7514108,29.4068753), (-81.7514042,29.4059728), (-81.7513975,29.4050703), (-81.7513909,29.4041679), (-81.7513843,29.4032654), (-81.7513776,29.4023629), (-81.751371,29.4014605), (-81.7513644,29.400558), (-81.7513577,29.3996555), (-81.7513511,29.3987531), (-81.7513445,29.3978506), (-81.7513378,29.3969481), (-81.7513312,29.3960457), (-81.7513246,29.3951432), (-81.7513179,29.3942407), (-81.7513113,29.3933383), (-81.7513047,29.3924358), (-81.751298,29.3915333), (-81.7512914,29.3906309), (-81.7512848,29.3897284), (-81.7512781,29.3888259), (-81.7512715,29.3879235), (-81.7512649,29.387021), (-81.7512582,29.3861185), (-81.7512516,29.3852161), (-81.751245,29.3843136), (-81.7512384,29.3834111), (-81.7512317,29.3825087), (-81.7512251,29.3816062); +drop table if exists coords; +create table coords (x Float32, y Float32) engine = Memory; +insert into coords values (-81.7897198,29.4292161), (-81.7886889,29.4292222), (-81.787658,29.4292283), (-81.7866341,29.4301369), (-81.7866271,29.4292344), (-81.7856171,29.4319479), (-81.7856101,29.4310454), (-81.7856032,29.430143), (-81.7855962,29.4292405), (-81.7845931,29.4328564), (-81.7845862,29.4319539), (-81.7845792,29.4310515), (-81.7845723,29.430149), (-81.7845654,29.4292466), (-81.7835622,29.4328625), (-81.7835553,29.43196), (-81.7835483,29.4310576), (-81.7835414,29.4301551), (-81.7835345,29.4292527), (-81.7825382,29.433771), (-81.7825313,29.4328685), (-81.7825243,29.4319661), (-81.7825174,29.4310636), (-81.7825105,29.4301612), (-81.7825036,29.4292587), (-81.7815142,29.4346795), (-81.7815073,29.433777), (-81.7815003,29.4328746), (-81.7814934,29.4319721), (-81.7814865,29.4310697), (-81.7814796,29.4301672), (-81.7814727,29.4292648), (-81.7804832,29.4346855), (-81.7804763,29.4337831), (-81.7804694,29.4328806), (-81.7804625,29.4319782), (-81.7804556,29.4310757), (-81.7804487,29.4301733), (-81.7804418,29.4292708), (-81.7794592,29.435594), (-81.7794523,29.4346916), (-81.7794454,29.4337891), (-81.7794385,29.4328867), (-81.7794316,29.4319842), (-81.7794247,29.4310818), (-81.7794178,29.4301793), (-81.7794109,29.4292768), (-81.7784282,29.4356001), (-81.7784213,29.4346976), (-81.7784145,29.4337952), (-81.7784076,29.4328927), (-81.7784007,29.4319902), (-81.7783938,29.4310878), (-81.7783869,29.4301853), (-81.77838,29.4292829), (-81.7773973,29.4356061), (-81.7773904,29.4347036), (-81.7773835,29.4338012), (-81.7773766,29.4328987), (-81.7773698,29.4319963), (-81.7773629,29.4310938), (-81.777356,29.4301914), (-81.7773492,29.4292889), (-81.7763732,29.4365146), (-81.7763663,29.4356121), (-81.7763594,29.4347096), (-81.7763526,29.4338072), (-81.7763457,29.4329047), (-81.7763389,29.4320023), (-81.776332,29.4310998), (-81.7763251,29.4301974), (-81.7763183,29.4292949), (-81.7753422,29.4365206), (-81.7753354,29.4356181), (-81.7753285,29.4347156), (-81.7753217,29.4338132), (-81.7753148,29.4329107), (-81.7753079,29.4320083), (-81.7753011,29.4311058), (-81.7752942,29.4302034), (-81.7752874,29.4293009), (-81.7742496,29.4284045), (-81.7742428,29.427502), (-81.774236,29.426599500000002), (-81.7742291,29.4256971), (-81.7742223,29.4247946), (-81.7742154,29.4238922), (-81.7742086,29.4229897), (-81.7742017,29.4220873), (-81.7741949,29.4211848), (-81.774188,29.4202823), (-81.7741812,29.4193799), (-81.7741744,29.4184774), (-81.7741675,29.417575), (-81.7741607,29.4166725), (-81.7741538,29.4157701), (-81.774147,29.4148676), (-81.7741402,29.4139651), (-81.7741333,29.4130627), (-81.7741265,29.4121602), (-81.7741196,29.4112578), (-81.7741128,29.4103553), (-81.774106,29.4094528), (-81.7740991,29.4085504), (-81.7740923,29.4076479), (-81.7740855,29.4067455), (-81.7740786,29.405843), (-81.7740718,29.4049405), (-81.7740649,29.4040381), (-81.7740581,29.4031356), (-81.7740513,29.4022332), (-81.7740444,29.4013307), (-81.7740376,29.4004282), (-81.7740308,29.3995258), (-81.7740239,29.3986233), (-81.7740171,29.3977209), (-81.7740103,29.3968184), (-81.7740034,29.3959159), (-81.7739966,29.3950135), (-81.7739898,29.394111), (-81.7739829,29.3932086), (-81.7739761,29.3923061), (-81.7739693,29.3914036), (-81.7739624,29.3905012), (-81.7739556,29.3895987), (-81.7739488,29.3886963), (-81.7739419,29.3877938), (-81.7739351,29.3868913), (-81.7739283,29.3859889), (-81.7732188,29.4284104), (-81.7732119,29.427508), (-81.7732051,29.4266055), (-81.7731983,29.4257031), (-81.7731914,29.4248006), (-81.7731846,29.4238982), (-81.7731778,29.4229957), (-81.7731709,29.4220932), (-81.7731641,29.4211908), (-81.7731573,29.4202883), (-81.7731504,29.4193859), (-81.7731436,29.4184834), (-81.7731368,29.417581), (-81.7731299,29.4166785), (-81.7731231,29.415776), (-81.7731163,29.4148736), (-81.7731094,29.4139711), (-81.7731026,29.4130687), (-81.7730958,29.4121662), (-81.7730889,29.4112637), (-81.7730821,29.4103613), (-81.7730753,29.4094588), (-81.7730684,29.4085564), (-81.7730616,29.4076539), (-81.7730548,29.4067514), (-81.773048,29.405849), (-81.7730411,29.4049465), (-81.7730343,29.4040441), (-81.7730275,29.4031416), (-81.7730207,29.4022391), (-81.7730138,29.4013367), (-81.773007,29.4004342), (-81.7730002,29.3995318), (-81.7729933,29.3986293), (-81.7729865,29.3977268), (-81.7729797,29.3968244), (-81.7729729,29.3959219), (-81.772966,29.3950195), (-81.7729592,29.394117), (-81.7729524,29.3932145), (-81.7729456,29.3923121), (-81.7729388,29.3914096), (-81.7729319,29.3905072), (-81.7729251,29.3896047), (-81.7729183,29.3887022), (-81.7729115,29.3877998), (-81.7729046,29.3868973), (-81.7728978,29.3859948), (-81.772891,29.3850924), (-81.7728842,29.3841899), (-81.7728774,29.3832875), (-81.7728705,29.382385), (-81.7728637,29.3814825), (-81.7721879,29.4284164), (-81.7721811,29.427514), (-81.7721742,29.4266115), (-81.7721674,29.4257091), (-81.7721606,29.4248066), (-81.7721537,29.4239041), (-81.7721469,29.4230017), (-81.7721401,29.4220992), (-81.7721333,29.4211968), (-81.7721265,29.4202943), (-81.7721196,29.4193918), (-81.7721128,29.4184894), (-81.772106,29.4175869), (-81.7720992,29.4166845), (-81.7720923,29.415782), (-81.7720855,29.4148796), (-81.7720787,29.4139771), (-81.7720719,29.4130746), (-81.772065,29.4121722), (-81.7720582,29.4112697), (-81.7720514,29.4103673), (-81.7720446,29.4094648), (-81.7720378,29.4085623), (-81.7720309,29.4076599), (-81.7720241,29.4067574), (-81.7720173,29.405855), (-81.7720105,29.4049525), (-81.7720037,29.40405), (-81.7719969,29.4031476), (-81.77199,29.402245100000002), (-81.7719832,29.4013427), (-81.7719764,29.4004402), (-81.7719696,29.3995377), (-81.7719628,29.3986353), (-81.771956,29.3977328), (-81.7719491,29.3968304), (-81.7719423,29.3959279), (-81.7719355,29.3950254), (-81.7719287,29.394123), (-81.7719219,29.393220499999998), (-81.7719151,29.3923181), (-81.7719082,29.3914156), (-81.7719014,29.3905131), (-81.7718946,29.3896107), (-81.7718878,29.3887082), (-81.771881,29.3878057), (-81.7718742,29.3869033), (-81.7718674,29.3860008), (-81.7718606,29.3850984), (-81.7718537,29.3841959), (-81.7718469,29.3832934), (-81.7718401,29.382391), (-81.7718333,29.3814885), (-81.771157,29.4284224), (-81.7711502,29.4275199), (-81.7711434,29.4266175), (-81.7711365,29.425715), (-81.7711297,29.4248126), (-81.7711229,29.4239101), (-81.7711161,29.4230077), (-81.7711093,29.4221052), (-81.7711025,29.4212027), (-81.7710957,29.4203003), (-81.7710888,29.4193978), (-81.771082,29.4184954), (-81.7710752,29.4175929), (-81.7710684,29.4166904), (-81.7710616,29.415788), (-81.7710548,29.4148855), (-81.771048,29.4139831), (-81.7710411,29.4130806), (-81.7710343,29.4121781), (-81.7710275,29.4112757), (-81.7710207,29.4103732), (-81.7710139,29.4094708), (-81.7710071,29.4085683), (-81.7710003,29.4076659), (-81.7709935,29.4067634), (-81.7709867,29.4058609), (-81.7709798,29.4049585), (-81.770973,29.404056), (-81.7709662,29.4031536), (-81.7709594,29.4022511), (-81.7709526,29.4013486), (-81.7709458,29.4004462), (-81.770939,29.3995437), (-81.7709322,29.3986412), (-81.7709254,29.3977388), (-81.7709186,29.3968363), (-81.7709118,29.3959339), (-81.770905,29.3950314), (-81.7708982,29.3941289), (-81.7708913,29.3932265), (-81.7708845,29.392324), (-81.7708777,29.3914216), (-81.7708709,29.3905191), (-81.7708641,29.3896166), (-81.7708573,29.3887142), (-81.7708505,29.3878117), (-81.7708437,29.3869092), (-81.7708369,29.3860068), (-81.7708301,29.3851043), (-81.7708233,29.3842019), (-81.7708165,29.3832994), (-81.7708097,29.3823969), (-81.7708029,29.3814945), (-81.7701329,29.4293308), (-81.7701261,29.4284284), (-81.7701193,29.4275259), (-81.7701125,29.4266234), (-81.7701057,29.425721), (-81.7700989,29.4248185), (-81.7700921,29.4239161), (-81.7700853,29.4230136), (-81.7700785,29.4221112), (-81.7700717,29.4212087), (-81.7700649,29.4203062), (-81.770058,29.4194038), (-81.7700512,29.4185013), (-81.7700444,29.4175989), (-81.7700376,29.4166964), (-81.7700308,29.4157939), (-81.770024,29.4148915), (-81.7700172,29.413989), (-81.7700104,29.4130866), (-81.7700036,29.4121841), (-81.7699968,29.4112816), (-81.76999,29.4103792), (-81.7699832,29.4094767), (-81.7699764,29.4085743), (-81.7699696,29.4076718), (-81.7699628,29.4067694), (-81.769956,29.4058669), (-81.7699492,29.4049644), (-81.7699424,29.404062), (-81.7699356,29.4031595), (-81.7699288,29.402257), (-81.769922,29.4013546), (-81.7699152,29.4004521), (-81.7699084,29.3995497), (-81.7699016,29.3986472), (-81.7698948,29.3977447), (-81.769888,29.3968423), (-81.7698812,29.3959398), (-81.7698744,29.3950374), (-81.7698676,29.3941349), (-81.7698608,29.3932324), (-81.769854,29.39233), (-81.7698472,29.3914275), (-81.7698404,29.390525), (-81.7698336,29.3896226), (-81.7698268,29.3887201), (-81.76982,29.3878177), (-81.7698133,29.3869152), (-81.7698065,29.3860127), (-81.7697997,29.3851103), (-81.7697929,29.3842078), (-81.7697861,29.3833053), (-81.7697793,29.3824029), (-81.7697725,29.3815004), (-81.769102,29.4293368), (-81.7690952,29.4284343), (-81.7690884,29.4275319), (-81.7690816,29.4266294), (-81.7690748,29.4257269), (-81.769068,29.4248245), (-81.7690612,29.423922), (-81.7690544,29.4230196), (-81.7690476,29.4221171), (-81.7690409,29.4212147), (-81.7690341,29.4203122), (-81.7690273,29.4194097), (-81.7690205,29.4185073), (-81.7690137,29.4176048), (-81.7690069,29.4167024), (-81.7690001,29.4157999), (-81.7689933,29.4148974), (-81.7689865,29.413995), (-81.7689797,29.4130925), (-81.7689729,29.4121901), (-81.7689661,29.4112876), (-81.7689593,29.4103851), (-81.7689525,29.4094827), (-81.7689457,29.4085802), (-81.7689389,29.4076778), (-81.7689321,29.4067753), (-81.7689253,29.4058728), (-81.7689186,29.4049704), (-81.7689118,29.4040679), (-81.768905,29.4031655), (-81.7688982,29.402263), (-81.7688914,29.4013605), (-81.7688846,29.4004581), (-81.7688778,29.3995556), (-81.768871,29.3986532), (-81.7688642,29.3977507), (-81.7688574,29.3968482), (-81.7688507,29.3959458), (-81.7688439,29.3950433), (-81.7688371,29.3941408), (-81.7688303,29.3932384), (-81.7688235,29.3923359), (-81.7688167,29.3914335), (-81.7688099,29.390531), (-81.7688031,29.3896285), (-81.7687964,29.3887261), (-81.7687896,29.3878236), (-81.7687828,29.3869211), (-81.768776,29.3860187), (-81.7687692,29.3851162), (-81.7687624,29.3842138), (-81.7687557,29.3833113), (-81.7687489,29.3824088), (-81.7687421,29.3815064), (-81.7680711,29.4293427), (-81.7680644,29.4284403), (-81.7680576,29.4275378), (-81.7680508,29.4266353), (-81.768044,29.4257329), (-81.7680372,29.4248304), (-81.7680304,29.423928), (-81.7680236,29.4230255), (-81.7680168,29.4221231), (-81.76801,29.4212206), (-81.7680033,29.4203181), (-81.7679965,29.4194157), (-81.7679897,29.4185132), (-81.7679829,29.4176108), (-81.7679761,29.4167083), (-81.7679693,29.4158058), (-81.7679625,29.4149034), (-81.7679557,29.4140009), (-81.767949,29.4130985), (-81.7679422,29.412196), (-81.7679354,29.4112935), (-81.7679286,29.4103911), (-81.7679218,29.4094886), (-81.767915,29.4085862), (-81.7679083,29.4076837), (-81.7679015,29.4067812), (-81.7678947,29.4058788), (-81.7678879,29.4049763), (-81.7678811,29.4040739), (-81.7678743,29.4031714), (-81.7678676,29.4022689), (-81.7678608,29.4013665), (-81.767854,29.400464), (-81.7678472,29.3995616), (-81.7678404,29.3986591), (-81.7678337,29.3977566), (-81.7678269,29.3968542), (-81.7678201,29.3959517), (-81.7678133,29.3950492), (-81.7678065,29.3941468), (-81.7677998,29.3932443), (-81.767793,29.3923419), (-81.7677862,29.3914394), (-81.7677794,29.3905369), (-81.7677727,29.3896345), (-81.7677659,29.388732), (-81.7677591,29.3878295), (-81.7677523,29.3869271), (-81.7677456,29.3860246), (-81.7677388,29.3851222), (-81.767732,29.3842197), (-81.7677252,29.3833172), (-81.7677185,29.3824148), (-81.7677117,29.3815123), (-81.7670403,29.4293487), (-81.7670335,29.4284462), (-81.7670267,29.4275437), (-81.7670199,29.4266413), (-81.7670131,29.4257388), (-81.7670063,29.4248364), (-81.7669996,29.4239339), (-81.7669928,29.4230315), (-81.766986,29.422128999999998), (-81.7669792,29.4212265), (-81.7669725,29.4203241), (-81.7669657,29.4194216), (-81.7669589,29.4185192), (-81.7669521,29.4176167), (-81.7669453,29.4167142), (-81.7669386,29.4158118), (-81.7669318,29.4149093), (-81.766925,29.4140069), (-81.7669182,29.4131044), (-81.7669115,29.4122019), (-81.7669047,29.4112995), (-81.7668979,29.410397), (-81.7668911,29.4094946), (-81.7668844,29.4085921), (-81.7668776,29.4076896), (-81.7668708,29.4067872), (-81.766864,29.4058847), (-81.7668573,29.4049823), (-81.7668505,29.4040798), (-81.7668437,29.4031773), (-81.7668369,29.4022749), (-81.7668302,29.4013724), (-81.7668234,29.40047), (-81.7668166,29.3995675), (-81.7668099,29.398665), (-81.7668031,29.3977626), (-81.7667963,29.3968601), (-81.7667895,29.3959576), (-81.7667828,29.3950552), (-81.766776,29.3941527), (-81.7667692,29.3932503), (-81.7667625,29.3923478), (-81.7667557,29.3914453), (-81.7667489,29.3905429), (-81.7667422,29.3896404), (-81.7667354,29.3887379), (-81.7667286,29.3878355), (-81.7667219,29.386933), (-81.7667151,29.3860305), (-81.7667083,29.3851281), (-81.7667016,29.3842256), (-81.7666948,29.3833232), (-81.766688,29.3824207), (-81.7666813,29.3815182), (-81.7660094,29.4293546), (-81.7660026,29.4284521), (-81.7659958,29.4275497), (-81.765989,29.4266472), (-81.7659823,29.4257448), (-81.7659755,29.4248423), (-81.7659687,29.4239398), (-81.765962,29.4230374), (-81.7659552,29.4221349), (-81.7659484,29.4212325), (-81.7659417,29.42033), (-81.7659349,29.4194275), (-81.7659281,29.4185251), (-81.7659213,29.4176226), (-81.7659146,29.4167202), (-81.7659078,29.4158177), (-81.765901,29.4149153), (-81.7658943,29.4140128), (-81.7658875,29.4131103), (-81.7658807,29.4122079), (-81.765874,29.4113054), (-81.7658672,29.4104029), (-81.7658604,29.4095005), (-81.7658537,29.408598), (-81.7658469,29.4076956), (-81.7658401,29.4067931), (-81.7658334,29.4058906), (-81.7658266,29.4049882), (-81.7658199,29.4040857), (-81.7658131,29.4031833), (-81.7658063,29.4022808), (-81.7657996,29.4013783), (-81.7657928,29.4004759), (-81.765786,29.3995734), (-81.7657793,29.398671), (-81.7657725,29.3977685), (-81.7657658,29.396866), (-81.765759,29.3959636), (-81.7657522,29.3950611), (-81.7657455,29.3941586), (-81.7657387,29.3932562), (-81.765732,29.3923537), (-81.7657252,29.3914513), (-81.7657184,29.3905488), (-81.7657117,29.3896463), (-81.7657049,29.3887439), (-81.7656982,29.3878414), (-81.7656914,29.3869389), (-81.7656846,29.3860365), (-81.7656779,29.385134), (-81.7656711,29.3842315), (-81.7656644,29.3833291), (-81.7656576,29.3824266), (-81.7656509,29.3815241), (-81.7649785,29.4293605), (-81.7649717,29.4284581), (-81.7649649,29.4275556), (-81.7649582,29.4266531), (-81.7649514,29.4257507), (-81.7649447,29.4248482), (-81.7649379,29.4239458), (-81.7649311,29.4230433), (-81.7649244,29.4221408), (-81.7649176,29.4212384), (-81.7649109,29.4203359), (-81.7649041,29.4194335), (-81.7648973,29.418531), (-81.7648906,29.4176286), (-81.7648838,29.416726099999998), (-81.7648771,29.4158236), (-81.7648703,29.4149212), (-81.7648635,29.4140187), (-81.7648568,29.4131163), (-81.76485,29.4122138), (-81.7648433,29.4113113), (-81.7648365,29.4104089), (-81.7648298,29.4095064), (-81.764823,29.4086039), (-81.7648162,29.4077015), (-81.7648095,29.406799), (-81.7648027,29.4058966), (-81.764796,29.4049941), (-81.7647892,29.4040916), (-81.7647825,29.4031892), (-81.7647757,29.4022867), (-81.764769,29.4013843), (-81.7647622,29.4004818), (-81.7647554,29.3995793), (-81.7647487,29.3986769), (-81.7647419,29.3977744), (-81.7647352,29.3968719), (-81.7647284,29.3959695), (-81.7647217,29.395067), (-81.7647149,29.3941646), (-81.7647082,29.3932621), (-81.7647014,29.3923596), (-81.7646947,29.3914572), (-81.7646879,29.3905547), (-81.7646812,29.3896522), (-81.7646744,29.3887498), (-81.7646677,29.3878473), (-81.7646609,29.3869448), (-81.7646542,29.3860424), (-81.7646474,29.3851399), (-81.7646407,29.3842375), (-81.7646339,29.383335), (-81.7646272,29.3824325), (-81.7646204,29.3815301), (-81.7639476,29.4293664), (-81.7639408,29.428464), (-81.7639341,29.4275615), (-81.7639273,29.4266591), (-81.7639206,29.4257566), (-81.7639138,29.4248541), (-81.7639071,29.4239517), (-81.7639003,29.4230492), (-81.7638936,29.4221468), (-81.7638868,29.4212443), (-81.7638801,29.4203418), (-81.7638733,29.4194394), (-81.7638666,29.4185369), (-81.7638598,29.4176345), (-81.763853,29.416732), (-81.7638463,29.4158295), (-81.7638396,29.4149271), (-81.7638328,29.4140246), (-81.7638261,29.4131222), (-81.7638193,29.4122197), (-81.7638126,29.4113172), (-81.7638058,29.4104148), (-81.7637991,29.4095123), (-81.7637923,29.4086099), (-81.7637856,29.4077074), (-81.7637788,29.4068049), (-81.7637721,29.4059025), (-81.7637653,29.405), (-81.7637586,29.4040976), (-81.7637518,29.4031951), (-81.7637451,29.4022926), (-81.7637383,29.4013902), (-81.7637316,29.4004877), (-81.7637249,29.3995852), (-81.7637181,29.3986828), (-81.7637114,29.3977803), (-81.7637046,29.3968779), (-81.7636979,29.3959754), (-81.7636911,29.3950729), (-81.7636844,29.3941705), (-81.7636777,29.393268), (-81.7636709,29.3923655), (-81.7636642,29.3914631), (-81.7636574,29.3905606), (-81.7636507,29.3896581), (-81.763644,29.3887557), (-81.7636372,29.3878532), (-81.7636305,29.3869508), (-81.7636237,29.3860483), (-81.763617,29.3851458), (-81.7636103,29.3842434), (-81.7636035,29.3833409), (-81.7635968,29.3824384), (-81.76359,29.381536), (-81.7629167,29.4293723), (-81.7629099,29.4284699), (-81.7629032,29.4275674), (-81.7628965,29.426665), (-81.7628897,29.4257625), (-81.762883,29.42486), (-81.7628762,29.4239576), (-81.7628695,29.4230551), (-81.7628627,29.4221527), (-81.762856,29.4212502), (-81.7628493,29.4203478), (-81.7628425,29.4194453), (-81.7628358,29.4185428), (-81.762829,29.4176404), (-81.7628223,29.4167379), (-81.7628155,29.4158355), (-81.7628088,29.414933), (-81.7628021,29.4140305), (-81.7627953,29.4131281), (-81.7627886,29.4122256), (-81.7627818,29.4113231), (-81.7627751,29.4104207), (-81.7627684,29.4095182), (-81.7627616,29.4086158), (-81.7627549,29.4077133), (-81.7627482,29.4068108), (-81.7627414,29.4059084), (-81.7627347,29.4050059), (-81.7627279,29.4041035), (-81.7627212,29.403201), (-81.7627145,29.4022985), (-81.76270769999999,29.4013961), (-81.762701,29.4004936), (-81.7626943,29.3995911), (-81.7626875,29.3986887), (-81.7626808,29.3977862), (-81.7626741,29.3968838), (-81.7626673,29.3959813), (-81.7626606,29.3950788), (-81.7626539,29.3941764), (-81.7626471,29.3932739), (-81.7626404,29.3923714), (-81.7626337,29.391469), (-81.7626269,29.3905665), (-81.7626202,29.389664), (-81.7626135,29.3887616), (-81.7626067,29.3878591), (-81.7626,29.3869567), (-81.7625933,29.3860542), (-81.7625865,29.3851517), (-81.7625798,29.3842493), (-81.7625731,29.383346799999998), (-81.7625664,29.3824443), (-81.7625596,29.3815419), (-81.7618858,29.4293782), (-81.7618791,29.4284758), (-81.7618723,29.4275733), (-81.7618656,29.4266709), (-81.7618589,29.4257684), (-81.7618521,29.4248659), (-81.7618454,29.4239635), (-81.7618386,29.423061), (-81.7618319,29.4221586), (-81.7618252,29.4212561), (-81.7618184,29.4203537), (-81.7618117,29.4194512), (-81.761805,29.4185487), (-81.7617983,29.4176463), (-81.7617915,29.4167438), (-81.7617848,29.4158413), (-81.7617781,29.4149389), (-81.7617713,29.4140364), (-81.7617646,29.413134), (-81.7617579,29.4122315), (-81.7617511,29.411329), (-81.7617444,29.4104266), (-81.7617377,29.4095241), (-81.7617309,29.4086217), (-81.7617242,29.4077192), (-81.7617175,29.4068167), (-81.7617108,29.4059143), (-81.761704,29.4050118), (-81.7616973,29.404109300000002), (-81.7616906,29.4032069), (-81.7616839,29.4023044), (-81.7616771,29.401402), (-81.7616704,29.4004995), (-81.7616637,29.399597), (-81.7616569,29.3986946), (-81.7616502,29.3977921), (-81.7616435,29.3968896), (-81.7616368,29.3959872), (-81.76163,29.3950847), (-81.7616233,29.3941823), (-81.7616166,29.3932798), (-81.7616099,29.3923773), (-81.7616032,29.3914749), (-81.7615964,29.3905724), (-81.7615897,29.3896699), (-81.761583,29.3887675), (-81.7615763,29.387865), (-81.7615695,29.3869625), (-81.7615628,29.3860601), (-81.7615561,29.3851576), (-81.7615494,29.3842551), (-81.7615427,29.3833527), (-81.7615359,29.3824502), (-81.7615292,29.3815478), (-81.7608549,29.4293841), (-81.7608482,29.4284817), (-81.7608414,29.4275792), (-81.7608347,29.4266768), (-81.760828,29.4257743), (-81.7608213,29.4248718), (-81.7608145,29.4239694), (-81.7608078,29.4230669), (-81.7608011,29.4221645), (-81.7607944,29.421262), (-81.7607876,29.4203595), (-81.7607809,29.4194571), (-81.7607742,29.4185546), (-81.7607675,29.4176522), (-81.7607608,29.4167497), (-81.760754,29.4158472), (-81.7607473,29.4149448), (-81.7607406,29.4140423), (-81.7607339,29.4131399), (-81.7607271,29.4122374), (-81.7607204,29.4113349), (-81.7607137,29.4104325), (-81.760707,29.40953), (-81.7607003,29.4086275), (-81.7606935,29.4077251), (-81.7606868,29.4068226), (-81.7606801,29.4059202), (-81.7606734,29.4050177), (-81.7606667,29.4041152), (-81.76066,29.4032128), (-81.7606532,29.4023103), (-81.76064650000001,29.4014078), (-81.7606398,29.4005054), (-81.7606331,29.3996029), (-81.7606264,29.3987005), (-81.7606196,29.397798), (-81.7606129,29.3968955), (-81.7606062,29.3959931), (-81.7605995,29.3950906), (-81.7605928,29.3941881), (-81.7605861,29.3932857), (-81.7605794,29.3923832), (-81.7605726,29.3914807), (-81.7605659,29.3905783), (-81.7605592,29.3896758), (-81.7605525,29.3887734), (-81.7605458,29.3878709), (-81.7605391,29.3869684), (-81.7605324,29.386066), (-81.7605257,29.3851635), (-81.7605189,29.384261), (-81.7605122,29.3833586), (-81.7605055,29.3824561), (-81.7604988,29.3815536), (-81.759824,29.42939), (-81.7598173,29.4284876), (-81.7598106,29.4275851), (-81.7598039,29.4266826), (-81.7597971,29.4257802), (-81.7597904,29.4248777), (-81.7597837,29.4239753), (-81.759777,29.4230728), (-81.7597703,29.4221703), (-81.7597636,29.4212679), (-81.7597568,29.4203654), (-81.7597501,29.419463), (-81.7597434,29.4185605), (-81.7597367,29.417658), (-81.75973,29.4167556), (-81.7597233,29.4158531), (-81.7597166,29.4149507), (-81.7597098,29.4140482), (-81.7597031,29.4131457), (-81.7596964,29.4122433), (-81.7596897,29.4113408), (-81.759683,29.4104384), (-81.7596763,29.4095359), (-81.7596696,29.4086334), (-81.7596629,29.407731), (-81.7596562,29.4068285), (-81.7596494,29.405926), (-81.7596427,29.4050236), (-81.759636,29.4041211), (-81.7596293,29.4032187), (-81.7596226,29.4023162), (-81.7596159,29.4014137), (-81.7596092,29.4005113), (-81.7596025,29.3996088), (-81.7595958,29.3987063), (-81.7595891,29.3978039), (-81.7595824,29.3969014), (-81.7595757,29.3959989), (-81.759569,29.3950965), (-81.7595622,29.394194), (-81.7595555,29.3932916), (-81.7595488,29.3923891), (-81.7595421,29.3914866), (-81.7595354,29.3905842), (-81.7595287,29.3896817), (-81.759522,29.3887792), (-81.7595153,29.3878768), (-81.7595086,29.3869743), (-81.7595019,29.3860718), (-81.7594952,29.3851694), (-81.7594885,29.3842669), (-81.7594818,29.3833644), (-81.7594751,29.382462), (-81.7594684,29.3815595), (-81.7587931,29.4293959), (-81.7587864,29.4284934), (-81.7587797,29.427591), (-81.758773,29.4266885), (-81.7587663,29.4257861), (-81.7587596,29.4248836), (-81.7587529,29.4239811), (-81.7587462,29.4230787), (-81.7587395,29.4221762), (-81.7587327,29.4212738), (-81.758726,29.4203713), (-81.7587193,29.4194688), (-81.7587126,29.4185664), (-81.7587059,29.4176639), (-81.7586992,29.4167615), (-81.7586925,29.415859), (-81.7586858,29.4149565), (-81.7586791,29.4140541), (-81.7586724,29.4131516), (-81.7586657,29.4122491), (-81.758659,29.4113467), (-81.7586523,29.4104442), (-81.7586456,29.4095418), (-81.7586389,29.4086393), (-81.7586322,29.4077368), (-81.7586255,29.4068344), (-81.7586188,29.4059319), (-81.7586121,29.4050294), (-81.7586054,29.404127), (-81.7585987,29.4032245), (-81.758592,29.4023221), (-81.7585853,29.4014196), (-81.7585786,29.4005171), (-81.7585719,29.3996147), (-81.7585652,29.3987122), (-81.7585585,29.3978097), (-81.7585518,29.3969073), (-81.7585451,29.3960048), (-81.7585384,29.3951024), (-81.7585317,29.3941999), (-81.758525,29.3932974), (-81.7585183,29.392395), (-81.7585116,29.3914925), (-81.7585049,29.39059), (-81.7584982,29.3896876), (-81.7584915,29.3887851), (-81.7584848,29.3878826), (-81.7584781,29.3869802), (-81.7584715,29.3860777), (-81.7584648,29.3851752), (-81.7584581,29.3842728), (-81.7584514,29.3833703), (-81.7584447,29.3824678), (-81.758438,29.3815654), (-81.7577622,29.4294018), (-81.7577555,29.4284993), (-81.7577488,29.4275968), (-81.7577421,29.4266944), (-81.7577354,29.4257919), (-81.7577287,29.4248895), (-81.757722,29.423987), (-81.7577153,29.4230845), (-81.7577086,29.4221821), (-81.7577019,29.4212796), (-81.7576952,29.4203772), (-81.7576885,29.4194747), (-81.7576818,29.4185722), (-81.7576752,29.4176698), (-81.7576685,29.4167673), (-81.7576618,29.4158649), (-81.7576551,29.4149624), (-81.7576484,29.4140599), (-81.7576417,29.4131575), (-81.757635,29.412255), (-81.7576283,29.4113525), (-81.7576216,29.4104501), (-81.7576149,29.4095476), (-81.75760819999999,29.4086452), (-81.7576015,29.4077427), (-81.7575948,29.4068402), (-81.7575881,29.4059378), (-81.7575814,29.4050353), (-81.7575748,29.4041328), (-81.7575681,29.403230399999998), (-81.7575614,29.4023279), (-81.7575547,29.4014255), (-81.757548,29.400523), (-81.7575413,29.3996205), (-81.7575346,29.3987181), (-81.7575279,29.3978156), (-81.7575212,29.3969131), (-81.7575145,29.3960107), (-81.7575079,29.3951082), (-81.7575012,29.3942057), (-81.7574945,29.3933033), (-81.7574878,29.3924008), (-81.7574811,29.3914984), (-81.7574744,29.3905959), (-81.7574677,29.3896934), (-81.7574611,29.388791), (-81.7574544,29.3878885), (-81.7574477,29.386986), (-81.757441,29.3860836), (-81.7574343,29.3851811), (-81.7574276,29.384278600000002), (-81.7574209,29.3833762), (-81.7574143,29.3824737), (-81.7574076,29.3815712), (-81.7567313,29.4294076), (-81.7567246,29.4285052), (-81.7567179,29.4276027), (-81.7567113,29.4267002), (-81.7567046,29.4257978), (-81.7566979,29.4248953), (-81.7566912,29.423992900000002), (-81.7566845,29.4230904), (-81.7566778,29.4221879), (-81.7566711,29.4212855), (-81.7566644,29.420383), (-81.7566577,29.4194806), (-81.7566511,29.4185781), (-81.7566444,29.4176756), (-81.7566377,29.4167732), (-81.756631,29.4158707), (-81.7566243,29.4149683), (-81.7566176,29.4140658), (-81.7566109,29.4131633), (-81.7566043,29.4122609), (-81.7565976,29.4113584), (-81.7565909,29.4104559), (-81.7565842,29.4095535), (-81.7565775,29.408651), (-81.7565708,29.4077486), (-81.7565642,29.4068461), (-81.7565575,29.4059436), (-81.7565508,29.4050412), (-81.7565441,29.4041387), (-81.7565374,29.4032362), (-81.7565308,29.4023338), (-81.75652410000001,29.4014313), (-81.7565174,29.4005288), (-81.7565107,29.3996264), (-81.756504,29.3987239), (-81.7564973,29.3978215), (-81.7564907,29.396919), (-81.756484,29.3960165), (-81.7564773,29.3951141), (-81.7564706,29.3942116), (-81.756464,29.3933091), (-81.7564573,29.3924067), (-81.7564506,29.3915042), (-81.7564439,29.3906017), (-81.7564372,29.3896993), (-81.7564306,29.3887968), (-81.7564239,29.3878943), (-81.7564172,29.3869919), (-81.7564105,29.3860894), (-81.7564039,29.3851869), (-81.7563972,29.3842845), (-81.7563905,29.383382), (-81.7563838,29.3824795), (-81.7563772,29.3815771), (-81.7557004,29.4294135), (-81.7556937,29.428511), (-81.7556871,29.4276086), (-81.7556804,29.4267061), (-81.7556737,29.4258036), (-81.755667,29.4249012), (-81.7556603,29.4239987), (-81.7556537,29.4230963), (-81.755647,29.4221938), (-81.7556403,29.4212913), (-81.7556336,29.4203889), (-81.755627,29.4194864), (-81.7556203,29.418584), (-81.7556136,29.4176815), (-81.7556069,29.416779), (-81.7556002,29.4158766), (-81.7555936,29.4149741), (-81.7555869,29.4140716), (-81.7555802,29.4131692), (-81.7555735,29.4122667), (-81.7555669,29.4113643), (-81.7555602,29.4104618), (-81.7555535,29.4095593), (-81.7555468,29.4086569), (-81.7555402,29.4077544), (-81.7555335,29.4068519), (-81.7555268,29.4059495), (-81.7555201,29.405047), (-81.7555135,29.4041446), (-81.7555068,29.4032421), (-81.7555001,29.4023396), (-81.7554935,29.4014372), (-81.7554868,29.4005347), (-81.7554801,29.3996322), (-81.7554734,29.3987298), (-81.7554668,29.3978273), (-81.7554601,29.3969248), (-81.7554534,29.3960224), (-81.7554468,29.3951199), (-81.7554401,29.3942174), (-81.7554334,29.393315), (-81.7554268,29.3924125), (-81.7554201,29.39151), (-81.7554134,29.3906076), (-81.7554067,29.3897051), (-81.7554001,29.3888027), (-81.7553934,29.3879002), (-81.7553867,29.3869977), (-81.7553801,29.3860953), (-81.7553734,29.3851928), (-81.7553667,29.3842903), (-81.7553601,29.3833879), (-81.7553534,29.3824854), (-81.7553468,29.3815829), (-81.7546695,29.4294193), (-81.7546629,29.428516899999998), (-81.7546562,29.4276144), (-81.7546495,29.4267119), (-81.7546428,29.4258095), (-81.7546362,29.424907), (-81.7546295,29.4240046), (-81.7546228,29.4231021), (-81.7546162,29.4221996), (-81.7546095,29.4212972), (-81.7546028,29.4203947), (-81.7545962,29.4194923), (-81.7545895,29.4185898), (-81.7545828,29.4176873), (-81.7545762,29.4167849), (-81.7545695,29.4158824), (-81.7545628,29.4149799), (-81.7545562,29.4140775), (-81.7545495,29.413175), (-81.7545428,29.4122726), (-81.7545362,29.4113701), (-81.7545295,29.4104676), (-81.7545228,29.4095652), (-81.7545162,29.4086627), (-81.7545095,29.4077602), (-81.7545028,29.4068578), (-81.7544962,29.4059553), (-81.7544895,29.4050529), (-81.7544828,29.4041504), (-81.7544762,29.4032479), (-81.7544695,29.4023455), (-81.7544628,29.401443), (-81.7544562,29.4005405), (-81.7544495,29.3996381), (-81.7544429,29.3987356), (-81.7544362,29.3978331), (-81.7544295,29.3969307), (-81.7544229,29.3960282), (-81.7544162,29.3951257), (-81.7544096,29.3942233), (-81.7544029,29.3933208), (-81.7543962,29.3924183), (-81.7543896,29.3915159), (-81.7543829,29.3906134), (-81.7543763,29.389711), (-81.7543696,29.3888085), (-81.7543629,29.387906), (-81.7543563,29.3870036), (-81.7543496,29.3861011), (-81.754343,29.3851986), (-81.7543363,29.3842962), (-81.7543297,29.3833937), (-81.754323,29.3824912), (-81.7543163,29.3815888), (-81.7536386,29.4294252), (-81.753632,29.4285227), (-81.7536253,29.4276202), (-81.7536187,29.4267178), (-81.753612,29.4258153), (-81.7536053,29.4249129), (-81.7535987,29.4240104), (-81.753592,29.4231079), (-81.7535853,29.4222055), (-81.7535787,29.421303), (-81.753572,29.4204006), (-81.7535654,29.4194981), (-81.7535587,29.4185956), (-81.753552,29.4176932), (-81.7535454,29.4167907), (-81.75353870000001,29.4158882), (-81.7535321,29.4149858), (-81.7535254,29.4140833), (-81.7535188,29.4131809), (-81.7535121,29.4122784), (-81.7535054,29.4113759), (-81.7534988,29.4104735), (-81.7534921,29.409571), (-81.7534855,29.4086685), (-81.7534788,29.4077661), (-81.7534722,29.4068636), (-81.7534655,29.4059611), (-81.7534588,29.4050587), (-81.7534522,29.4041562), (-81.7534455,29.4032538), (-81.7534389,29.4023513), (-81.7534322,29.4014488), (-81.7534256,29.4005464), (-81.7534189,29.3996439), (-81.7534123,29.3987414), (-81.7534056,29.397839), (-81.753399,29.3969365), (-81.7533923,29.396034), (-81.7533857,29.3951316), (-81.753379,29.3942291), (-81.7533724,29.3933266), (-81.7533657,29.3924242), (-81.7533591,29.3915217), (-81.7533524,29.3906192), (-81.7533458,29.3897168), (-81.7533391,29.3888143), (-81.7533325,29.3879118), (-81.7533258,29.3870094), (-81.75331919999999,29.3861069), (-81.7533125,29.3852044), (-81.7533059,29.384302), (-81.7532992,29.3833995), (-81.7532926,29.382497), (-81.7532859,29.3815946), (-81.7526077,29.429431), (-81.7526011,29.4285285), (-81.7525944,29.4276261), (-81.7525878,29.4267236), (-81.7525811,29.4258211), (-81.7525745,29.4249187), (-81.7525678,29.4240162), (-81.7525612,29.4231138), (-81.7525545,29.4222113), (-81.7525479,29.4213088), (-81.7525412,29.4204064), (-81.7525346,29.4195039), (-81.7525279,29.4186015), (-81.7525213,29.417699), (-81.7525146,29.4167965), (-81.752508,29.4158941), (-81.7525013,29.4149916), (-81.7524947,29.414089099999998), (-81.752488,29.4131867), (-81.7524814,29.4122842), (-81.7524747,29.4113818), (-81.7524681,29.4104793), (-81.7524614,29.4095768), (-81.7524548,29.4086744), (-81.7524481,29.4077719), (-81.7524415,29.4068694), (-81.7524348,29.405967), (-81.7524282,29.4050645), (-81.7524216,29.404162), (-81.7524149,29.4032596), (-81.7524083,29.4023571), (-81.7524016,29.4014546), (-81.752395,29.4005522), (-81.7523883,29.3996497), (-81.7523817,29.3987473), (-81.752375,29.3978448), (-81.7523684,29.3969423), (-81.7523618,29.3960399), (-81.7523551,29.3951374), (-81.7523485,29.3942349), (-81.7523418,29.3933325), (-81.7523352,29.39243), (-81.7523285,29.3915275), (-81.7523219,29.3906251), (-81.7523153,29.3897226), (-81.7523086,29.3888201), (-81.752302,29.3879177), (-81.7522953,29.3870152), (-81.7522887,29.386112699999998), (-81.7522821,29.3852103), (-81.7522754,29.3843078), (-81.7522688,29.3834053), (-81.7522621,29.3825029), (-81.7522555,29.3816004), (-81.7515768,29.4294368), (-81.7515702,29.4285344), (-81.7515636,29.4276319), (-81.7515569,29.4267294), (-81.7515503,29.425827), (-81.7515436,29.4249245), (-81.751537,29.424022), (-81.7515303,29.4231196), (-81.7515237,29.4222171), (-81.7515171,29.4213147), (-81.7515104,29.4204122), (-81.7515038,29.4195097), (-81.7514971,29.4186073), (-81.7514905,29.4177048), (-81.7514839,29.4168023), (-81.7514772,29.4158999), (-81.7514706,29.4149974), (-81.7514639,29.414095), (-81.7514573,29.4131925), (-81.7514507,29.41229), (-81.751444,29.4113876), (-81.7514374,29.4104851), (-81.7514307,29.4095826), (-81.7514241,29.4086802), (-81.7514175,29.4077777), (-81.7514108,29.4068753), (-81.7514042,29.4059728), (-81.7513975,29.4050703), (-81.7513909,29.4041679), (-81.7513843,29.4032654), (-81.7513776,29.4023629), (-81.751371,29.4014605), (-81.7513644,29.400558), (-81.7513577,29.3996555), (-81.7513511,29.3987531), (-81.7513445,29.3978506), (-81.7513378,29.3969481), (-81.7513312,29.3960457), (-81.7513246,29.3951432), (-81.7513179,29.3942407), (-81.7513113,29.3933383), (-81.7513047,29.3924358), (-81.751298,29.3915333), (-81.7512914,29.3906309), (-81.7512848,29.3897284), (-81.7512781,29.3888259), (-81.7512715,29.3879235), (-81.7512649,29.387021), (-81.7512582,29.3861185), (-81.7512516,29.3852161), (-81.751245,29.3843136), (-81.7512384,29.3834111), (-81.7512317,29.3825087), (-81.7512251,29.3816062); -select count(), sum(pointInPolygon((x, y),[(-82.311206, 28.960046), (-81.658722, 28.960345), (-81.65921, 29.047816), (-81.638697, 29.047761), (-81.641902, 29.276992), (-81.680709, 29.323243), (-81.675429, 29.338641), (-81.656377, 29.337981), (-81.668564, 29.371704), (-81.741634, 29.371123), (-81.741671, 29.429891), (-81.774905, 29.429249), (-81.776206, 29.487448), (-81.842765, 29.486042), (-81.844929, 29.521679), (-81.912052, 29.503906), (-81.93199, 29.51639), (-82.03174, 29.492385), (-82.055896, 29.471639), (-82.056748, 29.439952), (-82.080922, 29.440351), (-82.099886, 29.418665), (-82.101119, 29.438298), (-82.134555, 29.434982), (-82.148231, 29.417245), (-82.211144, 29.429693), (-82.212727, 29.465624), (-82.188, 29.456239), (-82.211448, 29.484017), (-82.40662, 29.485049), (-82.403059, 29.215536), (-82.534829, 29.2147), (-82.535191, 29.041186), (-82.471915, 29.052551), (-82.418649, 29.013144), (-82.401814, 29.019004), (-82.365594, 29.00246), (-82.311206, 28.960046)])) from test.coords; -drop table if exists test.coords; +select count(), sum(pointInPolygon((x, y),[(-82.311206, 28.960046), (-81.658722, 28.960345), (-81.65921, 29.047816), (-81.638697, 29.047761), (-81.641902, 29.276992), (-81.680709, 29.323243), (-81.675429, 29.338641), (-81.656377, 29.337981), (-81.668564, 29.371704), (-81.741634, 29.371123), (-81.741671, 29.429891), (-81.774905, 29.429249), (-81.776206, 29.487448), (-81.842765, 29.486042), (-81.844929, 29.521679), (-81.912052, 29.503906), (-81.93199, 29.51639), (-82.03174, 29.492385), (-82.055896, 29.471639), (-82.056748, 29.439952), (-82.080922, 29.440351), (-82.099886, 29.418665), (-82.101119, 29.438298), (-82.134555, 29.434982), (-82.148231, 29.417245), (-82.211144, 29.429693), (-82.212727, 29.465624), (-82.188, 29.456239), (-82.211448, 29.484017), (-82.40662, 29.485049), (-82.403059, 29.215536), (-82.534829, 29.2147), (-82.535191, 29.041186), (-82.471915, 29.052551), (-82.418649, 29.013144), (-82.401814, 29.019004), (-82.365594, 29.00246), (-82.311206, 28.960046)])) from coords; +drop table if exists coords; diff --git a/dbms/tests/queries/0_stateless/00502_sum_map.sql b/dbms/tests/queries/0_stateless/00502_sum_map.sql index d70a3bfbe7f..23de78f2ad1 100644 --- a/dbms/tests/queries/0_stateless/00502_sum_map.sql +++ b/dbms/tests/queries/0_stateless/00502_sum_map.sql @@ -1,31 +1,31 @@ SET send_logs_level = 'none'; CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.sum_map; -CREATE TABLE test.sum_map(date Date, timeslot DateTime, statusMap Nested(status UInt16, requests UInt64)) ENGINE = Log; +DROP TABLE IF EXISTS sum_map; +CREATE TABLE sum_map(date Date, timeslot DateTime, statusMap Nested(status UInt16, requests UInt64)) ENGINE = Log; -INSERT INTO test.sum_map VALUES ('2000-01-01', '2000-01-01 00:00:00', [1, 2, 3], [10, 10, 10]), ('2000-01-01', '2000-01-01 00:00:00', [3, 4, 5], [10, 10, 10]), ('2000-01-01', '2000-01-01 00:01:00', [4, 5, 6], [10, 10, 10]), ('2000-01-01', '2000-01-01 00:01:00', [6, 7, 8], [10, 10, 10]); +INSERT INTO sum_map VALUES ('2000-01-01', '2000-01-01 00:00:00', [1, 2, 3], [10, 10, 10]), ('2000-01-01', '2000-01-01 00:00:00', [3, 4, 5], [10, 10, 10]), ('2000-01-01', '2000-01-01 00:01:00', [4, 5, 6], [10, 10, 10]), ('2000-01-01', '2000-01-01 00:01:00', [6, 7, 8], [10, 10, 10]); -SELECT * FROM test.sum_map ORDER BY timeslot; -SELECT sumMap(statusMap.status, statusMap.requests) FROM test.sum_map; -SELECT sumMapMerge(s) FROM (SELECT sumMapState(statusMap.status, statusMap.requests) AS s FROM test.sum_map); -SELECT timeslot, sumMap(statusMap.status, statusMap.requests) FROM test.sum_map GROUP BY timeslot ORDER BY timeslot; -SELECT timeslot, sumMap(statusMap.status, statusMap.requests).1, sumMap(statusMap.status, statusMap.requests).2 FROM test.sum_map GROUP BY timeslot ORDER BY timeslot; +SELECT * FROM sum_map ORDER BY timeslot; +SELECT sumMap(statusMap.status, statusMap.requests) FROM sum_map; +SELECT sumMapMerge(s) FROM (SELECT sumMapState(statusMap.status, statusMap.requests) AS s FROM sum_map); +SELECT timeslot, sumMap(statusMap.status, statusMap.requests) FROM sum_map GROUP BY timeslot ORDER BY timeslot; +SELECT timeslot, sumMap(statusMap.status, statusMap.requests).1, sumMap(statusMap.status, statusMap.requests).2 FROM sum_map GROUP BY timeslot ORDER BY timeslot; -SELECT sumMapFiltered([1])(statusMap.status, statusMap.requests) FROM test.sum_map; -SELECT sumMapFiltered([1, 4, 8])(statusMap.status, statusMap.requests) FROM test.sum_map; +SELECT sumMapFiltered([1])(statusMap.status, statusMap.requests) FROM sum_map; +SELECT sumMapFiltered([1, 4, 8])(statusMap.status, statusMap.requests) FROM sum_map; -DROP TABLE test.sum_map; +DROP TABLE sum_map; -DROP TABLE IF EXISTS test.sum_map_overflow; -CREATE TABLE test.sum_map_overflow(events Array(UInt8), counts Array(UInt8)) ENGINE = Log; +DROP TABLE IF EXISTS sum_map_overflow; +CREATE TABLE sum_map_overflow(events Array(UInt8), counts Array(UInt8)) ENGINE = Log; -INSERT INTO test.sum_map_overflow VALUES ([1], [255]), ([1], [2]); +INSERT INTO sum_map_overflow VALUES ([1], [255]), ([1], [2]); -SELECT sumMap(events, counts) FROM test.sum_map_overflow; -SELECT sumMapWithOverflow(events, counts) FROM test.sum_map_overflow; +SELECT sumMap(events, counts) FROM sum_map_overflow; +SELECT sumMapWithOverflow(events, counts) FROM sum_map_overflow; -DROP TABLE test.sum_map_overflow; +DROP TABLE sum_map_overflow; select sumMap(val, cnt) from ( SELECT [ CAST(1, 'UInt64') ] as val, [1] as cnt ); select sumMap(val, cnt) from ( SELECT [ CAST(1, 'Float64') ] as val, [1] as cnt ); diff --git a/dbms/tests/queries/0_stateless/00504_insert_miss_columns.sh b/dbms/tests/queries/0_stateless/00504_insert_miss_columns.sh index 3d4ba2573dd..49ecb5ef315 100755 --- a/dbms/tests/queries/0_stateless/00504_insert_miss_columns.sh +++ b/dbms/tests/queries/0_stateless/00504_insert_miss_columns.sh @@ -5,13 +5,13 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) # https://github.com/yandex/ClickHouse/issues/1300 -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.advertiser"; -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.advertiser_test"; -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.advertiser ( action_date Date, adblock UInt8, imps Int64 ) Engine = SummingMergeTree( action_date, ( adblock ), 8192, ( imps ) )"; -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.advertiser_test ( action_date Date, adblock UInt8, imps Int64, Hash UInt64 ) Engine = SummingMergeTree( action_date, ( adblock, Hash ), 8192, ( imps ) )"; +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS advertiser"; +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS advertiser_test"; +$CLICKHOUSE_CLIENT -q "CREATE TABLE advertiser ( action_date Date, adblock UInt8, imps Int64 ) Engine = SummingMergeTree( action_date, ( adblock ), 8192, ( imps ) )"; +$CLICKHOUSE_CLIENT -q "CREATE TABLE advertiser_test ( action_date Date, adblock UInt8, imps Int64, Hash UInt64 ) Engine = SummingMergeTree( action_date, ( adblock, Hash ), 8192, ( imps ) )"; # This test will fail. It's ok. -$CLICKHOUSE_CLIENT -q "INSERT INTO test.advertiser_test SELECT *, sipHash64( CAST(adblock AS String) ), CAST(1 AS Int8) FROM test.advertiser;" 2>/dev/null -$CLICKHOUSE_CLIENT -q "DROP TABLE test.advertiser"; -$CLICKHOUSE_CLIENT -q "DROP TABLE test.advertiser_test"; +$CLICKHOUSE_CLIENT -q "INSERT INTO advertiser_test SELECT *, sipHash64( CAST(adblock AS String) ), CAST(1 AS Int8) FROM advertiser;" 2>/dev/null +$CLICKHOUSE_CLIENT -q "DROP TABLE advertiser"; +$CLICKHOUSE_CLIENT -q "DROP TABLE advertiser_test"; $CLICKHOUSE_CLIENT -q "SELECT 'Still alive'"; diff --git a/dbms/tests/queries/0_stateless/00504_mergetree_arrays_rw.sql b/dbms/tests/queries/0_stateless/00504_mergetree_arrays_rw.sql index 43e1bd95f96..b7bd326815e 100644 --- a/dbms/tests/queries/0_stateless/00504_mergetree_arrays_rw.sql +++ b/dbms/tests/queries/0_stateless/00504_mergetree_arrays_rw.sql @@ -1,37 +1,37 @@ create database if not exists test; -drop table if exists test.test_ins_arr; -create table test.test_ins_arr (date Date, val Array(UInt64)) engine = MergeTree(date, (date), 8192); -insert into test.test_ins_arr select toDate('2017-10-02'), [number, 42] from system.numbers limit 10000; -select * from test.test_ins_arr limit 10; -drop table test.test_ins_arr; +drop table if exists test_ins_arr; +create table test_ins_arr (date Date, val Array(UInt64)) engine = MergeTree(date, (date), 8192); +insert into test_ins_arr select toDate('2017-10-02'), [number, 42] from system.numbers limit 10000; +select * from test_ins_arr limit 10; +drop table test_ins_arr; -drop table if exists test.test_ins_null; -create table test.test_ins_null (date Date, val Nullable(UInt64)) engine = MergeTree(date, (date), 8192); -insert into test.test_ins_null select toDate('2017-10-02'), if(number % 2, number, Null) from system.numbers limit 10000; -select * from test.test_ins_null limit 10; -drop table test.test_ins_null; +drop table if exists test_ins_null; +create table test_ins_null (date Date, val Nullable(UInt64)) engine = MergeTree(date, (date), 8192); +insert into test_ins_null select toDate('2017-10-02'), if(number % 2, number, Null) from system.numbers limit 10000; +select * from test_ins_null limit 10; +drop table test_ins_null; -drop table if exists test.test_ins_arr_null; -create table test.test_ins_arr_null (date Date, val Array(Nullable(UInt64))) engine = MergeTree(date, (date), 8192); -insert into test.test_ins_arr_null select toDate('2017-10-02'), [if(number % 2, number, Null), number, Null] from system.numbers limit 10000; -select * from test.test_ins_arr_null limit 10; -drop table test.test_ins_arr_null; +drop table if exists test_ins_arr_null; +create table test_ins_arr_null (date Date, val Array(Nullable(UInt64))) engine = MergeTree(date, (date), 8192); +insert into test_ins_arr_null select toDate('2017-10-02'), [if(number % 2, number, Null), number, Null] from system.numbers limit 10000; +select * from test_ins_arr_null limit 10; +drop table test_ins_arr_null; -drop table if exists test.test_ins_arr_arr; -create table test.test_ins_arr_arr (date Date, val Array(Array(UInt64))) engine = MergeTree(date, (date), 8192); -insert into test.test_ins_arr_arr select toDate('2017-10-02'), [[number],[number + 1, number + 2]] from system.numbers limit 10000; -select * from test.test_ins_arr_arr limit 10; -drop table test.test_ins_arr_arr; +drop table if exists test_ins_arr_arr; +create table test_ins_arr_arr (date Date, val Array(Array(UInt64))) engine = MergeTree(date, (date), 8192); +insert into test_ins_arr_arr select toDate('2017-10-02'), [[number],[number + 1, number + 2]] from system.numbers limit 10000; +select * from test_ins_arr_arr limit 10; +drop table test_ins_arr_arr; -drop table if exists test.test_ins_arr_arr_null; -create table test.test_ins_arr_arr_null (date Date, val Array(Array(Nullable(UInt64)))) engine = MergeTree(date, (date), 8192); -insert into test.test_ins_arr_arr_null select toDate('2017-10-02'), [[1, Null, number], [3, Null, number]] from system.numbers limit 10000; -select * from test.test_ins_arr_arr_null limit 10; -drop table test.test_ins_arr_arr_null; +drop table if exists test_ins_arr_arr_null; +create table test_ins_arr_arr_null (date Date, val Array(Array(Nullable(UInt64)))) engine = MergeTree(date, (date), 8192); +insert into test_ins_arr_arr_null select toDate('2017-10-02'), [[1, Null, number], [3, Null, number]] from system.numbers limit 10000; +select * from test_ins_arr_arr_null limit 10; +drop table test_ins_arr_arr_null; -drop table if exists test.test_ins_arr_arr_arr; -create table test.test_ins_arr_arr_arr (date Date, val Array(Array(Array(UInt64)))) engine = MergeTree(date, (date), 8192); -insert into test.test_ins_arr_arr_arr select toDate('2017-10-02'), [[[number]],[[number + 1], [number + 2, number + 3]]] from system.numbers limit 10000; -select * from test.test_ins_arr_arr_arr limit 10; -drop table test.test_ins_arr_arr_arr; +drop table if exists test_ins_arr_arr_arr; +create table test_ins_arr_arr_arr (date Date, val Array(Array(Array(UInt64)))) engine = MergeTree(date, (date), 8192); +insert into test_ins_arr_arr_arr select toDate('2017-10-02'), [[[number]],[[number + 1], [number + 2, number + 3]]] from system.numbers limit 10000; +select * from test_ins_arr_arr_arr limit 10; +drop table test_ins_arr_arr_arr; diff --git a/dbms/tests/queries/0_stateless/00507_array_no_params.sh b/dbms/tests/queries/0_stateless/00507_array_no_params.sh index 285044bd228..1a9ba8d52bb 100755 --- a/dbms/tests/queries/0_stateless/00507_array_no_params.sh +++ b/dbms/tests/queries/0_stateless/00507_array_no_params.sh @@ -3,7 +3,7 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.foo;" +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS foo;" # Missing arguments for array, table not created -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.foo (a Array) Engine=Memory;" 2&>/dev/null +$CLICKHOUSE_CLIENT -q "CREATE TABLE foo (a Array) Engine=Memory;" 2&>/dev/null $CLICKHOUSE_CLIENT -q "SELECT 'Still alive';" diff --git a/dbms/tests/queries/0_stateless/00510_materizlized_view_and_deduplication_zookeeper.sql b/dbms/tests/queries/0_stateless/00510_materizlized_view_and_deduplication_zookeeper.sql index 9bd8651c091..b78c66e873d 100644 --- a/dbms/tests/queries/0_stateless/00510_materizlized_view_and_deduplication_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00510_materizlized_view_and_deduplication_zookeeper.sql @@ -1,49 +1,49 @@ -DROP TABLE IF EXISTS test.with_deduplication; -DROP TABLE IF EXISTS test.without_deduplication; -DROP TABLE IF EXISTS test.with_deduplication_mv; -DROP TABLE IF EXISTS test.without_deduplication_mv; +DROP TABLE IF EXISTS with_deduplication; +DROP TABLE IF EXISTS without_deduplication; +DROP TABLE IF EXISTS with_deduplication_mv; +DROP TABLE IF EXISTS without_deduplication_mv; -CREATE TABLE test.with_deduplication(x UInt32) +CREATE TABLE with_deduplication(x UInt32) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/with_deduplication', 'r1') ORDER BY x; -CREATE TABLE test.without_deduplication(x UInt32) +CREATE TABLE without_deduplication(x UInt32) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/without_deduplication', 'r1') ORDER BY x SETTINGS replicated_deduplication_window = 0; -CREATE MATERIALIZED VIEW test.with_deduplication_mv +CREATE MATERIALIZED VIEW with_deduplication_mv ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/tables/test/with_deduplication_mv', 'r1') ORDER BY dummy - AS SELECT 0 AS dummy, countState(x) AS cnt FROM test.with_deduplication; -CREATE MATERIALIZED VIEW test.without_deduplication_mv + AS SELECT 0 AS dummy, countState(x) AS cnt FROM with_deduplication; +CREATE MATERIALIZED VIEW without_deduplication_mv ENGINE = ReplicatedAggregatingMergeTree('/clickhouse/tables/test/without_deduplication_mv', 'r1') ORDER BY dummy - AS SELECT 0 AS dummy, countState(x) AS cnt FROM test.without_deduplication; + AS SELECT 0 AS dummy, countState(x) AS cnt FROM without_deduplication; -INSERT INTO test.with_deduplication VALUES (42); -INSERT INTO test.with_deduplication VALUES (42); -INSERT INTO test.with_deduplication VALUES (43); +INSERT INTO with_deduplication VALUES (42); +INSERT INTO with_deduplication VALUES (42); +INSERT INTO with_deduplication VALUES (43); -INSERT INTO test.without_deduplication VALUES (42); -INSERT INTO test.without_deduplication VALUES (42); -INSERT INTO test.without_deduplication VALUES (43); +INSERT INTO without_deduplication VALUES (42); +INSERT INTO without_deduplication VALUES (42); +INSERT INTO without_deduplication VALUES (43); -SELECT count() FROM test.with_deduplication; -SELECT count() FROM test.without_deduplication; +SELECT count() FROM with_deduplication; +SELECT count() FROM without_deduplication; -- Implicit insert isn't deduplicated SELECT ''; -SELECT countMerge(cnt) FROM test.with_deduplication_mv; -SELECT countMerge(cnt) FROM test.without_deduplication_mv; +SELECT countMerge(cnt) FROM with_deduplication_mv; +SELECT countMerge(cnt) FROM without_deduplication_mv; -- Explicit insert is deduplicated -ALTER TABLE test.`.inner.with_deduplication_mv` DROP PARTITION ID 'all'; -ALTER TABLE test.`.inner.without_deduplication_mv` DROP PARTITION ID 'all'; -INSERT INTO test.`.inner.with_deduplication_mv` SELECT 0 AS dummy, arrayReduce('countState', [toUInt32(42)]) AS cnt; -INSERT INTO test.`.inner.with_deduplication_mv` SELECT 0 AS dummy, arrayReduce('countState', [toUInt32(42)]) AS cnt; -INSERT INTO test.`.inner.without_deduplication_mv` SELECT 0 AS dummy, arrayReduce('countState', [toUInt32(42)]) AS cnt; -INSERT INTO test.`.inner.without_deduplication_mv` SELECT 0 AS dummy, arrayReduce('countState', [toUInt32(42)]) AS cnt; +ALTER TABLE `.inner.with_deduplication_mv` DROP PARTITION ID 'all'; +ALTER TABLE `.inner.without_deduplication_mv` DROP PARTITION ID 'all'; +INSERT INTO `.inner.with_deduplication_mv` SELECT 0 AS dummy, arrayReduce('countState', [toUInt32(42)]) AS cnt; +INSERT INTO `.inner.with_deduplication_mv` SELECT 0 AS dummy, arrayReduce('countState', [toUInt32(42)]) AS cnt; +INSERT INTO `.inner.without_deduplication_mv` SELECT 0 AS dummy, arrayReduce('countState', [toUInt32(42)]) AS cnt; +INSERT INTO `.inner.without_deduplication_mv` SELECT 0 AS dummy, arrayReduce('countState', [toUInt32(42)]) AS cnt; SELECT ''; -SELECT countMerge(cnt) FROM test.with_deduplication_mv; -SELECT countMerge(cnt) FROM test.without_deduplication_mv; +SELECT countMerge(cnt) FROM with_deduplication_mv; +SELECT countMerge(cnt) FROM without_deduplication_mv; -DROP TABLE IF EXISTS test.with_deduplication; -DROP TABLE IF EXISTS test.without_deduplication; -DROP TABLE IF EXISTS test.with_deduplication_mv; -DROP TABLE IF EXISTS test.without_deduplication_mv; +DROP TABLE IF EXISTS with_deduplication; +DROP TABLE IF EXISTS without_deduplication; +DROP TABLE IF EXISTS with_deduplication_mv; +DROP TABLE IF EXISTS without_deduplication_mv; diff --git a/dbms/tests/queries/0_stateless/00515_shard_desc_table_functions_and_subqueries.reference b/dbms/tests/queries/0_stateless/00515_shard_desc_table_functions_and_subqueries.reference index 0410fde9b62..11a674654c5 100644 --- a/dbms/tests/queries/0_stateless/00515_shard_desc_table_functions_and_subqueries.reference +++ b/dbms/tests/queries/0_stateless/00515_shard_desc_table_functions_and_subqueries.reference @@ -1,30 +1,30 @@ -date Date -val UInt64 -val2 UInt8 DEFAULT 42 -val3 UInt8 DEFAULT CAST(val2 + 1, \'UInt8\') -val4 UInt64 ALIAS val +date Date +val UInt64 +val2 UInt8 DEFAULT 42 +val3 UInt8 DEFAULT CAST(val2 + 1, \'UInt8\') +val4 UInt64 ALIAS val - -date Date -val UInt64 -val2 UInt8 DEFAULT 42 -val3 UInt8 DEFAULT CAST(val2 + 1, \'UInt8\') -val4 UInt64 ALIAS val +date Date +val UInt64 +val2 UInt8 DEFAULT 42 +val3 UInt8 DEFAULT CAST(val2 + 1, \'UInt8\') +val4 UInt64 ALIAS val - -date Date -val UInt64 -val2 UInt8 DEFAULT 42 -val3 UInt8 DEFAULT CAST(val2 + 1, \'UInt8\') -val4 UInt64 ALIAS val +date Date +val UInt64 +val2 UInt8 DEFAULT 42 +val3 UInt8 DEFAULT CAST(val2 + 1, \'UInt8\') +val4 UInt64 ALIAS val - -date Date -val UInt64 -val2 UInt8 DEFAULT 42 -val3 UInt8 DEFAULT CAST(val2 + 1, \'UInt8\') -val4 UInt64 ALIAS val +date Date +val UInt64 +val2 UInt8 DEFAULT 42 +val3 UInt8 DEFAULT CAST(val2 + 1, \'UInt8\') +val4 UInt64 ALIAS val - -1 UInt8 +1 UInt8 - -1 UInt8 +1 UInt8 - -number UInt64 +number UInt64 - diff --git a/dbms/tests/queries/0_stateless/00515_shard_desc_table_functions_and_subqueries.sql b/dbms/tests/queries/0_stateless/00515_shard_desc_table_functions_and_subqueries.sql index a5be310a4d5..652e892a53a 100644 --- a/dbms/tests/queries/0_stateless/00515_shard_desc_table_functions_and_subqueries.sql +++ b/dbms/tests/queries/0_stateless/00515_shard_desc_table_functions_and_subqueries.sql @@ -14,4 +14,4 @@ desc table (select 1); select '-'; desc (select * from system.numbers); select '-'; - +drop table if exists test.tab; diff --git a/dbms/tests/queries/0_stateless/00516_deduplication_after_drop_partition_zookeeper.sql b/dbms/tests/queries/0_stateless/00516_deduplication_after_drop_partition_zookeeper.sql index f132237c624..8590b661476 100644 --- a/dbms/tests/queries/0_stateless/00516_deduplication_after_drop_partition_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00516_deduplication_after_drop_partition_zookeeper.sql @@ -1,34 +1,34 @@ -DROP TABLE IF EXISTS test.deduplication_by_partition; -CREATE TABLE test.deduplication_by_partition(d Date, x UInt32) ENGINE = +DROP TABLE IF EXISTS deduplication_by_partition; +CREATE TABLE deduplication_by_partition(d Date, x UInt32) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/deduplication_by_partition', 'r1', d, x, 8192); -INSERT INTO test.deduplication_by_partition VALUES ('2000-01-01', 1); -INSERT INTO test.deduplication_by_partition VALUES ('2000-01-01', 2), ('2000-01-01', 3); -INSERT INTO test.deduplication_by_partition VALUES ('2000-01-01', 1); -INSERT INTO test.deduplication_by_partition VALUES ('2000-01-01', 2), ('2000-01-01', 3); -INSERT INTO test.deduplication_by_partition VALUES ('2000-02-01', 3), ('2000-02-01', 4), ('2000-02-01', 5); -INSERT INTO test.deduplication_by_partition VALUES ('2000-02-01', 3), ('2000-02-01', 4), ('2000-02-01', 5); +INSERT INTO deduplication_by_partition VALUES ('2000-01-01', 1); +INSERT INTO deduplication_by_partition VALUES ('2000-01-01', 2), ('2000-01-01', 3); +INSERT INTO deduplication_by_partition VALUES ('2000-01-01', 1); +INSERT INTO deduplication_by_partition VALUES ('2000-01-01', 2), ('2000-01-01', 3); +INSERT INTO deduplication_by_partition VALUES ('2000-02-01', 3), ('2000-02-01', 4), ('2000-02-01', 5); +INSERT INTO deduplication_by_partition VALUES ('2000-02-01', 3), ('2000-02-01', 4), ('2000-02-01', 5); SELECT '*** Before DROP PARTITION ***'; -SELECT * FROM test.deduplication_by_partition ORDER BY d, x; +SELECT * FROM deduplication_by_partition ORDER BY d, x; -ALTER TABLE test.deduplication_by_partition DROP PARTITION 200001; +ALTER TABLE deduplication_by_partition DROP PARTITION 200001; SELECT '*** After DROP PARTITION ***'; -SELECT * FROM test.deduplication_by_partition ORDER BY d, x; +SELECT * FROM deduplication_by_partition ORDER BY d, x; -INSERT INTO test.deduplication_by_partition VALUES ('2000-01-01', 1); -INSERT INTO test.deduplication_by_partition VALUES ('2000-01-01', 1); -INSERT INTO test.deduplication_by_partition VALUES ('2000-01-01', 2), ('2000-01-01', 3); -INSERT INTO test.deduplication_by_partition VALUES ('2000-01-01', 2), ('2000-01-01', 3); -INSERT INTO test.deduplication_by_partition VALUES ('2000-01-01', 4); -INSERT INTO test.deduplication_by_partition VALUES ('2000-02-01', 3), ('2000-02-01', 4), ('2000-02-01', 5); -INSERT INTO test.deduplication_by_partition VALUES ('2000-02-01', 6), ('2000-02-01', 7); +INSERT INTO deduplication_by_partition VALUES ('2000-01-01', 1); +INSERT INTO deduplication_by_partition VALUES ('2000-01-01', 1); +INSERT INTO deduplication_by_partition VALUES ('2000-01-01', 2), ('2000-01-01', 3); +INSERT INTO deduplication_by_partition VALUES ('2000-01-01', 2), ('2000-01-01', 3); +INSERT INTO deduplication_by_partition VALUES ('2000-01-01', 4); +INSERT INTO deduplication_by_partition VALUES ('2000-02-01', 3), ('2000-02-01', 4), ('2000-02-01', 5); +INSERT INTO deduplication_by_partition VALUES ('2000-02-01', 6), ('2000-02-01', 7); SELECT '*** After INSERT ***'; -SELECT * FROM test.deduplication_by_partition ORDER BY d, x; +SELECT * FROM deduplication_by_partition ORDER BY d, x; -DROP TABLE test.deduplication_by_partition; +DROP TABLE deduplication_by_partition; diff --git a/dbms/tests/queries/0_stateless/00517_date_parsing.sql b/dbms/tests/queries/0_stateless/00517_date_parsing.sql index d9d4141678d..9067d39ba3e 100644 --- a/dbms/tests/queries/0_stateless/00517_date_parsing.sql +++ b/dbms/tests/queries/0_stateless/00517_date_parsing.sql @@ -1,14 +1,14 @@ SELECT toDate(s) FROM (SELECT arrayJoin(['2017-01-02', '2017-1-02', '2017-01-2', '2017-1-2', '2017/01/02', '2017/1/02', '2017/01/2', '2017/1/2', '2017-11-12']) AS s); -DROP TABLE IF EXISTS test.date; -CREATE TABLE test.date (d Date) ENGINE = Memory; +DROP TABLE IF EXISTS date; +CREATE TABLE date (d Date) ENGINE = Memory; -INSERT INTO test.date VALUES ('2017-01-02'), ('2017-1-02'), ('2017-01-2'), ('2017-1-2'), ('2017/01/02'), ('2017/1/02'), ('2017/01/2'), ('2017/1/2'), ('2017-11-12'); -SELECT * FROM test.date; +INSERT INTO date VALUES ('2017-01-02'), ('2017-1-02'), ('2017-01-2'), ('2017-1-2'), ('2017/01/02'), ('2017/1/02'), ('2017/01/2'), ('2017/1/2'), ('2017-11-12'); +SELECT * FROM date; -INSERT INTO test.date FORMAT JSONEachRow {"d": "2017-01-02"}, {"d": "2017-1-02"}, {"d": "2017-01-2"}, {"d": "2017-1-2"}, {"d": "2017/01/02"}, {"d": "2017/1/02"}, {"d": "2017/01/2"}, {"d": "2017/1/2"}, {"d": "2017-11-12"}; -SELECT * FROM test.date ORDER BY d; +INSERT INTO date FORMAT JSONEachRow {"d": "2017-01-02"}, {"d": "2017-1-02"}, {"d": "2017-01-2"}, {"d": "2017-1-2"}, {"d": "2017/01/02"}, {"d": "2017/1/02"}, {"d": "2017/01/2"}, {"d": "2017/1/2"}, {"d": "2017-11-12"}; +SELECT * FROM date ORDER BY d; -DROP TABLE test.date; +DROP TABLE date; WITH toDate('2000-01-01') + rand() % (30000) AS EventDate SELECT * FROM numbers(1000000) WHERE EventDate != toDate(concat(toString(toYear(EventDate)), '-', toString(toMonth(EventDate)), '-', toString(toDayOfMonth(EventDate)))); diff --git a/dbms/tests/queries/0_stateless/00520_tuple_values_interpreter.sql b/dbms/tests/queries/0_stateless/00520_tuple_values_interpreter.sql index 3bac0b2955a..a3673001226 100644 --- a/dbms/tests/queries/0_stateless/00520_tuple_values_interpreter.sql +++ b/dbms/tests/queries/0_stateless/00520_tuple_values_interpreter.sql @@ -1,9 +1,9 @@ -DROP TABLE IF EXISTS test.tuple; -CREATE TABLE test.tuple (t Tuple(Date, UInt32, UInt64)) ENGINE = Memory; -INSERT INTO test.tuple VALUES ((concat('2000', '-01-01'), /* Hello */ 12+3, 45+6)); +DROP TABLE IF EXISTS tuple; +CREATE TABLE tuple (t Tuple(Date, UInt32, UInt64)) ENGINE = Memory; +INSERT INTO tuple VALUES ((concat('2000', '-01-01'), /* Hello */ 12+3, 45+6)); SET input_format_values_interpret_expressions = 0; -INSERT INTO test.tuple VALUES (('2000-01-01', 123, 456)); +INSERT INTO tuple VALUES (('2000-01-01', 123, 456)); -SELECT * FROM test.tuple ORDER BY t; -DROP TABLE test.tuple; +SELECT * FROM tuple ORDER BY t; +DROP TABLE tuple; diff --git a/dbms/tests/queries/0_stateless/00521_multidimensional.sql b/dbms/tests/queries/0_stateless/00521_multidimensional.sql index 32c6b30db1b..f48faf72c2b 100644 --- a/dbms/tests/queries/0_stateless/00521_multidimensional.sql +++ b/dbms/tests/queries/0_stateless/00521_multidimensional.sql @@ -1,34 +1,34 @@ -DROP TABLE IF EXISTS test.multidimensional; -CREATE TABLE test.multidimensional (x UInt64, arr Array(Array(String))) ENGINE = MergeTree ORDER BY x; +DROP TABLE IF EXISTS multidimensional; +CREATE TABLE multidimensional (x UInt64, arr Array(Array(String))) ENGINE = MergeTree ORDER BY x; -INSERT INTO test.multidimensional VALUES (1, [['Hello', 'World'], ['Goodbye'], []]); -SELECT * FROM test.multidimensional; +INSERT INTO multidimensional VALUES (1, [['Hello', 'World'], ['Goodbye'], []]); +SELECT * FROM multidimensional; -ALTER TABLE test.multidimensional ADD COLUMN t Tuple(String, Array(Nullable(String)), Tuple(UInt32, Date)); -INSERT INTO test.multidimensional (t) VALUES (('Hello', ['World', NULL], (123, '2000-01-01'))); -SELECT * FROM test.multidimensional ORDER BY t; +ALTER TABLE multidimensional ADD COLUMN t Tuple(String, Array(Nullable(String)), Tuple(UInt32, Date)); +INSERT INTO multidimensional (t) VALUES (('Hello', ['World', NULL], (123, '2000-01-01'))); +SELECT * FROM multidimensional ORDER BY t; -OPTIMIZE TABLE test.multidimensional; -SELECT * FROM test.multidimensional ORDER BY t; +OPTIMIZE TABLE multidimensional; +SELECT * FROM multidimensional ORDER BY t; -DROP TABLE test.multidimensional; +DROP TABLE multidimensional; -CREATE TABLE test.multidimensional (x UInt64, arr Array(Array(String)), t Tuple(String, Array(Nullable(String)), Tuple(UInt32, Date))) ENGINE = Memory; -INSERT INTO test.multidimensional VALUES (1, [['Hello', 'World'], ['Goodbye'], []], ('Hello', ['World', NULL], (123, '2000-01-01'))); -SELECT * FROM test.multidimensional ORDER BY t; -DROP TABLE test.multidimensional; +CREATE TABLE multidimensional (x UInt64, arr Array(Array(String)), t Tuple(String, Array(Nullable(String)), Tuple(UInt32, Date))) ENGINE = Memory; +INSERT INTO multidimensional VALUES (1, [['Hello', 'World'], ['Goodbye'], []], ('Hello', ['World', NULL], (123, '2000-01-01'))); +SELECT * FROM multidimensional ORDER BY t; +DROP TABLE multidimensional; -CREATE TABLE test.multidimensional (x UInt64, arr Array(Array(String)), t Tuple(String, Array(Nullable(String)), Tuple(UInt32, Date))) ENGINE = TinyLog; -INSERT INTO test.multidimensional VALUES (1, [['Hello', 'World'], ['Goodbye'], []], ('Hello', ['World', NULL], (123, '2000-01-01'))); -SELECT * FROM test.multidimensional ORDER BY t; -DROP TABLE test.multidimensional; +CREATE TABLE multidimensional (x UInt64, arr Array(Array(String)), t Tuple(String, Array(Nullable(String)), Tuple(UInt32, Date))) ENGINE = TinyLog; +INSERT INTO multidimensional VALUES (1, [['Hello', 'World'], ['Goodbye'], []], ('Hello', ['World', NULL], (123, '2000-01-01'))); +SELECT * FROM multidimensional ORDER BY t; +DROP TABLE multidimensional; -CREATE TABLE test.multidimensional (x UInt64, arr Array(Array(String)), t Tuple(String, Array(Nullable(String)), Tuple(UInt32, Date))) ENGINE = StripeLog; -INSERT INTO test.multidimensional VALUES (1, [['Hello', 'World'], ['Goodbye'], []], ('Hello', ['World', NULL], (123, '2000-01-01'))); -SELECT * FROM test.multidimensional ORDER BY t; -DROP TABLE test.multidimensional; +CREATE TABLE multidimensional (x UInt64, arr Array(Array(String)), t Tuple(String, Array(Nullable(String)), Tuple(UInt32, Date))) ENGINE = StripeLog; +INSERT INTO multidimensional VALUES (1, [['Hello', 'World'], ['Goodbye'], []], ('Hello', ['World', NULL], (123, '2000-01-01'))); +SELECT * FROM multidimensional ORDER BY t; +DROP TABLE multidimensional; -CREATE TABLE test.multidimensional (x UInt64, arr Array(Array(String)), t Tuple(String, Array(Nullable(String)), Tuple(UInt32, Date))) ENGINE = Log; -INSERT INTO test.multidimensional VALUES (1, [['Hello', 'World'], ['Goodbye'], []], ('Hello', ['World', NULL], (123, '2000-01-01'))); -SELECT * FROM test.multidimensional ORDER BY t; -DROP TABLE test.multidimensional; +CREATE TABLE multidimensional (x UInt64, arr Array(Array(String)), t Tuple(String, Array(Nullable(String)), Tuple(UInt32, Date))) ENGINE = Log; +INSERT INTO multidimensional VALUES (1, [['Hello', 'World'], ['Goodbye'], []], ('Hello', ['World', NULL], (123, '2000-01-01'))); +SELECT * FROM multidimensional ORDER BY t; +DROP TABLE multidimensional; diff --git a/dbms/tests/queries/0_stateless/00522_multidimensional.sql b/dbms/tests/queries/0_stateless/00522_multidimensional.sql index c22f3b1abd1..c3c41257ab9 100644 --- a/dbms/tests/queries/0_stateless/00522_multidimensional.sql +++ b/dbms/tests/queries/0_stateless/00522_multidimensional.sql @@ -1,6 +1,6 @@ -DROP TABLE IF EXISTS test.multidimensional; -CREATE TABLE test.multidimensional ENGINE = MergeTree ORDER BY number AS SELECT number, arrayMap(x -> (x, [x], [[x]], (x, toString(x))), arrayMap(x -> range(x), range(number % 10))) AS value FROM system.numbers LIMIT 100000; +DROP TABLE IF EXISTS multidimensional; +CREATE TABLE multidimensional ENGINE = MergeTree ORDER BY number AS SELECT number, arrayMap(x -> (x, [x], [[x]], (x, toString(x))), arrayMap(x -> range(x), range(number % 10))) AS value FROM system.numbers LIMIT 100000; -SELECT sum(cityHash64(toString(value))) FROM test.multidimensional; +SELECT sum(cityHash64(toString(value))) FROM multidimensional; -DROP TABLE test.multidimensional; +DROP TABLE multidimensional; diff --git a/dbms/tests/queries/0_stateless/00530_arrays_of_nothing.sql b/dbms/tests/queries/0_stateless/00530_arrays_of_nothing.sql index 704bc574647..f17d8053a15 100644 --- a/dbms/tests/queries/0_stateless/00530_arrays_of_nothing.sql +++ b/dbms/tests/queries/0_stateless/00530_arrays_of_nothing.sql @@ -4,10 +4,10 @@ SELECT [[[[],['']]]]; SELECT concat([], ['Hello'], []); SELECT arrayPushBack([], 1), arrayPushFront([[]], []); -DROP TABLE IF EXISTS test.arr; -CREATE TABLE test.arr (x Array(String), y Nullable(String), z Array(Array(Nullable(String)))) ENGINE = TinyLog; +DROP TABLE IF EXISTS arr; +CREATE TABLE arr (x Array(String), y Nullable(String), z Array(Array(Nullable(String)))) ENGINE = TinyLog; -INSERT INTO test.arr SELECT [], NULL, [[], [NULL], [NULL, 'Hello']]; -SELECT * FROM test.arr; +INSERT INTO arr SELECT [], NULL, [[], [NULL], [NULL, 'Hello']]; +SELECT * FROM arr; -DROP TABLE test.arr; +DROP TABLE arr; diff --git a/dbms/tests/queries/0_stateless/00531_aggregate_over_nullable.sql b/dbms/tests/queries/0_stateless/00531_aggregate_over_nullable.sql index a66ce1e336b..ff485b4251a 100644 --- a/dbms/tests/queries/0_stateless/00531_aggregate_over_nullable.sql +++ b/dbms/tests/queries/0_stateless/00531_aggregate_over_nullable.sql @@ -1,16 +1,16 @@ -DROP TABLE IF EXISTS test.agg_over_nullable; -CREATE TABLE test.agg_over_nullable ( +DROP TABLE IF EXISTS agg_over_nullable; +CREATE TABLE agg_over_nullable ( partition Date, timestamp DateTime, user_id Nullable(UInt32), description Nullable(String) ) ENGINE = MergeTree(partition, timestamp, 8192); -INSERT INTO test.agg_over_nullable(partition, timestamp, user_id, description) VALUES(now(), now(), 1, 'ss'); -INSERT INTO test.agg_over_nullable(partition, timestamp, user_id, description) VALUES(now(), now(), 1, NULL); -INSERT INTO test.agg_over_nullable(partition, timestamp, user_id, description) VALUES(now(), now(), 1, 'aa'); +INSERT INTO agg_over_nullable(partition, timestamp, user_id, description) VALUES(now(), now(), 1, 'ss'); +INSERT INTO agg_over_nullable(partition, timestamp, user_id, description) VALUES(now(), now(), 1, NULL); +INSERT INTO agg_over_nullable(partition, timestamp, user_id, description) VALUES(now(), now(), 1, 'aa'); -SELECT arraySort(groupUniqArray(description)) FROM test.agg_over_nullable; -SELECT arraySort(topK(3)(description)) FROM test.agg_over_nullable; +SELECT arraySort(groupUniqArray(description)) FROM agg_over_nullable; +SELECT arraySort(topK(3)(description)) FROM agg_over_nullable; -DROP TABLE test.agg_over_nullable; +DROP TABLE agg_over_nullable; diff --git a/dbms/tests/queries/0_stateless/00535_parse_float_scientific.sql b/dbms/tests/queries/0_stateless/00535_parse_float_scientific.sql index 810e6face22..8363050beb5 100644 --- a/dbms/tests/queries/0_stateless/00535_parse_float_scientific.sql +++ b/dbms/tests/queries/0_stateless/00535_parse_float_scientific.sql @@ -1,7 +1,7 @@ -DROP TABLE IF EXISTS test.float; -CREATE TABLE test.float (x Float64) ENGINE = Log; +DROP TABLE IF EXISTS float; +CREATE TABLE float (x Float64) ENGINE = Log; -INSERT INTO test.float VALUES (1e7); -SELECT * FROM test.float; +INSERT INTO float VALUES (1e7); +SELECT * FROM float; -DROP TABLE test.float; +DROP TABLE float; diff --git a/dbms/tests/queries/0_stateless/00542_materialized_view_and_time_zone_tag.sql b/dbms/tests/queries/0_stateless/00542_materialized_view_and_time_zone_tag.sql index 9312dccd1c4..5e9277c90b6 100644 --- a/dbms/tests/queries/0_stateless/00542_materialized_view_and_time_zone_tag.sql +++ b/dbms/tests/queries/0_stateless/00542_materialized_view_and_time_zone_tag.sql @@ -1,18 +1,18 @@ -DROP TABLE IF EXISTS test.m3; -DROP TABLE IF EXISTS test.m1; -DROP TABLE IF EXISTS test.x; +DROP TABLE IF EXISTS m3; +DROP TABLE IF EXISTS m1; +DROP TABLE IF EXISTS x; -CREATE TABLE test.x (d Date, t DateTime) ENGINE = MergeTree(d, (d, t), 1); +CREATE TABLE x (d Date, t DateTime) ENGINE = MergeTree(d, (d, t), 1); -CREATE MATERIALIZED VIEW test.m1 (d Date, t DateTime, c UInt64) ENGINE = SummingMergeTree(d, (d, t), 1) AS SELECT d, toStartOfMinute(x.t) as t, count() as c FROM test.x GROUP BY d, t; +CREATE MATERIALIZED VIEW m1 (d Date, t DateTime, c UInt64) ENGINE = SummingMergeTree(d, (d, t), 1) AS SELECT d, toStartOfMinute(x.t) as t, count() as c FROM x GROUP BY d, t; -CREATE MATERIALIZED VIEW test.m3 ENGINE = SummingMergeTree(d, (d, t), 1) AS SELECT d, toStartOfHour(m1.t) as t, c FROM test.m1; +CREATE MATERIALIZED VIEW m3 ENGINE = SummingMergeTree(d, (d, t), 1) AS SELECT d, toStartOfHour(m1.t) as t, c FROM m1; -INSERT INTO test.x VALUES (today(), now()); -INSERT INTO test.x VALUES (today(), now()); +INSERT INTO x VALUES (today(), now()); +INSERT INTO x VALUES (today(), now()); -OPTIMIZE TABLE test.m3; +OPTIMIZE TABLE m3; -DROP TABLE test.m3; -DROP TABLE test.m1; -DROP TABLE test.x; +DROP TABLE m3; +DROP TABLE m1; +DROP TABLE x; diff --git a/dbms/tests/queries/0_stateless/00543_access_to_temporary_table_in_readonly_mode.sh b/dbms/tests/queries/0_stateless/00543_access_to_temporary_table_in_readonly_mode.sh index d9c4d335d66..2ec95270e30 100755 --- a/dbms/tests/queries/0_stateless/00543_access_to_temporary_table_in_readonly_mode.sh +++ b/dbms/tests/queries/0_stateless/00543_access_to_temporary_table_in_readonly_mode.sh @@ -4,8 +4,8 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh $CLICKHOUSE_CLIENT -n --query=" - DROP TABLE IF EXISTS test.test_readonly; - CREATE TABLE test.test_readonly ( + DROP TABLE IF EXISTS test_readonly; + CREATE TABLE test_readonly ( ID Int ) Engine=Memory; "; @@ -27,7 +27,7 @@ CODE=$?; # Try to insert into exists (non temporary) table $CLICKHOUSE_CLIENT -n --query=" SET readonly = 1; - INSERT INTO test.test_readonly (ID) VALUES (1); + INSERT INTO test_readonly (ID) VALUES (1); " 2> /dev/null; CODE=$?; [ "$CODE" -ne "164" ] && [ "$CODE" -ne "0" ] && echo "Fail" && exit $CODE; @@ -35,7 +35,7 @@ CODE=$?; # Try to drop exists (non temporary) table $CLICKHOUSE_CLIENT -n --query=" SET readonly = 1; - DROP TABLE test.test_readonly; + DROP TABLE test_readonly; " 2> /dev/null; CODE=$?; [ "$CODE" -ne "164" ] && [ "$CODE" -ne "0" ] && echo "Fail" && exit $CODE; @@ -59,7 +59,7 @@ CODE=$?; # Try to insert into exists (non temporary) table $CLICKHOUSE_CLIENT -n --query=" SET readonly = 2; - INSERT INTO test.test_readonly (ID) VALUES (1); + INSERT INTO test_readonly (ID) VALUES (1); " 2> /dev/null; CODE=$?; [ "$CODE" -ne "164" ] && [ "$CODE" -ne "0" ] && echo "Fail" && exit $CODE; @@ -67,7 +67,7 @@ CODE=$?; # Try to drop exists (non temporary) table $CLICKHOUSE_CLIENT -n --query=" SET readonly = 2; - DROP TABLE test.test_readonly; + DROP TABLE test_readonly; " 2> /dev/null; CODE=$?; [ "$CODE" -ne "164" ] && [ "$CODE" -ne "0" ] && echo "Fail" && exit $CODE; @@ -91,7 +91,7 @@ CODE=$?; # Try to insert into exists (non temporary) table $CLICKHOUSE_CLIENT -n --query=" SET readonly = 0; - INSERT INTO test.test_readonly (ID) VALUES (1); + INSERT INTO test_readonly (ID) VALUES (1); " 2> /dev/null; CODE=$?; [ "$CODE" -ne "0" ] && echo "Fail" && exit $CODE; @@ -99,10 +99,10 @@ CODE=$?; # Try to drop exists (non temporary) table $CLICKHOUSE_CLIENT -n --query=" SET readonly = 0; - DROP TABLE test.test_readonly; + DROP TABLE test_readonly; " 2> /dev/null; CODE=$?; [ "$CODE" -ne "0" ] && echo "Fail" && exit $CODE; -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.test_readonly;"; +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test_readonly;"; diff --git a/dbms/tests/queries/0_stateless/00543_null_and_prewhere.sql b/dbms/tests/queries/0_stateless/00543_null_and_prewhere.sql index 063280085c3..793d65925a1 100644 --- a/dbms/tests/queries/0_stateless/00543_null_and_prewhere.sql +++ b/dbms/tests/queries/0_stateless/00543_null_and_prewhere.sql @@ -1,4 +1,4 @@ -CREATE TABLE test.test +CREATE TABLE test ( dt Date, id UInt32, @@ -6,12 +6,12 @@ CREATE TABLE test.test ) ENGINE = MergeTree(dt, id, 8192); -insert into test.test (dt, id, val) values ('2017-01-01', 1, 10); -insert into test.test (dt, id, val) values ('2017-01-01', 1, null); -insert into test.test (dt, id, val) values ('2017-01-01', 1, 0); +insert into test (dt, id, val) values ('2017-01-01', 1, 10); +insert into test (dt, id, val) values ('2017-01-01', 1, null); +insert into test (dt, id, val) values ('2017-01-01', 1, 0); SELECT count() -FROM test.test +FROM test WHERE val = 0; -DROP TABLE IF EXISTS test.test; +DROP TABLE IF EXISTS test; diff --git a/dbms/tests/queries/0_stateless/00544_insert_with_select.sql b/dbms/tests/queries/0_stateless/00544_insert_with_select.sql index 63ff2b7fd93..6333a3f498a 100644 --- a/dbms/tests/queries/0_stateless/00544_insert_with_select.sql +++ b/dbms/tests/queries/0_stateless/00544_insert_with_select.sql @@ -1,9 +1,9 @@ -DROP TABLE IF EXISTS test.test; +DROP TABLE IF EXISTS test; -CREATE TABLE test.test(number UInt64, num2 UInt64) ENGINE = Log; +CREATE TABLE test(number UInt64, num2 UInt64) ENGINE = Log; -INSERT INTO test.test WITH number * 2 AS num2 SELECT number, num2 FROM system.numbers LIMIT 3; +INSERT INTO test WITH number * 2 AS num2 SELECT number, num2 FROM system.numbers LIMIT 3; -SELECT * FROM test.test; +SELECT * FROM test; -DROP TABLE test.test; +DROP TABLE test; diff --git a/dbms/tests/queries/0_stateless/00549_join_use_nulls.sql b/dbms/tests/queries/0_stateless/00549_join_use_nulls.sql index d1b2c5060f9..73ba78b4cb8 100644 --- a/dbms/tests/queries/0_stateless/00549_join_use_nulls.sql +++ b/dbms/tests/queries/0_stateless/00549_join_use_nulls.sql @@ -1,9 +1,9 @@ SET join_use_nulls = 1; -DROP TABLE IF EXISTS test.null; -CREATE TABLE test.null (k UInt64, a String, b Nullable(String)) ENGINE = Log; +DROP TABLE IF EXISTS null; +CREATE TABLE null (k UInt64, a String, b Nullable(String)) ENGINE = Log; -INSERT INTO test.null SELECT +INSERT INTO null SELECT k, a, b @@ -25,6 +25,6 @@ ANY LEFT JOIN ) USING (k) ORDER BY k ASC; -SELECT * FROM test.null ORDER BY k, a, b; +SELECT * FROM null ORDER BY k, a, b; -DROP TABLE test.null; +DROP TABLE null; diff --git a/dbms/tests/queries/0_stateless/00550_join_insert_select.sh b/dbms/tests/queries/0_stateless/00550_join_insert_select.sh index 3fbad66e7c2..0a695b25b9f 100755 --- a/dbms/tests/queries/0_stateless/00550_join_insert_select.sh +++ b/dbms/tests/queries/0_stateless/00550_join_insert_select.sh @@ -4,22 +4,22 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh $CLICKHOUSE_CLIENT -n --ignore-error --query=" -DROP TABLE IF EXISTS test.test1; -DROP TABLE IF EXISTS test.test2; -DROP TABLE IF EXISTS test.test3; +DROP TABLE IF EXISTS test1; +DROP TABLE IF EXISTS test2; +DROP TABLE IF EXISTS test3; -CREATE TABLE test.test1 ( id String ) ENGINE = StripeLog; -CREATE TABLE test.test2 ( id String ) ENGINE = StripeLog; -INSERT INTO test.test2 VALUES ('a'); -CREATE TABLE test.test3 ( id String, name String ) ENGINE = StripeLog; -INSERT INTO test.test3 VALUES ('a', 'aaa'); +CREATE TABLE test1 ( id String ) ENGINE = StripeLog; +CREATE TABLE test2 ( id String ) ENGINE = StripeLog; +INSERT INTO test2 VALUES ('a'); +CREATE TABLE test3 ( id String, name String ) ENGINE = StripeLog; +INSERT INTO test3 VALUES ('a', 'aaa'); -INSERT INTO test.test1 SELECT id, name FROM test.test2 ANY INNER JOIN test.test3 USING (id); -INSERT INTO test.test1 SELECT id, name FROM test.test2 ANY LEFT OUTER JOIN test.test3 USING (id); +INSERT INTO test1 SELECT id, name FROM test2 ANY INNER JOIN test3 USING (id); +INSERT INTO test1 SELECT id, name FROM test2 ANY LEFT OUTER JOIN test3 USING (id); -DROP TABLE test.test1; -DROP TABLE test.test2; -DROP TABLE test.test3; +DROP TABLE test1; +DROP TABLE test2; +DROP TABLE test3; " --server_logs_file=/dev/null 2>&1 | grep -F "Number of columns doesn't match" | wc -l $CLICKHOUSE_CLIENT --query="SELECT 1"; diff --git a/dbms/tests/queries/0_stateless/00552_or_nullable.sql b/dbms/tests/queries/0_stateless/00552_or_nullable.sql index 1bc1fb3bbc0..0c99fe54700 100644 --- a/dbms/tests/queries/0_stateless/00552_or_nullable.sql +++ b/dbms/tests/queries/0_stateless/00552_or_nullable.sql @@ -34,18 +34,18 @@ SELECT 0 AND x AND 1 AND x FROM (SELECT number % 2 ? number % 3 : NULL AS x FROM system.numbers LIMIT 10); -DROP TABLE IF EXISTS test.test; +DROP TABLE IF EXISTS test; -CREATE TABLE test.test +CREATE TABLE test ( x Nullable(Int32) ) ENGINE = Log; -INSERT INTO test.test VALUES(1), (0), (null); +INSERT INTO test VALUES(1), (0), (null); -SELECT * FROM test.test; -SELECT x FROM test.test WHERE x != 0; -SELECT x FROM test.test WHERE x != 0 OR isNull(x); -SELECT x FROM test.test WHERE x != 1; +SELECT * FROM test; +SELECT x FROM test WHERE x != 0; +SELECT x FROM test WHERE x != 0 OR isNull(x); +SELECT x FROM test WHERE x != 1; -DROP TABLE test.test; +DROP TABLE test; diff --git a/dbms/tests/queries/0_stateless/00554_nested_and_table_engines.sql b/dbms/tests/queries/0_stateless/00554_nested_and_table_engines.sql index 892bb210e63..3da696fa6a6 100644 --- a/dbms/tests/queries/0_stateless/00554_nested_and_table_engines.sql +++ b/dbms/tests/queries/0_stateless/00554_nested_and_table_engines.sql @@ -1,61 +1,61 @@ -DROP TABLE IF EXISTS test.nested; +DROP TABLE IF EXISTS nested; -CREATE TABLE test.nested (x UInt8, n Nested(a UInt64, b String)) ENGINE = TinyLog; +CREATE TABLE nested (x UInt8, n Nested(a UInt64, b String)) ENGINE = TinyLog; -INSERT INTO test.nested VALUES (1, [2, 3], ['Hello', 'World']); -INSERT INTO test.nested VALUES (4, [5], ['Goodbye']); +INSERT INTO nested VALUES (1, [2, 3], ['Hello', 'World']); +INSERT INTO nested VALUES (4, [5], ['Goodbye']); -SELECT * FROM test.nested ORDER BY x; -SELECT x, n.a FROM test.nested ORDER BY x; -SELECT n.a, n.b FROM test.nested ORDER BY n.a; +SELECT * FROM nested ORDER BY x; +SELECT x, n.a FROM nested ORDER BY x; +SELECT n.a, n.b FROM nested ORDER BY n.a; -DROP TABLE IF EXISTS test.nested; +DROP TABLE IF EXISTS nested; -CREATE TABLE test.nested (x UInt8, n Nested(a UInt64, b String)) ENGINE = Log; +CREATE TABLE nested (x UInt8, n Nested(a UInt64, b String)) ENGINE = Log; -INSERT INTO test.nested VALUES (1, [2, 3], ['Hello', 'World']); -INSERT INTO test.nested VALUES (4, [5], ['Goodbye']); +INSERT INTO nested VALUES (1, [2, 3], ['Hello', 'World']); +INSERT INTO nested VALUES (4, [5], ['Goodbye']); -SELECT * FROM test.nested ORDER BY x; -SELECT x, n.a FROM test.nested ORDER BY x; -SELECT n.a, n.b FROM test.nested ORDER BY n.a; +SELECT * FROM nested ORDER BY x; +SELECT x, n.a FROM nested ORDER BY x; +SELECT n.a, n.b FROM nested ORDER BY n.a; -DROP TABLE IF EXISTS test.nested; +DROP TABLE IF EXISTS nested; -CREATE TABLE test.nested (x UInt8, n Nested(a UInt64, b String)) ENGINE = StripeLog; +CREATE TABLE nested (x UInt8, n Nested(a UInt64, b String)) ENGINE = StripeLog; -INSERT INTO test.nested VALUES (1, [2, 3], ['Hello', 'World']); -INSERT INTO test.nested VALUES (4, [5], ['Goodbye']); +INSERT INTO nested VALUES (1, [2, 3], ['Hello', 'World']); +INSERT INTO nested VALUES (4, [5], ['Goodbye']); -SELECT * FROM test.nested ORDER BY x; -SELECT x, n.a FROM test.nested ORDER BY x; -SELECT n.a, n.b FROM test.nested ORDER BY n.a; +SELECT * FROM nested ORDER BY x; +SELECT x, n.a FROM nested ORDER BY x; +SELECT n.a, n.b FROM nested ORDER BY n.a; -DROP TABLE IF EXISTS test.nested; +DROP TABLE IF EXISTS nested; -CREATE TABLE test.nested (x UInt8, n Nested(a UInt64, b String)) ENGINE = Memory; +CREATE TABLE nested (x UInt8, n Nested(a UInt64, b String)) ENGINE = Memory; -INSERT INTO test.nested VALUES (1, [2, 3], ['Hello', 'World']); -INSERT INTO test.nested VALUES (4, [5], ['Goodbye']); +INSERT INTO nested VALUES (1, [2, 3], ['Hello', 'World']); +INSERT INTO nested VALUES (4, [5], ['Goodbye']); -SELECT * FROM test.nested ORDER BY x; -SELECT x, n.a FROM test.nested ORDER BY x; -SELECT n.a, n.b FROM test.nested ORDER BY n.a; +SELECT * FROM nested ORDER BY x; +SELECT x, n.a FROM nested ORDER BY x; +SELECT n.a, n.b FROM nested ORDER BY n.a; -DROP TABLE IF EXISTS test.nested; +DROP TABLE IF EXISTS nested; -CREATE TABLE test.nested (x UInt8, n Nested(a UInt64, b String)) ENGINE = MergeTree ORDER BY x; +CREATE TABLE nested (x UInt8, n Nested(a UInt64, b String)) ENGINE = MergeTree ORDER BY x; -INSERT INTO test.nested VALUES (1, [2, 3], ['Hello', 'World']); -INSERT INTO test.nested VALUES (4, [5], ['Goodbye']); +INSERT INTO nested VALUES (1, [2, 3], ['Hello', 'World']); +INSERT INTO nested VALUES (4, [5], ['Goodbye']); -SELECT * FROM test.nested ORDER BY x; -SELECT x, n.a FROM test.nested ORDER BY x; -SELECT n.a, n.b FROM test.nested ORDER BY n.a; +SELECT * FROM nested ORDER BY x; +SELECT x, n.a FROM nested ORDER BY x; +SELECT n.a, n.b FROM nested ORDER BY n.a; -DROP TABLE test.nested; +DROP TABLE nested; diff --git a/dbms/tests/queries/0_stateless/00557_alter_null_storage_tables.reference b/dbms/tests/queries/0_stateless/00557_alter_null_storage_tables.reference index 0f20962a568..0ca215f21f7 100644 --- a/dbms/tests/queries/0_stateless/00557_alter_null_storage_tables.reference +++ b/dbms/tests/queries/0_stateless/00557_alter_null_storage_tables.reference @@ -1,3 +1,3 @@ -x UInt8 -x Int64 DEFAULT toInt64(y) -y String +x UInt8 +x Int64 DEFAULT toInt64(y) +y String diff --git a/dbms/tests/queries/0_stateless/00557_alter_null_storage_tables.sql b/dbms/tests/queries/0_stateless/00557_alter_null_storage_tables.sql index 005e4e8134a..e407c253862 100644 --- a/dbms/tests/queries/0_stateless/00557_alter_null_storage_tables.sql +++ b/dbms/tests/queries/0_stateless/00557_alter_null_storage_tables.sql @@ -1,9 +1,9 @@ -DROP TABLE IF EXISTS test.null; +DROP TABLE IF EXISTS null; -CREATE TABLE test.null (x UInt8) ENGINE = Null; -DESCRIBE TABLE test.null; +CREATE TABLE null (x UInt8) ENGINE = Null; +DESCRIBE TABLE null; -ALTER TABLE test.null ADD COLUMN y String, MODIFY COLUMN x Int64 DEFAULT toInt64(y); -DESCRIBE TABLE test.null; +ALTER TABLE null ADD COLUMN y String, MODIFY COLUMN x Int64 DEFAULT toInt64(y); +DESCRIBE TABLE null; -DROP TABLE test.null; +DROP TABLE null; diff --git a/dbms/tests/queries/0_stateless/00561_storage_join.sql b/dbms/tests/queries/0_stateless/00561_storage_join.sql index 20a760ed033..f218f9a0bc2 100644 --- a/dbms/tests/queries/0_stateless/00561_storage_join.sql +++ b/dbms/tests/queries/0_stateless/00561_storage_join.sql @@ -1,6 +1,6 @@ -drop table IF EXISTS test.joinbug; +drop table IF EXISTS joinbug; -CREATE TABLE test.joinbug ( +CREATE TABLE joinbug ( event_date Date MATERIALIZED toDate(created, 'Europe/Moscow'), id UInt64, id2 UInt64, @@ -9,11 +9,11 @@ CREATE TABLE test.joinbug ( created UInt64 ) ENGINE = MergeTree(event_date, (id, id2), 8192); -insert into test.joinbug (id, id2, val, val2, created) values (1,11,91,81,123456), (2,22,92,82,123457); +insert into joinbug (id, id2, val, val2, created) values (1,11,91,81,123456), (2,22,92,82,123457); -drop table IF EXISTS test.joinbug_join; +drop table IF EXISTS joinbug_join; -CREATE TABLE test.joinbug_join ( +CREATE TABLE joinbug_join ( id UInt64, id2 UInt64, val UInt64, @@ -21,20 +21,20 @@ CREATE TABLE test.joinbug_join ( created UInt64 ) ENGINE = Join(ANY, INNER, id2); -insert into test.joinbug_join (id, id2, val, val2, created) +insert into joinbug_join (id, id2, val, val2, created) select id, id2, val, val2, created -from test.joinbug; +from joinbug; /* expected */ select * -from test.joinbug; +from joinbug; /* wtf */ select id, id2, val, val2, created from ( SELECT toUInt64(arrayJoin(range(50))) AS id2 ) -ANY INNER JOIN test.joinbug_join using id2; +ANY INNER JOIN joinbug_join using id2; -DROP TABLE test.joinbug; -DROP TABLE test.joinbug_join; +DROP TABLE joinbug; +DROP TABLE joinbug_join; diff --git a/dbms/tests/queries/0_stateless/00562_in_subquery_merge_tree.sql b/dbms/tests/queries/0_stateless/00562_in_subquery_merge_tree.sql index 15d149ccac5..d2847af2b9d 100644 --- a/dbms/tests/queries/0_stateless/00562_in_subquery_merge_tree.sql +++ b/dbms/tests/queries/0_stateless/00562_in_subquery_merge_tree.sql @@ -1,25 +1,25 @@ -DROP TABLE IF EXISTS test.merge_tree_in_subqueries; -CREATE TABLE test.merge_tree_in_subqueries (id UInt64, name String, num UInt64) ENGINE = MergeTree ORDER BY (id, name); -INSERT INTO test.merge_tree_in_subqueries VALUES(1, 'test1', 42); -INSERT INTO test.merge_tree_in_subqueries VALUES(2, 'test2', 8); -INSERT INTO test.merge_tree_in_subqueries VALUES(3, 'test3', 8); -INSERT INTO test.merge_tree_in_subqueries VALUES(4, 'test4', 1985); -INSERT INTO test.merge_tree_in_subqueries VALUES(5, 'test5', 0); +DROP TABLE IF EXISTS merge_tree_in_subqueries; +CREATE TABLE merge_tree_in_subqueries (id UInt64, name String, num UInt64) ENGINE = MergeTree ORDER BY (id, name); +INSERT INTO merge_tree_in_subqueries VALUES(1, 'test1', 42); +INSERT INTO merge_tree_in_subqueries VALUES(2, 'test2', 8); +INSERT INTO merge_tree_in_subqueries VALUES(3, 'test3', 8); +INSERT INTO merge_tree_in_subqueries VALUES(4, 'test4', 1985); +INSERT INTO merge_tree_in_subqueries VALUES(5, 'test5', 0); -- Index scans. SET force_primary_key = 1; -SELECT * FROM test.merge_tree_in_subqueries WHERE id IN (SELECT * FROM system.numbers LIMIT 0); +SELECT * FROM merge_tree_in_subqueries WHERE id IN (SELECT * FROM system.numbers LIMIT 0); -SELECT * FROM test.merge_tree_in_subqueries WHERE id IN (SELECT * FROM system.numbers LIMIT 2, 3) ORDER BY id; -SELECT * FROM test.merge_tree_in_subqueries WHERE name IN (SELECT 'test' || toString(number) FROM system.numbers LIMIT 2, 3) ORDER BY id; +SELECT * FROM merge_tree_in_subqueries WHERE id IN (SELECT * FROM system.numbers LIMIT 2, 3) ORDER BY id; +SELECT * FROM merge_tree_in_subqueries WHERE name IN (SELECT 'test' || toString(number) FROM system.numbers LIMIT 2, 3) ORDER BY id; -SELECT id AS id2, name AS value FROM test.merge_tree_in_subqueries WHERE (value, id2) IN (SELECT 'test' || toString(number), number FROM system.numbers LIMIT 2, 3) ORDER BY id; +SELECT id AS id2, name AS value FROM merge_tree_in_subqueries WHERE (value, id2) IN (SELECT 'test' || toString(number), number FROM system.numbers LIMIT 2, 3) ORDER BY id; -- Non-index scans. SET force_primary_key = 0; -SELECT id AS id2, name AS value FROM test.merge_tree_in_subqueries WHERE num IN (SELECT number FROM system.numbers LIMIT 10) ORDER BY id; -SELECT id AS id2, name AS value FROM test.merge_tree_in_subqueries WHERE (id, num) IN (SELECT number, number + 6 FROM system.numbers LIMIT 10) ORDER BY id; +SELECT id AS id2, name AS value FROM merge_tree_in_subqueries WHERE num IN (SELECT number FROM system.numbers LIMIT 10) ORDER BY id; +SELECT id AS id2, name AS value FROM merge_tree_in_subqueries WHERE (id, num) IN (SELECT number, number + 6 FROM system.numbers LIMIT 10) ORDER BY id; -DROP TABLE IF EXISTS test.merge_tree_in_subqueries; +DROP TABLE IF EXISTS merge_tree_in_subqueries; diff --git a/dbms/tests/queries/0_stateless/00562_rewrite_select_expression_with_union.sql b/dbms/tests/queries/0_stateless/00562_rewrite_select_expression_with_union.sql index 3527ddb3c41..848ee3acad9 100644 --- a/dbms/tests/queries/0_stateless/00562_rewrite_select_expression_with_union.sql +++ b/dbms/tests/queries/0_stateless/00562_rewrite_select_expression_with_union.sql @@ -1,10 +1,10 @@ -DROP TABLE IF EXISTS test.test; +DROP TABLE IF EXISTS test; -CREATE TABLE test.test ( s String, i Int64) ENGINE = Memory; +CREATE TABLE test ( s String, i Int64) ENGINE = Memory; -INSERT INTO test.test VALUES('test_string', 1); +INSERT INTO test VALUES('test_string', 1); -SELECT s, SUM(i*2) AS i FROM test.test GROUP BY s UNION ALL SELECT s, SUM(i*2) AS i FROM test.test GROUP BY s; -SELECT s FROM (SELECT s, SUM(i*2) AS i FROM test.test GROUP BY s UNION ALL SELECT s, SUM(i*2) AS i FROM test.test GROUP BY s); +SELECT s, SUM(i*2) AS i FROM test GROUP BY s UNION ALL SELECT s, SUM(i*2) AS i FROM test GROUP BY s; +SELECT s FROM (SELECT s, SUM(i*2) AS i FROM test GROUP BY s UNION ALL SELECT s, SUM(i*2) AS i FROM test GROUP BY s); -DROP TABLE IF EXISTS test.test; +DROP TABLE IF EXISTS test; diff --git a/dbms/tests/queries/0_stateless/00563_complex_in_expression.sql b/dbms/tests/queries/0_stateless/00563_complex_in_expression.sql index 1a84e560509..3821ec791d1 100644 --- a/dbms/tests/queries/0_stateless/00563_complex_in_expression.sql +++ b/dbms/tests/queries/0_stateless/00563_complex_in_expression.sql @@ -1,32 +1,32 @@ -DROP TABLE IF EXISTS test.test; +DROP TABLE IF EXISTS test; -CREATE TABLE test.test ( dt Date, site_id Int32, site_key String ) ENGINE = MergeTree(dt, (site_id, site_key, dt), 8192); -INSERT INTO test.test (dt,site_id, site_key) VALUES ('2018-1-29', 100, 'key'); -SELECT * FROM test.test WHERE toInt32(site_id) IN (100); -SELECT * FROM test.test WHERE toInt32(site_id) IN (100,101); +CREATE TABLE test ( dt Date, site_id Int32, site_key String ) ENGINE = MergeTree(dt, (site_id, site_key, dt), 8192); +INSERT INTO test (dt,site_id, site_key) VALUES ('2018-1-29', 100, 'key'); +SELECT * FROM test WHERE toInt32(site_id) IN (100); +SELECT * FROM test WHERE toInt32(site_id) IN (100,101); -DROP TABLE IF EXISTS test.test; +DROP TABLE IF EXISTS test; -DROP TABLE IF EXISTS test.join_with_index; -CREATE TABLE test.join_with_index (key UInt32, data UInt64) ENGINE = MergeTree ORDER BY key SETTINGS index_granularity=1; -INSERT INTO test.join_with_index VALUES (1, 0), (2, 99); +DROP TABLE IF EXISTS join_with_index; +CREATE TABLE join_with_index (key UInt32, data UInt64) ENGINE = MergeTree ORDER BY key SETTINGS index_granularity=1; +INSERT INTO join_with_index VALUES (1, 0), (2, 99); SELECT key + 1 -FROM test.join_with_index +FROM join_with_index ALL INNER JOIN ( SELECT key, data - FROM test.join_with_index + FROM join_with_index WHERE toUInt64(data) IN (0, 529335254087962442) ) USING (key); SELECT _uniq, _uniq IN (0, 99) -FROM test.join_with_index +FROM join_with_index ARRAY JOIN [key, data] AS _uniq ORDER BY _uniq; -DROP TABLE IF EXISTS test.join_with_index; +DROP TABLE IF EXISTS join_with_index; diff --git a/dbms/tests/queries/0_stateless/00564_enum_order.sh b/dbms/tests/queries/0_stateless/00564_enum_order.sh index f2dfb0270e7..0424cc6a959 100755 --- a/dbms/tests/queries/0_stateless/00564_enum_order.sh +++ b/dbms/tests/queries/0_stateless/00564_enum_order.sh @@ -3,8 +3,8 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CURL -sS "$CLICKHOUSE_URL" -d "DROP TABLE IF EXISTS test.enum"; -$CLICKHOUSE_CURL -sS "$CLICKHOUSE_URL" -d "CREATE TABLE test.enum (x Enum8('a' = 1, 'bcdefghijklmno' = 0)) ENGINE = Memory"; -$CLICKHOUSE_CURL -sS "$CLICKHOUSE_URL" -d "INSERT INTO test.enum VALUES ('a')"; -$CLICKHOUSE_CURL -sS "$CLICKHOUSE_URL" -d "SELECT * FROM test.enum"; -$CLICKHOUSE_CURL -sS "$CLICKHOUSE_URL" -d "DROP TABLE test.enum"; +$CLICKHOUSE_CURL -sS "$CLICKHOUSE_URL_PARAMS" -d "DROP TABLE IF EXISTS enum"; +$CLICKHOUSE_CURL -sS "$CLICKHOUSE_URL_PARAMS" -d "CREATE TABLE enum (x Enum8('a' = 1, 'bcdefghijklmno' = 0)) ENGINE = Memory"; +$CLICKHOUSE_CURL -sS "$CLICKHOUSE_URL_PARAMS" -d "INSERT INTO enum VALUES ('a')"; +$CLICKHOUSE_CURL -sS "$CLICKHOUSE_URL_PARAMS" -d "SELECT * FROM enum"; +$CLICKHOUSE_CURL -sS "$CLICKHOUSE_URL_PARAMS" -d "DROP TABLE enum"; diff --git a/dbms/tests/queries/0_stateless/00564_initial_column_values_with_default_expression.sql b/dbms/tests/queries/0_stateless/00564_initial_column_values_with_default_expression.sql index 8ac087c6dee..d26621dce7a 100644 --- a/dbms/tests/queries/0_stateless/00564_initial_column_values_with_default_expression.sql +++ b/dbms/tests/queries/0_stateless/00564_initial_column_values_with_default_expression.sql @@ -1,13 +1,13 @@ -DROP TABLE IF EXISTS test.test; +DROP TABLE IF EXISTS test; -CREATE TABLE IF NOT EXISTS test.test( id UInt32, track UInt8, codec String, content String, rdate Date DEFAULT '2018-02-03', track_id String DEFAULT concat(concat(concat(toString(track), '-'), codec), content) ) ENGINE=MergeTree(rdate, (id, track_id), 8192); +CREATE TABLE IF NOT EXISTS test( id UInt32, track UInt8, codec String, content String, rdate Date DEFAULT '2018-02-03', track_id String DEFAULT concat(concat(concat(toString(track), '-'), codec), content) ) ENGINE=MergeTree(rdate, (id, track_id), 8192); -INSERT INTO test.test(id, track, codec) VALUES(1, 0, 'h264'); +INSERT INTO test(id, track, codec) VALUES(1, 0, 'h264'); -SELECT * FROM test.test ORDER BY id; +SELECT * FROM test ORDER BY id; -INSERT INTO test.test(id, track, codec, content) VALUES(2, 0, 'h264', 'CONTENT'); +INSERT INTO test(id, track, codec, content) VALUES(2, 0, 'h264', 'CONTENT'); -SELECT * FROM test.test ORDER BY id; +SELECT * FROM test ORDER BY id; -DROP TABLE IF EXISTS test.test; +DROP TABLE IF EXISTS test; diff --git a/dbms/tests/queries/0_stateless/00564_versioned_collapsing_merge_tree.sql b/dbms/tests/queries/0_stateless/00564_versioned_collapsing_merge_tree.sql index 85500dba763..5b7f59f8b65 100644 --- a/dbms/tests/queries/0_stateless/00564_versioned_collapsing_merge_tree.sql +++ b/dbms/tests/queries/0_stateless/00564_versioned_collapsing_merge_tree.sql @@ -1,203 +1,203 @@ -drop table if exists test.mult_tab; -create table test.mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(date, (date), 8192, sign, version); -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +drop table if exists mult_tab; +create table mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(date, (date), 8192, sign, version); +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; select 'table with 2 blocks final'; -select * from test.mult_tab final; -optimize table test.mult_tab; +select * from mult_tab final; +optimize table mult_tab; select 'table with 2 blocks optimized'; -select * from test.mult_tab; +select * from mult_tab; select '-------------------------'; -drop table if exists test.mult_tab; -create table test.mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(date, (date, value), 8192, sign, version); -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +drop table if exists mult_tab; +create table mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(date, (date, value), 8192, sign, version); +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; select 'table with 2 blocks final'; -select * from test.mult_tab final; -optimize table test.mult_tab; +select * from mult_tab final; +optimize table mult_tab; select 'table with 2 blocks optimized'; -select * from test.mult_tab; +select * from mult_tab; select '-------------------------'; -drop table if exists test.mult_tab; -create table test.mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(date, (date, value), 8192, sign, version); -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 10; +drop table if exists mult_tab; +create table mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(date, (date, value), 8192, sign, version); +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 10; select 'table with 2 blocks final'; -select * from test.mult_tab final; -optimize table test.mult_tab; +select * from mult_tab final; +optimize table mult_tab; select 'table with 2 blocks optimized'; -select * from test.mult_tab; +select * from mult_tab; select '-------------------------'; -drop table if exists test.mult_tab; -create table test.mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(date, (date, value), 8192, sign, version); -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 1, if(number % 2, -1, 1) from system.numbers limit 10; +drop table if exists mult_tab; +create table mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(date, (date, value), 8192, sign, version); +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 1, if(number % 2, -1, 1) from system.numbers limit 10; select 'table with 2 blocks final'; -select * from test.mult_tab final; -optimize table test.mult_tab; +select * from mult_tab final; +optimize table mult_tab; select 'table with 2 blocks optimized'; -select * from test.mult_tab; +select * from mult_tab; select '-------------------------'; -drop table if exists test.mult_tab; -create table test.mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(date, (date, value), 8192, sign, version); -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 10; +drop table if exists mult_tab; +create table mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(date, (date, value), 8192, sign, version); +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 10; select 'table with 4 blocks final'; -select * from test.mult_tab final; -optimize table test.mult_tab; +select * from mult_tab final; +optimize table mult_tab; select 'table with 4 blocks optimized'; -select * from test.mult_tab; +select * from mult_tab; select '-------------------------'; -drop table if exists test.mult_tab; -create table test.mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(date, (date, value), 8192, sign, version); -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 1, if(number % 3 = 0, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 1, if(number % 3 = 1, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 1, if(number % 3 = 2, 1, -1) from system.numbers limit 10; +drop table if exists mult_tab; +create table mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(date, (date, value), 8192, sign, version); +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 1, if(number % 3 = 0, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 1, if(number % 3 = 1, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 1, if(number % 3 = 2, 1, -1) from system.numbers limit 10; select 'table with 5 blocks final'; -select * from test.mult_tab final; -optimize table test.mult_tab; +select * from mult_tab final; +optimize table mult_tab; select 'table with 5 blocks optimized'; -select * from test.mult_tab; +select * from mult_tab; select '-------------------------'; -drop table if exists test.mult_tab; -create table test.mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(date, (date, value), 8192, sign, version); -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 1000000; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 1000000; +drop table if exists mult_tab; +create table mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(date, (date, value), 8192, sign, version); +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 1000000; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 1000000; select 'table with 2 blocks final'; -select * from test.mult_tab final; -optimize table test.mult_tab; +select * from mult_tab final; +optimize table mult_tab; select 'table with 2 blocks optimized'; -select * from test.mult_tab; +select * from mult_tab; select '-------------------------'; -drop table if exists test.mult_tab; -create table test.mult_tab (date Date, value UInt64, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(date, (date), 8192, sign, version); -insert into test.mult_tab select '2018-01-31', number, 0, if(number < 64, 1, -1) from system.numbers limit 128; -insert into test.mult_tab select '2018-01-31', number, 0, if(number < 64, -1, 1) from system.numbers limit 128; +drop table if exists mult_tab; +create table mult_tab (date Date, value UInt64, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(date, (date), 8192, sign, version); +insert into mult_tab select '2018-01-31', number, 0, if(number < 64, 1, -1) from system.numbers limit 128; +insert into mult_tab select '2018-01-31', number, 0, if(number < 64, -1, 1) from system.numbers limit 128; select 'table with 2 blocks final'; -select * from test.mult_tab final settings max_block_size=33; -optimize table test.mult_tab; +select * from mult_tab final settings max_block_size=33; +optimize table mult_tab; select 'table with 2 blocks optimized'; -select * from test.mult_tab; +select * from mult_tab; select '-------------------------'; select 'Vertival merge'; select '-------------------------'; -drop table if exists test.mult_tab; -create table test.mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(sign, version) order by (date) settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +drop table if exists mult_tab; +create table mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(sign, version) order by (date) settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; select 'table with 2 blocks final'; -select * from test.mult_tab final; -optimize table test.mult_tab; +select * from mult_tab final; +optimize table mult_tab; select 'table with 2 blocks optimized'; -select * from test.mult_tab; +select * from mult_tab; select '-------------------------'; -drop table if exists test.mult_tab; -create table test.mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(sign, version) order by (date, value) settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +drop table if exists mult_tab; +create table mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(sign, version) order by (date, value) settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; select 'table with 2 blocks final'; -select * from test.mult_tab final; -optimize table test.mult_tab; +select * from mult_tab final; +optimize table mult_tab; select 'table with 2 blocks optimized'; -select * from test.mult_tab; +select * from mult_tab; select '-------------------------'; -drop table if exists test.mult_tab; -create table test.mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(sign, version) order by (date, value) settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 10; +drop table if exists mult_tab; +create table mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(sign, version) order by (date, value) settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 10; select 'table with 2 blocks final'; -select * from test.mult_tab final; -optimize table test.mult_tab; +select * from mult_tab final; +optimize table mult_tab; select 'table with 2 blocks optimized'; -select * from test.mult_tab; +select * from mult_tab; select '-------------------------'; -drop table if exists test.mult_tab; -create table test.mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(sign, version) order by (date, value) settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 1, if(number % 2, -1, 1) from system.numbers limit 10; +drop table if exists mult_tab; +create table mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(sign, version) order by (date, value) settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 1, if(number % 2, -1, 1) from system.numbers limit 10; select 'table with 2 blocks final'; -select * from test.mult_tab final; -optimize table test.mult_tab; +select * from mult_tab final; +optimize table mult_tab; select 'table with 2 blocks optimized'; -select * from test.mult_tab; +select * from mult_tab; select '-------------------------'; -drop table if exists test.mult_tab; -create table test.mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(sign, version) order by (date, value) settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 10; +drop table if exists mult_tab; +create table mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(sign, version) order by (date, value) settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 10; select 'table with 4 blocks final'; -select * from test.mult_tab final; -optimize table test.mult_tab; +select * from mult_tab final; +optimize table mult_tab; select 'table with 4 blocks optimized'; -select * from test.mult_tab; +select * from mult_tab; select '-------------------------'; -drop table if exists test.mult_tab; -create table test.mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(sign, version) order by (date, value) settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 1, if(number % 3 = 0, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 1, if(number % 3 = 1, 1, -1) from system.numbers limit 10; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 1, if(number % 3 = 2, 1, -1) from system.numbers limit 10; +drop table if exists mult_tab; +create table mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(sign, version) order by (date, value) settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 1, if(number % 3 = 0, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 1, if(number % 3 = 1, 1, -1) from system.numbers limit 10; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 1, if(number % 3 = 2, 1, -1) from system.numbers limit 10; select 'table with 5 blocks final'; -select * from test.mult_tab final; -optimize table test.mult_tab; +select * from mult_tab final; +optimize table mult_tab; select 'table with 5 blocks optimized'; -select * from test.mult_tab; +select * from mult_tab; select '-------------------------'; -drop table if exists test.mult_tab; -create table test.mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(sign, version) order by (date, value) settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 1000000; -insert into test.mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 1000000; +drop table if exists mult_tab; +create table mult_tab (date Date, value String, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(sign, version) order by (date, value) settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, 1, -1) from system.numbers limit 1000000; +insert into mult_tab select '2018-01-31', 'str_' || toString(number), 0, if(number % 2, -1, 1) from system.numbers limit 1000000; select 'table with 2 blocks final'; -select * from test.mult_tab final; -optimize table test.mult_tab; +select * from mult_tab final; +optimize table mult_tab; select 'table with 2 blocks optimized'; -select * from test.mult_tab; +select * from mult_tab; select '-------------------------'; -drop table if exists test.mult_tab; -create table test.mult_tab (date Date, value UInt64, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(sign, version) order by (date) settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; -insert into test.mult_tab select '2018-01-31', number, 0, if(number < 64, 1, -1) from system.numbers limit 128; -insert into test.mult_tab select '2018-01-31', number, 0, if(number < 64, -1, 1) from system.numbers limit 128; +drop table if exists mult_tab; +create table mult_tab (date Date, value UInt64, version UInt64, sign Int8) engine = VersionedCollapsingMergeTree(sign, version) order by (date) settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; +insert into mult_tab select '2018-01-31', number, 0, if(number < 64, 1, -1) from system.numbers limit 128; +insert into mult_tab select '2018-01-31', number, 0, if(number < 64, -1, 1) from system.numbers limit 128; select 'table with 2 blocks final'; -select * from test.mult_tab final settings max_block_size=33; -optimize table test.mult_tab; +select * from mult_tab final settings max_block_size=33; +optimize table mult_tab; select 'table with 2 blocks optimized'; -select * from test.mult_tab; +select * from mult_tab; -DROP TABLE test.mult_tab; +DROP TABLE mult_tab; diff --git a/dbms/tests/queries/0_stateless/00565_enum_order.reference b/dbms/tests/queries/0_stateless/00565_enum_order.reference index bfdc1af1d69..53d0fa77490 100644 --- a/dbms/tests/queries/0_stateless/00565_enum_order.reference +++ b/dbms/tests/queries/0_stateless/00565_enum_order.reference @@ -1,4 +1,4 @@ -INSERT INTO `test`.`test_log`(`date`, `datetime`, `path`, `gtid`, `query_serial`, `row_serial`, `reqid`, `method`, `service`, `db`, `type`, `operation`, `old_fields`.`name`, `old_fields`.`value`, `old_fields`.`is_null`, `new_fields`.`name`, `new_fields`.`value`, `new_fields`.`is_null`, `record_source_type`, `record_source_timestamp`, `deleted`) FORMAT TabSeparated +INSERT INTO `test_log`(`date`, `datetime`, `path`, `gtid`, `query_serial`, `row_serial`, `reqid`, `method`, `service`, `db`, `type`, `operation`, `old_fields`.`name`, `old_fields`.`value`, `old_fields`.`is_null`, `new_fields`.`name`, `new_fields`.`value`, `new_fields`.`is_null`, `record_source_type`, `record_source_timestamp`, `deleted`) FORMAT TabSeparated run by native protocol run by http protocol run by native protocol diff --git a/dbms/tests/queries/0_stateless/00565_enum_order.sh b/dbms/tests/queries/0_stateless/00565_enum_order.sh index fdb824de8fe..c936f05dac5 100755 --- a/dbms/tests/queries/0_stateless/00565_enum_order.sh +++ b/dbms/tests/queries/0_stateless/00565_enum_order.sh @@ -5,12 +5,12 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) set -e -o pipefail -$CLICKHOUSE_CLIENT <<'EOF' -DROP TABLE IF EXISTS `test`.`test_log` +$CLICKHOUSE_CLIENT <<"EOF" +DROP TABLE IF EXISTS `test_log` EOF -$CLICKHOUSE_CLIENT <<'EOF' -CREATE TABLE `test`.`test_log` ( +$CLICKHOUSE_CLIENT <<"EOF" +CREATE TABLE `test_log` ( date Date, datetime DateTime, path String, @@ -36,13 +36,13 @@ CREATE TABLE `test`.`test_log` ( EOF DATA='2018-01-01\t2018-01-01 03:00:00\tclient:1-\tserveruuid:0\t0\t0\t0\t\t\ttest\ttest\tINSERT\t[]\t[]\t[]\t[]\t[]\t[]\t1\t2018-02-02 15:54:10\tfalse\n' -QUERY='INSERT INTO `test`.`test_log`(`date`, `datetime`, `path`, `gtid`, `query_serial`, `row_serial`, +QUERY='INSERT INTO `test_log`(`date`, `datetime`, `path`, `gtid`, `query_serial`, `row_serial`, `reqid`, `method`, `service`, `db`, `type`, `operation`, `old_fields`.`name`, `old_fields`.`value`, `old_fields`.`is_null`, `new_fields`.`name`, `new_fields`.`value`, `new_fields`.`is_null`, `record_source_type`, `record_source_timestamp`, `deleted`) FORMAT TabSeparated' QUERY="$(tr -d '\n' <<<"$QUERY")" echo $QUERY -URL=$(python -c 'print "'${CLICKHOUSE_URL}'?query=" + __import__("urllib").quote("'"$QUERY"'")') +URL=$(python -c 'print "'${CLICKHOUSE_URL_PARAMS}'&query=" + __import__("urllib").quote("'"$QUERY"'")') set +e for i in 1 2 3; do @@ -54,5 +54,5 @@ for i in 1 2 3; do done echo 'Count:' -$CLICKHOUSE_CLIENT --query 'select count() from test.test_log' -$CLICKHOUSE_CLIENT --query 'DROP TABLE test.test_log' +$CLICKHOUSE_CLIENT --query 'select count() from test_log' +$CLICKHOUSE_CLIENT --query 'DROP TABLE test_log' diff --git a/dbms/tests/queries/0_stateless/00568_empty_function_with_fixed_string.sql b/dbms/tests/queries/0_stateless/00568_empty_function_with_fixed_string.sql index 7abc9067b7c..fc2c6b6526f 100644 --- a/dbms/tests/queries/0_stateless/00568_empty_function_with_fixed_string.sql +++ b/dbms/tests/queries/0_stateless/00568_empty_function_with_fixed_string.sql @@ -1,8 +1,8 @@ SELECT toFixedString('', 4) AS str, empty(str) AS is_empty; SELECT toFixedString('\0abc', 4) AS str, empty(str) AS is_empty; -DROP TABLE IF EXISTS test.defaulted; -CREATE TABLE test.defaulted (v6 FixedString(16)) ENGINE=Memory; -INSERT INTO test.defaulted SELECT toFixedString('::0', 16) FROM numbers(32768); -SELECT count(), notEmpty(v6) e FROM test.defaulted GROUP BY e; -DROP TABLE test.defaulted; +DROP TABLE IF EXISTS defaulted; +CREATE TABLE defaulted (v6 FixedString(16)) ENGINE=Memory; +INSERT INTO defaulted SELECT toFixedString('::0', 16) FROM numbers(32768); +SELECT count(), notEmpty(v6) e FROM defaulted GROUP BY e; +DROP TABLE defaulted; diff --git a/dbms/tests/queries/0_stateless/00571_alter_nullable.sql b/dbms/tests/queries/0_stateless/00571_alter_nullable.sql index 66ad47b10af..486c82a9133 100644 --- a/dbms/tests/queries/0_stateless/00571_alter_nullable.sql +++ b/dbms/tests/queries/0_stateless/00571_alter_nullable.sql @@ -1,13 +1,13 @@ -DROP TABLE IF EXISTS test.nullable; -CREATE TABLE test.nullable (x String) ENGINE = MergeTree ORDER BY x; -INSERT INTO test.nullable VALUES ('hello'), ('world'); -SELECT * FROM test.nullable; -ALTER TABLE test.nullable ADD COLUMN n Nullable(UInt64); -SELECT * FROM test.nullable; -ALTER TABLE test.nullable DROP COLUMN n; -ALTER TABLE test.nullable ADD COLUMN n Nullable(UInt64) DEFAULT NULL; -SELECT * FROM test.nullable; -ALTER TABLE test.nullable DROP COLUMN n; -ALTER TABLE test.nullable ADD COLUMN n Nullable(UInt64) DEFAULT 0; -SELECT * FROM test.nullable; -DROP TABLE test.nullable; +DROP TABLE IF EXISTS nullable; +CREATE TABLE nullable (x String) ENGINE = MergeTree ORDER BY x; +INSERT INTO nullable VALUES ('hello'), ('world'); +SELECT * FROM nullable; +ALTER TABLE nullable ADD COLUMN n Nullable(UInt64); +SELECT * FROM nullable; +ALTER TABLE nullable DROP COLUMN n; +ALTER TABLE nullable ADD COLUMN n Nullable(UInt64) DEFAULT NULL; +SELECT * FROM nullable; +ALTER TABLE nullable DROP COLUMN n; +ALTER TABLE nullable ADD COLUMN n Nullable(UInt64) DEFAULT 0; +SELECT * FROM nullable; +DROP TABLE nullable; diff --git a/dbms/tests/queries/0_stateless/00574_empty_strings_deserialization.sh b/dbms/tests/queries/0_stateless/00574_empty_strings_deserialization.sh index 879f487c040..1facba5c121 100755 --- a/dbms/tests/queries/0_stateless/00574_empty_strings_deserialization.sh +++ b/dbms/tests/queries/0_stateless/00574_empty_strings_deserialization.sh @@ -3,13 +3,13 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.empty_strings_deserialization" -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.empty_strings_deserialization(s String, i Int32, f Float32) ENGINE Memory" +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS empty_strings_deserialization" +$CLICKHOUSE_CLIENT -q "CREATE TABLE empty_strings_deserialization(s String, i Int32, f Float32) ENGINE Memory" -echo ',,' | $CLICKHOUSE_CLIENT -q "INSERT INTO test.empty_strings_deserialization FORMAT CSV" -echo 'aaa,-,' | $CLICKHOUSE_CLIENT -q "INSERT INTO test.empty_strings_deserialization FORMAT CSV" -echo 'bbb,,-' | $CLICKHOUSE_CLIENT -q "INSERT INTO test.empty_strings_deserialization FORMAT CSV" +echo ',,' | $CLICKHOUSE_CLIENT -q "INSERT INTO empty_strings_deserialization FORMAT CSV" +echo 'aaa,-,' | $CLICKHOUSE_CLIENT -q "INSERT INTO empty_strings_deserialization FORMAT CSV" +echo 'bbb,,-' | $CLICKHOUSE_CLIENT -q "INSERT INTO empty_strings_deserialization FORMAT CSV" -$CLICKHOUSE_CLIENT -q "SELECT * FROM test.empty_strings_deserialization ORDER BY s" +$CLICKHOUSE_CLIENT -q "SELECT * FROM empty_strings_deserialization ORDER BY s" -$CLICKHOUSE_CLIENT -q "DROP TABLE test.empty_strings_deserialization" +$CLICKHOUSE_CLIENT -q "DROP TABLE empty_strings_deserialization" diff --git a/dbms/tests/queries/0_stateless/00575_illegal_column_exception_when_drop_depen_column.sh b/dbms/tests/queries/0_stateless/00575_illegal_column_exception_when_drop_depen_column.sh index d199096815c..b5bf062227f 100755 --- a/dbms/tests/queries/0_stateless/00575_illegal_column_exception_when_drop_depen_column.sh +++ b/dbms/tests/queries/0_stateless/00575_illegal_column_exception_when_drop_depen_column.sh @@ -6,13 +6,13 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) exception_pattern="Code: 44.*Cannot drop column id, because column id2 depends on it" -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.test;" -${CLICKHOUSE_CLIENT} --query "CREATE TABLE test.test (dt Date DEFAULT now(), id UInt32, id2 UInt32 DEFAULT id + 1) ENGINE = MergeTree(dt, dt, 8192);" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.test(dt,id) VALUES ('2018-02-22',3), ('2018-02-22',4), ('2018-02-22',5);" -${CLICKHOUSE_CLIENT} --query "SELECT * FROM test.test ORDER BY id;" -echo `${CLICKHOUSE_CLIENT} --query "ALTER TABLE test.test DROP COLUMN id;" --server_logs_file=/dev/null 2>&1 | grep -c "$exception_pattern"` -${CLICKHOUSE_CLIENT} --query "ALTER TABLE test.test DROP COLUMN id2;" -${CLICKHOUSE_CLIENT} --query "SELECT * FROM test.test ORDER BY id;" -${CLICKHOUSE_CLIENT} --query "ALTER TABLE test.test DROP COLUMN id;" -${CLICKHOUSE_CLIENT} --query "SELECT * FROM test.test ORDER BY dt" -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.test;" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test;" +${CLICKHOUSE_CLIENT} --query "CREATE TABLE test (dt Date DEFAULT now(), id UInt32, id2 UInt32 DEFAULT id + 1) ENGINE = MergeTree(dt, dt, 8192);" +${CLICKHOUSE_CLIENT} --query "INSERT INTO test(dt,id) VALUES ('2018-02-22',3), ('2018-02-22',4), ('2018-02-22',5);" +${CLICKHOUSE_CLIENT} --query "SELECT * FROM test ORDER BY id;" +echo `${CLICKHOUSE_CLIENT} --query "ALTER TABLE test DROP COLUMN id;" --server_logs_file=/dev/null 2>&1 | grep -c "$exception_pattern"` +${CLICKHOUSE_CLIENT} --query "ALTER TABLE test DROP COLUMN id2;" +${CLICKHOUSE_CLIENT} --query "SELECT * FROM test ORDER BY id;" +${CLICKHOUSE_CLIENT} --query "ALTER TABLE test DROP COLUMN id;" +${CLICKHOUSE_CLIENT} --query "SELECT * FROM test ORDER BY dt" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test;" diff --git a/dbms/tests/queries/0_stateless/00575_merge_and_index_with_function_in_in.sql b/dbms/tests/queries/0_stateless/00575_merge_and_index_with_function_in_in.sql index 8fc5b3faf16..cfd1275f03e 100644 --- a/dbms/tests/queries/0_stateless/00575_merge_and_index_with_function_in_in.sql +++ b/dbms/tests/queries/0_stateless/00575_merge_and_index_with_function_in_in.sql @@ -1,9 +1,9 @@ -DROP TABLE IF EXISTS test.t; +DROP TABLE IF EXISTS t; -create table test.t(d Date) engine MergeTree(d, d, 8192); +create table t(d Date) engine MergeTree(d, d, 8192); -insert into test.t values ('2018-02-20'); +insert into t values ('2018-02-20'); -select count() from test.t where toDayOfWeek(d) in (2); +select count() from t where toDayOfWeek(d) in (2); -DROP TABLE test.t; +DROP TABLE t; diff --git a/dbms/tests/queries/0_stateless/00576_nested_and_prewhere.sql b/dbms/tests/queries/0_stateless/00576_nested_and_prewhere.sql index 5483086e8f6..b15af582a19 100644 --- a/dbms/tests/queries/0_stateless/00576_nested_and_prewhere.sql +++ b/dbms/tests/queries/0_stateless/00576_nested_and_prewhere.sql @@ -1,13 +1,13 @@ -DROP TABLE IF EXISTS test.nested; +DROP TABLE IF EXISTS nested; -CREATE TABLE test.nested (x UInt64, filter UInt8, n Nested(a UInt64)) ENGINE = MergeTree ORDER BY x; -INSERT INTO test.nested SELECT number, number % 2, range(number % 10) FROM system.numbers LIMIT 100000; +CREATE TABLE nested (x UInt64, filter UInt8, n Nested(a UInt64)) ENGINE = MergeTree ORDER BY x; +INSERT INTO nested SELECT number, number % 2, range(number % 10) FROM system.numbers LIMIT 100000; -ALTER TABLE test.nested ADD COLUMN n.b Array(UInt64); -SELECT DISTINCT n.b FROM test.nested PREWHERE filter; +ALTER TABLE nested ADD COLUMN n.b Array(UInt64); +SELECT DISTINCT n.b FROM nested PREWHERE filter; -ALTER TABLE test.nested ADD COLUMN n.c Array(UInt64) DEFAULT arrayMap(x -> x * 2, n.a); -SELECT DISTINCT n.c FROM test.nested PREWHERE filter; -SELECT DISTINCT n.a, n.c FROM test.nested PREWHERE filter; +ALTER TABLE nested ADD COLUMN n.c Array(UInt64) DEFAULT arrayMap(x -> x * 2, n.a); +SELECT DISTINCT n.c FROM nested PREWHERE filter; +SELECT DISTINCT n.a, n.c FROM nested PREWHERE filter; -DROP TABLE test.nested; +DROP TABLE nested; diff --git a/dbms/tests/queries/0_stateless/00577_replacing_merge_tree_vertical_merge.sql b/dbms/tests/queries/0_stateless/00577_replacing_merge_tree_vertical_merge.sql index 25b53d9b169..57b17f7f255 100644 --- a/dbms/tests/queries/0_stateless/00577_replacing_merge_tree_vertical_merge.sql +++ b/dbms/tests/queries/0_stateless/00577_replacing_merge_tree_vertical_merge.sql @@ -1,8 +1,8 @@ -drop table if exists test.tab; -create table test.tab (date Date, version UInt64, val UInt64) engine = ReplacingMergeTree(version) partition by date order by date settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; -insert into test.tab values ('2018-01-01', 2, 2), ('2018-01-01', 1, 1); -insert into test.tab values ('2018-01-01', 0, 0); -select * from test.tab order by version; -OPTIMIZE TABLE test.tab; -select * from test.tab; +drop table if exists tab; +create table tab (date Date, version UInt64, val UInt64) engine = ReplacingMergeTree(version) partition by date order by date settings enable_vertical_merge_algorithm = 1, vertical_merge_algorithm_min_rows_to_activate = 1, vertical_merge_algorithm_min_columns_to_activate = 0; +insert into tab values ('2018-01-01', 2, 2), ('2018-01-01', 1, 1); +insert into tab values ('2018-01-01', 0, 0); +select * from tab order by version; +OPTIMIZE TABLE tab; +select * from tab; diff --git a/dbms/tests/queries/0_stateless/00578_merge_trees_without_primary_key.sql b/dbms/tests/queries/0_stateless/00578_merge_trees_without_primary_key.sql index 2e1c0d24024..d33b53234d2 100644 --- a/dbms/tests/queries/0_stateless/00578_merge_trees_without_primary_key.sql +++ b/dbms/tests/queries/0_stateless/00578_merge_trees_without_primary_key.sql @@ -1,56 +1,56 @@ SELECT '*** MergeTree ***'; -DROP TABLE IF EXISTS test.unsorted; -CREATE TABLE test.unsorted (x UInt32, y String) ENGINE MergeTree ORDER BY tuple() SETTINGS vertical_merge_algorithm_min_rows_to_activate=0, vertical_merge_algorithm_min_columns_to_activate=0; +DROP TABLE IF EXISTS unsorted; +CREATE TABLE unsorted (x UInt32, y String) ENGINE MergeTree ORDER BY tuple() SETTINGS vertical_merge_algorithm_min_rows_to_activate=0, vertical_merge_algorithm_min_columns_to_activate=0; -INSERT INTO test.unsorted VALUES (1, 'a'), (5, 'b'); -INSERT INTO test.unsorted VALUES (2, 'c'), (4, 'd'); -INSERT INTO test.unsorted VALUES (3, 'e'); +INSERT INTO unsorted VALUES (1, 'a'), (5, 'b'); +INSERT INTO unsorted VALUES (2, 'c'), (4, 'd'); +INSERT INTO unsorted VALUES (3, 'e'); -OPTIMIZE TABLE test.unsorted PARTITION tuple() FINAL; +OPTIMIZE TABLE unsorted PARTITION tuple() FINAL; -SELECT * FROM test.unsorted; +SELECT * FROM unsorted; -DROP TABLE test.unsorted; +DROP TABLE unsorted; SELECT '*** ReplacingMergeTree ***'; -DROP TABLE IF EXISTS test.unsorted_replacing; +DROP TABLE IF EXISTS unsorted_replacing; -CREATE TABLE test.unsorted_replacing (x UInt32, s String, v UInt32) ENGINE ReplacingMergeTree(v) ORDER BY tuple(); +CREATE TABLE unsorted_replacing (x UInt32, s String, v UInt32) ENGINE ReplacingMergeTree(v) ORDER BY tuple(); -INSERT INTO test.unsorted_replacing VALUES (1, 'a', 5), (5, 'b', 4); -INSERT INTO test.unsorted_replacing VALUES (2, 'c', 3), (4, 'd', 2); -INSERT INTO test.unsorted_replacing VALUES (3, 'e', 1); +INSERT INTO unsorted_replacing VALUES (1, 'a', 5), (5, 'b', 4); +INSERT INTO unsorted_replacing VALUES (2, 'c', 3), (4, 'd', 2); +INSERT INTO unsorted_replacing VALUES (3, 'e', 1); -SELECT * FROM test.unsorted_replacing FINAL; +SELECT * FROM unsorted_replacing FINAL; SELECT '---'; -OPTIMIZE TABLE test.unsorted_replacing PARTITION tuple() FINAL; +OPTIMIZE TABLE unsorted_replacing PARTITION tuple() FINAL; -SELECT * FROM test.unsorted_replacing; +SELECT * FROM unsorted_replacing; -DROP TABLE test.unsorted_replacing; +DROP TABLE unsorted_replacing; SELECT '*** CollapsingMergeTree ***'; -DROP TABLE IF EXISTS test.unsorted_collapsing; +DROP TABLE IF EXISTS unsorted_collapsing; -CREATE TABLE test.unsorted_collapsing (x UInt32, s String, sign Int8) ENGINE CollapsingMergeTree(sign) ORDER BY tuple(); +CREATE TABLE unsorted_collapsing (x UInt32, s String, sign Int8) ENGINE CollapsingMergeTree(sign) ORDER BY tuple(); -INSERT INTO test.unsorted_collapsing VALUES (1, 'a', 1); -INSERT INTO test.unsorted_collapsing VALUES (1, 'a', -1), (2, 'b', 1); -INSERT INTO test.unsorted_collapsing VALUES (2, 'b', -1), (3, 'c', 1); +INSERT INTO unsorted_collapsing VALUES (1, 'a', 1); +INSERT INTO unsorted_collapsing VALUES (1, 'a', -1), (2, 'b', 1); +INSERT INTO unsorted_collapsing VALUES (2, 'b', -1), (3, 'c', 1); -SELECT * FROM test.unsorted_collapsing FINAL; +SELECT * FROM unsorted_collapsing FINAL; SELECT '---'; -OPTIMIZE TABLE test.unsorted_collapsing PARTITION tuple() FINAL; +OPTIMIZE TABLE unsorted_collapsing PARTITION tuple() FINAL; -SELECT * FROM test.unsorted_collapsing; +SELECT * FROM unsorted_collapsing; -DROP TABLE test.unsorted_collapsing; +DROP TABLE unsorted_collapsing; diff --git a/dbms/tests/queries/0_stateless/00579_merge_tree_partition_and_primary_keys_using_same_expression.sql b/dbms/tests/queries/0_stateless/00579_merge_tree_partition_and_primary_keys_using_same_expression.sql index f897de5a645..477a75f172b 100644 --- a/dbms/tests/queries/0_stateless/00579_merge_tree_partition_and_primary_keys_using_same_expression.sql +++ b/dbms/tests/queries/0_stateless/00579_merge_tree_partition_and_primary_keys_using_same_expression.sql @@ -1,18 +1,18 @@ -DROP TABLE IF EXISTS test.partition_and_primary_keys_using_same_expression; +DROP TABLE IF EXISTS partition_and_primary_keys_using_same_expression; -CREATE TABLE test.partition_and_primary_keys_using_same_expression(dt DateTime) +CREATE TABLE partition_and_primary_keys_using_same_expression(dt DateTime) ENGINE MergeTree PARTITION BY toDate(dt) ORDER BY toDayOfWeek(toDate(dt)); -INSERT INTO test.partition_and_primary_keys_using_same_expression +INSERT INTO partition_and_primary_keys_using_same_expression VALUES ('2018-02-19 12:00:00'); -INSERT INTO test.partition_and_primary_keys_using_same_expression +INSERT INTO partition_and_primary_keys_using_same_expression VALUES ('2018-02-20 12:00:00'), ('2018-02-21 12:00:00'); -SELECT * FROM test.partition_and_primary_keys_using_same_expression ORDER BY dt; +SELECT * FROM partition_and_primary_keys_using_same_expression ORDER BY dt; SELECT '---'; -ALTER TABLE test.partition_and_primary_keys_using_same_expression DROP PARTITION '2018-02-20'; -SELECT * FROM test.partition_and_primary_keys_using_same_expression ORDER BY dt; +ALTER TABLE partition_and_primary_keys_using_same_expression DROP PARTITION '2018-02-20'; +SELECT * FROM partition_and_primary_keys_using_same_expression ORDER BY dt; -DROP TABLE test.partition_and_primary_keys_using_same_expression; +DROP TABLE partition_and_primary_keys_using_same_expression; diff --git a/dbms/tests/queries/0_stateless/00584_view_union_all.sql b/dbms/tests/queries/0_stateless/00584_view_union_all.sql index 3460352e809..318166f7633 100644 --- a/dbms/tests/queries/0_stateless/00584_view_union_all.sql +++ b/dbms/tests/queries/0_stateless/00584_view_union_all.sql @@ -1,6 +1,6 @@ -DROP TABLE IF EXISTS test.Test; +DROP TABLE IF EXISTS Test; -CREATE TABLE test.Test ( +CREATE TABLE Test ( createdDate Date, str String, key Enum8('A' = 0, 'B' = 1, 'ALL' = 2), @@ -8,22 +8,22 @@ CREATE TABLE test.Test ( ) ENGINE = MergeTree(createdDate, str, 8192); -INSERT INTO test.Test VALUES ('2000-01-01', 'hello', 'A', 123); +INSERT INTO Test VALUES ('2000-01-01', 'hello', 'A', 123); SET max_threads = 1; -CREATE VIEW test.TestView AS +CREATE VIEW TestView AS SELECT str, key, sumIf(a, 0) AS sum - FROM test.Test + FROM Test GROUP BY str, key UNION ALL SELECT str AS str, CAST('ALL' AS Enum8('A' = 0, 'B' = 1, 'ALL' = 2)) AS key, sumIf(a, 0) AS sum - FROM test.Test + FROM Test GROUP BY str; -SELECT * FROM test.TestView; +SELECT * FROM TestView; -DROP TABLE test.TestView; -DROP TABLE test.Test; +DROP TABLE TestView; +DROP TABLE Test; diff --git a/dbms/tests/queries/0_stateless/00585_union_all_subquery_aggregation_column_removal.sql b/dbms/tests/queries/0_stateless/00585_union_all_subquery_aggregation_column_removal.sql index 5c2a0b9701d..d79e91ed0b9 100644 --- a/dbms/tests/queries/0_stateless/00585_union_all_subquery_aggregation_column_removal.sql +++ b/dbms/tests/queries/0_stateless/00585_union_all_subquery_aggregation_column_removal.sql @@ -1,11 +1,11 @@ -DROP TABLE IF EXISTS test.clicks; -DROP TABLE IF EXISTS test.transactions; +DROP TABLE IF EXISTS clicks; +DROP TABLE IF EXISTS transactions; -CREATE TABLE test.clicks (domain String) ENGINE = Memory; -CREATE TABLE test.transactions (domain String) ENGINE = Memory; +CREATE TABLE clicks (domain String) ENGINE = Memory; +CREATE TABLE transactions (domain String) ENGINE = Memory; -INSERT INTO test.clicks VALUES ('facebook.com'), ('yandex.ru'), ('google.com'); -INSERT INTO test.transactions VALUES ('facebook.com'), ('yandex.ru'), ('baidu.com'); +INSERT INTO clicks VALUES ('facebook.com'), ('yandex.ru'), ('google.com'); +INSERT INTO transactions VALUES ('facebook.com'), ('yandex.ru'), ('baidu.com'); SELECT @@ -17,14 +17,14 @@ FROM COUNT(*) AS total_count, toUInt64(0) AS facebookHits, domain - FROM test.transactions + FROM transactions GROUP BY domain UNION ALL SELECT COUNT(*) AS total_count, SUM(if(domain = 'facebook.com', 1, 0)) AS facebookHits, domain - FROM test.clicks + FROM clicks GROUP BY domain ) GROUP BY domain @@ -42,14 +42,14 @@ FROM COUNT(*) AS total_count, SUM(if(domain = 'facebook.com', 1, 0)) AS facebookHits, domain - FROM test.clicks + FROM clicks GROUP BY domain UNION ALL SELECT COUNT(*) AS total_count, toUInt64(0) AS facebookHits, domain - FROM test.transactions + FROM transactions GROUP BY domain ) GROUP BY domain @@ -69,14 +69,14 @@ FROM COUNT(*) AS total_count, toUInt64(0) AS facebookHits, domain - FROM test.transactions + FROM transactions GROUP BY domain UNION ALL SELECT COUNT(*) AS total_count, SUM(if(domain = 'facebook.com', 1, 0)) AS facebookHits, domain - FROM test.clicks + FROM clicks GROUP BY domain ) GROUP BY domain @@ -94,14 +94,14 @@ FROM COUNT(*) AS total_count, SUM(if(domain = 'facebook.com', 1, 0)) AS facebookHits, domain - FROM test.clicks + FROM clicks GROUP BY domain UNION ALL SELECT COUNT(*) AS total_count, toUInt64(0) AS facebookHits, domain - FROM test.transactions + FROM transactions GROUP BY domain ) GROUP BY domain @@ -122,14 +122,14 @@ FROM COUNT(*) AS total_count, toUInt64(0) AS facebookHits, domain - FROM test.transactions + FROM transactions GROUP BY domain UNION ALL SELECT COUNT(*) AS total_count, SUM(if(domain = 'facebook.com', 1, 0)) AS facebookHits, domain - FROM test.clicks + FROM clicks GROUP BY domain ) GROUP BY domain @@ -148,14 +148,14 @@ FROM COUNT(*) AS total_count, SUM(if(domain = 'facebook.com', 1, 0)) AS facebookHits, domain - FROM test.clicks + FROM clicks GROUP BY domain UNION ALL SELECT COUNT(*) AS total_count, toUInt64(0) AS facebookHits, domain - FROM test.transactions + FROM transactions GROUP BY domain ) GROUP BY domain @@ -176,14 +176,14 @@ FROM COUNT(*) AS total_count, toUInt64(0) AS facebookHits, domain - FROM test.transactions + FROM transactions GROUP BY domain UNION ALL SELECT COUNT(*) AS total_count, SUM(if(domain = 'facebook.com', 1, 0)) AS facebookHits, domain - FROM test.clicks + FROM clicks GROUP BY domain ) GROUP BY domain @@ -201,14 +201,14 @@ FROM COUNT(*) AS total_count, SUM(if(domain = 'facebook.com', 1, 0)) AS facebookHits, domain - FROM test.clicks + FROM clicks GROUP BY domain UNION ALL SELECT COUNT(*) AS total_count, toUInt64(0) AS facebookHits, domain - FROM test.transactions + FROM transactions GROUP BY domain ) GROUP BY domain @@ -230,14 +230,14 @@ FROM COUNT(*) AS total_count, toUInt64(0) AS facebookHits, domain - FROM test.transactions + FROM transactions GROUP BY domain UNION ALL SELECT COUNT(*) AS total_count, SUM(if(domain = 'facebook.com', 1, 0)) AS facebookHits, domain - FROM test.clicks + FROM clicks GROUP BY domain ) GROUP BY domain @@ -255,14 +255,14 @@ FROM COUNT(*) AS total_count, SUM(if(domain = 'facebook.com', 1, 0)) AS facebookHits, domain - FROM test.clicks + FROM clicks GROUP BY domain UNION ALL SELECT COUNT(*) AS total_count, toUInt64(0) AS facebookHits, domain - FROM test.transactions + FROM transactions GROUP BY domain ) GROUP BY domain @@ -284,14 +284,14 @@ FROM COUNT(*) AS total_count, toUInt64(0) AS facebookHits, domain - FROM test.transactions + FROM transactions GROUP BY domain UNION ALL SELECT COUNT(*) AS total_count, SUM(if(domain = 'facebook.com', 1, 0)) AS facebookHits, domain - FROM test.clicks + FROM clicks GROUP BY domain ) GROUP BY domain @@ -309,14 +309,14 @@ FROM COUNT(*) AS total_count, SUM(if(domain = 'facebook.com', 1, 0)) AS facebookHits, domain - FROM test.clicks + FROM clicks GROUP BY domain UNION ALL SELECT COUNT(*) AS total_count, toUInt64(0) AS facebookHits, domain - FROM test.transactions + FROM transactions GROUP BY domain ) GROUP BY domain @@ -327,5 +327,5 @@ USING (total, domain) ORDER BY total, domain; -DROP TABLE test.clicks; -DROP TABLE test.transactions; +DROP TABLE clicks; +DROP TABLE transactions; diff --git a/dbms/tests/queries/0_stateless/00588_shard_distributed_prewhere.sql b/dbms/tests/queries/0_stateless/00588_shard_distributed_prewhere.sql index 41ab4e7d8e7..480c4d63c16 100644 --- a/dbms/tests/queries/0_stateless/00588_shard_distributed_prewhere.sql +++ b/dbms/tests/queries/0_stateless/00588_shard_distributed_prewhere.sql @@ -1,15 +1,15 @@ -DROP TABLE IF EXISTS test.mergetree; -DROP TABLE IF EXISTS test.distributed; +DROP TABLE IF EXISTS test.mergetree_00588; +DROP TABLE IF EXISTS test.distributed_00588; -CREATE TABLE test.mergetree (x UInt64, s String) ENGINE = MergeTree ORDER BY x; -INSERT INTO test.mergetree VALUES (1, 'hello'), (2, 'world'); +CREATE TABLE test.mergetree_00588 (x UInt64, s String) ENGINE = MergeTree ORDER BY x; +INSERT INTO test.mergetree_00588 VALUES (1, 'hello'), (2, 'world'); -SELECT * FROM test.mergetree PREWHERE x = 1 WHERE s LIKE '%l%' ORDER BY x, s; -SELECT * FROM remote('127.0.0.{1,2,3}', test.mergetree) PREWHERE x = 1 WHERE s LIKE '%l%' ORDER BY x, s; +SELECT * FROM test.mergetree_00588 PREWHERE x = 1 WHERE s LIKE '%l%' ORDER BY x, s; +SELECT * FROM remote('127.0.0.{1,2,3}', test.mergetree_00588) PREWHERE x = 1 WHERE s LIKE '%l%' ORDER BY x, s; -CREATE TABLE test.distributed AS test.mergetree ENGINE = Distributed(test_shard_localhost, test, mergetree); +CREATE TABLE test.distributed_00588 AS test.mergetree_00588 ENGINE = Distributed(test_shard_localhost, test, mergetree_00588); -SELECT * FROM test.distributed PREWHERE x = 1 WHERE s LIKE '%l%' ORDER BY x, s; +SELECT * FROM test.distributed_00588 PREWHERE x = 1 WHERE s LIKE '%l%' ORDER BY x, s; -DROP TABLE test.mergetree; -DROP TABLE test.distributed; +DROP TABLE test.mergetree_00588; +DROP TABLE test.distributed_00588; diff --git a/dbms/tests/queries/0_stateless/00593_union_all_assert_columns_removed.sql b/dbms/tests/queries/0_stateless/00593_union_all_assert_columns_removed.sql index 7f9a781985b..c4d653160fa 100644 --- a/dbms/tests/queries/0_stateless/00593_union_all_assert_columns_removed.sql +++ b/dbms/tests/queries/0_stateless/00593_union_all_assert_columns_removed.sql @@ -1,10 +1,10 @@ -DROP TABLE IF EXISTS test.columns; -CREATE TABLE test.columns (a UInt8, b UInt8, c UInt8) ENGINE = Memory; -INSERT INTO test.columns VALUES (1, 2, 3); +DROP TABLE IF EXISTS columns; +CREATE TABLE columns (a UInt8, b UInt8, c UInt8) ENGINE = Memory; +INSERT INTO columns VALUES (1, 2, 3); SET max_columns_to_read = 1; -SELECT a FROM (SELECT * FROM test.columns); -SELECT a FROM (SELECT * FROM (SELECT * FROM test.columns)); -SELECT a FROM (SELECT * FROM test.columns UNION ALL SELECT * FROM test.columns); +SELECT a FROM (SELECT * FROM columns); +SELECT a FROM (SELECT * FROM (SELECT * FROM columns)); +SELECT a FROM (SELECT * FROM columns UNION ALL SELECT * FROM columns); -DROP TABLE test.columns; +DROP TABLE columns; diff --git a/dbms/tests/queries/0_stateless/00594_alias_in_distributed.sql b/dbms/tests/queries/0_stateless/00594_alias_in_distributed.sql index 54e47c78942..f8a17363506 100644 --- a/dbms/tests/queries/0_stateless/00594_alias_in_distributed.sql +++ b/dbms/tests/queries/0_stateless/00594_alias_in_distributed.sql @@ -1,7 +1,7 @@ -DROP TABLE IF EXISTS test.alias_local10; -DROP TABLE IF EXISTS test.alias10; +DROP TABLE IF EXISTS alias_local10; +DROP TABLE IF EXISTS alias10; -CREATE TABLE test.alias_local10 ( +CREATE TABLE alias_local10 ( Id Int8, EventDate Date DEFAULT '2000-01-01', field1 Int8, @@ -9,29 +9,29 @@ CREATE TABLE test.alias_local10 ( field3 ALIAS CASE WHEN field1 = 1 THEN field2 ELSE '0' END ) ENGINE = MergeTree(EventDate, (Id, EventDate), 8192); -CREATE TABLE test.alias10 AS test.alias_local10 ENGINE = Distributed(test_shard_localhost, test, alias_local10, cityHash64(Id)); +CREATE TABLE alias10 AS alias_local10 ENGINE = Distributed(test_shard_localhost, test, alias_local10, cityHash64(Id)); -INSERT INTO test.alias_local10 (Id, EventDate, field1, field2) VALUES (1, '2000-01-01', 1, '12345'), (2, '2000-01-01', 2, '54321'), (3, '2000-01-01', 0, ''); +INSERT INTO alias_local10 (Id, EventDate, field1, field2) VALUES (1, '2000-01-01', 1, '12345'), (2, '2000-01-01', 2, '54321'), (3, '2000-01-01', 0, ''); -SELECT field1, field2, field3 FROM test.alias_local10; -SELECT field1, field2, field3 FROM test.alias_local10 WHERE EventDate='2000-01-01'; -SELECT field1, field2 FROM test.alias_local10 WHERE EventDate='2000-01-01'; +SELECT field1, field2, field3 FROM alias_local10; +SELECT field1, field2, field3 FROM alias_local10 WHERE EventDate='2000-01-01'; +SELECT field1, field2 FROM alias_local10 WHERE EventDate='2000-01-01'; -SELECT field1, field2, field3 FROM test.alias10; -SELECT field1, field2, field3 FROM test.alias10 WHERE EventDate='2000-01-01'; -SELECT field1, field2 FROM test.alias10 WHERE EventDate='2000-01-01'; +SELECT field1, field2, field3 FROM alias10; +SELECT field1, field2, field3 FROM alias10 WHERE EventDate='2000-01-01'; +SELECT field1, field2 FROM alias10 WHERE EventDate='2000-01-01'; -SELECT field2, field3 FROM test.alias10 WHERE EventDate='2000-01-01'; -SELECT field3 FROM test.alias10 WHERE EventDate='2000-01-01'; -SELECT field2, field3 FROM test.alias10; -SELECT field3 FROM test.alias10; +SELECT field2, field3 FROM alias10 WHERE EventDate='2000-01-01'; +SELECT field3 FROM alias10 WHERE EventDate='2000-01-01'; +SELECT field2, field3 FROM alias10; +SELECT field3 FROM alias10; -SELECT field1 FROM test.alias10 WHERE field3 = '12345'; -SELECT field2 FROM test.alias10 WHERE field3 = '12345'; -SELECT field3 FROM test.alias10 WHERE field3 = '12345'; +SELECT field1 FROM alias10 WHERE field3 = '12345'; +SELECT field2 FROM alias10 WHERE field3 = '12345'; +SELECT field3 FROM alias10 WHERE field3 = '12345'; -DROP TABLE test.alias10; -CREATE TABLE test.alias10 ( +DROP TABLE alias10; +CREATE TABLE alias10 ( Id Int8, EventDate Date, field1 Int8, @@ -39,22 +39,22 @@ CREATE TABLE test.alias10 ( field3 String ) ENGINE = Distributed(test_shard_localhost, test, alias_local10); -SELECT field1, field2, field3 FROM test.alias_local10; -SELECT field1, field2, field3 FROM test.alias_local10 WHERE EventDate='2000-01-01'; -SELECT field1, field2 FROM test.alias_local10 WHERE EventDate='2000-01-01'; +SELECT field1, field2, field3 FROM alias_local10; +SELECT field1, field2, field3 FROM alias_local10 WHERE EventDate='2000-01-01'; +SELECT field1, field2 FROM alias_local10 WHERE EventDate='2000-01-01'; -SELECT field1, field2, field3 FROM test.alias10; -SELECT field1, field2, field3 FROM test.alias10 WHERE EventDate='2000-01-01'; -SELECT field1, field2 FROM test.alias10 WHERE EventDate='2000-01-01'; +SELECT field1, field2, field3 FROM alias10; +SELECT field1, field2, field3 FROM alias10 WHERE EventDate='2000-01-01'; +SELECT field1, field2 FROM alias10 WHERE EventDate='2000-01-01'; -SELECT field2, field3 FROM test.alias10 WHERE EventDate='2000-01-01'; -SELECT field3 FROM test.alias10 WHERE EventDate='2000-01-01'; -SELECT field2, field3 FROM test.alias10; -SELECT field3 FROM test.alias10; +SELECT field2, field3 FROM alias10 WHERE EventDate='2000-01-01'; +SELECT field3 FROM alias10 WHERE EventDate='2000-01-01'; +SELECT field2, field3 FROM alias10; +SELECT field3 FROM alias10; -SELECT field1 FROM test.alias10 WHERE field3 = '12345'; -SELECT field2 FROM test.alias10 WHERE field3 = '12345'; -SELECT field3 FROM test.alias10 WHERE field3 = '12345'; +SELECT field1 FROM alias10 WHERE field3 = '12345'; +SELECT field2 FROM alias10 WHERE field3 = '12345'; +SELECT field3 FROM alias10 WHERE field3 = '12345'; -DROP TABLE test.alias_local10; -DROP TABLE test.alias10; +DROP TABLE alias_local10; +DROP TABLE alias10; diff --git a/dbms/tests/queries/0_stateless/00595_insert_into_view.sh b/dbms/tests/queries/0_stateless/00595_insert_into_view.sh index ae3e7d40835..42071b26ec9 100755 --- a/dbms/tests/queries/0_stateless/00595_insert_into_view.sh +++ b/dbms/tests/queries/0_stateless/00595_insert_into_view.sh @@ -5,15 +5,15 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) exception_pattern="Code: 48.*Method write is not supported by storage View" -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.test;" -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.test_view;" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test;" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test_view;" -${CLICKHOUSE_CLIENT} --query "CREATE TABLE test.test (s String) ENGINE = Log;" -${CLICKHOUSE_CLIENT} --query "CREATE VIEW test.test_view AS SELECT * FROM test.test;" +${CLICKHOUSE_CLIENT} --query "CREATE TABLE test (s String) ENGINE = Log;" +${CLICKHOUSE_CLIENT} --query "CREATE VIEW test_view AS SELECT * FROM test;" -(( `${CLICKHOUSE_CLIENT} --query "INSERT INTO test.test_view VALUES('test_string');" 2>&1 | grep -c "$exception_pattern"` >= 1 )) && echo 1 || echo "NO MATCH" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.test VALUES('test_string');" -${CLICKHOUSE_CLIENT} --query "SELECT * FROM test.test;" +(( `${CLICKHOUSE_CLIENT} --query "INSERT INTO test_view VALUES('test_string');" 2>&1 | grep -c "$exception_pattern"` >= 1 )) && echo 1 || echo "NO MATCH" +${CLICKHOUSE_CLIENT} --query "INSERT INTO test VALUES('test_string');" +${CLICKHOUSE_CLIENT} --query "SELECT * FROM test;" -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.test;" -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.test_view;" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test;" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test_view;" diff --git a/dbms/tests/queries/0_stateless/00598_create_as_select_http.sh b/dbms/tests/queries/0_stateless/00598_create_as_select_http.sh index 8a9500e9137..e38cb5e216f 100755 --- a/dbms/tests/queries/0_stateless/00598_create_as_select_http.sh +++ b/dbms/tests/queries/0_stateless/00598_create_as_select_http.sh @@ -5,7 +5,7 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) set -e -o pipefail -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.test" -$CLICKHOUSE_CURL -sS -d 'CREATE TABLE test.test ENGINE = Memory AS SELECT 1' $CLICKHOUSE_URL -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.test" -$CLICKHOUSE_CLIENT --query="DROP TABLE test.test" +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test" +$CLICKHOUSE_CURL -sS -d 'CREATE TABLE test ENGINE = Memory AS SELECT 1' $CLICKHOUSE_URL_PARAMS +$CLICKHOUSE_CLIENT --query="SELECT * FROM test" +$CLICKHOUSE_CLIENT --query="DROP TABLE test" diff --git a/dbms/tests/queries/0_stateless/00605_intersections_aggregate_functions.sql b/dbms/tests/queries/0_stateless/00605_intersections_aggregate_functions.sql index c23583dd8c8..29d458d5165 100644 --- a/dbms/tests/queries/0_stateless/00605_intersections_aggregate_functions.sql +++ b/dbms/tests/queries/0_stateless/00605_intersections_aggregate_functions.sql @@ -1,6 +1,6 @@ -DROP TABLE IF EXISTS test.test; -CREATE TABLE test.test(start Integer, end Integer) engine = Memory; -INSERT INTO test.test(start,end) VALUES (1,3),(2,7),(3,999),(4,7),(5,8); +DROP TABLE IF EXISTS test; +CREATE TABLE test(start Integer, end Integer) engine = Memory; +INSERT INTO test(start,end) VALUES (1,3),(2,7),(3,999),(4,7),(5,8); /* 1 2 3 4 5 6 7 8 9 @@ -14,7 +14,7 @@ INSERT INTO test.test(start,end) VALUES (1,3),(2,7),(3,999),(4,7),(5,8); 1 2 3 3 4 4 4 2 1 //intersections count for each point */ -SELECT maxIntersections(start,end) FROM test.test; -SELECT maxIntersectionsPosition(start,end) FROM test.test; +SELECT maxIntersections(start,end) FROM test; +SELECT maxIntersectionsPosition(start,end) FROM test; -DROP TABLE test.test; +DROP TABLE test; diff --git a/dbms/tests/queries/0_stateless/00607_index_in_in.sql b/dbms/tests/queries/0_stateless/00607_index_in_in.sql index a1e2efa6a71..2cd3af773d0 100644 --- a/dbms/tests/queries/0_stateless/00607_index_in_in.sql +++ b/dbms/tests/queries/0_stateless/00607_index_in_in.sql @@ -1,16 +1,16 @@ -DROP TABLE IF EXISTS test.merge_tree; -CREATE TABLE test.merge_tree (x UInt32) ENGINE = MergeTree ORDER BY x SETTINGS index_granularity = 1; -INSERT INTO test.merge_tree VALUES (0), (1); +DROP TABLE IF EXISTS merge_tree; +CREATE TABLE merge_tree (x UInt32) ENGINE = MergeTree ORDER BY x SETTINGS index_granularity = 1; +INSERT INTO merge_tree VALUES (0), (1); SET force_primary_key = 1; SET max_rows_to_read = 1; -SELECT count() FROM test.merge_tree WHERE x = 0; -SELECT count() FROM test.merge_tree WHERE toUInt32(x) = 0; -SELECT count() FROM test.merge_tree WHERE toUInt64(x) = 0; +SELECT count() FROM merge_tree WHERE x = 0; +SELECT count() FROM merge_tree WHERE toUInt32(x) = 0; +SELECT count() FROM merge_tree WHERE toUInt64(x) = 0; -SELECT count() FROM test.merge_tree WHERE x IN (0, 0); -SELECT count() FROM test.merge_tree WHERE toUInt32(x) IN (0, 0); -SELECT count() FROM test.merge_tree WHERE toUInt64(x) IN (0, 0); +SELECT count() FROM merge_tree WHERE x IN (0, 0); +SELECT count() FROM merge_tree WHERE toUInt32(x) IN (0, 0); +SELECT count() FROM merge_tree WHERE toUInt64(x) IN (0, 0); -DROP TABLE test.merge_tree; +DROP TABLE merge_tree; diff --git a/dbms/tests/queries/0_stateless/00609_mv_index_in_in.sql b/dbms/tests/queries/0_stateless/00609_mv_index_in_in.sql index da583a7c2f4..5d5151e6900 100644 --- a/dbms/tests/queries/0_stateless/00609_mv_index_in_in.sql +++ b/dbms/tests/queries/0_stateless/00609_mv_index_in_in.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS test; DROP TABLE IF EXISTS test_mv; diff --git a/dbms/tests/queries/0_stateless/00609_prewhere_and_default.sql b/dbms/tests/queries/0_stateless/00609_prewhere_and_default.sql index 915f0c85823..f25717d6a91 100644 --- a/dbms/tests/queries/0_stateless/00609_prewhere_and_default.sql +++ b/dbms/tests/queries/0_stateless/00609_prewhere_and_default.sql @@ -1,12 +1,13 @@ -drop table if exists test.table; -create table test.table (key UInt64, val UInt64) engine = MergeTree order by key settings index_granularity=8192; -insert into test.table select number, number / 8192 from system.numbers limit 100000; -alter table test.table add column def UInt64 default val + 1; -select * from test.table prewhere val > 2 format Null; +drop table if exists `table`; +create table `table` (key UInt64, val UInt64) engine = MergeTree order by key settings index_granularity=8192; +insert into `table` select number, number / 8192 from system.numbers limit 100000; +alter table `table` add column def UInt64 default val + 1; +select * from `table` prewhere val > 2 format Null; -drop table if exists test.table; -create table test.table (key UInt64, val UInt64) engine = MergeTree order by key settings index_granularity=8192; -insert into test.table select number, number / 8192 from system.numbers limit 100000; -alter table test.table add column def UInt64; -select * from test.table prewhere val > 2 format Null; +drop table if exists `table`; +create table `table` (key UInt64, val UInt64) engine = MergeTree order by key settings index_granularity=8192; +insert into `table` select number, number / 8192 from system.numbers limit 100000; +alter table `table` add column def UInt64; +select * from `table` prewhere val > 2 format Null; +drop table if exists `table`; diff --git a/dbms/tests/queries/0_stateless/00610_materialized_view_forward_alter_partition_statements.sql b/dbms/tests/queries/0_stateless/00610_materialized_view_forward_alter_partition_statements.sql index 5469318068e..182ef7a2eca 100644 --- a/dbms/tests/queries/0_stateless/00610_materialized_view_forward_alter_partition_statements.sql +++ b/dbms/tests/queries/0_stateless/00610_materialized_view_forward_alter_partition_statements.sql @@ -1,18 +1,18 @@ -DROP TABLE IF EXISTS test.tab; -DROP TABLE IF EXISTS test.mv; +DROP TABLE IF EXISTS tab; +DROP TABLE IF EXISTS mv; -CREATE TABLE test.tab(d Date, x UInt32) ENGINE MergeTree(d, x, 8192); -CREATE MATERIALIZED VIEW test.mv(d Date, y UInt64) ENGINE MergeTree(d, y, 8192) AS SELECT d, x + 1 AS y FROM test.tab; +CREATE TABLE tab(d Date, x UInt32) ENGINE MergeTree(d, x, 8192); +CREATE MATERIALIZED VIEW mv(d Date, y UInt64) ENGINE MergeTree(d, y, 8192) AS SELECT d, x + 1 AS y FROM tab; -INSERT INTO test.tab VALUES ('2018-01-01', 1), ('2018-01-01', 2), ('2018-02-01', 3); +INSERT INTO tab VALUES ('2018-01-01', 1), ('2018-01-01', 2), ('2018-02-01', 3); SELECT '-- Before DROP PARTITION --'; -SELECT * FROM test.mv ORDER BY y; +SELECT * FROM mv ORDER BY y; -ALTER TABLE test.mv DROP PARTITION 201801; +ALTER TABLE mv DROP PARTITION 201801; SELECT '-- After DROP PARTITION --'; -SELECT * FROM test.mv ORDER BY y; +SELECT * FROM mv ORDER BY y; -DROP TABLE test.tab; -DROP TABLE test.mv; +DROP TABLE tab; +DROP TABLE mv; diff --git a/dbms/tests/queries/0_stateless/00611_zookeeper_different_checksums_formats.sql b/dbms/tests/queries/0_stateless/00611_zookeeper_different_checksums_formats.sql index 9076485cfa1..3fbb0d400f3 100644 --- a/dbms/tests/queries/0_stateless/00611_zookeeper_different_checksums_formats.sql +++ b/dbms/tests/queries/0_stateless/00611_zookeeper_different_checksums_formats.sql @@ -1,24 +1,24 @@ -DROP TABLE IF EXISTS test.table_old; -DROP TABLE IF EXISTS test.table_new; +DROP TABLE IF EXISTS table_old; +DROP TABLE IF EXISTS table_new; -CREATE TABLE test.table_old (k UInt64, d Array(String)) ENGINE = ReplicatedMergeTree('/clickhouse/test/tables/checksums_test', 'old') ORDER BY k SETTINGS use_minimalistic_checksums_in_zookeeper=0; -CREATE TABLE test.table_new (k UInt64, d Array(String)) ENGINE = ReplicatedMergeTree('/clickhouse/test/tables/checksums_test', 'new') ORDER BY k SETTINGS use_minimalistic_checksums_in_zookeeper=1; +CREATE TABLE table_old (k UInt64, d Array(String)) ENGINE = ReplicatedMergeTree('/clickhouse/test/tables/checksums_test', 'old') ORDER BY k SETTINGS use_minimalistic_checksums_in_zookeeper=0; +CREATE TABLE table_new (k UInt64, d Array(String)) ENGINE = ReplicatedMergeTree('/clickhouse/test/tables/checksums_test', 'new') ORDER BY k SETTINGS use_minimalistic_checksums_in_zookeeper=1; SET insert_quorum=2; -INSERT INTO test.table_old VALUES (0, []); +INSERT INTO table_old VALUES (0, []); SELECT value LIKE '%checksums format version: 4%' FROM system.zookeeper WHERE path='/clickhouse/test/tables/checksums_test/replicas/old/parts/all_0_0_0' AND name = 'checksums'; -INSERT INTO test.table_new VALUES (1, []); +INSERT INTO table_new VALUES (1, []); SELECT value LIKE '%checksums format version: 5%' FROM system.zookeeper WHERE path='/clickhouse/test/tables/checksums_test/replicas/new/parts/all_1_1_0' AND name = 'checksums'; -OPTIMIZE TABLE test.table_old; -SELECT * FROM test.table_old ORDER BY k; -SELECT * FROM test.table_new ORDER BY k; +OPTIMIZE TABLE table_old; +SELECT * FROM table_old ORDER BY k; +SELECT * FROM table_new ORDER BY k; SELECT 'DETACH'; -DETACH TABLE test.table_old; -ATTACH TABLE test.table_old (k UInt64, d Array(String)) ENGINE = ReplicatedMergeTree('/clickhouse/test/tables/checksums_test', 'old') ORDER BY k SETTINGS use_minimalistic_checksums_in_zookeeper=1; -SELECT * FROM test.table_old ORDER BY k; +DETACH TABLE table_old; +ATTACH TABLE table_old (k UInt64, d Array(String)) ENGINE = ReplicatedMergeTree('/clickhouse/test/tables/checksums_test', 'old') ORDER BY k SETTINGS use_minimalistic_checksums_in_zookeeper=1; +SELECT * FROM table_old ORDER BY k; -DROP TABLE IF EXISTS test.table_old; -DROP TABLE IF EXISTS test.table_new; \ No newline at end of file +DROP TABLE IF EXISTS table_old; +DROP TABLE IF EXISTS table_new; \ No newline at end of file diff --git a/dbms/tests/queries/0_stateless/00612_http_max_query_size.sh b/dbms/tests/queries/0_stateless/00612_http_max_query_size.sh index 03c193c5c65..a0c3c637ae1 100755 --- a/dbms/tests/queries/0_stateless/00612_http_max_query_size.sh +++ b/dbms/tests/queries/0_stateless/00612_http_max_query_size.sh @@ -11,11 +11,11 @@ echo "select '1'" | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL}/?max_query_size=10 echo - echo "select '11'" | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL}/?max_query_size=10 -d @- 2>&1 | grep -o "Max query size exceeded" -echo 'drop table if exists test.tab' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- -echo 'create table test.tab (key UInt64, val UInt64) engine = MergeTree order by key' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- -echo 'into test.tab values (1, 1), (2, 2), (3, 3), (4, 4), (5, 5)' | ${CLICKHOUSE_CURL} -sSg "${CLICKHOUSE_URL}/?max_query_size=30&query=insert" -d @- -echo 'select val from test.tab order by val' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- -echo 'drop table test.tab' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- +echo 'drop table if exists tab' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- +echo 'create table tab (key UInt64, val UInt64) engine = MergeTree order by key' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- +echo 'into tab values (1, 1), (2, 2), (3, 3), (4, 4), (5, 5)' | ${CLICKHOUSE_CURL} -sSg "${CLICKHOUSE_URL}/?max_query_size=30&query=insert" -d @- +echo 'select val from tab order by val' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- +echo 'drop table tab' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- echo " import requests diff --git a/dbms/tests/queries/0_stateless/00612_pk_in_tuple.sql b/dbms/tests/queries/0_stateless/00612_pk_in_tuple.sql index 54a38c5fcca..d558a9ffa04 100644 --- a/dbms/tests/queries/0_stateless/00612_pk_in_tuple.sql +++ b/dbms/tests/queries/0_stateless/00612_pk_in_tuple.sql @@ -1,45 +1,45 @@ create database if not exists test; -drop table if exists test.tab; -create table test.tab (key UInt64, arr Array(UInt64)) Engine = MergeTree order by key; -insert into test.tab values (1, [1]); -insert into test.tab values (2, [2]); +drop table if exists tab; +create table tab (key UInt64, arr Array(UInt64)) Engine = MergeTree order by key; +insert into tab values (1, [1]); +insert into tab values (2, [2]); select 'all'; -select * from test.tab order by key; +select * from tab order by key; select 'key, arrayJoin(arr) in (1, 1)'; -select key, arrayJoin(arr) as val from test.tab where (key, val) in (1, 1); +select key, arrayJoin(arr) as val from tab where (key, val) in (1, 1); select 'key, arrayJoin(arr) in ((1, 1), (2, 2))'; -select key, arrayJoin(arr) as val from test.tab where (key, val) in ((1, 1), (2, 2)) order by key; +select key, arrayJoin(arr) as val from tab where (key, val) in ((1, 1), (2, 2)) order by key; select '(key, left array join arr) in (1, 1)'; -select key from test.tab left array join arr as val where (key, val) in (1, 1); +select key from tab left array join arr as val where (key, val) in (1, 1); select '(key, left array join arr) in ((1, 1), (2, 2))'; -select key from test.tab left array join arr as val where (key, val) in ((1, 1), (2, 2)) order by key; +select key from tab left array join arr as val where (key, val) in ((1, 1), (2, 2)) order by key; -drop table if exists test.tab; -create table test.tab (key UInt64, n Nested(x UInt64)) Engine = MergeTree order by key; -insert into test.tab values (1, [1]); -insert into test.tab values (2, [2]); +drop table if exists tab; +create table tab (key UInt64, n Nested(x UInt64)) Engine = MergeTree order by key; +insert into tab values (1, [1]); +insert into tab values (2, [2]); select 'all'; -select * from test.tab order by key; +select * from tab order by key; select 'key, arrayJoin(n.x) in (1, 1)'; -select key, arrayJoin(n.x) as val from test.tab where (key, val) in (1, 1); +select key, arrayJoin(n.x) as val from tab where (key, val) in (1, 1); select 'key, arrayJoin(n.x) in ((1, 1), (2, 2))'; -select key, arrayJoin(n.x) as val from test.tab where (key, val) in ((1, 1), (2, 2)) order by key; +select key, arrayJoin(n.x) as val from tab where (key, val) in ((1, 1), (2, 2)) order by key; select '(key, left array join n.x) in (1, 1)'; -select key from test.tab left array join n.x as val where (key, val) in (1, 1); +select key from tab left array join n.x as val where (key, val) in (1, 1); select '(key, left array join n.x) in ((1, 1), (2, 2))'; -select key from test.tab left array join n.x as val where (key, val) in ((1, 1), (2, 2)) order by key; +select key from tab left array join n.x as val where (key, val) in ((1, 1), (2, 2)) order by key; select 'max(key) from tab where (key, left array join n.x) in (1, 1)'; -select max(key) from test.tab left array join `n.x` as val where (key, val) in ((1, 1)); -select max(key) from test.tab left array join n as val where (key, val.x) in (1, 1); +select max(key) from tab left array join `n.x` as val where (key, val) in ((1, 1)); +select max(key) from tab left array join n as val where (key, val.x) in (1, 1); select 'max(key) from tab where (key, left array join n.x) in ((1, 1), (2, 2))'; -select max(key) from test.tab left array join `n.x` as val where (key, val) in ((1, 1), (2, 2)); -select max(key) from test.tab left array join n as val where (key, val.x) in ((1, 1), (2, 2)); +select max(key) from tab left array join `n.x` as val where (key, val) in ((1, 1), (2, 2)); +select max(key) from tab left array join n as val where (key, val.x) in ((1, 1), (2, 2)); select 'max(key) from tab any left join (select key, arrayJoin(n.x) as val from tab) using key where (key, val) in (1, 1)'; -select max(key) from test.tab any left join (select key, arrayJoin(n.x) as val from test.tab) using key where (key, val) in (1, 1); +select max(key) from tab any left join (select key, arrayJoin(n.x) as val from tab) using key where (key, val) in (1, 1); select 'max(key) from tab any left join (select key, arrayJoin(n.x) as val from tab) using key where (key, val) in ((1, 1), (2, 2))'; -select max(key) from test.tab any left join (select key, arrayJoin(n.x) as val from test.tab) using key where (key, val) in ((1, 1), (2, 2)); +select max(key) from tab any left join (select key, arrayJoin(n.x) as val from tab) using key where (key, val) in ((1, 1), (2, 2)); -drop table if exists test.tab; -CREATE TABLE test.tab (key1 Int32, id1 Int64, c1 Int64) ENGINE = MergeTree PARTITION BY id1 ORDER BY (key1) ; -insert into test.tab values ( -1, 1, 0 ); -SELECT count(*) FROM test.tab PREWHERE id1 IN (1); +drop table if exists tab; +CREATE TABLE tab (key1 Int32, id1 Int64, c1 Int64) ENGINE = MergeTree PARTITION BY id1 ORDER BY (key1) ; +insert into tab values ( -1, 1, 0 ); +SELECT count(*) FROM tab PREWHERE id1 IN (1); diff --git a/dbms/tests/queries/0_stateless/00614_array_nullable.sql b/dbms/tests/queries/0_stateless/00614_array_nullable.sql index 5e301821261..d62ddb8242c 100644 --- a/dbms/tests/queries/0_stateless/00614_array_nullable.sql +++ b/dbms/tests/queries/0_stateless/00614_array_nullable.sql @@ -1,6 +1,6 @@ -DROP TABLE IF EXISTS test.test; -CREATE TABLE test.test(date Date, keys Array(Nullable(UInt8))) ENGINE = MergeTree(date, date, 1); -INSERT INTO test.test VALUES ('2017-09-10', [1, 2, 3, 4, 5, 6, 7, NULL]); -SELECT * FROM test.test LIMIT 1; -SELECT avgArray(keys) FROM test.test; -DROP TABLE test.test; +DROP TABLE IF EXISTS test; +CREATE TABLE test(date Date, keys Array(Nullable(UInt8))) ENGINE = MergeTree(date, date, 1); +INSERT INTO test VALUES ('2017-09-10', [1, 2, 3, 4, 5, 6, 7, NULL]); +SELECT * FROM test LIMIT 1; +SELECT avgArray(keys) FROM test; +DROP TABLE test; diff --git a/dbms/tests/queries/0_stateless/00615_nullable_alter_optimize.sql b/dbms/tests/queries/0_stateless/00615_nullable_alter_optimize.sql index 8ab4d5e6f26..656a5bdafdf 100644 --- a/dbms/tests/queries/0_stateless/00615_nullable_alter_optimize.sql +++ b/dbms/tests/queries/0_stateless/00615_nullable_alter_optimize.sql @@ -1,4 +1,3 @@ -USE test; DROP TABLE IF EXISTS test; CREATE TABLE test diff --git a/dbms/tests/queries/0_stateless/00616_final_single_part.sql b/dbms/tests/queries/0_stateless/00616_final_single_part.sql index fcd5a62f441..2468b9c5233 100644 --- a/dbms/tests/queries/0_stateless/00616_final_single_part.sql +++ b/dbms/tests/queries/0_stateless/00616_final_single_part.sql @@ -1,4 +1,3 @@ -USE test; DROP TABLE IF EXISTS test; DROP TABLE IF EXISTS replacing; diff --git a/dbms/tests/queries/0_stateless/00617_array_in.sql b/dbms/tests/queries/0_stateless/00617_array_in.sql index 4f54965572c..8e61c7dbd28 100644 --- a/dbms/tests/queries/0_stateless/00617_array_in.sql +++ b/dbms/tests/queries/0_stateless/00617_array_in.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS test_array_ops; CREATE TABLE test_array_ops(arr Array(Nullable(Int64))) ENGINE = Memory; diff --git a/dbms/tests/queries/0_stateless/00619_extract.sql b/dbms/tests/queries/0_stateless/00619_extract.sql index 034ae55b5e3..73f1bc061ca 100644 --- a/dbms/tests/queries/0_stateless/00619_extract.sql +++ b/dbms/tests/queries/0_stateless/00619_extract.sql @@ -10,12 +10,12 @@ SELECT extract(MONTH FROM toDateTime('2017-12-31 18:59:58')); SELECT EXTRACT(year FROM toDateTime('2017-12-31 18:59:58')); -DROP TABLE IF EXISTS test.Orders; -CREATE TABLE test.Orders (OrderId UInt64, OrderName String, OrderDate DateTime) engine = Log; -insert into test.Orders values (1, 'Jarlsberg Cheese', toDateTime('2008-10-11 13:23:44')); +DROP TABLE IF EXISTS Orders; +CREATE TABLE Orders (OrderId UInt64, OrderName String, OrderDate DateTime) engine = Log; +insert into Orders values (1, 'Jarlsberg Cheese', toDateTime('2008-10-11 13:23:44')); SELECT EXTRACT(YYYY FROM OrderDate) AS OrderYear, EXTRACT(MONTH FROM OrderDate) AS OrderMonth, EXTRACT(DAY FROM OrderDate) AS OrderDay, - EXTRACT(HOUR FROM OrderDate), EXTRACT(MINUTE FROM OrderDate), EXTRACT(SECOND FROM OrderDate) FROM test.Orders WHERE OrderId=1; -DROP TABLE test.Orders; + EXTRACT(HOUR FROM OrderDate), EXTRACT(MINUTE FROM OrderDate), EXTRACT(SECOND FROM OrderDate) FROM Orders WHERE OrderId=1; +DROP TABLE Orders; -- TODO: diff --git a/dbms/tests/queries/0_stateless/00619_union_highlite.sql b/dbms/tests/queries/0_stateless/00619_union_highlite.sql index 7897d43e241..9a41a132661 100644 --- a/dbms/tests/queries/0_stateless/00619_union_highlite.sql +++ b/dbms/tests/queries/0_stateless/00619_union_highlite.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS union; create view union as select 1 as test union all select 2; diff --git a/dbms/tests/queries/0_stateless/00620_optimize_on_nonleader_replica_zookeeper.sql b/dbms/tests/queries/0_stateless/00620_optimize_on_nonleader_replica_zookeeper.sql index 8cbdcc7202a..9622a5bd3c2 100644 --- a/dbms/tests/queries/0_stateless/00620_optimize_on_nonleader_replica_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00620_optimize_on_nonleader_replica_zookeeper.sql @@ -1,22 +1,22 @@ -DROP TABLE IF EXISTS test.rename1; -DROP TABLE IF EXISTS test.rename2; -DROP TABLE IF EXISTS test.rename3; -CREATE TABLE test.rename1 (p Int64, i Int64, v UInt64) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/test/tables/rename', '1', v) PARTITION BY p ORDER BY i; -CREATE TABLE test.rename2 (p Int64, i Int64, v UInt64) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/test/tables/rename', '2', v) PARTITION BY p ORDER BY i; +DROP TABLE IF EXISTS rename1; +DROP TABLE IF EXISTS rename2; +DROP TABLE IF EXISTS rename3; +CREATE TABLE rename1 (p Int64, i Int64, v UInt64) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/test/tables/rename', '1', v) PARTITION BY p ORDER BY i; +CREATE TABLE rename2 (p Int64, i Int64, v UInt64) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/test/tables/rename', '2', v) PARTITION BY p ORDER BY i; -INSERT INTO test.rename1 VALUES (0, 1, 0); -INSERT INTO test.rename1 VALUES (0, 1, 1); +INSERT INTO rename1 VALUES (0, 1, 0); +INSERT INTO rename1 VALUES (0, 1, 1); -OPTIMIZE TABLE test.rename1; -OPTIMIZE TABLE test.rename2; -SELECT * FROM test.rename1; +OPTIMIZE TABLE rename1; +OPTIMIZE TABLE rename2; +SELECT * FROM rename1; -RENAME TABLE test.rename2 TO test.rename3; +RENAME TABLE rename2 TO rename3; -INSERT INTO test.rename1 VALUES (0, 1, 2); -OPTIMIZE TABLE test.rename3; -SELECT * FROM test.rename1; +INSERT INTO rename1 VALUES (0, 1, 2); +OPTIMIZE TABLE rename3; +SELECT * FROM rename1; -DROP TABLE IF EXISTS test.rename1; -DROP TABLE IF EXISTS test.rename2; -DROP TABLE IF EXISTS test.rename3; +DROP TABLE IF EXISTS rename1; +DROP TABLE IF EXISTS rename2; +DROP TABLE IF EXISTS rename3; diff --git a/dbms/tests/queries/0_stateless/00621_regression_for_in_operator.sql b/dbms/tests/queries/0_stateless/00621_regression_for_in_operator.sql index b2a75529c23..84355a04df4 100644 --- a/dbms/tests/queries/0_stateless/00621_regression_for_in_operator.sql +++ b/dbms/tests/queries/0_stateless/00621_regression_for_in_operator.sql @@ -1,19 +1,19 @@ -DROP TABLE IF EXISTS test.regression_for_in_operator_view; -DROP TABLE IF EXISTS test.regression_for_in_operator; -CREATE TABLE test.regression_for_in_operator (d Date, v UInt32, g String) ENGINE=MergeTree(d, d, 8192); -CREATE MATERIALIZED VIEW test.regression_for_in_operator_view ENGINE=AggregatingMergeTree(d, (d,g), 8192) AS SELECT d, g, maxState(v) FROM test.regression_for_in_operator GROUP BY d, g; +DROP TABLE IF EXISTS regression_for_in_operator_view; +DROP TABLE IF EXISTS regression_for_in_operator; +CREATE TABLE regression_for_in_operator (d Date, v UInt32, g String) ENGINE=MergeTree(d, d, 8192); +CREATE MATERIALIZED VIEW regression_for_in_operator_view ENGINE=AggregatingMergeTree(d, (d,g), 8192) AS SELECT d, g, maxState(v) FROM regression_for_in_operator GROUP BY d, g; -INSERT INTO test.regression_for_in_operator SELECT today(), toString(number % 10), number FROM system.numbers limit 1000; +INSERT INTO regression_for_in_operator SELECT today(), toString(number % 10), number FROM system.numbers limit 1000; -SELECT count() FROM test.regression_for_in_operator_view WHERE g = '5'; -SELECT count() FROM test.regression_for_in_operator_view WHERE g IN ('5'); -SELECT count() FROM test.regression_for_in_operator_view WHERE g IN ('5','6'); +SELECT count() FROM regression_for_in_operator_view WHERE g = '5'; +SELECT count() FROM regression_for_in_operator_view WHERE g IN ('5'); +SELECT count() FROM regression_for_in_operator_view WHERE g IN ('5','6'); SET optimize_min_equality_disjunction_chain_length = 1; -SELECT count() FROM test.regression_for_in_operator_view WHERE g = '5' OR g = '6'; +SELECT count() FROM regression_for_in_operator_view WHERE g = '5' OR g = '6'; SET optimize_min_equality_disjunction_chain_length = 3; -SELECT count() FROM test.regression_for_in_operator_view WHERE g = '5' OR g = '6'; +SELECT count() FROM regression_for_in_operator_view WHERE g = '5' OR g = '6'; -DROP TABLE test.regression_for_in_operator_view; -DROP TABLE test.regression_for_in_operator; +DROP TABLE regression_for_in_operator_view; +DROP TABLE regression_for_in_operator; diff --git a/dbms/tests/queries/0_stateless/00623_in_partition_key.sql b/dbms/tests/queries/0_stateless/00623_in_partition_key.sql index 7b8a22a5872..0141151e369 100644 --- a/dbms/tests/queries/0_stateless/00623_in_partition_key.sql +++ b/dbms/tests/queries/0_stateless/00623_in_partition_key.sql @@ -1,75 +1,75 @@ -drop table if exists test.test54378; -create table test.test54378 (part_date Date, pk_date Date, date Date) Engine=MergeTree(part_date, pk_date, 8192); -insert into test.test54378 values ('2018-04-19', '2018-04-19', '2018-04-19'); +drop table if exists test54378; +create table test54378 (part_date Date, pk_date Date, date Date) Engine=MergeTree(part_date, pk_date, 8192); +insert into test54378 values ('2018-04-19', '2018-04-19', '2018-04-19'); -select 111 from test.test54378 where part_date = '2018-04-19'; -select 112 from test.test54378 where part_date in ('2018-04-19'); -select 113 from test.test54378 where pk_date in ('2018-04-19'); -select 114 from test.test54378 where date in ('2018-04-19'); +select 111 from test54378 where part_date = '2018-04-19'; +select 112 from test54378 where part_date in ('2018-04-19'); +select 113 from test54378 where pk_date in ('2018-04-19'); +select 114 from test54378 where date in ('2018-04-19'); SELECT '-'; -select 121 from test.test54378 where part_date = toDate('2018-04-19'); -select 122 from test.test54378 where part_date in (toDate('2018-04-19')); -select 123 from test.test54378 where pk_date in (toDate('2018-04-19')); -select 124 from test.test54378 where date in (toDate('2018-04-19')); +select 121 from test54378 where part_date = toDate('2018-04-19'); +select 122 from test54378 where part_date in (toDate('2018-04-19')); +select 123 from test54378 where pk_date in (toDate('2018-04-19')); +select 124 from test54378 where date in (toDate('2018-04-19')); SELECT '-'; -select 131 from test.test54378 where part_date = (SELECT toDate('2018-04-19')); -select 132 from test.test54378 where part_date in (SELECT toDate('2018-04-19')); -select 133 from test.test54378 where pk_date in (SELECT toDate('2018-04-19')); -select 134 from test.test54378 where date in (SELECT toDate('2018-04-19')); +select 131 from test54378 where part_date = (SELECT toDate('2018-04-19')); +select 132 from test54378 where part_date in (SELECT toDate('2018-04-19')); +select 133 from test54378 where pk_date in (SELECT toDate('2018-04-19')); +select 134 from test54378 where date in (SELECT toDate('2018-04-19')); SELECT '---'; -select 211 from test.test54378 prewhere part_date = '2018-04-19'; -select 212 from test.test54378 prewhere part_date in ('2018-04-19'); -select 213 from test.test54378 prewhere pk_date in ('2018-04-19'); -select 214 from test.test54378 prewhere date in ('2018-04-19'); +select 211 from test54378 prewhere part_date = '2018-04-19'; +select 212 from test54378 prewhere part_date in ('2018-04-19'); +select 213 from test54378 prewhere pk_date in ('2018-04-19'); +select 214 from test54378 prewhere date in ('2018-04-19'); SELECT '-'; -select 221 from test.test54378 prewhere part_date = toDate('2018-04-19'); -select 222 from test.test54378 prewhere part_date in (toDate('2018-04-19')); -select 223 from test.test54378 prewhere pk_date in (toDate('2018-04-19')); -select 224 from test.test54378 prewhere date in (toDate('2018-04-19')); +select 221 from test54378 prewhere part_date = toDate('2018-04-19'); +select 222 from test54378 prewhere part_date in (toDate('2018-04-19')); +select 223 from test54378 prewhere pk_date in (toDate('2018-04-19')); +select 224 from test54378 prewhere date in (toDate('2018-04-19')); SELECT '-'; -select 231 from test.test54378 prewhere part_date = (SELECT toDate('2018-04-19')); -select 232 from test.test54378 prewhere part_date in (SELECT toDate('2018-04-19')); -select 233 from test.test54378 prewhere pk_date in (SELECT toDate('2018-04-19')); -select 234 from test.test54378 prewhere date in (SELECT toDate('2018-04-19')); +select 231 from test54378 prewhere part_date = (SELECT toDate('2018-04-19')); +select 232 from test54378 prewhere part_date in (SELECT toDate('2018-04-19')); +select 233 from test54378 prewhere pk_date in (SELECT toDate('2018-04-19')); +select 234 from test54378 prewhere date in (SELECT toDate('2018-04-19')); SELECT '---'; SET optimize_move_to_prewhere = 0; -select 311 from test.test54378 where part_date = '2018-04-19'; -select 312 from test.test54378 where part_date in ('2018-04-19'); -select 313 from test.test54378 where pk_date in ('2018-04-19'); -select 314 from test.test54378 where date in ('2018-04-19'); +select 311 from test54378 where part_date = '2018-04-19'; +select 312 from test54378 where part_date in ('2018-04-19'); +select 313 from test54378 where pk_date in ('2018-04-19'); +select 314 from test54378 where date in ('2018-04-19'); SELECT '-'; -select 321 from test.test54378 where part_date = toDate('2018-04-19'); -select 322 from test.test54378 where part_date in (toDate('2018-04-19')); -select 323 from test.test54378 where pk_date in (toDate('2018-04-19')); -select 324 from test.test54378 where date in (toDate('2018-04-19')); +select 321 from test54378 where part_date = toDate('2018-04-19'); +select 322 from test54378 where part_date in (toDate('2018-04-19')); +select 323 from test54378 where pk_date in (toDate('2018-04-19')); +select 324 from test54378 where date in (toDate('2018-04-19')); SELECT '-'; -select 331 from test.test54378 where part_date = (SELECT toDate('2018-04-19')); -select 332 from test.test54378 where part_date in (SELECT toDate('2018-04-19')); -select 333 from test.test54378 where pk_date in (SELECT toDate('2018-04-19')); -select 334 from test.test54378 where date in (SELECT toDate('2018-04-19')); +select 331 from test54378 where part_date = (SELECT toDate('2018-04-19')); +select 332 from test54378 where part_date in (SELECT toDate('2018-04-19')); +select 333 from test54378 where pk_date in (SELECT toDate('2018-04-19')); +select 334 from test54378 where date in (SELECT toDate('2018-04-19')); SELECT '---'; SET optimize_move_to_prewhere = 1; -select 411 from test.test54378 where part_date = '2018-04-19'; -select 412 from test.test54378 where part_date in ('2018-04-19'); -select 413 from test.test54378 where pk_date in ('2018-04-19'); -select 414 from test.test54378 where date in ('2018-04-19'); +select 411 from test54378 where part_date = '2018-04-19'; +select 412 from test54378 where part_date in ('2018-04-19'); +select 413 from test54378 where pk_date in ('2018-04-19'); +select 414 from test54378 where date in ('2018-04-19'); SELECT '-'; -select 421 from test.test54378 where part_date = toDate('2018-04-19'); -select 422 from test.test54378 where part_date in (toDate('2018-04-19')); -select 423 from test.test54378 where pk_date in (toDate('2018-04-19')); -select 424 from test.test54378 where date in (toDate('2018-04-19')); +select 421 from test54378 where part_date = toDate('2018-04-19'); +select 422 from test54378 where part_date in (toDate('2018-04-19')); +select 423 from test54378 where pk_date in (toDate('2018-04-19')); +select 424 from test54378 where date in (toDate('2018-04-19')); SELECT '-'; -select 431 from test.test54378 where part_date = (SELECT toDate('2018-04-19')); -select 432 from test.test54378 where part_date in (SELECT toDate('2018-04-19')); -select 433 from test.test54378 where pk_date in (SELECT toDate('2018-04-19')); -select 434 from test.test54378 where date in (SELECT toDate('2018-04-19')); +select 431 from test54378 where part_date = (SELECT toDate('2018-04-19')); +select 432 from test54378 where part_date in (SELECT toDate('2018-04-19')); +select 433 from test54378 where pk_date in (SELECT toDate('2018-04-19')); +select 434 from test54378 where date in (SELECT toDate('2018-04-19')); -drop table test.test54378; +drop table test54378; diff --git a/dbms/tests/queries/0_stateless/00623_replicated_truncate_table_zookeeper.sql b/dbms/tests/queries/0_stateless/00623_replicated_truncate_table_zookeeper.sql index 8d6c735ac76..30e43a8f38c 100644 --- a/dbms/tests/queries/0_stateless/00623_replicated_truncate_table_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00623_replicated_truncate_table_zookeeper.sql @@ -1,30 +1,30 @@ -DROP TABLE IF EXISTS test.replicated_truncate1; -DROP TABLE IF EXISTS test.replicated_truncate2; +DROP TABLE IF EXISTS replicated_truncate1; +DROP TABLE IF EXISTS replicated_truncate2; -CREATE TABLE test.replicated_truncate1 (d Date, k UInt64, i32 Int32) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test/truncate', 'r1', d, k, 8192); -CREATE TABLE test.replicated_truncate2 (d Date, k UInt64, i32 Int32) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test/truncate', 'r2', d, k, 8192); +CREATE TABLE replicated_truncate1 (d Date, k UInt64, i32 Int32) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test/truncate', 'r1', d, k, 8192); +CREATE TABLE replicated_truncate2 (d Date, k UInt64, i32 Int32) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test/truncate', 'r2', d, k, 8192); SELECT '======Before Truncate======'; -INSERT INTO test.replicated_truncate1 VALUES ('2015-01-01', 10, 42); +INSERT INTO replicated_truncate1 VALUES ('2015-01-01', 10, 42); -SYSTEM SYNC REPLICA test.replicated_truncate2; +SYSTEM SYNC REPLICA replicated_truncate2; -SELECT * FROM test.replicated_truncate1 ORDER BY k; -SELECT * FROM test.replicated_truncate2 ORDER BY k; +SELECT * FROM replicated_truncate1 ORDER BY k; +SELECT * FROM replicated_truncate2 ORDER BY k; SELECT '======After Truncate And Empty======'; -TRUNCATE TABLE test.replicated_truncate1; +TRUNCATE TABLE replicated_truncate1; -SELECT * FROM test.replicated_truncate1 ORDER BY k; -SELECT * FROM test.replicated_truncate2 ORDER BY k; +SELECT * FROM replicated_truncate1 ORDER BY k; +SELECT * FROM replicated_truncate2 ORDER BY k; SELECT '======After Truncate And Insert Data======'; -INSERT INTO test.replicated_truncate1 VALUES ('2015-01-01', 10, 42); +INSERT INTO replicated_truncate1 VALUES ('2015-01-01', 10, 42); -SYSTEM SYNC REPLICA test.replicated_truncate2; +SYSTEM SYNC REPLICA replicated_truncate2; -SELECT * FROM test.replicated_truncate1 ORDER BY k; -SELECT * FROM test.replicated_truncate2 ORDER BY k; +SELECT * FROM replicated_truncate1 ORDER BY k; +SELECT * FROM replicated_truncate2 ORDER BY k; -DROP TABLE IF EXISTS test.replicated_truncate1; -DROP TABLE IF EXISTS test.replicated_truncate2; +DROP TABLE IF EXISTS replicated_truncate1; +DROP TABLE IF EXISTS replicated_truncate2; diff --git a/dbms/tests/queries/0_stateless/00623_truncate_table.sql b/dbms/tests/queries/0_stateless/00623_truncate_table.sql index ae987a20dee..97f85f920af 100644 --- a/dbms/tests/queries/0_stateless/00623_truncate_table.sql +++ b/dbms/tests/queries/0_stateless/00623_truncate_table.sql @@ -1,76 +1,76 @@ DROP DATABASE IF EXISTS truncate_test; -DROP TABLE IF EXISTS truncate_test.test_log; -DROP TABLE IF EXISTS truncate_test.test_memory; -DROP TABLE IF EXISTS truncate_test.test_tiny_log; -DROP TABLE IF EXISTS truncate_test.test_stripe_log; -DROP TABLE IF EXISTS truncate_test.test_merge_tree; -DROP TABLE IF EXISTS truncate_test.test_materialized_view; -DROP TABLE IF EXISTS truncate_test.test_materialized_depend; +DROP TABLE IF EXISTS truncate_test_log; +DROP TABLE IF EXISTS truncate_test_memory; +DROP TABLE IF EXISTS truncate_test_tiny_log; +DROP TABLE IF EXISTS truncate_test_stripe_log; +DROP TABLE IF EXISTS truncate_test_merge_tree; +DROP TABLE IF EXISTS truncate_test_materialized_view; +DROP TABLE IF EXISTS truncate_test_materialized_depend; CREATE DATABASE truncate_test; -CREATE TABLE truncate_test.test_set(id UInt64) ENGINE = Set; -CREATE TABLE truncate_test.test_log(id UInt64) ENGINE = Log; -CREATE TABLE truncate_test.test_memory(id UInt64) ENGINE = Memory; -CREATE TABLE truncate_test.test_tiny_log(id UInt64) ENGINE = TinyLog; -CREATE TABLE truncate_test.test_stripe_log(id UInt64) ENGINE = StripeLog; -CREATE TABLE truncate_test.test_merge_tree(p Date, k UInt64) ENGINE = MergeTree(p, k, 1); -CREATE TABLE truncate_test.test_materialized_depend(p Date, k UInt64) ENGINE = Null; -CREATE MATERIALIZED VIEW truncate_test.test_materialized_view ENGINE = MergeTree(p, k, 1) AS SELECT * FROM truncate_test.test_materialized_depend; +CREATE TABLE truncate_test_set(id UInt64) ENGINE = Set; +CREATE TABLE truncate_test_log(id UInt64) ENGINE = Log; +CREATE TABLE truncate_test_memory(id UInt64) ENGINE = Memory; +CREATE TABLE truncate_test_tiny_log(id UInt64) ENGINE = TinyLog; +CREATE TABLE truncate_test_stripe_log(id UInt64) ENGINE = StripeLog; +CREATE TABLE truncate_test_merge_tree(p Date, k UInt64) ENGINE = MergeTree(p, k, 1); +CREATE TABLE truncate_test_materialized_depend(p Date, k UInt64) ENGINE = Null; +CREATE MATERIALIZED VIEW truncate_test_materialized_view ENGINE = MergeTree(p, k, 1) AS SELECT * FROM truncate_test_materialized_depend; SELECT '======Before Truncate======'; -INSERT INTO truncate_test.test_set VALUES(0); -INSERT INTO truncate_test.test_log VALUES(1); -INSERT INTO truncate_test.test_memory VALUES(1); -INSERT INTO truncate_test.test_tiny_log VALUES(1); -INSERT INTO truncate_test.test_stripe_log VALUES(1); -INSERT INTO truncate_test.test_merge_tree VALUES('2000-01-01', 1); -INSERT INTO truncate_test.test_materialized_depend VALUES('2000-01-01', 1); -SELECT * FROM system.numbers WHERE number NOT IN truncate_test.test_set LIMIT 1; -SELECT * FROM truncate_test.test_log; -SELECT * FROM truncate_test.test_memory; -SELECT * FROM truncate_test.test_tiny_log; -SELECT * FROM truncate_test.test_stripe_log; -SELECT * FROM truncate_test.test_merge_tree; -SELECT * FROM truncate_test.test_materialized_view; +INSERT INTO truncate_test_set VALUES(0); +INSERT INTO truncate_test_log VALUES(1); +INSERT INTO truncate_test_memory VALUES(1); +INSERT INTO truncate_test_tiny_log VALUES(1); +INSERT INTO truncate_test_stripe_log VALUES(1); +INSERT INTO truncate_test_merge_tree VALUES('2000-01-01', 1); +INSERT INTO truncate_test_materialized_depend VALUES('2000-01-01', 1); +SELECT * FROM system.numbers WHERE number NOT IN truncate_test_set LIMIT 1; +SELECT * FROM truncate_test_log; +SELECT * FROM truncate_test_memory; +SELECT * FROM truncate_test_tiny_log; +SELECT * FROM truncate_test_stripe_log; +SELECT * FROM truncate_test_merge_tree; +SELECT * FROM truncate_test_materialized_view; SELECT '======After Truncate And Empty======'; -TRUNCATE TABLE truncate_test.test_set; -TRUNCATE TABLE truncate_test.test_log; -TRUNCATE TABLE truncate_test.test_memory; -TRUNCATE TABLE truncate_test.test_tiny_log; -TRUNCATE TABLE truncate_test.test_stripe_log; -TRUNCATE TABLE truncate_test.test_merge_tree; -TRUNCATE TABLE truncate_test.test_materialized_view; -SELECT * FROM system.numbers WHERE number NOT IN truncate_test.test_set LIMIT 1; -SELECT * FROM truncate_test.test_log; -SELECT * FROM truncate_test.test_memory; -SELECT * FROM truncate_test.test_tiny_log; -SELECT * FROM truncate_test.test_stripe_log; -SELECT * FROM truncate_test.test_merge_tree; -SELECT * FROM truncate_test.test_materialized_view; +TRUNCATE TABLE truncate_test_set; +TRUNCATE TABLE truncate_test_log; +TRUNCATE TABLE truncate_test_memory; +TRUNCATE TABLE truncate_test_tiny_log; +TRUNCATE TABLE truncate_test_stripe_log; +TRUNCATE TABLE truncate_test_merge_tree; +TRUNCATE TABLE truncate_test_materialized_view; +SELECT * FROM system.numbers WHERE number NOT IN truncate_test_set LIMIT 1; +SELECT * FROM truncate_test_log; +SELECT * FROM truncate_test_memory; +SELECT * FROM truncate_test_tiny_log; +SELECT * FROM truncate_test_stripe_log; +SELECT * FROM truncate_test_merge_tree; +SELECT * FROM truncate_test_materialized_view; SELECT '======After Truncate And Insert Data======'; -INSERT INTO truncate_test.test_set VALUES(0); -INSERT INTO truncate_test.test_log VALUES(1); -INSERT INTO truncate_test.test_memory VALUES(1); -INSERT INTO truncate_test.test_tiny_log VALUES(1); -INSERT INTO truncate_test.test_stripe_log VALUES(1); -INSERT INTO truncate_test.test_merge_tree VALUES('2000-01-01', 1); -INSERT INTO truncate_test.test_materialized_depend VALUES('2000-01-01', 1); -SELECT * FROM system.numbers WHERE number NOT IN truncate_test.test_set LIMIT 1; -SELECT * FROM truncate_test.test_log; -SELECT * FROM truncate_test.test_memory; -SELECT * FROM truncate_test.test_tiny_log; -SELECT * FROM truncate_test.test_stripe_log; -SELECT * FROM truncate_test.test_merge_tree; -SELECT * FROM truncate_test.test_materialized_view; +INSERT INTO truncate_test_set VALUES(0); +INSERT INTO truncate_test_log VALUES(1); +INSERT INTO truncate_test_memory VALUES(1); +INSERT INTO truncate_test_tiny_log VALUES(1); +INSERT INTO truncate_test_stripe_log VALUES(1); +INSERT INTO truncate_test_merge_tree VALUES('2000-01-01', 1); +INSERT INTO truncate_test_materialized_depend VALUES('2000-01-01', 1); +SELECT * FROM system.numbers WHERE number NOT IN truncate_test_set LIMIT 1; +SELECT * FROM truncate_test_log; +SELECT * FROM truncate_test_memory; +SELECT * FROM truncate_test_tiny_log; +SELECT * FROM truncate_test_stripe_log; +SELECT * FROM truncate_test_merge_tree; +SELECT * FROM truncate_test_materialized_view; -DROP TABLE IF EXISTS truncate_test.test_set; -DROP TABLE IF EXISTS truncate_test.test_log; -DROP TABLE IF EXISTS truncate_test.test_memory; -DROP TABLE IF EXISTS truncate_test.test_tiny_log; -DROP TABLE IF EXISTS truncate_test.test_stripe_log; -DROP TABLE IF EXISTS truncate_test.test_merge_tree; -DROP TABLE IF EXISTS truncate_test.test_materialized_view; -DROP TABLE IF EXISTS truncate_test.test_materialized_depend; +DROP TABLE IF EXISTS truncate_test_set; +DROP TABLE IF EXISTS truncate_test_log; +DROP TABLE IF EXISTS truncate_test_memory; +DROP TABLE IF EXISTS truncate_test_tiny_log; +DROP TABLE IF EXISTS truncate_test_stripe_log; +DROP TABLE IF EXISTS truncate_test_merge_tree; +DROP TABLE IF EXISTS truncate_test_materialized_view; +DROP TABLE IF EXISTS truncate_test_materialized_depend; DROP DATABASE IF EXISTS truncate_test; diff --git a/dbms/tests/queries/0_stateless/00625_arrays_in_nested.sql b/dbms/tests/queries/0_stateless/00625_arrays_in_nested.sql index 7be1004131e..3b418731c8f 100644 --- a/dbms/tests/queries/0_stateless/00625_arrays_in_nested.sql +++ b/dbms/tests/queries/0_stateless/00625_arrays_in_nested.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS nested; CREATE TABLE nested ( diff --git a/dbms/tests/queries/0_stateless/00625_summing_merge_tree_merge.sql b/dbms/tests/queries/0_stateless/00625_summing_merge_tree_merge.sql index dd629b7bb15..f7216b6da66 100644 --- a/dbms/tests/queries/0_stateless/00625_summing_merge_tree_merge.sql +++ b/dbms/tests/queries/0_stateless/00625_summing_merge_tree_merge.sql @@ -1,6 +1,6 @@ -DROP TABLE IF EXISTS test.tab ; +DROP TABLE IF EXISTS tab ; -CREATE TABLE test.tab +CREATE TABLE tab ( date Date, key UInt32, @@ -10,7 +10,7 @@ CREATE TABLE test.tab ) ENGINE = SummingMergeTree(date, (date, key), 1); -INSERT INTO test.tab SELECT +INSERT INTO tab SELECT today(), number, [toUInt16(number)], @@ -18,7 +18,7 @@ INSERT INTO test.tab SELECT FROM system.numbers LIMIT 8190; -INSERT INTO test.tab SELECT +INSERT INTO tab SELECT today(), number + 8190, [toUInt16(number)], @@ -26,4 +26,4 @@ INSERT INTO test.tab SELECT FROM system.numbers LIMIT 10; -OPTIMIZE TABLE test.tab; +OPTIMIZE TABLE tab; diff --git a/dbms/tests/queries/0_stateless/00628_in_lambda_on_merge_table_bug.sql b/dbms/tests/queries/0_stateless/00628_in_lambda_on_merge_table_bug.sql index beedf511795..f49d2e795a7 100644 --- a/dbms/tests/queries/0_stateless/00628_in_lambda_on_merge_table_bug.sql +++ b/dbms/tests/queries/0_stateless/00628_in_lambda_on_merge_table_bug.sql @@ -1,15 +1,19 @@ -drop table if exists test_in_tuple_1; -drop table if exists test_in_tuple_2; -drop table if exists test_in_tuple; +drop table if exists test.test_in_tuple_1; +drop table if exists test.test_in_tuple_2; +drop table if exists test.test_in_tuple; -create table test_in_tuple_1 (key Int32, key_2 Int32, x Array(Int32), y Array(Int32)) engine = MergeTree order by (key, key_2); -create table test_in_tuple_2 (key Int32, key_2 Int32, x Array(Int32), y Array(Int32)) engine = MergeTree order by (key, key_2); -create table test_in_tuple as test_in_tuple_1 engine = Merge('default', '^test_in_tuple_[0-9]+$'); +create table test.test_in_tuple_1 (key Int32, key_2 Int32, x Array(Int32), y Array(Int32)) engine = MergeTree order by (key, key_2); +create table test.test_in_tuple_2 (key Int32, key_2 Int32, x Array(Int32), y Array(Int32)) engine = MergeTree order by (key, key_2); +create table test.test_in_tuple as test.test_in_tuple_1 engine = Merge('test', '^test_in_tuple_[0-9]+$'); -insert into test_in_tuple_1 values (1, 1, [1, 2], [1, 2]); -insert into test_in_tuple_2 values (2, 1, [1, 2], [1, 2]); -select key, arr_x, arr_y, _table from test_in_tuple left array join x as arr_x, y as arr_y order by _table; +insert into test.test_in_tuple_1 values (1, 1, [1, 2], [1, 2]); +insert into test.test_in_tuple_2 values (2, 1, [1, 2], [1, 2]); +select key, arr_x, arr_y, _table from test.test_in_tuple left array join x as arr_x, y as arr_y order by _table; select '-'; -select key, arr_x, arr_y, _table from test_in_tuple left array join x as arr_x, y as arr_y where (key_2, arr_x, arr_y) in (1, 1, 1) order by _table; +select key, arr_x, arr_y, _table from test.test_in_tuple left array join x as arr_x, y as arr_y where (key_2, arr_x, arr_y) in (1, 1, 1) order by _table; select '-'; -select key, arr_x, arr_y, _table from test_in_tuple left array join arrayFilter((t, x_0, x_1) -> (key_2, x_0, x_1) in (1, 1, 1), x, x ,y) as arr_x, arrayFilter((t, x_0, x_1) -> (key_2, x_0, x_1) in (1, 1, 1), y, x ,y) as arr_y where (key_2, arr_x, arr_y) in (1, 1, 1) order by _table; +select key, arr_x, arr_y, _table from test.test_in_tuple left array join arrayFilter((t, x_0, x_1) -> (key_2, x_0, x_1) in (1, 1, 1), x, x ,y) as arr_x, arrayFilter((t, x_0, x_1) -> (key_2, x_0, x_1) in (1, 1, 1), y, x ,y) as arr_y where (key_2, arr_x, arr_y) in (1, 1, 1) order by _table; + +drop table if exists test.test_in_tuple_1; +drop table if exists test.test_in_tuple_2; +drop table if exists test.test_in_tuple; diff --git a/dbms/tests/queries/0_stateless/00630_arbitrary_csv_delimiter.sh b/dbms/tests/queries/0_stateless/00630_arbitrary_csv_delimiter.sh index 954f10f8d98..3d83e9772c2 100755 --- a/dbms/tests/queries/0_stateless/00630_arbitrary_csv_delimiter.sh +++ b/dbms/tests/queries/0_stateless/00630_arbitrary_csv_delimiter.sh @@ -3,50 +3,50 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.csv"; -$CLICKHOUSE_CLIENT --query="CREATE TABLE test.csv (s String, n UInt64, d Date) ENGINE = Memory"; +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS csv"; +$CLICKHOUSE_CLIENT --query="CREATE TABLE csv (s String, n UInt64, d Date) ENGINE = Memory"; echo '"Hello, world"| 123| "2016-01-01" "Hello, ""world"""| "456"| 2016-01-02| Hello "world"| 789 |2016-01-03 "Hello - world"| 100| 2016-01-04|' | $CLICKHOUSE_CLIENT --format_csv_delimiter="|" --query="INSERT INTO test.csv FORMAT CSV"; + world"| 100| 2016-01-04|' | $CLICKHOUSE_CLIENT --format_csv_delimiter="|" --query="INSERT INTO csv FORMAT CSV"; -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.csv ORDER BY d"; +$CLICKHOUSE_CLIENT --query="SELECT * FROM csv ORDER BY d"; -$CLICKHOUSE_CLIENT --query="DROP TABLE test.csv"; -$CLICKHOUSE_CLIENT --query="CREATE TABLE test.csv (s String, n UInt64, d Date) ENGINE = Memory"; +$CLICKHOUSE_CLIENT --query="DROP TABLE csv"; +$CLICKHOUSE_CLIENT --query="CREATE TABLE csv (s String, n UInt64, d Date) ENGINE = Memory"; echo '"Hello, world"; 123; "2016-01-01" "Hello, ""world"""; "456"; 2016-01-02; Hello "world"; 789 ;2016-01-03 "Hello - world"; 100; 2016-01-04;' | $CLICKHOUSE_CLIENT --multiquery --query="SET format_csv_delimiter=';'; INSERT INTO test.csv FORMAT CSV"; + world"; 100; 2016-01-04;' | $CLICKHOUSE_CLIENT --multiquery --query="SET format_csv_delimiter=';'; INSERT INTO csv FORMAT CSV"; -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.csv ORDER BY d"; -$CLICKHOUSE_CLIENT --format_csv_delimiter=";" --query="SELECT * FROM test.csv ORDER BY d FORMAT CSV"; -$CLICKHOUSE_CLIENT --format_csv_delimiter="/" --query="SELECT * FROM test.csv ORDER BY d FORMAT CSV"; +$CLICKHOUSE_CLIENT --query="SELECT * FROM csv ORDER BY d"; +$CLICKHOUSE_CLIENT --format_csv_delimiter=";" --query="SELECT * FROM csv ORDER BY d FORMAT CSV"; +$CLICKHOUSE_CLIENT --format_csv_delimiter="/" --query="SELECT * FROM csv ORDER BY d FORMAT CSV"; -$CLICKHOUSE_CLIENT --query="DROP TABLE test.csv"; -$CLICKHOUSE_CLIENT --query="CREATE TABLE test.csv (s1 String, s2 String) ENGINE = Memory"; +$CLICKHOUSE_CLIENT --query="DROP TABLE csv"; +$CLICKHOUSE_CLIENT --query="CREATE TABLE csv (s1 String, s2 String) ENGINE = Memory"; echo 'abc,def;hello; hello; world; -"hello ""world""";abc,def;' | $CLICKHOUSE_CLIENT --multiquery --query="SET format_csv_delimiter=';'; INSERT INTO test.csv FORMAT CSV"; +"hello ""world""";abc,def;' | $CLICKHOUSE_CLIENT --multiquery --query="SET format_csv_delimiter=';'; INSERT INTO csv FORMAT CSV"; -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.csv"; +$CLICKHOUSE_CLIENT --query="SELECT * FROM csv"; -$CLICKHOUSE_CLIENT --query="DROP TABLE test.csv"; -$CLICKHOUSE_CLIENT --query="CREATE TABLE test.csv (s1 String, s2 String) ENGINE = Memory"; +$CLICKHOUSE_CLIENT --query="DROP TABLE csv"; +$CLICKHOUSE_CLIENT --query="CREATE TABLE csv (s1 String, s2 String) ENGINE = Memory"; echo '"s1";"s2" abc,def;hello; hello; world; -"hello ""world""";abc,def;' | $CLICKHOUSE_CLIENT --multiquery --query="SET format_csv_delimiter=';'; INSERT INTO test.csv FORMAT CSVWithNames"; +"hello ""world""";abc,def;' | $CLICKHOUSE_CLIENT --multiquery --query="SET format_csv_delimiter=';'; INSERT INTO csv FORMAT CSVWithNames"; -$CLICKHOUSE_CLIENT --format_csv_delimiter=";" --query="SELECT * FROM test.csv FORMAT CSV"; -$CLICKHOUSE_CLIENT --format_csv_delimiter="," --query="SELECT * FROM test.csv FORMAT CSV"; -$CLICKHOUSE_CLIENT --format_csv_delimiter="/" --query="SELECT * FROM test.csv FORMAT CSV"; +$CLICKHOUSE_CLIENT --format_csv_delimiter=";" --query="SELECT * FROM csv FORMAT CSV"; +$CLICKHOUSE_CLIENT --format_csv_delimiter="," --query="SELECT * FROM csv FORMAT CSV"; +$CLICKHOUSE_CLIENT --format_csv_delimiter="/" --query="SELECT * FROM csv FORMAT CSV"; -$CLICKHOUSE_CLIENT --query="DROP TABLE test.csv"; +$CLICKHOUSE_CLIENT --query="DROP TABLE csv"; diff --git a/dbms/tests/queries/0_stateless/00632_get_sample_block_cache.sql b/dbms/tests/queries/0_stateless/00632_get_sample_block_cache.sql index a15caadce89..ab557919413 100644 --- a/dbms/tests/queries/0_stateless/00632_get_sample_block_cache.sql +++ b/dbms/tests/queries/0_stateless/00632_get_sample_block_cache.sql @@ -1,9 +1,9 @@ -- This test (SELECT) without cache can take tens minutes -DROP TABLE IF EXISTS test.dict_string; -DROP TABLE IF EXISTS test.dict_ui64; -DROP TABLE IF EXISTS test.video_views; +DROP TABLE IF EXISTS dict_string; +DROP TABLE IF EXISTS dict_ui64; +DROP TABLE IF EXISTS video_views; -CREATE TABLE test.video_views +CREATE TABLE video_views ( entityIri String, courseId UInt64, @@ -33,30 +33,30 @@ PARTITION BY entityIri ORDER BY (learnerId, entityIri) SETTINGS index_granularity = 8192; -CREATE TABLE test.dict_string (entityIri String) ENGINE = Memory; -CREATE TABLE test.dict_ui64 (learnerId UInt64) ENGINE = Memory; +CREATE TABLE dict_string (entityIri String) ENGINE = Memory; +CREATE TABLE dict_ui64 (learnerId UInt64) ENGINE = Memory; ---SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count`, `overall-full-watched-learners-count`, `views-count`, `time-before-full-watched-average`, if (isNaN((`overall-full-watched-learners-count`/`overall-watchers-count`) * 100), 0, (`overall-full-watched-learners-count`/`overall-watchers-count`) * 100) as `overall-watched-part`, if (isNaN((`full-watched-learners-count`/`watchers-count` * 100)), 0, (`full-watched-learners-count`/`watchers-count` * 100)) as `full-watched-part`, if (isNaN((`rejects-count`/`views-count` * 100)), 0, (`rejects-count`/`views-count` * 100)) as `rejects-part` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count`, `overall-full-watched-learners-count`, `views-count`, `time-before-full-watched-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count`, `overall-full-watched-learners-count`, `views-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count`, `overall-full-watched-learners-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average` FROM (SELECT `entityIri`, `watchers-count` FROM (SELECT `entityIri` FROM `CloM8CwMR2`) ANY LEFT JOIN (SELECT uniq(learnerId) as `watchers-count`, `entityIri` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(viewDurationSum) as `time-repeating-average`, `entityIri` FROM (SELECT sum(views.viewDuration) as viewDurationSum, `entityIri`, `learnerId` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `views`.`repeatingView` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `learnerId`, `entityIri`) GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(views.viewDuration) as `reject-views-duration-average`, `entityIri` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `views`.`reject` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(viewsCount) as `repeating-views-count-average`, `entityIri` FROM (SELECT count() as viewsCount, `learnerId`, `entityIri` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `courseId` = 1 AND `entityIri` IN `CloM8CwMR2` WHERE `views`.`repeatingView` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `learnerId`, `entityIri`) GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(views.viewDuration) as `views-duration-average`, `entityIri` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(views.watchedPart) as `watched-part-average`, `entityIri` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT count() as `rejects-count`, `entityIri` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `views`.`reject` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(progressMax) as `progress-average`, `entityIri` FROM (SELECT max(views.progress) as progressMax, `entityIri`, `learnerId` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `learnerId`, `entityIri`) GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(fullWatchedViews) as `views-count-before-full-watched-average`, `entityIri` FROM `test`.`video_views` FINAL PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT any(duration) as `duration`, `entityIri` FROM `test`.`video_views` FINAL PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT uniq(learnerId) as `full-watched-learners-count`, `entityIri` FROM `test`.`video_views` FINAL PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `fullWatched` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT uniq(learnerId) as `overall-watchers-count`, `entityIri` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT uniq(learnerId) as `overall-full-watched-learners-count`, `entityIri` FROM `test`.`video_views` FINAL PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `fullWatched` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT count() as `views-count`, `entityIri` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(fullWatchedTime) as `time-before-full-watched-average`, `entityIri` FROM `test`.`video_views` FINAL PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) FORMAT JSON; +--SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count`, `overall-full-watched-learners-count`, `views-count`, `time-before-full-watched-average`, if (isNaN((`overall-full-watched-learners-count`/`overall-watchers-count`) * 100), 0, (`overall-full-watched-learners-count`/`overall-watchers-count`) * 100) as `overall-watched-part`, if (isNaN((`full-watched-learners-count`/`watchers-count` * 100)), 0, (`full-watched-learners-count`/`watchers-count` * 100)) as `full-watched-part`, if (isNaN((`rejects-count`/`views-count` * 100)), 0, (`rejects-count`/`views-count` * 100)) as `rejects-part` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count`, `overall-full-watched-learners-count`, `views-count`, `time-before-full-watched-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count`, `overall-full-watched-learners-count`, `views-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count`, `overall-full-watched-learners-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average` FROM (SELECT `entityIri`, `watchers-count` FROM (SELECT `entityIri` FROM `CloM8CwMR2`) ANY LEFT JOIN (SELECT uniq(learnerId) as `watchers-count`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(viewDurationSum) as `time-repeating-average`, `entityIri` FROM (SELECT sum(views.viewDuration) as viewDurationSum, `entityIri`, `learnerId` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `views`.`repeatingView` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `learnerId`, `entityIri`) GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(views.viewDuration) as `reject-views-duration-average`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `views`.`reject` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(viewsCount) as `repeating-views-count-average`, `entityIri` FROM (SELECT count() as viewsCount, `learnerId`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `courseId` = 1 AND `entityIri` IN `CloM8CwMR2` WHERE `views`.`repeatingView` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `learnerId`, `entityIri`) GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(views.viewDuration) as `views-duration-average`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(views.watchedPart) as `watched-part-average`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT count() as `rejects-count`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `views`.`reject` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(progressMax) as `progress-average`, `entityIri` FROM (SELECT max(views.progress) as progressMax, `entityIri`, `learnerId` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `learnerId`, `entityIri`) GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(fullWatchedViews) as `views-count-before-full-watched-average`, `entityIri` FROM `video_views` FINAL PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT any(duration) as `duration`, `entityIri` FROM `video_views` FINAL PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT uniq(learnerId) as `full-watched-learners-count`, `entityIri` FROM `video_views` FINAL PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `fullWatched` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT uniq(learnerId) as `overall-watchers-count`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT uniq(learnerId) as `overall-full-watched-learners-count`, `entityIri` FROM `video_views` FINAL PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `fullWatched` = 1 AND `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT count() as `views-count`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(fullWatchedTime) as `time-before-full-watched-average`, `entityIri` FROM `video_views` FINAL PREWHERE `entityIri` IN `CloM8CwMR2` AND `courseId` = 1 WHERE `learnerId` IN `tkRpHxGqM1` GROUP BY `entityIri`) USING `entityIri`) FORMAT JSON; SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count`, `overall-full-watched-learners-count`, `views-count`, `time-before-full-watched-average`, if (isNaN((`overall-full-watched-learners-count`/`overall-watchers-count`) * 100), 0, (`overall-full-watched-learners-count`/`overall-watchers-count`) * 100) as `overall-watched-part`, if (isNaN((`full-watched-learners-count`/`watchers-count` * 100)), 0, (`full-watched-learners-count`/`watchers-count` * 100)) as `full-watched-part`, if (isNaN((`rejects-count`/`views-count` * 100)), 0, (`rejects-count`/`views-count` * 100)) as `rejects-part` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count`, `overall-full-watched-learners-count`, `views-count`, `time-before-full-watched-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count`, `overall-full-watched-learners-count`, `views-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count`, `overall-full-watched-learners-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count`, `overall-watchers-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration`, `full-watched-learners-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average`, `duration` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average`, `views-count-before-full-watched-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count`, `progress-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average`, `rejects-count` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average`, `watched-part-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average`, `repeating-views-count-average`, `views-duration-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, - `reject-views-duration-average`, `repeating-views-count-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average` FROM (SELECT `entityIri`, `watchers-count` FROM (SELECT `entityIri` FROM test.dict_string) ANY LEFT JOIN (SELECT uniq(learnerId) as `watchers-count`, `entityIri` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN test.dict_string AND `courseId` = 1 WHERE `learnerId` IN test.dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(viewDurationSum) as `time-repeating-average`, `entityIri` FROM (SELECT sum(views.viewDuration) as viewDurationSum, `entityIri`, `learnerId` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN test.dict_string AND `courseId` = 1 WHERE `views`.`repeatingView` = 1 AND `learnerId` IN test.dict_ui64 GROUP BY `learnerId`, `entityIri`) GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(views.viewDuration) as `reject-views-duration-average`, `entityIri` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN test.dict_string AND `courseId` = 1 WHERE `views`.`reject` = 1 AND `learnerId` IN test.dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(viewsCount) as `repeating-views-count-average`, `entityIri` FROM (SELECT count() as viewsCount, `learnerId`, `entityIri` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `courseId` = 1 AND `entityIri` IN test.dict_string WHERE `views`.`repeatingView` = 1 AND `learnerId` IN test.dict_ui64 GROUP BY `learnerId`, `entityIri`) GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(views.viewDuration) as `views-duration-average`, `entityIri` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN test.dict_string AND `courseId` = 1 WHERE `learnerId` IN test.dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(views.watchedPart) as `watched-part-average`, `entityIri` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN test.dict_string AND `courseId` = 1 WHERE `learnerId` IN test.dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT count() as `rejects-count`, `entityIri` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN test.dict_string AND `courseId` = 1 WHERE `views`.`reject` = 1 AND `learnerId` IN test.dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(progressMax) as `progress-average`, `entityIri` FROM (SELECT max(views.progress) as progressMax, `entityIri`, `learnerId` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN test.dict_string AND `courseId` = 1 WHERE `learnerId` IN test.dict_ui64 GROUP BY `learnerId`, `entityIri`) GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(fullWatchedViews) as `views-count-before-full-watched-average`, `entityIri` FROM `test`.`video_views` FINAL PREWHERE `entityIri` IN test.dict_string AND `courseId` = 1 WHERE `learnerId` IN test.dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT any(duration) as `duration`, `entityIri` FROM `test`.`video_views` FINAL PREWHERE `entityIri` IN test.dict_string AND `courseId` = 1 WHERE `learnerId` IN test.dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT uniq(learnerId) as `full-watched-learners-count`, `entityIri` FROM `test`.`video_views` FINAL PREWHERE `entityIri` IN test.dict_string AND `courseId` = 1 WHERE `fullWatched` = 1 AND `learnerId` IN test.dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT uniq(learnerId) as `overall-watchers-count`, `entityIri` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN test.dict_string AND `courseId` = 1 WHERE `learnerId` IN test.dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT uniq(learnerId) as `overall-full-watched-learners-count`, - `entityIri` FROM `test`.`video_views` FINAL PREWHERE `entityIri` IN test.dict_string AND `courseId` = 1 WHERE `fullWatched` = 1 AND `learnerId` IN test.dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT count() as `views-count`, `entityIri` FROM `test`.`video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN test.dict_string AND `courseId` = 1 WHERE `learnerId` IN test.dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(fullWatchedTime) as `time-before-full-watched-average`, `entityIri` FROM `test`.`video_views` FINAL PREWHERE `entityIri` IN test.dict_string AND `courseId` = 1 WHERE `learnerId` IN test.dict_ui64 GROUP BY `entityIri`) USING `entityIri`); + `reject-views-duration-average`, `repeating-views-count-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average`, `reject-views-duration-average` FROM (SELECT `entityIri`, `watchers-count`, `time-repeating-average` FROM (SELECT `entityIri`, `watchers-count` FROM (SELECT `entityIri` FROM dict_string) ANY LEFT JOIN (SELECT uniq(learnerId) as `watchers-count`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN dict_string AND `courseId` = 1 WHERE `learnerId` IN dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(viewDurationSum) as `time-repeating-average`, `entityIri` FROM (SELECT sum(views.viewDuration) as viewDurationSum, `entityIri`, `learnerId` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN dict_string AND `courseId` = 1 WHERE `views`.`repeatingView` = 1 AND `learnerId` IN dict_ui64 GROUP BY `learnerId`, `entityIri`) GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(views.viewDuration) as `reject-views-duration-average`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN dict_string AND `courseId` = 1 WHERE `views`.`reject` = 1 AND `learnerId` IN dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(viewsCount) as `repeating-views-count-average`, `entityIri` FROM (SELECT count() as viewsCount, `learnerId`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `courseId` = 1 AND `entityIri` IN dict_string WHERE `views`.`repeatingView` = 1 AND `learnerId` IN dict_ui64 GROUP BY `learnerId`, `entityIri`) GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(views.viewDuration) as `views-duration-average`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN dict_string AND `courseId` = 1 WHERE `learnerId` IN dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(views.watchedPart) as `watched-part-average`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN dict_string AND `courseId` = 1 WHERE `learnerId` IN dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT count() as `rejects-count`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN dict_string AND `courseId` = 1 WHERE `views`.`reject` = 1 AND `learnerId` IN dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(progressMax) as `progress-average`, `entityIri` FROM (SELECT max(views.progress) as progressMax, `entityIri`, `learnerId` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN dict_string AND `courseId` = 1 WHERE `learnerId` IN dict_ui64 GROUP BY `learnerId`, `entityIri`) GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(fullWatchedViews) as `views-count-before-full-watched-average`, `entityIri` FROM `video_views` FINAL PREWHERE `entityIri` IN dict_string AND `courseId` = 1 WHERE `learnerId` IN dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT any(duration) as `duration`, `entityIri` FROM `video_views` FINAL PREWHERE `entityIri` IN dict_string AND `courseId` = 1 WHERE `learnerId` IN dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT uniq(learnerId) as `full-watched-learners-count`, `entityIri` FROM `video_views` FINAL PREWHERE `entityIri` IN dict_string AND `courseId` = 1 WHERE `fullWatched` = 1 AND `learnerId` IN dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT uniq(learnerId) as `overall-watchers-count`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN dict_string AND `courseId` = 1 WHERE `learnerId` IN dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT uniq(learnerId) as `overall-full-watched-learners-count`, + `entityIri` FROM `video_views` FINAL PREWHERE `entityIri` IN dict_string AND `courseId` = 1 WHERE `fullWatched` = 1 AND `learnerId` IN dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT count() as `views-count`, `entityIri` FROM `video_views` FINAL ARRAY JOIN `views` PREWHERE `entityIri` IN dict_string AND `courseId` = 1 WHERE `learnerId` IN dict_ui64 GROUP BY `entityIri`) USING `entityIri`) ANY LEFT JOIN (SELECT avg(fullWatchedTime) as `time-before-full-watched-average`, `entityIri` FROM `video_views` FINAL PREWHERE `entityIri` IN dict_string AND `courseId` = 1 WHERE `learnerId` IN dict_ui64 GROUP BY `entityIri`) USING `entityIri`); SELECT 'Still alive'; -DROP TABLE test.dict_string; -DROP TABLE test.dict_ui64; -DROP TABLE test.video_views; +DROP TABLE dict_string; +DROP TABLE dict_ui64; +DROP TABLE video_views; -- Test for tsan: Ensure cache used from one thread SET max_threads = 32; -DROP TABLE IF EXISTS test.sample; +DROP TABLE IF EXISTS sample; -CREATE TABLE test.sample (d Date DEFAULT '2000-01-01', x UInt16) ENGINE = MergeTree(d, x, x, 10); -INSERT INTO test.sample (x) SELECT toUInt16(number) AS x FROM system.numbers LIMIT 65536; +CREATE TABLE sample (d Date DEFAULT '2000-01-01', x UInt16) ENGINE = MergeTree(d, x, x, 10); +INSERT INTO sample (x) SELECT toUInt16(number) AS x FROM system.numbers LIMIT 65536; SELECT count() FROM @@ -66,109 +66,109 @@ FROM count() AS c FROM ( - SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) - UNION ALL SELECT * FROM ( SELECT * FROM test.sample WHERE x > 0 ) + SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) + UNION ALL SELECT * FROM ( SELECT * FROM sample WHERE x > 0 ) ) GROUP BY x --HAVING c = 1 ORDER BY x ASC ); -DROP TABLE test.sample; +DROP TABLE sample; diff --git a/dbms/tests/queries/0_stateless/00633_func_or_in.sql b/dbms/tests/queries/0_stateless/00633_func_or_in.sql index 6f83b774eaf..8aa467b4ce8 100644 --- a/dbms/tests/queries/0_stateless/00633_func_or_in.sql +++ b/dbms/tests/queries/0_stateless/00633_func_or_in.sql @@ -1,8 +1,8 @@ -drop table if exists test.orin_test; +drop table if exists orin_test; -create table test.orin_test (c1 Int32) engine=Memory; -insert into test.orin_test values(1), (100); +create table orin_test (c1 Int32) engine=Memory; +insert into orin_test values(1), (100); -select minus(c1 = 1 or c1=2 or c1 =3, c1=5) from test.orin_test; +select minus(c1 = 1 or c1=2 or c1 =3, c1=5) from orin_test; -drop table test.orin_test; +drop table orin_test; diff --git a/dbms/tests/queries/0_stateless/00633_materialized_view_and_too_many_parts_zookeeper.sh b/dbms/tests/queries/0_stateless/00633_materialized_view_and_too_many_parts_zookeeper.sh index e4df41ccad8..2d853eebff7 100755 --- a/dbms/tests/queries/0_stateless/00633_materialized_view_and_too_many_parts_zookeeper.sh +++ b/dbms/tests/queries/0_stateless/00633_materialized_view_and_too_many_parts_zookeeper.sh @@ -4,36 +4,36 @@ set -e CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.root" -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.a" -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.b" -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.c" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS root" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS a" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS b" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS c" -${CLICKHOUSE_CLIENT} --query "CREATE TABLE test.root (d UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/test/root', '1') ORDER BY d" -${CLICKHOUSE_CLIENT} --query "CREATE MATERIALIZED VIEW test.a (d UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/test/a', '1') ORDER BY d AS SELECT * FROM test.root" -${CLICKHOUSE_CLIENT} --query "CREATE MATERIALIZED VIEW test.b (d UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/test/b', '1') ORDER BY d SETTINGS parts_to_delay_insert=1, parts_to_throw_insert=1 AS SELECT * FROM test.root" -${CLICKHOUSE_CLIENT} --query "CREATE MATERIALIZED VIEW test.c (d UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/test/c', '1') ORDER BY d AS SELECT * FROM test.root" +${CLICKHOUSE_CLIENT} --query "CREATE TABLE root (d UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/test/root', '1') ORDER BY d" +${CLICKHOUSE_CLIENT} --query "CREATE MATERIALIZED VIEW a (d UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/test/a', '1') ORDER BY d AS SELECT * FROM root" +${CLICKHOUSE_CLIENT} --query "CREATE MATERIALIZED VIEW b (d UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/test/b', '1') ORDER BY d SETTINGS parts_to_delay_insert=1, parts_to_throw_insert=1 AS SELECT * FROM root" +${CLICKHOUSE_CLIENT} --query "CREATE MATERIALIZED VIEW c (d UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/test/c', '1') ORDER BY d AS SELECT * FROM root" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.root VALUES (1)"; -${CLICKHOUSE_CLIENT} --query "SELECT _table, d FROM merge('test', '^[abc]\$') ORDER BY _table" -if ${CLICKHOUSE_CLIENT} --query "INSERT INTO test.root VALUES (2)" 2>/dev/null; then - echo "FAIL\nExpected 'too many parts' on table test.b" +${CLICKHOUSE_CLIENT} --query "INSERT INTO root VALUES (1)"; +${CLICKHOUSE_CLIENT} --query "SELECT _table, d FROM merge('${CLICKHOUSE_DATABASE}', '^[abc]\$') ORDER BY _table" +if ${CLICKHOUSE_CLIENT} --query "INSERT INTO root VALUES (2)" 2>/dev/null; then + echo "FAIL\nExpected 'too many parts' on table b" fi echo -${CLICKHOUSE_CLIENT} --query "SELECT _table, d FROM merge('test', '^[abc]\$') ORDER BY _table" +${CLICKHOUSE_CLIENT} --query "SELECT _table, d FROM merge('${CLICKHOUSE_DATABASE}', '^[abc]\$') ORDER BY _table" -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.root" -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.a" -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.b" -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.c" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS root" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS a" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS b" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS c" # Deduplication check for non-replicated root table echo -${CLICKHOUSE_CLIENT} --query "CREATE TABLE test.root (d UInt64) ENGINE = Null" -${CLICKHOUSE_CLIENT} --query "CREATE MATERIALIZED VIEW test.a (d UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/test/a', '1') ORDER BY d AS SELECT * FROM test.root" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.root VALUES (1)"; -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.root VALUES (1)"; -${CLICKHOUSE_CLIENT} --query "SELECT * FROM test.a"; -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.root" -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.a" +${CLICKHOUSE_CLIENT} --query "CREATE TABLE root (d UInt64) ENGINE = Null" +${CLICKHOUSE_CLIENT} --query "CREATE MATERIALIZED VIEW a (d UInt64) ENGINE = ReplicatedMergeTree('/clickhouse/test/a', '1') ORDER BY d AS SELECT * FROM root" +${CLICKHOUSE_CLIENT} --query "INSERT INTO root VALUES (1)"; +${CLICKHOUSE_CLIENT} --query "INSERT INTO root VALUES (1)"; +${CLICKHOUSE_CLIENT} --query "SELECT * FROM a"; +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS root" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS a" diff --git a/dbms/tests/queries/0_stateless/00634_logging_shard.sh b/dbms/tests/queries/0_stateless/00634_logging_shard.sh index 7df6e768a8b..1687072bbf1 100755 --- a/dbms/tests/queries/0_stateless/00634_logging_shard.sh +++ b/dbms/tests/queries/0_stateless/00634_logging_shard.sh @@ -30,18 +30,18 @@ lines_two_servers=`cat "$server_logs_file" | wc -l` (( $lines_two_servers >= 2 * $lines_one_server )) || echo "Fail: $lines_two_servers $lines_one_server" # INSERT -$CLICKHOUSE_CLIENT $settings -q "DROP TABLE IF EXISTS test.null" -$CLICKHOUSE_CLIENT $settings -q "CREATE TABLE test.null (i Int8) ENGINE = Null" +$CLICKHOUSE_CLIENT $settings -q "DROP TABLE IF EXISTS null" +$CLICKHOUSE_CLIENT $settings -q "CREATE TABLE null (i Int8) ENGINE = Null" > "$server_logs_file" -$CLICKHOUSE_CLIENT $settings -q "INSERT INTO test.null VALUES (0)" +$CLICKHOUSE_CLIENT $settings -q "INSERT INTO null VALUES (0)" lines_one_server=`cat "$server_logs_file" | wc -l` > "$server_logs_file" -$CLICKHOUSE_CLIENT $settings -q "INSERT INTO TABLE FUNCTION remote('127.0.0.2', 'test', 'null') VALUES (0)" +$CLICKHOUSE_CLIENT $settings -q "INSERT INTO TABLE FUNCTION remote('127.0.0.2', '${CLICKHOUSE_DATABASE}', 'null') VALUES (0)" lines_two_servers=`cat "$server_logs_file" | wc -l` -$CLICKHOUSE_CLIENT $settings -q "DROP TABLE IF EXISTS test.null" +$CLICKHOUSE_CLIENT $settings -q "DROP TABLE IF EXISTS null" (( $lines_two_servers > $lines_one_server )) || echo "Fail: $lines_two_servers $lines_one_server" diff --git a/dbms/tests/queries/0_stateless/00634_performance_introspection_and_logging.sh b/dbms/tests/queries/0_stateless/00634_performance_introspection_and_logging.sh index 47e9aa07476..395ab612f49 100755 --- a/dbms/tests/queries/0_stateless/00634_performance_introspection_and_logging.sh +++ b/dbms/tests/queries/0_stateless/00634_performance_introspection_and_logging.sh @@ -19,14 +19,14 @@ settings="$server_logs --log_queries=1 --log_query_threads=1 --log_profile_event # Test insert logging on each block and checkPacket() method $CLICKHOUSE_CLIENT $settings -n -q " -DROP TABLE IF EXISTS test.null; -CREATE TABLE test.null (i UInt8) ENGINE = MergeTree PARTITION BY tuple() ORDER BY tuple();" +DROP TABLE IF EXISTS null; +CREATE TABLE null (i UInt8) ENGINE = MergeTree PARTITION BY tuple() ORDER BY tuple();" -head -c 1000 /dev/zero | $CLICKHOUSE_CLIENT $settings --max_insert_block_size=10 --min_insert_block_size_rows=1 --min_insert_block_size_bytes=1 -q "INSERT INTO test.null FORMAT RowBinary" +head -c 1000 /dev/zero | $CLICKHOUSE_CLIENT $settings --max_insert_block_size=10 --min_insert_block_size_rows=1 --min_insert_block_size_bytes=1 -q "INSERT INTO null FORMAT RowBinary" $CLICKHOUSE_CLIENT $settings -n -q " -SELECT count() FROM test.null; -DROP TABLE test.null;" +SELECT count() FROM null; +DROP TABLE null;" (( `cat "$server_logs_file" | wc -l` >= 110 )) || echo Fail diff --git a/dbms/tests/queries/0_stateless/00636_partition_key_parts_pruning.sh b/dbms/tests/queries/0_stateless/00636_partition_key_parts_pruning.sh index cbd1e456688..a0291608c81 100755 --- a/dbms/tests/queries/0_stateless/00636_partition_key_parts_pruning.sh +++ b/dbms/tests/queries/0_stateless/00636_partition_key_parts_pruning.sh @@ -5,39 +5,39 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) ${CLICKHOUSE_CLIENT} --query="SELECT '*** Single column partition key ***'" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.single_col_partition_key" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.single_col_partition_key(x UInt32) ENGINE MergeTree ORDER BY x PARTITION BY intDiv(x, 10)" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS single_col_partition_key" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE single_col_partition_key(x UInt32) ENGINE MergeTree ORDER BY x PARTITION BY intDiv(x, 10)" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.single_col_partition_key VALUES (1), (2), (3), (4), (11), (12), (20)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO single_col_partition_key VALUES (1), (2), (3), (4), (11), (12), (20)" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.single_col_partition_key WHERE x < 3 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.single_col_partition_key WHERE x >= 11 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.single_col_partition_key WHERE x = 20 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM single_col_partition_key WHERE x < 3 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM single_col_partition_key WHERE x >= 11 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM single_col_partition_key WHERE x = 20 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.single_col_partition_key" +${CLICKHOUSE_CLIENT} --query="DROP TABLE single_col_partition_key" ${CLICKHOUSE_CLIENT} --query="SELECT '*** Composite partition key ***'" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.composite_partition_key" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.composite_partition_key(a UInt32, b UInt32, c UInt32) ENGINE MergeTree ORDER BY c PARTITION BY (intDiv(a, 100), intDiv(b, 10), c)" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS composite_partition_key" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE composite_partition_key(a UInt32, b UInt32, c UInt32) ENGINE MergeTree ORDER BY c PARTITION BY (intDiv(a, 100), intDiv(b, 10), c)" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.composite_partition_key VALUES \ +${CLICKHOUSE_CLIENT} --query="INSERT INTO composite_partition_key VALUES \ (1, 1, 1), (2, 2, 1), (3, 3, 1)" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.composite_partition_key VALUES \ +${CLICKHOUSE_CLIENT} --query="INSERT INTO composite_partition_key VALUES \ (100, 10, 2), (101, 11, 2), (102, 12, 2)" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.composite_partition_key VALUES \ +${CLICKHOUSE_CLIENT} --query="INSERT INTO composite_partition_key VALUES \ (200, 10, 2), (201, 11, 2), (202, 12, 2)" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.composite_partition_key VALUES \ +${CLICKHOUSE_CLIENT} --query="INSERT INTO composite_partition_key VALUES \ (301, 20, 3), (302, 21, 3), (303, 22, 3)" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.composite_partition_key WHERE a > 400 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.composite_partition_key WHERE b = 11 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.composite_partition_key WHERE c = 4 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM composite_partition_key WHERE a > 400 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM composite_partition_key WHERE b = 11 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM composite_partition_key WHERE c = 4 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.composite_partition_key WHERE a < 200 AND c = 2 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.composite_partition_key WHERE a = 301 AND b < 20 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.composite_partition_key WHERE b >= 12 AND c = 2 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM composite_partition_key WHERE a < 200 AND c = 2 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM composite_partition_key WHERE a = 301 AND b < 20 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM composite_partition_key WHERE b >= 12 AND c = 2 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.composite_partition_key WHERE a = 301 AND b = 21 AND c = 3 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM composite_partition_key WHERE a = 301 AND b = 21 AND c = 3 FORMAT XML" | grep -F rows_read | sed 's/^[ \t]*//g' -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.composite_partition_key" +${CLICKHOUSE_CLIENT} --query="DROP TABLE composite_partition_key" diff --git a/dbms/tests/queries/0_stateless/00639_startsWith.sql b/dbms/tests/queries/0_stateless/00639_startsWith.sql index 422332a3eb4..ae7649b8b8b 100644 --- a/dbms/tests/queries/0_stateless/00639_startsWith.sql +++ b/dbms/tests/queries/0_stateless/00639_startsWith.sql @@ -1,5 +1,3 @@ -USE test; - SELECT startsWith(s, 'He') FROM (SELECT arrayJoin(['', 'H', 'He', 'Hellow', '3434', 'fffffffffdHe']) AS s); SELECT startsWith(s, '') FROM (SELECT arrayJoin(['', 'h', 'hi']) AS s); SELECT startsWith('123', '123'); diff --git a/dbms/tests/queries/0_stateless/00640_endsWith.sql b/dbms/tests/queries/0_stateless/00640_endsWith.sql index c42a4618739..cd2e6a08e5c 100644 --- a/dbms/tests/queries/0_stateless/00640_endsWith.sql +++ b/dbms/tests/queries/0_stateless/00640_endsWith.sql @@ -1,5 +1,3 @@ -USE test; - SELECT endsWith(s, 'ow') FROM (SELECT arrayJoin(['', 'o', 'ow', 'Hellow', '3434', 'owfffffffdHe']) AS s); SELECT endsWith(s, '') FROM (SELECT arrayJoin(['', 'h', 'hi']) AS s); SELECT endsWith('123', '3'); diff --git a/dbms/tests/queries/0_stateless/00642_cast.reference b/dbms/tests/queries/0_stateless/00642_cast.reference index 6a845ada2a0..53979bfcf66 100644 --- a/dbms/tests/queries/0_stateless/00642_cast.reference +++ b/dbms/tests/queries/0_stateless/00642_cast.reference @@ -8,6 +8,6 @@ hello hello 1970-01-01 00:00:01 CREATE TABLE test.cast (`x` UInt8, `e` Enum8('hello' = 1, 'world' = 2) DEFAULT CAST(x, 'Enum8(\'hello\' = 1, \'world\' = 2)')) ENGINE = MergeTree ORDER BY e SETTINGS index_granularity = 8192 -x UInt8 -e Enum8(\'hello\' = 1, \'world\' = 2) DEFAULT CAST(x, \'Enum8(\\\'hello\\\' = 1, \\\'world\\\' = 2)\') +x UInt8 +e Enum8(\'hello\' = 1, \'world\' = 2) DEFAULT CAST(x, \'Enum8(\\\'hello\\\' = 1, \\\'world\\\' = 2)\') 1 hello diff --git a/dbms/tests/queries/0_stateless/00642_cast.sql b/dbms/tests/queries/0_stateless/00642_cast.sql index 4f0c1e7f699..26fcec938ed 100644 --- a/dbms/tests/queries/0_stateless/00642_cast.sql +++ b/dbms/tests/queries/0_stateless/00642_cast.sql @@ -17,8 +17,8 @@ SELECT cast(1, 'Enum8(\'hello\' = 1,\n\t\'world\' = 2)'); SELECT toTimeZone(CAST(1 AS TIMESTAMP), 'UTC'); -DROP TABLE IF EXISTS test.cast; -CREATE TABLE test.cast +DROP TABLE IF EXISTS cast; +CREATE TABLE cast ( x UInt8, e Enum8 @@ -39,10 +39,10 @@ CREATE TABLE test.cast ) ) ENGINE = MergeTree ORDER BY e; -SHOW CREATE TABLE test.cast FORMAT TSVRaw; -DESC TABLE test.cast; +SHOW CREATE TABLE cast FORMAT TSVRaw; +DESC TABLE cast; -INSERT INTO test.cast (x) VALUES (1); -SELECT * FROM test.cast; +INSERT INTO cast (x) VALUES (1); +SELECT * FROM cast; -DROP TABLE test.cast; +DROP TABLE cast; diff --git a/dbms/tests/queries/0_stateless/00643_cast_zookeeper.reference b/dbms/tests/queries/0_stateless/00643_cast_zookeeper.reference index 27f2760430c..86a8b164844 100644 --- a/dbms/tests/queries/0_stateless/00643_cast_zookeeper.reference +++ b/dbms/tests/queries/0_stateless/00643_cast_zookeeper.reference @@ -1,5 +1,5 @@ CREATE TABLE test.cast1 (`x` UInt8, `e` Enum8('hello' = 1, 'world' = 2) DEFAULT CAST(x, 'Enum8(\'hello\' = 1, \'world\' = 2)')) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test_cast', 'r1') ORDER BY e SETTINGS index_granularity = 8192 -x UInt8 -e Enum8(\'hello\' = 1, \'world\' = 2) DEFAULT CAST(x, \'Enum8(\\\'hello\\\' = 1, \\\'world\\\' = 2)\') +x UInt8 +e Enum8(\'hello\' = 1, \'world\' = 2) DEFAULT CAST(x, \'Enum8(\\\'hello\\\' = 1, \\\'world\\\' = 2)\') 1 hello 1 hello diff --git a/dbms/tests/queries/0_stateless/00643_cast_zookeeper.sql b/dbms/tests/queries/0_stateless/00643_cast_zookeeper.sql index 8ebfee12da5..cb4507c713f 100644 --- a/dbms/tests/queries/0_stateless/00643_cast_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00643_cast_zookeeper.sql @@ -1,7 +1,7 @@ -DROP TABLE IF EXISTS test.cast1; -DROP TABLE IF EXISTS test.cast2; +DROP TABLE IF EXISTS cast1; +DROP TABLE IF EXISTS cast2; -CREATE TABLE test.cast1 +CREATE TABLE cast1 ( x UInt8, e Enum8 @@ -22,17 +22,17 @@ CREATE TABLE test.cast1 ) ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test_cast', 'r1') ORDER BY e; -SHOW CREATE TABLE test.cast1 FORMAT TSVRaw; -DESC TABLE test.cast1; +SHOW CREATE TABLE cast1 FORMAT TSVRaw; +DESC TABLE cast1; -INSERT INTO test.cast1 (x) VALUES (1); -SELECT * FROM test.cast1; +INSERT INTO cast1 (x) VALUES (1); +SELECT * FROM cast1; -CREATE TABLE test.cast2 AS test.cast1 ENGINE = ReplicatedMergeTree('/clickhouse/tables/test_cast', 'r2') ORDER BY e; +CREATE TABLE cast2 AS cast1 ENGINE = ReplicatedMergeTree('/clickhouse/tables/test_cast', 'r2') ORDER BY e; -SYSTEM SYNC REPLICA test.cast2; +SYSTEM SYNC REPLICA cast2; -SELECT * FROM test.cast2; +SELECT * FROM cast2; -DROP TABLE test.cast1; -DROP TABLE test.cast2; +DROP TABLE cast1; +DROP TABLE cast2; diff --git a/dbms/tests/queries/0_stateless/00646_weird_mmx.sql b/dbms/tests/queries/0_stateless/00646_weird_mmx.sql index f4af386c5d8..27016d3d627 100644 --- a/dbms/tests/queries/0_stateless/00646_weird_mmx.sql +++ b/dbms/tests/queries/0_stateless/00646_weird_mmx.sql @@ -1,9 +1,9 @@ -DROP TABLE IF EXISTS test.weird_mmx; +DROP TABLE IF EXISTS weird_mmx; -CREATE TABLE test.weird_mmx (x Array(UInt64)) ENGINE = TinyLog; +CREATE TABLE weird_mmx (x Array(UInt64)) ENGINE = TinyLog; -- this triggers overlapping matches in LZ4 decompression routine; 915 is the minimum number -- see comment in LZ4_decompression_faster.cpp about usage of MMX registers -INSERT INTO test.weird_mmx SELECT range(number % 10) FROM system.numbers LIMIT 915; -SELECT sum(length(*)) FROM test.weird_mmx; +INSERT INTO weird_mmx SELECT range(number % 10) FROM system.numbers LIMIT 915; +SELECT sum(length(*)) FROM weird_mmx; -DROP TABLE test.weird_mmx; +DROP TABLE weird_mmx; diff --git a/dbms/tests/queries/0_stateless/00647_multiply_aggregation_state.sql b/dbms/tests/queries/0_stateless/00647_multiply_aggregation_state.sql index f2cf8a06334..ebf0c22d9d0 100644 --- a/dbms/tests/queries/0_stateless/00647_multiply_aggregation_state.sql +++ b/dbms/tests/queries/0_stateless/00647_multiply_aggregation_state.sql @@ -7,20 +7,20 @@ SELECT countMerge(x) AS y FROM ( SELECT 2 * countState() AS x FROM ( SELECT 1 )) SELECT countMerge(x) AS y FROM ( SELECT 0 * countState() AS x FROM ( SELECT 1 UNION ALL SELECT 2)); SELECT sumMerge(y) AS z FROM ( SELECT 3 * sumState(x) * 2 AS y FROM ( SELECT 1 AS x UNION ALL SELECT 2 AS x)); -DROP TABLE IF EXISTS test.mult_aggregation; -CREATE TABLE test.mult_aggregation(a UInt32, b UInt32) ENGINE = Memory; -INSERT INTO test.mult_aggregation VALUES(1, 1); -INSERT INTO test.mult_aggregation VALUES(1, 3); +DROP TABLE IF EXISTS mult_aggregation; +CREATE TABLE mult_aggregation(a UInt32, b UInt32) ENGINE = Memory; +INSERT INTO mult_aggregation VALUES(1, 1); +INSERT INTO mult_aggregation VALUES(1, 3); -SELECT sumMerge(x * 5), sumMerge(x) FROM (SELECT sumState(b) AS x FROM test.mult_aggregation); -SELECT uniqMerge(x * 10) FROM (SELECT uniqState(b) AS x FROM test.mult_aggregation); -SELECT maxMerge(x * 10) FROM (SELECT maxState(b) AS x FROM test.mult_aggregation); -SELECT avgMerge(x * 10) FROM (SELECT avgState(b) AS x FROM test.mult_aggregation); +SELECT sumMerge(x * 5), sumMerge(x) FROM (SELECT sumState(b) AS x FROM mult_aggregation); +SELECT uniqMerge(x * 10) FROM (SELECT uniqState(b) AS x FROM mult_aggregation); +SELECT maxMerge(x * 10) FROM (SELECT maxState(b) AS x FROM mult_aggregation); +SELECT avgMerge(x * 10) FROM (SELECT avgState(b) AS x FROM mult_aggregation); SELECT groupArrayMerge(y * 5) FROM (SELECT groupArrayState(x) AS y FROM (SELECT 1 AS x)); SELECT groupArrayMerge(2)(y * 5) FROM (SELECT groupArrayState(2)(x) AS y FROM (SELECT 1 AS x)); SELECT groupUniqArrayMerge(y * 5) FROM (SELECT groupUniqArrayState(x) AS y FROM (SELECT 1 AS x)); -SELECT sumMerge(y * a) FROM (SELECT a, sumState(b) AS y FROM test.mult_aggregation GROUP BY a); -- { serverError 44} +SELECT sumMerge(y * a) FROM (SELECT a, sumState(b) AS y FROM mult_aggregation GROUP BY a); -- { serverError 44} -DROP TABLE IF EXISTS test.mult_aggregation; +DROP TABLE IF EXISTS mult_aggregation; diff --git a/dbms/tests/queries/0_stateless/00648_replacing_empty_set_from_prewhere.sql b/dbms/tests/queries/0_stateless/00648_replacing_empty_set_from_prewhere.sql index aba76207d1d..1f873c94b18 100644 --- a/dbms/tests/queries/0_stateless/00648_replacing_empty_set_from_prewhere.sql +++ b/dbms/tests/queries/0_stateless/00648_replacing_empty_set_from_prewhere.sql @@ -1,5 +1,5 @@ -DROP TABLE IF EXISTS test.final_test; -CREATE TABLE test.final_test (id String, version Date) ENGINE = ReplacingMergeTree(version, id, 8192); -INSERT INTO test.final_test (id, version) VALUES ('2018-01-01', '2018-01-01'); -SELECT * FROM test.final_test FINAL PREWHERE id == '2018-01-02'; -DROP TABLE test.final_test; +DROP TABLE IF EXISTS final_test; +CREATE TABLE final_test (id String, version Date) ENGINE = ReplacingMergeTree(version, id, 8192); +INSERT INTO final_test (id, version) VALUES ('2018-01-01', '2018-01-01'); +SELECT * FROM final_test FINAL PREWHERE id == '2018-01-02'; +DROP TABLE final_test; diff --git a/dbms/tests/queries/0_stateless/00650_array_enumerate_uniq_with_tuples.sql b/dbms/tests/queries/0_stateless/00650_array_enumerate_uniq_with_tuples.sql index 43cf154d25c..0948bdc8e51 100644 --- a/dbms/tests/queries/0_stateless/00650_array_enumerate_uniq_with_tuples.sql +++ b/dbms/tests/queries/0_stateless/00650_array_enumerate_uniq_with_tuples.sql @@ -1,20 +1,21 @@ -drop table if exists test.tab; -create table test.tab (val UInt32, n Nested(x UInt8, y String)) engine = Memory; -insert into test.tab values (1, [1, 2, 1, 1, 2, 1], ['a', 'a', 'b', 'a', 'b', 'b']); -select arrayEnumerateUniq(n.x) from test.tab; -select arrayEnumerateUniq(n.y) from test.tab; -select arrayEnumerateUniq(n.x, n.y) from test.tab; -select arrayEnumerateUniq(arrayMap((a, b) -> (a, b), n.x, n.y)) from test.tab; -select arrayEnumerateUniq(arrayMap((a, b) -> (a, b), n.x, n.y), n.x) from test.tab; -select arrayEnumerateUniq(arrayMap((a, b) -> (a, b), n.x, n.y), arrayMap((a, b) -> (b, a), n.x, n.y)) from test.tab; +drop table if exists tab; +create table tab (val UInt32, n Nested(x UInt8, y String)) engine = Memory; +insert into tab values (1, [1, 2, 1, 1, 2, 1], ['a', 'a', 'b', 'a', 'b', 'b']); +select arrayEnumerateUniq(n.x) from tab; +select arrayEnumerateUniq(n.y) from tab; +select arrayEnumerateUniq(n.x, n.y) from tab; +select arrayEnumerateUniq(arrayMap((a, b) -> (a, b), n.x, n.y)) from tab; +select arrayEnumerateUniq(arrayMap((a, b) -> (a, b), n.x, n.y), n.x) from tab; +select arrayEnumerateUniq(arrayMap((a, b) -> (a, b), n.x, n.y), arrayMap((a, b) -> (b, a), n.x, n.y)) from tab; -drop table test.tab; -create table test.tab (val UInt32, n Nested(x Nullable(UInt8), y String)) engine = Memory; -insert into test.tab values (1, [1, Null, 2, 1, 1, 2, 1, Null, Null], ['a', 'a', 'a', 'b', 'a', 'b', 'b', 'b', 'a']); -select arrayEnumerateUniq(n.x) from test.tab; -select arrayEnumerateUniq(n.y) from test.tab; -select arrayEnumerateUniq(n.x, n.y) from test.tab; -select arrayEnumerateUniq(arrayMap((a, b) -> (a, b), n.x, n.y)) from test.tab; -select arrayEnumerateUniq(arrayMap((a, b) -> (a, b), n.x, n.y), n.x) from test.tab; -select arrayEnumerateUniq(arrayMap((a, b) -> (a, b), n.x, n.y), arrayMap((a, b) -> (b, a), n.x, n.y)) from test.tab; +drop table tab; +create table tab (val UInt32, n Nested(x Nullable(UInt8), y String)) engine = Memory; +insert into tab values (1, [1, Null, 2, 1, 1, 2, 1, Null, Null], ['a', 'a', 'a', 'b', 'a', 'b', 'b', 'b', 'a']); +select arrayEnumerateUniq(n.x) from tab; +select arrayEnumerateUniq(n.y) from tab; +select arrayEnumerateUniq(n.x, n.y) from tab; +select arrayEnumerateUniq(arrayMap((a, b) -> (a, b), n.x, n.y)) from tab; +select arrayEnumerateUniq(arrayMap((a, b) -> (a, b), n.x, n.y), n.x) from tab; +select arrayEnumerateUniq(arrayMap((a, b) -> (a, b), n.x, n.y), arrayMap((a, b) -> (b, a), n.x, n.y)) from tab; +drop table tab; diff --git a/dbms/tests/queries/0_stateless/00650_csv_with_specified_quote_rule.sh b/dbms/tests/queries/0_stateless/00650_csv_with_specified_quote_rule.sh index 5066f3466d8..bda721426c7 100755 --- a/dbms/tests/queries/0_stateless/00650_csv_with_specified_quote_rule.sh +++ b/dbms/tests/queries/0_stateless/00650_csv_with_specified_quote_rule.sh @@ -3,42 +3,42 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.csv"; +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS csv"; -$CLICKHOUSE_CLIENT --query="CREATE TABLE test.csv (s String, n UInt64, d Date) ENGINE = Memory"; +$CLICKHOUSE_CLIENT --query="CREATE TABLE csv (s String, n UInt64, d Date) ENGINE = Memory"; echo "'single quote' not end, 123, 2016-01-01 -'em good, 456, 2016-01-02" | $CLICKHOUSE_CLIENT --format_csv_allow_single_quotes=0 --query="INSERT INTO test.csv FORMAT CSV"; +'em good, 456, 2016-01-02" | $CLICKHOUSE_CLIENT --format_csv_allow_single_quotes=0 --query="INSERT INTO csv FORMAT CSV"; -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.csv ORDER BY d"; +$CLICKHOUSE_CLIENT --query="SELECT * FROM csv ORDER BY d"; -$CLICKHOUSE_CLIENT --query="DROP TABLE test.csv"; +$CLICKHOUSE_CLIENT --query="DROP TABLE csv"; -$CLICKHOUSE_CLIENT --query="CREATE TABLE test.csv (s String, n UInt64, d Date) ENGINE = Memory"; +$CLICKHOUSE_CLIENT --query="CREATE TABLE csv (s String, n UInt64, d Date) ENGINE = Memory"; echo "'single quote' not end, 123, 2016-01-01 -'em good, 456, 2016-01-02" | $CLICKHOUSE_CLIENT --multiquery --query="SET format_csv_allow_single_quotes=0; INSERT INTO test.csv FORMAT CSV"; +'em good, 456, 2016-01-02" | $CLICKHOUSE_CLIENT --multiquery --query="SET format_csv_allow_single_quotes=0; INSERT INTO csv FORMAT CSV"; -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.csv ORDER BY d"; +$CLICKHOUSE_CLIENT --query="SELECT * FROM csv ORDER BY d"; -$CLICKHOUSE_CLIENT --query="DROP TABLE test.csv"; +$CLICKHOUSE_CLIENT --query="DROP TABLE csv"; -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.csv"; +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS csv"; -$CLICKHOUSE_CLIENT --query="CREATE TABLE test.csv (s String, n UInt64, d Date) ENGINE = Memory"; +$CLICKHOUSE_CLIENT --query="CREATE TABLE csv (s String, n UInt64, d Date) ENGINE = Memory"; echo '"double quote" not end, 123, 2016-01-01 -"em good, 456, 2016-01-02' | $CLICKHOUSE_CLIENT --format_csv_allow_double_quotes=0 --query="INSERT INTO test.csv FORMAT CSV"; +"em good, 456, 2016-01-02' | $CLICKHOUSE_CLIENT --format_csv_allow_double_quotes=0 --query="INSERT INTO csv FORMAT CSV"; -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.csv ORDER BY d"; +$CLICKHOUSE_CLIENT --query="SELECT * FROM csv ORDER BY d"; -$CLICKHOUSE_CLIENT --query="DROP TABLE test.csv"; +$CLICKHOUSE_CLIENT --query="DROP TABLE csv"; -$CLICKHOUSE_CLIENT --query="CREATE TABLE test.csv (s String, n UInt64, d Date) ENGINE = Memory"; +$CLICKHOUSE_CLIENT --query="CREATE TABLE csv (s String, n UInt64, d Date) ENGINE = Memory"; echo '"double quote" not end, 123, 2016-01-01 -"em good, 456, 2016-01-02' | $CLICKHOUSE_CLIENT --multiquery --query="SET format_csv_allow_double_quotes=0; INSERT INTO test.csv FORMAT CSV"; +"em good, 456, 2016-01-02' | $CLICKHOUSE_CLIENT --multiquery --query="SET format_csv_allow_double_quotes=0; INSERT INTO csv FORMAT CSV"; -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.csv ORDER BY d"; +$CLICKHOUSE_CLIENT --query="SELECT * FROM csv ORDER BY d"; -$CLICKHOUSE_CLIENT --query="DROP TABLE test.csv"; +$CLICKHOUSE_CLIENT --query="DROP TABLE csv"; diff --git a/dbms/tests/queries/0_stateless/00651_default_database_on_client_reconnect.reference b/dbms/tests/queries/0_stateless/00651_default_database_on_client_reconnect.reference index 4a5f18ade7d..35cd134ada2 100644 --- a/dbms/tests/queries/0_stateless/00651_default_database_on_client_reconnect.reference +++ b/dbms/tests/queries/0_stateless/00651_default_database_on_client_reconnect.reference @@ -1 +1 @@ -val UInt64 +val UInt64 diff --git a/dbms/tests/queries/0_stateless/00651_default_database_on_client_reconnect.sh b/dbms/tests/queries/0_stateless/00651_default_database_on_client_reconnect.sh index 8fad8b96100..e0a7c8e01ef 100755 --- a/dbms/tests/queries/0_stateless/00651_default_database_on_client_reconnect.sh +++ b/dbms/tests/queries/0_stateless/00651_default_database_on_client_reconnect.sh @@ -3,4 +3,4 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -${CLICKHOUSE_CLIENT} --ignore-error --multiquery --query "USE test; DROP TABLE IF EXISTS tab; CREATE TABLE tab (val UInt64) engine = Memory; SHOW CREATE TABLE tab format abcd; DESC tab; DROP TABLE tab;" ||: 2> /dev/null +${CLICKHOUSE_CLIENT} --ignore-error --multiquery --query "DROP TABLE IF EXISTS tab; CREATE TABLE tab (val UInt64) engine = Memory; SHOW CREATE TABLE tab format abcd; DESC tab; DROP TABLE tab;" ||: 2> /dev/null diff --git a/dbms/tests/queries/0_stateless/00652_mergetree_mutations.sh b/dbms/tests/queries/0_stateless/00652_mergetree_mutations.sh index a11377fac81..ca439775696 100755 --- a/dbms/tests/queries/0_stateless/00652_mergetree_mutations.sh +++ b/dbms/tests/queries/0_stateless/00652_mergetree_mutations.sh @@ -5,70 +5,70 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/mergetree_mutations.lib -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.mutations" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS mutations" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.mutations(d Date, x UInt32, s String, a UInt32 ALIAS x + 1, m MATERIALIZED x + 2) ENGINE MergeTree(d, intDiv(x, 10), 8192)" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE mutations(d Date, x UInt32, s String, a UInt32 ALIAS x + 1, m MATERIALIZED x + 2) ENGINE MergeTree(d, intDiv(x, 10), 8192)" # Test a mutation on empty table -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations DELETE WHERE x = 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations DELETE WHERE x = 1" # Insert some data -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.mutations(d, x, s) VALUES \ +${CLICKHOUSE_CLIENT} --query="INSERT INTO mutations(d, x, s) VALUES \ ('2000-01-01', 1, 'a')" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.mutations(d, x, s) VALUES \ +${CLICKHOUSE_CLIENT} --query="INSERT INTO mutations(d, x, s) VALUES \ ('2000-01-01', 2, 'b'), ('2000-01-01', 3, 'c'), ('2000-01-01', 4, 'd') \ ('2000-02-01', 2, 'b'), ('2000-02-01', 3, 'c'), ('2000-02-01', 4, 'd')" # Try some malformed queries that should fail validation. -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations DELETE WHERE nonexistent = 0" 2>/dev/null || echo "Query should fail 1" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations DELETE WHERE d = '11'" 2>/dev/null || echo "Query should fail 2" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations DELETE WHERE nonexistent = 0" 2>/dev/null || echo "Query should fail 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations DELETE WHERE d = '11'" 2>/dev/null || echo "Query should fail 2" # TODO: Queries involving alias columns are not supported yet and should fail on submission. -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations UPDATE s = s || '' WHERE a = 0" 2>/dev/null || echo "Query involving aliases should fail on submission" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations UPDATE s = s || '' WHERE a = 0" 2>/dev/null || echo "Query involving aliases should fail on submission" # Delete some values -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations DELETE WHERE x % 2 = 1" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations DELETE WHERE s = 'd'" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations DELETE WHERE m = 3" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations DELETE WHERE x % 2 = 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations DELETE WHERE s = 'd'" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations DELETE WHERE m = 3" # Insert more data -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.mutations(d, x, s) VALUES \ +${CLICKHOUSE_CLIENT} --query="INSERT INTO mutations(d, x, s) VALUES \ ('2000-01-01', 5, 'e'), ('2000-02-01', 5, 'e')" # Wait until the last mutation is done. wait_for_mutation "mutations" "mutation_7.txt" # Check that the table contains only the data that should not be deleted. -${CLICKHOUSE_CLIENT} --query="SELECT d, x, s, m FROM test.mutations ORDER BY d, x" +${CLICKHOUSE_CLIENT} --query="SELECT d, x, s, m FROM mutations ORDER BY d, x" # Check the contents of the system.mutations table. ${CLICKHOUSE_CLIENT} --query="SELECT mutation_id, command, block_numbers.partition_id, block_numbers.number, parts_to_do, is_done \ FROM system.mutations WHERE table = 'mutations' ORDER BY mutation_id" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.mutations" +${CLICKHOUSE_CLIENT} --query="DROP TABLE mutations" ${CLICKHOUSE_CLIENT} --query="SELECT '*** Test mutations cleaner ***'" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.mutations_cleaner" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS mutations_cleaner" # Create a table with finished_mutations_to_keep = 2 -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.mutations_cleaner(x UInt32) ENGINE MergeTree ORDER BY x SETTINGS finished_mutations_to_keep = 2" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE mutations_cleaner(x UInt32) ENGINE MergeTree ORDER BY x SETTINGS finished_mutations_to_keep = 2" # Insert some data -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.mutations_cleaner(x) VALUES (1), (2), (3), (4)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO mutations_cleaner(x) VALUES (1), (2), (3), (4)" # Add some mutations and wait for their execution -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations_cleaner DELETE WHERE x = 1" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations_cleaner DELETE WHERE x = 2" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations_cleaner DELETE WHERE x = 3" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations_cleaner DELETE WHERE x = 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations_cleaner DELETE WHERE x = 2" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations_cleaner DELETE WHERE x = 3" wait_for_mutation "mutations_cleaner" "mutation_4.txt" # Sleep and then do an INSERT to wakeup the background task that will clean up the old mutations sleep 1 -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.mutations_cleaner(x) VALUES (4)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO mutations_cleaner(x) VALUES (4)" sleep 0.1 # Check that the first mutation is cleaned ${CLICKHOUSE_CLIENT} --query="SELECT mutation_id, command, is_done FROM system.mutations WHERE table = 'mutations_cleaner' ORDER BY mutation_id" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.mutations_cleaner" +${CLICKHOUSE_CLIENT} --query="DROP TABLE mutations_cleaner" diff --git a/dbms/tests/queries/0_stateless/00652_mutations_alter_update.sh b/dbms/tests/queries/0_stateless/00652_mutations_alter_update.sh index 01a17481590..8dcc5f5c682 100755 --- a/dbms/tests/queries/0_stateless/00652_mutations_alter_update.sh +++ b/dbms/tests/queries/0_stateless/00652_mutations_alter_update.sh @@ -5,93 +5,93 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/mergetree_mutations.lib -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.alter_update" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS alter_update" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.alter_update \ +${CLICKHOUSE_CLIENT} --query="CREATE TABLE alter_update \ (d Date, key UInt32, value1 String, value2 UInt64, materialized_value String MATERIALIZED concat('materialized_', toString(value2 + 7))) \ ENGINE MergeTree ORDER BY key PARTITION BY toYYYYMM(d)" ${CLICKHOUSE_CLIENT} --query="SELECT '*** Test expected failures ***'" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update UPDATE d = today() WHERE 1" 2>/dev/null || echo "Updating partition key should fail" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update UPDATE key = 1 WHERE 1" 2>/dev/null || echo "Updating primary key should fail" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update UPDATE materialized_value = 'aaa' WHERE 1" 2>/dev/null || echo "Updating MATERIALIZED column should fail" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update UPDATE value1 = 'aaa' WHERE 'string'" 2>/dev/null || echo "Updating with non-UInt8 predicate should fail" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE alter_update UPDATE d = today() WHERE 1" 2>/dev/null || echo "Updating partition key should fail" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE alter_update UPDATE key = 1 WHERE 1" 2>/dev/null || echo "Updating primary key should fail" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE alter_update UPDATE materialized_value = 'aaa' WHERE 1" 2>/dev/null || echo "Updating MATERIALIZED column should fail" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE alter_update UPDATE value1 = 'aaa' WHERE 'string'" 2>/dev/null || echo "Updating with non-UInt8 predicate should fail" ${CLICKHOUSE_CLIENT} --query="SELECT '*** Test updating according to a predicate ***'" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.alter_update VALUES \ +${CLICKHOUSE_CLIENT} --query="INSERT INTO alter_update VALUES \ ('2000-01-01', 123, 'abc', 1), \ ('2000-01-01', 234, 'cde', 2)" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update UPDATE value1 = 'aaa', value2 = value2 + 100 WHERE key < 200" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE alter_update UPDATE value1 = 'aaa', value2 = value2 + 100 WHERE key < 200" wait_for_mutation "alter_update" "mutation_2.txt" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.alter_update ORDER BY key" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM alter_update ORDER BY key" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update DROP PARTITION 200001" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE alter_update DROP PARTITION 200001" ${CLICKHOUSE_CLIENT} --query="SELECT '*** Test several UPDATE commands with common subexpressions ***'" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.alter_update VALUES ('2000-01-01', 123, 'abc', 49)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO alter_update VALUES ('2000-01-01', 123, 'abc', 49)" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update \ +${CLICKHOUSE_CLIENT} --query="ALTER TABLE alter_update \ UPDATE value2 = (value2 + 1) / 2 WHERE 1, \ UPDATE value2 = value2 + 1 WHERE 1" wait_for_mutation "alter_update" "mutation_4.txt" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.alter_update ORDER BY key" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM alter_update ORDER BY key" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update DROP PARTITION 200001" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE alter_update DROP PARTITION 200001" ${CLICKHOUSE_CLIENT} --query="SELECT '*** Test predicates with IN operator ***'" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.alter_update VALUES \ +${CLICKHOUSE_CLIENT} --query="INSERT INTO alter_update VALUES \ ('2000-01-01', 123, 'abc', 10), \ ('2000-01-01', 234, 'cde', 20), \ ('2000-01-01', 345, 'fgh', 30), \ ('2000-01-01', 456, 'ijk', 40)" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update \ +${CLICKHOUSE_CLIENT} --query="ALTER TABLE alter_update \ DELETE WHERE key IN (SELECT toUInt32(arrayJoin([121, 122, 123]))), \ UPDATE value1 = concat(value1, 'ccc') WHERE value2 IN (20, 30), \ UPDATE value1 = 'iii' WHERE value2 IN (SELECT toUInt64(40))" wait_for_mutation "alter_update" "mutation_6.txt" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.alter_update ORDER BY key" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM alter_update ORDER BY key" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update DROP PARTITION 200001" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE alter_update DROP PARTITION 200001" ${CLICKHOUSE_CLIENT} --query="SELECT '*** Test UPDATE of columns that DELETE depends on ***'" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.alter_update VALUES \ +${CLICKHOUSE_CLIENT} --query="INSERT INTO alter_update VALUES \ ('2000-01-01', 123, 'abc', 10), \ ('2000-01-01', 234, 'cde', 20)" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update \ +${CLICKHOUSE_CLIENT} --query="ALTER TABLE alter_update \ UPDATE value2 = value2 + 10 WHERE 1, \ DELETE WHERE value2 = 20" wait_for_mutation "alter_update" "mutation_8.txt" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.alter_update ORDER BY key" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM alter_update ORDER BY key" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update DROP PARTITION 200001" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE alter_update DROP PARTITION 200001" ${CLICKHOUSE_CLIENT} --query="SELECT '*** Test complex mixture of UPDATEs and DELETEs ***'" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.alter_update VALUES \ +${CLICKHOUSE_CLIENT} --query="INSERT INTO alter_update VALUES \ ('2000-01-01', 123, 'abc', 10), \ ('2000-01-01', 234, 'cde', 20), \ ('2000-01-01', 345, 'fgh', 30), \ ('2000-01-01', 456, 'ijk', 40)" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update \ +${CLICKHOUSE_CLIENT} --query="ALTER TABLE alter_update \ DELETE WHERE value2 IN (8, 9, 10), \ UPDATE value2 = value2 + 10 WHERE value2 <= 10, \ DELETE WHERE length(value1) + value2 = 23, \ @@ -99,36 +99,36 @@ ${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update \ UPDATE value1 = concat(value1, '_', materialized_value) WHERE key = 456" wait_for_mutation "alter_update" "mutation_10.txt" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.alter_update ORDER BY key" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM alter_update ORDER BY key" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update DROP PARTITION 200001" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE alter_update DROP PARTITION 200001" ${CLICKHOUSE_CLIENT} --query="SELECT '*** Test updating columns that MATERIALIZED columns depend on ***'" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.materialized_key" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS materialized_key" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.materialized_key \ +${CLICKHOUSE_CLIENT} --query="CREATE TABLE materialized_key \ (key UInt32 MATERIALIZED value + 1, value UInt32) \ ENGINE MergeTree ORDER BY key" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.materialized_key UPDATE value = 1 WHERE 1" 2>/dev/null || echo "Updating column that MATERIALIZED key column depends on should fail" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE materialized_key UPDATE value = 1 WHERE 1" 2>/dev/null || echo "Updating column that MATERIALIZED key column depends on should fail" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.materialized_key" +${CLICKHOUSE_CLIENT} --query="DROP TABLE materialized_key" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.alter_update VALUES \ +${CLICKHOUSE_CLIENT} --query="INSERT INTO alter_update VALUES \ ('2000-01-01', 123, 'abc', 10), \ ('2000-01-01', 234, 'cde', 20), \ ('2000-01-01', 345, 'fgh', 30), \ ('2000-01-01', 456, 'ijk', 40)" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update \ +${CLICKHOUSE_CLIENT} --query="ALTER TABLE alter_update \ UPDATE value2 = value2 + 7 WHERE value2 <= 20" wait_for_mutation "alter_update" "mutation_12.txt" -${CLICKHOUSE_CLIENT} --query="SELECT value2, materialized_value FROM test.alter_update ORDER BY key" +${CLICKHOUSE_CLIENT} --query="SELECT value2, materialized_value FROM alter_update ORDER BY key" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.alter_update DROP PARTITION 200001" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE alter_update DROP PARTITION 200001" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.alter_update" +${CLICKHOUSE_CLIENT} --query="DROP TABLE alter_update" diff --git a/dbms/tests/queries/0_stateless/00652_mutations_default_database.sh b/dbms/tests/queries/0_stateless/00652_mutations_default_database.sh index bb142201e7c..5a83346f38b 100755 --- a/dbms/tests/queries/0_stateless/00652_mutations_default_database.sh +++ b/dbms/tests/queries/0_stateless/00652_mutations_default_database.sh @@ -6,10 +6,8 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/mergetree_mutations.lib ${CLICKHOUSE_CLIENT} --multiquery << EOF -DROP TABLE IF EXISTS test.mutations; -DROP TABLE IF EXISTS test.for_subquery; - -USE test; +DROP TABLE IF EXISTS mutations; +DROP TABLE IF EXISTS for_subquery; CREATE TABLE mutations(x UInt32, y UInt32) ENGINE MergeTree ORDER BY x; INSERT INTO mutations VALUES (123, 1), (234, 2), (345, 3); @@ -23,7 +21,7 @@ EOF wait_for_mutation "mutations" "mutation_3.txt" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.mutations" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM mutations" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.mutations" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.for_subquery" +${CLICKHOUSE_CLIENT} --query="DROP TABLE mutations" +${CLICKHOUSE_CLIENT} --query="DROP TABLE for_subquery" diff --git a/dbms/tests/queries/0_stateless/00652_replicated_mutations_default_database_zookeeper.sh b/dbms/tests/queries/0_stateless/00652_replicated_mutations_default_database_zookeeper.sh index 6d425e35d33..bd8cdfd889e 100755 --- a/dbms/tests/queries/0_stateless/00652_replicated_mutations_default_database_zookeeper.sh +++ b/dbms/tests/queries/0_stateless/00652_replicated_mutations_default_database_zookeeper.sh @@ -6,12 +6,10 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/mergetree_mutations.lib ${CLICKHOUSE_CLIENT} --multiquery << EOF -DROP TABLE IF EXISTS test.mutations_r1; -DROP TABLE IF EXISTS test.for_subquery; +DROP TABLE IF EXISTS mutations_r1; +DROP TABLE IF EXISTS for_subquery; -USE test; - -CREATE TABLE mutations_r1(x UInt32, y UInt32) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/mutations', 'r1') ORDER BY x; +CREATE TABLE mutations_r1(x UInt32, y UInt32) ENGINE ReplicatedMergeTree('/clickhouse/tables/${CLICKHOUSE_DATABASE}/mutations', 'r1') ORDER BY x; INSERT INTO mutations_r1 VALUES (123, 1), (234, 2), (345, 3); CREATE TABLE for_subquery(x UInt32) ENGINE TinyLog; @@ -23,7 +21,7 @@ EOF wait_for_mutation "mutations_r1" "0000000001" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.mutations_r1" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM mutations_r1" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.mutations_r1" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.for_subquery" +${CLICKHOUSE_CLIENT} --query="DROP TABLE mutations_r1" +${CLICKHOUSE_CLIENT} --query="DROP TABLE for_subquery" diff --git a/dbms/tests/queries/0_stateless/00652_replicated_mutations_zookeeper.sh b/dbms/tests/queries/0_stateless/00652_replicated_mutations_zookeeper.sh index 96f2263afad..e4b82cb80fa 100755 --- a/dbms/tests/queries/0_stateless/00652_replicated_mutations_zookeeper.sh +++ b/dbms/tests/queries/0_stateless/00652_replicated_mutations_zookeeper.sh @@ -5,40 +5,40 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/mergetree_mutations.lib -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.mutations_r1" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.mutations_r2" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS mutations_r1" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS mutations_r2" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.mutations_r1(d Date, x UInt32, s String, m MATERIALIZED x + 2) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/mutations', 'r1', d, intDiv(x, 10), 8192)" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.mutations_r2(d Date, x UInt32, s String, m MATERIALIZED x + 2) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/mutations', 'r2', d, intDiv(x, 10), 8192)" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE mutations_r1(d Date, x UInt32, s String, m MATERIALIZED x + 2) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/mutations', 'r1', d, intDiv(x, 10), 8192)" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE mutations_r2(d Date, x UInt32, s String, m MATERIALIZED x + 2) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/mutations', 'r2', d, intDiv(x, 10), 8192)" # Test a mutation on empty table -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations_r1 DELETE WHERE x = 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations_r1 DELETE WHERE x = 1" # Insert some data -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.mutations_r1(d, x, s) VALUES \ +${CLICKHOUSE_CLIENT} --query="INSERT INTO mutations_r1(d, x, s) VALUES \ ('2000-01-01', 1, 'a')" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.mutations_r1(d, x, s) VALUES \ +${CLICKHOUSE_CLIENT} --query="INSERT INTO mutations_r1(d, x, s) VALUES \ ('2000-01-01', 2, 'b'), ('2000-01-01', 3, 'c'), ('2000-01-01', 4, 'd') \ ('2000-02-01', 2, 'b'), ('2000-02-01', 3, 'c'), ('2000-02-01', 4, 'd')" # Try some malformed queries that should fail validation. -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations_r1 DELETE WHERE nonexistent = 0" 2>/dev/null || echo "Query should fail 1" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations_r1 DELETE WHERE d = '11'" 2>/dev/null || echo "Query should fail 2" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations_r1 DELETE WHERE nonexistent = 0" 2>/dev/null || echo "Query should fail 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations_r1 DELETE WHERE d = '11'" 2>/dev/null || echo "Query should fail 2" # Delete some values -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations_r1 DELETE WHERE x % 2 = 1" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations_r1 DELETE WHERE s = 'd'" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations_r1 DELETE WHERE m = 3" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations_r1 DELETE WHERE x % 2 = 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations_r1 DELETE WHERE s = 'd'" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations_r1 DELETE WHERE m = 3" # Insert more data -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.mutations_r1(d, x, s) VALUES \ +${CLICKHOUSE_CLIENT} --query="INSERT INTO mutations_r1(d, x, s) VALUES \ ('2000-01-01', 5, 'e'), ('2000-02-01', 5, 'e')" # Wait until the last mutation is done. wait_for_mutation "mutations_r2" "0000000003" # Check that the table contains only the data that should not be deleted. -${CLICKHOUSE_CLIENT} --query="SELECT d, x, s, m FROM test.mutations_r2 ORDER BY d, x" +${CLICKHOUSE_CLIENT} --query="SELECT d, x, s, m FROM mutations_r2 ORDER BY d, x" # Check the contents of the system.mutations table. ${CLICKHOUSE_CLIENT} --query="SELECT mutation_id, command, block_numbers.partition_id, block_numbers.number, parts_to_do, is_done \ FROM system.mutations WHERE table = 'mutations_r2' ORDER BY mutation_id" @@ -46,32 +46,32 @@ ${CLICKHOUSE_CLIENT} --query="SELECT mutation_id, command, block_numbers.partiti ${CLICKHOUSE_CLIENT} --query="SELECT '*** Test mutations cleaner ***'" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.mutations_cleaner_r1" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.mutations_cleaner_r2" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS mutations_cleaner_r1" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS mutations_cleaner_r2" # Create 2 replicas with finished_mutations_to_keep = 2 -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.mutations_cleaner_r1(x UInt32) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/mutations_cleaner', 'r1') ORDER BY x SETTINGS \ +${CLICKHOUSE_CLIENT} --query="CREATE TABLE mutations_cleaner_r1(x UInt32) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/mutations_cleaner', 'r1') ORDER BY x SETTINGS \ finished_mutations_to_keep = 2, cleanup_delay_period = 1, cleanup_delay_period_random_add = 0" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.mutations_cleaner_r2(x UInt32) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/mutations_cleaner', 'r2') ORDER BY x SETTINGS \ +${CLICKHOUSE_CLIENT} --query="CREATE TABLE mutations_cleaner_r2(x UInt32) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/mutations_cleaner', 'r2') ORDER BY x SETTINGS \ finished_mutations_to_keep = 2, cleanup_delay_period = 1, cleanup_delay_period_random_add = 0" # Insert some data -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.mutations_cleaner_r1(x) VALUES (1), (2), (3), (4)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO mutations_cleaner_r1(x) VALUES (1), (2), (3), (4)" # Add some mutations and wait for their execution -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations_cleaner_r1 DELETE WHERE x = 1" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations_cleaner_r1 DELETE WHERE x = 2" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations_cleaner_r1 DELETE WHERE x = 3" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations_cleaner_r1 DELETE WHERE x = 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations_cleaner_r1 DELETE WHERE x = 2" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations_cleaner_r1 DELETE WHERE x = 3" wait_for_mutation "mutations_cleaner_r2" "0000000002" # Add another mutation and prevent its execution on the second replica -${CLICKHOUSE_CLIENT} --query="SYSTEM STOP REPLICATION QUEUES test.mutations_cleaner_r2" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.mutations_cleaner_r1 DELETE WHERE x = 4" +${CLICKHOUSE_CLIENT} --query="SYSTEM STOP REPLICATION QUEUES mutations_cleaner_r2" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE mutations_cleaner_r1 DELETE WHERE x = 4" # Sleep for more than cleanup_delay_period sleep 1.5 @@ -79,8 +79,8 @@ sleep 1.5 # Check that the first mutation is cleaned ${CLICKHOUSE_CLIENT} --query="SELECT mutation_id, command, is_done FROM system.mutations WHERE table = 'mutations_cleaner_r2' ORDER BY mutation_id" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.mutations_r1" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.mutations_r2" +${CLICKHOUSE_CLIENT} --query="DROP TABLE mutations_r1" +${CLICKHOUSE_CLIENT} --query="DROP TABLE mutations_r2" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.mutations_cleaner_r1" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.mutations_cleaner_r2" +${CLICKHOUSE_CLIENT} --query="DROP TABLE mutations_cleaner_r1" +${CLICKHOUSE_CLIENT} --query="DROP TABLE mutations_cleaner_r2" diff --git a/dbms/tests/queries/0_stateless/00653_monotonic_integer_cast.sql b/dbms/tests/queries/0_stateless/00653_monotonic_integer_cast.sql index 29a44a4aa22..102c7a91e5c 100644 --- a/dbms/tests/queries/0_stateless/00653_monotonic_integer_cast.sql +++ b/dbms/tests/queries/0_stateless/00653_monotonic_integer_cast.sql @@ -1,4 +1,4 @@ -drop table if exists test.table; -create table test.table (val Int32) engine = MergeTree order by val; -insert into test.table values (-2), (0), (2); -select count() from test.table where toUInt64(val) == 0; +drop table if exists `table`; +create table `table` (val Int32) engine = MergeTree order by val; +insert into `table` values (-2), (0), (2); +select count() from `table` where toUInt64(val) == 0; diff --git a/dbms/tests/queries/0_stateless/00653_verification_monotonic_data_load.sh b/dbms/tests/queries/0_stateless/00653_verification_monotonic_data_load.sh index 0479abffe6b..4de52dc36b3 100755 --- a/dbms/tests/queries/0_stateless/00653_verification_monotonic_data_load.sh +++ b/dbms/tests/queries/0_stateless/00653_verification_monotonic_data_load.sh @@ -15,71 +15,71 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) ${CLICKHOUSE_CLIENT} --query="SYSTEM STOP MERGES;" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.string_test_table;" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.fixed_string_test_table;" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.signed_integer_test_table;" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.unsigned_integer_test_table;" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.enum_test_table;" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.date_test_table;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS string_test_table;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS fixed_string_test_table;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS signed_integer_test_table;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS unsigned_integer_test_table;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS enum_test_table;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS date_test_table;" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.string_test_table (val String) ENGINE = MergeTree ORDER BY val SETTINGS index_granularity = 1;" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.fixed_string_test_table (val FixedString(1)) ENGINE = MergeTree ORDER BY val SETTINGS index_granularity = 1;" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.signed_integer_test_table (val Int32) ENGINE = MergeTree ORDER BY val SETTINGS index_granularity = 1;" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.unsigned_integer_test_table (val UInt32) ENGINE = MergeTree ORDER BY val SETTINGS index_granularity = 1;" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.enum_test_table (val Enum16('hello' = 1, 'world' = 2, 'yandex' = 256, 'clickhouse' = 257)) ENGINE = MergeTree ORDER BY val SETTINGS index_granularity = 1;" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.date_test_table (val Date) ENGINE = MergeTree ORDER BY val SETTINGS index_granularity = 1;" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE string_test_table (val String) ENGINE = MergeTree ORDER BY val SETTINGS index_granularity = 1;" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE fixed_string_test_table (val FixedString(1)) ENGINE = MergeTree ORDER BY val SETTINGS index_granularity = 1;" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE signed_integer_test_table (val Int32) ENGINE = MergeTree ORDER BY val SETTINGS index_granularity = 1;" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE unsigned_integer_test_table (val UInt32) ENGINE = MergeTree ORDER BY val SETTINGS index_granularity = 1;" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE enum_test_table (val Enum16('hello' = 1, 'world' = 2, 'yandex' = 256, 'clickhouse' = 257)) ENGINE = MergeTree ORDER BY val SETTINGS index_granularity = 1;" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE date_test_table (val Date) ENGINE = MergeTree ORDER BY val SETTINGS index_granularity = 1;" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.string_test_table VALUES ('0'), ('2'), ('2');" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.fixed_string_test_table VALUES ('0'), ('2'), ('2');" +${CLICKHOUSE_CLIENT} --query="INSERT INTO string_test_table VALUES ('0'), ('2'), ('2');" +${CLICKHOUSE_CLIENT} --query="INSERT INTO fixed_string_test_table VALUES ('0'), ('2'), ('2');" # 131072 -> 17 bit is 1 -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.signed_integer_test_table VALUES (-2), (0), (2), (2), (131072), (131073), (131073);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.unsigned_integer_test_table VALUES (0), (2), (2), (131072), (131073), (131073);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.enum_test_table VALUES ('hello'), ('world'), ('world'), ('yandex'), ('clickhouse'), ('clickhouse');" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.date_test_table VALUES (1), (2), (2), (256), (257), (257);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO signed_integer_test_table VALUES (-2), (0), (2), (2), (131072), (131073), (131073);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO unsigned_integer_test_table VALUES (0), (2), (2), (131072), (131073), (131073);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO enum_test_table VALUES ('hello'), ('world'), ('world'), ('yandex'), ('clickhouse'), ('clickhouse');" +${CLICKHOUSE_CLIENT} --query="INSERT INTO date_test_table VALUES (1), (2), (2), (256), (257), (257);" CLICKHOUSE_CLIENT=`echo ${CLICKHOUSE_CLIENT} | sed 's/'"--send_logs_level=${CLICKHOUSE_CLIENT_SERVER_LOGS_LEVEL}"'/--send_logs_level=debug/g'` -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.string_test_table WHERE toUInt64(val) == 0;" 2>&1 |grep -q "3 marks to read from 1 ranges" && echo "no monotonic int case: String -> UInt64" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.fixed_string_test_table WHERE toUInt64(val) == 0;" 2>&1 |grep -q "3 marks to read from 1 ranges" && echo "no monotonic int case: FixedString -> UInt64" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM string_test_table WHERE toUInt64(val) == 0;" 2>&1 |grep -q "3 marks to read from 1 ranges" && echo "no monotonic int case: String -> UInt64" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM fixed_string_test_table WHERE toUInt64(val) == 0;" 2>&1 |grep -q "3 marks to read from 1 ranges" && echo "no monotonic int case: FixedString -> UInt64" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.signed_integer_test_table WHERE toInt64(val) == 0;" 2>&1 |grep -q "2 marks to read from" && echo "monotonic int case: Int32 -> Int64" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.signed_integer_test_table WHERE toUInt64(val) == 0;" 2>&1 |grep -q "2 marks to read from" && echo "monotonic int case: Int32 -> UInt64" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.signed_integer_test_table WHERE toInt32(val) == 0;" 2>&1 |grep -q "2 marks to read from" && echo "monotonic int case: Int32 -> Int32" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.signed_integer_test_table WHERE toUInt32(val) == 0;" 2>&1 |grep -q "2 marks to read from" && echo "monotonic int case: Int32 -> UInt32" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.signed_integer_test_table WHERE toInt16(val) == 0;" 2>&1 |grep -q "5 marks to read from" && echo "monotonic int case: Int32 -> Int16" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.signed_integer_test_table WHERE toUInt16(val) == 0;" 2>&1 |grep -q "5 marks to read from" && echo "monotonic int case: Int32 -> UInt16" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM signed_integer_test_table WHERE toInt64(val) == 0;" 2>&1 |grep -q "2 marks to read from" && echo "monotonic int case: Int32 -> Int64" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM signed_integer_test_table WHERE toUInt64(val) == 0;" 2>&1 |grep -q "2 marks to read from" && echo "monotonic int case: Int32 -> UInt64" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM signed_integer_test_table WHERE toInt32(val) == 0;" 2>&1 |grep -q "2 marks to read from" && echo "monotonic int case: Int32 -> Int32" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM signed_integer_test_table WHERE toUInt32(val) == 0;" 2>&1 |grep -q "2 marks to read from" && echo "monotonic int case: Int32 -> UInt32" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM signed_integer_test_table WHERE toInt16(val) == 0;" 2>&1 |grep -q "5 marks to read from" && echo "monotonic int case: Int32 -> Int16" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM signed_integer_test_table WHERE toUInt16(val) == 0;" 2>&1 |grep -q "5 marks to read from" && echo "monotonic int case: Int32 -> UInt16" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.unsigned_integer_test_table WHERE toInt64(val) == 0;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: UInt32 -> Int64" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.unsigned_integer_test_table WHERE toUInt64(val) == 0;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: UInt32 -> UInt64" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.unsigned_integer_test_table WHERE toInt32(val) == 0;" 2>&1 |grep -q "2 marks to read from" && echo "monotonic int case: UInt32 -> Int32" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.unsigned_integer_test_table WHERE toUInt32(val) == 0;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: UInt32 -> UInt32" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.unsigned_integer_test_table WHERE toInt16(val) == 0;" 2>&1 |grep -q "4 marks to read from" && echo "monotonic int case: UInt32 -> Int16" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.unsigned_integer_test_table WHERE toUInt16(val) == 0;" 2>&1 |grep -q "4 marks to read from" && echo "monotonic int case: UInt32 -> UInt16" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM unsigned_integer_test_table WHERE toInt64(val) == 0;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: UInt32 -> Int64" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM unsigned_integer_test_table WHERE toUInt64(val) == 0;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: UInt32 -> UInt64" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM unsigned_integer_test_table WHERE toInt32(val) == 0;" 2>&1 |grep -q "2 marks to read from" && echo "monotonic int case: UInt32 -> Int32" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM unsigned_integer_test_table WHERE toUInt32(val) == 0;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: UInt32 -> UInt32" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM unsigned_integer_test_table WHERE toInt16(val) == 0;" 2>&1 |grep -q "4 marks to read from" && echo "monotonic int case: UInt32 -> Int16" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM unsigned_integer_test_table WHERE toUInt16(val) == 0;" 2>&1 |grep -q "4 marks to read from" && echo "monotonic int case: UInt32 -> UInt16" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.enum_test_table WHERE toInt32(val) == 1;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: Enum16 -> Int32" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.enum_test_table WHERE toUInt32(val) == 1;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: Enum16 -> UInt32" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.enum_test_table WHERE toInt16(val) == 1;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: Enum16 -> Int16" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.enum_test_table WHERE toUInt16(val) == 1;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: Enum16 -> UInt16" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.enum_test_table WHERE toInt8(val) == 1;" 2>&1 |grep -q "5 marks to read from" && echo "monotonic int case: Enum16 -> Int8" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.enum_test_table WHERE toUInt8(val) == 1;" 2>&1 |grep -q "5 marks to read from" && echo "monotonic int case: Enum16 -> UInt8" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM enum_test_table WHERE toInt32(val) == 1;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: Enum16 -> Int32" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM enum_test_table WHERE toUInt32(val) == 1;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: Enum16 -> UInt32" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM enum_test_table WHERE toInt16(val) == 1;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: Enum16 -> Int16" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM enum_test_table WHERE toUInt16(val) == 1;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: Enum16 -> UInt16" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM enum_test_table WHERE toInt8(val) == 1;" 2>&1 |grep -q "5 marks to read from" && echo "monotonic int case: Enum16 -> Int8" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM enum_test_table WHERE toUInt8(val) == 1;" 2>&1 |grep -q "5 marks to read from" && echo "monotonic int case: Enum16 -> UInt8" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.date_test_table WHERE toInt32(val) == 1;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: Date -> Int32" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.date_test_table WHERE toUInt32(val) == 1;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: Date -> UInt32" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.date_test_table WHERE toInt16(val) == 1;" 2>&1 |grep -q "2 marks to read from" && echo "monotonic int case: Date -> Int16" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.date_test_table WHERE toUInt16(val) == 1;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: Date -> UInt16" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.date_test_table WHERE toInt8(val) == 1;" 2>&1 |grep -q "5 marks to read from" && echo "monotonic int case: Date -> Int8" -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.date_test_table WHERE toUInt8(val) == 1;" 2>&1 |grep -q "5 marks to read from" && echo "monotonic int case: Date -> UInt8" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM date_test_table WHERE toInt32(val) == 1;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: Date -> Int32" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM date_test_table WHERE toUInt32(val) == 1;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: Date -> UInt32" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM date_test_table WHERE toInt16(val) == 1;" 2>&1 |grep -q "2 marks to read from" && echo "monotonic int case: Date -> Int16" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM date_test_table WHERE toUInt16(val) == 1;" 2>&1 |grep -q "1 marks to read from" && echo "monotonic int case: Date -> UInt16" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM date_test_table WHERE toInt8(val) == 1;" 2>&1 |grep -q "5 marks to read from" && echo "monotonic int case: Date -> Int8" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM date_test_table WHERE toUInt8(val) == 1;" 2>&1 |grep -q "5 marks to read from" && echo "monotonic int case: Date -> UInt8" CLICKHOUSE_CLIENT=`echo ${CLICKHOUSE_CLIENT} | sed 's/--send_logs_level=debug/'"--send_logs_level=${CLICKHOUSE_CLIENT_SERVER_LOGS_LEVEL}"'/g'` -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.string_test_table;" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.fixed_string_test_table;" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.signed_integer_test_table;" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.unsigned_integer_test_table;" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.enum_test_table;" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.date_test_table;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS string_test_table;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS fixed_string_test_table;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS signed_integer_test_table;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS unsigned_integer_test_table;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS enum_test_table;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS date_test_table;" ${CLICKHOUSE_CLIENT} --query="SYSTEM START MERGES;" diff --git a/dbms/tests/queries/0_stateless/00660_optimize_final_without_partition.sql b/dbms/tests/queries/0_stateless/00660_optimize_final_without_partition.sql index 86b3a9f8032..8c1f2ebd361 100644 --- a/dbms/tests/queries/0_stateless/00660_optimize_final_without_partition.sql +++ b/dbms/tests/queries/0_stateless/00660_optimize_final_without_partition.sql @@ -1,17 +1,17 @@ -DROP TABLE IF EXISTS test.partitioned_by_tuple; +DROP TABLE IF EXISTS partitioned_by_tuple; -CREATE TABLE test.partitioned_by_tuple (d Date, x UInt8, w String, y UInt8) ENGINE SummingMergeTree (y) PARTITION BY (d, x) ORDER BY (d, x, w); +CREATE TABLE partitioned_by_tuple (d Date, x UInt8, w String, y UInt8) ENGINE SummingMergeTree (y) PARTITION BY (d, x) ORDER BY (d, x, w); -INSERT INTO test.partitioned_by_tuple VALUES ('2000-01-02', 1, 'first', 3); -INSERT INTO test.partitioned_by_tuple VALUES ('2000-01-01', 2, 'first', 2); -INSERT INTO test.partitioned_by_tuple VALUES ('2000-01-01', 1, 'first', 1), ('2000-01-01', 1, 'first', 2); +INSERT INTO partitioned_by_tuple VALUES ('2000-01-02', 1, 'first', 3); +INSERT INTO partitioned_by_tuple VALUES ('2000-01-01', 2, 'first', 2); +INSERT INTO partitioned_by_tuple VALUES ('2000-01-01', 1, 'first', 1), ('2000-01-01', 1, 'first', 2); -OPTIMIZE TABLE test.partitioned_by_tuple; +OPTIMIZE TABLE partitioned_by_tuple; -SELECT * FROM test.partitioned_by_tuple ORDER BY d, x, w, y; +SELECT * FROM partitioned_by_tuple ORDER BY d, x, w, y; -OPTIMIZE TABLE test.partitioned_by_tuple FINAL; +OPTIMIZE TABLE partitioned_by_tuple FINAL; -SELECT * FROM test.partitioned_by_tuple ORDER BY d, x, w, y; +SELECT * FROM partitioned_by_tuple ORDER BY d, x, w, y; -DROP TABLE test.partitioned_by_tuple; +DROP TABLE partitioned_by_tuple; diff --git a/dbms/tests/queries/0_stateless/00661_array_has_silviucpp.sql b/dbms/tests/queries/0_stateless/00661_array_has_silviucpp.sql index fa442110c7a..64af9d8d56d 100644 --- a/dbms/tests/queries/0_stateless/00661_array_has_silviucpp.sql +++ b/dbms/tests/queries/0_stateless/00661_array_has_silviucpp.sql @@ -1,9 +1,9 @@ -DROP TABLE IF EXISTS test.has_function; +DROP TABLE IF EXISTS has_function; -CREATE TABLE test.has_function(arr Array(Nullable(String))) ENGINE = Memory; -INSERT INTO test.has_function(arr) values ([null, 'str1', 'str2']),(['str1', 'str2']), ([]), ([]); +CREATE TABLE has_function(arr Array(Nullable(String))) ENGINE = Memory; +INSERT INTO has_function(arr) values ([null, 'str1', 'str2']),(['str1', 'str2']), ([]), ([]); -SELECT arr, has(`arr`, 'str1') FROM test.has_function; +SELECT arr, has(`arr`, 'str1') FROM has_function; SELECT has([null, 'str1', 'str2'], 'str1'); -DROP TABLE test.has_function; +DROP TABLE has_function; diff --git a/dbms/tests/queries/0_stateless/00661_optimize_final_replicated_without_partition_zookeeper.sql b/dbms/tests/queries/0_stateless/00661_optimize_final_replicated_without_partition_zookeeper.sql index 4f241e96742..120c139c60f 100644 --- a/dbms/tests/queries/0_stateless/00661_optimize_final_replicated_without_partition_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00661_optimize_final_replicated_without_partition_zookeeper.sql @@ -1,21 +1,21 @@ -DROP TABLE IF EXISTS test.partitioned_by_tuple_replica1; -DROP TABLE IF EXISTS test.partitioned_by_tuple_replica2; -CREATE TABLE test.partitioned_by_tuple_replica1(d Date, x UInt8, w String, y UInt8) ENGINE = ReplicatedSummingMergeTree('/clickhouse/tables/test/partitioned_by_tuple', '1') PARTITION BY (d, x) ORDER BY (d, x, w); -CREATE TABLE test.partitioned_by_tuple_replica2(d Date, x UInt8, w String, y UInt8) ENGINE = ReplicatedSummingMergeTree('/clickhouse/tables/test/partitioned_by_tuple', '2') PARTITION BY (d, x) ORDER BY (d, x, w); +DROP TABLE IF EXISTS partitioned_by_tuple_replica1; +DROP TABLE IF EXISTS partitioned_by_tuple_replica2; +CREATE TABLE partitioned_by_tuple_replica1(d Date, x UInt8, w String, y UInt8) ENGINE = ReplicatedSummingMergeTree('/clickhouse/tables/test/partitioned_by_tuple', '1') PARTITION BY (d, x) ORDER BY (d, x, w); +CREATE TABLE partitioned_by_tuple_replica2(d Date, x UInt8, w String, y UInt8) ENGINE = ReplicatedSummingMergeTree('/clickhouse/tables/test/partitioned_by_tuple', '2') PARTITION BY (d, x) ORDER BY (d, x, w); -INSERT INTO test.partitioned_by_tuple_replica1 VALUES ('2000-01-02', 1, 'first', 3); -INSERT INTO test.partitioned_by_tuple_replica1 VALUES ('2000-01-01', 2, 'first', 2); -INSERT INTO test.partitioned_by_tuple_replica1 VALUES ('2000-01-01', 1, 'first', 1), ('2000-01-01', 1, 'first', 2); +INSERT INTO partitioned_by_tuple_replica1 VALUES ('2000-01-02', 1, 'first', 3); +INSERT INTO partitioned_by_tuple_replica1 VALUES ('2000-01-01', 2, 'first', 2); +INSERT INTO partitioned_by_tuple_replica1 VALUES ('2000-01-01', 1, 'first', 1), ('2000-01-01', 1, 'first', 2); -OPTIMIZE TABLE test.partitioned_by_tuple_replica1; +OPTIMIZE TABLE partitioned_by_tuple_replica1; -SYSTEM SYNC REPLICA test.partitioned_by_tuple_replica2; -SELECT * FROM test.partitioned_by_tuple_replica2 ORDER BY d, x, w, y; +SYSTEM SYNC REPLICA partitioned_by_tuple_replica2; +SELECT * FROM partitioned_by_tuple_replica2 ORDER BY d, x, w, y; -OPTIMIZE TABLE test.partitioned_by_tuple_replica1 FINAL; +OPTIMIZE TABLE partitioned_by_tuple_replica1 FINAL; -SYSTEM SYNC REPLICA test.partitioned_by_tuple_replica2; -SELECT * FROM test.partitioned_by_tuple_replica2 ORDER BY d, x, w, y; +SYSTEM SYNC REPLICA partitioned_by_tuple_replica2; +SELECT * FROM partitioned_by_tuple_replica2 ORDER BY d, x, w, y; -DROP TABLE test.partitioned_by_tuple_replica1; -DROP TABLE test.partitioned_by_tuple_replica2; +DROP TABLE partitioned_by_tuple_replica1; +DROP TABLE partitioned_by_tuple_replica2; diff --git a/dbms/tests/queries/0_stateless/00663_tiny_log_empty_insert.sql b/dbms/tests/queries/0_stateless/00663_tiny_log_empty_insert.sql index f5606c75f3e..35b59ddffc5 100644 --- a/dbms/tests/queries/0_stateless/00663_tiny_log_empty_insert.sql +++ b/dbms/tests/queries/0_stateless/00663_tiny_log_empty_insert.sql @@ -1,14 +1,14 @@ -DROP TABLE IF EXISTS test.empty; -DROP TABLE IF EXISTS test.data; +DROP TABLE IF EXISTS empty; +DROP TABLE IF EXISTS data; -CREATE TABLE test.empty (value Int8) ENGINE = TinyLog; -CREATE TABLE test.data (value Int8) ENGINE = TinyLog; +CREATE TABLE empty (value Int8) ENGINE = TinyLog; +CREATE TABLE data (value Int8) ENGINE = TinyLog; -INSERT INTO test.data SELECT * FROM test.empty; -SELECT * FROM test.data; +INSERT INTO data SELECT * FROM empty; +SELECT * FROM data; -INSERT INTO test.data SELECT 1; -SELECT * FROM test.data; +INSERT INTO data SELECT 1; +SELECT * FROM data; -DROP TABLE test.empty; -DROP TABLE test.data; +DROP TABLE empty; +DROP TABLE data; diff --git a/dbms/tests/queries/0_stateless/00665_alter_nullable_string_to_nullable_uint8.sql b/dbms/tests/queries/0_stateless/00665_alter_nullable_string_to_nullable_uint8.sql index e0de4ec5b33..1d6a0fc787f 100644 --- a/dbms/tests/queries/0_stateless/00665_alter_nullable_string_to_nullable_uint8.sql +++ b/dbms/tests/queries/0_stateless/00665_alter_nullable_string_to_nullable_uint8.sql @@ -1,12 +1,12 @@ -DROP TABLE IF EXISTS test.alter; -CREATE TABLE test.alter (`boolean_false` Nullable(String)) ENGINE = MergeTree ORDER BY tuple(); +DROP TABLE IF EXISTS alter; +CREATE TABLE alter (`boolean_false` Nullable(String)) ENGINE = MergeTree ORDER BY tuple(); -INSERT INTO test.alter (`boolean_false`) VALUES (NULL), (''), ('123'); -SELECT * FROM test.alter; -SELECT * FROM test.alter ORDER BY boolean_false NULLS LAST; +INSERT INTO alter (`boolean_false`) VALUES (NULL), (''), ('123'); +SELECT * FROM alter; +SELECT * FROM alter ORDER BY boolean_false NULLS LAST; -ALTER TABLE test.alter MODIFY COLUMN `boolean_false` Nullable(UInt8); -SELECT * FROM test.alter; -SELECT * FROM test.alter ORDER BY boolean_false NULLS LAST; +ALTER TABLE alter MODIFY COLUMN `boolean_false` Nullable(UInt8); +SELECT * FROM alter; +SELECT * FROM alter ORDER BY boolean_false NULLS LAST; -DROP TABLE test.alter; +DROP TABLE alter; diff --git a/dbms/tests/queries/0_stateless/00668_compare_arrays_silviucpp.sql b/dbms/tests/queries/0_stateless/00668_compare_arrays_silviucpp.sql index 5c164b1368e..5f6ad7c1d8e 100644 --- a/dbms/tests/queries/0_stateless/00668_compare_arrays_silviucpp.sql +++ b/dbms/tests/queries/0_stateless/00668_compare_arrays_silviucpp.sql @@ -1,9 +1,9 @@ -DROP TABLE IF EXISTS test.array; -CREATE TABLE test.array (arr Array(Nullable(Float64))) ENGINE = Memory; -INSERT INTO test.array(arr) values ([1,2]),([3,4]),([5,6]),([7,8]); +DROP TABLE IF EXISTS array; +CREATE TABLE array (arr Array(Nullable(Float64))) ENGINE = Memory; +INSERT INTO array(arr) values ([1,2]),([3,4]),([5,6]),([7,8]); -select * from test.array where arr > [12.2]; -select * from test.array where arr > [null, 12.2]; -select * from test.array where arr > [null, 12]; +select * from array where arr > [12.2]; +select * from array where arr > [null, 12.2]; +select * from array where arr > [null, 12]; -DROP TABLE test.array; +DROP TABLE array; diff --git a/dbms/tests/queries/0_stateless/00671_max_intersections.sql b/dbms/tests/queries/0_stateless/00671_max_intersections.sql index 486a8e023a2..8e798b82137 100644 --- a/dbms/tests/queries/0_stateless/00671_max_intersections.sql +++ b/dbms/tests/queries/0_stateless/00671_max_intersections.sql @@ -1,14 +1,14 @@ -DROP TABLE IF EXISTS test.test1; -DROP TABLE IF EXISTS test.test2; +DROP TABLE IF EXISTS test1; +DROP TABLE IF EXISTS test2; -CREATE TABLE test.test1(start Integer, end Integer) engine = Memory; -CREATE TABLE test.test2(start Integer, end Integer) engine = Memory; +CREATE TABLE test1(start Integer, end Integer) engine = Memory; +CREATE TABLE test2(start Integer, end Integer) engine = Memory; -INSERT INTO test.test1(start,end) VALUES (1,3),(3,5); -INSERT INTO test.test2(start,end) VALUES (3,5),(1,3); +INSERT INTO test1(start,end) VALUES (1,3),(3,5); +INSERT INTO test2(start,end) VALUES (3,5),(1,3); -SELECT maxIntersections(start,end) from test.test1; -SELECT maxIntersections(start,end) from test.test2; +SELECT maxIntersections(start,end) from test1; +SELECT maxIntersections(start,end) from test2; -DROP TABLE test.test1; -DROP TABLE test.test2; +DROP TABLE test1; +DROP TABLE test2; diff --git a/dbms/tests/queries/0_stateless/00672_arrayDistinct.sql b/dbms/tests/queries/0_stateless/00672_arrayDistinct.sql index 85cfb03fe94..8f7918b25ae 100644 --- a/dbms/tests/queries/0_stateless/00672_arrayDistinct.sql +++ b/dbms/tests/queries/0_stateless/00672_arrayDistinct.sql @@ -1,5 +1,3 @@ -USE test; - SELECT arrayDistinct([1, 2, 3]); SELECT arrayDistinct([1, 2, 3, 2, 2]); SELECT arrayDistinct([1, 2, NULL, 5, 2, NULL]); diff --git a/dbms/tests/queries/0_stateless/00673_subquery_prepared_set_performance.sql b/dbms/tests/queries/0_stateless/00673_subquery_prepared_set_performance.sql index 9a31bce2608..ed94a1aab30 100644 --- a/dbms/tests/queries/0_stateless/00673_subquery_prepared_set_performance.sql +++ b/dbms/tests/queries/0_stateless/00673_subquery_prepared_set_performance.sql @@ -1,12 +1,12 @@ -DROP TABLE IF EXISTS test.mergetree; +DROP TABLE IF EXISTS mergetree; -CREATE TABLE test.mergetree (x UInt64) ENGINE = MergeTree ORDER BY x; -INSERT INTO test.mergetree VALUES (1); +CREATE TABLE mergetree (x UInt64) ENGINE = MergeTree ORDER BY x; +INSERT INTO mergetree VALUES (1); -SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM test.mergetree WHERE x IN (SELECT * FROM numbers(10000000)))))))))))); +SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM mergetree WHERE x IN (SELECT * FROM numbers(10000000)))))))))))); SET force_primary_key = 1; -SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM test.mergetree WHERE x IN (SELECT * FROM numbers(10000000)))))))))))); +SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM mergetree WHERE x IN (SELECT * FROM numbers(10000000)))))))))))); -DROP TABLE test.mergetree; +DROP TABLE mergetree; diff --git a/dbms/tests/queries/0_stateless/00674_join_on_syntax.sql b/dbms/tests/queries/0_stateless/00674_join_on_syntax.sql index 27d83e4684c..a58c3716a98 100644 --- a/dbms/tests/queries/0_stateless/00674_join_on_syntax.sql +++ b/dbms/tests/queries/0_stateless/00674_join_on_syntax.sql @@ -1,107 +1,107 @@ -drop table if exists test.tab1; -drop table if exists test.tab2; -drop table if exists test.tab3; -drop table if exists test.tab1_copy; +drop table if exists tab1; +drop table if exists tab2; +drop table if exists tab3; +drop table if exists tab1_copy; -create table test.tab1 (a1 Int32, b1 Int32) engine = MergeTree order by a1; -create table test.tab2 (a2 Int32, b2 Int32) engine = MergeTree order by a2; -create table test.tab3 (a3 Int32, b3 Int32) engine = MergeTree order by a3; -create table test.tab1_copy (a1 Int32, b1 Int32) engine = MergeTree order by a1; +create table tab1 (a1 Int32, b1 Int32) engine = MergeTree order by a1; +create table tab2 (a2 Int32, b2 Int32) engine = MergeTree order by a2; +create table tab3 (a3 Int32, b3 Int32) engine = MergeTree order by a3; +create table tab1_copy (a1 Int32, b1 Int32) engine = MergeTree order by a1; -insert into test.tab1 values (1, 2); -insert into test.tab2 values (2, 3); -insert into test.tab3 values (2, 3); -insert into test.tab1_copy values (2, 3); +insert into tab1 values (1, 2); +insert into tab2 values (2, 3); +insert into tab3 values (2, 3); +insert into tab1_copy values (2, 3); select 'joind columns from right table'; -select a1 from test.tab1 any left join test.tab2 on b1 = a2; -select a1, b1 from test.tab1 any left join test.tab2 on b1 = a2; -select a1, a2 from test.tab1 any left join test.tab2 on b1 = a2; -select a1, b2 from test.tab1 any left join test.tab2 on b1 = a2; -select a1, a2, b2 from test.tab1 any left join test.tab2 on b1 = a2; +select a1 from tab1 any left join tab2 on b1 = a2; +select a1, b1 from tab1 any left join tab2 on b1 = a2; +select a1, a2 from tab1 any left join tab2 on b1 = a2; +select a1, b2 from tab1 any left join tab2 on b1 = a2; +select a1, a2, b2 from tab1 any left join tab2 on b1 = a2; select 'join on expression'; -select b1 from test.tab1 any left join test.tab2 on toInt32(a1 + 1) = a2; -select b1, a2 from test.tab1 any left join test.tab2 on toInt32(a1 + 1) = a2; -select b1, b2 from test.tab1 any left join test.tab2 on toInt32(a1 + 1) = a2; -select a1 from test.tab1 any left join test.tab2 on b1 + 1 = a2 + 1; -select a2 from test.tab1 any left join test.tab2 on b1 + 1 = a2 + 1; -select a1, b1, a2, b2 from test.tab1 any left join test.tab2 on b1 + 1 = a2 + 1; -select a1, b1, a2, b2, a2 + 1 from test.tab1 any left join test.tab2 on b1 + 1 = a2 + 1; -select a1, b1, a2, b2 from test.tab1 any left join test.tab2 on a1 + 4 = b2 + 2; +select b1 from tab1 any left join tab2 on toInt32(a1 + 1) = a2; +select b1, a2 from tab1 any left join tab2 on toInt32(a1 + 1) = a2; +select b1, b2 from tab1 any left join tab2 on toInt32(a1 + 1) = a2; +select a1 from tab1 any left join tab2 on b1 + 1 = a2 + 1; +select a2 from tab1 any left join tab2 on b1 + 1 = a2 + 1; +select a1, b1, a2, b2 from tab1 any left join tab2 on b1 + 1 = a2 + 1; +select a1, b1, a2, b2, a2 + 1 from tab1 any left join tab2 on b1 + 1 = a2 + 1; +select a1, b1, a2, b2 from tab1 any left join tab2 on a1 + 4 = b2 + 2; select 'join on and chain'; -select a2, b2 from test.tab2 any left join test.tab3 on a2 = a3 and b2 = b3; -select a3, b3 from test.tab2 any left join test.tab3 on a2 = a3 and b2 = b3; -select a2, b2, a3, b3 from test.tab2 any left join test.tab3 on a2 = a3 and b2 = b3; -select a1 from test.tab1 any left join test.tab2 on b1 + 1 = a2 + 1 and a1 + 4 = b2 + 2; -select a1, b2 from test.tab1 any left join test.tab2 on b1 + 1 = a2 + 1 and a1 + 4 = b2 + 2; -select a1, b1, a2, b2 from test.tab1 any left join test.tab2 on b1 + 1 = a2 + 1 and a1 + 4 = b2 + 2; -select a2, b2 + 1 from test.tab1 any left join test.tab2 on b1 + 1 = a2 + 1 and a1 + 4 = b2 + 2; +select a2, b2 from tab2 any left join tab3 on a2 = a3 and b2 = b3; +select a3, b3 from tab2 any left join tab3 on a2 = a3 and b2 = b3; +select a2, b2, a3, b3 from tab2 any left join tab3 on a2 = a3 and b2 = b3; +select a1 from tab1 any left join tab2 on b1 + 1 = a2 + 1 and a1 + 4 = b2 + 2; +select a1, b2 from tab1 any left join tab2 on b1 + 1 = a2 + 1 and a1 + 4 = b2 + 2; +select a1, b1, a2, b2 from tab1 any left join tab2 on b1 + 1 = a2 + 1 and a1 + 4 = b2 + 2; +select a2, b2 + 1 from tab1 any left join tab2 on b1 + 1 = a2 + 1 and a1 + 4 = b2 + 2; select 'join on aliases'; -select a1, a2, b1, b2 from test.tab1 first any left join test.tab2 second on first.b1 = second.a2; -select a1, a2, b1, b2 from test.tab1 first any left join test.tab2 second on second.a2 = first.b1; +select a1, a2, b1, b2 from tab1 first any left join tab2 second on first.b1 = second.a2; +select a1, a2, b1, b2 from tab1 first any left join tab2 second on second.a2 = first.b1; -select a1, a2, b1, b2 from test.tab1 first any left join test.tab2 second on tab1.b1 = tab2.a2; -select a1, a2, b1, b2 from test.tab1 first any left join test.tab2 second on tab2.a2 = tab1.b1; +select a1, a2, b1, b2 from tab1 first any left join tab2 second on tab1.b1 = tab2.a2; +select a1, a2, b1, b2 from tab1 first any left join tab2 second on tab2.a2 = tab1.b1; -select a1, a2, b1, b2 from test.tab1 first any left join test.tab2 second on test.tab1.b1 = test.tab2.a2; -select a1, a2, b1, b2 from test.tab1 first any left join test.tab2 second on test.tab2.a2 = test.tab1.b1; +select a1, a2, b1, b2 from tab1 first any left join tab2 second on tab1.b1 = tab2.a2; +select a1, a2, b1, b2 from tab1 first any left join tab2 second on tab2.a2 = tab1.b1; -select a1, a2, b1, b2 from test.tab1 first any left join test.tab2 second on first.b1 = tab2.a2; -select a1, a2, b1, b2 from test.tab1 first any left join test.tab2 second on tab2.a2 = first.b1; -select a1, a2, b1, b2 from test.tab1 first any left join test.tab2 second on first.b1 = test.tab2.a2; -select a1, a2, b1, b2 from test.tab1 first any left join test.tab2 second on test.tab2.a2 = first.b1; +select a1, a2, b1, b2 from tab1 first any left join tab2 second on first.b1 = tab2.a2; +select a1, a2, b1, b2 from tab1 first any left join tab2 second on tab2.a2 = first.b1; +select a1, a2, b1, b2 from tab1 first any left join tab2 second on first.b1 = tab2.a2; +select a1, a2, b1, b2 from tab1 first any left join tab2 second on tab2.a2 = first.b1; -select a1, a2, b1, b2 from test.tab1 first any left join test.tab2 second on tab1.b1 = second.a2; -select a1, a2, b1, b2 from test.tab1 first any left join test.tab2 second on second.a2 = tab1.b1; -select a1, a2, b1, b2 from test.tab1 first any left join test.tab2 second on test.tab1.b1 = second.a2; -select a1, a2, b1, b2 from test.tab1 first any left join test.tab2 second on second.a2 = test.tab1.b1; +select a1, a2, b1, b2 from tab1 first any left join tab2 second on tab1.b1 = second.a2; +select a1, a2, b1, b2 from tab1 first any left join tab2 second on second.a2 = tab1.b1; +select a1, a2, b1, b2 from tab1 first any left join tab2 second on tab1.b1 = second.a2; +select a1, a2, b1, b2 from tab1 first any left join tab2 second on second.a2 = tab1.b1; -select a1, a2, first.b1, second.b2 from test.tab1 first any left join test.tab2 second on b1 = a2; -select a1, a2, tab1.b1, tab2.b2 from test.tab1 first any left join test.tab2 second on b1 = a2; -select a1, a2, test.tab1.b1, test.tab2.b2 from test.tab1 first any left join test.tab2 second on b1 = a2; +select a1, a2, first.b1, second.b2 from tab1 first any left join tab2 second on b1 = a2; +select a1, a2, tab1.b1, tab2.b2 from tab1 first any left join tab2 second on b1 = a2; +select a1, a2, tab1.b1, tab2.b2 from tab1 first any left join tab2 second on b1 = a2; select 'join on complex expression'; -select a2, b2 from test.tab2 any left join test.tab3 on a2 + b2 = a3 + b3; -select a2, b2 from test.tab2 any left join test.tab3 on a3 + tab3.b3 = a2 + b2; -select a2, b2 from test.tab2 second any left join test.tab3 on a3 + b3 = a2 + second.b2; -select a2, b2 from test.tab2 second any left join test.tab3 third on third.a3 + tab3.b3 = tab2.a2 + second.b2; -select a2, b2 from test.tab2 second any left join test.tab3 third on third.a3 + test.tab3.b3 = test.tab2.a2 + second.b2; +select a2, b2 from tab2 any left join tab3 on a2 + b2 = a3 + b3; +select a2, b2 from tab2 any left join tab3 on a3 + tab3.b3 = a2 + b2; +select a2, b2 from tab2 second any left join tab3 on a3 + b3 = a2 + second.b2; +select a2, b2 from tab2 second any left join tab3 third on third.a3 + tab3.b3 = tab2.a2 + second.b2; +select a2, b2 from tab2 second any left join tab3 third on third.a3 + tab3.b3 = tab2.a2 + second.b2; select 'duplicate column names'; -select a1, tab1_copy.a1 from test.tab1 any left join test.tab1_copy on tab1.b1 + 3 = tab1_copy.b1 + 2 FORMAT JSONEachRow; -select a1, test.tab1_copy.a1 from test.tab1 any left join test.tab1_copy on tab1.b1 + 3 = tab1_copy.b1 + 2 FORMAT JSONEachRow; -select a1, copy.a1 from test.tab1 any left join test.tab1_copy copy on tab1.b1 + 3 = tab1_copy.b1 + 2 FORMAT JSONEachRow; -select a1, tab1_copy.a1 from test.tab1 any left join test.tab1_copy copy on tab1.b1 + 3 = tab1_copy.b1 + 2 FORMAT JSONEachRow; -select a1, test.tab1_copy.a1 from test.tab1 any left join test.tab1_copy copy on tab1.b1 + 3 = tab1_copy.b1 + 2 FORMAT JSONEachRow; +select a1, tab1_copy.a1 from tab1 any left join tab1_copy on tab1.b1 + 3 = tab1_copy.b1 + 2 FORMAT JSONEachRow; +select a1, tab1_copy.a1 from tab1 any left join tab1_copy on tab1.b1 + 3 = tab1_copy.b1 + 2 FORMAT JSONEachRow; +select a1, copy.a1 from tab1 any left join tab1_copy copy on tab1.b1 + 3 = tab1_copy.b1 + 2 FORMAT JSONEachRow; +select a1, tab1_copy.a1 from tab1 any left join tab1_copy copy on tab1.b1 + 3 = tab1_copy.b1 + 2 FORMAT JSONEachRow; +select a1, tab1_copy.a1 from tab1 any left join tab1_copy copy on tab1.b1 + 3 = tab1_copy.b1 + 2 FORMAT JSONEachRow; select 'subquery'; -select a1 from test.tab1 any left join (select * from test.tab2) on b1 = a2; -select a1 from test.tab1 any left join (select a2 from test.tab2) on b1 = a2; -select a1, b1 from test.tab1 any left join (select * from test.tab2) on b1 = a2; -select a1, b1, a2, b2 from test.tab1 any left join (select * from test.tab2) on b1 = a2; -select a1, a2 from test.tab1 any left join (select a2 from test.tab2) on b1 = a2; +select a1 from tab1 any left join (select * from tab2) on b1 = a2; +select a1 from tab1 any left join (select a2 from tab2) on b1 = a2; +select a1, b1 from tab1 any left join (select * from tab2) on b1 = a2; +select a1, b1, a2, b2 from tab1 any left join (select * from tab2) on b1 = a2; +select a1, a2 from tab1 any left join (select a2 from tab2) on b1 = a2; select 'subquery expression'; -select b1 from test.tab1 any left join (select * from test.tab2) on toInt32(a1 + 1) = a2; -select a1, b1, a2, b2 from test.tab1 any left join (select * from test.tab2) on b1 + 1 = a2 + 1; -select a1, b1, a2 from test.tab1 any left join (select * from test.tab2) on b1 + 1 = a2 + 1; +select b1 from tab1 any left join (select * from tab2) on toInt32(a1 + 1) = a2; +select a1, b1, a2, b2 from tab1 any left join (select * from tab2) on b1 + 1 = a2 + 1; +select a1, b1, a2 from tab1 any left join (select * from tab2) on b1 + 1 = a2 + 1; select 'subquery column alias'; -select a1, b1, a2, b2 from test.tab1 any left join (select *, a2 as z from test.tab2) on b1 + 1 = z + 1; -select a1, b1, a2, b2 from test.tab1 any left join (select *, a2 + 1 as z from test.tab2) on b1 + 1 = z; -select a1, b1, a2, b2 from test.tab1 any left join (select *, a2 + 1 as z from test.tab2) on b1 + 2 = z + 1 format TSV; +select a1, b1, a2, b2 from tab1 any left join (select *, a2 as z from tab2) on b1 + 1 = z + 1; +select a1, b1, a2, b2 from tab1 any left join (select *, a2 + 1 as z from tab2) on b1 + 1 = z; +select a1, b1, a2, b2 from tab1 any left join (select *, a2 + 1 as z from tab2) on b1 + 2 = z + 1 format TSV; select 'subquery alias'; -select a1, a2, b1, b2 from test.tab1 first any left join (select * from test.tab2) second on first.b1 = second.a2; -select a1, a2, b1, b2 from test.tab1 first any left join (select *, a2 as z from test.tab2) second on first.b1 = second.z; -select a1, a2, b1, b2 from test.tab1 first any left join (select *, a2 + 1 as z from test.tab2) second on first.b1 + 1 = second.z; -select tab1.a1, a2, test.tab1.b1, second.b2 from test.tab1 first any left join (select * from test.tab2) second on first.b1 = second.a2; -select a1, s.a1 from test.tab1 any left join (select * from test.tab1_copy) s on tab1.b1 + 3 = s.b1 + 2 FORMAT JSONEachRow; +select a1, a2, b1, b2 from tab1 first any left join (select * from tab2) second on first.b1 = second.a2; +select a1, a2, b1, b2 from tab1 first any left join (select *, a2 as z from tab2) second on first.b1 = second.z; +select a1, a2, b1, b2 from tab1 first any left join (select *, a2 + 1 as z from tab2) second on first.b1 + 1 = second.z; +select tab1.a1, a2, tab1.b1, second.b2 from tab1 first any left join (select * from tab2) second on first.b1 = second.a2; +select a1, s.a1 from tab1 any left join (select * from tab1_copy) s on tab1.b1 + 3 = s.b1 + 2 FORMAT JSONEachRow; diff --git a/dbms/tests/queries/0_stateless/00679_uuid_in_key.sql b/dbms/tests/queries/0_stateless/00679_uuid_in_key.sql index 7a61132b4ff..5eefaef6d18 100644 --- a/dbms/tests/queries/0_stateless/00679_uuid_in_key.sql +++ b/dbms/tests/queries/0_stateless/00679_uuid_in_key.sql @@ -1,5 +1,3 @@ -USE test; - CREATE TABLE IF NOT EXISTS uuid ( created_at DateTime, diff --git a/dbms/tests/queries/0_stateless/00681_duplicate_columns_inside_union_all_stas_sviridov.sql b/dbms/tests/queries/0_stateless/00681_duplicate_columns_inside_union_all_stas_sviridov.sql index 2c118f546c3..f28bdd1279e 100644 --- a/dbms/tests/queries/0_stateless/00681_duplicate_columns_inside_union_all_stas_sviridov.sql +++ b/dbms/tests/queries/0_stateless/00681_duplicate_columns_inside_union_all_stas_sviridov.sql @@ -1,14 +1,14 @@ -DROP TABLE IF EXISTS test.test; +DROP TABLE IF EXISTS test; -CREATE TABLE test.test(x Int32) ENGINE = Log; -INSERT INTO test.test VALUES (123); +CREATE TABLE test(x Int32) ENGINE = Log; +INSERT INTO test VALUES (123); SELECT a1 FROM ( - SELECT x AS a1, x AS a2 FROM test.test + SELECT x AS a1, x AS a2 FROM test UNION ALL - SELECT x, x FROM test.test + SELECT x, x FROM test ); -DROP TABLE test.test; +DROP TABLE test; diff --git a/dbms/tests/queries/0_stateless/00682_empty_parts_merge.sh b/dbms/tests/queries/0_stateless/00682_empty_parts_merge.sh index 9cbdc68c1b1..3f9530b92c8 100755 --- a/dbms/tests/queries/0_stateless/00682_empty_parts_merge.sh +++ b/dbms/tests/queries/0_stateless/00682_empty_parts_merge.sh @@ -6,111 +6,111 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/mergetree_mutations.lib -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.ordinary" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.ordinary(k UInt32) ENGINE MergeTree ORDER BY k" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS ordinary" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE ordinary(k UInt32) ENGINE MergeTree ORDER BY k" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.ordinary(k) VALUES (1)" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.ordinary(k) VALUES (1)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO ordinary(k) VALUES (1)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO ordinary(k) VALUES (1)" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.ordinary DELETE WHERE k = 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE ordinary DELETE WHERE k = 1" wait_for_mutation "ordinary" "mutation_3.txt" -${CLICKHOUSE_CLIENT} --query="OPTIMIZE TABLE test.ordinary PARTITION tuple() FINAL" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.ordinary" +${CLICKHOUSE_CLIENT} --query="OPTIMIZE TABLE ordinary PARTITION tuple() FINAL" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM ordinary" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.ordinary" +${CLICKHOUSE_CLIENT} --query="DROP TABLE ordinary" ${CLICKHOUSE_CLIENT} --query="SELECT '*** Vertical merge ***'" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.vertical" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.vertical(k UInt32, v UInt32) ENGINE MergeTree ORDER BY k \ +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS vertical" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE vertical(k UInt32, v UInt32) ENGINE MergeTree ORDER BY k \ SETTINGS enable_vertical_merge_algorithm=1, \ vertical_merge_algorithm_min_rows_to_activate=0, \ vertical_merge_algorithm_min_columns_to_activate=0" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.vertical(k, v) VALUES (1, 1)" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.vertical(k, v) VALUES (2, 2)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO vertical(k, v) VALUES (1, 1)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO vertical(k, v) VALUES (2, 2)" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.vertical DELETE WHERE k = 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE vertical DELETE WHERE k = 1" wait_for_mutation "vertical" "mutation_3.txt" -${CLICKHOUSE_CLIENT} --query="OPTIMIZE TABLE test.vertical PARTITION tuple() FINAL" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.vertical" +${CLICKHOUSE_CLIENT} --query="OPTIMIZE TABLE vertical PARTITION tuple() FINAL" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM vertical" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.vertical" +${CLICKHOUSE_CLIENT} --query="DROP TABLE vertical" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.summing" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.summing(k UInt32, v UInt32) ENGINE SummingMergeTree ORDER BY k" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS summing" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE summing(k UInt32, v UInt32) ENGINE SummingMergeTree ORDER BY k" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.summing(k, v) VALUES (1, 1)" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.summing(k, v) VALUES (1, 2)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO summing(k, v) VALUES (1, 1)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO summing(k, v) VALUES (1, 2)" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.summing DELETE WHERE k = 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE summing DELETE WHERE k = 1" wait_for_mutation "summing" "mutation_3.txt" -${CLICKHOUSE_CLIENT} --query="OPTIMIZE TABLE test.summing PARTITION tuple() FINAL" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.summing" +${CLICKHOUSE_CLIENT} --query="OPTIMIZE TABLE summing PARTITION tuple() FINAL" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM summing" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.summing" +${CLICKHOUSE_CLIENT} --query="DROP TABLE summing" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.aggregating" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.aggregating(k UInt32, v AggregateFunction(count)) ENGINE AggregatingMergeTree ORDER BY k" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS aggregating" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE aggregating(k UInt32, v AggregateFunction(count)) ENGINE AggregatingMergeTree ORDER BY k" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.aggregating(k) VALUES (1)" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.aggregating(k) VALUES (1)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO aggregating(k) VALUES (1)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO aggregating(k) VALUES (1)" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.aggregating DELETE WHERE k = 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE aggregating DELETE WHERE k = 1" wait_for_mutation "aggregating" "mutation_3.txt" -${CLICKHOUSE_CLIENT} --query="OPTIMIZE TABLE test.aggregating PARTITION tuple() FINAL" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.aggregating" +${CLICKHOUSE_CLIENT} --query="OPTIMIZE TABLE aggregating PARTITION tuple() FINAL" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM aggregating" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.aggregating" +${CLICKHOUSE_CLIENT} --query="DROP TABLE aggregating" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.replacing" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.replacing(k UInt32, v String) ENGINE ReplacingMergeTree ORDER BY k" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS replacing" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE replacing(k UInt32, v String) ENGINE ReplacingMergeTree ORDER BY k" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.replacing(k, v) VALUES (1, 'a')" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.replacing(k, v) VALUES (1, 'b')" +${CLICKHOUSE_CLIENT} --query="INSERT INTO replacing(k, v) VALUES (1, 'a')" +${CLICKHOUSE_CLIENT} --query="INSERT INTO replacing(k, v) VALUES (1, 'b')" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.replacing DELETE WHERE k = 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE replacing DELETE WHERE k = 1" wait_for_mutation "replacing" "mutation_3.txt" -${CLICKHOUSE_CLIENT} --query="OPTIMIZE TABLE test.replacing PARTITION tuple() FINAL" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.replacing" +${CLICKHOUSE_CLIENT} --query="OPTIMIZE TABLE replacing PARTITION tuple() FINAL" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM replacing" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.replacing" +${CLICKHOUSE_CLIENT} --query="DROP TABLE replacing" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.collapsing" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.collapsing(k UInt32, v String, s Int8) ENGINE CollapsingMergeTree(s) ORDER BY k" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS collapsing" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE collapsing(k UInt32, v String, s Int8) ENGINE CollapsingMergeTree(s) ORDER BY k" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.collapsing(k, v, s) VALUES (1, 'a', 1)" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.collapsing(k, v, s) VALUES (2, 'b', 1)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO collapsing(k, v, s) VALUES (1, 'a', 1)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO collapsing(k, v, s) VALUES (2, 'b', 1)" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.collapsing DELETE WHERE k IN (1, 2)" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE collapsing DELETE WHERE k IN (1, 2)" wait_for_mutation "collapsing" "mutation_3.txt" -${CLICKHOUSE_CLIENT} --query="OPTIMIZE TABLE test.collapsing PARTITION tuple() FINAL" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.collapsing" +${CLICKHOUSE_CLIENT} --query="OPTIMIZE TABLE collapsing PARTITION tuple() FINAL" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM collapsing" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.collapsing" +${CLICKHOUSE_CLIENT} --query="DROP TABLE collapsing" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.versioned_collapsing" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.versioned_collapsing(k UInt32, val String, ver UInt32, s Int8) ENGINE VersionedCollapsingMergeTree(s, ver) ORDER BY k" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS versioned_collapsing" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE versioned_collapsing(k UInt32, val String, ver UInt32, s Int8) ENGINE VersionedCollapsingMergeTree(s, ver) ORDER BY k" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.versioned_collapsing(k, val, ver, s) VALUES (1, 'a', 0, 1)" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.versioned_collapsing(k, val, ver, s) VALUES (2, 'b', 0, 1)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO versioned_collapsing(k, val, ver, s) VALUES (1, 'a', 0, 1)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO versioned_collapsing(k, val, ver, s) VALUES (2, 'b', 0, 1)" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.versioned_collapsing DELETE WHERE k IN (1, 2)" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE versioned_collapsing DELETE WHERE k IN (1, 2)" wait_for_mutation "versioned_collapsing" "mutation_3.txt" -${CLICKHOUSE_CLIENT} --query="OPTIMIZE TABLE test.versioned_collapsing PARTITION tuple() FINAL" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.versioned_collapsing" +${CLICKHOUSE_CLIENT} --query="OPTIMIZE TABLE versioned_collapsing PARTITION tuple() FINAL" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM versioned_collapsing" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.versioned_collapsing" +${CLICKHOUSE_CLIENT} --query="DROP TABLE versioned_collapsing" diff --git a/dbms/tests/queries/0_stateless/00686_client_exit_code.sh b/dbms/tests/queries/0_stateless/00686_client_exit_code.sh index 996dac1b6bc..41b6de99236 100755 --- a/dbms/tests/queries/0_stateless/00686_client_exit_code.sh +++ b/dbms/tests/queries/0_stateless/00686_client_exit_code.sh @@ -5,5 +5,5 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/mergetree_mutations.lib -echo "INSERT INTO test.test FORMAT CSV" | ${CLICKHOUSE_CLIENT} -n 2>/dev/null +echo "INSERT INTO test FORMAT CSV" | ${CLICKHOUSE_CLIENT} -n 2>/dev/null echo $? diff --git a/dbms/tests/queries/0_stateless/00687_insert_into_mv.sql b/dbms/tests/queries/0_stateless/00687_insert_into_mv.sql index 62353839e9a..54e92efaabf 100644 --- a/dbms/tests/queries/0_stateless/00687_insert_into_mv.sql +++ b/dbms/tests/queries/0_stateless/00687_insert_into_mv.sql @@ -1,31 +1,31 @@ -DROP TABLE IF EXISTS test.test; -DROP TABLE IF EXISTS test.mv_bad; -DROP TABLE IF EXISTS test.mv_good; -DROP TABLE IF EXISTS test.mv_group; +DROP TABLE IF EXISTS test; +DROP TABLE IF EXISTS mv_bad; +DROP TABLE IF EXISTS mv_good; +DROP TABLE IF EXISTS mv_group; -CREATE TABLE test.test (x String) ENGINE = Null; +CREATE TABLE test (x String) ENGINE = Null; -create MATERIALIZED VIEW test.mv_bad (x String) +create MATERIALIZED VIEW mv_bad (x String) ENGINE = MergeTree Partition by tuple() order by tuple() -AS SELECT DISTINCT x FROM test.test; +AS SELECT DISTINCT x FROM test; -create MATERIALIZED VIEW test.mv_good (x String) +create MATERIALIZED VIEW mv_good (x String) ENGINE = MergeTree Partition by tuple() order by tuple() -AS SELECT x FROM test.test; +AS SELECT x FROM test; -create MATERIALIZED VIEW test.mv_group (x String) +create MATERIALIZED VIEW mv_group (x String) ENGINE = MergeTree Partition by tuple() order by tuple() -AS SELECT x FROM test.test group by x; +AS SELECT x FROM test group by x; -insert into test.test values ('stest'), ('stest'); +insert into test values ('stest'), ('stest'); -select * from test.mv_bad; +select * from mv_bad; SELECT '---'; -select * from test.mv_good; +select * from mv_good; SELECT '---'; -select * from test.mv_group; +select * from mv_group; -DROP TABLE test.mv_bad; -DROP TABLE test.mv_good; -DROP TABLE test.mv_group; -DROP TABLE test.test; +DROP TABLE mv_bad; +DROP TABLE mv_good; +DROP TABLE mv_group; +DROP TABLE test; diff --git a/dbms/tests/queries/0_stateless/00687_top_and_offset.sh b/dbms/tests/queries/0_stateless/00687_top_and_offset.sh index 47b20f343eb..e061503db8d 100755 --- a/dbms/tests/queries/0_stateless/00687_top_and_offset.sh +++ b/dbms/tests/queries/0_stateless/00687_top_and_offset.sh @@ -4,25 +4,25 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.test;" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test;" -${CLICKHOUSE_CLIENT} --query "CREATE TABLE test.test(val Int64) engine = Memory;" +${CLICKHOUSE_CLIENT} --query "CREATE TABLE test(val Int64) engine = Memory;" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.test VALUES (1);" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.test VALUES (2);" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.test VALUES (3);" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.test VALUES (4);" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.test VALUES (5);" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.test VALUES (6);" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.test VALUES (7);" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.test VALUES (8);" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.test VALUES (9);" +${CLICKHOUSE_CLIENT} --query "INSERT INTO test VALUES (1);" +${CLICKHOUSE_CLIENT} --query "INSERT INTO test VALUES (2);" +${CLICKHOUSE_CLIENT} --query "INSERT INTO test VALUES (3);" +${CLICKHOUSE_CLIENT} --query "INSERT INTO test VALUES (4);" +${CLICKHOUSE_CLIENT} --query "INSERT INTO test VALUES (5);" +${CLICKHOUSE_CLIENT} --query "INSERT INTO test VALUES (6);" +${CLICKHOUSE_CLIENT} --query "INSERT INTO test VALUES (7);" +${CLICKHOUSE_CLIENT} --query "INSERT INTO test VALUES (8);" +${CLICKHOUSE_CLIENT} --query "INSERT INTO test VALUES (9);" -${CLICKHOUSE_CLIENT} --query "SELECT TOP 2 * FROM test.test ORDER BY val;" -${CLICKHOUSE_CLIENT} --query "SELECT TOP (2) * FROM test.test ORDER BY val;" -${CLICKHOUSE_CLIENT} --query "SELECT * FROM test.test ORDER BY val LIMIT 2 OFFSET 2;" +${CLICKHOUSE_CLIENT} --query "SELECT TOP 2 * FROM test ORDER BY val;" +${CLICKHOUSE_CLIENT} --query "SELECT TOP (2) * FROM test ORDER BY val;" +${CLICKHOUSE_CLIENT} --query "SELECT * FROM test ORDER BY val LIMIT 2 OFFSET 2;" -echo `${CLICKHOUSE_CLIENT} --query "SELECT TOP 2 * FROM test.test ORDER BY val LIMIT 2;" 2>&1 | grep -c "Code: 406"` -echo `${CLICKHOUSE_CLIENT} --query "SELECT * FROM test.test ORDER BY val LIMIT 2,3 OFFSET 2;" 2>&1 | grep -c "Code: 62"` +echo `${CLICKHOUSE_CLIENT} --query "SELECT TOP 2 * FROM test ORDER BY val LIMIT 2;" 2>&1 | grep -c "Code: 406"` +echo `${CLICKHOUSE_CLIENT} --query "SELECT * FROM test ORDER BY val LIMIT 2,3 OFFSET 2;" 2>&1 | grep -c "Code: 62"` -${CLICKHOUSE_CLIENT} --query "DROP TABLE test.test;" +${CLICKHOUSE_CLIENT} --query "DROP TABLE test;" diff --git a/dbms/tests/queries/0_stateless/00688_case_without_else.sql b/dbms/tests/queries/0_stateless/00688_case_without_else.sql index acbb7bfb8f5..0b30eae601b 100644 --- a/dbms/tests/queries/0_stateless/00688_case_without_else.sql +++ b/dbms/tests/queries/0_stateless/00688_case_without_else.sql @@ -1,9 +1,9 @@ -DROP TABLE IF EXISTS test.test; +DROP TABLE IF EXISTS test; -CREATE TABLE test.test (a UInt8) ENGINE = Memory; +CREATE TABLE test (a UInt8) ENGINE = Memory; -INSERT INTO test.test VALUES (1), (2), (1), (3); +INSERT INTO test VALUES (1), (2), (1), (3); -SELECT CASE WHEN a=1 THEN 0 END FROM test.test; +SELECT CASE WHEN a=1 THEN 0 END FROM test; -DROP TABLE test.test; +DROP TABLE test; diff --git a/dbms/tests/queries/0_stateless/00688_low_cardinality_alter_add_column.sql b/dbms/tests/queries/0_stateless/00688_low_cardinality_alter_add_column.sql index d8b557dcb4c..8847ec223ea 100644 --- a/dbms/tests/queries/0_stateless/00688_low_cardinality_alter_add_column.sql +++ b/dbms/tests/queries/0_stateless/00688_low_cardinality_alter_add_column.sql @@ -1,6 +1,6 @@ -drop table if exists test.cardinality; -create table test.cardinality (x String) engine = MergeTree order by tuple(); -insert into test.cardinality (x) select concat('v', toString(number)) from numbers(10); -alter table test.cardinality add column y LowCardinality(String); -select * from test.cardinality; -drop table if exists test.cardinality; +drop table if exists cardinality; +create table cardinality (x String) engine = MergeTree order by tuple(); +insert into cardinality (x) select concat('v', toString(number)) from numbers(10); +alter table cardinality add column y LowCardinality(String); +select * from cardinality; +drop table if exists cardinality; diff --git a/dbms/tests/queries/0_stateless/00688_low_cardinality_dictionary_deserialization.sql b/dbms/tests/queries/0_stateless/00688_low_cardinality_dictionary_deserialization.sql index 54d8b4954c7..5a169403872 100644 --- a/dbms/tests/queries/0_stateless/00688_low_cardinality_dictionary_deserialization.sql +++ b/dbms/tests/queries/0_stateless/00688_low_cardinality_dictionary_deserialization.sql @@ -1,6 +1,6 @@ -drop table if exists test.lc_dict_reading; -create table test.lc_dict_reading (val UInt64, str StringWithDictionary, pat String) engine = MergeTree order by val; -insert into test.lc_dict_reading select number, if(number < 8192 * 4, number % 100, number) as s, s from system.numbers limit 1000000; -select sum(toUInt64(str)), sum(toUInt64(pat)) from test.lc_dict_reading where val < 8129 or val > 8192 * 4; -drop table if exists test.lc_dict_reading; +drop table if exists lc_dict_reading; +create table lc_dict_reading (val UInt64, str StringWithDictionary, pat String) engine = MergeTree order by val; +insert into lc_dict_reading select number, if(number < 8192 * 4, number % 100, number) as s, s from system.numbers limit 1000000; +select sum(toUInt64(str)), sum(toUInt64(pat)) from lc_dict_reading where val < 8129 or val > 8192 * 4; +drop table if exists lc_dict_reading; diff --git a/dbms/tests/queries/0_stateless/00688_low_cardinality_in.sql b/dbms/tests/queries/0_stateless/00688_low_cardinality_in.sql index ce65db892b2..d8f59f57dce 100644 --- a/dbms/tests/queries/0_stateless/00688_low_cardinality_in.sql +++ b/dbms/tests/queries/0_stateless/00688_low_cardinality_in.sql @@ -1,10 +1,10 @@ -drop table if exists test.lc; -create table test.lc (str StringWithDictionary, val UInt8WithDictionary) engine = MergeTree order by tuple(); -insert into test.lc values ('a', 1), ('b', 2); -select str, str in ('a', 'd') from test.lc; -select val, val in (1, 3) from test.lc; -select str, str in (select arrayJoin(['a', 'd'])) from test.lc; -select val, val in (select arrayJoin([1, 3])) from test.lc; -select str, str in (select str from test.lc) from test.lc; -select val, val in (select val from test.lc) from test.lc; -drop table if exists test.lc; +drop table if exists lc; +create table lc (str StringWithDictionary, val UInt8WithDictionary) engine = MergeTree order by tuple(); +insert into lc values ('a', 1), ('b', 2); +select str, str in ('a', 'd') from lc; +select val, val in (1, 3) from lc; +select str, str in (select arrayJoin(['a', 'd'])) from lc; +select val, val in (select arrayJoin([1, 3])) from lc; +select str, str in (select str from lc) from lc; +select val, val in (select val from lc) from lc; +drop table if exists lc; diff --git a/dbms/tests/queries/0_stateless/00688_low_cardinality_nullable_cast.sql b/dbms/tests/queries/0_stateless/00688_low_cardinality_nullable_cast.sql index 5a6d925a4d3..1248374aacc 100644 --- a/dbms/tests/queries/0_stateless/00688_low_cardinality_nullable_cast.sql +++ b/dbms/tests/queries/0_stateless/00688_low_cardinality_nullable_cast.sql @@ -1,11 +1,11 @@ SELECT CAST(NULL, 'LowCardinality(Nullable(Int8))'); -drop table if exists test.lc_null_int8_defnull; -CREATE TABLE test.lc_null_int8_defnull (val LowCardinality(Nullable(Int8)) DEFAULT NULL) ENGINE = MergeTree order by tuple(); -insert into test.lc_null_int8_defnull values (1); -select * from test.lc_null_int8_defnull values; -alter table test.lc_null_int8_defnull add column val2 LowCardinality(Nullable(Int8)) DEFAULT NULL; -insert into test.lc_null_int8_defnull values (2, 3); -select * from test.lc_null_int8_defnull order by val; -drop table if exists test.lc_null_int8_defnull; +drop table if exists lc_null_int8_defnull; +CREATE TABLE lc_null_int8_defnull (val LowCardinality(Nullable(Int8)) DEFAULT NULL) ENGINE = MergeTree order by tuple(); +insert into lc_null_int8_defnull values (1); +select * from lc_null_int8_defnull values; +alter table lc_null_int8_defnull add column val2 LowCardinality(Nullable(Int8)) DEFAULT NULL; +insert into lc_null_int8_defnull values (2, 3); +select * from lc_null_int8_defnull order by val; +drop table if exists lc_null_int8_defnull; diff --git a/dbms/tests/queries/0_stateless/00688_low_cardinality_prewhere.sql b/dbms/tests/queries/0_stateless/00688_low_cardinality_prewhere.sql index 3f3c42b190f..a15b2540fe6 100644 --- a/dbms/tests/queries/0_stateless/00688_low_cardinality_prewhere.sql +++ b/dbms/tests/queries/0_stateless/00688_low_cardinality_prewhere.sql @@ -1,5 +1,5 @@ -drop table if exists test.lc_prewhere; -create table test.lc_prewhere (key UInt64, val UInt64, str StringWithDictionary, s String) engine = MergeTree order by key settings index_granularity = 8192; -insert into test.lc_prewhere select number, if(number < 10 or number > 8192 * 9, 1, 0), toString(number) as s, s from system.numbers limit 100000; -select sum(toUInt64(str)), sum(toUInt64(s)) from test.lc_prewhere prewhere val == 1; -drop table if exists test.lc_prewhere; +drop table if exists lc_prewhere; +create table lc_prewhere (key UInt64, val UInt64, str StringWithDictionary, s String) engine = MergeTree order by key settings index_granularity = 8192; +insert into lc_prewhere select number, if(number < 10 or number > 8192 * 9, 1, 0), toString(number) as s, s from system.numbers limit 100000; +select sum(toUInt64(str)), sum(toUInt64(s)) from lc_prewhere prewhere val == 1; +drop table if exists lc_prewhere; diff --git a/dbms/tests/queries/0_stateless/00688_low_cardinality_serialization.sql b/dbms/tests/queries/0_stateless/00688_low_cardinality_serialization.sql index 7dedb78785c..74788122aee 100644 --- a/dbms/tests/queries/0_stateless/00688_low_cardinality_serialization.sql +++ b/dbms/tests/queries/0_stateless/00688_low_cardinality_serialization.sql @@ -5,24 +5,24 @@ select toTypeName(dict), dict, lowCardinalityIndices(dict), lowCardinalityKeys(d select 'MergeTree'; -drop table if exists test.lc_small_dict; -drop table if exists test.lc_big_dict; +drop table if exists lc_small_dict; +drop table if exists lc_big_dict; -create table test.lc_small_dict (str StringWithDictionary) engine = MergeTree order by str; -create table test.lc_big_dict (str StringWithDictionary) engine = MergeTree order by str; +create table lc_small_dict (str StringWithDictionary) engine = MergeTree order by str; +create table lc_big_dict (str StringWithDictionary) engine = MergeTree order by str; -insert into test.lc_small_dict select toString(number % 1000) from system.numbers limit 1000000; -insert into test.lc_big_dict select toString(number) from system.numbers limit 1000000; +insert into lc_small_dict select toString(number % 1000) from system.numbers limit 1000000; +insert into lc_big_dict select toString(number) from system.numbers limit 1000000; -detach table test.lc_small_dict; -detach table test.lc_big_dict; +detach table lc_small_dict; +detach table lc_big_dict; -attach table test.lc_small_dict; -attach table test.lc_big_dict; +attach table lc_small_dict; +attach table lc_big_dict; -select sum(toUInt64OrZero(str)) from test.lc_small_dict; -select sum(toUInt64OrZero(str)) from test.lc_big_dict; +select sum(toUInt64OrZero(str)) from lc_small_dict; +select sum(toUInt64OrZero(str)) from lc_big_dict; -drop table if exists test.lc_small_dict; -drop table if exists test.lc_big_dict; +drop table if exists lc_small_dict; +drop table if exists lc_big_dict; diff --git a/dbms/tests/queries/0_stateless/00688_low_cardinality_syntax.sql b/dbms/tests/queries/0_stateless/00688_low_cardinality_syntax.sql index a048cbc83ad..f1c41be16bc 100644 --- a/dbms/tests/queries/0_stateless/00688_low_cardinality_syntax.sql +++ b/dbms/tests/queries/0_stateless/00688_low_cardinality_syntax.sql @@ -1,67 +1,67 @@ -drop table if exists test.lc_str_0; -drop table if exists test.lc_str_1; -drop table if exists test.lc_null_str_0; -drop table if exists test.lc_null_str_1; -drop table if exists test.lc_int8_0; -drop table if exists test.lc_int8_1; -drop table if exists test.lc_null_int8_0; -drop table if exists test.lc_null_int8_1; -drop table if exists test.lc_fix_str_0; -drop table if exists test.lc_fix_str_1; -drop table if exists test.lc_null_fix_str_0; -drop table if exists test.lc_null_fix_str_1; +drop table if exists lc_str_0; +drop table if exists lc_str_1; +drop table if exists lc_null_str_0; +drop table if exists lc_null_str_1; +drop table if exists lc_int8_0; +drop table if exists lc_int8_1; +drop table if exists lc_null_int8_0; +drop table if exists lc_null_int8_1; +drop table if exists lc_fix_str_0; +drop table if exists lc_fix_str_1; +drop table if exists lc_null_fix_str_0; +drop table if exists lc_null_fix_str_1; -create table test.lc_str_0 (str LowCardinality(String)) engine = Memory; -create table test.lc_str_1 (str StringWithDictionary) engine = Memory; -create table test.lc_null_str_0 (str LowCardinality(Nullable(String))) engine = Memory; -create table test.lc_null_str_1 (str NullableWithDictionary(String)) engine = Memory; -create table test.lc_int8_0 (val LowCardinality(Int8)) engine = Memory; -create table test.lc_int8_1 (val Int8WithDictionary) engine = Memory; -create table test.lc_null_int8_0 (val LowCardinality(Nullable(Int8))) engine = Memory; -create table test.lc_null_int8_1 (val NullableWithDictionary(Int8)) engine = Memory; -create table test.lc_fix_str_0 (str LowCardinality(FixedString(2))) engine = Memory; -create table test.lc_fix_str_1 (str FixedStringWithDictionary(2)) engine = Memory; -create table test.lc_null_fix_str_0 (str LowCardinality(Nullable(FixedString(2)))) engine = Memory; -create table test.lc_null_fix_str_1 (str NullableWithDictionary(FixedString(2))) engine = Memory; +create table lc_str_0 (str LowCardinality(String)) engine = Memory; +create table lc_str_1 (str StringWithDictionary) engine = Memory; +create table lc_null_str_0 (str LowCardinality(Nullable(String))) engine = Memory; +create table lc_null_str_1 (str NullableWithDictionary(String)) engine = Memory; +create table lc_int8_0 (val LowCardinality(Int8)) engine = Memory; +create table lc_int8_1 (val Int8WithDictionary) engine = Memory; +create table lc_null_int8_0 (val LowCardinality(Nullable(Int8))) engine = Memory; +create table lc_null_int8_1 (val NullableWithDictionary(Int8)) engine = Memory; +create table lc_fix_str_0 (str LowCardinality(FixedString(2))) engine = Memory; +create table lc_fix_str_1 (str FixedStringWithDictionary(2)) engine = Memory; +create table lc_null_fix_str_0 (str LowCardinality(Nullable(FixedString(2)))) engine = Memory; +create table lc_null_fix_str_1 (str NullableWithDictionary(FixedString(2))) engine = Memory; -insert into test.lc_str_0 select 'a'; -insert into test.lc_str_1 select 'a'; -insert into test.lc_null_str_0 select 'a'; -insert into test.lc_null_str_1 select 'a'; -insert into test.lc_int8_0 select 1; -insert into test.lc_int8_1 select 1; -insert into test.lc_null_int8_0 select 1; -insert into test.lc_null_int8_1 select 1; -insert into test.lc_fix_str_0 select 'ab'; -insert into test.lc_fix_str_1 select 'ab'; -insert into test.lc_null_fix_str_0 select 'ab'; -insert into test.lc_null_fix_str_1 select 'ab'; +insert into lc_str_0 select 'a'; +insert into lc_str_1 select 'a'; +insert into lc_null_str_0 select 'a'; +insert into lc_null_str_1 select 'a'; +insert into lc_int8_0 select 1; +insert into lc_int8_1 select 1; +insert into lc_null_int8_0 select 1; +insert into lc_null_int8_1 select 1; +insert into lc_fix_str_0 select 'ab'; +insert into lc_fix_str_1 select 'ab'; +insert into lc_null_fix_str_0 select 'ab'; +insert into lc_null_fix_str_1 select 'ab'; -select str from test.lc_str_0; -select str from test.lc_str_1; -select str from test.lc_null_str_0; -select str from test.lc_null_str_1; -select val from test.lc_int8_0; -select val from test.lc_int8_1; -select val from test.lc_null_int8_0; -select val from test.lc_null_int8_1; -select str from test.lc_fix_str_0; -select str from test.lc_fix_str_1; -select str from test.lc_null_fix_str_0; -select str from test.lc_null_fix_str_1; +select str from lc_str_0; +select str from lc_str_1; +select str from lc_null_str_0; +select str from lc_null_str_1; +select val from lc_int8_0; +select val from lc_int8_1; +select val from lc_null_int8_0; +select val from lc_null_int8_1; +select str from lc_fix_str_0; +select str from lc_fix_str_1; +select str from lc_null_fix_str_0; +select str from lc_null_fix_str_1; -drop table if exists test.lc_str_0; -drop table if exists test.lc_str_1; -drop table if exists test.lc_null_str_0; -drop table if exists test.lc_null_str_1; -drop table if exists test.lc_int8_0; -drop table if exists test.lc_int8_1; -drop table if exists test.lc_null_int8_0; -drop table if exists test.lc_null_int8_1; -drop table if exists test.lc_fix_str_0; -drop table if exists test.lc_fix_str_1; -drop table if exists test.lc_null_fix_str_0; -drop table if exists test.lc_null_fix_str_1; +drop table if exists lc_str_0; +drop table if exists lc_str_1; +drop table if exists lc_null_str_0; +drop table if exists lc_null_str_1; +drop table if exists lc_int8_0; +drop table if exists lc_int8_1; +drop table if exists lc_null_int8_0; +drop table if exists lc_null_int8_1; +drop table if exists lc_fix_str_0; +drop table if exists lc_fix_str_1; +drop table if exists lc_null_fix_str_0; +drop table if exists lc_null_fix_str_1; select '-'; SELECT toLowCardinality('a') AS s, toTypeName(s), toTypeName(length(s)) from system.one; diff --git a/dbms/tests/queries/0_stateless/00689_catboost_pool_files.sh b/dbms/tests/queries/0_stateless/00689_catboost_pool_files.sh index ec5161574f7..b859a7c3e34 100755 --- a/dbms/tests/queries/0_stateless/00689_catboost_pool_files.sh +++ b/dbms/tests/queries/0_stateless/00689_catboost_pool_files.sh @@ -3,22 +3,22 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -${CLICKHOUSE_CLIENT} --query="drop table if exists test.catboost_pool_desc;" -${CLICKHOUSE_CLIENT} --query="drop table if exists test.catboost_pool_vals;" -${CLICKHOUSE_CLIENT} --query="create table test.catboost_pool_desc (id String, type String) engine = File(TSV);" -${CLICKHOUSE_CLIENT} --query="insert into test.catboost_pool_desc select '0', 'Categ';" -${CLICKHOUSE_CLIENT} --query="create table test.catboost_pool_vals (str String) engine = File(TSV);" -${CLICKHOUSE_CLIENT} --query="insert into test.catboost_pool_vals select 'Hello';" -${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/test/catboost_pool_desc/data.TSV', 'data/test/catboost_pool_vals/data.TSV');" +${CLICKHOUSE_CLIENT} --query="drop table if exists catboost_pool_desc;" +${CLICKHOUSE_CLIENT} --query="drop table if exists catboost_pool_vals;" +${CLICKHOUSE_CLIENT} --query="create table catboost_pool_desc (id String, type String) engine = File(TSV);" +${CLICKHOUSE_CLIENT} --query="insert into catboost_pool_desc select '0', 'Categ';" +${CLICKHOUSE_CLIENT} --query="create table catboost_pool_vals (str String) engine = File(TSV);" +${CLICKHOUSE_CLIENT} --query="insert into catboost_pool_vals select 'Hello';" +${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/${CLICKHOUSE_DATABASE}/catboost_pool_desc/data.TSV', 'data/${CLICKHOUSE_DATABASE}/catboost_pool_vals/data.TSV');" -${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/test/catboost_pool_desc/data.TSV', '${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" -${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/test/catboost_pool_desc/data.TSV', '../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" -${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/test/catboost_pool_desc/data.TSV', '../../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" -${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/test/catboost_pool_desc/data.TSV', '../../../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" -${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/test/catboost_pool_desc/data.TSV', '../../../../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" -${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/test/catboost_pool_desc/data.TSV', '../../../../../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" -${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/test/catboost_pool_desc/data.TSV', '../../../../../../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" -${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/test/catboost_pool_desc/data.TSV', '../../../../../../../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" +${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/${CLICKHOUSE_DATABASE}/catboost_pool_desc/data.TSV', '${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" +${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/${CLICKHOUSE_DATABASE}/catboost_pool_desc/data.TSV', '../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" +${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/${CLICKHOUSE_DATABASE}/catboost_pool_desc/data.TSV', '../../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" +${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/${CLICKHOUSE_DATABASE}/catboost_pool_desc/data.TSV', '../../../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" +${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/${CLICKHOUSE_DATABASE}/catboost_pool_desc/data.TSV', '../../../../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" +${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/${CLICKHOUSE_DATABASE}/catboost_pool_desc/data.TSV', '../../../../../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" +${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/${CLICKHOUSE_DATABASE}/catboost_pool_desc/data.TSV', '../../../../../../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" +${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('data/${CLICKHOUSE_DATABASE}/catboost_pool_desc/data.TSV', '../../../../../../../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" ${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('${CURDIR}/00689_file.txt', '${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" ${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('../${CURDIR}/00689_file.txt', '../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" @@ -28,5 +28,5 @@ ${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('../../../../${CURDIR}/ ${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('../../../../../${CURDIR}/00689_file.txt', '../../../../../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" ${CLICKHOUSE_CLIENT} --query="select * from catBoostPool('../../../../../../${CURDIR}/00689_file.txt', '../../../../../../${CURDIR}/00689_file.txt');" 2>&1 | grep -o "Data" -${CLICKHOUSE_CLIENT} --query="drop table if exists test.catboost_pool_desc;" -${CLICKHOUSE_CLIENT} --query="drop table if exists test.catboost_pool_vals;" +${CLICKHOUSE_CLIENT} --query="drop table if exists catboost_pool_desc;" +${CLICKHOUSE_CLIENT} --query="drop table if exists catboost_pool_vals;" diff --git a/dbms/tests/queries/0_stateless/00690_insert_select_converting_exception_message.sh b/dbms/tests/queries/0_stateless/00690_insert_select_converting_exception_message.sh index dfee76df7c5..e9661babed6 100755 --- a/dbms/tests/queries/0_stateless/00690_insert_select_converting_exception_message.sh +++ b/dbms/tests/queries/0_stateless/00690_insert_select_converting_exception_message.sh @@ -5,11 +5,11 @@ CLICKHOUSE_CLIENT_SERVER_LOGS_LEVEL=none CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.test;" -${CLICKHOUSE_CLIENT} --query "CREATE TABLE test.test (val Int64) engine = Memory;" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test;" +${CLICKHOUSE_CLIENT} --query "CREATE TABLE test (val Int64) engine = Memory;" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.test SELECT 1;" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.test SELECT NULL AS src;" 2>&1 | grep -oF 'while converting source column src to destination column val'; -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.test SELECT number % 2 ? 1 : NULL AS src FROM numbers(10);" 2>&1 | grep -oF 'while converting source column src to destination column val'; +${CLICKHOUSE_CLIENT} --query "INSERT INTO test SELECT 1;" +${CLICKHOUSE_CLIENT} --query "INSERT INTO test SELECT NULL AS src;" 2>&1 | grep -oF 'while converting source column src to destination column val'; +${CLICKHOUSE_CLIENT} --query "INSERT INTO test SELECT number % 2 ? 1 : NULL AS src FROM numbers(10);" 2>&1 | grep -oF 'while converting source column src to destination column val'; -${CLICKHOUSE_CLIENT} --query "DROP TABLE test.test;" +${CLICKHOUSE_CLIENT} --query "DROP TABLE test;" diff --git a/dbms/tests/queries/0_stateless/00698_validate_array_sizes_for_nested.sql b/dbms/tests/queries/0_stateless/00698_validate_array_sizes_for_nested.sql index 5971b2ed389..1e5b2a45d1a 100644 --- a/dbms/tests/queries/0_stateless/00698_validate_array_sizes_for_nested.sql +++ b/dbms/tests/queries/0_stateless/00698_validate_array_sizes_for_nested.sql @@ -1,12 +1,12 @@ SET send_logs_level = 'none'; -DROP TABLE IF EXISTS test.mergetree; -CREATE TABLE test.mergetree (k UInt32, `n.x` Array(UInt64), `n.y` Array(UInt64)) ENGINE = MergeTree ORDER BY k; +DROP TABLE IF EXISTS mergetree; +CREATE TABLE mergetree (k UInt32, `n.x` Array(UInt64), `n.y` Array(UInt64)) ENGINE = MergeTree ORDER BY k; -INSERT INTO test.mergetree VALUES (3, [], [1, 2, 3]), (1, [111], []), (2, [], []); -- { serverError 190 } -SELECT * FROM test.mergetree; +INSERT INTO mergetree VALUES (3, [], [1, 2, 3]), (1, [111], []), (2, [], []); -- { serverError 190 } +SELECT * FROM mergetree; -INSERT INTO test.mergetree VALUES (3, [4, 5, 6], [1, 2, 3]), (1, [111], [222]), (2, [], []); -SELECT * FROM test.mergetree; +INSERT INTO mergetree VALUES (3, [4, 5, 6], [1, 2, 3]), (1, [111], [222]), (2, [], []); +SELECT * FROM mergetree; -DROP TABLE test.mergetree; +DROP TABLE mergetree; diff --git a/dbms/tests/queries/0_stateless/00698_validate_array_sizes_for_nested_kshvakov.sql b/dbms/tests/queries/0_stateless/00698_validate_array_sizes_for_nested_kshvakov.sql index 0d15c7f9953..2d8dcc1f4f3 100644 --- a/dbms/tests/queries/0_stateless/00698_validate_array_sizes_for_nested_kshvakov.sql +++ b/dbms/tests/queries/0_stateless/00698_validate_array_sizes_for_nested_kshvakov.sql @@ -1,7 +1,7 @@ SET send_logs_level = 'none'; -DROP TABLE IF EXISTS test.Issue_2231_Invalid_Nested_Columns_Size; -CREATE TABLE test.Issue_2231_Invalid_Nested_Columns_Size ( +DROP TABLE IF EXISTS Issue_2231_Invalid_Nested_Columns_Size; +CREATE TABLE Issue_2231_Invalid_Nested_Columns_Size ( Date Date, NestedColumn Nested( ID Int32, @@ -11,7 +11,7 @@ CREATE TABLE test.Issue_2231_Invalid_Nested_Columns_Size ( PARTITION BY tuple() ORDER BY Date; -INSERT INTO test.Issue_2231_Invalid_Nested_Columns_Size VALUES (today(), [2,2], [1]), (today(), [2,2], [1, 1]); -- { serverError 190 } +INSERT INTO Issue_2231_Invalid_Nested_Columns_Size VALUES (today(), [2,2], [1]), (today(), [2,2], [1, 1]); -- { serverError 190 } -SELECT * FROM test.Issue_2231_Invalid_Nested_Columns_Size; -DROP TABLE test.Issue_2231_Invalid_Nested_Columns_Size; +SELECT * FROM Issue_2231_Invalid_Nested_Columns_Size; +DROP TABLE Issue_2231_Invalid_Nested_Columns_Size; diff --git a/dbms/tests/queries/0_stateless/00699_materialized_view_mutations.sh b/dbms/tests/queries/0_stateless/00699_materialized_view_mutations.sh index f191ec3b77e..f42c2fb00d1 100755 --- a/dbms/tests/queries/0_stateless/00699_materialized_view_mutations.sh +++ b/dbms/tests/queries/0_stateless/00699_materialized_view_mutations.sh @@ -8,44 +8,44 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) ${CLICKHOUSE_CLIENT} --multiquery --query=" -DROP TABLE IF EXISTS test.view; -DROP TABLE IF EXISTS test.null; +DROP TABLE IF EXISTS view; +DROP TABLE IF EXISTS null; -CREATE TABLE test.null (x UInt8) ENGINE = MergeTree ORDER BY tuple(); -CREATE MATERIALIZED VIEW test.view ENGINE = MergeTree ORDER BY tuple() AS SELECT * FROM test.null; +CREATE TABLE null (x UInt8) ENGINE = MergeTree ORDER BY tuple(); +CREATE MATERIALIZED VIEW view ENGINE = MergeTree ORDER BY tuple() AS SELECT * FROM null; -INSERT INTO test.null SELECT * FROM numbers(100); -SELECT count(), min(x), max(x) FROM test.null; -SELECT count(), min(x), max(x) FROM test.view; +INSERT INTO null SELECT * FROM numbers(100); +SELECT count(), min(x), max(x) FROM null; +SELECT count(), min(x), max(x) FROM view; -ALTER TABLE test.null DELETE WHERE x % 2 = 0;" +ALTER TABLE null DELETE WHERE x % 2 = 0;" wait_for_mutation null mutation_2.txt ${CLICKHOUSE_CLIENT} --multiquery --query=" -SELECT count(), min(x), max(x) FROM test.null; -SELECT count(), min(x), max(x) FROM test.view; +SELECT count(), min(x), max(x) FROM null; +SELECT count(), min(x), max(x) FROM view; -ALTER TABLE test.view DELETE WHERE x % 2 = 0; +ALTER TABLE view DELETE WHERE x % 2 = 0; " wait_for_mutation .inner.view mutation_2.txt ${CLICKHOUSE_CLIENT} --multiquery --query=" -SELECT count(), min(x), max(x) FROM test.null; -SELECT count(), min(x), max(x) FROM test.view; +SELECT count(), min(x), max(x) FROM null; +SELECT count(), min(x), max(x) FROM view; -ALTER TABLE test.null DELETE WHERE x % 2 = 1; -ALTER TABLE test.view DELETE WHERE x % 2 = 1; +ALTER TABLE null DELETE WHERE x % 2 = 1; +ALTER TABLE view DELETE WHERE x % 2 = 1; " wait_for_mutation null mutation_3.txt wait_for_mutation .inner.view mutation_3.txt ${CLICKHOUSE_CLIENT} --multiquery --query=" -SELECT count(), min(x), max(x) FROM test.null; -SELECT count(), min(x), max(x) FROM test.view; +SELECT count(), min(x), max(x) FROM null; +SELECT count(), min(x), max(x) FROM view; -DROP TABLE test.view; -DROP TABLE test.null; +DROP TABLE view; +DROP TABLE null; " diff --git a/dbms/tests/queries/0_stateless/00700_decimal_aggregates.sql b/dbms/tests/queries/0_stateless/00700_decimal_aggregates.sql index 0e482c9b109..7970c07b230 100644 --- a/dbms/tests/queries/0_stateless/00700_decimal_aggregates.sql +++ b/dbms/tests/queries/0_stateless/00700_decimal_aggregates.sql @@ -1,70 +1,70 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.decimal; +DROP TABLE IF EXISTS decimal; -CREATE TABLE test.decimal +CREATE TABLE decimal ( a Decimal32(4), b Decimal64(8), c Decimal128(8) ) ENGINE = Memory; -INSERT INTO test.decimal (a, b, c) +INSERT INTO decimal (a, b, c) SELECT toDecimal32(number - 50, 4), toDecimal64(number - 50, 8) / 3, toDecimal128(number - 50, 8) / 5 FROM system.numbers LIMIT 101; -SELECT count(a), count(b), count(c) FROM test.decimal; -SELECT [min(a), max(a)], [min(b), max(b)], [min(c), max(c)] FROM test.decimal; +SELECT count(a), count(b), count(c) FROM decimal; +SELECT [min(a), max(a)], [min(b), max(b)], [min(c), max(c)] FROM decimal; -SELECT sum(a), sum(b), sum(c), sumWithOverflow(a), sumWithOverflow(b), sumWithOverflow(c) FROM test.decimal; -SELECT sum(a), sum(b), sum(c), sumWithOverflow(a), sumWithOverflow(b), sumWithOverflow(c) FROM test.decimal WHERE a > 0; -SELECT sum(a), sum(b), sum(c), sumWithOverflow(a), sumWithOverflow(b), sumWithOverflow(c) FROM test.decimal WHERE a < 0; -SELECT sum(a+1), sum(b+1), sum(c+1), sumWithOverflow(a+1), sumWithOverflow(b+1), sumWithOverflow(c+1) FROM test.decimal; -SELECT sum(a-1), sum(b-1), sum(c-1), sumWithOverflow(a-1), sumWithOverflow(b-1), sumWithOverflow(c-1) FROM test.decimal; +SELECT sum(a), sum(b), sum(c), sumWithOverflow(a), sumWithOverflow(b), sumWithOverflow(c) FROM decimal; +SELECT sum(a), sum(b), sum(c), sumWithOverflow(a), sumWithOverflow(b), sumWithOverflow(c) FROM decimal WHERE a > 0; +SELECT sum(a), sum(b), sum(c), sumWithOverflow(a), sumWithOverflow(b), sumWithOverflow(c) FROM decimal WHERE a < 0; +SELECT sum(a+1), sum(b+1), sum(c+1), sumWithOverflow(a+1), sumWithOverflow(b+1), sumWithOverflow(c+1) FROM decimal; +SELECT sum(a-1), sum(b-1), sum(c-1), sumWithOverflow(a-1), sumWithOverflow(b-1), sumWithOverflow(c-1) FROM decimal; -SELECT avg(a), avg(b), avg(c) FROM test.decimal; -SELECT avg(a), avg(b), avg(c) FROM test.decimal WHERE a > 0; -SELECT avg(a), avg(b), avg(c) FROM test.decimal WHERE a < 0; +SELECT avg(a), avg(b), avg(c) FROM decimal; +SELECT avg(a), avg(b), avg(c) FROM decimal WHERE a > 0; +SELECT avg(a), avg(b), avg(c) FROM decimal WHERE a < 0; SELECT (uniq(a), uniq(b), uniq(c)), (uniqCombined(a), uniqCombined(b), uniqCombined(c)), (uniqCombined(17)(a), uniqCombined(17)(b), uniqCombined(17)(c)), (uniqExact(a), uniqExact(b), uniqExact(c)), (uniqHLL12(a), uniqHLL12(b), uniqHLL12(c)) -FROM (SELECT * FROM test.decimal ORDER BY a); +FROM (SELECT * FROM decimal ORDER BY a); -SELECT uniqUpTo(10)(a), uniqUpTo(10)(b), uniqUpTo(10)(c) FROM test.decimal WHERE a >= 0 AND a < 5; -SELECT uniqUpTo(10)(a), uniqUpTo(10)(b), uniqUpTo(10)(c) FROM test.decimal WHERE a >= 0 AND a < 10; +SELECT uniqUpTo(10)(a), uniqUpTo(10)(b), uniqUpTo(10)(c) FROM decimal WHERE a >= 0 AND a < 5; +SELECT uniqUpTo(10)(a), uniqUpTo(10)(b), uniqUpTo(10)(c) FROM decimal WHERE a >= 0 AND a < 10; -SELECT argMin(a, b), argMin(a, c), argMin(b, a), argMin(b, c), argMin(c, a), argMin(c, b) FROM test.decimal; -SELECT argMin(a, b), argMin(a, c), argMin(b, a), argMin(b, c), argMin(c, a), argMin(c, b) FROM test.decimal WHERE a > 0; -SELECT argMax(a, b), argMax(a, c), argMax(b, a), argMax(b, c), argMax(c, a), argMax(c, b) FROM test.decimal; -SELECT argMax(a, b), argMax(a, c), argMax(b, a), argMax(b, c), argMax(c, a), argMax(c, b) FROM test.decimal WHERE a < 0; +SELECT argMin(a, b), argMin(a, c), argMin(b, a), argMin(b, c), argMin(c, a), argMin(c, b) FROM decimal; +SELECT argMin(a, b), argMin(a, c), argMin(b, a), argMin(b, c), argMin(c, a), argMin(c, b) FROM decimal WHERE a > 0; +SELECT argMax(a, b), argMax(a, c), argMax(b, a), argMax(b, c), argMax(c, a), argMax(c, b) FROM decimal; +SELECT argMax(a, b), argMax(a, c), argMax(b, a), argMax(b, c), argMax(c, a), argMax(c, b) FROM decimal WHERE a < 0; -SELECT medianExact(a), medianExact(b), medianExact(c) FROM test.decimal; -SELECT quantileExact(a), quantileExact(b), quantileExact(c) FROM test.decimal WHERE a < 0; -SELECT quantileExact(0.0)(a), quantileExact(0.0)(b), quantileExact(0.0)(c) FROM test.decimal WHERE a >= 0; -SELECT quantileExact(0.2)(a), quantileExact(0.2)(b), quantileExact(0.2)(c) FROM test.decimal WHERE a >= 0; -SELECT quantileExact(0.4)(a), quantileExact(0.4)(b), quantileExact(0.4)(c) FROM test.decimal WHERE a >= 0; -SELECT quantileExact(0.6)(a), quantileExact(0.6)(b), quantileExact(0.6)(c) FROM test.decimal WHERE a >= 0; -SELECT quantileExact(0.8)(a), quantileExact(0.8)(b), quantileExact(0.8)(c) FROM test.decimal WHERE a >= 0; -SELECT quantileExact(1.0)(a), quantileExact(1.0)(b), quantileExact(1.0)(c) FROM test.decimal WHERE a >= 0; -SELECT quantilesExact(0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0)(a) FROM test.decimal; -SELECT quantilesExact(0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0)(b) FROM test.decimal; -SELECT quantilesExact(0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0)(c) FROM test.decimal; +SELECT medianExact(a), medianExact(b), medianExact(c) FROM decimal; +SELECT quantileExact(a), quantileExact(b), quantileExact(c) FROM decimal WHERE a < 0; +SELECT quantileExact(0.0)(a), quantileExact(0.0)(b), quantileExact(0.0)(c) FROM decimal WHERE a >= 0; +SELECT quantileExact(0.2)(a), quantileExact(0.2)(b), quantileExact(0.2)(c) FROM decimal WHERE a >= 0; +SELECT quantileExact(0.4)(a), quantileExact(0.4)(b), quantileExact(0.4)(c) FROM decimal WHERE a >= 0; +SELECT quantileExact(0.6)(a), quantileExact(0.6)(b), quantileExact(0.6)(c) FROM decimal WHERE a >= 0; +SELECT quantileExact(0.8)(a), quantileExact(0.8)(b), quantileExact(0.8)(c) FROM decimal WHERE a >= 0; +SELECT quantileExact(1.0)(a), quantileExact(1.0)(b), quantileExact(1.0)(c) FROM decimal WHERE a >= 0; +SELECT quantilesExact(0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0)(a) FROM decimal; +SELECT quantilesExact(0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0)(b) FROM decimal; +SELECT quantilesExact(0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0)(c) FROM decimal; -SELECT varPop(a) AS va, varPop(b) AS vb, varPop(c) AS vc, toTypeName(va), toTypeName(vb), toTypeName(vc) FROM test.decimal; -SELECT varPop(toFloat64(a)), varPop(toFloat64(b)), varPop(toFloat64(c)) FROM test.decimal; -SELECT varSamp(a) AS va, varSamp(b) AS vb, varSamp(c) AS vc, toTypeName(va), toTypeName(vb), toTypeName(vc) FROM test.decimal; -SELECT varSamp(toFloat64(a)), varSamp(toFloat64(b)), varSamp(toFloat64(c)) FROM test.decimal; +SELECT varPop(a) AS va, varPop(b) AS vb, varPop(c) AS vc, toTypeName(va), toTypeName(vb), toTypeName(vc) FROM decimal; +SELECT varPop(toFloat64(a)), varPop(toFloat64(b)), varPop(toFloat64(c)) FROM decimal; +SELECT varSamp(a) AS va, varSamp(b) AS vb, varSamp(c) AS vc, toTypeName(va), toTypeName(vb), toTypeName(vc) FROM decimal; +SELECT varSamp(toFloat64(a)), varSamp(toFloat64(b)), varSamp(toFloat64(c)) FROM decimal; -SELECT stddevPop(a) AS da, stddevPop(b) AS db, stddevPop(c) AS dc, toTypeName(da), toTypeName(db), toTypeName(dc) FROM test.decimal; -SELECT stddevPop(toFloat64(a)), stddevPop(toFloat64(b)), stddevPop(toFloat64(c)) FROM test.decimal; -SELECT stddevSamp(a) AS da, stddevSamp(b) AS db, stddevSamp(c) AS dc, toTypeName(da), toTypeName(db), toTypeName(dc) FROM test.decimal; -SELECT stddevSamp(toFloat64(a)), stddevSamp(toFloat64(b)), stddevSamp(toFloat64(c)) FROM test.decimal; +SELECT stddevPop(a) AS da, stddevPop(b) AS db, stddevPop(c) AS dc, toTypeName(da), toTypeName(db), toTypeName(dc) FROM decimal; +SELECT stddevPop(toFloat64(a)), stddevPop(toFloat64(b)), stddevPop(toFloat64(c)) FROM decimal; +SELECT stddevSamp(a) AS da, stddevSamp(b) AS db, stddevSamp(c) AS dc, toTypeName(da), toTypeName(db), toTypeName(dc) FROM decimal; +SELECT stddevSamp(toFloat64(a)), stddevSamp(toFloat64(b)), stddevSamp(toFloat64(c)) FROM decimal; -SELECT covarPop(a, a), covarPop(b, b), covarPop(c, c) FROM test.decimal; -- { serverError 43 } -SELECT covarSamp(a, a), covarSamp(b, b), covarSamp(c, c) FROM test.decimal; -- { serverError 43 } -SELECT corr(a, a), corr(b, b), corr(c, c) FROM test.decimal; -- { serverError 43 } +SELECT covarPop(a, a), covarPop(b, b), covarPop(c, c) FROM decimal; -- { serverError 43 } +SELECT covarSamp(a, a), covarSamp(b, b), covarSamp(c, c) FROM decimal; -- { serverError 43 } +SELECT corr(a, a), corr(b, b), corr(c, c) FROM decimal; -- { serverError 43 } SELECT 1 LIMIT 0; -- TODO: sumMap diff --git a/dbms/tests/queries/0_stateless/00700_decimal_arithm.sql b/dbms/tests/queries/0_stateless/00700_decimal_arithm.sql index fa0a3598c65..b04b0a1feed 100644 --- a/dbms/tests/queries/0_stateless/00700_decimal_arithm.sql +++ b/dbms/tests/queries/0_stateless/00700_decimal_arithm.sql @@ -1,7 +1,7 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.decimal; +DROP TABLE IF EXISTS decimal; -CREATE TABLE IF NOT EXISTS test.decimal +CREATE TABLE IF NOT EXISTS decimal ( a DECIMAL(9,0), b DECIMAL(18,0), @@ -15,53 +15,53 @@ CREATE TABLE IF NOT EXISTS test.decimal j dec(4,2) ) ENGINE = Memory; -INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (42, 42, 42, 0.42, 0.42, 0.42, 42.42, 42.42, 42.42, 42.42); -INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (-42, -42, -42, -0.42, -0.42, -0.42, -42.42, -42.42, -42.42, -42.42); +INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (42, 42, 42, 0.42, 0.42, 0.42, 42.42, 42.42, 42.42, 42.42); +INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (-42, -42, -42, -0.42, -0.42, -0.42, -42.42, -42.42, -42.42, -42.42); -SELECT a + a, a - a, a * a, a / a, intDiv(a, a), intDivOrZero(a, a) FROM test.decimal WHERE a = 42; -SELECT b + b, b - b, b * b, b / b, intDiv(b, b), intDivOrZero(b, b) FROM test.decimal WHERE b = 42; -SELECT c + c, c - c, c * c, c / c, intDiv(c, c), intDivOrZero(c, c) FROM test.decimal WHERE c = 42; -SELECT e + e, e - e, e * e, e / e, intDiv(e, e), intDivOrZero(e, e) FROM test.decimal WHERE e > 0; -- { serverError 69 } -SELECT f + f, f - f, f * f, f / f, intDiv(f, f), intDivOrZero(f, f) FROM test.decimal WHERE f > 0; -- { serverError 69 } -SELECT g + g, g - g, g * g, g / g, intDiv(g, g), intDivOrZero(g, g) FROM test.decimal WHERE g > 0; -SELECT h + h, h - h, h * h, h / h, intDiv(h, h), intDivOrZero(h, h) FROM test.decimal WHERE h > 0; -- { serverError 407 } -SELECT h + h, h - h FROM test.decimal WHERE h > 0; -SELECT i + i, i - i, i * i, i / i, intDiv(i, i), intDivOrZero(i, i) FROM test.decimal WHERE i > 0; -- { serverError 407 } -SELECT i + i, i - i FROM test.decimal WHERE i > 0; -SELECT j + j, j - j, j * j, j / j, intDiv(j, j), intDivOrZero(j, j) FROM test.decimal WHERE j > 0; +SELECT a + a, a - a, a * a, a / a, intDiv(a, a), intDivOrZero(a, a) FROM decimal WHERE a = 42; +SELECT b + b, b - b, b * b, b / b, intDiv(b, b), intDivOrZero(b, b) FROM decimal WHERE b = 42; +SELECT c + c, c - c, c * c, c / c, intDiv(c, c), intDivOrZero(c, c) FROM decimal WHERE c = 42; +SELECT e + e, e - e, e * e, e / e, intDiv(e, e), intDivOrZero(e, e) FROM decimal WHERE e > 0; -- { serverError 69 } +SELECT f + f, f - f, f * f, f / f, intDiv(f, f), intDivOrZero(f, f) FROM decimal WHERE f > 0; -- { serverError 69 } +SELECT g + g, g - g, g * g, g / g, intDiv(g, g), intDivOrZero(g, g) FROM decimal WHERE g > 0; +SELECT h + h, h - h, h * h, h / h, intDiv(h, h), intDivOrZero(h, h) FROM decimal WHERE h > 0; -- { serverError 407 } +SELECT h + h, h - h FROM decimal WHERE h > 0; +SELECT i + i, i - i, i * i, i / i, intDiv(i, i), intDivOrZero(i, i) FROM decimal WHERE i > 0; -- { serverError 407 } +SELECT i + i, i - i FROM decimal WHERE i > 0; +SELECT j + j, j - j, j * j, j / j, intDiv(j, j), intDivOrZero(j, j) FROM decimal WHERE j > 0; -SELECT a + 21, a - 21, a - 84, a * 21, a * -21, a / 21, a / 84, intDiv(a, 21), intDivOrZero(a, 84) FROM test.decimal WHERE a = 42; -SELECT b + 21, b - 21, b - 84, b * 21, b * -21, b / 21, b / 84, intDiv(b, 21), intDivOrZero(b, 84) FROM test.decimal WHERE b = 42; -SELECT c + 21, c - 21, c - 84, c * 21, c * -21, c / 21, c / 84, intDiv(c, 21), intDivOrZero(c, 84) FROM test.decimal WHERE c = 42; -SELECT e + 21, e - 21, e - 84, e * 21, e * -21, e / 21, e / 84 FROM test.decimal WHERE e > 0; -- { serverError 407 } -SELECT f + 21, f - 21, f - 84, f * 21, f * -21, f / 21, f / 84 FROM test.decimal WHERE f > 0; -- { serverError 407 } -SELECT g + 21, g - 21, g - 84, g * 21, g * -21, g / 21, g / 84, intDiv(g, 21), intDivOrZero(g, 84) FROM test.decimal WHERE g > 0; -SELECT h + 21, h - 21, h - 84, h * 21, h * -21, h / 21, h / 84, intDiv(h, 21), intDivOrZero(h, 84) FROM test.decimal WHERE h > 0; -SELECT i + 21, i - 21, i - 84, i * 21, i * -21, i / 21, i / 84, intDiv(i, 21), intDivOrZero(i, 84) FROM test.decimal WHERE i > 0; -SELECT j + 21, j - 21, j - 84, j * 21, j * -21, j / 21, j / 84, intDiv(j, 21), intDivOrZero(j, 84) FROM test.decimal WHERE j > 0; +SELECT a + 21, a - 21, a - 84, a * 21, a * -21, a / 21, a / 84, intDiv(a, 21), intDivOrZero(a, 84) FROM decimal WHERE a = 42; +SELECT b + 21, b - 21, b - 84, b * 21, b * -21, b / 21, b / 84, intDiv(b, 21), intDivOrZero(b, 84) FROM decimal WHERE b = 42; +SELECT c + 21, c - 21, c - 84, c * 21, c * -21, c / 21, c / 84, intDiv(c, 21), intDivOrZero(c, 84) FROM decimal WHERE c = 42; +SELECT e + 21, e - 21, e - 84, e * 21, e * -21, e / 21, e / 84 FROM decimal WHERE e > 0; -- { serverError 407 } +SELECT f + 21, f - 21, f - 84, f * 21, f * -21, f / 21, f / 84 FROM decimal WHERE f > 0; -- { serverError 407 } +SELECT g + 21, g - 21, g - 84, g * 21, g * -21, g / 21, g / 84, intDiv(g, 21), intDivOrZero(g, 84) FROM decimal WHERE g > 0; +SELECT h + 21, h - 21, h - 84, h * 21, h * -21, h / 21, h / 84, intDiv(h, 21), intDivOrZero(h, 84) FROM decimal WHERE h > 0; +SELECT i + 21, i - 21, i - 84, i * 21, i * -21, i / 21, i / 84, intDiv(i, 21), intDivOrZero(i, 84) FROM decimal WHERE i > 0; +SELECT j + 21, j - 21, j - 84, j * 21, j * -21, j / 21, j / 84, intDiv(j, 21), intDivOrZero(j, 84) FROM decimal WHERE j > 0; -SELECT 21 + a, 21 - a, 84 - a, 21 * a, -21 * a, 21 / a, 84 / a, intDiv(21, a), intDivOrZero(84, a) FROM test.decimal WHERE a = 42; -SELECT 21 + b, 21 - b, 84 - b, 21 * b, -21 * b, 21 / b, 84 / b, intDiv(21, b), intDivOrZero(84, b) FROM test.decimal WHERE b = 42; -SELECT 21 + c, 21 - c, 84 - c, 21 * c, -21 * c, 21 / c, 84 / c, intDiv(21, c), intDivOrZero(84, c) FROM test.decimal WHERE c = 42; -SELECT 21 + e, 21 - e, 84 - e, 21 * e, -21 * e, 21 / e, 84 / e FROM test.decimal WHERE e > 0; -- { serverError 407 } -SELECT 21 + f, 21 - f, 84 - f, 21 * f, -21 * f, 21 / f, 84 / f FROM test.decimal WHERE f > 0; -- { serverError 407 } -SELECT 21 + g, 21 - g, 84 - g, 21 * g, -21 * g, 21 / g, 84 / g, intDiv(21, g), intDivOrZero(84, g) FROM test.decimal WHERE g > 0; -SELECT 21 + h, 21 - h, 84 - h, 21 * h, -21 * h, 21 / h, 84 / h FROM test.decimal WHERE h > 0; -- { serverError 407 } -SELECT 21 + h, 21 - h, 84 - h, 21 * h, -21 * h FROM test.decimal WHERE h > 0; -SELECT 21 + i, 21 - i, 84 - i, 21 * i, -21 * i, 21 / i, 84 / i, intDiv(21, i), intDivOrZero(84, i) FROM test.decimal WHERE i > 0; -SELECT 21 + j, 21 - j, 84 - j, 21 * j, -21 * j, 21 / j, 84 / j, intDiv(21, j), intDivOrZero(84, j) FROM test.decimal WHERE j > 0; +SELECT 21 + a, 21 - a, 84 - a, 21 * a, -21 * a, 21 / a, 84 / a, intDiv(21, a), intDivOrZero(84, a) FROM decimal WHERE a = 42; +SELECT 21 + b, 21 - b, 84 - b, 21 * b, -21 * b, 21 / b, 84 / b, intDiv(21, b), intDivOrZero(84, b) FROM decimal WHERE b = 42; +SELECT 21 + c, 21 - c, 84 - c, 21 * c, -21 * c, 21 / c, 84 / c, intDiv(21, c), intDivOrZero(84, c) FROM decimal WHERE c = 42; +SELECT 21 + e, 21 - e, 84 - e, 21 * e, -21 * e, 21 / e, 84 / e FROM decimal WHERE e > 0; -- { serverError 407 } +SELECT 21 + f, 21 - f, 84 - f, 21 * f, -21 * f, 21 / f, 84 / f FROM decimal WHERE f > 0; -- { serverError 407 } +SELECT 21 + g, 21 - g, 84 - g, 21 * g, -21 * g, 21 / g, 84 / g, intDiv(21, g), intDivOrZero(84, g) FROM decimal WHERE g > 0; +SELECT 21 + h, 21 - h, 84 - h, 21 * h, -21 * h, 21 / h, 84 / h FROM decimal WHERE h > 0; -- { serverError 407 } +SELECT 21 + h, 21 - h, 84 - h, 21 * h, -21 * h FROM decimal WHERE h > 0; +SELECT 21 + i, 21 - i, 84 - i, 21 * i, -21 * i, 21 / i, 84 / i, intDiv(21, i), intDivOrZero(84, i) FROM decimal WHERE i > 0; +SELECT 21 + j, 21 - j, 84 - j, 21 * j, -21 * j, 21 / j, 84 / j, intDiv(21, j), intDivOrZero(84, j) FROM decimal WHERE j > 0; -SELECT a, -a, -b, -c, -d, -e, -f, -g, -h, -j from test.decimal ORDER BY a; -SELECT abs(a), abs(b), abs(c), abs(d), abs(e), abs(f), abs(g), abs(h), abs(j) from test.decimal ORDER BY a; +SELECT a, -a, -b, -c, -d, -e, -f, -g, -h, -j from decimal ORDER BY a; +SELECT abs(a), abs(b), abs(c), abs(d), abs(e), abs(f), abs(g), abs(h), abs(j) from decimal ORDER BY a; SET decimal_check_overflow = 0; -SELECT (h * h) != 0, (h / h) != 1 FROM test.decimal WHERE h > 0; -SELECT (i * i) != 0, (i / i) = 1 FROM test.decimal WHERE i > 0; +SELECT (h * h) != 0, (h / h) != 1 FROM decimal WHERE h > 0; +SELECT (i * i) != 0, (i / i) = 1 FROM decimal WHERE i > 0; -SELECT e + 1 > e, e + 10 > e, 1 + e > e, 10 + e > e FROM test.decimal WHERE e > 0; -SELECT f + 1 > f, f + 10 > f, 1 + f > f, 10 + f > f FROM test.decimal WHERE f > 0; +SELECT e + 1 > e, e + 10 > e, 1 + e > e, 10 + e > e FROM decimal WHERE e > 0; +SELECT f + 1 > f, f + 10 > f, 1 + f > f, 10 + f > f FROM decimal WHERE f > 0; SELECT 1 / toDecimal32(0, 0); -- { serverError 153 } SELECT 1 / toDecimal64(0, 1); -- { serverError 153 } @@ -78,4 +78,4 @@ SELECT toDecimal32(0, 4) AS x, multiIf(x = 0, NULL, intDivOrZero(1, x)), multiIf SELECT toDecimal64(0, 8) AS x, multiIf(x = 0, NULL, intDivOrZero(1, x)), multiIf(x = 0, NULL, intDivOrZero(x, 0)); SELECT toDecimal64(0, 18) AS x, multiIf(x = 0, NULL, intDivOrZero(1, x)), multiIf(x = 0, NULL, intDivOrZero(x, 0)); -DROP TABLE IF EXISTS test.decimal; +DROP TABLE IF EXISTS decimal; diff --git a/dbms/tests/queries/0_stateless/00700_decimal_bounds.sql b/dbms/tests/queries/0_stateless/00700_decimal_bounds.sql index 13f62d2da18..677979afb16 100644 --- a/dbms/tests/queries/0_stateless/00700_decimal_bounds.sql +++ b/dbms/tests/queries/0_stateless/00700_decimal_bounds.sql @@ -1,11 +1,11 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.decimal; +DROP TABLE IF EXISTS decimal; -CREATE TABLE IF NOT EXISTS test.decimal (x DECIMAL(10, -2)) ENGINE = Memory; -- { serverError 69 } -CREATE TABLE IF NOT EXISTS test.decimal (x DECIMAL(10, 15)) ENGINE = Memory; -- { serverError 69 } -CREATE TABLE IF NOT EXISTS test.decimal (x DECIMAL(0, 0)) ENGINE = Memory; -- { serverError 69 } +CREATE TABLE IF NOT EXISTS decimal (x DECIMAL(10, -2)) ENGINE = Memory; -- { serverError 69 } +CREATE TABLE IF NOT EXISTS decimal (x DECIMAL(10, 15)) ENGINE = Memory; -- { serverError 69 } +CREATE TABLE IF NOT EXISTS decimal (x DECIMAL(0, 0)) ENGINE = Memory; -- { serverError 69 } -CREATE TABLE IF NOT EXISTS test.decimal +CREATE TABLE IF NOT EXISTS decimal ( a DECIMAL(9,0), b DECIMAL(18,0), @@ -19,80 +19,80 @@ CREATE TABLE IF NOT EXISTS test.decimal j DECIMAL(1,0) ) ENGINE = Memory; -INSERT INTO test.decimal (a) VALUES (1000000000); -- { clientError 69 } -INSERT INTO test.decimal (a) VALUES (-1000000000); -- { clientError 69 } -INSERT INTO test.decimal (b) VALUES (1000000000000000000); -- { clientError 69 } -INSERT INTO test.decimal (b) VALUES (-1000000000000000000); -- { clientError 69 } -INSERT INTO test.decimal (c) VALUES (100000000000000000000000000000000000000); -- { clientError 69 } -INSERT INTO test.decimal (c) VALUES (-100000000000000000000000000000000000000); -- { clientError 69 } -INSERT INTO test.decimal (d) VALUES (1); -- { clientError 69 } -INSERT INTO test.decimal (d) VALUES (-1); -- { clientError 69 } -INSERT INTO test.decimal (e) VALUES (1000000000000000000); -- { clientError 69 } -INSERT INTO test.decimal (e) VALUES (-1000000000000000000); -- { clientError 69 } -INSERT INTO test.decimal (f) VALUES (1); -- { clientError 69 } -INSERT INTO test.decimal (f) VALUES (-1); -- { clientError 69 } -INSERT INTO test.decimal (g) VALUES (10000); -- { clientError 69 } -INSERT INTO test.decimal (g) VALUES (-10000); -- { clientError 69 } -INSERT INTO test.decimal (h) VALUES (1000000000); -- { clientError 69 } -INSERT INTO test.decimal (h) VALUES (-1000000000); -- { clientError 69 } -INSERT INTO test.decimal (i) VALUES (100000000000000000000); -- { clientError 69 } -INSERT INTO test.decimal (i) VALUES (-100000000000000000000); -- { clientError 69 } -INSERT INTO test.decimal (j) VALUES (10); -- { clientError 69 } -INSERT INTO test.decimal (j) VALUES (-10); -- { clientError 69 } +INSERT INTO decimal (a) VALUES (1000000000); -- { clientError 69 } +INSERT INTO decimal (a) VALUES (-1000000000); -- { clientError 69 } +INSERT INTO decimal (b) VALUES (1000000000000000000); -- { clientError 69 } +INSERT INTO decimal (b) VALUES (-1000000000000000000); -- { clientError 69 } +INSERT INTO decimal (c) VALUES (100000000000000000000000000000000000000); -- { clientError 69 } +INSERT INTO decimal (c) VALUES (-100000000000000000000000000000000000000); -- { clientError 69 } +INSERT INTO decimal (d) VALUES (1); -- { clientError 69 } +INSERT INTO decimal (d) VALUES (-1); -- { clientError 69 } +INSERT INTO decimal (e) VALUES (1000000000000000000); -- { clientError 69 } +INSERT INTO decimal (e) VALUES (-1000000000000000000); -- { clientError 69 } +INSERT INTO decimal (f) VALUES (1); -- { clientError 69 } +INSERT INTO decimal (f) VALUES (-1); -- { clientError 69 } +INSERT INTO decimal (g) VALUES (10000); -- { clientError 69 } +INSERT INTO decimal (g) VALUES (-10000); -- { clientError 69 } +INSERT INTO decimal (h) VALUES (1000000000); -- { clientError 69 } +INSERT INTO decimal (h) VALUES (-1000000000); -- { clientError 69 } +INSERT INTO decimal (i) VALUES (100000000000000000000); -- { clientError 69 } +INSERT INTO decimal (i) VALUES (-100000000000000000000); -- { clientError 69 } +INSERT INTO decimal (j) VALUES (10); -- { clientError 69 } +INSERT INTO decimal (j) VALUES (-10); -- { clientError 69 } -INSERT INTO test.decimal (a) VALUES (0.1); -- { clientError 69 } -INSERT INTO test.decimal (a) VALUES (-0.1); -- { clientError 69 } -INSERT INTO test.decimal (b) VALUES (0.1); -- { clientError 69 } -INSERT INTO test.decimal (b) VALUES (-0.1); -- { clientError 69 } -INSERT INTO test.decimal (c) VALUES (0.1); -- { clientError 69 } -INSERT INTO test.decimal (c) VALUES (-0.1); -- { clientError 69 } -INSERT INTO test.decimal (d) VALUES (0.0000000001); -- { clientError 69 } -INSERT INTO test.decimal (d) VALUES (-0.0000000001); -- { clientError 69 } -INSERT INTO test.decimal (e) VALUES (0.0000000000000000001); -- { clientError 69 } -INSERT INTO test.decimal (e) VALUES (-0.0000000000000000001); -- { clientError 69 } -INSERT INTO test.decimal (f) VALUES (0.000000000000000000000000000000000000001); -- { clientError 69 } -INSERT INTO test.decimal (f) VALUES (-0.000000000000000000000000000000000000001); -- { clientError 69 } -INSERT INTO test.decimal (g) VALUES (0.000001); -- { clientError 69 } -INSERT INTO test.decimal (g) VALUES (-0.000001); -- { clientError 69 } -INSERT INTO test.decimal (h) VALUES (0.0000000001); -- { clientError 69 } -INSERT INTO test.decimal (h) VALUES (-0.0000000001); -- { clientError 69 } -INSERT INTO test.decimal (i) VALUES (0.0000000000000000001); -- { clientError 69 } -INSERT INTO test.decimal (i) VALUES (-0.0000000000000000001); -- { clientError 69 } -INSERT INTO test.decimal (j) VALUES (0.1); -- { clientError 69 } -INSERT INTO test.decimal (j) VALUES (-0.1); -- { clientError 69 } +INSERT INTO decimal (a) VALUES (0.1); -- { clientError 69 } +INSERT INTO decimal (a) VALUES (-0.1); -- { clientError 69 } +INSERT INTO decimal (b) VALUES (0.1); -- { clientError 69 } +INSERT INTO decimal (b) VALUES (-0.1); -- { clientError 69 } +INSERT INTO decimal (c) VALUES (0.1); -- { clientError 69 } +INSERT INTO decimal (c) VALUES (-0.1); -- { clientError 69 } +INSERT INTO decimal (d) VALUES (0.0000000001); -- { clientError 69 } +INSERT INTO decimal (d) VALUES (-0.0000000001); -- { clientError 69 } +INSERT INTO decimal (e) VALUES (0.0000000000000000001); -- { clientError 69 } +INSERT INTO decimal (e) VALUES (-0.0000000000000000001); -- { clientError 69 } +INSERT INTO decimal (f) VALUES (0.000000000000000000000000000000000000001); -- { clientError 69 } +INSERT INTO decimal (f) VALUES (-0.000000000000000000000000000000000000001); -- { clientError 69 } +INSERT INTO decimal (g) VALUES (0.000001); -- { clientError 69 } +INSERT INTO decimal (g) VALUES (-0.000001); -- { clientError 69 } +INSERT INTO decimal (h) VALUES (0.0000000001); -- { clientError 69 } +INSERT INTO decimal (h) VALUES (-0.0000000001); -- { clientError 69 } +INSERT INTO decimal (i) VALUES (0.0000000000000000001); -- { clientError 69 } +INSERT INTO decimal (i) VALUES (-0.0000000000000000001); -- { clientError 69 } +INSERT INTO decimal (j) VALUES (0.1); -- { clientError 69 } +INSERT INTO decimal (j) VALUES (-0.1); -- { clientError 69 } -INSERT INTO test.decimal (a, b, d, g) VALUES (999999999, 999999999999999999, 0.999999999, 9999.99999); -INSERT INTO test.decimal (a, b, d, g) VALUES (-999999999, -999999999999999999, -0.999999999, -9999.99999); -INSERT INTO test.decimal (c) VALUES (99999999999999999999999999999999999999); -INSERT INTO test.decimal (c) VALUES (-99999999999999999999999999999999999999); -INSERT INTO test.decimal (f) VALUES (0.99999999999999999999999999999999999999); -INSERT INTO test.decimal (f) VALUES (-0.99999999999999999999999999999999999999); -INSERT INTO test.decimal (e, h) VALUES (0.999999999999999999, 999999999.999999999); -INSERT INTO test.decimal (e, h) VALUES (-0.999999999999999999, -999999999.999999999); -INSERT INTO test.decimal (i) VALUES (99999999999999999999.999999999999999999); -INSERT INTO test.decimal (i) VALUES (-99999999999999999999.999999999999999999); +INSERT INTO decimal (a, b, d, g) VALUES (999999999, 999999999999999999, 0.999999999, 9999.99999); +INSERT INTO decimal (a, b, d, g) VALUES (-999999999, -999999999999999999, -0.999999999, -9999.99999); +INSERT INTO decimal (c) VALUES (99999999999999999999999999999999999999); +INSERT INTO decimal (c) VALUES (-99999999999999999999999999999999999999); +INSERT INTO decimal (f) VALUES (0.99999999999999999999999999999999999999); +INSERT INTO decimal (f) VALUES (-0.99999999999999999999999999999999999999); +INSERT INTO decimal (e, h) VALUES (0.999999999999999999, 999999999.999999999); +INSERT INTO decimal (e, h) VALUES (-0.999999999999999999, -999999999.999999999); +INSERT INTO decimal (i) VALUES (99999999999999999999.999999999999999999); +INSERT INTO decimal (i) VALUES (-99999999999999999999.999999999999999999); -INSERT INTO test.decimal (a, b, c, d, g, j, h) VALUES (1, 1, 1, 0.000000001, 0.00001, 1, 0.000000001); -INSERT INTO test.decimal (a, b, c, d, g, j, h) VALUES (-1, -1, -1, -0.000000001, -0.00001, -1, -0.000000001); -INSERT INTO test.decimal (e, f) VALUES (0.000000000000000001, 0.00000000000000000000000000000000000001); -INSERT INTO test.decimal (e, f) VALUES (-0.000000000000000001, -0.00000000000000000000000000000000000001); -INSERT INTO test.decimal (i) VALUES (0.000000000000000001); -INSERT INTO test.decimal (i) VALUES (-0.000000000000000001); +INSERT INTO decimal (a, b, c, d, g, j, h) VALUES (1, 1, 1, 0.000000001, 0.00001, 1, 0.000000001); +INSERT INTO decimal (a, b, c, d, g, j, h) VALUES (-1, -1, -1, -0.000000001, -0.00001, -1, -0.000000001); +INSERT INTO decimal (e, f) VALUES (0.000000000000000001, 0.00000000000000000000000000000000000001); +INSERT INTO decimal (e, f) VALUES (-0.000000000000000001, -0.00000000000000000000000000000000000001); +INSERT INTO decimal (i) VALUES (0.000000000000000001); +INSERT INTO decimal (i) VALUES (-0.000000000000000001); -INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (0, 0, 0, 0, 0, 0, 0, 0, 0, 0); -INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (-0, -0, -0, -0, -0, -0, -0, -0, -0, -0); -INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); -INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (-0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0); +INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (-0, -0, -0, -0, -0, -0, -0, -0, -0, -0); +INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); +INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (-0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0); -INSERT INTO test.decimal (a, b, g) VALUES ('42.00000', 42.0000000000000000000000000000000, '0.999990'); -INSERT INTO test.decimal (a) VALUES ('-9x'); -- { clientError 72 } -INSERT INTO test.decimal (a) VALUES ('0x1'); -- { clientError 72 } +INSERT INTO decimal (a, b, g) VALUES ('42.00000', 42.0000000000000000000000000000000, '0.999990'); +INSERT INTO decimal (a) VALUES ('-9x'); -- { clientError 72 } +INSERT INTO decimal (a) VALUES ('0x1'); -- { clientError 72 } -INSERT INTO test.decimal (a, b, c, d, e, f) VALUES ('0.9e9', '0.9e18', '0.9e38', '9e-9', '9e-18', '9e-38'); -INSERT INTO test.decimal (a, b, c, d, e, f) VALUES ('-0.9e9', '-0.9e18', '-0.9e38', '-9e-9', '-9e-18', '-9e-38'); +INSERT INTO decimal (a, b, c, d, e, f) VALUES ('0.9e9', '0.9e18', '0.9e38', '9e-9', '9e-18', '9e-38'); +INSERT INTO decimal (a, b, c, d, e, f) VALUES ('-0.9e9', '-0.9e18', '-0.9e38', '-9e-9', '-9e-18', '-9e-38'); -INSERT INTO test.decimal (a, b, c, d, e, f) VALUES ('1e9', '1e18', '1e38', '1e-10', '1e-19', '1e-39'); -- { clientError 69 } -INSERT INTO test.decimal (a, b, c, d, e, f) VALUES ('-1e9', '-1e18', '-1e38', '-1e-10', '-1e-19', '-1e-39'); -- { clientError 69 } +INSERT INTO decimal (a, b, c, d, e, f) VALUES ('1e9', '1e18', '1e38', '1e-10', '1e-19', '1e-39'); -- { clientError 69 } +INSERT INTO decimal (a, b, c, d, e, f) VALUES ('-1e9', '-1e18', '-1e38', '-1e-10', '-1e-19', '-1e-39'); -- { clientError 69 } -SELECT * FROM test.decimal ORDER BY a, b, c, d, e, f, g, h, i, j; -DROP TABLE IF EXISTS test.decimal; +SELECT * FROM decimal ORDER BY a, b, c, d, e, f, g, h, i, j; +DROP TABLE IF EXISTS decimal; diff --git a/dbms/tests/queries/0_stateless/00700_decimal_compare.sql b/dbms/tests/queries/0_stateless/00700_decimal_compare.sql index 767bd0e3232..92bb86736c4 100644 --- a/dbms/tests/queries/0_stateless/00700_decimal_compare.sql +++ b/dbms/tests/queries/0_stateless/00700_decimal_compare.sql @@ -1,7 +1,7 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.decimal; +DROP TABLE IF EXISTS decimal; -CREATE TABLE IF NOT EXISTS test.decimal +CREATE TABLE IF NOT EXISTS decimal ( a DECIMAL(9,0), b DECIMAL(18,0), @@ -15,54 +15,54 @@ CREATE TABLE IF NOT EXISTS test.decimal j dec(4,2) ) ENGINE = Memory; -INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (42, 42, 42, 0.42, 0.42, 0.42, 42.42, 42.42, 42.42, 42.42); -INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (-42, -42, -42, -0.42, -0.42, -0.42, -42.42, -42.42, -42.42, -42.42); +INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (42, 42, 42, 0.42, 0.42, 0.42, 42.42, 42.42, 42.42, 42.42); +INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (-42, -42, -42, -0.42, -0.42, -0.42, -42.42, -42.42, -42.42, -42.42); -SELECT a > toFloat64(0) FROM test.decimal; -- { serverError 43 } -SELECT g > toFloat32(0) FROM test.decimal; -- { serverError 43 } -SELECT a > '0.0' FROM test.decimal; -- { serverError 43 } +SELECT a > toFloat64(0) FROM decimal; -- { serverError 43 } +SELECT g > toFloat32(0) FROM decimal; -- { serverError 43 } +SELECT a > '0.0' FROM decimal; -- { serverError 43 } -SELECT a, b, a = b, a < b, a > b, a != b, a <= b, a >= b FROM test.decimal ORDER BY a; -SELECT a, g, a = g, a < g, a > g, a != g, a <= g, a >= g FROM test.decimal ORDER BY a; -SELECT a > 0, b > 0, g > 0 FROM test.decimal ORDER BY a DESC; -SELECT a, g > toInt8(0), g > toInt16(0), g > toInt32(0), g > toInt64(0) FROM test.decimal ORDER BY a; -SELECT a, g > toUInt8(0), g > toUInt16(0), g > toUInt32(0), g > toUInt64(0) FROM test.decimal ORDER BY a; -SELECT a, b, g FROM test.decimal WHERE a IN(42) AND b IN(42) AND g IN(42); -SELECT a, b, g FROM test.decimal WHERE a > 0 AND a <= 42 AND b <= 42 AND g <= 42; +SELECT a, b, a = b, a < b, a > b, a != b, a <= b, a >= b FROM decimal ORDER BY a; +SELECT a, g, a = g, a < g, a > g, a != g, a <= g, a >= g FROM decimal ORDER BY a; +SELECT a > 0, b > 0, g > 0 FROM decimal ORDER BY a DESC; +SELECT a, g > toInt8(0), g > toInt16(0), g > toInt32(0), g > toInt64(0) FROM decimal ORDER BY a; +SELECT a, g > toUInt8(0), g > toUInt16(0), g > toUInt32(0), g > toUInt64(0) FROM decimal ORDER BY a; +SELECT a, b, g FROM decimal WHERE a IN(42) AND b IN(42) AND g IN(42); +SELECT a, b, g FROM decimal WHERE a > 0 AND a <= 42 AND b <= 42 AND g <= 42; -SELECT d, e, f from test.decimal WHERE d > 0 AND d < 1 AND e > 0 AND e < 1 AND f > 0 AND f < 1; -SELECT j, h, i, j from test.decimal WHERE j > 42 AND h > 42 AND h > 42 AND j > 42; -SELECT j, h, i, j from test.decimal WHERE j < 42 AND h < 42 AND h < 42 AND j < 42; -SELECT a, b, c FROM test.decimal WHERE a = toInt8(42) AND b = toInt8(42) AND c = toInt8(42); -SELECT a, b, c FROM test.decimal WHERE a = toInt16(42) AND b = toInt16(42) AND c = toInt16(42); -SELECT a, b, c FROM test.decimal WHERE a = toInt32(42) AND b = toInt32(42) AND c = toInt32(42); -SELECT a, b, c FROM test.decimal WHERE a = toInt64(42) AND b = toInt64(42) AND c = toInt64(42); -SELECT a, b, c FROM test.decimal WHERE a = toFloat32(42); -- { serverError 43 } -SELECT a, b, c FROM test.decimal WHERE a = toFloat64(42); -- { serverError 43 } +SELECT d, e, f from decimal WHERE d > 0 AND d < 1 AND e > 0 AND e < 1 AND f > 0 AND f < 1; +SELECT j, h, i, j from decimal WHERE j > 42 AND h > 42 AND h > 42 AND j > 42; +SELECT j, h, i, j from decimal WHERE j < 42 AND h < 42 AND h < 42 AND j < 42; +SELECT a, b, c FROM decimal WHERE a = toInt8(42) AND b = toInt8(42) AND c = toInt8(42); +SELECT a, b, c FROM decimal WHERE a = toInt16(42) AND b = toInt16(42) AND c = toInt16(42); +SELECT a, b, c FROM decimal WHERE a = toInt32(42) AND b = toInt32(42) AND c = toInt32(42); +SELECT a, b, c FROM decimal WHERE a = toInt64(42) AND b = toInt64(42) AND c = toInt64(42); +SELECT a, b, c FROM decimal WHERE a = toFloat32(42); -- { serverError 43 } +SELECT a, b, c FROM decimal WHERE a = toFloat64(42); -- { serverError 43 } -SELECT least(a, b), least(a, g), greatest(a, b), greatest(a, g) FROM test.decimal ORDER BY a; -SELECT least(a, 0), least(b, 0), least(g, 0) FROM test.decimal ORDER BY a; -SELECT greatest(a, 0), greatest(b, 0), greatest(g, 0) FROM test.decimal ORDER BY a; +SELECT least(a, b), least(a, g), greatest(a, b), greatest(a, g) FROM decimal ORDER BY a; +SELECT least(a, 0), least(b, 0), least(g, 0) FROM decimal ORDER BY a; +SELECT greatest(a, 0), greatest(b, 0), greatest(g, 0) FROM decimal ORDER BY a; -SELECT (a, d, g) = (b, e, h), (a, d, g) != (b, e, h) FROM test.decimal ORDER BY a; -SELECT (a, d, g) = (c, f, i), (a, d, g) != (c, f, i) FROM test.decimal ORDER BY a; +SELECT (a, d, g) = (b, e, h), (a, d, g) != (b, e, h) FROM decimal ORDER BY a; +SELECT (a, d, g) = (c, f, i), (a, d, g) != (c, f, i) FROM decimal ORDER BY a; -SELECT toUInt32(2147483648) AS x, a == x FROM test.decimal WHERE a = 42; -- { serverError 407 } -SELECT toUInt64(2147483648) AS x, b == x, x == ((b - 42) + x) FROM test.decimal WHERE a = 42; -SELECT toUInt64(9223372036854775808) AS x, b == x FROM test.decimal WHERE a = 42; -- { serverError 407 } -SELECT toUInt64(9223372036854775808) AS x, c == x, x == ((c - 42) + x) FROM test.decimal WHERE a = 42; +SELECT toUInt32(2147483648) AS x, a == x FROM decimal WHERE a = 42; -- { serverError 407 } +SELECT toUInt64(2147483648) AS x, b == x, x == ((b - 42) + x) FROM decimal WHERE a = 42; +SELECT toUInt64(9223372036854775808) AS x, b == x FROM decimal WHERE a = 42; -- { serverError 407 } +SELECT toUInt64(9223372036854775808) AS x, c == x, x == ((c - 42) + x) FROM decimal WHERE a = 42; -SELECT g = 10000, (g - g + 10000) == 10000 FROM test.decimal WHERE a = 42; -SELECT 10000 = g, 10000 = (g - g + 10000) FROM test.decimal WHERE a = 42; -SELECT g = 30000 FROM test.decimal WHERE a = 42; -- { serverError 407 } -SELECT 30000 = g FROM test.decimal WHERE a = 42; -- { serverError 407 } -SELECT h = 30000, (h - g + 30000) = 30000 FROM test.decimal WHERE a = 42; -SELECT 30000 = h, 30000 = (h - g + 30000) FROM test.decimal WHERE a = 42; -SELECT h = 10000000000 FROM test.decimal WHERE a = 42; -- { serverError 407 } -SELECT i = 10000000000, (i - g + 10000000000) = 10000000000 FROM test.decimal WHERE a = 42; -SELECT 10000000000 = i, 10000000000 = (i - g + 10000000000) FROM test.decimal WHERE a = 42; +SELECT g = 10000, (g - g + 10000) == 10000 FROM decimal WHERE a = 42; +SELECT 10000 = g, 10000 = (g - g + 10000) FROM decimal WHERE a = 42; +SELECT g = 30000 FROM decimal WHERE a = 42; -- { serverError 407 } +SELECT 30000 = g FROM decimal WHERE a = 42; -- { serverError 407 } +SELECT h = 30000, (h - g + 30000) = 30000 FROM decimal WHERE a = 42; +SELECT 30000 = h, 30000 = (h - g + 30000) FROM decimal WHERE a = 42; +SELECT h = 10000000000 FROM decimal WHERE a = 42; -- { serverError 407 } +SELECT i = 10000000000, (i - g + 10000000000) = 10000000000 FROM decimal WHERE a = 42; +SELECT 10000000000 = i, 10000000000 = (i - g + 10000000000) FROM decimal WHERE a = 42; -SELECT min(a), min(b), min(c), min(d), min(e), min(f), min(g), min(h), min(i), min(j) FROM test.decimal; -SELECT max(a), max(b), max(c), max(d), max(e), max(f), max(g), max(h), max(i), max(j) FROM test.decimal; +SELECT min(a), min(b), min(c), min(d), min(e), min(f), min(g), min(h), min(i), min(j) FROM decimal; +SELECT max(a), max(b), max(c), max(d), max(e), max(f), max(g), max(h), max(i), max(j) FROM decimal; -DROP TABLE IF EXISTS test.decimal; +DROP TABLE IF EXISTS decimal; diff --git a/dbms/tests/queries/0_stateless/00700_decimal_complex_types.sql b/dbms/tests/queries/0_stateless/00700_decimal_complex_types.sql index 7cf763b43ea..64c22be058d 100644 --- a/dbms/tests/queries/0_stateless/00700_decimal_complex_types.sql +++ b/dbms/tests/queries/0_stateless/00700_decimal_complex_types.sql @@ -1,7 +1,7 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.decimal; +DROP TABLE IF EXISTS decimal; -CREATE TABLE test.decimal +CREATE TABLE decimal ( a Array(Decimal32(3)), b Array(Decimal64(3)), @@ -15,92 +15,92 @@ CREATE TABLE test.decimal tup Tuple(Decimal32(1), Decimal64(1), Decimal128(1)) ) ENGINE = Memory; -INSERT INTO test.decimal (a, b, c, nest.a, nest.b, nest.c, tup) +INSERT INTO decimal (a, b, c, nest.a, nest.b, nest.c, tup) VALUES ([0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9], [1.1, 1.2], [2.1, 2.2], [3.1, 3.2], (9.1, 9.2, 9.3)); -SELECT toTypeName(a), toTypeName(b), toTypeName(c) FROM test.decimal; -SELECT toTypeName(nest.a), toTypeName(nest.b), toTypeName(nest.c) FROM test.decimal; -SELECT toTypeName(a[1]), toTypeName(b[2]), toTypeName(c[3]) FROM test.decimal; -SELECT toTypeName(nest.a[1]), toTypeName(nest.b[1]), toTypeName(nest.c[1]) FROM test.decimal; -SELECT toTypeName(tup), toTypeName(tup.1), toTypeName(tup.2), toTypeName(tup.3) FROM test.decimal; +SELECT toTypeName(a), toTypeName(b), toTypeName(c) FROM decimal; +SELECT toTypeName(nest.a), toTypeName(nest.b), toTypeName(nest.c) FROM decimal; +SELECT toTypeName(a[1]), toTypeName(b[2]), toTypeName(c[3]) FROM decimal; +SELECT toTypeName(nest.a[1]), toTypeName(nest.b[1]), toTypeName(nest.c[1]) FROM decimal; +SELECT toTypeName(tup), toTypeName(tup.1), toTypeName(tup.2), toTypeName(tup.3) FROM decimal; -SELECT arrayJoin(a) FROM test.decimal; -SELECT arrayJoin(b) FROM test.decimal; -SELECT arrayJoin(c) FROM test.decimal; +SELECT arrayJoin(a) FROM decimal; +SELECT arrayJoin(b) FROM decimal; +SELECT arrayJoin(c) FROM decimal; -SELECT tup, tup.1, tup.2, tup.3 FROM test.decimal; -SELECT a, arrayPopBack(a), arrayPopFront(a), arrayResize(a, 1), arraySlice(a, 2, 1) FROM test.decimal; -SELECT b, arrayPopBack(b), arrayPopFront(b), arrayResize(b, 1), arraySlice(b, 2, 1) FROM test.decimal; -SELECT c, arrayPopBack(c), arrayPopFront(c), arrayResize(c, 1), arraySlice(c, 2, 1) FROM test.decimal; -SELECT nest.a, arrayPopBack(nest.a), arrayPopFront(nest.a), arrayResize(nest.a, 1), arraySlice(nest.a, 2, 1) FROM test.decimal; -SELECT nest.b, arrayPopBack(nest.b), arrayPopFront(nest.b), arrayResize(nest.b, 1), arraySlice(nest.b, 2, 1) FROM test.decimal; -SELECT nest.c, arrayPopBack(nest.c), arrayPopFront(nest.c), arrayResize(nest.c, 1), arraySlice(nest.c, 2, 1) FROM test.decimal; -SELECT arrayPushBack(a, toDecimal32(0, 3)), arrayPushFront(a, toDecimal32(0, 3)) FROM test.decimal; -SELECT arrayPushBack(b, toDecimal64(0, 3)), arrayPushFront(b, toDecimal64(0, 3)) FROM test.decimal; -SELECT arrayPushBack(c, toDecimal128(0, 3)), arrayPushFront(c, toDecimal128(0, 3)) FROM test.decimal; +SELECT tup, tup.1, tup.2, tup.3 FROM decimal; +SELECT a, arrayPopBack(a), arrayPopFront(a), arrayResize(a, 1), arraySlice(a, 2, 1) FROM decimal; +SELECT b, arrayPopBack(b), arrayPopFront(b), arrayResize(b, 1), arraySlice(b, 2, 1) FROM decimal; +SELECT c, arrayPopBack(c), arrayPopFront(c), arrayResize(c, 1), arraySlice(c, 2, 1) FROM decimal; +SELECT nest.a, arrayPopBack(nest.a), arrayPopFront(nest.a), arrayResize(nest.a, 1), arraySlice(nest.a, 2, 1) FROM decimal; +SELECT nest.b, arrayPopBack(nest.b), arrayPopFront(nest.b), arrayResize(nest.b, 1), arraySlice(nest.b, 2, 1) FROM decimal; +SELECT nest.c, arrayPopBack(nest.c), arrayPopFront(nest.c), arrayResize(nest.c, 1), arraySlice(nest.c, 2, 1) FROM decimal; +SELECT arrayPushBack(a, toDecimal32(0, 3)), arrayPushFront(a, toDecimal32(0, 3)) FROM decimal; +SELECT arrayPushBack(b, toDecimal64(0, 3)), arrayPushFront(b, toDecimal64(0, 3)) FROM decimal; +SELECT arrayPushBack(c, toDecimal128(0, 3)), arrayPushFront(c, toDecimal128(0, 3)) FROM decimal; -SELECT arrayPushBack(a, toDecimal32(0, 2)) AS x, toTypeName(x) FROM test.decimal; -SELECT arrayPushBack(b, toDecimal64(0, 2)) AS x, toTypeName(x) FROM test.decimal; -SELECT arrayPushBack(c, toDecimal128(0, 2)) AS x, toTypeName(x) FROM test.decimal; -SELECT arrayPushFront(a, toDecimal32(0, 4)) AS x, toTypeName(x) FROM test.decimal; -SELECT arrayPushFront(b, toDecimal64(0, 4)) AS x, toTypeName(x) FROM test.decimal; -SELECT arrayPushFront(c, toDecimal128(0, 4)) AS x, toTypeName(x) FROM test.decimal; +SELECT arrayPushBack(a, toDecimal32(0, 2)) AS x, toTypeName(x) FROM decimal; +SELECT arrayPushBack(b, toDecimal64(0, 2)) AS x, toTypeName(x) FROM decimal; +SELECT arrayPushBack(c, toDecimal128(0, 2)) AS x, toTypeName(x) FROM decimal; +SELECT arrayPushFront(a, toDecimal32(0, 4)) AS x, toTypeName(x) FROM decimal; +SELECT arrayPushFront(b, toDecimal64(0, 4)) AS x, toTypeName(x) FROM decimal; +SELECT arrayPushFront(c, toDecimal128(0, 4)) AS x, toTypeName(x) FROM decimal; -SELECT length(a), length(b), length(c) FROM test.decimal; -SELECT length(nest.a), length(nest.b), length(nest.c) FROM test.decimal; -SELECT empty(a), empty(b), empty(c) FROM test.decimal; -SELECT empty(nest.a), empty(nest.b), empty(nest.c) FROM test.decimal; -SELECT notEmpty(a), notEmpty(b), notEmpty(c) FROM test.decimal; -SELECT notEmpty(nest.a), notEmpty(nest.b), notEmpty(nest.c) FROM test.decimal; -SELECT arrayUniq(a), arrayUniq(b), arrayUniq(c) FROM test.decimal; -SELECT arrayUniq(nest.a), arrayUniq(nest.b), arrayUniq(nest.c) FROM test.decimal; +SELECT length(a), length(b), length(c) FROM decimal; +SELECT length(nest.a), length(nest.b), length(nest.c) FROM decimal; +SELECT empty(a), empty(b), empty(c) FROM decimal; +SELECT empty(nest.a), empty(nest.b), empty(nest.c) FROM decimal; +SELECT notEmpty(a), notEmpty(b), notEmpty(c) FROM decimal; +SELECT notEmpty(nest.a), notEmpty(nest.b), notEmpty(nest.c) FROM decimal; +SELECT arrayUniq(a), arrayUniq(b), arrayUniq(c) FROM decimal; +SELECT arrayUniq(nest.a), arrayUniq(nest.b), arrayUniq(nest.c) FROM decimal; -SELECT has(a, toDecimal32(0.1, 3)), has(a, toDecimal32(1.0, 3)) FROM test.decimal; -SELECT has(b, toDecimal64(0.4, 3)), has(b, toDecimal64(1.0, 3)) FROM test.decimal; -SELECT has(c, toDecimal128(0.7, 3)), has(c, toDecimal128(1.0, 3)) FROM test.decimal; +SELECT has(a, toDecimal32(0.1, 3)), has(a, toDecimal32(1.0, 3)) FROM decimal; +SELECT has(b, toDecimal64(0.4, 3)), has(b, toDecimal64(1.0, 3)) FROM decimal; +SELECT has(c, toDecimal128(0.7, 3)), has(c, toDecimal128(1.0, 3)) FROM decimal; -SELECT has(a, toDecimal32(0.1, 2)) FROM test.decimal; -- { serverError 43 } -SELECT has(a, toDecimal32(0.1, 4)) FROM test.decimal; -- { serverError 43 } -SELECT has(a, toDecimal64(0.1, 3)) FROM test.decimal; -- { serverError 43 } -SELECT has(a, toDecimal128(0.1, 3)) FROM test.decimal; -- { serverError 43 } -SELECT has(b, toDecimal32(0.4, 3)) FROM test.decimal; -- { serverError 43 } -SELECT has(b, toDecimal64(0.4, 2)) FROM test.decimal; -- { serverError 43 } -SELECT has(b, toDecimal64(0.4, 4)) FROM test.decimal; -- { serverError 43 } -SELECT has(b, toDecimal128(0.4, 3)) FROM test.decimal; -- { serverError 43 } -SELECT has(c, toDecimal32(0.7, 3)) FROM test.decimal; -- { serverError 43 } -SELECT has(c, toDecimal64(0.7, 3)) FROM test.decimal; -- { serverError 43 } -SELECT has(c, toDecimal128(0.7, 2)) FROM test.decimal; -- { serverError 43 } -SELECT has(c, toDecimal128(0.7, 4)) FROM test.decimal; -- { serverError 43 } +SELECT has(a, toDecimal32(0.1, 2)) FROM decimal; -- { serverError 43 } +SELECT has(a, toDecimal32(0.1, 4)) FROM decimal; -- { serverError 43 } +SELECT has(a, toDecimal64(0.1, 3)) FROM decimal; -- { serverError 43 } +SELECT has(a, toDecimal128(0.1, 3)) FROM decimal; -- { serverError 43 } +SELECT has(b, toDecimal32(0.4, 3)) FROM decimal; -- { serverError 43 } +SELECT has(b, toDecimal64(0.4, 2)) FROM decimal; -- { serverError 43 } +SELECT has(b, toDecimal64(0.4, 4)) FROM decimal; -- { serverError 43 } +SELECT has(b, toDecimal128(0.4, 3)) FROM decimal; -- { serverError 43 } +SELECT has(c, toDecimal32(0.7, 3)) FROM decimal; -- { serverError 43 } +SELECT has(c, toDecimal64(0.7, 3)) FROM decimal; -- { serverError 43 } +SELECT has(c, toDecimal128(0.7, 2)) FROM decimal; -- { serverError 43 } +SELECT has(c, toDecimal128(0.7, 4)) FROM decimal; -- { serverError 43 } -SELECT indexOf(a, toDecimal32(0.1, 3)), indexOf(a, toDecimal32(1.0, 3)) FROM test.decimal; -SELECT indexOf(b, toDecimal64(0.5, 3)), indexOf(b, toDecimal64(1.0, 3)) FROM test.decimal; -SELECT indexOf(c, toDecimal128(0.9, 3)), indexOf(c, toDecimal128(1.0, 3)) FROM test.decimal; +SELECT indexOf(a, toDecimal32(0.1, 3)), indexOf(a, toDecimal32(1.0, 3)) FROM decimal; +SELECT indexOf(b, toDecimal64(0.5, 3)), indexOf(b, toDecimal64(1.0, 3)) FROM decimal; +SELECT indexOf(c, toDecimal128(0.9, 3)), indexOf(c, toDecimal128(1.0, 3)) FROM decimal; -SELECT indexOf(a, toDecimal32(0.1, 2)) FROM test.decimal; -- { serverError 43 } -SELECT indexOf(a, toDecimal32(0.1, 4)) FROM test.decimal; -- { serverError 43 } -SELECT indexOf(a, toDecimal64(0.1, 3)) FROM test.decimal; -- { serverError 43 } -SELECT indexOf(a, toDecimal128(0.1, 3)) FROM test.decimal; -- { serverError 43 } -SELECT indexOf(b, toDecimal32(0.4, 3)) FROM test.decimal; -- { serverError 43 } -SELECT indexOf(b, toDecimal64(0.4, 2)) FROM test.decimal; -- { serverError 43 } -SELECT indexOf(b, toDecimal64(0.4, 4)) FROM test.decimal; -- { serverError 43 } -SELECT indexOf(b, toDecimal128(0.4, 3)) FROM test.decimal; -- { serverError 43 } -SELECT indexOf(c, toDecimal32(0.7, 3)) FROM test.decimal; -- { serverError 43 } -SELECT indexOf(c, toDecimal64(0.7, 3)) FROM test.decimal; -- { serverError 43 } -SELECT indexOf(c, toDecimal128(0.7, 2)) FROM test.decimal; -- { serverError 43 } -SELECT indexOf(c, toDecimal128(0.7, 4)) FROM test.decimal; -- { serverError 43 } +SELECT indexOf(a, toDecimal32(0.1, 2)) FROM decimal; -- { serverError 43 } +SELECT indexOf(a, toDecimal32(0.1, 4)) FROM decimal; -- { serverError 43 } +SELECT indexOf(a, toDecimal64(0.1, 3)) FROM decimal; -- { serverError 43 } +SELECT indexOf(a, toDecimal128(0.1, 3)) FROM decimal; -- { serverError 43 } +SELECT indexOf(b, toDecimal32(0.4, 3)) FROM decimal; -- { serverError 43 } +SELECT indexOf(b, toDecimal64(0.4, 2)) FROM decimal; -- { serverError 43 } +SELECT indexOf(b, toDecimal64(0.4, 4)) FROM decimal; -- { serverError 43 } +SELECT indexOf(b, toDecimal128(0.4, 3)) FROM decimal; -- { serverError 43 } +SELECT indexOf(c, toDecimal32(0.7, 3)) FROM decimal; -- { serverError 43 } +SELECT indexOf(c, toDecimal64(0.7, 3)) FROM decimal; -- { serverError 43 } +SELECT indexOf(c, toDecimal128(0.7, 2)) FROM decimal; -- { serverError 43 } +SELECT indexOf(c, toDecimal128(0.7, 4)) FROM decimal; -- { serverError 43 } -SELECT arrayConcat(a, b) AS x, toTypeName(x) FROM test.decimal; -SELECT arrayConcat(a, c) AS x, toTypeName(x) FROM test.decimal; -SELECT arrayConcat(b, c) AS x, toTypeName(x) FROM test.decimal; -SELECT arrayConcat(a, nest.a) AS x, toTypeName(x) FROM test.decimal; -SELECT arrayConcat(b, nest.b) AS x, toTypeName(x) FROM test.decimal; -SELECT arrayConcat(c, nest.c) AS x, toTypeName(x) FROM test.decimal; -SELECT arrayConcat(a, nest.b) AS x, toTypeName(x) FROM test.decimal; -SELECT arrayConcat(a, nest.c) AS x, toTypeName(x) FROM test.decimal; -SELECT arrayConcat(b, nest.a) AS x, toTypeName(x) FROM test.decimal; -SELECT arrayConcat(b, nest.c) AS x, toTypeName(x) FROM test.decimal; -SELECT arrayConcat(c, nest.a) AS x, toTypeName(x) FROM test.decimal; -SELECT arrayConcat(c, nest.b) AS x, toTypeName(x) FROM test.decimal; +SELECT arrayConcat(a, b) AS x, toTypeName(x) FROM decimal; +SELECT arrayConcat(a, c) AS x, toTypeName(x) FROM decimal; +SELECT arrayConcat(b, c) AS x, toTypeName(x) FROM decimal; +SELECT arrayConcat(a, nest.a) AS x, toTypeName(x) FROM decimal; +SELECT arrayConcat(b, nest.b) AS x, toTypeName(x) FROM decimal; +SELECT arrayConcat(c, nest.c) AS x, toTypeName(x) FROM decimal; +SELECT arrayConcat(a, nest.b) AS x, toTypeName(x) FROM decimal; +SELECT arrayConcat(a, nest.c) AS x, toTypeName(x) FROM decimal; +SELECT arrayConcat(b, nest.a) AS x, toTypeName(x) FROM decimal; +SELECT arrayConcat(b, nest.c) AS x, toTypeName(x) FROM decimal; +SELECT arrayConcat(c, nest.a) AS x, toTypeName(x) FROM decimal; +SELECT arrayConcat(c, nest.b) AS x, toTypeName(x) FROM decimal; SELECT toDecimal32(12345.6789, 4) AS x, countEqual([x+1, x, x], x), countEqual([x, x-1, x], x), countEqual([x, x], x-0); SELECT toDecimal32(-12345.6789, 4) AS x, countEqual([x+1, x, x], x), countEqual([x, x-1, x], x), countEqual([x, x], x+0); @@ -171,4 +171,4 @@ SELECT number % 2 ? toDecimal128('128.1', 5) : toDecimal32('32.2', 1) FROM syste SELECT number % 2 ? toDecimal128('128.1', 5) : toDecimal64('64.2', 2) FROM system.numbers LIMIT 2; -- { serverError 48 } SELECT number % 2 ? toDecimal128('128.1', 5) : toDecimal128('128.2', 3) FROM system.numbers LIMIT 2; -- { serverError 48 } -DROP TABLE IF EXISTS test.decimal; +DROP TABLE IF EXISTS decimal; diff --git a/dbms/tests/queries/0_stateless/00700_decimal_defaults.reference b/dbms/tests/queries/0_stateless/00700_decimal_defaults.reference index c0c5de4d8a9..f7358cd311b 100644 --- a/dbms/tests/queries/0_stateless/00700_decimal_defaults.reference +++ b/dbms/tests/queries/0_stateless/00700_decimal_defaults.reference @@ -1,9 +1,9 @@ -a Decimal(9, 4) DEFAULT CAST(0, \'Decimal(9, 4)\') -b Decimal(18, 4) DEFAULT CAST(a / 2, \'Decimal(18, 4)\') -c Decimal(38, 4) DEFAULT CAST(b / 3, \'Decimal(38, 4)\') -d Decimal(9, 4) MATERIALIZED a + toDecimal32(\'0.2\', 1) -e Decimal(18, 4) ALIAS b * 2 -f Decimal(38, 4) ALIAS c * 6 +a Decimal(9, 4) DEFAULT CAST(0, \'Decimal(9, 4)\') +b Decimal(18, 4) DEFAULT CAST(a / 2, \'Decimal(18, 4)\') +c Decimal(38, 4) DEFAULT CAST(b / 3, \'Decimal(38, 4)\') +d Decimal(9, 4) MATERIALIZED a + toDecimal32(\'0.2\', 1) +e Decimal(18, 4) ALIAS b * 2 +f Decimal(38, 4) ALIAS c * 6 0.0000 0.0000 0.0000 1.0000 0.5000 0.1666 2.0000 1.0000 0.3333 diff --git a/dbms/tests/queries/0_stateless/00700_decimal_defaults.sql b/dbms/tests/queries/0_stateless/00700_decimal_defaults.sql index e61d7ef9df9..32410847726 100644 --- a/dbms/tests/queries/0_stateless/00700_decimal_defaults.sql +++ b/dbms/tests/queries/0_stateless/00700_decimal_defaults.sql @@ -1,7 +1,7 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.decimal; +DROP TABLE IF EXISTS decimal; -CREATE TABLE IF NOT EXISTS test.decimal +CREATE TABLE IF NOT EXISTS decimal ( a DECIMAL(9,4) DEFAULT 0, b DECIMAL(18,4) DEFAULT a / 2, @@ -11,10 +11,10 @@ CREATE TABLE IF NOT EXISTS test.decimal f ALIAS c * 6 ) ENGINE = Memory; -DESC TABLE test.decimal; +DESC TABLE decimal; -INSERT INTO test.decimal (a) VALUES (0), (1), (2), (3); -SELECT * FROM test.decimal; -SELECT a, b, c, d, e, f FROM test.decimal; +INSERT INTO decimal (a) VALUES (0), (1), (2), (3); +SELECT * FROM decimal; +SELECT a, b, c, d, e, f FROM decimal; -DROP TABLE IF EXISTS test.decimal; +DROP TABLE IF EXISTS decimal; diff --git a/dbms/tests/queries/0_stateless/00700_decimal_formats.sql b/dbms/tests/queries/0_stateless/00700_decimal_formats.sql index 90008b608b3..16a47f5e9b1 100644 --- a/dbms/tests/queries/0_stateless/00700_decimal_formats.sql +++ b/dbms/tests/queries/0_stateless/00700_decimal_formats.sql @@ -1,34 +1,34 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.decimal; +DROP TABLE IF EXISTS decimal; -CREATE TABLE IF NOT EXISTS test.decimal +CREATE TABLE IF NOT EXISTS decimal ( a DEC(9, 3), b DEC(18, 9), c DEC(38, 18) ) ENGINE = Memory; -INSERT INTO test.decimal (a, b, c) VALUES (42.0, -42.0, 42) (0.42, -0.42, .42) (42.42, -42.42, 42.42); -INSERT INTO test.decimal (a, b, c) FORMAT JSONEachRow {"a":1.1, "b":-1.1, "c":1.1} {"a":1.0, "b":-1.0, "c":1} {"a":0.1, "b":-0.1, "c":.1}; -INSERT INTO test.decimal (a, b, c) FORMAT CSV 2.0,-2.0,2 +INSERT INTO decimal (a, b, c) VALUES (42.0, -42.0, 42) (0.42, -0.42, .42) (42.42, -42.42, 42.42); +INSERT INTO decimal (a, b, c) FORMAT JSONEachRow {"a":1.1, "b":-1.1, "c":1.1} {"a":1.0, "b":-1.0, "c":1} {"a":0.1, "b":-0.1, "c":.1}; +INSERT INTO decimal (a, b, c) FORMAT CSV 2.0,-2.0,2 ; -INSERT INTO test.decimal (a, b, c) FORMAT CSV 0.2 ,-0.2 ,.2 +INSERT INTO decimal (a, b, c) FORMAT CSV 0.2 ,-0.2 ,.2 ; -INSERT INTO test.decimal (a, b, c) FORMAT CSV 2.2 , -2.2 , 2.2 +INSERT INTO decimal (a, b, c) FORMAT CSV 2.2 , -2.2 , 2.2 ; -INSERT INTO test.decimal (a, b, c) FORMAT TabSeparated 3.3 -3.3 3.3 +INSERT INTO decimal (a, b, c) FORMAT TabSeparated 3.3 -3.3 3.3 ; -INSERT INTO test.decimal (a, b, c) FORMAT TabSeparated 3.0 -3.0 3 +INSERT INTO decimal (a, b, c) FORMAT TabSeparated 3.0 -3.0 3 ; -INSERT INTO test.decimal (a, b, c) FORMAT TabSeparated 0.3 -0.3 .3 +INSERT INTO decimal (a, b, c) FORMAT TabSeparated 0.3 -0.3 .3 ; -INSERT INTO test.decimal (a, b, c) FORMAT CSV 4.4E+5,-4E+8,.4E+20 +INSERT INTO decimal (a, b, c) FORMAT CSV 4.4E+5,-4E+8,.4E+20 ; -INSERT INTO test.decimal (a, b, c) FORMAT CSV 5.5e-2, -5e-9 ,.5e-17 +INSERT INTO decimal (a, b, c) FORMAT CSV 5.5e-2, -5e-9 ,.5e-17 ; -SELECT * FROM test.decimal ORDER BY a FORMAT JSONEachRow; -SELECT * FROM test.decimal ORDER BY b DESC FORMAT CSV; -SELECT * FROM test.decimal ORDER BY c FORMAT TabSeparated; +SELECT * FROM decimal ORDER BY a FORMAT JSONEachRow; +SELECT * FROM decimal ORDER BY b DESC FORMAT CSV; +SELECT * FROM decimal ORDER BY c FORMAT TabSeparated; -DROP TABLE IF EXISTS test.decimal; +DROP TABLE IF EXISTS decimal; diff --git a/dbms/tests/queries/0_stateless/00700_decimal_in_keys.sql b/dbms/tests/queries/0_stateless/00700_decimal_in_keys.sql index 46d440b32b4..9c52572a1f7 100644 --- a/dbms/tests/queries/0_stateless/00700_decimal_in_keys.sql +++ b/dbms/tests/queries/0_stateless/00700_decimal_in_keys.sql @@ -1,7 +1,7 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.decimal; +DROP TABLE IF EXISTS decimal; -CREATE TABLE IF NOT EXISTS test.decimal +CREATE TABLE IF NOT EXISTS decimal ( d1 DECIMAL(9, 8), d2 DECIMAL(18, 8), @@ -11,20 +11,20 @@ ENGINE = MergeTree PARTITION BY toInt32(d1) ORDER BY (d2, d3); -INSERT INTO test.decimal (d1, d2, d3) VALUES (4.2, 4.2, 4.2); +INSERT INTO decimal (d1, d2, d3) VALUES (4.2, 4.2, 4.2); -SELECT count() FROM test.decimal WHERE d1 = toDecimal32('4.2', 8); -SELECT count() FROM test.decimal WHERE d1 != toDecimal32('4.2', 8); -SELECT count() FROM test.decimal WHERE d1 < toDecimal32('4.2', 8); -SELECT count() FROM test.decimal WHERE d1 > toDecimal32('4.2', 8); -SELECT count() FROM test.decimal WHERE d1 <= toDecimal32('4.2', 8); -SELECT count() FROM test.decimal WHERE d1 >= toDecimal32('4.2', 8); +SELECT count() FROM decimal WHERE d1 = toDecimal32('4.2', 8); +SELECT count() FROM decimal WHERE d1 != toDecimal32('4.2', 8); +SELECT count() FROM decimal WHERE d1 < toDecimal32('4.2', 8); +SELECT count() FROM decimal WHERE d1 > toDecimal32('4.2', 8); +SELECT count() FROM decimal WHERE d1 <= toDecimal32('4.2', 8); +SELECT count() FROM decimal WHERE d1 >= toDecimal32('4.2', 8); -INSERT INTO test.decimal (d1, d2, d3) +INSERT INTO decimal (d1, d2, d3) SELECT toDecimal32(number % 10, 8), toDecimal64(number, 8), toDecimal128(number, 8) FROM system.numbers LIMIT 50; -SELECT count() FROM test.decimal WHERE d1 = 1; -SELECT * FROM test.decimal WHERE d1 > 5 AND d2 < 30 ORDER BY d2 DESC; -SELECT * FROM test.decimal WHERE d1 IN(1, 3) ORDER BY d2; +SELECT count() FROM decimal WHERE d1 = 1; +SELECT * FROM decimal WHERE d1 > 5 AND d2 < 30 ORDER BY d2 DESC; +SELECT * FROM decimal WHERE d1 IN(1, 3) ORDER BY d2; -DROP TABLE test.decimal; +DROP TABLE decimal; diff --git a/dbms/tests/queries/0_stateless/00700_decimal_null.sql b/dbms/tests/queries/0_stateless/00700_decimal_null.sql index 1cc389b29c9..84398182b43 100644 --- a/dbms/tests/queries/0_stateless/00700_decimal_null.sql +++ b/dbms/tests/queries/0_stateless/00700_decimal_null.sql @@ -1,7 +1,7 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.decimal; +DROP TABLE IF EXISTS decimal; -CREATE TABLE IF NOT EXISTS test.decimal +CREATE TABLE IF NOT EXISTS decimal ( a DEC(9, 2), b DEC(18, 5), @@ -35,27 +35,27 @@ SELECT nullIf(toDecimal128(1, 0), toNullable(toDecimal128(1, 0))); SELECT nullIf(toNullable(toDecimal128(1, 0)), toDecimal128(2, 0)); SELECT nullIf(toDecimal128(1, 0), toNullable(toDecimal128(2, 0))); -INSERT INTO test.decimal (a, b, c, d, e, f) VALUES (1.1, 1.1, 1.1, 1.1, 1.1, 1.1); -INSERT INTO test.decimal (a, b, c, d) VALUES (2.2, 2.2, 2.2, 2.2); -INSERT INTO test.decimal (a, b, c, e) VALUES (3.3, 3.3, 3.3, 3.3); -INSERT INTO test.decimal (a, b, c, f) VALUES (4.4, 4.4, 4.4, 4.4); -INSERT INTO test.decimal (a, b, c) VALUES (5.5, 5.5, 5.5); +INSERT INTO decimal (a, b, c, d, e, f) VALUES (1.1, 1.1, 1.1, 1.1, 1.1, 1.1); +INSERT INTO decimal (a, b, c, d) VALUES (2.2, 2.2, 2.2, 2.2); +INSERT INTO decimal (a, b, c, e) VALUES (3.3, 3.3, 3.3, 3.3); +INSERT INTO decimal (a, b, c, f) VALUES (4.4, 4.4, 4.4, 4.4); +INSERT INTO decimal (a, b, c) VALUES (5.5, 5.5, 5.5); -SELECT * FROM test.decimal ORDER BY d, e, f; -SELECT isNull(a), isNotNull(a) FROM test.decimal WHERE a = toDecimal32(5.5, 1); -SELECT isNull(b), isNotNull(b) FROM test.decimal WHERE a = toDecimal32(5.5, 1); -SELECT isNull(c), isNotNull(c) FROM test.decimal WHERE a = toDecimal32(5.5, 1); -SELECT isNull(d), isNotNull(d) FROM test.decimal WHERE a = toDecimal32(5.5, 1); -SELECT isNull(e), isNotNull(e) FROM test.decimal WHERE a = toDecimal32(5.5, 1); -SELECT isNull(f), isNotNull(f) FROM test.decimal WHERE a = toDecimal32(5.5, 1); -SELECT count() FROM test.decimal WHERE a IS NOT NULL; -SELECT count() FROM test.decimal WHERE b IS NOT NULL; -SELECT count() FROM test.decimal WHERE c IS NOT NULL; -SELECT count() FROM test.decimal WHERE d IS NULL; -SELECT count() FROM test.decimal WHERE e IS NULL; -SELECT count() FROM test.decimal WHERE f IS NULL; -SELECT count() FROM test.decimal WHERE d IS NULL AND e IS NULL; -SELECT count() FROM test.decimal WHERE d IS NULL AND f IS NULL; -SELECT count() FROM test.decimal WHERE e IS NULL AND f IS NULL; +SELECT * FROM decimal ORDER BY d, e, f; +SELECT isNull(a), isNotNull(a) FROM decimal WHERE a = toDecimal32(5.5, 1); +SELECT isNull(b), isNotNull(b) FROM decimal WHERE a = toDecimal32(5.5, 1); +SELECT isNull(c), isNotNull(c) FROM decimal WHERE a = toDecimal32(5.5, 1); +SELECT isNull(d), isNotNull(d) FROM decimal WHERE a = toDecimal32(5.5, 1); +SELECT isNull(e), isNotNull(e) FROM decimal WHERE a = toDecimal32(5.5, 1); +SELECT isNull(f), isNotNull(f) FROM decimal WHERE a = toDecimal32(5.5, 1); +SELECT count() FROM decimal WHERE a IS NOT NULL; +SELECT count() FROM decimal WHERE b IS NOT NULL; +SELECT count() FROM decimal WHERE c IS NOT NULL; +SELECT count() FROM decimal WHERE d IS NULL; +SELECT count() FROM decimal WHERE e IS NULL; +SELECT count() FROM decimal WHERE f IS NULL; +SELECT count() FROM decimal WHERE d IS NULL AND e IS NULL; +SELECT count() FROM decimal WHERE d IS NULL AND f IS NULL; +SELECT count() FROM decimal WHERE e IS NULL AND f IS NULL; -DROP TABLE IF EXISTS test.decimal; +DROP TABLE IF EXISTS decimal; diff --git a/dbms/tests/queries/0_stateless/00701_join_default_strictness.sql b/dbms/tests/queries/0_stateless/00701_join_default_strictness.sql index 0a952d7210b..ad3dbde629a 100644 --- a/dbms/tests/queries/0_stateless/00701_join_default_strictness.sql +++ b/dbms/tests/queries/0_stateless/00701_join_default_strictness.sql @@ -1,21 +1,21 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.a1; -DROP TABLE IF EXISTS test.a2; +DROP TABLE IF EXISTS a1; +DROP TABLE IF EXISTS a2; SET send_logs_level = 'none'; -CREATE TABLE test.a1(a UInt8, b UInt8) ENGINE=Memory; -CREATE TABLE test.a2(a UInt8, b UInt8) ENGINE=Memory; +CREATE TABLE a1(a UInt8, b UInt8) ENGINE=Memory; +CREATE TABLE a2(a UInt8, b UInt8) ENGINE=Memory; -INSERT INTO test.a1 VALUES (1, 1); -INSERT INTO test.a1 VALUES (1, 2); -INSERT INTO test.a1 VALUES (1, 3); -INSERT INTO test.a2 VALUES (1, 2); -INSERT INTO test.a2 VALUES (1, 3); -INSERT INTO test.a2 VALUES (1, 4); +INSERT INTO a1 VALUES (1, 1); +INSERT INTO a1 VALUES (1, 2); +INSERT INTO a1 VALUES (1, 3); +INSERT INTO a2 VALUES (1, 2); +INSERT INTO a2 VALUES (1, 3); +INSERT INTO a2 VALUES (1, 4); -SELECT a, b FROM test.a1 LEFT JOIN (SELECT a, b FROM test.a2) USING a ORDER BY b SETTINGS join_default_strictness='ANY'; -SELECT a, b FROM test.a1 LEFT JOIN (SELECT a, b FROM test.a2) USING a ORDER BY b; -- default SETTINGS join_default_strictness='ALL'; +SELECT a, b FROM a1 LEFT JOIN (SELECT a, b FROM a2) USING a ORDER BY b SETTINGS join_default_strictness='ANY'; +SELECT a, b FROM a1 LEFT JOIN (SELECT a, b FROM a2) USING a ORDER BY b; -- default SETTINGS join_default_strictness='ALL'; -DROP TABLE IF EXISTS test.a1; -DROP TABLE IF EXISTS test.a2; +DROP TABLE IF EXISTS a1; +DROP TABLE IF EXISTS a2; diff --git a/dbms/tests/queries/0_stateless/00701_rollup.sql b/dbms/tests/queries/0_stateless/00701_rollup.sql index 1a52ccd09dc..cbb5dc73981 100644 --- a/dbms/tests/queries/0_stateless/00701_rollup.sql +++ b/dbms/tests/queries/0_stateless/00701_rollup.sql @@ -1,21 +1,21 @@ -DROP TABLE IF EXISTS test.rollup; -CREATE TABLE test.rollup(a String, b Int32, s Int32) ENGINE = Memory; +DROP TABLE IF EXISTS rollup; +CREATE TABLE rollup(a String, b Int32, s Int32) ENGINE = Memory; -INSERT INTO test.rollup VALUES('a', 1, 10); -INSERT INTO test.rollup VALUES('a', 1, 15); -INSERT INTO test.rollup VALUES('a', 2, 20); -INSERT INTO test.rollup VALUES('a', 2, 25); -INSERT INTO test.rollup VALUES('b', 1, 10); -INSERT INTO test.rollup VALUES('b', 1, 5); -INSERT INTO test.rollup VALUES('b', 2, 20); -INSERT INTO test.rollup VALUES('b', 2, 15); +INSERT INTO rollup VALUES('a', 1, 10); +INSERT INTO rollup VALUES('a', 1, 15); +INSERT INTO rollup VALUES('a', 2, 20); +INSERT INTO rollup VALUES('a', 2, 25); +INSERT INTO rollup VALUES('b', 1, 10); +INSERT INTO rollup VALUES('b', 1, 5); +INSERT INTO rollup VALUES('b', 2, 20); +INSERT INTO rollup VALUES('b', 2, 15); -SELECT a, b, sum(s), count() from test.rollup GROUP BY ROLLUP(a, b) ORDER BY a, b; +SELECT a, b, sum(s), count() from rollup GROUP BY ROLLUP(a, b) ORDER BY a, b; -SELECT a, b, sum(s), count() from test.rollup GROUP BY ROLLUP(a, b) WITH TOTALS ORDER BY a, b; +SELECT a, b, sum(s), count() from rollup GROUP BY ROLLUP(a, b) WITH TOTALS ORDER BY a, b; -SELECT a, sum(s), count() from test.rollup GROUP BY ROLLUP(a) ORDER BY a; +SELECT a, sum(s), count() from rollup GROUP BY ROLLUP(a) ORDER BY a; -SELECT a, sum(s), count() from test.rollup GROUP BY a WITH ROLLUP ORDER BY a; +SELECT a, sum(s), count() from rollup GROUP BY a WITH ROLLUP ORDER BY a; -SELECT a, sum(s), count() from test.rollup GROUP BY a WITH ROLLUP WITH TOTALS ORDER BY a; +SELECT a, sum(s), count() from rollup GROUP BY a WITH ROLLUP WITH TOTALS ORDER BY a; diff --git a/dbms/tests/queries/0_stateless/00702_join_on_dups.sql b/dbms/tests/queries/0_stateless/00702_join_on_dups.sql index 577681053a9..ca774a0a6c3 100644 --- a/dbms/tests/queries/0_stateless/00702_join_on_dups.sql +++ b/dbms/tests/queries/0_stateless/00702_join_on_dups.sql @@ -1,4 +1,3 @@ -use test; drop table if exists X; drop table if exists Y; diff --git a/dbms/tests/queries/0_stateless/00702_join_with_using.sql b/dbms/tests/queries/0_stateless/00702_join_with_using.sql index 6956730eabf..d30ce2293fc 100644 --- a/dbms/tests/queries/0_stateless/00702_join_with_using.sql +++ b/dbms/tests/queries/0_stateless/00702_join_with_using.sql @@ -1,20 +1,19 @@ -DROP TABLE IF EXISTS test.using1; -DROP TABLE IF EXISTS test.using2; +DROP TABLE IF EXISTS using1; +DROP TABLE IF EXISTS using2; -CREATE TABLE test.using1(a UInt8, b UInt8) ENGINE=Memory; -CREATE TABLE test.using2(a UInt8, b UInt8) ENGINE=Memory; +CREATE TABLE using1(a UInt8, b UInt8) ENGINE=Memory; +CREATE TABLE using2(a UInt8, b UInt8) ENGINE=Memory; -INSERT INTO test.using1 VALUES (1, 1) (2, 2) (3, 3); -INSERT INTO test.using2 VALUES (4, 4) (2, 2) (3, 3); +INSERT INTO using1 VALUES (1, 1) (2, 2) (3, 3); +INSERT INTO using2 VALUES (4, 4) (2, 2) (3, 3); -SELECT * FROM test.using1 ALL LEFT JOIN (SELECT * FROM test.using2) USING (a, a, a, b, b, b, a, a) ORDER BY a; +SELECT * FROM using1 ALL LEFT JOIN (SELECT * FROM using2) USING (a, a, a, b, b, b, a, a) ORDER BY a; -DROP TABLE test.using1; -DROP TABLE test.using2; +DROP TABLE using1; +DROP TABLE using2; -- -use test; drop table if exists persons; drop table if exists children; diff --git a/dbms/tests/queries/0_stateless/00702_join_with_using_dups.sql b/dbms/tests/queries/0_stateless/00702_join_with_using_dups.sql index 4f68381c28f..d45c6628b9a 100644 --- a/dbms/tests/queries/0_stateless/00702_join_with_using_dups.sql +++ b/dbms/tests/queries/0_stateless/00702_join_with_using_dups.sql @@ -1,4 +1,3 @@ -use test; drop table if exists X; drop table if exists Y; diff --git a/dbms/tests/queries/0_stateless/00702_where_with_quailified_names.sql b/dbms/tests/queries/0_stateless/00702_where_with_quailified_names.sql index 91948d720fd..60dadff14fb 100644 --- a/dbms/tests/queries/0_stateless/00702_where_with_quailified_names.sql +++ b/dbms/tests/queries/0_stateless/00702_where_with_quailified_names.sql @@ -1,4 +1,3 @@ -USE test; DROP TABLE IF EXISTS where_qualified; CREATE TABLE where_qualified(a UInt32, b UInt8) ENGINE = Memory; INSERT INTO where_qualified VALUES(1, 1); diff --git a/dbms/tests/queries/0_stateless/00703_join_crash.sql b/dbms/tests/queries/0_stateless/00703_join_crash.sql index 29b86e055fb..eb968580b7c 100644 --- a/dbms/tests/queries/0_stateless/00703_join_crash.sql +++ b/dbms/tests/queries/0_stateless/00703_join_crash.sql @@ -1,13 +1,13 @@ -drop table IF EXISTS test.tab1; -drop table IF EXISTS test.tab1_copy; +drop table IF EXISTS tab1; +drop table IF EXISTS tab1_copy; -create table test.tab1 (a1 Int32, b1 Int32) engine = MergeTree order by a1; -create table test.tab1_copy (a1 Int32, b1 Int32) engine = MergeTree order by a1; +create table tab1 (a1 Int32, b1 Int32) engine = MergeTree order by a1; +create table tab1_copy (a1 Int32, b1 Int32) engine = MergeTree order by a1; -insert into test.tab1 values (1, 2); -insert into test.tab1_copy values (2, 3); +insert into tab1 values (1, 2); +insert into tab1_copy values (2, 3); -select tab1.a1, tab1_copy.a1, tab1.b1 from test.tab1 any left join test.tab1_copy on tab1.b1 + 3 = tab1_copy.b1 + 2; +select tab1.a1, tab1_copy.a1, tab1.b1 from tab1 any left join tab1_copy on tab1.b1 + 3 = tab1_copy.b1 + 2; -drop table test.tab1; -drop table test.tab1_copy; +drop table tab1; +drop table tab1_copy; diff --git a/dbms/tests/queries/0_stateless/00704_arrayCumSumLimited_arrayDifference.sql b/dbms/tests/queries/0_stateless/00704_arrayCumSumLimited_arrayDifference.sql index 22220896b40..06dfe87a2d9 100644 --- a/dbms/tests/queries/0_stateless/00704_arrayCumSumLimited_arrayDifference.sql +++ b/dbms/tests/queries/0_stateless/00704_arrayCumSumLimited_arrayDifference.sql @@ -1,4 +1,4 @@ -DROP TABLE IF EXISTS test.test; +DROP TABLE IF EXISTS test; SELECT arrayCumSumNonNegative([1, 2, 3, 4]); @@ -8,21 +8,21 @@ SELECT arrayDifference([1, 2, 3, 4]); SELECT arrayDifference([1, 7, 100, 5]); -CREATE TABLE test.test(a Array(Int64), b Array(Float64), c Array(UInt64)) ENGINE=Memory; +CREATE TABLE test(a Array(Int64), b Array(Float64), c Array(UInt64)) ENGINE=Memory; -INSERT INTO test.test VALUES ([1, -3, 0, 1], [1.0, 0.4, -0.1], [1, 3, 1]); +INSERT INTO test VALUES ([1, -3, 0, 1], [1.0, 0.4, -0.1], [1, 3, 1]); -SELECT arrayCumSumNonNegative(a) FROM test.test; +SELECT arrayCumSumNonNegative(a) FROM test; -SELECT arrayCumSumNonNegative(b) FROM test.test; +SELECT arrayCumSumNonNegative(b) FROM test; -SELECT arrayCumSumNonNegative(c) FROM test.test; +SELECT arrayCumSumNonNegative(c) FROM test; -SELECT arrayDifference(a) FROM test.test; +SELECT arrayDifference(a) FROM test; -SELECT arrayDifference(b) FROM test.test; +SELECT arrayDifference(b) FROM test; -SELECT arrayDifference(c) FROM test.test; +SELECT arrayDifference(c) FROM test; -DROP TABLE IF EXISTS test.test; +DROP TABLE IF EXISTS test; diff --git a/dbms/tests/queries/0_stateless/00704_drop_truncate_memory_table.sh b/dbms/tests/queries/0_stateless/00704_drop_truncate_memory_table.sh index f805c7aa03e..4e3ad2327f7 100755 --- a/dbms/tests/queries/0_stateless/00704_drop_truncate_memory_table.sh +++ b/dbms/tests/queries/0_stateless/00704_drop_truncate_memory_table.sh @@ -5,23 +5,23 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh ${CLICKHOUSE_CLIENT} --multiquery --query=" -DROP TABLE IF EXISTS test.memory; -CREATE TABLE test.memory (x UInt64) ENGINE = Memory; +DROP TABLE IF EXISTS memory; +CREATE TABLE memory (x UInt64) ENGINE = Memory; SET max_block_size = 1, min_insert_block_size_rows = 0, min_insert_block_size_bytes = 0; -INSERT INTO test.memory SELECT * FROM numbers(1000);" +INSERT INTO memory SELECT * FROM numbers(1000);" ${CLICKHOUSE_CLIENT} --multiquery --query=" SET max_threads = 1; -SELECT count() FROM test.memory WHERE NOT ignore(sleep(0.0001));" & +SELECT count() FROM memory WHERE NOT ignore(sleep(0.0001));" & sleep 0.05; ${CLICKHOUSE_CLIENT} --multiquery --query=" -TRUNCATE TABLE test.memory; -DROP TABLE test.memory; +TRUNCATE TABLE memory; +DROP TABLE memory; " wait diff --git a/dbms/tests/queries/0_stateless/00705_aggregate_states_addition.sql b/dbms/tests/queries/0_stateless/00705_aggregate_states_addition.sql index 02820ef1025..a2d9660955d 100644 --- a/dbms/tests/queries/0_stateless/00705_aggregate_states_addition.sql +++ b/dbms/tests/queries/0_stateless/00705_aggregate_states_addition.sql @@ -1,4 +1,3 @@ -USE test; SET send_logs_level = 'none'; DROP TABLE IF EXISTS add_aggregate; CREATE TABLE add_aggregate(a UInt32, b UInt32) ENGINE = Memory; diff --git a/dbms/tests/queries/0_stateless/00705_drop_create_merge_tree.sh b/dbms/tests/queries/0_stateless/00705_drop_create_merge_tree.sh index f8dbc7cc2c3..157899da443 100755 --- a/dbms/tests/queries/0_stateless/00705_drop_create_merge_tree.sh +++ b/dbms/tests/queries/0_stateless/00705_drop_create_merge_tree.sh @@ -7,8 +7,8 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) function stress() { while true; do - ${CLICKHOUSE_CLIENT} --query "CREATE TABLE IF NOT EXISTS test.table (x UInt8) ENGINE = MergeTree ORDER BY tuple()" 2>/dev/null - ${CLICKHOUSE_CLIENT} --query "DROP TABLE test.table" 2>/dev/null + ${CLICKHOUSE_CLIENT} --query "CREATE TABLE IF NOT EXISTS table (x UInt8) ENGINE = MergeTree ORDER BY tuple()" 2>/dev/null + ${CLICKHOUSE_CLIENT} --query "DROP TABLE table" 2>/dev/null done } @@ -23,4 +23,4 @@ done wait echo -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.table"; +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS table"; diff --git a/dbms/tests/queries/0_stateless/00709_virtual_column_partition_id.sql b/dbms/tests/queries/0_stateless/00709_virtual_column_partition_id.sql index 17492a92f33..084ab904d87 100644 --- a/dbms/tests/queries/0_stateless/00709_virtual_column_partition_id.sql +++ b/dbms/tests/queries/0_stateless/00709_virtual_column_partition_id.sql @@ -1,10 +1,10 @@ -DROP TABLE IF EXISTS test.partition_id; +DROP TABLE IF EXISTS partition_id; -CREATE TABLE IF NOT EXISTS test.partition_id (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 5); +CREATE TABLE IF NOT EXISTS partition_id (d Date DEFAULT '2000-01-01', x UInt64) ENGINE = MergeTree(d, x, 5); -INSERT INTO test.partition_id VALUES (100, 1), (200, 2), (300, 3); +INSERT INTO partition_id VALUES (100, 1), (200, 2), (300, 3); -SELECT _partition_id FROM test.partition_id ORDER BY x; +SELECT _partition_id FROM partition_id ORDER BY x; -DROP TABLE IF EXISTS test.partition_id; +DROP TABLE IF EXISTS partition_id; diff --git a/dbms/tests/queries/0_stateless/00712_prewhere_with_alias.sql b/dbms/tests/queries/0_stateless/00712_prewhere_with_alias.sql index 5cfc2318f3d..58fe90d6f5e 100644 --- a/dbms/tests/queries/0_stateless/00712_prewhere_with_alias.sql +++ b/dbms/tests/queries/0_stateless/00712_prewhere_with_alias.sql @@ -1,35 +1,35 @@ -drop table if exists test.prewhere_alias; -CREATE TABLE test.prewhere_alias (a UInt8, b Int32, c UInt8 ALIAS a, d Int64 ALIAS b + 1, e Int32 alias a + b) ENGINE = MergeTree ORDER BY tuple(); -insert into test.prewhere_alias values (1, 1); +drop table if exists prewhere_alias; +CREATE TABLE prewhere_alias (a UInt8, b Int32, c UInt8 ALIAS a, d Int64 ALIAS b + 1, e Int32 alias a + b) ENGINE = MergeTree ORDER BY tuple(); +insert into prewhere_alias values (1, 1); select '-'; -select a from test.prewhere_alias prewhere a = 1; -select b from test.prewhere_alias prewhere a = 1; -select c from test.prewhere_alias prewhere a = 1; -select d from test.prewhere_alias prewhere a = 1; +select a from prewhere_alias prewhere a = 1; +select b from prewhere_alias prewhere a = 1; +select c from prewhere_alias prewhere a = 1; +select d from prewhere_alias prewhere a = 1; select '-'; -select a from test.prewhere_alias prewhere b = 1; -select b from test.prewhere_alias prewhere b = 1; -select c from test.prewhere_alias prewhere b = 1; -select d from test.prewhere_alias prewhere b = 1; +select a from prewhere_alias prewhere b = 1; +select b from prewhere_alias prewhere b = 1; +select c from prewhere_alias prewhere b = 1; +select d from prewhere_alias prewhere b = 1; select '-'; -select a from test.prewhere_alias prewhere c = 1; -select b from test.prewhere_alias prewhere c = 1; -select c from test.prewhere_alias prewhere c = 1; -select d from test.prewhere_alias prewhere c = 1; +select a from prewhere_alias prewhere c = 1; +select b from prewhere_alias prewhere c = 1; +select c from prewhere_alias prewhere c = 1; +select d from prewhere_alias prewhere c = 1; select '-'; -select a from test.prewhere_alias prewhere d = 2; -select b from test.prewhere_alias prewhere d = 2; -select c from test.prewhere_alias prewhere d = 2; -select d from test.prewhere_alias prewhere d = 2; +select a from prewhere_alias prewhere d = 2; +select b from prewhere_alias prewhere d = 2; +select c from prewhere_alias prewhere d = 2; +select d from prewhere_alias prewhere d = 2; select '-'; -select a from test.prewhere_alias prewhere a; -select b from test.prewhere_alias prewhere a; -select c from test.prewhere_alias prewhere a; -select d from test.prewhere_alias prewhere a; +select a from prewhere_alias prewhere a; +select b from prewhere_alias prewhere a; +select c from prewhere_alias prewhere a; +select d from prewhere_alias prewhere a; select '-'; -select a from test.prewhere_alias prewhere c; -select b from test.prewhere_alias prewhere c; -select c from test.prewhere_alias prewhere c; -select d from test.prewhere_alias prewhere c; -drop table if exists test.prewhere_alias; +select a from prewhere_alias prewhere c; +select b from prewhere_alias prewhere c; +select c from prewhere_alias prewhere c; +select d from prewhere_alias prewhere c; +drop table if exists prewhere_alias; diff --git a/dbms/tests/queries/0_stateless/00712_prewhere_with_alias_and_virtual_column.sql b/dbms/tests/queries/0_stateless/00712_prewhere_with_alias_and_virtual_column.sql index 6b0079c2bb3..60301fa8bf9 100644 --- a/dbms/tests/queries/0_stateless/00712_prewhere_with_alias_and_virtual_column.sql +++ b/dbms/tests/queries/0_stateless/00712_prewhere_with_alias_and_virtual_column.sql @@ -1,5 +1,5 @@ -drop table if exists test.tab; -create table test.tab (a UInt32, b UInt32 alias a + 1, c UInt32) engine = MergeTree order by tuple(); -insert into test.tab values (1, 2); -select ignore(_part) from test.tab prewhere b = 2; +drop table if exists tab; +create table tab (a UInt32, b UInt32 alias a + 1, c UInt32) engine = MergeTree order by tuple(); +insert into tab values (1, 2); +select ignore(_part) from tab prewhere b = 2; diff --git a/dbms/tests/queries/0_stateless/00712_prewhere_with_alias_bug.sql b/dbms/tests/queries/0_stateless/00712_prewhere_with_alias_bug.sql index 57e24c691ef..83f9748f5c6 100644 --- a/dbms/tests/queries/0_stateless/00712_prewhere_with_alias_bug.sql +++ b/dbms/tests/queries/0_stateless/00712_prewhere_with_alias_bug.sql @@ -1,5 +1,5 @@ -drop table if exists test.prewhere_alias; -create table test.prewhere_alias (a Int32, b Int32, c alias a + b) engine = MergeTree order by b; -insert into test.prewhere_alias values(1, 1); -select a, c + toInt32(1), (c + toInt32(1)) * 2 from test.prewhere_alias prewhere (c + toInt32(1)) * 2 = 6; -drop table test.prewhere_alias; +drop table if exists prewhere_alias; +create table prewhere_alias (a Int32, b Int32, c alias a + b) engine = MergeTree order by b; +insert into prewhere_alias values(1, 1); +select a, c + toInt32(1), (c + toInt32(1)) * 2 from prewhere_alias prewhere (c + toInt32(1)) * 2 = 6; +drop table prewhere_alias; diff --git a/dbms/tests/queries/0_stateless/00712_prewhere_with_alias_bug_2.sql b/dbms/tests/queries/0_stateless/00712_prewhere_with_alias_bug_2.sql index 6c0df7cb94b..2c5c494fc1f 100644 --- a/dbms/tests/queries/0_stateless/00712_prewhere_with_alias_bug_2.sql +++ b/dbms/tests/queries/0_stateless/00712_prewhere_with_alias_bug_2.sql @@ -1,14 +1,14 @@ -drop table if exists test.table; +drop table if exists table; -CREATE TABLE test.table (a UInt32, date Date, b UInt64, c UInt64, str String, d Int8, arr Array(UInt64), arr_alias Array(UInt64) ALIAS arr) ENGINE = MergeTree(date, intHash32(c), (a, date, intHash32(c), b), 8192); +CREATE TABLE table (a UInt32, date Date, b UInt64, c UInt64, str String, d Int8, arr Array(UInt64), arr_alias Array(UInt64) ALIAS arr) ENGINE = MergeTree(date, intHash32(c), (a, date, intHash32(c), b), 8192); SELECT alias2 AS alias3 -FROM test.table +FROM table ARRAY JOIN arr_alias AS alias2, arrayEnumerateUniq(arr_alias) AS _uniq_Event WHERE (date = toDate('2010-10-10')) AND (a IN (2, 3)) AND (str NOT IN ('z', 'x')) AND (d != -1) LIMIT 1; -drop table if exists test.table; +drop table if exists table; diff --git a/dbms/tests/queries/0_stateless/00712_prewhere_with_final.sql b/dbms/tests/queries/0_stateless/00712_prewhere_with_final.sql index 88c0ad22b26..4528d4f61f0 100644 --- a/dbms/tests/queries/0_stateless/00712_prewhere_with_final.sql +++ b/dbms/tests/queries/0_stateless/00712_prewhere_with_final.sql @@ -1,12 +1,12 @@ -drop table if exists test.trepl; -create table test.trepl(d Date,a Int32, b Int32) engine = ReplacingMergeTree(d, (a,b), 8192); -insert into test.trepl values ('2018-09-19', 1, 1); -select b from test.trepl FINAL prewhere a < 1000; -drop table test.trepl; +drop table if exists trepl; +create table trepl(d Date,a Int32, b Int32) engine = ReplacingMergeTree(d, (a,b), 8192); +insert into trepl values ('2018-09-19', 1, 1); +select b from trepl FINAL prewhere a < 1000; +drop table trepl; -drop table if exists test.versioned_collapsing; -create table test.versioned_collapsing(d Date, x UInt32, sign Int8, version UInt32) engine = VersionedCollapsingMergeTree(d, x, 8192, sign, version); -insert into test.versioned_collapsing values ('2018-09-19', 123, 1, 0); -select x from test.versioned_collapsing FINAL prewhere version < 1000; -drop table test.versioned_collapsing; +drop table if exists versioned_collapsing; +create table versioned_collapsing(d Date, x UInt32, sign Int8, version UInt32) engine = VersionedCollapsingMergeTree(d, x, 8192, sign, version); +insert into versioned_collapsing values ('2018-09-19', 123, 1, 0); +select x from versioned_collapsing FINAL prewhere version < 1000; +drop table versioned_collapsing; diff --git a/dbms/tests/queries/0_stateless/00712_prewhere_with_missing_columns.sql b/dbms/tests/queries/0_stateless/00712_prewhere_with_missing_columns.sql index 20515bd513e..56f6c273550 100644 --- a/dbms/tests/queries/0_stateless/00712_prewhere_with_missing_columns.sql +++ b/dbms/tests/queries/0_stateless/00712_prewhere_with_missing_columns.sql @@ -1,14 +1,14 @@ -DROP TABLE IF EXISTS test.mergetree; -CREATE TABLE test.mergetree (x UInt8, s String) ENGINE = MergeTree ORDER BY tuple(); +DROP TABLE IF EXISTS mergetree; +CREATE TABLE mergetree (x UInt8, s String) ENGINE = MergeTree ORDER BY tuple(); -INSERT INTO test.mergetree VALUES (1, 'Hello, world!'); -SELECT * FROM test.mergetree; +INSERT INTO mergetree VALUES (1, 'Hello, world!'); +SELECT * FROM mergetree; -ALTER TABLE test.mergetree ADD COLUMN y UInt8 DEFAULT 0; -INSERT INTO test.mergetree VALUES (2, 'Goodbye.', 3); -SELECT * FROM test.mergetree ORDER BY x; +ALTER TABLE mergetree ADD COLUMN y UInt8 DEFAULT 0; +INSERT INTO mergetree VALUES (2, 'Goodbye.', 3); +SELECT * FROM mergetree ORDER BY x; -SELECT s FROM test.mergetree PREWHERE x AND y ORDER BY s; -SELECT s, y FROM test.mergetree PREWHERE x AND y ORDER BY s; +SELECT s FROM mergetree PREWHERE x AND y ORDER BY s; +SELECT s, y FROM mergetree PREWHERE x AND y ORDER BY s; -DROP TABLE test.mergetree; +DROP TABLE mergetree; diff --git a/dbms/tests/queries/0_stateless/00712_prewhere_with_missing_columns_2.sql b/dbms/tests/queries/0_stateless/00712_prewhere_with_missing_columns_2.sql index 9dbe8125196..2c27f5f5bb6 100644 --- a/dbms/tests/queries/0_stateless/00712_prewhere_with_missing_columns_2.sql +++ b/dbms/tests/queries/0_stateless/00712_prewhere_with_missing_columns_2.sql @@ -1,13 +1,13 @@ create database if not exists test; -drop table if exists test.t; -create table test.t (a Int32, b Int32) engine = MergeTree partition by (a,b) order by (a); +drop table if exists t; +create table t (a Int32, b Int32) engine = MergeTree partition by (a,b) order by (a); -insert into test.t values (1, 1); -alter table test.t add column c Int32; +insert into t values (1, 1); +alter table t add column c Int32; -select b from test.t prewhere a < 1000; -select c from test.t where a < 1000; -select c from test.t prewhere a < 1000; +select b from t prewhere a < 1000; +select c from t where a < 1000; +select c from t prewhere a < 1000; -drop table test.t; +drop table t; diff --git a/dbms/tests/queries/0_stateless/00712_prewhere_with_sampling.sql b/dbms/tests/queries/0_stateless/00712_prewhere_with_sampling.sql index 32bfeccf556..22e05e2ff12 100644 --- a/dbms/tests/queries/0_stateless/00712_prewhere_with_sampling.sql +++ b/dbms/tests/queries/0_stateless/00712_prewhere_with_sampling.sql @@ -1,10 +1,10 @@ -drop table if exists test.tab; -create table test.tab (a UInt32, b UInt32) engine = MergeTree order by b % 2 sample by b % 2; -insert into test.tab values (1, 2), (1, 4); -select a from test.tab sample 1 / 2 prewhere b = 2; -drop table if exists test.tab; +drop table if exists tab; +create table tab (a UInt32, b UInt32) engine = MergeTree order by b % 2 sample by b % 2; +insert into tab values (1, 2), (1, 4); +select a from tab sample 1 / 2 prewhere b = 2; +drop table if exists tab; -DROP TABLE IF EXISTS test.sample_prewhere; -CREATE TABLE test.sample_prewhere (CounterID UInt32, UserID UInt64) ENGINE = MergeTree ORDER BY UserID SAMPLE BY UserID; -SELECT count() FROM test.sample_prewhere SAMPLE 1/2 PREWHERE CounterID = 1; -DROP TABLE test.sample_prewhere; +DROP TABLE IF EXISTS sample_prewhere; +CREATE TABLE sample_prewhere (CounterID UInt32, UserID UInt64) ENGINE = MergeTree ORDER BY UserID SAMPLE BY UserID; +SELECT count() FROM sample_prewhere SAMPLE 1/2 PREWHERE CounterID = 1; +DROP TABLE sample_prewhere; diff --git a/dbms/tests/queries/0_stateless/00712_prewhere_with_sampling_and_alias.sql b/dbms/tests/queries/0_stateless/00712_prewhere_with_sampling_and_alias.sql index 6c9a4ed31a7..2e837c2be6f 100644 --- a/dbms/tests/queries/0_stateless/00712_prewhere_with_sampling_and_alias.sql +++ b/dbms/tests/queries/0_stateless/00712_prewhere_with_sampling_and_alias.sql @@ -1,6 +1,6 @@ -drop table if exists test.t; -create table test.t (date Date, counter UInt64, sampler UInt64, alias_col alias date + 1) engine = MergeTree(date, intHash32(sampler), (counter, date, intHash32(sampler)), 8192); -insert into test.t values ('2018-01-01', 1, 1); -select alias_col from test.t sample 1 / 2 where date = '2018-01-01' and counter = 1 and sampler = 1; -drop table if exists test.t; +drop table if exists t; +create table t (date Date, counter UInt64, sampler UInt64, alias_col alias date + 1) engine = MergeTree(date, intHash32(sampler), (counter, date, intHash32(sampler)), 8192); +insert into t values ('2018-01-01', 1, 1); +select alias_col from t sample 1 / 2 where date = '2018-01-01' and counter = 1 and sampler = 1; +drop table if exists t; diff --git a/dbms/tests/queries/0_stateless/00713_collapsing_merge_tree.sql b/dbms/tests/queries/0_stateless/00713_collapsing_merge_tree.sql index ea9d8f6b45a..9996187534e 100644 --- a/dbms/tests/queries/0_stateless/00713_collapsing_merge_tree.sql +++ b/dbms/tests/queries/0_stateless/00713_collapsing_merge_tree.sql @@ -1,18 +1,18 @@ -DROP TABLE IF EXISTS test.collapsing; +DROP TABLE IF EXISTS collapsing; -CREATE TABLE test.collapsing(key String, value String, sign Int8) ENGINE CollapsingMergeTree(sign) +CREATE TABLE collapsing(key String, value String, sign Int8) ENGINE CollapsingMergeTree(sign) ORDER BY key SETTINGS enable_vertical_merge_algorithm=1, vertical_merge_algorithm_min_rows_to_activate=0, vertical_merge_algorithm_min_columns_to_activate=0; -INSERT INTO test.collapsing VALUES ('k1', 'k1v1', 1); -INSERT INTO test.collapsing VALUES ('k1', 'k1v1', -1), ('k1', 'k1v2', 1); -INSERT INTO test.collapsing VALUES ('k2', 'k2v1', 1), ('k2', 'k2v1', -1), ('k3', 'k3v1', 1); -INSERT INTO test.collapsing VALUES ('k4', 'k4v1', -1), ('k4', 'k4v2', 1), ('k4', 'k4v2', -1); +INSERT INTO collapsing VALUES ('k1', 'k1v1', 1); +INSERT INTO collapsing VALUES ('k1', 'k1v1', -1), ('k1', 'k1v2', 1); +INSERT INTO collapsing VALUES ('k2', 'k2v1', 1), ('k2', 'k2v1', -1), ('k3', 'k3v1', 1); +INSERT INTO collapsing VALUES ('k4', 'k4v1', -1), ('k4', 'k4v2', 1), ('k4', 'k4v2', -1); -OPTIMIZE TABLE test.collapsing PARTITION tuple() FINAL; +OPTIMIZE TABLE collapsing PARTITION tuple() FINAL; -SELECT * FROM test.collapsing ORDER BY key; +SELECT * FROM collapsing ORDER BY key; -DROP TABLE test.collapsing; +DROP TABLE collapsing; diff --git a/dbms/tests/queries/0_stateless/00714_alter_uuid.sql b/dbms/tests/queries/0_stateless/00714_alter_uuid.sql index 116d640785a..6dca79c37ab 100644 --- a/dbms/tests/queries/0_stateless/00714_alter_uuid.sql +++ b/dbms/tests/queries/0_stateless/00714_alter_uuid.sql @@ -1,5 +1,3 @@ -USE test; - SELECT '00000000-0000-01f8-9cb8-cb1b82fb3900' AS str, toUUID(str); SELECT toFixedString('00000000-0000-02f8-9cb8-cb1b82fb3900', 36) AS str, toUUID(str); diff --git a/dbms/tests/queries/0_stateless/00715_fetch_merged_or_mutated_part_zookeeper.sql b/dbms/tests/queries/0_stateless/00715_fetch_merged_or_mutated_part_zookeeper.sql index d7b485d46f0..9a1c1b77cae 100644 --- a/dbms/tests/queries/0_stateless/00715_fetch_merged_or_mutated_part_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00715_fetch_merged_or_mutated_part_zookeeper.sql @@ -1,42 +1,42 @@ -DROP TABLE IF EXISTS test.fetches_r1; -DROP TABLE IF EXISTS test.fetches_r2; +DROP TABLE IF EXISTS fetches_r1; +DROP TABLE IF EXISTS fetches_r2; -CREATE TABLE test.fetches_r1(x UInt32) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/fetches', 'r1') ORDER BY x; -CREATE TABLE test.fetches_r2(x UInt32) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/fetches', 'r2') ORDER BY x +CREATE TABLE fetches_r1(x UInt32) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/fetches', 'r1') ORDER BY x; +CREATE TABLE fetches_r2(x UInt32) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/fetches', 'r2') ORDER BY x SETTINGS prefer_fetch_merged_part_time_threshold=0, prefer_fetch_merged_part_size_threshold=0; -INSERT INTO test.fetches_r1 VALUES (1); -INSERT INTO test.fetches_r1 VALUES (2); -INSERT INTO test.fetches_r1 VALUES (3); +INSERT INTO fetches_r1 VALUES (1); +INSERT INTO fetches_r1 VALUES (2); +INSERT INTO fetches_r1 VALUES (3); -SYSTEM SYNC REPLICA test.fetches_r2; +SYSTEM SYNC REPLICA fetches_r2; -DETACH TABLE test.fetches_r2; +DETACH TABLE fetches_r2; SET replication_alter_partitions_sync=0; -OPTIMIZE TABLE test.fetches_r1 PARTITION tuple() FINAL; -SYSTEM SYNC REPLICA test.fetches_r1; +OPTIMIZE TABLE fetches_r1 PARTITION tuple() FINAL; +SYSTEM SYNC REPLICA fetches_r1; -- After attach replica r2 should fetch the merged part from r1. -ATTACH TABLE test.fetches_r2; -SYSTEM SYNC REPLICA test.fetches_r2; +ATTACH TABLE fetches_r2; +SYSTEM SYNC REPLICA fetches_r2; SELECT '*** Check data after fetch of merged part ***'; -SELECT _part, * FROM test.fetches_r2 ORDER BY x; +SELECT _part, * FROM fetches_r2 ORDER BY x; -DETACH TABLE test.fetches_r2; +DETACH TABLE fetches_r2; -- Add mutation that doesn't change data. -ALTER TABLE test.fetches_r1 DELETE WHERE x = 0; -SYSTEM SYNC REPLICA test.fetches_r1; +ALTER TABLE fetches_r1 DELETE WHERE x = 0; +SYSTEM SYNC REPLICA fetches_r1; -- After attach replica r2 should compare checksums for mutated part and clone the local part. -ATTACH TABLE test.fetches_r2; -SYSTEM SYNC REPLICA test.fetches_r2; +ATTACH TABLE fetches_r2; +SYSTEM SYNC REPLICA fetches_r2; SELECT '*** Check data after fetch/clone of mutated part ***'; -SELECT _part, * FROM test.fetches_r2 ORDER BY x; +SELECT _part, * FROM fetches_r2 ORDER BY x; -DROP TABLE test.fetches_r1; -DROP TABLE test.fetches_r2; +DROP TABLE fetches_r1; +DROP TABLE fetches_r2; diff --git a/dbms/tests/queries/0_stateless/00715_json_each_row_input_nested.sh b/dbms/tests/queries/0_stateless/00715_json_each_row_input_nested.sh index ac7dab7febe..c38902a0bda 100755 --- a/dbms/tests/queries/0_stateless/00715_json_each_row_input_nested.sh +++ b/dbms/tests/queries/0_stateless/00715_json_each_row_input_nested.sh @@ -5,33 +5,33 @@ set -e CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.json_each_row_nested" -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.json_each_row_nested (d1 UInt8, d2 String, n Nested (s String, i Int32) ) ENGINE = Memory" +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS json_each_row_nested" +$CLICKHOUSE_CLIENT -q "CREATE TABLE json_each_row_nested (d1 UInt8, d2 String, n Nested (s String, i Int32) ) ENGINE = Memory" echo '{"d1" : 1, "d2" : "ok", "n.s" : ["abc", "def"], "n.i" : [1, 23]} { } {"t1" : 0, "n.t2":true,"n.i":[45, 67, 8], "n.s":["x", "y", "z"],"t5":[],"t6":"trash" } {"d2":"ok","n.s":["dog", "cat", "pig"], "n.x":[["1","2"]], "d1":"1", "n.i":[3, 3, 3]} {"t0" : -0.1, "n.s" : ["zero","negative one"], "a.b" : 0, "n.i" : [0, -1], "d2" : "ok", "d1" : 1}' \ -| $CLICKHOUSE_CLIENT --input_format_skip_unknown_fields=1 -q "INSERT INTO test.json_each_row_nested FORMAT JSONEachRow" +| $CLICKHOUSE_CLIENT --input_format_skip_unknown_fields=1 -q "INSERT INTO json_each_row_nested FORMAT JSONEachRow" -$CLICKHOUSE_CLIENT --max_threads=1 -q "SELECT * FROM test.json_each_row_nested" +$CLICKHOUSE_CLIENT --max_threads=1 -q "SELECT * FROM json_each_row_nested" test_nested_json() { -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.json_each_row_nested" +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS json_each_row_nested" -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.json_each_row_nested (d1 UInt8, d2 String, n Nested (s String, i Int32) ) ENGINE = Memory" +$CLICKHOUSE_CLIENT -q "CREATE TABLE json_each_row_nested (d1 UInt8, d2 String, n Nested (s String, i Int32) ) ENGINE = Memory" echo '{"d1" : 1, "d2" : "ok", "n" : { "s" : ["abc", "def"], "i" : [1, 23]} } { } {"t1" : 0, "n.t2":true,"n" : {"i":[45, 67, 8], "s":["x", "y", "z"]}, "t5":[],"t6":"trash" } {"d2":"ok","n" : {"s":["dog", "cat", "pig"], "x":[["1","2"]], "i":[3, 3, 3]}, "d1":"1", "n.j":[4, 4, 4]} {"t0" : -0.1, "n": {"s" : ["zero","negative one"], "i" : [0, -1]}, "d2" : "ok", "d1" : 1}' \ -| $CLICKHOUSE_CLIENT "$@" --input_format_skip_unknown_fields=1 -q "INSERT INTO test.json_each_row_nested FORMAT JSONEachRow" +| $CLICKHOUSE_CLIENT "$@" --input_format_skip_unknown_fields=1 -q "INSERT INTO json_each_row_nested FORMAT JSONEachRow" -$CLICKHOUSE_CLIENT --max_threads=1 -q "SELECT * FROM test.json_each_row_nested" -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.json_each_row_nested" +$CLICKHOUSE_CLIENT --max_threads=1 -q "SELECT * FROM json_each_row_nested" +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS json_each_row_nested" } test_nested_json diff --git a/dbms/tests/queries/0_stateless/00716_allow_ddl.sql b/dbms/tests/queries/0_stateless/00716_allow_ddl.sql index 2f66cc96a35..c060bf37290 100755 --- a/dbms/tests/queries/0_stateless/00716_allow_ddl.sql +++ b/dbms/tests/queries/0_stateless/00716_allow_ddl.sql @@ -2,7 +2,7 @@ SET send_logs_level = 'none'; SET allow_ddl = 0; CREATE DATABASE some_db; -- { serverError 392 } -CREATE TABLE test.some_table(a Int32) ENGINE = Memory; -- { serverError 392} -ALTER TABLE test.some_table DELETE WHERE 1; -- { serverError 392} -RENAME TABLE test.some_table TO test.some_table1; -- { serverError 392} +CREATE TABLE some_table(a Int32) ENGINE = Memory; -- { serverError 392} +ALTER TABLE some_table DELETE WHERE 1; -- { serverError 392} +RENAME TABLE some_table TO some_table1; -- { serverError 392} SET allow_ddl = 1; -- { serverError 392} diff --git a/dbms/tests/queries/0_stateless/00717_default_join_type.sql b/dbms/tests/queries/0_stateless/00717_default_join_type.sql index 4249790747c..0530a583e97 100644 --- a/dbms/tests/queries/0_stateless/00717_default_join_type.sql +++ b/dbms/tests/queries/0_stateless/00717_default_join_type.sql @@ -1,10 +1,10 @@ -DROP TABLE IF EXISTS test.default_join1; -DROP TABLE IF EXISTS test.default_join2; +DROP TABLE IF EXISTS default_join1; +DROP TABLE IF EXISTS default_join2; -CREATE TABLE test.default_join1(a Int64, b Int64) ENGINE=Memory; -CREATE TABLE test.default_join2(a Int64, b Int64) ENGINE=Memory; +CREATE TABLE default_join1(a Int64, b Int64) ENGINE=Memory; +CREATE TABLE default_join2(a Int64, b Int64) ENGINE=Memory; -INSERT INTO test.default_join1 VALUES(1, 1), (2, 2), (3, 3); -INSERT INTO test.default_join2 VALUES(3, 3), (4, 4); +INSERT INTO default_join1 VALUES(1, 1), (2, 2), (3, 3); +INSERT INTO default_join2 VALUES(3, 3), (4, 4); -SELECT a, b FROM test.default_join1 JOIN (SELECT a, b FROM test.default_join2) USING a ORDER BY b SETTINGS join_default_strictness='ANY'; +SELECT a, b FROM default_join1 JOIN (SELECT a, b FROM default_join2) USING a ORDER BY b SETTINGS join_default_strictness='ANY'; diff --git a/dbms/tests/queries/0_stateless/00717_low_cardinaliry_group_by.sql b/dbms/tests/queries/0_stateless/00717_low_cardinaliry_group_by.sql index 4e82d54b876..e9ec65a144d 100644 --- a/dbms/tests/queries/0_stateless/00717_low_cardinaliry_group_by.sql +++ b/dbms/tests/queries/0_stateless/00717_low_cardinaliry_group_by.sql @@ -1,22 +1,22 @@ -drop table if exists test.tab; -create table test.tab (a String, b StringWithDictionary) engine = MergeTree order by a; -insert into test.tab values ('a_1', 'b_1'), ('a_2', 'b_2'); -select count() from test.tab; -select a from test.tab group by a order by a; -select b from test.tab group by b order by b; -select length(b) as l from test.tab group by l; -select sum(length(a)), b from test.tab group by b order by b; -select sum(length(b)), a from test.tab group by a order by a; -select a, b from test.tab group by a, b order by a, b; -select sum(length(a)) from test.tab group by b, b || '_'; -select length(b) as l from test.tab group by l; -select length(b) as l from test.tab group by l, l + 1; -select length(b) as l from test.tab group by l, l + 1, l + 2; -select length(b) as l from test.tab group by l, l + 1, l + 2, l + 3; -select length(b) as l from test.tab group by l, l + 1, l + 2, l + 3, l + 4; -select length(b) as l from test.tab group by l, l + 1, l + 2, l + 3, l + 4, l + 5; -select a, length(b) as l from test.tab group by a, l, l + 1 order by a; -select b, length(b) as l from test.tab group by b, l, l + 1 order by b; -select a, b, length(b) as l from test.tab group by a, b, l, l + 1 order by a, b; -drop table if exists test.tab; +drop table if exists tab; +create table tab (a String, b StringWithDictionary) engine = MergeTree order by a; +insert into tab values ('a_1', 'b_1'), ('a_2', 'b_2'); +select count() from tab; +select a from tab group by a order by a; +select b from tab group by b order by b; +select length(b) as l from tab group by l; +select sum(length(a)), b from tab group by b order by b; +select sum(length(b)), a from tab group by a order by a; +select a, b from tab group by a, b order by a, b; +select sum(length(a)) from tab group by b, b || '_'; +select length(b) as l from tab group by l; +select length(b) as l from tab group by l, l + 1; +select length(b) as l from tab group by l, l + 1, l + 2; +select length(b) as l from tab group by l, l + 1, l + 2, l + 3; +select length(b) as l from tab group by l, l + 1, l + 2, l + 3, l + 4; +select length(b) as l from tab group by l, l + 1, l + 2, l + 3, l + 4, l + 5; +select a, length(b) as l from tab group by a, l, l + 1 order by a; +select b, length(b) as l from tab group by b, l, l + 1 order by b; +select a, b, length(b) as l from tab group by a, b, l, l + 1 order by a, b; +drop table if exists tab; diff --git a/dbms/tests/queries/0_stateless/00718_low_cardinaliry_alter.sql b/dbms/tests/queries/0_stateless/00718_low_cardinaliry_alter.sql index a531643a095..df89ff9d91f 100644 --- a/dbms/tests/queries/0_stateless/00718_low_cardinaliry_alter.sql +++ b/dbms/tests/queries/0_stateless/00718_low_cardinaliry_alter.sql @@ -1,17 +1,17 @@ -create table test.tab (a String, b LowCardinality(UInt32)) engine = MergeTree order by a; -insert into test.tab values ('a', 1); -select *, toTypeName(b) from test.tab; -alter table test.tab modify column b UInt32; -select *, toTypeName(b) from test.tab; -alter table test.tab modify column b LowCardinality(UInt32); -select *, toTypeName(b) from test.tab; -alter table test.tab modify column b StringWithDictionary; -select *, toTypeName(b) from test.tab; -alter table test.tab modify column b LowCardinality(UInt32); -select *, toTypeName(b) from test.tab; -alter table test.tab modify column b String; -select *, toTypeName(b) from test.tab; -alter table test.tab modify column b LowCardinality(UInt32); -select *, toTypeName(b) from test.tab; -drop table if exists test.tab; +create table tab (a String, b LowCardinality(UInt32)) engine = MergeTree order by a; +insert into tab values ('a', 1); +select *, toTypeName(b) from tab; +alter table tab modify column b UInt32; +select *, toTypeName(b) from tab; +alter table tab modify column b LowCardinality(UInt32); +select *, toTypeName(b) from tab; +alter table tab modify column b StringWithDictionary; +select *, toTypeName(b) from tab; +alter table tab modify column b LowCardinality(UInt32); +select *, toTypeName(b) from tab; +alter table tab modify column b String; +select *, toTypeName(b) from tab; +alter table tab modify column b LowCardinality(UInt32); +select *, toTypeName(b) from tab; +drop table if exists tab; diff --git a/dbms/tests/queries/0_stateless/00719_insert_block_without_column.sh b/dbms/tests/queries/0_stateless/00719_insert_block_without_column.sh index 8724eb7f09a..0cad7556674 100755 --- a/dbms/tests/queries/0_stateless/00719_insert_block_without_column.sh +++ b/dbms/tests/queries/0_stateless/00719_insert_block_without_column.sh @@ -9,13 +9,13 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) ${CLICKHOUSE_CLIENT} --query "select number as SomeID, number+1 as OtherID from system.numbers limit 1000 into outfile '${CLICKHOUSE_TMP}/test_squashing_block_without_column.out' format Native" -${CLICKHOUSE_CLIENT} --query "drop table if exists test.squashed_numbers" -${CLICKHOUSE_CLIENT} --query "create table test.squashed_numbers (SomeID UInt64, DifferentID UInt64, OtherID UInt64) engine Memory" +${CLICKHOUSE_CLIENT} --query "drop table if exists squashed_numbers" +${CLICKHOUSE_CLIENT} --query "create table squashed_numbers (SomeID UInt64, DifferentID UInt64, OtherID UInt64) engine Memory" -address=${CLICKHOUSE_HOST} -port=${CLICKHOUSE_PORT_HTTP} -url="${CLICKHOUSE_PORT_HTTP_PROTO}://$address:$port/" +#address=${CLICKHOUSE_HOST} +#port=${CLICKHOUSE_PORT_HTTP} +#url="${CLICKHOUSE_PORT_HTTP_PROTO}://$address:$port/" -${CLICKHOUSE_CURL} -sS --data-binary "@${CLICKHOUSE_TMP}/test_squashing_block_without_column.out" "${url}?query=insert%20into%20test.squashed_numbers%20format%20Native" +${CLICKHOUSE_CURL} -sS --data-binary "@${CLICKHOUSE_TMP}/test_squashing_block_without_column.out" "${CLICKHOUSE_URL_PARAMS}&query=insert%20into%20squashed_numbers%20format%20Native" ${CLICKHOUSE_CLIENT} --query "select 'Still alive'" diff --git a/dbms/tests/queries/0_stateless/00719_parallel_ddl_table.sh b/dbms/tests/queries/0_stateless/00719_parallel_ddl_table.sh index 0559f1dd592..ec9ffbd09fd 100755 --- a/dbms/tests/queries/0_stateless/00719_parallel_ddl_table.sh +++ b/dbms/tests/queries/0_stateless/00719_parallel_ddl_table.sh @@ -4,13 +4,13 @@ set -e CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.parallel_ddl" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS parallel_ddl" function query() { for i in {1..100}; do - ${CLICKHOUSE_CLIENT} --query "CREATE TABLE IF NOT EXISTS test.parallel_ddl(a Int) ENGINE = Memory" - ${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.parallel_ddl" + ${CLICKHOUSE_CLIENT} --query "CREATE TABLE IF NOT EXISTS parallel_ddl(a Int) ENGINE = Memory" + ${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS parallel_ddl" done } @@ -20,4 +20,4 @@ done wait -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.parallel_ddl" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS parallel_ddl" diff --git a/dbms/tests/queries/0_stateless/00720_with_cube.sql b/dbms/tests/queries/0_stateless/00720_with_cube.sql index 032c83f17b5..50ceb784d59 100644 --- a/dbms/tests/queries/0_stateless/00720_with_cube.sql +++ b/dbms/tests/queries/0_stateless/00720_with_cube.sql @@ -1,19 +1,19 @@ -DROP TABLE IF EXISTS test.rollup; -CREATE TABLE test.rollup(a String, b Int32, s Int32) ENGINE = Memory; +DROP TABLE IF EXISTS rollup; +CREATE TABLE rollup(a String, b Int32, s Int32) ENGINE = Memory; -INSERT INTO test.rollup VALUES('a', 1, 10); -INSERT INTO test.rollup VALUES('a', 1, 15); -INSERT INTO test.rollup VALUES('a', 2, 20); -INSERT INTO test.rollup VALUES('a', 2, 25); -INSERT INTO test.rollup VALUES('b', 1, 10); -INSERT INTO test.rollup VALUES('b', 1, 5); -INSERT INTO test.rollup VALUES('b', 2, 20); -INSERT INTO test.rollup VALUES('b', 2, 15); +INSERT INTO rollup VALUES('a', 1, 10); +INSERT INTO rollup VALUES('a', 1, 15); +INSERT INTO rollup VALUES('a', 2, 20); +INSERT INTO rollup VALUES('a', 2, 25); +INSERT INTO rollup VALUES('b', 1, 10); +INSERT INTO rollup VALUES('b', 1, 5); +INSERT INTO rollup VALUES('b', 2, 20); +INSERT INTO rollup VALUES('b', 2, 15); -SELECT a, b, sum(s), count() from test.rollup GROUP BY CUBE(a, b) ORDER BY a, b; +SELECT a, b, sum(s), count() from rollup GROUP BY CUBE(a, b) ORDER BY a, b; -SELECT a, b, sum(s), count() from test.rollup GROUP BY CUBE(a, b) WITH TOTALS ORDER BY a, b; +SELECT a, b, sum(s), count() from rollup GROUP BY CUBE(a, b) WITH TOTALS ORDER BY a, b; -SELECT a, b, sum(s), count() from test.rollup GROUP BY a, b WITH CUBE ORDER BY a; +SELECT a, b, sum(s), count() from rollup GROUP BY a, b WITH CUBE ORDER BY a; -SELECT a, b, sum(s), count() from test.rollup GROUP BY a, b WITH CUBE WITH TOTALS ORDER BY a; +SELECT a, b, sum(s), count() from rollup GROUP BY a, b WITH CUBE WITH TOTALS ORDER BY a; diff --git a/dbms/tests/queries/0_stateless/00721_force_by_identical_result_after_merge_zookeeper.sql b/dbms/tests/queries/0_stateless/00721_force_by_identical_result_after_merge_zookeeper.sql index 4d76c3ea033..3d598363684 100644 --- a/dbms/tests/queries/0_stateless/00721_force_by_identical_result_after_merge_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00721_force_by_identical_result_after_merge_zookeeper.sql @@ -1,18 +1,18 @@ -DROP TABLE IF EXISTS test.byte_identical_r1; -DROP TABLE IF EXISTS test.byte_identical_r2; +DROP TABLE IF EXISTS byte_identical_r1; +DROP TABLE IF EXISTS byte_identical_r2; -CREATE TABLE test.byte_identical_r1(x UInt32) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/byte_identical', 'r1') ORDER BY x; -CREATE TABLE test.byte_identical_r2(x UInt32) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/byte_identical', 'r2') ORDER BY x; +CREATE TABLE byte_identical_r1(x UInt32) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/byte_identical', 'r1') ORDER BY x; +CREATE TABLE byte_identical_r2(x UInt32) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/byte_identical', 'r2') ORDER BY x; -INSERT INTO test.byte_identical_r1(x) VALUES (1), (2), (3); -SYSTEM SYNC REPLICA test.byte_identical_r2; +INSERT INTO byte_identical_r1(x) VALUES (1), (2), (3); +SYSTEM SYNC REPLICA byte_identical_r2; -- Add a column with a default expression that will yield different values on different replicas. -- Call optimize to materialize it. Replicas should compare checksums and restore consistency. -ALTER TABLE test.byte_identical_r1 ADD COLUMN y DEFAULT rand(); -OPTIMIZE TABLE test.byte_identical_r1 PARTITION tuple() FINAL; +ALTER TABLE byte_identical_r1 ADD COLUMN y DEFAULT rand(); +OPTIMIZE TABLE byte_identical_r1 PARTITION tuple() FINAL; -SELECT x, t1.y - t2.y FROM test.byte_identical_r1 t1 ANY INNER JOIN test.byte_identical_r2 t2 USING x ORDER BY x; +SELECT x, t1.y - t2.y FROM byte_identical_r1 t1 ANY INNER JOIN byte_identical_r2 t2 USING x ORDER BY x; -DROP TABLE test.byte_identical_r1; -DROP TABLE test.byte_identical_r2; +DROP TABLE byte_identical_r1; +DROP TABLE byte_identical_r2; diff --git a/dbms/tests/queries/0_stateless/00722_inner_join.sql b/dbms/tests/queries/0_stateless/00722_inner_join.sql index 0c544b12ab9..aa1e3674579 100644 --- a/dbms/tests/queries/0_stateless/00722_inner_join.sql +++ b/dbms/tests/queries/0_stateless/00722_inner_join.sql @@ -1,6 +1,6 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.one; -CREATE TABLE test.one(dummy UInt8) ENGINE = Memory; +DROP TABLE IF EXISTS one; +CREATE TABLE one(dummy UInt8) ENGINE = Memory; SELECT database, t.name FROM system.tables AS t @@ -82,4 +82,4 @@ SELECT count() JOIN system.databases AS db ON db.name = t.database WHERE t.name = 'one'; -DROP TABLE test.one; +DROP TABLE one; diff --git a/dbms/tests/queries/0_stateless/00725_comment_columns.reference b/dbms/tests/queries/0_stateless/00725_comment_columns.reference index 058a7ed5e66..4ea02d84776 100644 --- a/dbms/tests/queries/0_stateless/00725_comment_columns.reference +++ b/dbms/tests/queries/0_stateless/00725_comment_columns.reference @@ -1,9 +1,9 @@ CREATE TABLE test.check_query_comment_column (`first_column` UInt8 DEFAULT 1 COMMENT \'comment 1\', `second_column` UInt8 MATERIALIZED first_column COMMENT \'comment 2\', `third_column` UInt8 ALIAS second_column COMMENT \'comment 3\', `fourth_column` UInt8 COMMENT \'comment 4\', `fifth_column` UInt8) ENGINE = TinyLog -first_column UInt8 DEFAULT 1 comment 1 -second_column UInt8 MATERIALIZED first_column comment 2 -third_column UInt8 ALIAS second_column comment 3 -fourth_column UInt8 comment 4 -fifth_column UInt8 +first_column UInt8 DEFAULT 1 comment 1 +second_column UInt8 MATERIALIZED first_column comment 2 +third_column UInt8 ALIAS second_column comment 3 +fourth_column UInt8 comment 4 +fifth_column UInt8 ┌─table──────────────────────┬─name──────────┬─comment───┐ │ check_query_comment_column │ first_column │ comment 1 │ │ check_query_comment_column │ second_column │ comment 2 │ @@ -21,9 +21,9 @@ CREATE TABLE test.check_query_comment_column (`first_column` UInt8 DEFAULT 1 COM └────────────────────────────┴───────────────┴─────────────┘ CREATE TABLE test.check_query_comment_column (`first_column` UInt8 DEFAULT 1 COMMENT \'comment 1_2\', `second_column` UInt8 MATERIALIZED first_column COMMENT \'comment 2_2\', `third_column` UInt8 ALIAS second_column COMMENT \'comment 3_2\', `fourth_column` UInt8 COMMENT \'comment 4_2\', `fifth_column` UInt8 COMMENT \'comment 5_2\') ENGINE = TinyLog CREATE TABLE test.check_query_comment_column (`first_column` UInt8 COMMENT \'comment 1\', `second_column` UInt8 COMMENT \'comment 2\', `third_column` UInt8 COMMENT \'comment 3\') ENGINE = MergeTree() PARTITION BY second_column ORDER BY first_column SAMPLE BY first_column SETTINGS index_granularity = 8192 -first_column UInt8 comment 1 -second_column UInt8 comment 2 -third_column UInt8 comment 3 +first_column UInt8 comment 1 +second_column UInt8 comment 2 +third_column UInt8 comment 3 ┌─table──────────────────────┬─name──────────┬─comment───┐ │ check_query_comment_column │ first_column │ comment 1 │ │ check_query_comment_column │ second_column │ comment 2 │ diff --git a/dbms/tests/queries/0_stateless/00725_join_on_bug_1.sql b/dbms/tests/queries/0_stateless/00725_join_on_bug_1.sql index b807bb7ef32..3e150176819 100644 --- a/dbms/tests/queries/0_stateless/00725_join_on_bug_1.sql +++ b/dbms/tests/queries/0_stateless/00725_join_on_bug_1.sql @@ -1,15 +1,15 @@ -DROP TABLE IF EXISTS test.a1; -DROP TABLE IF EXISTS test.a2; +DROP TABLE IF EXISTS a1; +DROP TABLE IF EXISTS a2; -CREATE TABLE test.a1(a UInt8, b UInt8) ENGINE=Memory; -CREATE TABLE test.a2(a UInt8, b UInt8) ENGINE=Memory; +CREATE TABLE a1(a UInt8, b UInt8) ENGINE=Memory; +CREATE TABLE a2(a UInt8, b UInt8) ENGINE=Memory; -INSERT INTO test.a1 VALUES (1, 1), (1, 2), (2, 3); -INSERT INTO test.a2 VALUES (1, 2), (1, 3), (1, 4); +INSERT INTO a1 VALUES (1, 1), (1, 2), (2, 3); +INSERT INTO a2 VALUES (1, 2), (1, 3), (1, 4); -SELECT * FROM test.a1 as a left JOIN test.a2 as b on a.a=b.a ORDER BY b SETTINGS join_default_strictness='ANY'; +SELECT * FROM a1 as a left JOIN a2 as b on a.a=b.a ORDER BY b SETTINGS join_default_strictness='ANY'; SELECT '-'; -SELECT a1.*, a2.* FROM test.a1 ANY LEFT JOIN test.a2 USING a ORDER BY b; +SELECT a1.*, a2.* FROM a1 ANY LEFT JOIN a2 USING a ORDER BY b; -DROP TABLE IF EXISTS test.a1; -DROP TABLE IF EXISTS test.a2; +DROP TABLE IF EXISTS a1; +DROP TABLE IF EXISTS a2; diff --git a/dbms/tests/queries/0_stateless/00725_join_on_bug_2.sql b/dbms/tests/queries/0_stateless/00725_join_on_bug_2.sql index 7e95aa4a1d3..c0b33c11d1a 100644 --- a/dbms/tests/queries/0_stateless/00725_join_on_bug_2.sql +++ b/dbms/tests/queries/0_stateless/00725_join_on_bug_2.sql @@ -1,23 +1,23 @@ -drop table if exists test.t; -drop table if exists test.s; +drop table if exists t; +drop table if exists s; -create table test.t(a Int64, b Int64) engine = TinyLog; -insert into test.t values(1,1); -insert into test.t values(2,2); -create table test.s(a Int64, b Int64) engine = TinyLog; -insert into test.s values(1,1); +create table t(a Int64, b Int64) engine = TinyLog; +insert into t values(1,1); +insert into t values(2,2); +create table s(a Int64, b Int64) engine = TinyLog; +insert into s values(1,1); -select a, b, s_a, s_b from test.t all left join (select a,b,a s_a, b s_b from test.s) using (a,b); +select a, b, s_a, s_b from t all left join (select a,b,a s_a, b s_b from s) using (a,b); select '-'; -select t.*, s.* from test.t all left join test.s using (a,b); +select t.*, s.* from t all left join s using (a,b); select '-'; -select a,b,s_a,s_b from test.t all left join (select a, b, a s_a, b s_b from test.s) s on (s.a = t.a and s.b = t.b); +select a,b,s_a,s_b from t all left join (select a, b, a s_a, b s_b from s) s on (s.a = t.a and s.b = t.b); select '-'; -select * from test.t all left join (select a s_a, b s_b from test.s) on (s_a = t.a and s_b = t.b); +select * from t all left join (select a s_a, b s_b from s) on (s_a = t.a and s_b = t.b); select '-'; -select a,b,s_a,s_b from test.t all left join (select a,b, a s_a, b s_b from test.s) on (s_a = t.a and s_b = t.b); +select a,b,s_a,s_b from t all left join (select a,b, a s_a, b s_b from s) on (s_a = t.a and s_b = t.b); select '-'; -select t.*, s.* from test.t all left join test.s on (s.a = t.a and s.b = t.b); +select t.*, s.* from t all left join s on (s.a = t.a and s.b = t.b); -drop table if exists test.t; -drop table if exists test.s; +drop table if exists t; +drop table if exists s; diff --git a/dbms/tests/queries/0_stateless/00725_join_on_bug_3.sql b/dbms/tests/queries/0_stateless/00725_join_on_bug_3.sql index e3232d268c3..ad9ff23eae1 100644 --- a/dbms/tests/queries/0_stateless/00725_join_on_bug_3.sql +++ b/dbms/tests/queries/0_stateless/00725_join_on_bug_3.sql @@ -1,14 +1,14 @@ -drop table if exists test.t; -drop table if exists test.z; +drop table if exists t; +drop table if exists z; -create table test.t(a Int64, b Int64) engine = TinyLog; -insert into test.t values(1,1); -insert into test.t values(2,2); -create table test.z(c Int64, d Int64, e Int64) engine = TinyLog; -insert into test.z values(1,1,1); +create table t(a Int64, b Int64) engine = TinyLog; +insert into t values(1,1); +insert into t values(2,2); +create table z(c Int64, d Int64, e Int64) engine = TinyLog; +insert into z values(1,1,1); -select * from test.t all left join test.z on (z.c = t.a and z.d = t.b); +select * from t all left join z on (z.c = t.a and z.d = t.b); -drop table if exists test.t; -drop table if exists test.z; +drop table if exists t; +drop table if exists z; diff --git a/dbms/tests/queries/0_stateless/00725_join_on_bug_4.sql b/dbms/tests/queries/0_stateless/00725_join_on_bug_4.sql index 00c5b12d7ff..94c6931471e 100644 --- a/dbms/tests/queries/0_stateless/00725_join_on_bug_4.sql +++ b/dbms/tests/queries/0_stateless/00725_join_on_bug_4.sql @@ -1,13 +1,13 @@ -drop table if exists test.t; -drop table if exists test.s; +drop table if exists t; +drop table if exists s; -create table test.t(a Int64, b Int64, c String) engine = TinyLog; -insert into test.t values(1,1,'a'),(2,2,'b'); -create table test.s(a Int64, b Int64, c String) engine = TinyLog; -insert into test.s values(1,1,'a'); +create table t(a Int64, b Int64, c String) engine = TinyLog; +insert into t values(1,1,'a'),(2,2,'b'); +create table s(a Int64, b Int64, c String) engine = TinyLog; +insert into s values(1,1,'a'); -select t.* from test.t all left join test.s on (s.a = t.a and s.b = t.b) where s.a = 0 and s.b = 0; +select t.* from t all left join s on (s.a = t.a and s.b = t.b) where s.a = 0 and s.b = 0; -drop table if exists test.t; -drop table if exists test.s; +drop table if exists t; +drop table if exists s; diff --git a/dbms/tests/queries/0_stateless/00726_materialized_view_concurrent.sql b/dbms/tests/queries/0_stateless/00726_materialized_view_concurrent.sql index 53618d6e2ba..c737642f4b7 100644 --- a/dbms/tests/queries/0_stateless/00726_materialized_view_concurrent.sql +++ b/dbms/tests/queries/0_stateless/00726_materialized_view_concurrent.sql @@ -1,8 +1,6 @@ -DROP TABLE IF EXISTS test.src; -DROP TABLE IF EXISTS test.mv1; -DROP TABLE IF EXISTS test.mv2; - -USE test; +DROP TABLE IF EXISTS src; +DROP TABLE IF EXISTS mv1; +DROP TABLE IF EXISTS mv2; CREATE TABLE src (x UInt8) ENGINE = Null; CREATE MATERIALIZED VIEW mv1 ENGINE = Memory AS SELECT x FROM src WHERE x % 2 = 0; @@ -17,6 +15,6 @@ INSERT INTO src VALUES (3), (4); SELECT * FROM mv1 ORDER BY x; SELECT * FROM mv2 ORDER BY x; -DROP TABLE test.mv1; -DROP TABLE test.mv2; -DROP TABLE test.src; +DROP TABLE mv1; +DROP TABLE mv2; +DROP TABLE src; diff --git a/dbms/tests/queries/0_stateless/00728_json_each_row_parsing.sh b/dbms/tests/queries/0_stateless/00728_json_each_row_parsing.sh index 2719fe375a1..69462d72aaa 100755 --- a/dbms/tests/queries/0_stateless/00728_json_each_row_parsing.sh +++ b/dbms/tests/queries/0_stateless/00728_json_each_row_parsing.sh @@ -6,10 +6,10 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) cur_name=${BASH_SOURCE[0]} -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.json_parse;" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.json_parse (aaa String, bbb String) ENGINE = Memory;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS json_parse;" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE json_parse (aaa String, bbb String) ENGINE = Memory;" -for n in {1..1000000}; do echo '{"aaa":"aaa","bbb":"bbb"}'; done | curl -sS "${CLICKHOUSE_URL}?query=INSERT%20INTO%20test.json_parse%20FORMAT%20JSONEachRow" -0 --data-binary @- +for n in {1..1000000}; do echo '{"aaa":"aaa","bbb":"bbb"}'; done | curl -sS "${CLICKHOUSE_URL_PARAMS}&query=INSERT%20INTO%20json_parse%20FORMAT%20JSONEachRow" -0 --data-binary @- -${CLICKHOUSE_CLIENT} --query="SELECT count() FROM test.json_parse;" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.json_parse;" +${CLICKHOUSE_CLIENT} --query="SELECT count() FROM json_parse;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE json_parse;" diff --git a/dbms/tests/queries/0_stateless/00729_prewhere_array_join.sql b/dbms/tests/queries/0_stateless/00729_prewhere_array_join.sql index 8c0c86b1931..dc6ff4b36f9 100644 --- a/dbms/tests/queries/0_stateless/00729_prewhere_array_join.sql +++ b/dbms/tests/queries/0_stateless/00729_prewhere_array_join.sql @@ -1,5 +1,4 @@ SET send_logs_level = 'none'; -USE test; drop table if exists t1; create table t1 (id UInt64, val Array(String),nid UInt64, eDate Date)ENGINE = MergeTree(eDate, (id, eDate), 8192); diff --git a/dbms/tests/queries/0_stateless/00730_unicode_terminal_format.sql b/dbms/tests/queries/0_stateless/00730_unicode_terminal_format.sql index fabf2fdfddf..546ba4d68fe 100644 --- a/dbms/tests/queries/0_stateless/00730_unicode_terminal_format.sql +++ b/dbms/tests/queries/0_stateless/00730_unicode_terminal_format.sql @@ -1,24 +1,24 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.unicode; +DROP TABLE IF EXISTS unicode; -CREATE TABLE test.unicode(c1 String, c2 String) ENGINE = Memory; -INSERT INTO test.unicode VALUES ('Здравствуйте', 'Этот код можно отредактировать и запустить!'), -INSERT INTO test.unicode VALUES ('你好', '这段代码是可以编辑并且能够运行的!'), -INSERT INTO test.unicode VALUES ('Hola', '¡Este código es editable y ejecutable!'), -INSERT INTO test.unicode VALUES ('Bonjour', 'Ce code est modifiable et exécutable !'), -INSERT INTO test.unicode VALUES ('Ciao', 'Questo codice è modificabile ed eseguibile!'), -INSERT INTO test.unicode VALUES ('こんにちは', 'このコードは編集して実行出来ます!'), -INSERT INTO test.unicode VALUES ('안녕하세요', '여기에서 코드를 수정하고 실행할 수 있습니다!'), -INSERT INTO test.unicode VALUES ('Cześć', 'Ten kod można edytować oraz uruchomić!'), -INSERT INTO test.unicode VALUES ('Olá', 'Este código é editável e executável!'), -INSERT INTO test.unicode VALUES ('Chào bạn', 'Bạn có thể edit và run code trực tiếp!'), -INSERT INTO test.unicode VALUES ('Hallo', 'Dieser Code kann bearbeitet und ausgeführt werden!'), -INSERT INTO test.unicode VALUES ('Hej', 'Den här koden kan redigeras och köras!'), -INSERT INTO test.unicode VALUES ('Ahoj', 'Tento kód můžete upravit a spustit'); -INSERT INTO test.unicode VALUES ('Tabs \t Tabs', 'Non-first \t Tabs'); -INSERT INTO test.unicode VALUES ('Control characters \x1f\x1f\x1f\x1f with zero width', 'Invalid UTF-8 which eats pending characters \xf0, or invalid by itself \x80 with zero width'); -INSERT INTO test.unicode VALUES ('Russian ё and ё ', 'Zero bytes \0 \0 in middle'); -SELECT * FROM test.unicode SETTINGS max_threads = 1 FORMAT PrettyNoEscapes; +CREATE TABLE unicode(c1 String, c2 String) ENGINE = Memory; +INSERT INTO unicode VALUES ('Здравствуйте', 'Этот код можно отредактировать и запустить!'), +INSERT INTO unicode VALUES ('你好', '这段代码是可以编辑并且能够运行的!'), +INSERT INTO unicode VALUES ('Hola', '¡Este código es editable y ejecutable!'), +INSERT INTO unicode VALUES ('Bonjour', 'Ce code est modifiable et exécutable !'), +INSERT INTO unicode VALUES ('Ciao', 'Questo codice è modificabile ed eseguibile!'), +INSERT INTO unicode VALUES ('こんにちは', 'このコードは編集して実行出来ます!'), +INSERT INTO unicode VALUES ('안녕하세요', '여기에서 코드를 수정하고 실행할 수 있습니다!'), +INSERT INTO unicode VALUES ('Cześć', 'Ten kod można edytować oraz uruchomić!'), +INSERT INTO unicode VALUES ('Olá', 'Este código é editável e executável!'), +INSERT INTO unicode VALUES ('Chào bạn', 'Bạn có thể edit và run code trực tiếp!'), +INSERT INTO unicode VALUES ('Hallo', 'Dieser Code kann bearbeitet und ausgeführt werden!'), +INSERT INTO unicode VALUES ('Hej', 'Den här koden kan redigeras och köras!'), +INSERT INTO unicode VALUES ('Ahoj', 'Tento kód můžete upravit a spustit'); +INSERT INTO unicode VALUES ('Tabs \t Tabs', 'Non-first \t Tabs'); +INSERT INTO unicode VALUES ('Control characters \x1f\x1f\x1f\x1f with zero width', 'Invalid UTF-8 which eats pending characters \xf0, or invalid by itself \x80 with zero width'); +INSERT INTO unicode VALUES ('Russian ё and ё ', 'Zero bytes \0 \0 in middle'); +SELECT * FROM unicode SETTINGS max_threads = 1 FORMAT PrettyNoEscapes; SELECT 'Tabs \t Tabs', 'Long\tTitle' FORMAT PrettyNoEscapes; SELECT '你好', '世界' FORMAT Vertical; @@ -26,4 +26,4 @@ SELECT 'Tabs \t Tabs', 'Non-first \t Tabs' FORMAT Vertical; SELECT 'Control characters \x1f\x1f\x1f\x1f with zero width', 'Invalid UTF-8 which eats pending characters \xf0, and invalid by itself \x80 with zero width' FORMAT Vertical; SELECT 'Russian ё and ё', 'Zero bytes \0 \0 in middle' FORMAT Vertical; -DROP TABLE IF EXISTS test.unicode; +DROP TABLE IF EXISTS unicode; diff --git a/dbms/tests/queries/0_stateless/00731_long_merge_tree_select_opened_files.sh b/dbms/tests/queries/0_stateless/00731_long_merge_tree_select_opened_files.sh index 8d8a847fbe6..bb67ae9fa83 100755 --- a/dbms/tests/queries/0_stateless/00731_long_merge_tree_select_opened_files.sh +++ b/dbms/tests/queries/0_stateless/00731_long_merge_tree_select_opened_files.sh @@ -11,18 +11,18 @@ settings="$server_logs --log_queries=1 --log_query_threads=1 --log_profile_event # Test insert logging on each block and checkPacket() method $CLICKHOUSE_CLIENT $settings -n -q " -DROP TABLE IF EXISTS test.merge_tree_table; -CREATE TABLE test.merge_tree_table (id UInt64, date Date, uid UInt32) ENGINE = MergeTree(date, id, 8192);" +DROP TABLE IF EXISTS merge_tree_table; +CREATE TABLE merge_tree_table (id UInt64, date Date, uid UInt32) ENGINE = MergeTree(date, id, 8192);" -$CLICKHOUSE_CLIENT $settings -q "INSERT INTO test.merge_tree_table SELECT (intHash64(number)) % 10000, toDate('2018-08-01'), rand() FROM system.numbers LIMIT 10000000;" +$CLICKHOUSE_CLIENT $settings -q "INSERT INTO merge_tree_table SELECT (intHash64(number)) % 10000, toDate('2018-08-01'), rand() FROM system.numbers LIMIT 10000000;" -$CLICKHOUSE_CLIENT $settings -q "OPTIMIZE TABLE test.merge_tree_table FINAL;" +$CLICKHOUSE_CLIENT $settings -q "OPTIMIZE TABLE merge_tree_table FINAL;" -toching_many_parts_query="SELECT count() from (SELECT toDayOfWeek(date) as m, id, count() FROM test.merge_tree_table GROUP BY id, m ORDER BY count() DESC LIMIT 10 SETTINGS max_threads = 1)" +toching_many_parts_query="SELECT count() from (SELECT toDayOfWeek(date) as m, id, count() FROM merge_tree_table GROUP BY id, m ORDER BY count() DESC LIMIT 10 SETTINGS max_threads = 1)" $CLICKHOUSE_CLIENT $settings -q "$toching_many_parts_query" &> /dev/null $CLICKHOUSE_CLIENT $settings -q "SYSTEM FLUSH LOGS" $CLICKHOUSE_CLIENT $settings -q "SELECT pi.Values FROM system.query_log ARRAY JOIN ProfileEvents as pi WHERE query='$toching_many_parts_query' and pi.Names = 'FileOpen' ORDER BY event_time DESC LIMIT 1;" -$CLICKHOUSE_CLIENT $settings -q "DROP TABLE IF EXISTS test.merge_tree_table;" +$CLICKHOUSE_CLIENT $settings -q "DROP TABLE IF EXISTS merge_tree_table;" diff --git a/dbms/tests/queries/0_stateless/00732_decimal_summing_merge_tree.sql b/dbms/tests/queries/0_stateless/00732_decimal_summing_merge_tree.sql index f560283434f..536983e0783 100644 --- a/dbms/tests/queries/0_stateless/00732_decimal_summing_merge_tree.sql +++ b/dbms/tests/queries/0_stateless/00732_decimal_summing_merge_tree.sql @@ -1,6 +1,6 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.decimal_sum; -CREATE TABLE test.decimal_sum +DROP TABLE IF EXISTS decimal_sum; +CREATE TABLE decimal_sum ( date Date, sum32 Decimal32(4), @@ -8,20 +8,20 @@ CREATE TABLE test.decimal_sum sum128 Decimal128(10) ) Engine = SummingMergeTree(date, (date), 8192); -INSERT INTO test.decimal_sum VALUES ('2001-01-01', 1, 1, -1); -INSERT INTO test.decimal_sum VALUES ('2001-01-01', 1, -1, -1); +INSERT INTO decimal_sum VALUES ('2001-01-01', 1, 1, -1); +INSERT INTO decimal_sum VALUES ('2001-01-01', 1, -1, -1); -OPTIMIZE TABLE test.decimal_sum; -SELECT * FROM test.decimal_sum; +OPTIMIZE TABLE decimal_sum; +SELECT * FROM decimal_sum; -INSERT INTO test.decimal_sum VALUES ('2001-01-01', -2, 1, 2); +INSERT INTO decimal_sum VALUES ('2001-01-01', -2, 1, 2); -OPTIMIZE TABLE test.decimal_sum; -SELECT * FROM test.decimal_sum; +OPTIMIZE TABLE decimal_sum; +SELECT * FROM decimal_sum; -INSERT INTO test.decimal_sum VALUES ('2001-01-01', 0, -1, 0); +INSERT INTO decimal_sum VALUES ('2001-01-01', 0, -1, 0); -OPTIMIZE TABLE test.decimal_sum; -SELECT * FROM test.decimal_sum; +OPTIMIZE TABLE decimal_sum; +SELECT * FROM decimal_sum; -drop table test.decimal_sum; +drop table decimal_sum; diff --git a/dbms/tests/queries/0_stateless/00732_quorum_insert_have_data_before_quorum_zookeeper.sql b/dbms/tests/queries/0_stateless/00732_quorum_insert_have_data_before_quorum_zookeeper.sql index 1c7aa898638..c71446d0074 100644 --- a/dbms/tests/queries/0_stateless/00732_quorum_insert_have_data_before_quorum_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00732_quorum_insert_have_data_before_quorum_zookeeper.sql @@ -1,30 +1,30 @@ SET send_logs_level = 'none'; -DROP TABLE IF EXISTS test.quorum1; -DROP TABLE IF EXISTS test.quorum2; +DROP TABLE IF EXISTS quorum1; +DROP TABLE IF EXISTS quorum2; -CREATE TABLE test.quorum1(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '1') ORDER BY x PARTITION BY y; -CREATE TABLE test.quorum2(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '2') ORDER BY x PARTITION BY y; +CREATE TABLE quorum1(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '1') ORDER BY x PARTITION BY y; +CREATE TABLE quorum2(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '2') ORDER BY x PARTITION BY y; -INSERT INTO test.quorum1 VALUES (1, '1990-11-15'); -INSERT INTO test.quorum1 VALUES (2, '1990-11-15'); -INSERT INTO test.quorum1 VALUES (3, '2020-12-16'); +INSERT INTO quorum1 VALUES (1, '1990-11-15'); +INSERT INTO quorum1 VALUES (2, '1990-11-15'); +INSERT INTO quorum1 VALUES (3, '2020-12-16'); -SYSTEM SYNC REPLICA test.quorum2; +SYSTEM SYNC REPLICA quorum2; SET select_sequential_consistency=1; -SELECT x FROM test.quorum1 ORDER BY x; -SELECT x FROM test.quorum2 ORDER BY x; +SELECT x FROM quorum1 ORDER BY x; +SELECT x FROM quorum2 ORDER BY x; SET insert_quorum=2; -INSERT INTO test.quorum1 VALUES (4, '1990-11-15'); -INSERT INTO test.quorum1 VALUES (5, '1990-11-15'); -INSERT INTO test.quorum1 VALUES (6, '2020-12-16'); +INSERT INTO quorum1 VALUES (4, '1990-11-15'); +INSERT INTO quorum1 VALUES (5, '1990-11-15'); +INSERT INTO quorum1 VALUES (6, '2020-12-16'); -SELECT x FROM test.quorum1 ORDER BY x; -SELECT x FROM test.quorum2 ORDER BY x; +SELECT x FROM quorum1 ORDER BY x; +SELECT x FROM quorum2 ORDER BY x; -DROP TABLE IF EXISTS test.quorum1; -DROP TABLE IF EXISTS test.quorum2; +DROP TABLE IF EXISTS quorum1; +DROP TABLE IF EXISTS quorum2; diff --git a/dbms/tests/queries/0_stateless/00732_quorum_insert_lost_part_and_alive_part_zookeeper.sql b/dbms/tests/queries/0_stateless/00732_quorum_insert_lost_part_and_alive_part_zookeeper.sql index a956688e893..d99459d38ef 100644 --- a/dbms/tests/queries/0_stateless/00732_quorum_insert_lost_part_and_alive_part_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00732_quorum_insert_lost_part_and_alive_part_zookeeper.sql @@ -1,38 +1,38 @@ SET send_logs_level = 'none'; -DROP TABLE IF EXISTS test.quorum1; -DROP TABLE IF EXISTS test.quorum2; +DROP TABLE IF EXISTS quorum1; +DROP TABLE IF EXISTS quorum2; -CREATE TABLE test.quorum1(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '1') ORDER BY x PARTITION BY y; -CREATE TABLE test.quorum2(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '2') ORDER BY x PARTITION BY y; +CREATE TABLE quorum1(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '1') ORDER BY x PARTITION BY y; +CREATE TABLE quorum2(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '2') ORDER BY x PARTITION BY y; SET insert_quorum=2; SET select_sequential_consistency=1; -INSERT INTO test.quorum1 VALUES (1, '2018-11-15'); -INSERT INTO test.quorum1 VALUES (2, '2018-11-15'); -INSERT INTO test.quorum1 VALUES (3, '2018-12-16'); +INSERT INTO quorum1 VALUES (1, '2018-11-15'); +INSERT INTO quorum1 VALUES (2, '2018-11-15'); +INSERT INTO quorum1 VALUES (3, '2018-12-16'); SET insert_quorum_timeout=0; -SYSTEM STOP FETCHES test.quorum1; +SYSTEM STOP FETCHES quorum1; -INSERT INTO test.quorum2 VALUES (4, toDate('2018-12-16')); -- { serverError 319 } +INSERT INTO quorum2 VALUES (4, toDate('2018-12-16')); -- { serverError 319 } -SELECT x FROM test.quorum1 ORDER BY x; -SELECT x FROM test.quorum2 ORDER BY x; +SELECT x FROM quorum1 ORDER BY x; +SELECT x FROM quorum2 ORDER BY x; SET select_sequential_consistency=0; -SELECT x FROM test.quorum2 ORDER BY x; +SELECT x FROM quorum2 ORDER BY x; SET select_sequential_consistency=1; -SYSTEM START FETCHES test.quorum1; -SYSTEM SYNC REPLICA test.quorum1; +SYSTEM START FETCHES quorum1; +SYSTEM SYNC REPLICA quorum1; -SELECT x FROM test.quorum1 ORDER BY x; -SELECT x FROM test.quorum2 ORDER BY x; +SELECT x FROM quorum1 ORDER BY x; +SELECT x FROM quorum2 ORDER BY x; -DROP TABLE IF EXISTS test.quorum1; -DROP TABLE IF EXISTS test.quorum2; +DROP TABLE IF EXISTS quorum1; +DROP TABLE IF EXISTS quorum2; diff --git a/dbms/tests/queries/0_stateless/00732_quorum_insert_lost_part_zookeeper.sql b/dbms/tests/queries/0_stateless/00732_quorum_insert_lost_part_zookeeper.sql index be333378aed..39d2b5feaf1 100644 --- a/dbms/tests/queries/0_stateless/00732_quorum_insert_lost_part_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00732_quorum_insert_lost_part_zookeeper.sql @@ -1,35 +1,35 @@ SET send_logs_level = 'none'; -DROP TABLE IF EXISTS test.quorum1; -DROP TABLE IF EXISTS test.quorum2; +DROP TABLE IF EXISTS quorum1; +DROP TABLE IF EXISTS quorum2; -CREATE TABLE test.quorum1(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '1') ORDER BY x PARTITION BY y; -CREATE TABLE test.quorum2(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '2') ORDER BY x PARTITION BY y; +CREATE TABLE quorum1(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '1') ORDER BY x PARTITION BY y; +CREATE TABLE quorum2(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '2') ORDER BY x PARTITION BY y; SET insert_quorum=2; SET select_sequential_consistency=1; SET insert_quorum_timeout=0; -SYSTEM STOP FETCHES test.quorum1; +SYSTEM STOP FETCHES quorum1; -INSERT INTO test.quorum2 VALUES (1, '2018-11-15'); -- { serverError 319 } +INSERT INTO quorum2 VALUES (1, '2018-11-15'); -- { serverError 319 } -SELECT count(*) FROM test.quorum1; -SELECT count(*) FROM test.quorum2; +SELECT count(*) FROM quorum1; +SELECT count(*) FROM quorum2; SET select_sequential_consistency=0; -SELECT x FROM test.quorum2 ORDER BY x; +SELECT x FROM quorum2 ORDER BY x; SET select_sequential_consistency=1; SET insert_quorum_timeout=100; -SYSTEM START FETCHES test.quorum1; -SYSTEM SYNC REPLICA test.quorum1; +SYSTEM START FETCHES quorum1; +SYSTEM SYNC REPLICA quorum1; -SELECT x FROM test.quorum1 ORDER BY x; -SELECT x FROM test.quorum2 ORDER BY x; +SELECT x FROM quorum1 ORDER BY x; +SELECT x FROM quorum2 ORDER BY x; -DROP TABLE IF EXISTS test.quorum1; -DROP TABLE IF EXISTS test.quorum2; +DROP TABLE IF EXISTS quorum1; +DROP TABLE IF EXISTS quorum2; diff --git a/dbms/tests/queries/0_stateless/00732_quorum_insert_select_with_old_data_and_without_quorum_zookeeper.sql b/dbms/tests/queries/0_stateless/00732_quorum_insert_select_with_old_data_and_without_quorum_zookeeper.sql index 9a21c3319de..6e05beeaf25 100644 --- a/dbms/tests/queries/0_stateless/00732_quorum_insert_select_with_old_data_and_without_quorum_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00732_quorum_insert_select_with_old_data_and_without_quorum_zookeeper.sql @@ -1,28 +1,28 @@ SET send_logs_level = 'none'; -DROP TABLE IF EXISTS test.quorum1; -DROP TABLE IF EXISTS test.quorum2; +DROP TABLE IF EXISTS quorum1; +DROP TABLE IF EXISTS quorum2; -CREATE TABLE test.quorum1(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '1') ORDER BY x PARTITION BY y; -CREATE TABLE test.quorum2(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '2') ORDER BY x PARTITION BY y; +CREATE TABLE quorum1(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '1') ORDER BY x PARTITION BY y; +CREATE TABLE quorum2(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '2') ORDER BY x PARTITION BY y; -INSERT INTO test.quorum1 VALUES (1, '1990-11-15'); -INSERT INTO test.quorum1 VALUES (2, '1990-11-15'); -INSERT INTO test.quorum1 VALUES (3, '2020-12-16'); +INSERT INTO quorum1 VALUES (1, '1990-11-15'); +INSERT INTO quorum1 VALUES (2, '1990-11-15'); +INSERT INTO quorum1 VALUES (3, '2020-12-16'); -SYSTEM SYNC REPLICA test.quorum2; +SYSTEM SYNC REPLICA quorum2; SET select_sequential_consistency=1; SET insert_quorum=2; SET insert_quorum_timeout=0; -SYSTEM STOP FETCHES test.quorum1; +SYSTEM STOP FETCHES quorum1; -INSERT INTO test.quorum2 VALUES (4, toDate('2020-12-16')); -- { serverError 319 } +INSERT INTO quorum2 VALUES (4, toDate('2020-12-16')); -- { serverError 319 } -SELECT x FROM test.quorum1 ORDER BY x; -SELECT x FROM test.quorum2 ORDER BY x; +SELECT x FROM quorum1 ORDER BY x; +SELECT x FROM quorum2 ORDER BY x; -DROP TABLE IF EXISTS test.quorum1; -DROP TABLE IF EXISTS test.quorum2; +DROP TABLE IF EXISTS quorum1; +DROP TABLE IF EXISTS quorum2; diff --git a/dbms/tests/queries/0_stateless/00732_quorum_insert_simple_test_2_parts_zookeeper.sql b/dbms/tests/queries/0_stateless/00732_quorum_insert_simple_test_2_parts_zookeeper.sql index 61d0d59af17..6b8ba6c0af4 100644 --- a/dbms/tests/queries/0_stateless/00732_quorum_insert_simple_test_2_parts_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00732_quorum_insert_simple_test_2_parts_zookeeper.sql @@ -1,20 +1,20 @@ SET send_logs_level = 'none'; -DROP TABLE IF EXISTS test.quorum1; -DROP TABLE IF EXISTS test.quorum2; +DROP TABLE IF EXISTS quorum1; +DROP TABLE IF EXISTS quorum2; -CREATE TABLE test.quorum1(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '1') ORDER BY x PARTITION BY y; -CREATE TABLE test.quorum2(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '2') ORDER BY x PARTITION BY y; +CREATE TABLE quorum1(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '1') ORDER BY x PARTITION BY y; +CREATE TABLE quorum2(x UInt32, y Date) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/quorum', '2') ORDER BY x PARTITION BY y; SET insert_quorum=2; SET select_sequential_consistency=1; -INSERT INTO test.quorum1 VALUES (1, '2018-11-15'); -INSERT INTO test.quorum1 VALUES (2, '2018-11-15'); -INSERT INTO test.quorum1 VALUES (3, '2018-12-16'); +INSERT INTO quorum1 VALUES (1, '2018-11-15'); +INSERT INTO quorum1 VALUES (2, '2018-11-15'); +INSERT INTO quorum1 VALUES (3, '2018-12-16'); -SELECT x FROM test.quorum1 ORDER BY x; -SELECT x FROM test.quorum2 ORDER BY x; +SELECT x FROM quorum1 ORDER BY x; +SELECT x FROM quorum2 ORDER BY x; -DROP TABLE IF EXISTS test.quorum1; -DROP TABLE IF EXISTS test.quorum2; +DROP TABLE IF EXISTS quorum1; +DROP TABLE IF EXISTS quorum2; diff --git a/dbms/tests/queries/0_stateless/00735_or_expr_optimize_bug.sql b/dbms/tests/queries/0_stateless/00735_or_expr_optimize_bug.sql index 422f69878fd..2f10146472a 100644 --- a/dbms/tests/queries/0_stateless/00735_or_expr_optimize_bug.sql +++ b/dbms/tests/queries/0_stateless/00735_or_expr_optimize_bug.sql @@ -1,7 +1,7 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.or_expr_bug; -CREATE TABLE test.or_expr_bug (a UInt64, b UInt64) ENGINE = Memory; +DROP TABLE IF EXISTS or_expr_bug; +CREATE TABLE or_expr_bug (a UInt64, b UInt64) ENGINE = Memory; -INSERT INTO test.or_expr_bug VALUES(1,21),(1,22),(1,23),(2,21),(2,22),(2,23),(3,21),(3,22),(3,23); +INSERT INTO or_expr_bug VALUES(1,21),(1,22),(1,23),(2,21),(2,22),(2,23),(3,21),(3,22),(3,23); -SELECT count(*) FROM test.or_expr_bug WHERE (a=1 OR a=2 OR a=3) AND (b=21 OR b=22 OR b=23); +SELECT count(*) FROM or_expr_bug WHERE (a=1 OR a=2 OR a=3) AND (b=21 OR b=22 OR b=23); diff --git a/dbms/tests/queries/0_stateless/00736_disjunction_optimisation.sql b/dbms/tests/queries/0_stateless/00736_disjunction_optimisation.sql index caf2af7a037..700221ef7f0 100644 --- a/dbms/tests/queries/0_stateless/00736_disjunction_optimisation.sql +++ b/dbms/tests/queries/0_stateless/00736_disjunction_optimisation.sql @@ -1,21 +1,21 @@ -DROP TABLE IF EXISTS test.bug; -CREATE TABLE IF NOT EXISTS test.bug(k UInt64, s UInt64) ENGINE = Memory; -insert into test.bug values(1,21),(1,22),(1,23),(2,21),(2,22),(2,23),(3,21),(3,22),(3,23); +DROP TABLE IF EXISTS bug; +CREATE TABLE IF NOT EXISTS bug(k UInt64, s UInt64) ENGINE = Memory; +insert into bug values(1,21),(1,22),(1,23),(2,21),(2,22),(2,23),(3,21),(3,22),(3,23); set optimize_min_equality_disjunction_chain_length = 2; -select * from test.bug; -select * from test.bug where (k =1 or k=2 or k =3) and (s=21 or s=22 or s=23); -select * from (select * from test.bug where k=1 or k=2 or k=3) where (s=21 or s=22 or s=23); -select k, (k=1 or k=2 or k=3), s, (s=21), (s=21 or s=22), (s=21 or s=22 or s=23) from test.bug; -select s, (s=21 or s=22 or s=23) from test.bug; +select * from bug; +select * from bug where (k =1 or k=2 or k =3) and (s=21 or s=22 or s=23); +select * from (select * from bug where k=1 or k=2 or k=3) where (s=21 or s=22 or s=23); +select k, (k=1 or k=2 or k=3), s, (s=21), (s=21 or s=22), (s=21 or s=22 or s=23) from bug; +select s, (s=21 or s=22 or s=23) from bug; set optimize_min_equality_disjunction_chain_length = 3; -select * from test.bug; -select * from test.bug where (k =1 or k=2 or k =3) and (s=21 or s=22 or s=23); -select * from (select * from test.bug where k=1 or k=2 or k=3) where (s=21 or s=22 or s=23); -select k, (k=1 or k=2 or k=3), s, (s=21), (s=21 or s=22), (s=21 or s=22 or s=23) from test.bug; -select s, (s=21 or s=22 or s=23) from test.bug; +select * from bug; +select * from bug where (k =1 or k=2 or k =3) and (s=21 or s=22 or s=23); +select * from (select * from bug where k=1 or k=2 or k=3) where (s=21 or s=22 or s=23); +select k, (k=1 or k=2 or k=3), s, (s=21), (s=21 or s=22), (s=21 or s=22 or s=23) from bug; +select s, (s=21 or s=22 or s=23) from bug; -DROP TABLE test.bug; +DROP TABLE bug; diff --git a/dbms/tests/queries/0_stateless/00737_decimal_group_by.sql b/dbms/tests/queries/0_stateless/00737_decimal_group_by.sql index 0904bb1d601..c9db69b6c30 100644 --- a/dbms/tests/queries/0_stateless/00737_decimal_group_by.sql +++ b/dbms/tests/queries/0_stateless/00737_decimal_group_by.sql @@ -10,17 +10,17 @@ select x from (select toDecimal32(1.3, 2) x) group by x; select x from (select toDecimal64(2.3, 4) x) group by x; select x from (select toDecimal128(3.3, 12) x) group by x; -DROP TABLE IF EXISTS test.decimal; -CREATE TABLE IF NOT EXISTS test.decimal +DROP TABLE IF EXISTS decimal; +CREATE TABLE IF NOT EXISTS decimal ( A UInt64, B Decimal128(18), C Decimal128(18) ) Engine = Memory; -INSERT INTO test.decimal VALUES (1,1,1), (1,1,2), (1,1,3), (1,1,4); +INSERT INTO decimal VALUES (1,1,1), (1,1,2), (1,1,3), (1,1,4); -SELECT A, toString(B) AS B_str, toString(SUM(C)) AS c_str FROM test.decimal GROUP BY A, B_str; -SELECT A, B_str, toString(cc) FROM (SELECT A, toString(B) AS B_str, SUM(C) AS cc FROM test.decimal GROUP BY A, B_str); +SELECT A, toString(B) AS B_str, toString(SUM(C)) AS c_str FROM decimal GROUP BY A, B_str; +SELECT A, B_str, toString(cc) FROM (SELECT A, toString(B) AS B_str, SUM(C) AS cc FROM decimal GROUP BY A, B_str); -DROP TABLE test.decimal; +DROP TABLE decimal; diff --git a/dbms/tests/queries/0_stateless/00738_lock_for_inner_table.sh b/dbms/tests/queries/0_stateless/00738_lock_for_inner_table.sh index db20f6172f0..00a817ea1d9 100755 --- a/dbms/tests/queries/0_stateless/00738_lock_for_inner_table.sh +++ b/dbms/tests/queries/0_stateless/00738_lock_for_inner_table.sh @@ -4,22 +4,22 @@ set -e CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -echo "DROP TABLE IF EXISTS test.tab; -DROP TABLE IF EXISTS test.mv; -CREATE TABLE test.tab(a Int) ENGINE = Log; -CREATE MATERIALIZED VIEW test.mv ENGINE = Log AS SELECT a FROM test.tab;" | ${CLICKHOUSE_CLIENT} -n +echo "DROP TABLE IF EXISTS tab; +DROP TABLE IF EXISTS mv; +CREATE TABLE tab(a Int) ENGINE = Log; +CREATE MATERIALIZED VIEW mv ENGINE = Log AS SELECT a FROM tab;" | ${CLICKHOUSE_CLIENT} -n -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.tab SELECT number FROM numbers(10000000)" & +${CLICKHOUSE_CLIENT} --query "INSERT INTO tab SELECT number FROM numbers(10000000)" & function drop() { sleep 0.1 - ${CLICKHOUSE_CLIENT} --query "DROP TABLE test.\`.inner.mv\`" -n + ${CLICKHOUSE_CLIENT} --query "DROP TABLE \`.inner.mv\`" -n } drop & wait -echo "DROP TABLE IF EXISTS test.tab; -DROP TABLE IF EXISTS test.mv;" | ${CLICKHOUSE_CLIENT} -n +echo "DROP TABLE IF EXISTS tab; +DROP TABLE IF EXISTS mv;" | ${CLICKHOUSE_CLIENT} -n diff --git a/dbms/tests/queries/0_stateless/00738_nested_merge_multidimensional_array.sql b/dbms/tests/queries/0_stateless/00738_nested_merge_multidimensional_array.sql index 41b13e32a99..f9ccd9623e1 100644 --- a/dbms/tests/queries/0_stateless/00738_nested_merge_multidimensional_array.sql +++ b/dbms/tests/queries/0_stateless/00738_nested_merge_multidimensional_array.sql @@ -1,14 +1,14 @@ -DROP TABLE IF EXISTS test.sites; -CREATE TABLE test.sites (Domain UInt8, `Users.UserID` Array(UInt64), `Users.Dates` Array(Array(Date))) ENGINE = MergeTree ORDER BY Domain SETTINGS vertical_merge_algorithm_min_rows_to_activate = 0, vertical_merge_algorithm_min_columns_to_activate = 0; +DROP TABLE IF EXISTS sites; +CREATE TABLE sites (Domain UInt8, `Users.UserID` Array(UInt64), `Users.Dates` Array(Array(Date))) ENGINE = MergeTree ORDER BY Domain SETTINGS vertical_merge_algorithm_min_rows_to_activate = 0, vertical_merge_algorithm_min_columns_to_activate = 0; SYSTEM STOP MERGES; -INSERT INTO test.sites VALUES (1,[1],[[]]); -INSERT INTO test.sites VALUES (2,[1],[['2018-06-22']]); +INSERT INTO sites VALUES (1,[1],[[]]); +INSERT INTO sites VALUES (2,[1],[['2018-06-22']]); -SELECT count(), countArray(Users.Dates), countArrayArray(Users.Dates) FROM test.sites; +SELECT count(), countArray(Users.Dates), countArrayArray(Users.Dates) FROM sites; SYSTEM START MERGES; -OPTIMIZE TABLE test.sites FINAL; -SELECT count(), countArray(Users.Dates), countArrayArray(Users.Dates) FROM test.sites; +OPTIMIZE TABLE sites FINAL; +SELECT count(), countArray(Users.Dates), countArrayArray(Users.Dates) FROM sites; -DROP TABLE test.sites; +DROP TABLE sites; diff --git a/dbms/tests/queries/0_stateless/00740_optimize_predicate_expression.sql b/dbms/tests/queries/0_stateless/00740_optimize_predicate_expression.sql index 57a7aa81ade..29d11b4d97d 100644 --- a/dbms/tests/queries/0_stateless/00740_optimize_predicate_expression.sql +++ b/dbms/tests/queries/0_stateless/00740_optimize_predicate_expression.sql @@ -1,7 +1,7 @@ -DROP TABLE IF EXISTS test.perf; -CREATE TABLE test.perf (site String, user_id UInt64, z Float64) ENGINE = Log; +DROP TABLE IF EXISTS perf; +CREATE TABLE perf (site String, user_id UInt64, z Float64) ENGINE = Log; -SELECT * FROM (SELECT perf_1.z AS z_1 FROM test.perf AS perf_1); +SELECT * FROM (SELECT perf_1.z AS z_1 FROM perf AS perf_1); SELECT sum(mul)/sqrt(sum(sqr_dif_1) * sum(sqr_dif_2)) AS z_r FROM( @@ -10,11 +10,11 @@ SELECT avg(z_2) AS z_2_avg FROM ( SELECT perf_1.site, perf_1.z AS z_1 - FROM test.perf AS perf_1 + FROM perf AS perf_1 WHERE user_id = 000 ) ALL INNER JOIN ( SELECT perf_2.site, perf_2.z AS z_2 - FROM test.perf AS perf_2 + FROM perf AS perf_2 WHERE user_id = 999 ) USING site) as avg_values, z_1 - avg_values.1 AS dif_1, @@ -24,12 +24,12 @@ SELECT dif_2*dif_2 AS sqr_dif_2 FROM ( SELECT perf_1.site, perf_1.z AS z_1 - FROM test.perf AS perf_1 + FROM perf AS perf_1 WHERE user_id = 000 ) ALL INNER JOIN ( SELECT perf_2.site, perf_2.z AS z_2 - FROM test.perf AS perf_2 + FROM perf AS perf_2 WHERE user_id = 999 ) USING site); -DROP TABLE test.perf; +DROP TABLE perf; diff --git a/dbms/tests/queries/0_stateless/00743_limit_by_not_found_column.sql b/dbms/tests/queries/0_stateless/00743_limit_by_not_found_column.sql index 2401e1713fd..46c6bcb99b2 100644 --- a/dbms/tests/queries/0_stateless/00743_limit_by_not_found_column.sql +++ b/dbms/tests/queries/0_stateless/00743_limit_by_not_found_column.sql @@ -1,4 +1,3 @@ -USE test; DROP TABLE IF EXISTS installation_stats; CREATE TABLE installation_stats (message String, info String, message_type String) ENGINE = Log; diff --git a/dbms/tests/queries/0_stateless/00745_compile_scalar_subquery.sql b/dbms/tests/queries/0_stateless/00745_compile_scalar_subquery.sql index 0012db98f0e..1c31e7cb087 100644 --- a/dbms/tests/queries/0_stateless/00745_compile_scalar_subquery.sql +++ b/dbms/tests/queries/0_stateless/00745_compile_scalar_subquery.sql @@ -3,21 +3,21 @@ SET min_count_to_compile_expression = 1; SET optimize_move_to_prewhere = 0; SET enable_optimize_predicate_expression=0; -DROP TABLE IF EXISTS test.dt; -DROP TABLE IF EXISTS test.testx; +DROP TABLE IF EXISTS dt; +DROP TABLE IF EXISTS testx; -CREATE TABLE test.dt(tkey Int32) ENGINE = MergeTree order by tuple(); -INSERT INTO test.dt VALUES (300000); -CREATE TABLE test.testx(t Int32, a UInt8) ENGINE = MergeTree ORDER BY tuple(); -INSERT INTO test.testx VALUES (100000, 0); +CREATE TABLE dt(tkey Int32) ENGINE = MergeTree order by tuple(); +INSERT INTO dt VALUES (300000); +CREATE TABLE testx(t Int32, a UInt8) ENGINE = MergeTree ORDER BY tuple(); +INSERT INTO testx VALUES (100000, 0); -SELECT COUNT(*) FROM test.testx WHERE NOT a AND t < (SELECT tkey FROM test.dt); +SELECT COUNT(*) FROM testx WHERE NOT a AND t < (SELECT tkey FROM dt); -DROP TABLE test.dt; -CREATE TABLE test.dt(tkey Int32) ENGINE = MergeTree order by tuple(); -INSERT INTO test.dt VALUES (0); +DROP TABLE dt; +CREATE TABLE dt(tkey Int32) ENGINE = MergeTree order by tuple(); +INSERT INTO dt VALUES (0); -SELECT COUNT(*) FROM test.testx WHERE NOT a AND t < (SELECT tkey FROM test.dt); +SELECT COUNT(*) FROM testx WHERE NOT a AND t < (SELECT tkey FROM dt); -DROP TABLE IF EXISTS test.dt; -DROP TABLE IF EXISTS test.testx; +DROP TABLE IF EXISTS dt; +DROP TABLE IF EXISTS testx; diff --git a/dbms/tests/queries/0_stateless/00746_compile_non_deterministic_function.sql b/dbms/tests/queries/0_stateless/00746_compile_non_deterministic_function.sql index 3ca3148b9d6..b1e7fe35675 100644 --- a/dbms/tests/queries/0_stateless/00746_compile_non_deterministic_function.sql +++ b/dbms/tests/queries/0_stateless/00746_compile_non_deterministic_function.sql @@ -1,20 +1,20 @@ SET compile_expressions = 1; SET min_count_to_compile_expression = 1; -DROP TABLE IF EXISTS test.time_table; +DROP TABLE IF EXISTS time_table; -CREATE TABLE test.time_table(timecol DateTime, value Int32) ENGINE = MergeTree order by tuple(); +CREATE TABLE time_table(timecol DateTime, value Int32) ENGINE = MergeTree order by tuple(); -INSERT INTO test.time_table VALUES (now() - 5, 5), (now() - 3, 3); +INSERT INTO time_table VALUES (now() - 5, 5), (now() - 3, 3); -SELECT COUNT() from test.time_table WHERE value < now() - 1 AND value != 0 AND modulo(value, 2) != 0 AND timecol < now() - 1; +SELECT COUNT() from time_table WHERE value < now() - 1 AND value != 0 AND modulo(value, 2) != 0 AND timecol < now() - 1; SELECT sleep(3); -INSERT INTO test.time_table VALUES (now(), 101); +INSERT INTO time_table VALUES (now(), 101); SELECT sleep(3); -SELECT COUNT() from test.time_table WHERE value < now() - 1 AND value != 0 AND modulo(value, 2) != 0 AND timecol < now() - 1; +SELECT COUNT() from time_table WHERE value < now() - 1 AND value != 0 AND modulo(value, 2) != 0 AND timecol < now() - 1; -DROP TABLE IF EXISTS test.time_table; +DROP TABLE IF EXISTS time_table; diff --git a/dbms/tests/queries/0_stateless/00748_insert_array_with_null.sql b/dbms/tests/queries/0_stateless/00748_insert_array_with_null.sql index 027f9b6b472..b9cfe5a6115 100644 --- a/dbms/tests/queries/0_stateless/00748_insert_array_with_null.sql +++ b/dbms/tests/queries/0_stateless/00748_insert_array_with_null.sql @@ -1,11 +1,11 @@ -DROP TABLE IF EXISTS test.arraytest; +DROP TABLE IF EXISTS arraytest; -CREATE TABLE test.arraytest ( created_date Date DEFAULT toDate(created_at), created_at DateTime DEFAULT now(), strings Array(String) DEFAULT emptyArrayString()) ENGINE = MergeTree(created_date, cityHash64(created_at), (created_date, cityHash64(created_at)), 8192); +CREATE TABLE arraytest ( created_date Date DEFAULT toDate(created_at), created_at DateTime DEFAULT now(), strings Array(String) DEFAULT emptyArrayString()) ENGINE = MergeTree(created_date, cityHash64(created_at), (created_date, cityHash64(created_at)), 8192); -INSERT INTO test.arraytest (created_at, strings) VALUES (now(), ['aaaaa', 'bbbbb', 'ccccc']); -INSERT INTO test.arraytest (created_at, strings) VALUES (now(), ['aaaaa', 'bbbbb', null]); -- { clientError 53 } +INSERT INTO arraytest (created_at, strings) VALUES (now(), ['aaaaa', 'bbbbb', 'ccccc']); +INSERT INTO arraytest (created_at, strings) VALUES (now(), ['aaaaa', 'bbbbb', null]); -- { clientError 53 } -SELECT strings from test.arraytest; +SELECT strings from arraytest; -DROP TABLE IF EXISTS test.arraytest; +DROP TABLE IF EXISTS arraytest; diff --git a/dbms/tests/queries/0_stateless/00749_inner_join_of_unnamed_subqueries.sql b/dbms/tests/queries/0_stateless/00749_inner_join_of_unnamed_subqueries.sql index f2cf8579bab..de43da698dc 100644 --- a/dbms/tests/queries/0_stateless/00749_inner_join_of_unnamed_subqueries.sql +++ b/dbms/tests/queries/0_stateless/00749_inner_join_of_unnamed_subqueries.sql @@ -1,19 +1,19 @@ -DROP TABLE IF EXISTS test.left_table; -DROP TABLE IF EXISTS test.right_table; +DROP TABLE IF EXISTS left_table; +DROP TABLE IF EXISTS right_table; -CREATE TABLE test.left_table(APIKey Int32, SomeColumn String) ENGINE = MergeTree ORDER BY tuple(); +CREATE TABLE left_table(APIKey Int32, SomeColumn String) ENGINE = MergeTree ORDER BY tuple(); -INSERT INTO test.left_table VALUES(1, 'somestr'); +INSERT INTO left_table VALUES(1, 'somestr'); -CREATE TABLE test.right_table(APIKey Int32, EventValueForPostback String) ENGINE = MergeTree ORDER BY tuple(); +CREATE TABLE right_table(APIKey Int32, EventValueForPostback String) ENGINE = MergeTree ORDER BY tuple(); -INSERT INTO test.right_table VALUES(1, 'hello'), (2, 'WORLD'); +INSERT INTO right_table VALUES(1, 'hello'), (2, 'WORLD'); SELECT APIKey, ConversionEventValue FROM - test.left_table AS left_table + left_table AS left_table ALL INNER JOIN ( SELECT * @@ -23,18 +23,18 @@ ALL INNER JOIN APIKey, EventValueForPostback AS ConversionEventValue FROM - test.right_table AS right_table + right_table AS right_table ) ALL INNER JOIN ( SELECT APIKey FROM - test.left_table as left_table + left_table as left_table GROUP BY APIKey ) USING (APIKey) ) USING (APIKey); -DROP TABLE IF EXISTS test.left_table; -DROP TABLE IF EXISTS test.right_table; +DROP TABLE IF EXISTS left_table; +DROP TABLE IF EXISTS right_table; diff --git a/dbms/tests/queries/0_stateless/00750_merge_tree_merge_with_o_direct.sql b/dbms/tests/queries/0_stateless/00750_merge_tree_merge_with_o_direct.sql index 5957ec3f50f..89cf5a61625 100644 --- a/dbms/tests/queries/0_stateless/00750_merge_tree_merge_with_o_direct.sql +++ b/dbms/tests/queries/0_stateless/00750_merge_tree_merge_with_o_direct.sql @@ -1,11 +1,11 @@ -DROP TABLE IF EXISTS test.sample_merge_tree; +DROP TABLE IF EXISTS sample_merge_tree; -CREATE TABLE test.sample_merge_tree (dt DateTime, x UInt64) ENGINE = MergeTree PARTITION BY toYYYYMMDD(dt) ORDER BY x SETTINGS min_merge_bytes_to_use_direct_io=1, index_granularity = 8192; +CREATE TABLE sample_merge_tree (dt DateTime, x UInt64) ENGINE = MergeTree PARTITION BY toYYYYMMDD(dt) ORDER BY x SETTINGS min_merge_bytes_to_use_direct_io=1, index_granularity = 8192; -INSERT INTO test.sample_merge_tree VALUES (toDateTime('2018-10-31 05:05:00'), 0), (toDateTime('2018-10-31 06:06:00'), 10), (toDateTime('2018-10-28 10:00:00'), 20); +INSERT INTO sample_merge_tree VALUES (toDateTime('2018-10-31 05:05:00'), 0), (toDateTime('2018-10-31 06:06:00'), 10), (toDateTime('2018-10-28 10:00:00'), 20); -OPTIMIZE TABLE test.sample_merge_tree FINAL; +OPTIMIZE TABLE sample_merge_tree FINAL; -SELECT * FROM test.sample_merge_tree ORDER BY x; +SELECT * FROM sample_merge_tree ORDER BY x; -DROP TABLE IF EXISTS test.sample_merge_tree; +DROP TABLE IF EXISTS sample_merge_tree; diff --git a/dbms/tests/queries/0_stateless/00751_low_cardinality_nullable_group_by.sql b/dbms/tests/queries/0_stateless/00751_low_cardinality_nullable_group_by.sql index ca0dbaacbdb..c0234eaad8c 100644 --- a/dbms/tests/queries/0_stateless/00751_low_cardinality_nullable_group_by.sql +++ b/dbms/tests/queries/0_stateless/00751_low_cardinality_nullable_group_by.sql @@ -1,7 +1,7 @@ -drop table if exists test.low_null_float; -CREATE TABLE test.low_null_float (a LowCardinality(Nullable(Float64))) ENGINE = MergeTree order by tuple(); -INSERT INTO test.low_null_float (a) SELECT if(number % 3 == 0, Null, number) FROM system.numbers LIMIT 1000000; +drop table if exists low_null_float; +CREATE TABLE low_null_float (a LowCardinality(Nullable(Float64))) ENGINE = MergeTree order by tuple(); +INSERT INTO low_null_float (a) SELECT if(number % 3 == 0, Null, number) FROM system.numbers LIMIT 1000000; -SELECT a, count() FROM test.low_null_float GROUP BY a ORDER BY count() desc, a LIMIT 10; -drop table if exists test.low_null_float; +SELECT a, count() FROM low_null_float GROUP BY a ORDER BY count() desc, a LIMIT 10; +drop table if exists low_null_float; diff --git a/dbms/tests/queries/0_stateless/00752_low_cardinality_lambda_argument.sql b/dbms/tests/queries/0_stateless/00752_low_cardinality_lambda_argument.sql index 53582107ab4..9e2ef3f2ff6 100644 --- a/dbms/tests/queries/0_stateless/00752_low_cardinality_lambda_argument.sql +++ b/dbms/tests/queries/0_stateless/00752_low_cardinality_lambda_argument.sql @@ -1,6 +1,6 @@ -drop table if exists test.lc_lambda; -create table test.lc_lambda (arr Array(LowCardinality(UInt64))) engine = Memory; -insert into test.lc_lambda select range(number) from system.numbers limit 10; -select arrayFilter(x -> x % 2 == 0, arr) from test.lc_lambda; -drop table if exists test.lc_lambda; +drop table if exists lc_lambda; +create table lc_lambda (arr Array(LowCardinality(UInt64))) engine = Memory; +insert into lc_lambda select range(number) from system.numbers limit 10; +select arrayFilter(x -> x % 2 == 0, arr) from lc_lambda; +drop table if exists lc_lambda; diff --git a/dbms/tests/queries/0_stateless/00752_low_cardinality_left_array_join.sql b/dbms/tests/queries/0_stateless/00752_low_cardinality_left_array_join.sql index f4fab9728e1..1c19700e34d 100644 --- a/dbms/tests/queries/0_stateless/00752_low_cardinality_left_array_join.sql +++ b/dbms/tests/queries/0_stateless/00752_low_cardinality_left_array_join.sql @@ -1,5 +1,5 @@ -drop table if exists test.lc_left_aj; -CREATE TABLE test.lc_left_aj +drop table if exists lc_left_aj; +CREATE TABLE lc_left_aj ( str Array(LowCardinality(String)), null_str Array(LowCardinality(Nullable(String))), @@ -8,14 +8,14 @@ CREATE TABLE test.lc_left_aj ) ENGINE = Memory; -insert into test.lc_left_aj values (['a', 'b'], ['c', Null], [1, 2.0], [3., Null]), ([], ['c', Null], [1, 2.0], [3., Null]), (['a', 'b'], [], [1, 2.0], [3., Null]), (['a', 'b'], ['c', Null], [], [3., Null]), (['a', 'b'], ['c', Null], [1, 2.0], []); +insert into lc_left_aj values (['a', 'b'], ['c', Null], [1, 2.0], [3., Null]), ([], ['c', Null], [1, 2.0], [3., Null]), (['a', 'b'], [], [1, 2.0], [3., Null]), (['a', 'b'], ['c', Null], [], [3., Null]), (['a', 'b'], ['c', Null], [1, 2.0], []); -select *, arr from test.lc_left_aj left array join str as arr; +select *, arr from lc_left_aj left array join str as arr; select '-'; -select *, arr from test.lc_left_aj left array join null_str as arr; +select *, arr from lc_left_aj left array join null_str as arr; select '-'; -select *, arr from test.lc_left_aj left array join val as arr; +select *, arr from lc_left_aj left array join val as arr; select '-'; -select *, arr from test.lc_left_aj left array join null_val as arr; -drop table if exists test.lc_left_aj; +select *, arr from lc_left_aj left array join null_val as arr; +drop table if exists lc_left_aj; diff --git a/dbms/tests/queries/0_stateless/00752_low_cardinality_mv_1.sql b/dbms/tests/queries/0_stateless/00752_low_cardinality_mv_1.sql index 57e09ab61e2..733fce41e02 100644 --- a/dbms/tests/queries/0_stateless/00752_low_cardinality_mv_1.sql +++ b/dbms/tests/queries/0_stateless/00752_low_cardinality_mv_1.sql @@ -1,15 +1,15 @@ -drop table if exists test.lc; -drop table if exists test.lc_mv; +drop table if exists lc; +drop table if exists lc_mv; -create table test.lc (str StringWithDictionary) engine = MergeTree order by tuple(); +create table lc (str StringWithDictionary) engine = MergeTree order by tuple(); -insert into test.lc values ('a'), ('bbb'), ('ab'), ('accccc'), ('baasddas'), ('bcde'); +insert into lc values ('a'), ('bbb'), ('ab'), ('accccc'), ('baasddas'), ('bcde'); -CREATE MATERIALIZED VIEW test.lc_mv ENGINE = AggregatingMergeTree() ORDER BY tuple() populate AS SELECT substring(str, 1, 1) as letter, min(length(str)) AS min_len, max(length(str)) AS max_len FROM test.lc GROUP BY substring(str, 1, 1); +CREATE MATERIALIZED VIEW lc_mv ENGINE = AggregatingMergeTree() ORDER BY tuple() populate AS SELECT substring(str, 1, 1) as letter, min(length(str)) AS min_len, max(length(str)) AS max_len FROM lc GROUP BY substring(str, 1, 1); -insert into test.lc values ('a'), ('bbb'), ('ab'), ('accccc'), ('baasddas'), ('bcde'); -select * from test.lc_mv order by letter; +insert into lc values ('a'), ('bbb'), ('ab'), ('accccc'), ('baasddas'), ('bcde'); +select * from lc_mv order by letter; -drop table if exists test.lc; -drop table if exists test.lc_mv; +drop table if exists lc; +drop table if exists lc_mv; diff --git a/dbms/tests/queries/0_stateless/00752_low_cardinality_mv_2.sql b/dbms/tests/queries/0_stateless/00752_low_cardinality_mv_2.sql index 506f9e16710..354fce8f814 100644 --- a/dbms/tests/queries/0_stateless/00752_low_cardinality_mv_2.sql +++ b/dbms/tests/queries/0_stateless/00752_low_cardinality_mv_2.sql @@ -1,14 +1,14 @@ -drop table if exists test.radacct; -drop table if exists test.mv_traffic_by_tadig15min; +drop table if exists radacct; +drop table if exists mv_traffic_by_tadig15min; -CREATE TABLE test.radacct ( radacctid UInt64, f3gppchargingid Nullable(String), f3gppggsnaddress Nullable(String), f3gppggsnmccmnc Nullable(String), f3gppgprsqos Nullable(String), f3gppimeisv Nullable(String), f3gppimsi Nullable(UInt64), f3gppimsimccmnc Nullable(String), f3gpploci Nullable(String), f3gppnsapi Nullable(String), f3gpprattype Nullable(String), f3gppsgsnaddress Nullable(String), f3gppsgsnmccmnc Nullable(String), acctdelaytime Nullable(UInt32), acctinputoctets Nullable(UInt64), acctinputpackets Nullable(UInt64), acctoutputoctets Nullable(UInt64), acctoutputpackets Nullable(UInt64), acctsessionid String, acctstatustype Nullable(String), acctuniqueid String, calledstationid Nullable(String), callingstationid Nullable(String), framedipaddress Nullable(String), nasidentifier Nullable(String), nasipaddress Nullable(String), acctstarttime Nullable(DateTime), acctstoptime Nullable(DateTime), acctsessiontime Nullable(UInt32), acctterminatecause Nullable(String), acctstartdelay Nullable(UInt32), acctstopdelay Nullable(UInt32), connectinfo_start Nullable(String), connectinfo_stop Nullable(String), timestamp DateTime, username Nullable(String), realm Nullable(String), f3gppimsi_int UInt64, f3gppsgsnaddress_int Nullable(UInt32), timestamp_date Date, tac Nullable(String), mnc Nullable(String), tadig LowCardinality(String), country LowCardinality(String), tadig_op_ip Nullable(String) DEFAULT CAST('TADIG NOT FOUND', 'Nullable(String)'), mcc Nullable(UInt16) MATERIALIZED toUInt16OrNull(substring(f3gppsgsnmccmnc, 1, 6))) ENGINE = MergeTree(timestamp_date, (timestamp, radacctid, acctuniqueid), 8192); +CREATE TABLE radacct ( radacctid UInt64, f3gppchargingid Nullable(String), f3gppggsnaddress Nullable(String), f3gppggsnmccmnc Nullable(String), f3gppgprsqos Nullable(String), f3gppimeisv Nullable(String), f3gppimsi Nullable(UInt64), f3gppimsimccmnc Nullable(String), f3gpploci Nullable(String), f3gppnsapi Nullable(String), f3gpprattype Nullable(String), f3gppsgsnaddress Nullable(String), f3gppsgsnmccmnc Nullable(String), acctdelaytime Nullable(UInt32), acctinputoctets Nullable(UInt64), acctinputpackets Nullable(UInt64), acctoutputoctets Nullable(UInt64), acctoutputpackets Nullable(UInt64), acctsessionid String, acctstatustype Nullable(String), acctuniqueid String, calledstationid Nullable(String), callingstationid Nullable(String), framedipaddress Nullable(String), nasidentifier Nullable(String), nasipaddress Nullable(String), acctstarttime Nullable(DateTime), acctstoptime Nullable(DateTime), acctsessiontime Nullable(UInt32), acctterminatecause Nullable(String), acctstartdelay Nullable(UInt32), acctstopdelay Nullable(UInt32), connectinfo_start Nullable(String), connectinfo_stop Nullable(String), timestamp DateTime, username Nullable(String), realm Nullable(String), f3gppimsi_int UInt64, f3gppsgsnaddress_int Nullable(UInt32), timestamp_date Date, tac Nullable(String), mnc Nullable(String), tadig LowCardinality(String), country LowCardinality(String), tadig_op_ip Nullable(String) DEFAULT CAST('TADIG NOT FOUND', 'Nullable(String)'), mcc Nullable(UInt16) MATERIALIZED toUInt16OrNull(substring(f3gppsgsnmccmnc, 1, 6))) ENGINE = MergeTree(timestamp_date, (timestamp, radacctid, acctuniqueid), 8192); -insert into test.radacct values (1, 'a', 'b', 'c', 'd', 'e', 2, 'a', 'b', 'c', 'd', 'e', 'f', 3, 4, 5, 6, 7, 'a', 'Stop', 'c', 'd', 'e', 'f', 'g', 'h', '2018-10-10 15:54:21', '2018-10-10 15:54:21', 8, 'a', 9, 10, 'a', 'b', '2018-10-10 15:54:21', 'a', 'b', 11, 12, '2018-10-10', 'a', 'b', 'c', 'd', 'e'); +insert into radacct values (1, 'a', 'b', 'c', 'd', 'e', 2, 'a', 'b', 'c', 'd', 'e', 'f', 3, 4, 5, 6, 7, 'a', 'Stop', 'c', 'd', 'e', 'f', 'g', 'h', '2018-10-10 15:54:21', '2018-10-10 15:54:21', 8, 'a', 9, 10, 'a', 'b', '2018-10-10 15:54:21', 'a', 'b', 11, 12, '2018-10-10', 'a', 'b', 'c', 'd', 'e'); -create materialized view test.mv_traffic_by_tadig15min Engine=AggregatingMergeTree partition by tadig order by (ts,tadig) populate as select toStartOfFifteenMinutes(timestamp) ts,toDayOfWeek(timestamp) dow, tadig, sumState(acctinputoctets+acctoutputoctets) traffic_bytes,maxState(timestamp) last_stop, minState(radacctid) min_radacctid,maxState(radacctid) max_radacctid from test.radacct where acctstatustype='Stop' and acctinputoctets+acctoutputoctets > 0 group by tadig,ts,dow; +create materialized view mv_traffic_by_tadig15min Engine=AggregatingMergeTree partition by tadig order by (ts,tadig) populate as select toStartOfFifteenMinutes(timestamp) ts,toDayOfWeek(timestamp) dow, tadig, sumState(acctinputoctets+acctoutputoctets) traffic_bytes,maxState(timestamp) last_stop, minState(radacctid) min_radacctid,maxState(radacctid) max_radacctid from radacct where acctstatustype='Stop' and acctinputoctets+acctoutputoctets > 0 group by tadig,ts,dow; -select tadig, ts, dow, sumMerge(traffic_bytes), maxMerge(last_stop), minMerge(min_radacctid), maxMerge(max_radacctid) from test.mv_traffic_by_tadig15min group by tadig, ts, dow; +select tadig, ts, dow, sumMerge(traffic_bytes), maxMerge(last_stop), minMerge(min_radacctid), maxMerge(max_radacctid) from mv_traffic_by_tadig15min group by tadig, ts, dow; -drop table if exists test.radacct; -drop table if exists test.mv_traffic_by_tadig15min; +drop table if exists radacct; +drop table if exists mv_traffic_by_tadig15min; diff --git a/dbms/tests/queries/0_stateless/00752_low_cardinality_permute.sql b/dbms/tests/queries/0_stateless/00752_low_cardinality_permute.sql index 44f991cb8bc..5c0716a926f 100644 --- a/dbms/tests/queries/0_stateless/00752_low_cardinality_permute.sql +++ b/dbms/tests/queries/0_stateless/00752_low_cardinality_permute.sql @@ -1,7 +1,7 @@ -drop table if exists test.lc_perm; -create table test.lc_perm (val UInt32, str LowCardinality(String)) engine = MergeTree order by val; -insert into test.lc_perm values (1, 'w'), (10, 'x'), (3, 'y'), (8, 'z'), (4, 'w'), (6, 'y'), (11, 'x'), (0, 'z'), (12, 'a'), (13, 'b'), (14, 'c'), (15, 'd'), (16, 'e'), (17, 'f'), (18, 'g'), (19, 'h'); -select * from test.lc_perm; -select str from test.lc_perm where val < 12 order by str; -drop table if exists test.lc_perm; +drop table if exists lc_perm; +create table lc_perm (val UInt32, str LowCardinality(String)) engine = MergeTree order by val; +insert into lc_perm values (1, 'w'), (10, 'x'), (3, 'y'), (8, 'z'), (4, 'w'), (6, 'y'), (11, 'x'), (0, 'z'), (12, 'a'), (13, 'b'), (14, 'c'), (15, 'd'), (16, 'e'), (17, 'f'), (18, 'g'), (19, 'h'); +select * from lc_perm; +select str from lc_perm where val < 12 order by str; +drop table if exists lc_perm; diff --git a/dbms/tests/queries/0_stateless/00753_alter_attach.sql b/dbms/tests/queries/0_stateless/00753_alter_attach.sql index 10e53118c3b..86388396410 100644 --- a/dbms/tests/queries/0_stateless/00753_alter_attach.sql +++ b/dbms/tests/queries/0_stateless/00753_alter_attach.sql @@ -1,20 +1,20 @@ -DROP TABLE IF EXISTS test.alter_attach; -CREATE TABLE test.alter_attach (x UInt64, p UInt8) ENGINE = MergeTree ORDER BY tuple() PARTITION BY p; -INSERT INTO test.alter_attach VALUES (1, 1), (2, 1), (3, 1); +DROP TABLE IF EXISTS alter_attach; +CREATE TABLE alter_attach (x UInt64, p UInt8) ENGINE = MergeTree ORDER BY tuple() PARTITION BY p; +INSERT INTO alter_attach VALUES (1, 1), (2, 1), (3, 1); -ALTER TABLE test.alter_attach DETACH PARTITION 1; +ALTER TABLE alter_attach DETACH PARTITION 1; -ALTER TABLE test.alter_attach ADD COLUMN s String; -INSERT INTO test.alter_attach VALUES (4, 2, 'Hello'), (5, 2, 'World'); +ALTER TABLE alter_attach ADD COLUMN s String; +INSERT INTO alter_attach VALUES (4, 2, 'Hello'), (5, 2, 'World'); -ALTER TABLE test.alter_attach ATTACH PARTITION 1; -SELECT * FROM test.alter_attach ORDER BY x; +ALTER TABLE alter_attach ATTACH PARTITION 1; +SELECT * FROM alter_attach ORDER BY x; -ALTER TABLE test.alter_attach DETACH PARTITION 2; -ALTER TABLE test.alter_attach DROP COLUMN s; -INSERT INTO test.alter_attach VALUES (6, 3), (7, 3); +ALTER TABLE alter_attach DETACH PARTITION 2; +ALTER TABLE alter_attach DROP COLUMN s; +INSERT INTO alter_attach VALUES (6, 3), (7, 3); -ALTER TABLE test.alter_attach ATTACH PARTITION 2; -SELECT * FROM test.alter_attach ORDER BY x; +ALTER TABLE alter_attach ATTACH PARTITION 2; +SELECT * FROM alter_attach ORDER BY x; -DROP TABLE test.alter_attach; +DROP TABLE alter_attach; diff --git a/dbms/tests/queries/0_stateless/00753_comment_columns_zookeeper.reference b/dbms/tests/queries/0_stateless/00753_comment_columns_zookeeper.reference index 178f2142b9f..8b1eeea8203 100644 --- a/dbms/tests/queries/0_stateless/00753_comment_columns_zookeeper.reference +++ b/dbms/tests/queries/0_stateless/00753_comment_columns_zookeeper.reference @@ -1,6 +1,6 @@ CREATE TABLE test.check_comments (`column_name1` UInt8 DEFAULT 1 COMMENT \'comment\', `column_name2` UInt8 COMMENT \'non default comment\') ENGINE = ReplicatedMergeTree(\'clickhouse/tables/test_comments\', \'r1\') ORDER BY column_name1 SETTINGS index_granularity = 8192 -column_name1 UInt8 DEFAULT 1 comment -column_name2 UInt8 non default comment +column_name1 UInt8 DEFAULT 1 comment +column_name2 UInt8 non default comment CREATE TABLE test.check_comments (`column_name1` UInt8 DEFAULT 1 COMMENT \'another comment\', `column_name2` UInt8 COMMENT \'non default comment\') ENGINE = ReplicatedMergeTree(\'clickhouse/tables/test_comments\', \'r1\') ORDER BY column_name1 SETTINGS index_granularity = 8192 -column_name1 UInt8 DEFAULT 1 another comment -column_name2 UInt8 non default comment +column_name1 UInt8 DEFAULT 1 another comment +column_name2 UInt8 non default comment diff --git a/dbms/tests/queries/0_stateless/00753_quantile_format.sql b/dbms/tests/queries/0_stateless/00753_quantile_format.sql index 732ae0a9bb4..3a0947015ea 100644 --- a/dbms/tests/queries/0_stateless/00753_quantile_format.sql +++ b/dbms/tests/queries/0_stateless/00753_quantile_format.sql @@ -1,30 +1,30 @@ -DROP TABLE IF EXISTS test.datetime; +DROP TABLE IF EXISTS datetime; -CREATE TABLE test.datetime (d DateTime) ENGINE = Memory; -INSERT INTO test.datetime(d) VALUES(toDateTime('2016-06-15 23:00:00')); +CREATE TABLE datetime (d DateTime) ENGINE = Memory; +INSERT INTO datetime(d) VALUES(toDateTime('2016-06-15 23:00:00')); -SELECT quantile(0.2)(d) FROM test.datetime; -SELECT quantiles(0.2)(d) FROM test.datetime; +SELECT quantile(0.2)(d) FROM datetime; +SELECT quantiles(0.2)(d) FROM datetime; -SELECT quantileDeterministic(0.2)(d, 1) FROM test.datetime; -SELECT quantilesDeterministic(0.2)(d, 1) FROM test.datetime; +SELECT quantileDeterministic(0.2)(d, 1) FROM datetime; +SELECT quantilesDeterministic(0.2)(d, 1) FROM datetime; -SELECT quantileExact(0.2)(d) FROM test.datetime; -SELECT quantilesExact(0.2)(d) FROM test.datetime; +SELECT quantileExact(0.2)(d) FROM datetime; +SELECT quantilesExact(0.2)(d) FROM datetime; -SELECT quantileExactWeighted(0.2)(d, 1) FROM test.datetime; -SELECT quantilesExactWeighted(0.2)(d, 1) FROM test.datetime; +SELECT quantileExactWeighted(0.2)(d, 1) FROM datetime; +SELECT quantilesExactWeighted(0.2)(d, 1) FROM datetime; -SELECT quantileTiming(0.2)(d) FROM test.datetime; -- { serverError 43 } -SELECT quantilesTiming(0.2)(d) FROM test.datetime; -- { serverError 43 } +SELECT quantileTiming(0.2)(d) FROM datetime; -- { serverError 43 } +SELECT quantilesTiming(0.2)(d) FROM datetime; -- { serverError 43 } -SELECT quantileTimingWeighted(0.2)(d, 1) FROM test.datetime; -- { serverError 43 } -SELECT quantilesTimingWeighted(0.2)(d, 1) FROM test.datetime; -- { serverError 43 } +SELECT quantileTimingWeighted(0.2)(d, 1) FROM datetime; -- { serverError 43 } +SELECT quantilesTimingWeighted(0.2)(d, 1) FROM datetime; -- { serverError 43 } -SELECT quantileTDigest(0.2)(d) FROM test.datetime; -SELECT quantilesTDigest(0.2)(d) FROM test.datetime; +SELECT quantileTDigest(0.2)(d) FROM datetime; +SELECT quantilesTDigest(0.2)(d) FROM datetime; -SELECT quantileTDigestWeighted(0.2)(d, 1) FROM test.datetime; -SELECT quantilesTDigestWeighted(0.2)(d, 1) FROM test.datetime; +SELECT quantileTDigestWeighted(0.2)(d, 1) FROM datetime; +SELECT quantilesTDigestWeighted(0.2)(d, 1) FROM datetime; -DROP TABLE test.datetime; +DROP TABLE datetime; diff --git a/dbms/tests/queries/0_stateless/00753_system_columns_and_system_tables.sql b/dbms/tests/queries/0_stateless/00753_system_columns_and_system_tables.sql index 04b4ce28edf..a0f8f69fd4b 100644 --- a/dbms/tests/queries/0_stateless/00753_system_columns_and_system_tables.sql +++ b/dbms/tests/queries/0_stateless/00753_system_columns_and_system_tables.sql @@ -1,8 +1,8 @@ CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.check_system_tables; +DROP TABLE IF EXISTS check_system_tables; -- Check MergeTree declaration in new format -CREATE TABLE test.check_system_tables +CREATE TABLE check_system_tables ( name1 UInt8, name2 UInt8, @@ -22,10 +22,10 @@ FROM system.columns WHERE table = 'check_system_tables' FORMAT PrettyCompactNoEscapes; -DROP TABLE IF EXISTS test.check_system_tables; +DROP TABLE IF EXISTS check_system_tables; -- Check VersionedCollapsingMergeTree -CREATE TABLE test.check_system_tables +CREATE TABLE check_system_tables ( date Date, value String, @@ -45,10 +45,10 @@ FROM system.columns WHERE table = 'check_system_tables' FORMAT PrettyCompactNoEscapes; -DROP TABLE IF EXISTS test.check_system_tables; +DROP TABLE IF EXISTS check_system_tables; -- Check MergeTree declaration in old format -CREATE TABLE test.check_system_tables +CREATE TABLE check_system_tables ( Event Date, UserId UInt32, @@ -65,4 +65,4 @@ FROM system.columns WHERE table = 'check_system_tables' FORMAT PrettyCompactNoEscapes; -DROP TABLE IF EXISTS test.check_system_tables; +DROP TABLE IF EXISTS check_system_tables; diff --git a/dbms/tests/queries/0_stateless/00754_distributed_optimize_skip_select_on_unused_shards.sh b/dbms/tests/queries/0_stateless/00754_distributed_optimize_skip_select_on_unused_shards.sh index 6adcec4a14e..745334a4a99 100755 --- a/dbms/tests/queries/0_stateless/00754_distributed_optimize_skip_select_on_unused_shards.sh +++ b/dbms/tests/queries/0_stateless/00754_distributed_optimize_skip_select_on_unused_shards.sh @@ -3,103 +3,103 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.mergetree;" -${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.distributed;" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS mergetree;" +${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS distributed;" -${CLICKHOUSE_CLIENT} --query "CREATE TABLE test.mergetree (a Int64, b Int64, c Int64) ENGINE = MergeTree ORDER BY (a, b);" -${CLICKHOUSE_CLIENT} --query "CREATE TABLE test.distributed AS test.mergetree ENGINE = Distributed(test_unavailable_shard, test, mergetree, jumpConsistentHash(a+b, 2));" +${CLICKHOUSE_CLIENT} --query "CREATE TABLE mergetree (a Int64, b Int64, c Int64) ENGINE = MergeTree ORDER BY (a, b);" +${CLICKHOUSE_CLIENT} --query "CREATE TABLE distributed AS mergetree ENGINE = Distributed(test_unavailable_shard, ${CLICKHOUSE_DATABASE}, mergetree, jumpConsistentHash(a+b, 2));" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.mergetree VALUES (0, 0, 0);" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.mergetree VALUES (1, 0, 0);" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.mergetree VALUES (0, 1, 1);" -${CLICKHOUSE_CLIENT} --query "INSERT INTO test.mergetree VALUES (1, 1, 1);" +${CLICKHOUSE_CLIENT} --query "INSERT INTO mergetree VALUES (0, 0, 0);" +${CLICKHOUSE_CLIENT} --query "INSERT INTO mergetree VALUES (1, 0, 0);" +${CLICKHOUSE_CLIENT} --query "INSERT INTO mergetree VALUES (0, 1, 1);" +${CLICKHOUSE_CLIENT} --query "INSERT INTO mergetree VALUES (1, 1, 1);" # Should fail because second shard is unavailable -${CLICKHOUSE_CLIENT} --query "SELECT count(*) FROM test.distributed;" 2>&1 \ +${CLICKHOUSE_CLIENT} --query "SELECT count(*) FROM distributed;" 2>&1 \ | fgrep -q "All connection tries failed" && echo 'OK' || echo 'FAIL' # Should fail without setting `optimize_skip_unused_shards` -${CLICKHOUSE_CLIENT} --query "SELECT count(*) FROM test.distributed WHERE a = 0 AND b = 0;" 2>&1 \ +${CLICKHOUSE_CLIENT} --query "SELECT count(*) FROM distributed WHERE a = 0 AND b = 0;" 2>&1 \ | fgrep -q "All connection tries failed" && echo 'OK' || echo 'FAIL' # Should pass now ${CLICKHOUSE_CLIENT} -n --query=" SET optimize_skip_unused_shards = 1; - SELECT count(*) FROM test.distributed WHERE a = 0 AND b = 0; + SELECT count(*) FROM distributed WHERE a = 0 AND b = 0; " # Should still fail because of matching unavailable shard ${CLICKHOUSE_CLIENT} -n --query=" SET optimize_skip_unused_shards = 1; - SELECT count(*) FROM test.distributed WHERE a = 2 AND b = 2; + SELECT count(*) FROM distributed WHERE a = 2 AND b = 2; " 2>&1 \ | fgrep -q "All connection tries failed" && echo 'OK' || echo 'FAIL' # Try more complext expressions for constant folding - all should pass. ${CLICKHOUSE_CLIENT} -n --query=" SET optimize_skip_unused_shards = 1; - SELECT count(*) FROM test.distributed WHERE a = 1 AND a = 0 AND b = 0; + SELECT count(*) FROM distributed WHERE a = 1 AND a = 0 AND b = 0; " ${CLICKHOUSE_CLIENT} -n --query=" SET optimize_skip_unused_shards = 1; - SELECT count(*) FROM test.distributed WHERE a IN (0, 1) AND b IN (0, 1); + SELECT count(*) FROM distributed WHERE a IN (0, 1) AND b IN (0, 1); " ${CLICKHOUSE_CLIENT} -n --query=" SET optimize_skip_unused_shards = 1; - SELECT count(*) FROM test.distributed WHERE a = 0 AND b = 0 OR a = 1 AND b = 1; + SELECT count(*) FROM distributed WHERE a = 0 AND b = 0 OR a = 1 AND b = 1; " # TODO: should pass one day. #${CLICKHOUSE_CLIENT} -n --query=" # SET optimize_skip_unused_shards = 1; -# SELECT count(*) FROM test.distributed WHERE a = 0 AND b >= 0 AND b <= 1; +# SELECT count(*) FROM distributed WHERE a = 0 AND b >= 0 AND b <= 1; #" ${CLICKHOUSE_CLIENT} -n --query=" SET optimize_skip_unused_shards = 1; - SELECT count(*) FROM test.distributed WHERE a = 0 AND b = 0 AND c = 0; + SELECT count(*) FROM distributed WHERE a = 0 AND b = 0 AND c = 0; " ${CLICKHOUSE_CLIENT} -n --query=" SET optimize_skip_unused_shards = 1; - SELECT count(*) FROM test.distributed WHERE a = 0 AND b = 0 AND c != 10; + SELECT count(*) FROM distributed WHERE a = 0 AND b = 0 AND c != 10; " ${CLICKHOUSE_CLIENT} -n --query=" SET optimize_skip_unused_shards = 1; - SELECT count(*) FROM test.distributed WHERE a = 0 AND b = 0 AND (a+b)*b != 12; + SELECT count(*) FROM distributed WHERE a = 0 AND b = 0 AND (a+b)*b != 12; " ${CLICKHOUSE_CLIENT} -n --query=" SET optimize_skip_unused_shards = 1; - SELECT count(*) FROM test.distributed WHERE (a = 0 OR a = 1) AND (b = 0 OR b = 1); + SELECT count(*) FROM distributed WHERE (a = 0 OR a = 1) AND (b = 0 OR b = 1); " # These ones should fail. ${CLICKHOUSE_CLIENT} -n --query=" SET optimize_skip_unused_shards = 1; - SELECT count(*) FROM test.distributed WHERE a = 0 AND b <= 1; + SELECT count(*) FROM distributed WHERE a = 0 AND b <= 1; " 2>&1 \ | fgrep -q "All connection tries failed" && echo 'OK' || echo 'FAIL' ${CLICKHOUSE_CLIENT} -n --query=" SET optimize_skip_unused_shards = 1; - SELECT count(*) FROM test.distributed WHERE a = 0 AND c = 0; + SELECT count(*) FROM distributed WHERE a = 0 AND c = 0; " 2>&1 \ | fgrep -q "All connection tries failed" && echo 'OK' || echo 'FAIL' ${CLICKHOUSE_CLIENT} -n --query=" SET optimize_skip_unused_shards = 1; - SELECT count(*) FROM test.distributed WHERE a = 0 OR a = 1 AND b = 0; + SELECT count(*) FROM distributed WHERE a = 0 OR a = 1 AND b = 0; " 2>&1 \ | fgrep -q "All connection tries failed" && echo 'OK' || echo 'FAIL' ${CLICKHOUSE_CLIENT} -n --query=" SET optimize_skip_unused_shards = 1; - SELECT count(*) FROM test.distributed WHERE a = 0 AND b = 0 OR a = 2 AND b = 2; + SELECT count(*) FROM distributed WHERE a = 0 AND b = 0 OR a = 2 AND b = 2; " 2>&1 \ | fgrep -q "All connection tries failed" && echo 'OK' || echo 'FAIL' ${CLICKHOUSE_CLIENT} -n --query=" SET optimize_skip_unused_shards = 1; - SELECT count(*) FROM test.distributed WHERE a = 0 AND b = 0 OR c = 0; + SELECT count(*) FROM distributed WHERE a = 0 AND b = 0 OR c = 0; " 2>&1 \ | fgrep -q "All connection tries failed" && echo 'OK' || echo 'FAIL' diff --git a/dbms/tests/queries/0_stateless/00755_avg_value_size_hint_passing.sql b/dbms/tests/queries/0_stateless/00755_avg_value_size_hint_passing.sql index c0551f2f7ef..8ce6716e03c 100644 --- a/dbms/tests/queries/0_stateless/00755_avg_value_size_hint_passing.sql +++ b/dbms/tests/queries/0_stateless/00755_avg_value_size_hint_passing.sql @@ -1,11 +1,11 @@ -DROP TABLE IF EXISTS test.size_hint; -CREATE TABLE test.size_hint (s Array(String)) ENGINE = MergeTree ORDER BY tuple() SETTINGS index_granularity = 1000; +DROP TABLE IF EXISTS size_hint; +CREATE TABLE size_hint (s Array(String)) ENGINE = MergeTree ORDER BY tuple() SETTINGS index_granularity = 1000; SET max_block_size = 1000; SET max_memory_usage = 1000000000; -INSERT INTO test.size_hint SELECT arrayMap(x -> 'Hello', range(1000)) FROM numbers(10000); +INSERT INTO size_hint SELECT arrayMap(x -> 'Hello', range(1000)) FROM numbers(10000); SET max_memory_usage = 100000000, max_threads = 2; -SELECT count(), sum(length(s)) FROM test.size_hint; +SELECT count(), sum(length(s)) FROM size_hint; -DROP TABLE test.size_hint; +DROP TABLE size_hint; diff --git a/dbms/tests/queries/0_stateless/00760_insert_json_with_defaults.sql b/dbms/tests/queries/0_stateless/00760_insert_json_with_defaults.sql index 28d5cd6499a..483d5e6e522 100644 --- a/dbms/tests/queries/0_stateless/00760_insert_json_with_defaults.sql +++ b/dbms/tests/queries/0_stateless/00760_insert_json_with_defaults.sql @@ -1,8 +1,8 @@ SET input_format_defaults_for_omitted_fields=1; CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.defaults; -CREATE TABLE test.defaults +DROP TABLE IF EXISTS defaults; +CREATE TABLE defaults ( x UInt32, y UInt32, @@ -13,21 +13,21 @@ CREATE TABLE test.defaults f ALIAS x + y ) ENGINE = MergeTree ORDER BY x; -INSERT INTO test.defaults FORMAT JSONEachRow {"x":1, "y":1}; -INSERT INTO test.defaults (x, y) SELECT x, y FROM test.defaults LIMIT 1; -INSERT INTO test.defaults FORMAT JSONEachRow {"x":2, "y":2, "c":2}; -INSERT INTO test.defaults FORMAT JSONEachRow {"x":3, "y":3, "a":3, "b":3, "c":3}; -INSERT INTO test.defaults FORMAT JSONEachRow {"x":4} {"y":5, "c":5} {"a":6, "b":6, "c":6}; +INSERT INTO defaults FORMAT JSONEachRow {"x":1, "y":1}; +INSERT INTO defaults (x, y) SELECT x, y FROM defaults LIMIT 1; +INSERT INTO defaults FORMAT JSONEachRow {"x":2, "y":2, "c":2}; +INSERT INTO defaults FORMAT JSONEachRow {"x":3, "y":3, "a":3, "b":3, "c":3}; +INSERT INTO defaults FORMAT JSONEachRow {"x":4} {"y":5, "c":5} {"a":6, "b":6, "c":6}; -SELECT * FROM test.defaults ORDER BY (x, y); +SELECT * FROM defaults ORDER BY (x, y); -ALTER TABLE test.defaults ADD COLUMN n Nested(a UInt64, b String); -INSERT INTO test.defaults FORMAT JSONEachRow {"x":7, "y":7, "n.a":[1,2], "n.b":["a","b"]}; -SELECT * FROM test.defaults WHERE x = 7 FORMAT JSONEachRow; +ALTER TABLE defaults ADD COLUMN n Nested(a UInt64, b String); +INSERT INTO defaults FORMAT JSONEachRow {"x":7, "y":7, "n.a":[1,2], "n.b":["a","b"]}; +SELECT * FROM defaults WHERE x = 7 FORMAT JSONEachRow; -ALTER TABLE test.defaults ADD COLUMN n.c Array(UInt8) DEFAULT arrayMap(x -> 0, n.a) AFTER n.a; -INSERT INTO test.defaults FORMAT JSONEachRow {"x":8, "y":8, "n.a":[3,4], "n.b":["c","d"]}; -INSERT INTO test.defaults FORMAT JSONEachRow {"x":9, "y":9}; -SELECT * FROM test.defaults WHERE x > 7 ORDER BY x FORMAT JSONEachRow; +ALTER TABLE defaults ADD COLUMN n.c Array(UInt8) DEFAULT arrayMap(x -> 0, n.a) AFTER n.a; +INSERT INTO defaults FORMAT JSONEachRow {"x":8, "y":8, "n.a":[3,4], "n.b":["c","d"]}; +INSERT INTO defaults FORMAT JSONEachRow {"x":9, "y":9}; +SELECT * FROM defaults WHERE x > 7 ORDER BY x FORMAT JSONEachRow; -DROP TABLE test.defaults; +DROP TABLE defaults; diff --git a/dbms/tests/queries/0_stateless/00799_function_dry_run.sql b/dbms/tests/queries/0_stateless/00799_function_dry_run.sql index ac472c317d0..4f3df6a0ff8 100644 --- a/dbms/tests/queries/0_stateless/00799_function_dry_run.sql +++ b/dbms/tests/queries/0_stateless/00799_function_dry_run.sql @@ -1,8 +1,6 @@ -- https://stackoverflow.com/questions/53416531/clickhouse-moving-average -DROP TABLE IF EXISTS test.bm; - -USE test; +DROP TABLE IF EXISTS bm; CREATE TABLE bm (amount float, business_dttm DateTime) engine Log; @@ -34,4 +32,4 @@ FROM ORDER BY business_dttm ); -DROP TABLE test.bm; +DROP TABLE bm; diff --git a/dbms/tests/queries/0_stateless/00800_low_cardinality_array_group_by_arg.sql b/dbms/tests/queries/0_stateless/00800_low_cardinality_array_group_by_arg.sql index fa7a2edc329..af6f9da9ce1 100644 --- a/dbms/tests/queries/0_stateless/00800_low_cardinality_array_group_by_arg.sql +++ b/dbms/tests/queries/0_stateless/00800_low_cardinality_array_group_by_arg.sql @@ -1,7 +1,7 @@ -DROP TABLE IF EXISTS test.table1; -DROP TABLE IF EXISTS test.table2; +DROP TABLE IF EXISTS table1; +DROP TABLE IF EXISTS table2; -CREATE TABLE test.table1 +CREATE TABLE table1 ( dt Date, id Int32, @@ -9,7 +9,7 @@ arr Array(LowCardinality(String)) ) ENGINE = MergeTree PARTITION BY toMonday(dt) ORDER BY (dt, id) SETTINGS index_granularity = 8192; -CREATE TABLE test.table2 +CREATE TABLE table2 ( dt Date, id Int32, @@ -17,15 +17,15 @@ arr Array(LowCardinality(String)) ) ENGINE = MergeTree PARTITION BY toMonday(dt) ORDER BY (dt, id) SETTINGS index_granularity = 8192; -insert into test.table1 (dt, id, arr) values ('2019-01-14', 1, ['aaa']); -insert into test.table2 (dt, id, arr) values ('2019-01-14', 1, ['aaa','bbb','ccc']); +insert into table1 (dt, id, arr) values ('2019-01-14', 1, ['aaa']); +insert into table2 (dt, id, arr) values ('2019-01-14', 1, ['aaa','bbb','ccc']); select dt, id, arraySort(groupArrayArray(arr)) from ( - select dt, id, arr from test.table1 + select dt, id, arr from table1 where dt = '2019-01-14' and id = 1 UNION ALL - select dt, id, arr from test.table2 + select dt, id, arr from table2 where dt = '2019-01-14' and id = 1 ) group by dt, id; diff --git a/dbms/tests/queries/0_stateless/00800_low_cardinality_distinct_numeric.sql b/dbms/tests/queries/0_stateless/00800_low_cardinality_distinct_numeric.sql index fc9f2600109..bac864e6e21 100644 --- a/dbms/tests/queries/0_stateless/00800_low_cardinality_distinct_numeric.sql +++ b/dbms/tests/queries/0_stateless/00800_low_cardinality_distinct_numeric.sql @@ -1,5 +1,5 @@ -drop table if exists test.lc; -create table test.lc (val LowCardinality(UInt64)) engine = MergeTree order by val; -insert into test.lc select number % 123 from system.numbers limit 100000; -select distinct(val) from test.lc order by val; -drop table if exists test.lc; +drop table if exists lc; +create table lc (val LowCardinality(UInt64)) engine = MergeTree order by val; +insert into lc select number % 123 from system.numbers limit 100000; +select distinct(val) from lc order by val; +drop table if exists lc; diff --git a/dbms/tests/queries/0_stateless/00800_low_cardinality_empty_array.sql b/dbms/tests/queries/0_stateless/00800_low_cardinality_empty_array.sql index 0f02f6aa2d5..71bfb38d3c4 100644 --- a/dbms/tests/queries/0_stateless/00800_low_cardinality_empty_array.sql +++ b/dbms/tests/queries/0_stateless/00800_low_cardinality_empty_array.sql @@ -1,7 +1,7 @@ -drop table if exists test.lc; -create table test.lc (names Array(LowCardinality(String))) engine=MergeTree order by tuple(); -insert into test.lc values ([]); -insert into test.lc select emptyArrayString(); -select * from test.lc; -drop table if exists test.lc; +drop table if exists lc; +create table lc (names Array(LowCardinality(String))) engine=MergeTree order by tuple(); +insert into lc values ([]); +insert into lc select emptyArrayString(); +select * from lc; +drop table if exists lc; diff --git a/dbms/tests/queries/0_stateless/00804_rollup_with_having.sql b/dbms/tests/queries/0_stateless/00804_rollup_with_having.sql index 2bb5dec0136..cddaa8b6451 100644 --- a/dbms/tests/queries/0_stateless/00804_rollup_with_having.sql +++ b/dbms/tests/queries/0_stateless/00804_rollup_with_having.sql @@ -1,14 +1,14 @@ -DROP TABLE IF EXISTS test.rollup_having; -CREATE TABLE test.rollup_having ( +DROP TABLE IF EXISTS rollup_having; +CREATE TABLE rollup_having ( a Nullable(String), b Nullable(String) ) ENGINE = Memory; -INSERT INTO test.rollup_having VALUES (NULL, NULL); -INSERT INTO test.rollup_having VALUES ('a', NULL); -INSERT INTO test.rollup_having VALUES ('a', 'b'); +INSERT INTO rollup_having VALUES (NULL, NULL); +INSERT INTO rollup_having VALUES ('a', NULL); +INSERT INTO rollup_having VALUES ('a', 'b'); -SELECT a, b, count(*) FROM test.rollup_having GROUP BY a, b WITH ROLLUP HAVING a IS NOT NULL; -SELECT a, b, count(*) FROM test.rollup_having GROUP BY a, b WITH ROLLUP HAVING a IS NOT NULL and b IS NOT NULL; +SELECT a, b, count(*) FROM rollup_having GROUP BY a, b WITH ROLLUP HAVING a IS NOT NULL; +SELECT a, b, count(*) FROM rollup_having GROUP BY a, b WITH ROLLUP HAVING a IS NOT NULL and b IS NOT NULL; -DROP TABLE test.rollup_having; +DROP TABLE rollup_having; diff --git a/dbms/tests/queries/0_stateless/00806_alter_update.sql b/dbms/tests/queries/0_stateless/00806_alter_update.sql index 65e98188c3f..104b1185fcf 100644 --- a/dbms/tests/queries/0_stateless/00806_alter_update.sql +++ b/dbms/tests/queries/0_stateless/00806_alter_update.sql @@ -1,11 +1,11 @@ -DROP TABLE IF EXISTS test.alter_update; +DROP TABLE IF EXISTS alter_update; -CREATE TABLE test.alter_update (d Date, e Enum8('foo'=1, 'bar'=2)) Engine = MergeTree(d, (d), 8192); -INSERT INTO test.alter_update (d, e) VALUES ('2018-01-01', 'foo'); -INSERT INTO test.alter_update (d, e) VALUES ('2018-01-02', 'bar'); +CREATE TABLE alter_update (d Date, e Enum8('foo'=1, 'bar'=2)) Engine = MergeTree(d, (d), 8192); +INSERT INTO alter_update (d, e) VALUES ('2018-01-01', 'foo'); +INSERT INTO alter_update (d, e) VALUES ('2018-01-02', 'bar'); -ALTER TABLE test.alter_update UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1, \'bar\' = 2)') WHERE d='2018-01-02'; +ALTER TABLE alter_update UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1, \'bar\' = 2)') WHERE d='2018-01-02'; SELECT sleep(1); -- TODO: there should be setting for sync ALTER UPDATE someday. -SELECT e FROM test.alter_update ORDER BY d; +SELECT e FROM alter_update ORDER BY d; diff --git a/dbms/tests/queries/0_stateless/00808_not_optimize_predicate.sql b/dbms/tests/queries/0_stateless/00808_not_optimize_predicate.sql index ab57047f3e0..1e0a1a745f5 100644 --- a/dbms/tests/queries/0_stateless/00808_not_optimize_predicate.sql +++ b/dbms/tests/queries/0_stateless/00808_not_optimize_predicate.sql @@ -1,24 +1,24 @@ SET send_logs_level = 'none'; -DROP TABLE IF EXISTS test.test; -CREATE TABLE test.test(date Date, id Int8, name String, value Int64, sign Int8) ENGINE = CollapsingMergeTree(sign) ORDER BY (id, date); +DROP TABLE IF EXISTS test; +CREATE TABLE test(date Date, id Int8, name String, value Int64, sign Int8) ENGINE = CollapsingMergeTree(sign) ORDER BY (id, date); -INSERT INTO test.test VALUES('2000-01-01', 1, 'test string 1', 1, 1); -INSERT INTO test.test VALUES('2000-01-01', 2, 'test string 2', 2, 1); +INSERT INTO test VALUES('2000-01-01', 1, 'test string 1', 1, 1); +INSERT INTO test VALUES('2000-01-01', 2, 'test string 2', 2, 1); SET enable_optimize_predicate_expression = 1; SELECT '-------ENABLE OPTIMIZE PREDICATE-------'; -SELECT * FROM (SELECT * FROM test.test FINAL) WHERE id = 1; -SELECT * FROM (SELECT * FROM test.test LIMIT 1) WHERE id = 1; -SELECT * FROM (SELECT id FROM test.test GROUP BY id LIMIT 1 BY id) WHERE id = 1; +SELECT * FROM (SELECT * FROM test FINAL) WHERE id = 1; +SELECT * FROM (SELECT * FROM test LIMIT 1) WHERE id = 1; +SELECT * FROM (SELECT id FROM test GROUP BY id LIMIT 1 BY id) WHERE id = 1; SET force_primary_key = 1; SELECT '-------FORCE PRIMARY KEY-------'; -SELECT * FROM (SELECT * FROM test.test FINAL) WHERE id = 1; -- { serverError 277 } -SELECT * FROM (SELECT * FROM test.test LIMIT 1) WHERE id = 1; -- { serverError 277 } -SELECT * FROM (SELECT id FROM test.test GROUP BY id LIMIT 1 BY id) WHERE id = 1; -- { serverError 277 } +SELECT * FROM (SELECT * FROM test FINAL) WHERE id = 1; -- { serverError 277 } +SELECT * FROM (SELECT * FROM test LIMIT 1) WHERE id = 1; -- { serverError 277 } +SELECT * FROM (SELECT id FROM test GROUP BY id LIMIT 1 BY id) WHERE id = 1; -- { serverError 277 } SELECT '-------CHECK STATEFUL FUNCTIONS-------'; SELECT n, z, changed FROM ( @@ -36,4 +36,4 @@ SELECT arrayJoin(arrayMap(x -> x, arraySort(groupArray((ts, n))))) AS k FROM ( ) WHERE z = 'a' GROUP BY z; -DROP TABLE IF EXISTS test.test; +DROP TABLE IF EXISTS test; diff --git a/dbms/tests/queries/0_stateless/00812_prewhere_alias_array.sql b/dbms/tests/queries/0_stateless/00812_prewhere_alias_array.sql index 0679623194f..7637dd23b37 100644 --- a/dbms/tests/queries/0_stateless/00812_prewhere_alias_array.sql +++ b/dbms/tests/queries/0_stateless/00812_prewhere_alias_array.sql @@ -1,4 +1,4 @@ -DROP TABLE IF EXISTS test.prewhere; -CREATE TABLE test.prewhere (x Array(UInt64), y ALIAS x, s String) ENGINE = MergeTree ORDER BY tuple(); -SELECT count() FROM test.prewhere PREWHERE (length(s) >= 1) = 0 WHERE NOT ignore(y); -DROP TABLE test.prewhere; +DROP TABLE IF EXISTS prewhere; +CREATE TABLE prewhere (x Array(UInt64), y ALIAS x, s String) ENGINE = MergeTree ORDER BY tuple(); +SELECT count() FROM prewhere PREWHERE (length(s) >= 1) = 0 WHERE NOT ignore(y); +DROP TABLE prewhere; diff --git a/dbms/tests/queries/0_stateless/00816_join_column_names_sarg.sql b/dbms/tests/queries/0_stateless/00816_join_column_names_sarg.sql index a9d30e7152e..38f1056373c 100644 --- a/dbms/tests/queries/0_stateless/00816_join_column_names_sarg.sql +++ b/dbms/tests/queries/0_stateless/00816_join_column_names_sarg.sql @@ -1,5 +1,3 @@ -USE test; - drop table if exists t1; drop table if exists t2; create table t1 (a Int8, val Float32) engine=Memory(); @@ -11,7 +9,7 @@ INSERT INTO t2 VALUES (1, 456); select t1.a, t2.a from t1 all inner join t2 on t1.a=t2.a; -- Received exception from server (version 18.14.1): --- Code: 47. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Unknown identifier: test.t2.a. +-- Code: 47. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Unknown identifier: t2.a. -- this query works fine select t1.a, t2.* from t1 all inner join t2 on t1.a=t2.a; diff --git a/dbms/tests/queries/0_stateless/00816_long_concurrent_alter_column.sh b/dbms/tests/queries/0_stateless/00816_long_concurrent_alter_column.sh index c1fc0ebce6a..17779b73add 100755 --- a/dbms/tests/queries/0_stateless/00816_long_concurrent_alter_column.sh +++ b/dbms/tests/queries/0_stateless/00816_long_concurrent_alter_column.sh @@ -5,17 +5,17 @@ set -e CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -echo "DROP TABLE IF EXISTS test.concurrent_alter_column" | ${CLICKHOUSE_CLIENT} -echo "CREATE TABLE test.concurrent_alter_column (ts DATETIME) ENGINE = MergeTree PARTITION BY toStartOfDay(ts) ORDER BY tuple()" | ${CLICKHOUSE_CLIENT} +echo "DROP TABLE IF EXISTS concurrent_alter_column" | ${CLICKHOUSE_CLIENT} +echo "CREATE TABLE concurrent_alter_column (ts DATETIME) ENGINE = MergeTree PARTITION BY toStartOfDay(ts) ORDER BY tuple()" | ${CLICKHOUSE_CLIENT} -for i in {1..500}; do echo "ALTER TABLE test.concurrent_alter_column ADD COLUMN c$i DOUBLE;"; done | ${CLICKHOUSE_CLIENT} -n +for i in {1..500}; do echo "ALTER TABLE concurrent_alter_column ADD COLUMN c$i DOUBLE;"; done | ${CLICKHOUSE_CLIENT} -n -for i in {1..100}; do echo "ALTER TABLE test.concurrent_alter_column ADD COLUMN d DOUBLE" | ${CLICKHOUSE_CLIENT}; sleep `echo 0.0$RANDOM`; echo "ALTER TABLE test.concurrent_alter_column DROP COLUMN d" | ${CLICKHOUSE_CLIENT} -n; done & -for i in {1..100}; do echo "ALTER TABLE test.concurrent_alter_column ADD COLUMN e DOUBLE" | ${CLICKHOUSE_CLIENT}; sleep `echo 0.0$RANDOM`; echo "ALTER TABLE test.concurrent_alter_column DROP COLUMN e" | ${CLICKHOUSE_CLIENT} -n; done & -for i in {1..100}; do echo "ALTER TABLE test.concurrent_alter_column ADD COLUMN f DOUBLE" | ${CLICKHOUSE_CLIENT}; sleep `echo 0.0$RANDOM`; echo "ALTER TABLE test.concurrent_alter_column DROP COLUMN f" | ${CLICKHOUSE_CLIENT} -n; done & +for i in {1..100}; do echo "ALTER TABLE concurrent_alter_column ADD COLUMN d DOUBLE" | ${CLICKHOUSE_CLIENT}; sleep `echo 0.0$RANDOM`; echo "ALTER TABLE concurrent_alter_column DROP COLUMN d" | ${CLICKHOUSE_CLIENT} -n; done & +for i in {1..100}; do echo "ALTER TABLE concurrent_alter_column ADD COLUMN e DOUBLE" | ${CLICKHOUSE_CLIENT}; sleep `echo 0.0$RANDOM`; echo "ALTER TABLE concurrent_alter_column DROP COLUMN e" | ${CLICKHOUSE_CLIENT} -n; done & +for i in {1..100}; do echo "ALTER TABLE concurrent_alter_column ADD COLUMN f DOUBLE" | ${CLICKHOUSE_CLIENT}; sleep `echo 0.0$RANDOM`; echo "ALTER TABLE concurrent_alter_column DROP COLUMN f" | ${CLICKHOUSE_CLIENT} -n; done & wait -echo "DROP TABLE test.concurrent_alter_column" | ${CLICKHOUSE_CLIENT} +echo "DROP TABLE concurrent_alter_column" | ${CLICKHOUSE_CLIENT} echo 'did not crash' diff --git a/dbms/tests/queries/0_stateless/00818_inner_join_bug_3567.sql b/dbms/tests/queries/0_stateless/00818_inner_join_bug_3567.sql index e6160720859..b8bd6d3384c 100644 --- a/dbms/tests/queries/0_stateless/00818_inner_join_bug_3567.sql +++ b/dbms/tests/queries/0_stateless/00818_inner_join_bug_3567.sql @@ -1,16 +1,14 @@ -USE test; +DROP TABLE IF EXISTS using1; +DROP TABLE IF EXISTS using2; -DROP TABLE IF EXISTS test.using1; -DROP TABLE IF EXISTS test.using2; +CREATE TABLE using1(a String, b DateTime) ENGINE=MergeTree order by a; +CREATE TABLE using2(c String, a String, d DateTime) ENGINE=MergeTree order by c; -CREATE TABLE test.using1(a String, b DateTime) ENGINE=MergeTree order by a; -CREATE TABLE test.using2(c String, a String, d DateTime) ENGINE=MergeTree order by c; +INSERT INTO using1 VALUES ('a', '2018-01-01 00:00:00') ('b', '2018-01-01 00:00:00') ('c', '2018-01-01 00:00:00'); +INSERT INTO using2 VALUES ('d', 'd', '2018-01-01 00:00:00') ('b', 'b', '2018-01-01 00:00:00') ('c', 'c', '2018-01-01 00:00:00'); -INSERT INTO test.using1 VALUES ('a', '2018-01-01 00:00:00') ('b', '2018-01-01 00:00:00') ('c', '2018-01-01 00:00:00'); -INSERT INTO test.using2 VALUES ('d', 'd', '2018-01-01 00:00:00') ('b', 'b', '2018-01-01 00:00:00') ('c', 'c', '2018-01-01 00:00:00'); +SELECT * FROM using1 t1 ALL LEFT JOIN (SELECT *, c as a, d as b FROM using2) t2 USING (a, b) ORDER BY d; +SELECT * FROM using1 t1 ALL INNER JOIN (SELECT *, c as a, d as b FROM using2) t2 USING (a, b) ORDER BY d; -SELECT * FROM test.using1 t1 ALL LEFT JOIN (SELECT *, c as a, d as b FROM test.using2) t2 USING (a, b) ORDER BY d; -SELECT * FROM test.using1 t1 ALL INNER JOIN (SELECT *, c as a, d as b FROM test.using2) t2 USING (a, b) ORDER BY d; - -DROP TABLE test.using1; -DROP TABLE test.using2; +DROP TABLE using1; +DROP TABLE using2; diff --git a/dbms/tests/queries/0_stateless/00818_join_bug_4271.sql b/dbms/tests/queries/0_stateless/00818_join_bug_4271.sql index 8f7fc7f8ef4..c273b3f1925 100644 --- a/dbms/tests/queries/0_stateless/00818_join_bug_4271.sql +++ b/dbms/tests/queries/0_stateless/00818_join_bug_4271.sql @@ -1,5 +1,3 @@ -use test; - drop table if exists t; drop table if exists s; diff --git a/dbms/tests/queries/0_stateless/00819_ast_refactoring_bugs.sql b/dbms/tests/queries/0_stateless/00819_ast_refactoring_bugs.sql index 780dcd7e602..9737d894740 100644 --- a/dbms/tests/queries/0_stateless/00819_ast_refactoring_bugs.sql +++ b/dbms/tests/queries/0_stateless/00819_ast_refactoring_bugs.sql @@ -1,5 +1,5 @@ -DROP TABLE IF EXISTS test.visits1; -CREATE TABLE test.visits1 +DROP TABLE IF EXISTS visits1; +CREATE TABLE visits1 ( Sign Int8, Arr Array(Int8), @@ -8,10 +8,10 @@ CREATE TABLE test.visits1 CounterID UInt32 ) ENGINE = Memory; -SELECT arrayMap(x -> x * Sign, Arr) FROM test.visits1; +SELECT arrayMap(x -> x * Sign, Arr) FROM visits1; SELECT PP.Key2 AS `ym:s:pl2` -FROM test.visits1 +FROM visits1 ARRAY JOIN `ParsedParams.Key2` AS `PP.Key2`, `ParsedParams.Key1` AS `PP.Key1`, @@ -19,7 +19,7 @@ ARRAY JOIN arrayEnumerateUniq(`ParsedParams.Key2`) AS _uniq_ParsedParams WHERE CounterID = 100500; -DROP TABLE test.visits1; +DROP TABLE visits1; select u, cumSum from ( select u, min(d) mn, max(d) mx, groupArray(d) dg, groupArray(v) vg, diff --git a/dbms/tests/queries/0_stateless/00820_multiple_joins.sql b/dbms/tests/queries/0_stateless/00820_multiple_joins.sql index 8588edc5641..309b369ade3 100644 --- a/dbms/tests/queries/0_stateless/00820_multiple_joins.sql +++ b/dbms/tests/queries/0_stateless/00820_multiple_joins.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS table1; DROP TABLE IF EXISTS table2; DROP TABLE IF EXISTS table3; diff --git a/dbms/tests/queries/0_stateless/00821_distributed_storage_with_join_on.sql b/dbms/tests/queries/0_stateless/00821_distributed_storage_with_join_on.sql index cbd3eb6e467..9e87c739928 100644 --- a/dbms/tests/queries/0_stateless/00821_distributed_storage_with_join_on.sql +++ b/dbms/tests/queries/0_stateless/00821_distributed_storage_with_join_on.sql @@ -1,12 +1,12 @@ -DROP TABLE IF EXISTS test.table1; -DROP TABLE IF EXISTS test.table2; +DROP TABLE IF EXISTS table1; +DROP TABLE IF EXISTS table2; -CREATE TABLE test.table1 AS system.columns ENGINE = Distributed('test_shard_localhost', system, columns); -CREATE TABLE test.table2 AS system.tables ENGINE = Distributed('test_shard_localhost', system, tables); +CREATE TABLE table1 AS system.columns ENGINE = Distributed('test_shard_localhost', system, columns); +CREATE TABLE table2 AS system.tables ENGINE = Distributed('test_shard_localhost', system, tables); -SELECT 1 FROM test.table1 T1 ALL INNER JOIN test.table2 T2 ON T1.table = T2.name LIMIT 1; +SELECT 1 FROM table1 T1 ALL INNER JOIN table2 T2 ON T1.table = T2.name LIMIT 1; SELECT 1 FROM cluster('test_shard_localhost', system.columns) T1 ALL INNER JOIN cluster('test_shard_localhost', system.tables) T2 ON T1.table = T2.name LIMIT 1; -SELECT 1 FROM (SELECT * FROM test.table1) T1 ALL INNER JOIN (SELECT * FROM test.table2) T2 ON T1.table = T2.name LIMIT 1; +SELECT 1 FROM (SELECT * FROM table1) T1 ALL INNER JOIN (SELECT * FROM table2) T2 ON T1.table = T2.name LIMIT 1; -DROP TABLE IF EXISTS test.table1; -DROP TABLE IF EXISTS test.table2; +DROP TABLE IF EXISTS table1; +DROP TABLE IF EXISTS table2; diff --git a/dbms/tests/queries/0_stateless/00823_capnproto_input.sh b/dbms/tests/queries/0_stateless/00823_capnproto_input.sh index cf0e2739abd..8a0e9a074dd 100755 --- a/dbms/tests/queries/0_stateless/00823_capnproto_input.sh +++ b/dbms/tests/queries/0_stateless/00823_capnproto_input.sh @@ -37,8 +37,8 @@ struct CapnProto nestedthree @4 : NestedNestedTwo; }" > ${CLICKHOUSE_TMP}/test.capnp -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.capnproto_input" -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.capnproto_input +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS capnproto_input" +$CLICKHOUSE_CLIENT -q "CREATE TABLE capnproto_input ( number UInt64, string String, @@ -50,10 +50,10 @@ $CLICKHOUSE_CLIENT -q "CREATE TABLE test.capnproto_input nestedtwo_nestedtext String ) ENGINE = Memory" -echo -ne '\x00\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x01\x00\x04\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x12\x00\x00\x00\x0c\x00\x00\x00\x01\x00\x02\x00\x20\x00\x00\x00\x00\x00\x03\x00\x34\x00\x00\x00\x00\x00\x01\x00\x32\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x01\x00\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x12\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x01\x00\x00\x00\x08\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x12\x00\x00\x00\x37\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x12\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00' | $CLICKHOUSE_CLIENT --stacktrace --format_schema="${CLICKHOUSE_TMP}/test:CapnProto" --query="INSERT INTO test.capnproto_input FORMAT CapnProto"; +echo -ne '\x00\x00\x00\x00\x15\x00\x00\x00\x00\x00\x00\x00\x01\x00\x04\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x12\x00\x00\x00\x0c\x00\x00\x00\x01\x00\x02\x00\x20\x00\x00\x00\x00\x00\x03\x00\x34\x00\x00\x00\x00\x00\x01\x00\x32\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x01\x00\x03\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x12\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x01\x00\x00\x00\x08\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x12\x00\x00\x00\x37\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x12\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00' | $CLICKHOUSE_CLIENT --stacktrace --format_schema="${CLICKHOUSE_TMP}/test:CapnProto" --query="INSERT INTO capnproto_input FORMAT CapnProto"; -$CLICKHOUSE_CLIENT -q "SELECT * FROM test.capnproto_input" -$CLICKHOUSE_CLIENT -q "DROP TABLE test.capnproto_input" +$CLICKHOUSE_CLIENT -q "SELECT * FROM capnproto_input" +$CLICKHOUSE_CLIENT -q "DROP TABLE capnproto_input" # remove the schema file rm ${CLICKHOUSE_TMP}/test.capnp diff --git a/dbms/tests/queries/0_stateless/00823_sequence_match_dfa.sql b/dbms/tests/queries/0_stateless/00823_sequence_match_dfa.sql index e32e928785d..d8818449e77 100644 --- a/dbms/tests/queries/0_stateless/00823_sequence_match_dfa.sql +++ b/dbms/tests/queries/0_stateless/00823_sequence_match_dfa.sql @@ -1,8 +1,8 @@ -- this test cannot pass without the new DFA matching algorithm of sequenceMatch -DROP TABLE IF EXISTS test.sequence; +DROP TABLE IF EXISTS sequence; -CREATE TABLE test.sequence +CREATE TABLE sequence ( userID UInt64, eventType Enum8('A' = 1, 'B' = 2, 'C' = 3), @@ -10,16 +10,16 @@ CREATE TABLE test.sequence ) ENGINE = Memory; -INSERT INTO test.sequence SELECT 1, number = 0 ? 'A' : (number < 1000000 ? 'B' : 'C'), number FROM numbers(1000001); +INSERT INTO sequence SELECT 1, number = 0 ? 'A' : (number < 1000000 ? 'B' : 'C'), number FROM numbers(1000001); SELECT userID -FROM test.sequence +FROM sequence GROUP BY userID HAVING sequenceMatch('(?1).*(?2).*(?3)')(toDateTime(EventTime), eventType = 'A', eventType = 'B', eventType = 'C'); SELECT userID -FROM test.sequence +FROM sequence GROUP BY userID HAVING sequenceMatch('(?1).*(?2).*(?3)')(toDateTime(EventTime), eventType = 'A', eventType = 'B', eventType = 'A'); -DROP TABLE test.sequence; +DROP TABLE sequence; diff --git a/dbms/tests/queries/0_stateless/00825_protobuf_format_input.insh b/dbms/tests/queries/0_stateless/00825_protobuf_format_input.insh index c871a8970cc..d615f6e4e6d 100644 --- a/dbms/tests/queries/0_stateless/00825_protobuf_format_input.insh +++ b/dbms/tests/queries/0_stateless/00825_protobuf_format_input.insh @@ -1,4 +1,4 @@ -echo -ne '\xf3\x01\x0a\x24\x61\x37\x35\x32\x32\x31\x35\x38\x2d\x33\x64\x34\x31\x2d\x34\x62\x37\x37\x2d\x61\x64\x36\x39\x2d\x36\x63\x35\x39\x38\x65\x65\x35\x35\x63\x34\x39\x12\x04\x49\x76\x61\x6e\x1a\x06\x50\x65\x74\x72\x6f\x76\x20\x01\x28\xaf\x1f\x32\x03\x70\x6e\x67\x3a\x0c\x2b\x37\x34\x39\x35\x31\x32\x33\x34\x35\x36\x37\x40\x01\x4d\xfc\xd0\x30\x5c\x50\x26\x58\x09\x62\x09\x59\x65\x73\x74\x65\x72\x64\x61\x79\x62\x07\x46\x6c\x6f\x77\x65\x72\x73\x6a\x04\xff\x01\x00\x00\x72\x06\x4d\x6f\x73\x63\x6f\x77\x7a\x08\x4b\x03\x5f\x42\x72\x7d\x16\x42\x81\x01\x1f\x85\xeb\x51\xb8\x1e\x09\x40\x89\x01\x33\x33\x33\x33\x33\xc3\x6a\x40\x95\x01\xcd\xcc\xcc\x3d\x9d\x01\x9a\x99\xb9\x40\xa0\x01\x80\xc4\xd7\x8d\x7f\xaa\x01\x0c\x0a\x05\x6d\x65\x74\x65\x72\x15\x00\x00\x80\x3f\xaa\x01\x11\x0a\x0a\x63\x65\x6e\x74\x69\x6d\x65\x74\x65\x72\x15\x0a\xd7\x23\x3c\xaa\x01\x10\x0a\x09\x6b\x69\x6c\x6f\x6d\x65\x74\x65\x72\x15\x00\x00\x7a\x44\xb2\x01\x10\x0a\x0e\xa2\x06\x0b\x0a\x09\x08\xf4\x03\x12\x04\xf5\x03\xf6\x03\x7e\x0a\x24\x63\x36\x39\x34\x61\x64\x38\x61\x2d\x66\x37\x31\x34\x2d\x34\x65\x61\x33\x2d\x39\x30\x37\x64\x2d\x66\x64\x35\x34\x66\x62\x32\x35\x64\x39\x62\x35\x12\x07\x4e\x61\x74\x61\x6c\x69\x61\x1a\x08\x53\x6f\x6b\x6f\x6c\x6f\x76\x61\x28\xa6\x3f\x32\x03\x6a\x70\x67\x50\x1a\x58\x0b\x6a\x04\x64\xc8\x01\x32\x72\x08\x50\x6c\x79\x6d\x6f\x75\x74\x68\x7a\x08\x6a\x9d\x49\x42\x46\x8c\x84\xc0\x81\x01\x6e\x86\x1b\xf0\xf9\x21\x09\x40\x95\x01\x42\x60\xe5\x3b\x9d\x01\xcd\xcc\xac\x40\xa0\x01\xff\xff\xa9\xce\x93\x8c\x09\xc0\x01\x0a\x24\x61\x37\x64\x61\x31\x61\x61\x36\x2d\x66\x34\x32\x35\x2d\x34\x37\x38\x39\x2d\x38\x39\x34\x37\x2d\x62\x30\x33\x34\x37\x38\x36\x65\x64\x33\x37\x34\x12\x06\x56\x61\x73\x69\x6c\x79\x1a\x07\x53\x69\x64\x6f\x72\x6f\x76\x20\x01\x28\xfb\x48\x32\x03\x62\x6d\x70\x3a\x0d\x2b\x34\x34\x32\x30\x31\x32\x33\x34\x35\x36\x37\x38\x40\x01\x4d\x50\xe0\x27\x5c\x50\x17\x58\x04\x62\x05\x53\x75\x6e\x6e\x79\x6a\x05\xfa\x01\xf4\x01\x0a\x72\x08\x4d\x75\x72\x6d\x61\x6e\x73\x6b\x7a\x08\xfd\xf0\x89\x42\xc8\x4c\x04\x42\x81\x01\x11\x2d\x44\x54\xfb\x21\x09\x40\x89\x01\x00\x00\x00\xe8\x76\x48\x37\x42\x95\x01\x00\x00\x48\x44\x9d\x01\xcd\xcc\x4c\xc0\xa0\x01\x80\xd4\x9f\x93\x01\xaa\x01\x0c\x0a\x05\x70\x6f\x75\x6e\x64\x15\x00\x00\x80\x41\xb2\x01\x0a\x0a\x08\xa2\x06\x05\x0a\x03\x08\xf7\x03' | $CLICKHOUSE_CLIENT --query="INSERT INTO test.table FORMAT Protobuf SETTINGS format_schema = '$CURDIR/00825_protobuf_format:Person'" -echo -ne '\xb3\x01\x12\x05\x46\x72\x69\x64\x61\x28\x99\xe1\xf3\xd1\x0b\x52\x08\x45\x72\x6d\x61\x6b\x6f\x76\x61\x72\x0c\x00\x00\xdc\x42\x00\x00\x52\x43\x00\x00\x94\x42\x79\x48\xce\x3d\x51\x00\x00\x00\x00\xc8\x02\x14\xc2\x05\x08\x00\x00\x80\x44\x00\x00\x80\x49\x9a\x06\x02\x4b\x42\x9a\x06\x02\x4d\x42\xa1\x06\x00\x00\x00\x00\x00\x00\xe0\x3f\xa8\x06\x2a\xa8\x06\xa8\xff\xff\xff\xff\xff\xff\xff\xff\x01\xb0\x06\x01\xbd\x06\x25\x06\x49\x40\xfa\x06\x02\x34\x30\x90\x08\xe2\x08\xe1\x08\x89\xe6\x6e\xdd\x01\x00\x00\x00\xb0\x09\xc3\x19\xd0\x0c\xb7\x02\xe2\x12\x24\x32\x30\x66\x63\x64\x39\x35\x61\x2d\x33\x33\x32\x64\x2d\x34\x31\x64\x62\x2d\x61\x39\x65\x63\x2d\x31\x36\x31\x66\x36\x34\x34\x64\x30\x35\x39\x63\xa0\x38\xbc\x05\xaa\x38\x02\xbd\x05\xb4\x01\x08\x01\x12\x06\x49\x73\x6f\x6c\x64\x65\x52\x07\x4c\x61\x76\x72\x6f\x76\x61\x72\x0c\x00\x00\x7f\x43\x00\x00\x00\x00\x00\x00\x7f\x43\xaa\x01\x03\x61\x62\x63\xc8\x02\x32\xc2\x05\x08\x00\x00\x00\x41\x00\x00\x80\x3f\x9a\x06\x04\x42\x79\x74\x65\x9a\x06\x03\x42\x69\x74\xa1\x06\x00\x00\x00\x00\x00\x00\x12\x40\xa8\x06\x1a\xa8\x06\xb0\xff\xff\xff\xff\xff\xff\xff\xff\x01\xb0\x06\x01\xbd\x06\xf9\x0f\x49\x40\xc2\x06\x01\x2c\xfa\x06\x02\x33\x32\x90\x08\x78\xe1\x08\x39\x4e\x2b\xfe\xe4\xf5\xff\xff\xb0\x09\xe8\x30\xd8\x12\x01\xe2\x12\x24\x37\x63\x66\x61\x36\x38\x35\x36\x2d\x61\x35\x34\x61\x2d\x34\x37\x38\x36\x2d\x62\x38\x65\x35\x2d\x37\x34\x35\x31\x35\x39\x64\x35\x32\x32\x37\x38\xa0\x38\xbe\x05\xc2\x3e\x05\x15\x00\x00\xb6\x42' | $CLICKHOUSE_CLIENT --query="INSERT INTO test.table FORMAT Protobuf SETTINGS format_schema = '$CURDIR/00825_protobuf_format:AltPerson'" -echo -ne '\xa5\x02\x0a\x24\x61\x61\x30\x65\x35\x61\x30\x36\x2d\x63\x61\x62\x32\x2d\x34\x30\x33\x34\x2d\x61\x36\x61\x32\x2d\x34\x38\x65\x38\x32\x62\x39\x31\x36\x36\x34\x65\x12\x06\x4c\x65\x6f\x6e\x69\x64\x1a\x08\x4b\x69\x72\x69\x6c\x6c\x6f\x76\x22\x04\x6d\x61\x6c\x65\x2a\x0a\x31\x39\x38\x33\x2d\x30\x36\x2d\x32\x34\x3a\x0c\x2b\x37\x34\x39\x35\x30\x32\x37\x35\x38\x36\x34\x42\x01\x31\x4a\x13\x32\x30\x31\x39\x2d\x30\x32\x2d\x30\x34\x20\x30\x39\x3a\x34\x35\x3a\x30\x30\x52\x02\x33\x35\x5a\x06\x63\x61\x6e\x63\x65\x72\x62\x07\x37\x20\x72\x69\x6e\x67\x73\x62\x08\x45\x61\x73\x74\x73\x69\x64\x65\x62\x0b\x4c\x61\x73\x74\x20\x48\x75\x72\x72\x61\x68\x6a\x01\x30\x6a\x01\x30\x6a\x03\x32\x35\x35\x72\x09\x53\x61\x6e\x20\x44\x69\x65\x67\x6f\x7a\x09\x33\x32\x2e\x38\x32\x33\x39\x34\x33\x7a\x0b\x2d\x31\x31\x37\x2e\x30\x38\x31\x33\x32\x37\x82\x01\x09\x33\x2e\x31\x34\x31\x35\x39\x32\x37\x8a\x01\x08\x31\x35\x30\x30\x30\x30\x30\x30\x92\x01\x06\x31\x38\x36\x2e\x37\x35\x9a\x01\x04\x2d\x32\x2e\x31\xa2\x01\x0b\x32\x30\x36\x35\x39\x38\x32\x39\x33\x33\x31\xaa\x01\x18\x0a\x06\x6d\x69\x6e\x75\x74\x65\x0a\x04\x68\x6f\x75\x72\x12\x02\x36\x30\x12\x04\x33\x36\x30\x30\xb2\x01\x08\x0a\x06\x12\x04\x31\x38\x30\x30' | $CLICKHOUSE_CLIENT --query="INSERT INTO test.table FORMAT Protobuf SETTINGS format_schema = '$CURDIR/00825_protobuf_format:StrPerson'" -echo -ne '\xdd\x01\x0a\x24\x33\x66\x61\x65\x65\x30\x36\x34\x2d\x63\x34\x66\x37\x2d\x34\x64\x33\x34\x2d\x62\x36\x66\x33\x2d\x38\x64\x38\x31\x63\x32\x62\x36\x61\x31\x35\x64\x12\x04\x4e\x69\x63\x6b\x1a\x0a\x4b\x6f\x6c\x65\x73\x6e\x69\x6b\x6f\x76\x20\x01\x28\xda\x52\x32\x03\x62\x6d\x70\x3a\x0c\x34\x31\x32\x2d\x36\x38\x37\x2d\x35\x30\x30\x37\x40\x01\x4d\x2f\x27\xf2\x5b\x50\x14\x58\x09\x62\x06\x48\x61\x76\x61\x6e\x61\x68\x80\x01\x68\x00\x68\x80\x01\x72\x0a\x50\x69\x74\x74\x73\x62\x75\x72\x67\x68\x7a\x08\x9b\x11\x22\x42\x1f\xe6\x9f\xc2\x81\x01\x28\x2d\x44\x54\xfb\x21\x09\x40\x89\x01\x00\x00\x00\xe8\x76\x48\x27\x42\x95\x01\x00\x00\x43\x44\x9d\x01\x66\x66\x92\x41\xa0\x01\xce\xdf\xb8\xba\x01\xab\x01\x0d\xcd\xcc\xe2\x41\x0d\xcd\xcc\x4c\x3e\x0d\x00\x00\x80\x3f\x12\x05\x6f\x75\x6e\x63\x65\x12\x05\x63\x61\x72\x61\x74\x12\x04\x67\x72\x61\x6d\xac\x01\xb3\x01\x0b\xa2\x06\x05\x0b\x08\x96\x4a\x0c\x0c\xb4\x01' | $CLICKHOUSE_CLIENT --query="INSERT INTO test.table FORMAT Protobuf SETTINGS format_schema = '$CURDIR/00825_protobuf_format_syntax2:Syntax2Person'" +echo -ne '\xf3\x01\x0a\x24\x61\x37\x35\x32\x32\x31\x35\x38\x2d\x33\x64\x34\x31\x2d\x34\x62\x37\x37\x2d\x61\x64\x36\x39\x2d\x36\x63\x35\x39\x38\x65\x65\x35\x35\x63\x34\x39\x12\x04\x49\x76\x61\x6e\x1a\x06\x50\x65\x74\x72\x6f\x76\x20\x01\x28\xaf\x1f\x32\x03\x70\x6e\x67\x3a\x0c\x2b\x37\x34\x39\x35\x31\x32\x33\x34\x35\x36\x37\x40\x01\x4d\xfc\xd0\x30\x5c\x50\x26\x58\x09\x62\x09\x59\x65\x73\x74\x65\x72\x64\x61\x79\x62\x07\x46\x6c\x6f\x77\x65\x72\x73\x6a\x04\xff\x01\x00\x00\x72\x06\x4d\x6f\x73\x63\x6f\x77\x7a\x08\x4b\x03\x5f\x42\x72\x7d\x16\x42\x81\x01\x1f\x85\xeb\x51\xb8\x1e\x09\x40\x89\x01\x33\x33\x33\x33\x33\xc3\x6a\x40\x95\x01\xcd\xcc\xcc\x3d\x9d\x01\x9a\x99\xb9\x40\xa0\x01\x80\xc4\xd7\x8d\x7f\xaa\x01\x0c\x0a\x05\x6d\x65\x74\x65\x72\x15\x00\x00\x80\x3f\xaa\x01\x11\x0a\x0a\x63\x65\x6e\x74\x69\x6d\x65\x74\x65\x72\x15\x0a\xd7\x23\x3c\xaa\x01\x10\x0a\x09\x6b\x69\x6c\x6f\x6d\x65\x74\x65\x72\x15\x00\x00\x7a\x44\xb2\x01\x10\x0a\x0e\xa2\x06\x0b\x0a\x09\x08\xf4\x03\x12\x04\xf5\x03\xf6\x03\x7e\x0a\x24\x63\x36\x39\x34\x61\x64\x38\x61\x2d\x66\x37\x31\x34\x2d\x34\x65\x61\x33\x2d\x39\x30\x37\x64\x2d\x66\x64\x35\x34\x66\x62\x32\x35\x64\x39\x62\x35\x12\x07\x4e\x61\x74\x61\x6c\x69\x61\x1a\x08\x53\x6f\x6b\x6f\x6c\x6f\x76\x61\x28\xa6\x3f\x32\x03\x6a\x70\x67\x50\x1a\x58\x0b\x6a\x04\x64\xc8\x01\x32\x72\x08\x50\x6c\x79\x6d\x6f\x75\x74\x68\x7a\x08\x6a\x9d\x49\x42\x46\x8c\x84\xc0\x81\x01\x6e\x86\x1b\xf0\xf9\x21\x09\x40\x95\x01\x42\x60\xe5\x3b\x9d\x01\xcd\xcc\xac\x40\xa0\x01\xff\xff\xa9\xce\x93\x8c\x09\xc0\x01\x0a\x24\x61\x37\x64\x61\x31\x61\x61\x36\x2d\x66\x34\x32\x35\x2d\x34\x37\x38\x39\x2d\x38\x39\x34\x37\x2d\x62\x30\x33\x34\x37\x38\x36\x65\x64\x33\x37\x34\x12\x06\x56\x61\x73\x69\x6c\x79\x1a\x07\x53\x69\x64\x6f\x72\x6f\x76\x20\x01\x28\xfb\x48\x32\x03\x62\x6d\x70\x3a\x0d\x2b\x34\x34\x32\x30\x31\x32\x33\x34\x35\x36\x37\x38\x40\x01\x4d\x50\xe0\x27\x5c\x50\x17\x58\x04\x62\x05\x53\x75\x6e\x6e\x79\x6a\x05\xfa\x01\xf4\x01\x0a\x72\x08\x4d\x75\x72\x6d\x61\x6e\x73\x6b\x7a\x08\xfd\xf0\x89\x42\xc8\x4c\x04\x42\x81\x01\x11\x2d\x44\x54\xfb\x21\x09\x40\x89\x01\x00\x00\x00\xe8\x76\x48\x37\x42\x95\x01\x00\x00\x48\x44\x9d\x01\xcd\xcc\x4c\xc0\xa0\x01\x80\xd4\x9f\x93\x01\xaa\x01\x0c\x0a\x05\x70\x6f\x75\x6e\x64\x15\x00\x00\x80\x41\xb2\x01\x0a\x0a\x08\xa2\x06\x05\x0a\x03\x08\xf7\x03' | $CLICKHOUSE_CLIENT --query="INSERT INTO table_00825 FORMAT Protobuf SETTINGS format_schema = '$CURDIR/00825_protobuf_format:Person'" +echo -ne '\xb3\x01\x12\x05\x46\x72\x69\x64\x61\x28\x99\xe1\xf3\xd1\x0b\x52\x08\x45\x72\x6d\x61\x6b\x6f\x76\x61\x72\x0c\x00\x00\xdc\x42\x00\x00\x52\x43\x00\x00\x94\x42\x79\x48\xce\x3d\x51\x00\x00\x00\x00\xc8\x02\x14\xc2\x05\x08\x00\x00\x80\x44\x00\x00\x80\x49\x9a\x06\x02\x4b\x42\x9a\x06\x02\x4d\x42\xa1\x06\x00\x00\x00\x00\x00\x00\xe0\x3f\xa8\x06\x2a\xa8\x06\xa8\xff\xff\xff\xff\xff\xff\xff\xff\x01\xb0\x06\x01\xbd\x06\x25\x06\x49\x40\xfa\x06\x02\x34\x30\x90\x08\xe2\x08\xe1\x08\x89\xe6\x6e\xdd\x01\x00\x00\x00\xb0\x09\xc3\x19\xd0\x0c\xb7\x02\xe2\x12\x24\x32\x30\x66\x63\x64\x39\x35\x61\x2d\x33\x33\x32\x64\x2d\x34\x31\x64\x62\x2d\x61\x39\x65\x63\x2d\x31\x36\x31\x66\x36\x34\x34\x64\x30\x35\x39\x63\xa0\x38\xbc\x05\xaa\x38\x02\xbd\x05\xb4\x01\x08\x01\x12\x06\x49\x73\x6f\x6c\x64\x65\x52\x07\x4c\x61\x76\x72\x6f\x76\x61\x72\x0c\x00\x00\x7f\x43\x00\x00\x00\x00\x00\x00\x7f\x43\xaa\x01\x03\x61\x62\x63\xc8\x02\x32\xc2\x05\x08\x00\x00\x00\x41\x00\x00\x80\x3f\x9a\x06\x04\x42\x79\x74\x65\x9a\x06\x03\x42\x69\x74\xa1\x06\x00\x00\x00\x00\x00\x00\x12\x40\xa8\x06\x1a\xa8\x06\xb0\xff\xff\xff\xff\xff\xff\xff\xff\x01\xb0\x06\x01\xbd\x06\xf9\x0f\x49\x40\xc2\x06\x01\x2c\xfa\x06\x02\x33\x32\x90\x08\x78\xe1\x08\x39\x4e\x2b\xfe\xe4\xf5\xff\xff\xb0\x09\xe8\x30\xd8\x12\x01\xe2\x12\x24\x37\x63\x66\x61\x36\x38\x35\x36\x2d\x61\x35\x34\x61\x2d\x34\x37\x38\x36\x2d\x62\x38\x65\x35\x2d\x37\x34\x35\x31\x35\x39\x64\x35\x32\x32\x37\x38\xa0\x38\xbe\x05\xc2\x3e\x05\x15\x00\x00\xb6\x42' | $CLICKHOUSE_CLIENT --query="INSERT INTO table_00825 FORMAT Protobuf SETTINGS format_schema = '$CURDIR/00825_protobuf_format:AltPerson'" +echo -ne '\xa5\x02\x0a\x24\x61\x61\x30\x65\x35\x61\x30\x36\x2d\x63\x61\x62\x32\x2d\x34\x30\x33\x34\x2d\x61\x36\x61\x32\x2d\x34\x38\x65\x38\x32\x62\x39\x31\x36\x36\x34\x65\x12\x06\x4c\x65\x6f\x6e\x69\x64\x1a\x08\x4b\x69\x72\x69\x6c\x6c\x6f\x76\x22\x04\x6d\x61\x6c\x65\x2a\x0a\x31\x39\x38\x33\x2d\x30\x36\x2d\x32\x34\x3a\x0c\x2b\x37\x34\x39\x35\x30\x32\x37\x35\x38\x36\x34\x42\x01\x31\x4a\x13\x32\x30\x31\x39\x2d\x30\x32\x2d\x30\x34\x20\x30\x39\x3a\x34\x35\x3a\x30\x30\x52\x02\x33\x35\x5a\x06\x63\x61\x6e\x63\x65\x72\x62\x07\x37\x20\x72\x69\x6e\x67\x73\x62\x08\x45\x61\x73\x74\x73\x69\x64\x65\x62\x0b\x4c\x61\x73\x74\x20\x48\x75\x72\x72\x61\x68\x6a\x01\x30\x6a\x01\x30\x6a\x03\x32\x35\x35\x72\x09\x53\x61\x6e\x20\x44\x69\x65\x67\x6f\x7a\x09\x33\x32\x2e\x38\x32\x33\x39\x34\x33\x7a\x0b\x2d\x31\x31\x37\x2e\x30\x38\x31\x33\x32\x37\x82\x01\x09\x33\x2e\x31\x34\x31\x35\x39\x32\x37\x8a\x01\x08\x31\x35\x30\x30\x30\x30\x30\x30\x92\x01\x06\x31\x38\x36\x2e\x37\x35\x9a\x01\x04\x2d\x32\x2e\x31\xa2\x01\x0b\x32\x30\x36\x35\x39\x38\x32\x39\x33\x33\x31\xaa\x01\x18\x0a\x06\x6d\x69\x6e\x75\x74\x65\x0a\x04\x68\x6f\x75\x72\x12\x02\x36\x30\x12\x04\x33\x36\x30\x30\xb2\x01\x08\x0a\x06\x12\x04\x31\x38\x30\x30' | $CLICKHOUSE_CLIENT --query="INSERT INTO table_00825 FORMAT Protobuf SETTINGS format_schema = '$CURDIR/00825_protobuf_format:StrPerson'" +echo -ne '\xdd\x01\x0a\x24\x33\x66\x61\x65\x65\x30\x36\x34\x2d\x63\x34\x66\x37\x2d\x34\x64\x33\x34\x2d\x62\x36\x66\x33\x2d\x38\x64\x38\x31\x63\x32\x62\x36\x61\x31\x35\x64\x12\x04\x4e\x69\x63\x6b\x1a\x0a\x4b\x6f\x6c\x65\x73\x6e\x69\x6b\x6f\x76\x20\x01\x28\xda\x52\x32\x03\x62\x6d\x70\x3a\x0c\x34\x31\x32\x2d\x36\x38\x37\x2d\x35\x30\x30\x37\x40\x01\x4d\x2f\x27\xf2\x5b\x50\x14\x58\x09\x62\x06\x48\x61\x76\x61\x6e\x61\x68\x80\x01\x68\x00\x68\x80\x01\x72\x0a\x50\x69\x74\x74\x73\x62\x75\x72\x67\x68\x7a\x08\x9b\x11\x22\x42\x1f\xe6\x9f\xc2\x81\x01\x28\x2d\x44\x54\xfb\x21\x09\x40\x89\x01\x00\x00\x00\xe8\x76\x48\x27\x42\x95\x01\x00\x00\x43\x44\x9d\x01\x66\x66\x92\x41\xa0\x01\xce\xdf\xb8\xba\x01\xab\x01\x0d\xcd\xcc\xe2\x41\x0d\xcd\xcc\x4c\x3e\x0d\x00\x00\x80\x3f\x12\x05\x6f\x75\x6e\x63\x65\x12\x05\x63\x61\x72\x61\x74\x12\x04\x67\x72\x61\x6d\xac\x01\xb3\x01\x0b\xa2\x06\x05\x0b\x08\x96\x4a\x0c\x0c\xb4\x01' | $CLICKHOUSE_CLIENT --query="INSERT INTO table_00825 FORMAT Protobuf SETTINGS format_schema = '$CURDIR/00825_protobuf_format_syntax2:Syntax2Person'" diff --git a/dbms/tests/queries/0_stateless/00825_protobuf_format_input.sh b/dbms/tests/queries/0_stateless/00825_protobuf_format_input.sh index 87d90261042..beffbca12f9 100755 --- a/dbms/tests/queries/0_stateless/00825_protobuf_format_input.sh +++ b/dbms/tests/queries/0_stateless/00825_protobuf_format_input.sh @@ -7,10 +7,9 @@ set -e -o pipefail # Run the client. $CLICKHOUSE_CLIENT --multiquery <<'EOF' -CREATE DATABASE IF NOT EXISTS test; -DROP TABLE IF EXISTS test.table; +DROP TABLE IF EXISTS table_00825; -CREATE TABLE test.table (uuid UUID, +CREATE TABLE table_00825 (uuid UUID, name String, surname String, gender Enum8('male'=1, 'female'=0), @@ -43,4 +42,4 @@ EOF # build/utils/test-data-generator/ProtobufDelimitedMessagesSerializer source $CURDIR/00825_protobuf_format_input.insh -$CLICKHOUSE_CLIENT --query "SELECT * FROM test.table ORDER BY uuid;" +$CLICKHOUSE_CLIENT --query "SELECT * FROM table_00825 ORDER BY uuid;" diff --git a/dbms/tests/queries/0_stateless/00825_protobuf_format_output.sh b/dbms/tests/queries/0_stateless/00825_protobuf_format_output.sh index 1f1717a6f1a..979bb3d878d 100755 --- a/dbms/tests/queries/0_stateless/00825_protobuf_format_output.sh +++ b/dbms/tests/queries/0_stateless/00825_protobuf_format_output.sh @@ -11,10 +11,9 @@ set -e -o pipefail # Run the client. $CLICKHOUSE_CLIENT --multiquery <'; -SELECT * FROM test.table ORDER BY name FORMAT Protobuf SETTINGS format_schema = '$CURDIR/00825_protobuf_format:AltPerson'; +SELECT * FROM table_00825 ORDER BY name FORMAT Protobuf SETTINGS format_schema = '$CURDIR/00825_protobuf_format:AltPerson'; SELECT 'STRINGS->'; -SELECT * FROM test.table ORDER BY name FORMAT Protobuf SETTINGS format_schema = '$CURDIR/00825_protobuf_format:StrPerson'; +SELECT * FROM table_00825 ORDER BY name FORMAT Protobuf SETTINGS format_schema = '$CURDIR/00825_protobuf_format:StrPerson'; SELECT 'SYNTAX2->'; -SELECT * FROM test.table ORDER BY name FORMAT Protobuf SETTINGS format_schema = '$CURDIR/00825_protobuf_format_syntax2:Syntax2Person'; +SELECT * FROM table_00825 ORDER BY name FORMAT Protobuf SETTINGS format_schema = '$CURDIR/00825_protobuf_format_syntax2:Syntax2Person'; EOF diff --git a/dbms/tests/queries/0_stateless/00826_cross_to_inner_join.sql b/dbms/tests/queries/0_stateless/00826_cross_to_inner_join.sql index b84cb268107..d25f33db559 100644 --- a/dbms/tests/queries/0_stateless/00826_cross_to_inner_join.sql +++ b/dbms/tests/queries/0_stateless/00826_cross_to_inner_join.sql @@ -1,5 +1,4 @@ SET enable_debug_queries = 1; -USE test; set allow_experimental_cross_to_join_conversion = 0; select * from system.one cross join system.one; diff --git a/dbms/tests/queries/0_stateless/00829_bitmap_function.sql b/dbms/tests/queries/0_stateless/00829_bitmap_function.sql index 55f920c8c55..9013b53d99e 100644 --- a/dbms/tests/queries/0_stateless/00829_bitmap_function.sql +++ b/dbms/tests/queries/0_stateless/00829_bitmap_function.sql @@ -9,15 +9,15 @@ SELECT bitmapOrCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])); SELECT bitmapXorCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])); SELECT bitmapAndnotCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])); -DROP TABLE IF EXISTS test.bitmap_test; -CREATE TABLE test.bitmap_test(pickup_date Date, city_id UInt32, uid UInt32)ENGINE = Memory; -INSERT INTO test.bitmap_test SELECT '2019-01-01', 1, number FROM numbers(1,50); -INSERT INTO test.bitmap_test SELECT '2019-01-02', 1, number FROM numbers(11,60); +DROP TABLE IF EXISTS bitmap_test; +CREATE TABLE bitmap_test(pickup_date Date, city_id UInt32, uid UInt32)ENGINE = Memory; +INSERT INTO bitmap_test SELECT '2019-01-01', 1, number FROM numbers(1,50); +INSERT INTO bitmap_test SELECT '2019-01-02', 1, number FROM numbers(11,60); -SELECT groupBitmap( uid ) AS user_num FROM test.bitmap_test; +SELECT groupBitmap( uid ) AS user_num FROM bitmap_test; -SELECT pickup_date, groupBitmap( uid ) AS user_num, bitmapToArray(groupBitmapState( uid )) AS users FROM test.bitmap_test GROUP BY pickup_date; +SELECT pickup_date, groupBitmap( uid ) AS user_num, bitmapToArray(groupBitmapState( uid )) AS users FROM bitmap_test GROUP BY pickup_date; SELECT bitmapCardinality(day_today) AS today_users, @@ -28,11 +28,11 @@ SELECT bitmapXorCardinality(day_today, day_before) AS diff_users FROM ( - SELECT city_id, groupBitmapState( uid ) AS day_today FROM test.bitmap_test WHERE pickup_date = '2019-01-02' GROUP BY city_id + SELECT city_id, groupBitmapState( uid ) AS day_today FROM bitmap_test WHERE pickup_date = '2019-01-02' GROUP BY city_id ) ALL LEFT JOIN ( - SELECT city_id, groupBitmapState( uid ) AS day_before FROM test.bitmap_test WHERE pickup_date = '2019-01-01' GROUP BY city_id + SELECT city_id, groupBitmapState( uid ) AS day_before FROM bitmap_test WHERE pickup_date = '2019-01-01' GROUP BY city_id ) USING city_id; @@ -45,17 +45,17 @@ SELECT bitmapCardinality(bitmapXor(day_today, day_before)) AS diff_users FROM ( - SELECT city_id, groupBitmapState( uid ) AS day_today FROM test.bitmap_test WHERE pickup_date = '2019-01-02' GROUP BY city_id + SELECT city_id, groupBitmapState( uid ) AS day_today FROM bitmap_test WHERE pickup_date = '2019-01-02' GROUP BY city_id ) ALL LEFT JOIN ( - SELECT city_id, groupBitmapState( uid ) AS day_before FROM test.bitmap_test WHERE pickup_date = '2019-01-01' GROUP BY city_id + SELECT city_id, groupBitmapState( uid ) AS day_before FROM bitmap_test WHERE pickup_date = '2019-01-01' GROUP BY city_id ) USING city_id; -DROP TABLE IF EXISTS test.bitmap_state_test; -CREATE TABLE test.bitmap_state_test +DROP TABLE IF EXISTS bitmap_state_test; +CREATE TABLE bitmap_state_test ( pickup_date Date, city_id UInt32, @@ -63,15 +63,15 @@ CREATE TABLE test.bitmap_state_test ) ENGINE = AggregatingMergeTree( pickup_date, ( pickup_date, city_id ), 8192); -INSERT INTO test.bitmap_state_test SELECT +INSERT INTO bitmap_state_test SELECT pickup_date, city_id, groupBitmapState(uid) AS uv -FROM test.bitmap_test +FROM bitmap_test GROUP BY pickup_date, city_id; -SELECT pickup_date, groupBitmapMerge(uv) AS users from test.bitmap_state_test group by pickup_date; +SELECT pickup_date, groupBitmapMerge(uv) AS users from bitmap_state_test group by pickup_date; -DROP TABLE IF EXISTS test.bitmap_test; -DROP TABLE IF EXISTS test.bitmap_state_test; +DROP TABLE IF EXISTS bitmap_test; +DROP TABLE IF EXISTS bitmap_state_test; diff --git a/dbms/tests/queries/0_stateless/00830_join_overwrite.sql b/dbms/tests/queries/0_stateless/00830_join_overwrite.sql index d6fca471746..cb7e277906b 100644 --- a/dbms/tests/queries/0_stateless/00830_join_overwrite.sql +++ b/dbms/tests/queries/0_stateless/00830_join_overwrite.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS kv; CREATE TABLE kv (k UInt32, v UInt32) ENGINE Join(Any, Left, k); diff --git a/dbms/tests/queries/0_stateless/00832_storage_file_lock.sql b/dbms/tests/queries/0_stateless/00832_storage_file_lock.sql index a3aeee110b0..808d591d351 100644 --- a/dbms/tests/queries/0_stateless/00832_storage_file_lock.sql +++ b/dbms/tests/queries/0_stateless/00832_storage_file_lock.sql @@ -1,6 +1,6 @@ -DROP TABLE IF EXISTS test.file; -CREATE TABLE test.file (number UInt64) ENGINE = File(TSV); -SELECT * FROM test.file; -- { serverError 107 } -INSERT INTO test.file VALUES (1); -SELECT * FROM test.file; -DROP TABLE test.file; +DROP TABLE IF EXISTS file; +CREATE TABLE file (number UInt64) ENGINE = File(TSV); +SELECT * FROM file; -- { serverError 107 } +INSERT INTO file VALUES (1); +SELECT * FROM file; +DROP TABLE file; diff --git a/dbms/tests/queries/0_stateless/00834_hints_for_type_function_typos.sh b/dbms/tests/queries/0_stateless/00834_hints_for_type_function_typos.sh index 5a1b813ecb1..92478119fe0 100755 --- a/dbms/tests/queries/0_stateless/00834_hints_for_type_function_typos.sh +++ b/dbms/tests/queries/0_stateless/00834_hints_for_type_function_typos.sh @@ -25,5 +25,5 @@ $CLICKHOUSE_CLIENT -q "select * FROM numberss(10);" 2>&1 | grep "Maybe you meant $CLICKHOUSE_CLIENT -q "select * FROM anothernumbers(10);" 2>&1 | grep -v "Maybe you meant: \['numbers'\]." &>/dev/null $CLICKHOUSE_CLIENT -q "select * FROM mynumbers(10);" 2>&1 | grep "Maybe you meant: \['numbers'\]." &>/dev/null -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.stored_aggregates (d Date, Uniq AggregateFunction(uniq, UInt64)) ENGINE = MergeTre(d, d, 8192);" 2>&1 | grep "Maybe you meant: \['MergeTree'\]." &>/dev/null -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.stored_aggregates (d Date, Uniq AgregateFunction(uniq, UInt64)) ENGINE = MergeTree(d, d, 8192);" 2>&1 | grep "Maybe you meant: \['AggregateFunction'\]." &>/dev/null +$CLICKHOUSE_CLIENT -q "CREATE TABLE stored_aggregates (d Date, Uniq AggregateFunction(uniq, UInt64)) ENGINE = MergeTre(d, d, 8192);" 2>&1 | grep "Maybe you meant: \['MergeTree'\]." &>/dev/null +$CLICKHOUSE_CLIENT -q "CREATE TABLE stored_aggregates (d Date, Uniq AgregateFunction(uniq, UInt64)) ENGINE = MergeTree(d, d, 8192);" 2>&1 | grep "Maybe you meant: \['AggregateFunction'\]." &>/dev/null diff --git a/dbms/tests/queries/0_stateless/00834_kill_mutation.sh b/dbms/tests/queries/0_stateless/00834_kill_mutation.sh index d70963db8e2..8c604ef8fac 100755 --- a/dbms/tests/queries/0_stateless/00834_kill_mutation.sh +++ b/dbms/tests/queries/0_stateless/00834_kill_mutation.sh @@ -5,38 +5,38 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/mergetree_mutations.lib -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.kill_mutation" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS kill_mutation" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.kill_mutation(d Date, x UInt32, s String) ENGINE MergeTree ORDER BY x PARTITION BY d" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE kill_mutation(d Date, x UInt32, s String) ENGINE MergeTree ORDER BY x PARTITION BY d" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.kill_mutation VALUES ('2000-01-01', 1, 'a')" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.kill_mutation VALUES ('2001-01-01', 2, 'b')" +${CLICKHOUSE_CLIENT} --query="INSERT INTO kill_mutation VALUES ('2000-01-01', 1, 'a')" +${CLICKHOUSE_CLIENT} --query="INSERT INTO kill_mutation VALUES ('2001-01-01', 2, 'b')" ${CLICKHOUSE_CLIENT} --query="SELECT '*** Create and kill a single invalid mutation ***'" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.kill_mutation DELETE WHERE toUInt32(s) = 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE kill_mutation DELETE WHERE toUInt32(s) = 1" sleep 0.1 -${CLICKHOUSE_CLIENT} --query="SELECT mutation_id, latest_failed_part IN ('20000101_1_1_0', '20010101_2_2_0'), latest_fail_time != 0, substr(latest_fail_reason, 1, 8) FROM system.mutations WHERE database = 'test' AND table = 'kill_mutation'" +${CLICKHOUSE_CLIENT} --query="SELECT mutation_id, latest_failed_part IN ('20000101_1_1_0', '20010101_2_2_0'), latest_fail_time != 0, substr(latest_fail_reason, 1, 8) FROM system.mutations WHERE database = '${CLICKHOUSE_DATABASE}' AND table = 'kill_mutation'" -${CLICKHOUSE_CLIENT} --query="KILL MUTATION WHERE database = 'test' AND table = 'kill_mutation'" +${CLICKHOUSE_CLIENT} --query="KILL MUTATION WHERE database = '${CLICKHOUSE_DATABASE}' AND table = 'kill_mutation'" -${CLICKHOUSE_CLIENT} --query="SELECT mutation_id FROM system.mutations WHERE database = 'test' AND table = 'kill_mutation'" +${CLICKHOUSE_CLIENT} --query="SELECT mutation_id FROM system.mutations WHERE database = '${CLICKHOUSE_DATABASE}' AND table = 'kill_mutation'" ${CLICKHOUSE_CLIENT} --query="SELECT '*** Create and kill invalid mutation that blocks another mutation ***'" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.kill_mutation DELETE WHERE toUInt32(s) = 1" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.kill_mutation DELETE WHERE x = 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE kill_mutation DELETE WHERE toUInt32(s) = 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE kill_mutation DELETE WHERE x = 1" -${CLICKHOUSE_CLIENT} --query="SELECT mutation_id, latest_failed_part IN ('20000101_1_1_0', '20010101_2_2_0'), latest_fail_time != 0, substr(latest_fail_reason, 1, 8) FROM system.mutations WHERE database = 'test' AND table = 'kill_mutation' AND mutation_id = 'mutation_4.txt'" +${CLICKHOUSE_CLIENT} --query="SELECT mutation_id, latest_failed_part IN ('20000101_1_1_0', '20010101_2_2_0'), latest_fail_time != 0, substr(latest_fail_reason, 1, 8) FROM system.mutations WHERE database = '${CLICKHOUSE_DATABASE}' AND table = 'kill_mutation' AND mutation_id = 'mutation_4.txt'" sleep 0.1 -${CLICKHOUSE_CLIENT} --query="KILL MUTATION WHERE database = 'test' AND table = 'kill_mutation' AND mutation_id = 'mutation_4.txt'" +${CLICKHOUSE_CLIENT} --query="KILL MUTATION WHERE database = '${CLICKHOUSE_DATABASE}' AND table = 'kill_mutation' AND mutation_id = 'mutation_4.txt'" wait_for_mutation "kill_mutation" "mutation_5.txt" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.kill_mutation" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM kill_mutation" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.kill_mutation" +${CLICKHOUSE_CLIENT} --query="DROP TABLE kill_mutation" diff --git a/dbms/tests/queries/0_stateless/00834_kill_mutation_replicated_zookeeper.sh b/dbms/tests/queries/0_stateless/00834_kill_mutation_replicated_zookeeper.sh index dfaa85f2f2b..6322ce9e3ba 100755 --- a/dbms/tests/queries/0_stateless/00834_kill_mutation_replicated_zookeeper.sh +++ b/dbms/tests/queries/0_stateless/00834_kill_mutation_replicated_zookeeper.sh @@ -5,43 +5,43 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/mergetree_mutations.lib -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.kill_mutation_r1" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.kill_mutation_r2" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS kill_mutation_r1" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS kill_mutation_r2" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.kill_mutation_r1(d Date, x UInt32, s String) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/kill_mutation', '1') ORDER BY x PARTITION BY d" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.kill_mutation_r2(d Date, x UInt32, s String) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/kill_mutation', '2') ORDER BY x PARTITION BY d" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE kill_mutation_r1(d Date, x UInt32, s String) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/kill_mutation', '1') ORDER BY x PARTITION BY d" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE kill_mutation_r2(d Date, x UInt32, s String) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/kill_mutation', '2') ORDER BY x PARTITION BY d" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.kill_mutation_r1 VALUES ('2000-01-01', 1, 'a')" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.kill_mutation_r1 VALUES ('2001-01-01', 2, 'b')" +${CLICKHOUSE_CLIENT} --query="INSERT INTO kill_mutation_r1 VALUES ('2000-01-01', 1, 'a')" +${CLICKHOUSE_CLIENT} --query="INSERT INTO kill_mutation_r1 VALUES ('2001-01-01', 2, 'b')" ${CLICKHOUSE_CLIENT} --query="SELECT '*** Create and kill a single invalid mutation ***'" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.kill_mutation_r1 DELETE WHERE toUInt32(s) = 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE kill_mutation_r1 DELETE WHERE toUInt32(s) = 1" sleep 1 -${CLICKHOUSE_CLIENT} --query="SELECT mutation_id, latest_failed_part IN ('20000101_0_0_0', '20010101_0_0_0'), latest_fail_time != 0, substr(latest_fail_reason, 1, 8) FROM system.mutations WHERE database = 'test' AND table = 'kill_mutation_r1'" +${CLICKHOUSE_CLIENT} --query="SELECT mutation_id, latest_failed_part IN ('20000101_0_0_0', '20010101_0_0_0'), latest_fail_time != 0, substr(latest_fail_reason, 1, 8) FROM system.mutations WHERE database = '${CLICKHOUSE_DATABASE}' AND table = 'kill_mutation_r1'" -${CLICKHOUSE_CLIENT} --query="KILL MUTATION WHERE database = 'test' AND table = 'kill_mutation_r1'" +${CLICKHOUSE_CLIENT} --query="KILL MUTATION WHERE database = '${CLICKHOUSE_DATABASE}' AND table = 'kill_mutation_r1'" -${CLICKHOUSE_CLIENT} --query="SELECT mutation_id FROM system.mutations WHERE database = 'test' AND table = 'kill_mutation_r1'" +${CLICKHOUSE_CLIENT} --query="SELECT mutation_id FROM system.mutations WHERE database = '${CLICKHOUSE_DATABASE}' AND table = 'kill_mutation_r1'" ${CLICKHOUSE_CLIENT} --query="SELECT '*** Create and kill invalid mutation that blocks another mutation ***'" -${CLICKHOUSE_CLIENT} --query="SYSTEM SYNC REPLICA test.kill_mutation_r1" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.kill_mutation_r1 DELETE WHERE toUInt32(s) = 1" -${CLICKHOUSE_CLIENT} --query="ALTER TABLE test.kill_mutation_r1 DELETE WHERE x = 1" +${CLICKHOUSE_CLIENT} --query="SYSTEM SYNC REPLICA kill_mutation_r1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE kill_mutation_r1 DELETE WHERE toUInt32(s) = 1" +${CLICKHOUSE_CLIENT} --query="ALTER TABLE kill_mutation_r1 DELETE WHERE x = 1" sleep 1 -${CLICKHOUSE_CLIENT} --query="SELECT mutation_id, latest_failed_part IN ('20000101_0_0_0_1', '20010101_0_0_0_1'), latest_fail_time != 0, substr(latest_fail_reason, 1, 8) FROM system.mutations WHERE database = 'test' AND table = 'kill_mutation_r1' AND mutation_id = '0000000001'" +${CLICKHOUSE_CLIENT} --query="SELECT mutation_id, latest_failed_part IN ('20000101_0_0_0_1', '20010101_0_0_0_1'), latest_fail_time != 0, substr(latest_fail_reason, 1, 8) FROM system.mutations WHERE database = '${CLICKHOUSE_DATABASE}' AND table = 'kill_mutation_r1' AND mutation_id = '0000000001'" -${CLICKHOUSE_CLIENT} --query="KILL MUTATION WHERE database = 'test' AND table = 'kill_mutation_r1' AND mutation_id = '0000000001'" +${CLICKHOUSE_CLIENT} --query="KILL MUTATION WHERE database = '${CLICKHOUSE_DATABASE}' AND table = 'kill_mutation_r1' AND mutation_id = '0000000001'" wait_for_mutation "kill_mutation_r2" "0000000002" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.kill_mutation_r2" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM kill_mutation_r2" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.kill_mutation_r1" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.kill_mutation_r2" +${CLICKHOUSE_CLIENT} --query="DROP TABLE kill_mutation_r1" +${CLICKHOUSE_CLIENT} --query="DROP TABLE kill_mutation_r2" diff --git a/dbms/tests/queries/0_stateless/00837_insert_select_and_read_prefix.sql b/dbms/tests/queries/0_stateless/00837_insert_select_and_read_prefix.sql index 576192e9d47..5fc8b60b145 100644 --- a/dbms/tests/queries/0_stateless/00837_insert_select_and_read_prefix.sql +++ b/dbms/tests/queries/0_stateless/00837_insert_select_and_read_prefix.sql @@ -1,10 +1,10 @@ -DROP TABLE IF EXISTS test.file; -CREATE TABLE test.file (s String, n UInt32) ENGINE = File(CSVWithNames); +DROP TABLE IF EXISTS file; +CREATE TABLE file (s String, n UInt32) ENGINE = File(CSVWithNames); -- BTW, WithNames formats are totally unsuitable for more than a single INSERT -INSERT INTO test.file VALUES ('hello', 1), ('world', 2); +INSERT INTO file VALUES ('hello', 1), ('world', 2); -SELECT * FROM test.file; -CREATE TEMPORARY TABLE file2 AS SELECT * FROM test.file; +SELECT * FROM file; +CREATE TEMPORARY TABLE file2 AS SELECT * FROM file; SELECT * FROM file2; -DROP TABLE test.file; +DROP TABLE file; diff --git a/dbms/tests/queries/0_stateless/00837_minmax_index.sh b/dbms/tests/queries/0_stateless/00837_minmax_index.sh index 67686475970..210e36603b5 100755 --- a/dbms/tests/queries/0_stateless/00837_minmax_index.sh +++ b/dbms/tests/queries/0_stateless/00837_minmax_index.sh @@ -5,12 +5,12 @@ CLICKHOUSE_CLIENT_OPT="--allow_experimental_data_skipping_indices=1" CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.minmax_idx;" +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS minmax_idx;" $CLICKHOUSE_CLIENT -n --query=" SET allow_experimental_data_skipping_indices = 1; -CREATE TABLE test.minmax_idx +CREATE TABLE minmax_idx ( u64 UInt64, i32 Int32, @@ -27,7 +27,7 @@ ORDER BY u64 SETTINGS index_granularity = 2;" -$CLICKHOUSE_CLIENT --query="INSERT INTO test.minmax_idx VALUES +$CLICKHOUSE_CLIENT --query="INSERT INTO minmax_idx VALUES (0, 5, 4.7, 6.5, 'cba', 'b', '2014-01-04'), (1, 5, 4.7, 6.5, 'cba', 'b', '2014-03-11'), (2, 2, 4.5, 2.5, 'abc', 'a', '2014-01-01'), @@ -42,11 +42,11 @@ $CLICKHOUSE_CLIENT --query="INSERT INTO test.minmax_idx VALUES (12, 5, 4.7, 6.5, 'cba', 'b', '2015-01-01')" # simple select -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.minmax_idx WHERE i32 = 5 AND i32 + f64 < 12 AND 3 < d AND d < 7 AND (s = 'bac' OR s = 'cba') ORDER BY dt" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.minmax_idx WHERE i32 = 5 AND i32 + f64 < 12 AND 3 < d AND d < 7 AND (s = 'bac' OR s = 'cba') ORDER BY dt FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM minmax_idx WHERE i32 = 5 AND i32 + f64 < 12 AND 3 < d AND d < 7 AND (s = 'bac' OR s = 'cba') ORDER BY dt" +$CLICKHOUSE_CLIENT --query="SELECT * FROM minmax_idx WHERE i32 = 5 AND i32 + f64 < 12 AND 3 < d AND d < 7 AND (s = 'bac' OR s = 'cba') ORDER BY dt FORMAT JSON" | grep "rows_read" # select with hole made by primary key -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.minmax_idx WHERE (u64 < 2 OR u64 > 10) AND e != 'b' ORDER BY dt" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.minmax_idx WHERE (u64 < 2 OR u64 > 10) AND e != 'b' ORDER BY dt FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM minmax_idx WHERE (u64 < 2 OR u64 > 10) AND e != 'b' ORDER BY dt" +$CLICKHOUSE_CLIENT --query="SELECT * FROM minmax_idx WHERE (u64 < 2 OR u64 > 10) AND e != 'b' ORDER BY dt FORMAT JSON" | grep "rows_read" -$CLICKHOUSE_CLIENT --query="DROP TABLE test.minmax_idx" \ No newline at end of file +$CLICKHOUSE_CLIENT --query="DROP TABLE minmax_idx" \ No newline at end of file diff --git a/dbms/tests/queries/0_stateless/00837_minmax_index_replicated_zookeeper.sql b/dbms/tests/queries/0_stateless/00837_minmax_index_replicated_zookeeper.sql index ceb361170f3..6c4d2b95a8e 100644 --- a/dbms/tests/queries/0_stateless/00837_minmax_index_replicated_zookeeper.sql +++ b/dbms/tests/queries/0_stateless/00837_minmax_index_replicated_zookeeper.sql @@ -1,9 +1,9 @@ -DROP TABLE IF EXISTS test.minmax_idx1; -DROP TABLE IF EXISTS test.minmax_idx2; +DROP TABLE IF EXISTS minmax_idx1; +DROP TABLE IF EXISTS minmax_idx2; SET allow_experimental_data_skipping_indices = 1; -CREATE TABLE test.minmax_idx1 +CREATE TABLE minmax_idx1 ( u64 UInt64, i32 Int32, @@ -20,7 +20,7 @@ CREATE TABLE test.minmax_idx1 ORDER BY u64 SETTINGS index_granularity = 2; -CREATE TABLE test.minmax_idx2 +CREATE TABLE minmax_idx2 ( u64 UInt64, i32 Int32, @@ -39,36 +39,36 @@ SETTINGS index_granularity = 2; /* many small inserts => table will make merges */ -INSERT INTO test.minmax_idx1 VALUES (2, 2, 4.5, 2.5, 'abc', 'a', '2014-01-01'); -INSERT INTO test.minmax_idx1 VALUES (0, 5, 4.7, 6.5, 'cba', 'b', '2014-01-04'); -INSERT INTO test.minmax_idx2 VALUES (3, 5, 6.9, 1.57, 'bac', 'c', '2017-01-01'); -INSERT INTO test.minmax_idx2 VALUES (4, 2, 4.5, 2.5, 'abc', 'a', '2016-01-01'); -INSERT INTO test.minmax_idx2 VALUES (13, 5, 4.7, 6.5, 'cba', 'b', '2015-01-01'); -INSERT INTO test.minmax_idx1 VALUES (5, 5, 6.9, 1.57, 'bac', 'c', '2014-11-11'); +INSERT INTO minmax_idx1 VALUES (2, 2, 4.5, 2.5, 'abc', 'a', '2014-01-01'); +INSERT INTO minmax_idx1 VALUES (0, 5, 4.7, 6.5, 'cba', 'b', '2014-01-04'); +INSERT INTO minmax_idx2 VALUES (3, 5, 6.9, 1.57, 'bac', 'c', '2017-01-01'); +INSERT INTO minmax_idx2 VALUES (4, 2, 4.5, 2.5, 'abc', 'a', '2016-01-01'); +INSERT INTO minmax_idx2 VALUES (13, 5, 4.7, 6.5, 'cba', 'b', '2015-01-01'); +INSERT INTO minmax_idx1 VALUES (5, 5, 6.9, 1.57, 'bac', 'c', '2014-11-11'); -SYSTEM SYNC REPLICA test.minmax_idx1; -SYSTEM SYNC REPLICA test.minmax_idx2; +SYSTEM SYNC REPLICA minmax_idx1; +SYSTEM SYNC REPLICA minmax_idx2; -INSERT INTO test.minmax_idx1 VALUES (6, 2, 4.5, 2.5, 'abc', 'a', '2014-02-11'); -INSERT INTO test.minmax_idx1 VALUES (1, 5, 4.7, 6.5, 'cba', 'b', '2014-03-11'); -INSERT INTO test.minmax_idx1 VALUES (7, 5, 6.9, 1.57, 'bac', 'c', '2014-04-11'); -INSERT INTO test.minmax_idx1 VALUES (8, 2, 4.5, 2.5, 'abc', 'a', '2014-05-11'); -INSERT INTO test.minmax_idx2 VALUES (12, 5, 4.7, 6.5, 'cba', 'b', '2014-06-11'); -INSERT INTO test.minmax_idx2 VALUES (9, 5, 6.9, 1.57, 'bac', 'c', '2014-07-11'); +INSERT INTO minmax_idx1 VALUES (6, 2, 4.5, 2.5, 'abc', 'a', '2014-02-11'); +INSERT INTO minmax_idx1 VALUES (1, 5, 4.7, 6.5, 'cba', 'b', '2014-03-11'); +INSERT INTO minmax_idx1 VALUES (7, 5, 6.9, 1.57, 'bac', 'c', '2014-04-11'); +INSERT INTO minmax_idx1 VALUES (8, 2, 4.5, 2.5, 'abc', 'a', '2014-05-11'); +INSERT INTO minmax_idx2 VALUES (12, 5, 4.7, 6.5, 'cba', 'b', '2014-06-11'); +INSERT INTO minmax_idx2 VALUES (9, 5, 6.9, 1.57, 'bac', 'c', '2014-07-11'); -SYSTEM SYNC REPLICA test.minmax_idx1; -SYSTEM SYNC REPLICA test.minmax_idx2; +SYSTEM SYNC REPLICA minmax_idx1; +SYSTEM SYNC REPLICA minmax_idx2; -OPTIMIZE TABLE test.minmax_idx1; -OPTIMIZE TABLE test.minmax_idx2; +OPTIMIZE TABLE minmax_idx1; +OPTIMIZE TABLE minmax_idx2; /* simple select */ -SELECT * FROM test.minmax_idx1 WHERE i32 = 5 AND i32 + f64 < 12 AND 3 < d AND d < 7 AND (s = 'bac' OR s = 'cba') ORDER BY dt; -SELECT * FROM test.minmax_idx2 WHERE i32 = 5 AND i32 + f64 < 12 AND 3 < d AND d < 7 AND (s = 'bac' OR s = 'cba') ORDER BY dt; +SELECT * FROM minmax_idx1 WHERE i32 = 5 AND i32 + f64 < 12 AND 3 < d AND d < 7 AND (s = 'bac' OR s = 'cba') ORDER BY dt; +SELECT * FROM minmax_idx2 WHERE i32 = 5 AND i32 + f64 < 12 AND 3 < d AND d < 7 AND (s = 'bac' OR s = 'cba') ORDER BY dt; /* select with hole made by primary key */ -SELECT * FROM test.minmax_idx1 WHERE (u64 < 2 OR u64 > 10) AND e != 'b' ORDER BY dt; -SELECT * FROM test.minmax_idx2 WHERE (u64 < 2 OR u64 > 10) AND e != 'b' ORDER BY dt; +SELECT * FROM minmax_idx1 WHERE (u64 < 2 OR u64 > 10) AND e != 'b' ORDER BY dt; +SELECT * FROM minmax_idx2 WHERE (u64 < 2 OR u64 > 10) AND e != 'b' ORDER BY dt; -DROP TABLE test.minmax_idx1; -DROP TABLE test.minmax_idx2; \ No newline at end of file +DROP TABLE minmax_idx1; +DROP TABLE minmax_idx2; \ No newline at end of file diff --git a/dbms/tests/queries/0_stateless/00838_system_tables_drop_table_race.sh b/dbms/tests/queries/0_stateless/00838_system_tables_drop_table_race.sh index 1bac2f7ff1c..06a6b8f7341 100755 --- a/dbms/tests/queries/0_stateless/00838_system_tables_drop_table_race.sh +++ b/dbms/tests/queries/0_stateless/00838_system_tables_drop_table_race.sh @@ -5,9 +5,9 @@ set -e CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.table" +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS table" -seq 1 100 | sed -r -e "s/.+/CREATE TABLE test.table (x UInt8) ENGINE = MergeTree ORDER BY x; DROP TABLE test.table;/" | $CLICKHOUSE_CLIENT -n & -seq 1 100 | sed -r -e "s/.+/SELECT * FROM system.tables WHERE database = 'test' LIMIT 1000000, 1;/" | $CLICKHOUSE_CLIENT -n & +seq 1 100 | sed -r -e "s/.+/CREATE TABLE table (x UInt8) ENGINE = MergeTree ORDER BY x; DROP TABLE table;/" | $CLICKHOUSE_CLIENT -n & +seq 1 100 | sed -r -e "s/.+/SELECT * FROM system.tables WHERE database = '${CLICKHOUSE_DATABASE}' LIMIT 1000000, 1;/" | $CLICKHOUSE_CLIENT -n & wait diff --git a/dbms/tests/queries/0_stateless/00838_unique_index.sh b/dbms/tests/queries/0_stateless/00838_unique_index.sh index c580eb21a9c..9445d6af98a 100755 --- a/dbms/tests/queries/0_stateless/00838_unique_index.sh +++ b/dbms/tests/queries/0_stateless/00838_unique_index.sh @@ -5,11 +5,11 @@ CLICKHOUSE_CLIENT_OPT="--allow_experimental_data_skipping_indices=1" CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.set_idx;" +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS set_idx;" $CLICKHOUSE_CLIENT -n --query=" SET allow_experimental_data_skipping_indices = 1; -CREATE TABLE test.set_idx +CREATE TABLE set_idx ( u64 UInt64, i32 Int32, @@ -25,7 +25,7 @@ CREATE TABLE test.set_idx ORDER BY u64 SETTINGS index_granularity = 2;" -$CLICKHOUSE_CLIENT --query="INSERT INTO test.set_idx VALUES +$CLICKHOUSE_CLIENT --query="INSERT INTO set_idx VALUES (0, 5, 4.7, 6.5, 'cba', 'b', '2014-01-04'), (1, 5, 4.7, 6.5, 'cba', 'b', '2014-03-11'), (2, 2, 4.5, 2.5, 'abc', 'a', '2014-01-01'), @@ -40,11 +40,11 @@ $CLICKHOUSE_CLIENT --query="INSERT INTO test.set_idx VALUES (13, 5, 4.7, 6.5, 'cba', 'b', '2015-01-01')" # simple select -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.set_idx WHERE i32 = 5 AND i32 + f64 < 12 AND 3 < d AND d < 7 AND (s = 'bac' OR s = 'cba') ORDER BY dt" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.set_idx WHERE i32 = 5 AND i32 + f64 < 12 AND 3 < d AND d < 7 AND (s = 'bac' OR s = 'cba') ORDER BY dt FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM set_idx WHERE i32 = 5 AND i32 + f64 < 12 AND 3 < d AND d < 7 AND (s = 'bac' OR s = 'cba') ORDER BY dt" +$CLICKHOUSE_CLIENT --query="SELECT * FROM set_idx WHERE i32 = 5 AND i32 + f64 < 12 AND 3 < d AND d < 7 AND (s = 'bac' OR s = 'cba') ORDER BY dt FORMAT JSON" | grep "rows_read" # select with hole made by primary key -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.set_idx WHERE (u64 < 2 OR u64 > 10) AND s != 'cba' ORDER BY dt" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.set_idx WHERE (u64 < 2 OR u64 > 10) AND s != 'cba' ORDER BY dt FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM set_idx WHERE (u64 < 2 OR u64 > 10) AND s != 'cba' ORDER BY dt" +$CLICKHOUSE_CLIENT --query="SELECT * FROM set_idx WHERE (u64 < 2 OR u64 > 10) AND s != 'cba' ORDER BY dt FORMAT JSON" | grep "rows_read" -$CLICKHOUSE_CLIENT --query="DROP TABLE test.set_idx;" \ No newline at end of file +$CLICKHOUSE_CLIENT --query="DROP TABLE set_idx;" \ No newline at end of file diff --git a/dbms/tests/queries/0_stateless/00840_long_concurrent_select_and_drop_deadlock.sh b/dbms/tests/queries/0_stateless/00840_long_concurrent_select_and_drop_deadlock.sh index 739ea6ba33c..eefa713cd6c 100755 --- a/dbms/tests/queries/0_stateless/00840_long_concurrent_select_and_drop_deadlock.sh +++ b/dbms/tests/queries/0_stateless/00840_long_concurrent_select_and_drop_deadlock.sh @@ -5,11 +5,11 @@ set -e CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -for i in {1..200}; do echo "drop table if exists test.view" | $CLICKHOUSE_CLIENT; echo "create view test.view as select count(*),database,table from system.columns group by database,table" | $CLICKHOUSE_CLIENT; done & -for i in {1..500}; do echo "select * from test.view order by table" | $CLICKHOUSE_CLIENT >/dev/null 2>&1 || true; done & +for i in {1..200}; do echo "drop table if exists view" | $CLICKHOUSE_CLIENT; echo "create view view as select count(*),database,table from system.columns group by database,table" | $CLICKHOUSE_CLIENT; done & +for i in {1..500}; do echo "select * from view order by table" | $CLICKHOUSE_CLIENT >/dev/null 2>&1 || true; done & wait -echo "drop table test.view" | $CLICKHOUSE_CLIENT +echo "drop table view" | $CLICKHOUSE_CLIENT echo 'did not deadlock' diff --git a/dbms/tests/queries/0_stateless/00843_optimize_predicate_and_rename_table.sql b/dbms/tests/queries/0_stateless/00843_optimize_predicate_and_rename_table.sql index fb70e561d35..b042b40df74 100644 --- a/dbms/tests/queries/0_stateless/00843_optimize_predicate_and_rename_table.sql +++ b/dbms/tests/queries/0_stateless/00843_optimize_predicate_and_rename_table.sql @@ -1,18 +1,18 @@ SET enable_optimize_predicate_expression = 1; -DROP TABLE IF EXISTS test.test1; -DROP TABLE IF EXISTS test.test2; -DROP TABLE IF EXISTS test.view; +DROP TABLE IF EXISTS test1; +DROP TABLE IF EXISTS test2; +DROP TABLE IF EXISTS view; -CREATE TABLE test.test1 (a UInt8) ENGINE = Memory; -INSERT INTO test.test1 VALUES (1); +CREATE TABLE test1 (a UInt8) ENGINE = Memory; +INSERT INTO test1 VALUES (1); -CREATE VIEW test.view AS SELECT * FROM test.test1; -SELECT * FROM test.view; -RENAME TABLE test.test1 TO test.test2; -SELECT * FROM test.view; -- { serverError 60 } -RENAME TABLE test.test2 TO test.test1; -SELECT * FROM test.view; +CREATE VIEW view AS SELECT * FROM test1; +SELECT * FROM view; +RENAME TABLE test1 TO test2; +SELECT * FROM view; -- { serverError 60 } +RENAME TABLE test2 TO test1; +SELECT * FROM view; -DROP TABLE test.test1; -DROP TABLE test.view; +DROP TABLE test1; +DROP TABLE view; diff --git a/dbms/tests/queries/0_stateless/00844_join_lightee2.sql b/dbms/tests/queries/0_stateless/00844_join_lightee2.sql index 4cdb317f1d4..16e8d89ea47 100644 --- a/dbms/tests/queries/0_stateless/00844_join_lightee2.sql +++ b/dbms/tests/queries/0_stateless/00844_join_lightee2.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t2; diff --git a/dbms/tests/queries/0_stateless/00845_join_on_aliases.sql b/dbms/tests/queries/0_stateless/00845_join_on_aliases.sql index 17b6f158a7e..0800d27caa6 100644 --- a/dbms/tests/queries/0_stateless/00845_join_on_aliases.sql +++ b/dbms/tests/queries/0_stateless/00845_join_on_aliases.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS table1; DROP TABLE IF EXISTS table2; diff --git a/dbms/tests/queries/0_stateless/00847_multiple_join_same_column.sql b/dbms/tests/queries/0_stateless/00847_multiple_join_same_column.sql index b4ce61e3ee7..d444655a6ce 100644 --- a/dbms/tests/queries/0_stateless/00847_multiple_join_same_column.sql +++ b/dbms/tests/queries/0_stateless/00847_multiple_join_same_column.sql @@ -1,5 +1,3 @@ -use test; - drop table if exists t; drop table if exists s; drop table if exists y; diff --git a/dbms/tests/queries/0_stateless/00848_join_use_nulls_segfault.sql b/dbms/tests/queries/0_stateless/00848_join_use_nulls_segfault.sql index b38ac854bc7..eb7e6b6d4a9 100644 --- a/dbms/tests/queries/0_stateless/00848_join_use_nulls_segfault.sql +++ b/dbms/tests/queries/0_stateless/00848_join_use_nulls_segfault.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t2; DROP TABLE IF EXISTS t3; diff --git a/dbms/tests/queries/0_stateless/00849_multiple_comma_join.sql b/dbms/tests/queries/0_stateless/00849_multiple_comma_join.sql index 0e5aa4884a5..e15e29fc043 100644 --- a/dbms/tests/queries/0_stateless/00849_multiple_comma_join.sql +++ b/dbms/tests/queries/0_stateless/00849_multiple_comma_join.sql @@ -1,5 +1,4 @@ SET enable_debug_queries = 1; -USE test; DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t2; diff --git a/dbms/tests/queries/0_stateless/00851_http_insert_json_defaults.sh b/dbms/tests/queries/0_stateless/00851_http_insert_json_defaults.sh index 82cb38ae45f..a78d716985f 100755 --- a/dbms/tests/queries/0_stateless/00851_http_insert_json_defaults.sh +++ b/dbms/tests/queries/0_stateless/00851_http_insert_json_defaults.sh @@ -3,13 +3,13 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.defaults" -$CLICKHOUSE_CLIENT --query="CREATE TABLE test.defaults (x UInt32, y UInt32, a DEFAULT x + y, b Float32 DEFAULT log(1 + x + y), c UInt32 DEFAULT 42, e MATERIALIZED x + y, f ALIAS x + y) ENGINE = Memory" +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS defaults" +$CLICKHOUSE_CLIENT --query="CREATE TABLE defaults (x UInt32, y UInt32, a DEFAULT x + y, b Float32 DEFAULT log(1 + x + y), c UInt32 DEFAULT 42, e MATERIALIZED x + y, f ALIAS x + y) ENGINE = Memory" -echo -ne '{"x":1, "y":1}\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT%20INTO%20test.defaults%20FORMAT%20JSONEachRow%20SETTINGS%20input_format_defaults_for_omitted_fields=1" --data-binary @- -echo -ne '{"x":2, "y":2, "c":2}\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+test.defaults+FORMAT+JSONEachRow+SETTINGS+input_format_defaults_for_omitted_fields=1" --data-binary @- -echo -ne '{"x":3, "y":3, "a":3, "b":3, "c":3}\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+test.defaults+FORMAT+JSONEachRow+SETTINGS+input_format_defaults_for_omitted_fields=1" --data-binary @- -echo -ne '{"x":4} {"y":5, "c":5} {"a":6, "b":6, "c":6}\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?query=INSERT+INTO+test.defaults+FORMAT+JSONEachRow+SETTINGS+input_format_defaults_for_omitted_fields=1" --data-binary @- +echo -ne '{"x":1, "y":1}\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}&query=INSERT%20INTO%20defaults%20FORMAT%20JSONEachRow%20SETTINGS%20input_format_defaults_for_omitted_fields=1" --data-binary @- +echo -ne '{"x":2, "y":2, "c":2}\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL_PARAMS}&query=INSERT+INTO+defaults+FORMAT+JSONEachRow+SETTINGS+input_format_defaults_for_omitted_fields=1" --data-binary @- +echo -ne '{"x":3, "y":3, "a":3, "b":3, "c":3}\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?database=${CLICKHOUSE_DATABASE}&query=INSERT+INTO+defaults+FORMAT+JSONEachRow+SETTINGS+input_format_defaults_for_omitted_fields=1" --data-binary @- +echo -ne '{"x":4} {"y":5, "c":5} {"a":6, "b":6, "c":6}\n' | ${CLICKHOUSE_CURL} -sS "${CLICKHOUSE_URL}?database=${CLICKHOUSE_DATABASE}&query=INSERT+INTO+defaults+FORMAT+JSONEachRow+SETTINGS+input_format_defaults_for_omitted_fields=1" --data-binary @- -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.defaults ORDER BY x, y FORMAT JSONEachRow" -$CLICKHOUSE_CLIENT --query="DROP TABLE test.defaults" +$CLICKHOUSE_CLIENT --query="SELECT * FROM defaults ORDER BY x, y FORMAT JSONEachRow" +$CLICKHOUSE_CLIENT --query="DROP TABLE defaults" diff --git a/dbms/tests/queries/0_stateless/00852_any_join_nulls.sql b/dbms/tests/queries/0_stateless/00852_any_join_nulls.sql index b3f4b332a46..5f23e148105 100644 --- a/dbms/tests/queries/0_stateless/00852_any_join_nulls.sql +++ b/dbms/tests/queries/0_stateless/00852_any_join_nulls.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS table1; DROP TABLE IF EXISTS table2; CREATE TABLE table1 ( id String ) ENGINE = Log; @@ -15,5 +13,5 @@ SET join_use_nulls = 1; SELECT table2.parent_id = '', isNull(table2.parent_id) FROM table1 ANY LEFT JOIN table2 ON table1.id = table2.parent_id; -DROP TABLE test.table1; -DROP TABLE test.table2; +DROP TABLE table1; +DROP TABLE table2; diff --git a/dbms/tests/queries/0_stateless/00853_join_with_nulls_crash.sql b/dbms/tests/queries/0_stateless/00853_join_with_nulls_crash.sql index 3fe4b5a1f0b..00de5b7d89f 100644 --- a/dbms/tests/queries/0_stateless/00853_join_with_nulls_crash.sql +++ b/dbms/tests/queries/0_stateless/00853_join_with_nulls_crash.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS table_a; DROP TABLE IF EXISTS table_b; diff --git a/dbms/tests/queries/0_stateless/00856_no_column_issue_4242.sql b/dbms/tests/queries/0_stateless/00856_no_column_issue_4242.sql index 32ae3eddd82..ab76c4db054 100644 --- a/dbms/tests/queries/0_stateless/00856_no_column_issue_4242.sql +++ b/dbms/tests/queries/0_stateless/00856_no_column_issue_4242.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t2; CREATE TABLE t1 (n Int32) ENGINE = Memory; diff --git a/dbms/tests/queries/0_stateless/00858_issue_4756.reference b/dbms/tests/queries/0_stateless/00858_issue_4756.reference new file mode 100644 index 00000000000..d00491fd7e5 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00858_issue_4756.reference @@ -0,0 +1 @@ +1 diff --git a/dbms/tests/queries/0_stateless/00858_issue_4756.sql b/dbms/tests/queries/0_stateless/00858_issue_4756.sql new file mode 100644 index 00000000000..f892d5a0bea --- /dev/null +++ b/dbms/tests/queries/0_stateless/00858_issue_4756.sql @@ -0,0 +1,49 @@ +set distributed_product_mode = 'local'; + +use test; +drop table if exists shard1; +drop table if exists shard2; +drop table if exists distr1; +drop table if exists distr2; + +create table test.shard1 (id Int32) engine = MergeTree order by cityHash64(id); +create table test.shard2 (id Int32) engine = MergeTree order by cityHash64(id); + +create table test.distr1 as shard1 engine Distributed (test_cluster_two_shards_localhost, test, shard1, cityHash64(id)); +create table test.distr2 as shard2 engine Distributed (test_cluster_two_shards_localhost, test, shard2, cityHash64(id)); + +insert into shard1 (id) values (0), (1); +insert into shard2 (id) values (1), (2); + +select distinct(test.distr1.id) from test.distr1 +where test.distr1.id in +( + select test.distr1.id + from test.distr1 + join test.distr2 on test.distr1.id = test.distr2.id + where test.distr1.id > 0 +); -- { serverError 288 } + +select distinct(d0.id) from distr1 d0 +where d0.id in +( + select d1.id + from distr1 as d1 + join distr2 as d2 on d1.id = d2.id + where d1.id > 0 +); + +-- TODO +--select distinct(test.distr1.id) from test.distr1 +--where test.distr1.id in +--( +-- select test.distr1.id +-- from test.distr1 as d1 +-- join test.distr2 as d2 on test.distr1.id = test.distr2.id +-- where test.distr1.id > 0 +--); + +drop table shard1; +drop table shard2; +drop table distr1; +drop table distr2; diff --git a/dbms/tests/queries/0_stateless/00859_distinct_with_join.reference b/dbms/tests/queries/0_stateless/00859_distinct_with_join.reference new file mode 100644 index 00000000000..0d66ea1aee9 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00859_distinct_with_join.reference @@ -0,0 +1,2 @@ +0 +1 diff --git a/dbms/tests/queries/0_stateless/00859_distinct_with_join.sql b/dbms/tests/queries/0_stateless/00859_distinct_with_join.sql new file mode 100644 index 00000000000..ad9b5022a93 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00859_distinct_with_join.sql @@ -0,0 +1,15 @@ +use test; + +drop table if exists fooL; +drop table if exists fooR; +create table fooL (a Int32, v String) engine = Memory; +create table fooR (a Int32, v String) engine = Memory; + +insert into fooL select number, 'L' || toString(number) from numbers(2); +insert into fooL select number, 'LL' || toString(number) from numbers(2); +insert into fooR select number, 'R' || toString(number) from numbers(2); + +select distinct a from fooL any join fooR using(a) order by a; + +drop table fooL; +drop table fooR; diff --git a/dbms/tests/queries/0_stateless/00899_long_attach_memory_limit.sql b/dbms/tests/queries/0_stateless/00899_long_attach_memory_limit.sql index 38bde7d9bdf..fc355bda462 100644 --- a/dbms/tests/queries/0_stateless/00899_long_attach_memory_limit.sql +++ b/dbms/tests/queries/0_stateless/00899_long_attach_memory_limit.sql @@ -1,9 +1,9 @@ -DROP TABLE IF EXISTS test.index_memory; -CREATE TABLE test.index_memory (x UInt64) ENGINE = MergeTree ORDER BY x SETTINGS index_granularity = 1; -INSERT INTO test.index_memory SELECT * FROM system.numbers LIMIT 10000000; -SELECT count() FROM test.index_memory; -DETACH TABLE test.index_memory; +DROP TABLE IF EXISTS index_memory; +CREATE TABLE index_memory (x UInt64) ENGINE = MergeTree ORDER BY x SETTINGS index_granularity = 1; +INSERT INTO index_memory SELECT * FROM system.numbers LIMIT 10000000; +SELECT count() FROM index_memory; +DETACH TABLE index_memory; SET max_memory_usage = 79000000; -ATTACH TABLE test.index_memory; -SELECT count() FROM test.index_memory; -DROP TABLE test.index_memory; +ATTACH TABLE index_memory; +SELECT count() FROM index_memory; +DROP TABLE index_memory; diff --git a/dbms/tests/queries/0_stateless/00900_parquet.sh b/dbms/tests/queries/0_stateless/00900_parquet.sh index aa479e7d03c..de3bfdd8e3c 100755 --- a/dbms/tests/queries/0_stateless/00900_parquet.sh +++ b/dbms/tests/queries/0_stateless/00900_parquet.sh @@ -15,122 +15,122 @@ CUR_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) #valgrind --tool=massif ${CLICKHOUSE_CLIENT} --query="SELECT * FROM system.numbers LIMIT 1000000 FORMAT Parquet" > ${CLICKHOUSE_TMP}/t1g.pq -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.contributors" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.contributors (name String) ENGINE = Memory" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM system.contributors ORDER BY name DESC FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.contributors FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS contributors" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE contributors (name String) ENGINE = Memory" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM system.contributors ORDER BY name DESC FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO contributors FORMAT Parquet" # random results -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.contributors LIMIT 10" > /dev/null -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.contributors" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM contributors LIMIT 10" > /dev/null +${CLICKHOUSE_CLIENT} --query="DROP TABLE contributors" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.parquet_numbers" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.parquet_numbers (number UInt64) ENGINE = Memory" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS parquet_numbers" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE parquet_numbers (number UInt64) ENGINE = Memory" # less than default block size (65k) -${CLICKHOUSE_CLIENT} --query="SELECT * FROM system.numbers LIMIT 10000 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_numbers FORMAT Parquet" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_numbers ORDER BY number DESC LIMIT 10" -${CLICKHOUSE_CLIENT} --query="TRUNCATE TABLE test.parquet_numbers" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM system.numbers LIMIT 10000 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_numbers FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_numbers ORDER BY number DESC LIMIT 10" +${CLICKHOUSE_CLIENT} --query="TRUNCATE TABLE parquet_numbers" # More than default block size -${CLICKHOUSE_CLIENT} --query="SELECT * FROM system.numbers LIMIT 100000 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_numbers FORMAT Parquet" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_numbers ORDER BY number DESC LIMIT 10" -${CLICKHOUSE_CLIENT} --query="TRUNCATE TABLE test.parquet_numbers" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM system.numbers LIMIT 100000 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_numbers FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_numbers ORDER BY number DESC LIMIT 10" +${CLICKHOUSE_CLIENT} --query="TRUNCATE TABLE parquet_numbers" -#${CLICKHOUSE_CLIENT} --query="SELECT * FROM system.numbers LIMIT 10000000 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_numbers FORMAT Parquet" -#${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_numbers ORDER BY number DESC LIMIT 10" -#${CLICKHOUSE_CLIENT} --query="TRUNCATE TABLE test.parquet_numbers" +#${CLICKHOUSE_CLIENT} --query="SELECT * FROM system.numbers LIMIT 10000000 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_numbers FORMAT Parquet" +#${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_numbers ORDER BY number DESC LIMIT 10" +#${CLICKHOUSE_CLIENT} --query="TRUNCATE TABLE parquet_numbers" #${CLICKHOUSE_CLIENT} --max_block_size=2 --query="SELECT * FROM system.numbers LIMIT 3 FORMAT Parquet" > ${CLICKHOUSE_TMP}/bs2.pq -${CLICKHOUSE_CLIENT} --max_block_size=2 --query="SELECT * FROM system.numbers LIMIT 3 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_numbers FORMAT Parquet" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_numbers ORDER BY number DESC LIMIT 10" +${CLICKHOUSE_CLIENT} --max_block_size=2 --query="SELECT * FROM system.numbers LIMIT 3 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_numbers FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_numbers ORDER BY number DESC LIMIT 10" -${CLICKHOUSE_CLIENT} --query="TRUNCATE TABLE test.parquet_numbers" -${CLICKHOUSE_CLIENT} --max_block_size=1 --query="SELECT * FROM system.numbers LIMIT 1000 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_numbers FORMAT Parquet" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_numbers ORDER BY number DESC LIMIT 10" +${CLICKHOUSE_CLIENT} --query="TRUNCATE TABLE parquet_numbers" +${CLICKHOUSE_CLIENT} --max_block_size=1 --query="SELECT * FROM system.numbers LIMIT 1000 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_numbers FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_numbers ORDER BY number DESC LIMIT 10" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.parquet_numbers" +${CLICKHOUSE_CLIENT} --query="DROP TABLE parquet_numbers" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.parquet_events" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.parquet_events (event String, value UInt64, description String) ENGINE = Memory" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM system.events FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_events FORMAT Parquet" -${CLICKHOUSE_CLIENT} --query="SELECT event, description FROM test.parquet_events WHERE event IN ('ContextLock', 'Query') ORDER BY event" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.parquet_events" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS parquet_events" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE parquet_events (event String, value UInt64, description String) ENGINE = Memory" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM system.events FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_events FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="SELECT event, description FROM parquet_events WHERE event IN ('ContextLock', 'Query') ORDER BY event" +${CLICKHOUSE_CLIENT} --query="DROP TABLE parquet_events" -#${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.parquet_types1" -#${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.parquet_types2" -#${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.parquet_types1 (int8 Int8, uint8 UInt8, int16 Int16, uint16 UInt16, int32 Int32, int64 Int64, uint64 UInt64, float32 Float32, float64 Float64, string String ) ENGINE = Memory" -#${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.parquet_types2 (int8 Int8, uint8 UInt8, int16 Int16, uint16 UInt16, int32 Int32, int64 Int64, uint64 UInt64, float32 Float32, float64 Float64, string String ) ENGINE = Memory" -#${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_types1 values ( -108, 108, -1016, 1116, -1032, -1064, 1164, -1.032, -1.064, 'string' )" -#${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types1 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_types2 FORMAT Parquet" +#${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS parquet_types1" +#${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS parquet_types2" +#${CLICKHOUSE_CLIENT} --query="CREATE TABLE parquet_types1 (int8 Int8, uint8 UInt8, int16 Int16, uint16 UInt16, int32 Int32, int64 Int64, uint64 UInt64, float32 Float32, float64 Float64, string String ) ENGINE = Memory" +#${CLICKHOUSE_CLIENT} --query="CREATE TABLE parquet_types2 (int8 Int8, uint8 UInt8, int16 Int16, uint16 UInt16, int32 Int32, int64 Int64, uint64 UInt64, float32 Float32, float64 Float64, string String ) ENGINE = Memory" +#${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_types1 values ( -108, 108, -1016, 1116, -1032, -1064, 1164, -1.032, -1.064, 'string' )" +#${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types1 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_types2 FORMAT Parquet" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.parquet_types1" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.parquet_types2" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.parquet_types3" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.parquet_types4" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.parquet_types1 (int8 Int8, uint8 UInt8, int16 Int16, uint16 UInt16, int32 Int32, uint32 UInt32, int64 Int64, uint64 UInt64, float32 Float32, float64 Float64, string String, fixedstring FixedString(15), date Date, datetime DateTime) ENGINE = Memory" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.parquet_types2 (int8 Int8, uint8 UInt8, int16 Int16, uint16 UInt16, int32 Int32, uint32 UInt32, int64 Int64, uint64 UInt64, float32 Float32, float64 Float64, string String, fixedstring FixedString(15), date Date, datetime DateTime) ENGINE = Memory" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS parquet_types1" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS parquet_types2" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS parquet_types3" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS parquet_types4" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE parquet_types1 (int8 Int8, uint8 UInt8, int16 Int16, uint16 UInt16, int32 Int32, uint32 UInt32, int64 Int64, uint64 UInt64, float32 Float32, float64 Float64, string String, fixedstring FixedString(15), date Date, datetime DateTime) ENGINE = Memory" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE parquet_types2 (int8 Int8, uint8 UInt8, int16 Int16, uint16 UInt16, int32 Int32, uint32 UInt32, int64 Int64, uint64 UInt64, float32 Float32, float64 Float64, string String, fixedstring FixedString(15), date Date, datetime DateTime) ENGINE = Memory" # convert min type -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.parquet_types3 (int8 Int8, uint8 Int8, int16 Int8, uint16 Int8, int32 Int8, uint32 Int8, int64 Int8, uint64 Int8, float32 Int8, float64 Int8, string FixedString(15), fixedstring FixedString(15), date Date, datetime Date) ENGINE = Memory" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE parquet_types3 (int8 Int8, uint8 Int8, int16 Int8, uint16 Int8, int32 Int8, uint32 Int8, int64 Int8, uint64 Int8, float32 Int8, float64 Int8, string FixedString(15), fixedstring FixedString(15), date Date, datetime Date) ENGINE = Memory" # convert max type -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.parquet_types4 (int8 Int64, uint8 Int64, int16 Int64, uint16 Int64, int32 Int64, uint32 Int64, int64 Int64, uint64 Int64, float32 Int64, float64 Int64, string String, fixedstring String, date DateTime, datetime DateTime) ENGINE = Memory" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE parquet_types4 (int8 Int64, uint8 Int64, int16 Int64, uint16 Int64, int32 Int64, uint32 Int64, int64 Int64, uint64 Int64, float32 Int64, float64 Int64, string String, fixedstring String, date DateTime, datetime DateTime) ENGINE = Memory" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_types1 values ( -108, 108, -1016, 1116, -1032, 1132, -1064, 1164, -1.032, -1.064, 'string-0', 'fixedstring', '2001-02-03', '2002-02-03 04:05:06')" +${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_types1 values ( -108, 108, -1016, 1116, -1032, 1132, -1064, 1164, -1.032, -1.064, 'string-0', 'fixedstring', '2001-02-03', '2002-02-03 04:05:06')" # min -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_types1 values ( -128, 0, -32768, 0, -2147483648, 0, -9223372036854775808, 0, -1.032, -1.064, 'string-1', 'fixedstring-1', '2003-04-05', '2003-02-03 04:05:06')" +${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_types1 values ( -128, 0, -32768, 0, -2147483648, 0, -9223372036854775808, 0, -1.032, -1.064, 'string-1', 'fixedstring-1', '2003-04-05', '2003-02-03 04:05:06')" # max -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_types1 values ( 127, 255, 32767, 65535, 2147483647, 4294967295, 9223372036854775807, 9223372036854775807, -1.032, -1.064, 'string-2', 'fixedstring-2', '2004-06-07', '2004-02-03 04:05:06')" +${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_types1 values ( 127, 255, 32767, 65535, 2147483647, 4294967295, 9223372036854775807, 9223372036854775807, -1.032, -1.064, 'string-2', 'fixedstring-2', '2004-06-07', '2004-02-03 04:05:06')" # 'SELECT -127,-128,-129,126,127,128,255,256,257,-32767,-32768,-32769,32766,32767,32768,65535,65536,65537, -2147483647,-2147483648,-2147483649,2147483646,2147483647,2147483648,4294967295,4294967296,4294967297, -9223372036854775807,-9223372036854775808,9223372036854775806,9223372036854775807,9223372036854775808,18446744073709551615'; -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types1 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_types2 FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types1 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_types2 FORMAT Parquet" echo original: -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types1 ORDER BY int8" | tee ${CLICKHOUSE_TMP}/parquet_all_types_1.dump +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types1 ORDER BY int8" | tee ${CLICKHOUSE_TMP}/parquet_all_types_1.dump echo converted: -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types2 ORDER BY int8" | tee ${CLICKHOUSE_TMP}/parquet_all_types_2.dump -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types1 ORDER BY int8 FORMAT Parquet" > ${CLICKHOUSE_TMP}/parquet_all_types_1.parquet -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types2 ORDER BY int8 FORMAT Parquet" > ${CLICKHOUSE_TMP}/parquet_all_types_2.parquet +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types2 ORDER BY int8" | tee ${CLICKHOUSE_TMP}/parquet_all_types_2.dump +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types1 ORDER BY int8 FORMAT Parquet" > ${CLICKHOUSE_TMP}/parquet_all_types_1.parquet +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types2 ORDER BY int8 FORMAT Parquet" > ${CLICKHOUSE_TMP}/parquet_all_types_2.parquet echo diff: diff ${CLICKHOUSE_TMP}/parquet_all_types_1.dump ${CLICKHOUSE_TMP}/parquet_all_types_2.dump -${CLICKHOUSE_CLIENT} --query="TRUNCATE TABLE test.parquet_types2" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_types3 values ( 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 'str01', 'fstr1', '2003-03-04', '2004-05-06')" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types3 ORDER BY int8 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_types2 FORMAT Parquet" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types1 ORDER BY int8 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_types3 FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="TRUNCATE TABLE parquet_types2" +${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_types3 values ( 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 'str01', 'fstr1', '2003-03-04', '2004-05-06')" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types3 ORDER BY int8 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_types2 FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types1 ORDER BY int8 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_types3 FORMAT Parquet" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_types4 values ( 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 'str02', 'fstr2', '2005-03-04 05:06:07', '2006-08-09 10:11:12')" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types4 ORDER BY int8 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_types2 FORMAT Parquet" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types1 ORDER BY int8 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_types4 FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_types4 values ( 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 'str02', 'fstr2', '2005-03-04 05:06:07', '2006-08-09 10:11:12')" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types4 ORDER BY int8 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_types2 FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types1 ORDER BY int8 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_types4 FORMAT Parquet" echo dest: -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types2 ORDER BY int8" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types2 ORDER BY int8" echo min: -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types3 ORDER BY int8" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types3 ORDER BY int8" echo max: -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types4 ORDER BY int8" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types4 ORDER BY int8" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.parquet_types5" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.parquet_types6" -${CLICKHOUSE_CLIENT} --query="TRUNCATE TABLE test.parquet_types2" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.parquet_types5 (int8 Nullable(Int8), uint8 Nullable(UInt8), int16 Nullable(Int16), uint16 Nullable(UInt16), int32 Nullable(Int32), uint32 Nullable(UInt32), int64 Nullable(Int64), uint64 Nullable(UInt64), float32 Nullable(Float32), float64 Nullable(Float64), string Nullable(String), fixedstring Nullable(FixedString(15)), date Nullable(Date), datetime Nullable(DateTime)) ENGINE = Memory" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.parquet_types6 (int8 Nullable(Int8), uint8 Nullable(UInt8), int16 Nullable(Int16), uint16 Nullable(UInt16), int32 Nullable(Int32), uint32 Nullable(UInt32), int64 Nullable(Int64), uint64 Nullable(UInt64), float32 Nullable(Float32), float64 Nullable(Float64), string Nullable(String), fixedstring Nullable(FixedString(15)), date Nullable(Date), datetime Nullable(DateTime)) ENGINE = Memory" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_types5 values ( NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types5 ORDER BY int8 FORMAT Parquet" > ${CLICKHOUSE_TMP}/parquet_all_types_5.parquet -#${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types5 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_types6 FORMAT Parquet" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types5 ORDER BY int8 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_types6 FORMAT Parquet" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types1 ORDER BY int8 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_types6 FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS parquet_types5" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS parquet_types6" +${CLICKHOUSE_CLIENT} --query="TRUNCATE TABLE parquet_types2" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE parquet_types5 (int8 Nullable(Int8), uint8 Nullable(UInt8), int16 Nullable(Int16), uint16 Nullable(UInt16), int32 Nullable(Int32), uint32 Nullable(UInt32), int64 Nullable(Int64), uint64 Nullable(UInt64), float32 Nullable(Float32), float64 Nullable(Float64), string Nullable(String), fixedstring Nullable(FixedString(15)), date Nullable(Date), datetime Nullable(DateTime)) ENGINE = Memory" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE parquet_types6 (int8 Nullable(Int8), uint8 Nullable(UInt8), int16 Nullable(Int16), uint16 Nullable(UInt16), int32 Nullable(Int32), uint32 Nullable(UInt32), int64 Nullable(Int64), uint64 Nullable(UInt64), float32 Nullable(Float32), float64 Nullable(Float64), string Nullable(String), fixedstring Nullable(FixedString(15)), date Nullable(Date), datetime Nullable(DateTime)) ENGINE = Memory" +${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_types5 values ( NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types5 ORDER BY int8 FORMAT Parquet" > ${CLICKHOUSE_TMP}/parquet_all_types_5.parquet +#${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types5 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_types6 FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types5 ORDER BY int8 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_types6 FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types1 ORDER BY int8 FORMAT Parquet" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_types6 FORMAT Parquet" echo dest from null: -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_types6 ORDER BY int8" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_types6 ORDER BY int8" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.parquet_types5" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.parquet_types6" +${CLICKHOUSE_CLIENT} --query="DROP TABLE parquet_types5" +${CLICKHOUSE_CLIENT} --query="DROP TABLE parquet_types6" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.parquet_types1" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.parquet_types2" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.parquet_types3" -${CLICKHOUSE_CLIENT} --query="DROP TABLE test.parquet_types4" +${CLICKHOUSE_CLIENT} --query="DROP TABLE parquet_types1" +${CLICKHOUSE_CLIENT} --query="DROP TABLE parquet_types2" +${CLICKHOUSE_CLIENT} --query="DROP TABLE parquet_types3" +${CLICKHOUSE_CLIENT} --query="DROP TABLE parquet_types4" diff --git a/dbms/tests/queries/0_stateless/00900_parquet_decimal.sh b/dbms/tests/queries/0_stateless/00900_parquet_decimal.sh index 7fcefa3c3ee..322f0a5be00 100755 --- a/dbms/tests/queries/0_stateless/00900_parquet_decimal.sh +++ b/dbms/tests/queries/0_stateless/00900_parquet_decimal.sh @@ -4,108 +4,108 @@ CUR_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CUR_DIR/../shell_config.sh -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.decimal;" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.decimal2;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS decimal;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS decimal2;" # Simple small values -${CLICKHOUSE_CLIENT} --query="CREATE TABLE IF NOT EXISTS test.decimal (a DECIMAL(9,0), b DECIMAL(18,0), c DECIMAL(38,0), d DECIMAL(9, 9), e DECIMAL(18, 18), f DECIMAL(38, 38), g Decimal(9, 5), h decimal(18, 9), i deciMAL(38, 18), j DECIMAL(1,0)) ENGINE = Memory;" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE IF NOT EXISTS test.decimal2 AS test.decimal ENGINE = Memory;" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (0, 0, 0, 0, 0, 0, 0, 0, 0, 0);" -#${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (1, 1, 1, 0.1, 0.1, 1, 1, 1, 1, 1);" -#${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (10, 10, 10, 0.1, 0.1, 0.1, 10, 10, 10, 10);" -#${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (-100, -100, -100, -0.1, -0.1, -0.1, -100, -100, -100, -100);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, c) VALUES (1, 1, 1);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, c) VALUES (10, 10, 10);" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal ORDER BY a, b, c, d, e, f, g, h, i, j;" > ${CLICKHOUSE_TMP}/parquet_decimal0_1.dump -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal ORDER BY a, b, c, d, e, f, g, h, i, j FORMAT Parquet;" > ${CLICKHOUSE_TMP}/parquet_decimal0.parquet -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal ORDER BY a, b, c, d, e, f, g, h, i, j FORMAT Parquet;" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal2 FORMAT Parquet" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal2 ORDER BY a, b, c, d, e, f, g, h, i, j;" > ${CLICKHOUSE_TMP}/parquet_decimal0_2.dump +${CLICKHOUSE_CLIENT} --query="CREATE TABLE IF NOT EXISTS decimal (a DECIMAL(9,0), b DECIMAL(18,0), c DECIMAL(38,0), d DECIMAL(9, 9), e DECIMAL(18, 18), f DECIMAL(38, 38), g Decimal(9, 5), h decimal(18, 9), i deciMAL(38, 18), j DECIMAL(1,0)) ENGINE = Memory;" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE IF NOT EXISTS decimal2 AS decimal ENGINE = Memory;" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (0, 0, 0, 0, 0, 0, 0, 0, 0, 0);" +#${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (1, 1, 1, 0.1, 0.1, 1, 1, 1, 1, 1);" +#${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (10, 10, 10, 0.1, 0.1, 0.1, 10, 10, 10, 10);" +#${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (-100, -100, -100, -0.1, -0.1, -0.1, -100, -100, -100, -100);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, c) VALUES (1, 1, 1);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, c) VALUES (10, 10, 10);" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal ORDER BY a, b, c, d, e, f, g, h, i, j;" > ${CLICKHOUSE_TMP}/parquet_decimal0_1.dump +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal ORDER BY a, b, c, d, e, f, g, h, i, j FORMAT Parquet;" > ${CLICKHOUSE_TMP}/parquet_decimal0.parquet +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal ORDER BY a, b, c, d, e, f, g, h, i, j FORMAT Parquet;" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal2 FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal2 ORDER BY a, b, c, d, e, f, g, h, i, j;" > ${CLICKHOUSE_TMP}/parquet_decimal0_2.dump echo diff0: diff ${CLICKHOUSE_TMP}/parquet_decimal0_1.dump ${CLICKHOUSE_TMP}/parquet_decimal0_2.dump -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.decimal;" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.decimal2;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS decimal;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS decimal2;" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE IF NOT EXISTS test.decimal ( a DECIMAL(9,0), b DECIMAL(18,0), c DECIMAL(38,0), d DECIMAL(9, 9), e DECIMAL(18, 18), f DECIMAL(38, 38), g Decimal(9, 5), h decimal(18, 9), i deciMAL(38, 18), j DECIMAL(1,0)) ENGINE = Memory;" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE IF NOT EXISTS test.decimal2 AS test.decimal ENGINE = Memory;" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, d, g) VALUES (999999999, 999999999999999999, 0.999999999, 9999.99999);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, d, g) VALUES (-999999999, -999999999999999999, -0.999999999, -9999.99999);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (c) VALUES (99999999999999999999999999999999999999);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (c) VALUES (-99999999999999999999999999999999999999);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (f) VALUES (0.99999999999999999999999999999999999999);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (f) VALUES (-0.99999999999999999999999999999999999999);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (e, h) VALUES (0.999999999999999999, 999999999.999999999);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (e, h) VALUES (-0.999999999999999999, -999999999.999999999);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (i) VALUES (99999999999999999999.999999999999999999);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (i) VALUES (-99999999999999999999.999999999999999999);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, c, d, g, j, h) VALUES (1, 1, 1, 0.000000001, 0.00001, 1, 0.000000001);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, c, d, g, j, h) VALUES (-1, -1, -1, -0.000000001, -0.00001, -1, -0.000000001);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (e, f) VALUES (0.000000000000000001, 0.00000000000000000000000000000000000001);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (e, f) VALUES (-0.000000000000000001, -0.00000000000000000000000000000000000001);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (i) VALUES (0.000000000000000001);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (i) VALUES (-0.000000000000000001);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (0, 0, 0, 0, 0, 0, 0, 0, 0, 0);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (-0, -0, -0, -0, -0, -0, -0, -0, -0, -0);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (-0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, g) VALUES ('42.00000', 42.0000000000000000000000000000000, '0.999990');" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, c, d, e, f) VALUES ('0.9e9', '0.9e18', '0.9e38', '9e-9', '9e-18', '9e-38');" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, c, d, e, f) VALUES ('-0.9e9', '-0.9e18', '-0.9e38', '-9e-9', '-9e-18', '-9e-38');" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal ORDER BY a, b, c, d, e, f, g, h, i, j;" > ${CLICKHOUSE_TMP}/parquet_decimal1_1.dump -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal ORDER BY a, b, c, d, e, f, g, h, i, j FORMAT Parquet;" > ${CLICKHOUSE_TMP}/parquet_decimal1.parquet -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal ORDER BY a, b, c, d, e, f, g, h, i, j FORMAT Parquet;" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal2 FORMAT Parquet" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal2 ORDER BY a, b, c, d, e, f, g, h, i, j;" > ${CLICKHOUSE_TMP}/parquet_decimal1_2.dump +${CLICKHOUSE_CLIENT} --query="CREATE TABLE IF NOT EXISTS decimal ( a DECIMAL(9,0), b DECIMAL(18,0), c DECIMAL(38,0), d DECIMAL(9, 9), e DECIMAL(18, 18), f DECIMAL(38, 38), g Decimal(9, 5), h decimal(18, 9), i deciMAL(38, 18), j DECIMAL(1,0)) ENGINE = Memory;" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE IF NOT EXISTS decimal2 AS decimal ENGINE = Memory;" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, d, g) VALUES (999999999, 999999999999999999, 0.999999999, 9999.99999);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, d, g) VALUES (-999999999, -999999999999999999, -0.999999999, -9999.99999);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (c) VALUES (99999999999999999999999999999999999999);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (c) VALUES (-99999999999999999999999999999999999999);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (f) VALUES (0.99999999999999999999999999999999999999);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (f) VALUES (-0.99999999999999999999999999999999999999);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (e, h) VALUES (0.999999999999999999, 999999999.999999999);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (e, h) VALUES (-0.999999999999999999, -999999999.999999999);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (i) VALUES (99999999999999999999.999999999999999999);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (i) VALUES (-99999999999999999999.999999999999999999);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, c, d, g, j, h) VALUES (1, 1, 1, 0.000000001, 0.00001, 1, 0.000000001);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, c, d, g, j, h) VALUES (-1, -1, -1, -0.000000001, -0.00001, -1, -0.000000001);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (e, f) VALUES (0.000000000000000001, 0.00000000000000000000000000000000000001);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (e, f) VALUES (-0.000000000000000001, -0.00000000000000000000000000000000000001);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (i) VALUES (0.000000000000000001);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (i) VALUES (-0.000000000000000001);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (0, 0, 0, 0, 0, 0, 0, 0, 0, 0);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (-0, -0, -0, -0, -0, -0, -0, -0, -0, -0);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (-0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, g) VALUES ('42.00000', 42.0000000000000000000000000000000, '0.999990');" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, c, d, e, f) VALUES ('0.9e9', '0.9e18', '0.9e38', '9e-9', '9e-18', '9e-38');" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, c, d, e, f) VALUES ('-0.9e9', '-0.9e18', '-0.9e38', '-9e-9', '-9e-18', '-9e-38');" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal ORDER BY a, b, c, d, e, f, g, h, i, j;" > ${CLICKHOUSE_TMP}/parquet_decimal1_1.dump +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal ORDER BY a, b, c, d, e, f, g, h, i, j FORMAT Parquet;" > ${CLICKHOUSE_TMP}/parquet_decimal1.parquet +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal ORDER BY a, b, c, d, e, f, g, h, i, j FORMAT Parquet;" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal2 FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal2 ORDER BY a, b, c, d, e, f, g, h, i, j;" > ${CLICKHOUSE_TMP}/parquet_decimal1_2.dump echo diff1: diff ${CLICKHOUSE_TMP}/parquet_decimal1_1.dump ${CLICKHOUSE_TMP}/parquet_decimal1_2.dump -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.decimal;" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.decimal2;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS decimal;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS decimal2;" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE IF NOT EXISTS test.decimal (a DECIMAL(9,0), b DECIMAL(18,0), c DECIMAL(38,0), d DECIMAL(9, 9), e Decimal64(18), f Decimal128(38), g Decimal32(5), h Decimal64(9), i Decimal128(18), j dec(4,2)) ENGINE = Memory;" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE IF NOT EXISTS test.decimal2 AS test.decimal ENGINE = Memory;" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (42, 42, 42, 0.42, 0.42, 0.42, 42.42, 42.42, 42.42, 42.42);" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal (a, b, c, d, e, f, g, h, i, j) VALUES (-42, -42, -42, -0.42, -0.42, -0.42, -42.42, -42.42, -42.42, -42.42);" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal ORDER BY a, b, c, d, e, f, g, h, i, j;" > ${CLICKHOUSE_TMP}/parquet_decimal2_1.dump -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal ORDER BY a, b, c, d, e, f, g, h, i, j FORMAT Parquet;" > ${CLICKHOUSE_TMP}/parquet_decimal2.parquet -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal ORDER BY a, b, c, d, e, f, g, h, i, j FORMAT Parquet;" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal2 FORMAT Parquet" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal2 ORDER BY a, b, c, d, e, f, g, h, i, j;" > ${CLICKHOUSE_TMP}/parquet_decimal2_2.dump +${CLICKHOUSE_CLIENT} --query="CREATE TABLE IF NOT EXISTS decimal (a DECIMAL(9,0), b DECIMAL(18,0), c DECIMAL(38,0), d DECIMAL(9, 9), e Decimal64(18), f Decimal128(38), g Decimal32(5), h Decimal64(9), i Decimal128(18), j dec(4,2)) ENGINE = Memory;" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE IF NOT EXISTS decimal2 AS decimal ENGINE = Memory;" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (42, 42, 42, 0.42, 0.42, 0.42, 42.42, 42.42, 42.42, 42.42);" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal (a, b, c, d, e, f, g, h, i, j) VALUES (-42, -42, -42, -0.42, -0.42, -0.42, -42.42, -42.42, -42.42, -42.42);" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal ORDER BY a, b, c, d, e, f, g, h, i, j;" > ${CLICKHOUSE_TMP}/parquet_decimal2_1.dump +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal ORDER BY a, b, c, d, e, f, g, h, i, j FORMAT Parquet;" > ${CLICKHOUSE_TMP}/parquet_decimal2.parquet +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal ORDER BY a, b, c, d, e, f, g, h, i, j FORMAT Parquet;" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal2 FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal2 ORDER BY a, b, c, d, e, f, g, h, i, j;" > ${CLICKHOUSE_TMP}/parquet_decimal2_2.dump echo diff2: diff ${CLICKHOUSE_TMP}/parquet_decimal2_1.dump ${CLICKHOUSE_TMP}/parquet_decimal2_2.dump -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.decimal;" -${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.decimal2;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS decimal;" +${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS decimal2;" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE IF NOT EXISTS test.decimal (a Nullable(DECIMAL(9,0)), b Nullable(DECIMAL(18,0)), c Nullable(DECIMAL(38,0)), d Nullable(DECIMAL(9,0))) ENGINE = Memory;" -${CLICKHOUSE_CLIENT} --query="CREATE TABLE IF NOT EXISTS test.decimal2 AS test.decimal ENGINE = Memory;" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE IF NOT EXISTS decimal (a Nullable(DECIMAL(9,0)), b Nullable(DECIMAL(18,0)), c Nullable(DECIMAL(38,0)), d Nullable(DECIMAL(9,0))) ENGINE = Memory;" +${CLICKHOUSE_CLIENT} --query="CREATE TABLE IF NOT EXISTS decimal2 AS decimal ENGINE = Memory;" # Empty table test # throws No data to insert -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal ORDER BY a, b, c, d FORMAT Parquet;" > ${CLICKHOUSE_TMP}/parquet_decimal3_1.parquet -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal ORDER BY a, b, c, d FORMAT Parquet;" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal2 FORMAT Parquet" 2> /dev/null +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal ORDER BY a, b, c, d FORMAT Parquet;" > ${CLICKHOUSE_TMP}/parquet_decimal3_1.parquet +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal ORDER BY a, b, c, d FORMAT Parquet;" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal2 FORMAT Parquet" 2> /dev/null echo nothing: -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal2 ORDER BY a, b, c, d;" -${CLICKHOUSE_CLIENT} --query="TRUNCATE TABLE test.decimal2;" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal2 ORDER BY a, b, c, d;" +${CLICKHOUSE_CLIENT} --query="TRUNCATE TABLE decimal2;" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal VALUES (Null, Null, Null, Null)" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal ORDER BY a, b, c, d FORMAT Parquet;" > ${CLICKHOUSE_TMP}/parquet_decimal3_2.parquet -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal ORDER BY a, b, c, d FORMAT Parquet;" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal2 FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal VALUES (Null, Null, Null, Null)" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal ORDER BY a, b, c, d FORMAT Parquet;" > ${CLICKHOUSE_TMP}/parquet_decimal3_2.parquet +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal ORDER BY a, b, c, d FORMAT Parquet;" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal2 FORMAT Parquet" echo nulls: -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal2 ORDER BY a, b, c, d;" -${CLICKHOUSE_CLIENT} --query="TRUNCATE TABLE test.decimal2;" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal2 ORDER BY a, b, c, d;" +${CLICKHOUSE_CLIENT} --query="TRUNCATE TABLE decimal2;" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal VALUES (1, Null, Null, Null)" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal VALUES (Null, 1, Null, Null)" -${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal VALUES (Null, Null, 1, Null)" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal ORDER BY a, b, c, d FORMAT Parquet;" > ${CLICKHOUSE_TMP}/parquet_decimal3_3.parquet -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal ORDER BY a, b, c, d FORMAT Parquet;" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.decimal2 FORMAT Parquet" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal VALUES (1, Null, Null, Null)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal VALUES (Null, 1, Null, Null)" +${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal VALUES (Null, Null, 1, Null)" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal ORDER BY a, b, c, d FORMAT Parquet;" > ${CLICKHOUSE_TMP}/parquet_decimal3_3.parquet +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal ORDER BY a, b, c, d FORMAT Parquet;" | ${CLICKHOUSE_CLIENT} --query="INSERT INTO decimal2 FORMAT Parquet" echo full orig: -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal ORDER BY a, b, c, d;" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal ORDER BY a, b, c, d;" echo full inserted: -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal2 ORDER BY a, b, c, d;" +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal2 ORDER BY a, b, c, d;" -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal2 ORDER BY a, b, c, d;" > ${CLICKHOUSE_TMP}/parquet_decimal3_1.dump -${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.decimal2 ORDER BY a, b, c, d;" > ${CLICKHOUSE_TMP}/parquet_decimal3_2.dump +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal2 ORDER BY a, b, c, d;" > ${CLICKHOUSE_TMP}/parquet_decimal3_1.dump +${CLICKHOUSE_CLIENT} --query="SELECT * FROM decimal2 ORDER BY a, b, c, d;" > ${CLICKHOUSE_TMP}/parquet_decimal3_2.dump echo diff3: diff ${CLICKHOUSE_TMP}/parquet_decimal3_1.dump ${CLICKHOUSE_TMP}/parquet_decimal3_2.dump -#${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.decimal;" -#${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.decimal2;" +#${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS decimal;" +#${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS decimal2;" diff --git a/dbms/tests/queries/0_stateless/00900_parquet_load.sh b/dbms/tests/queries/0_stateless/00900_parquet_load.sh index 66fdd54a512..43db76c1a1f 100755 --- a/dbms/tests/queries/0_stateless/00900_parquet_load.sh +++ b/dbms/tests/queries/0_stateless/00900_parquet_load.sh @@ -47,12 +47,12 @@ for NAME in `ls -1 $DATA_DIR/*.parquet | xargs -n 1 basename | sort`; do #COLUMNS=`$CUR_DIR/00900_parquet_create_table_columns.pl $JSON` 2>&1 || continue COLUMNS=`cat $COLUMNS_FILE` || continue - ${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS test.parquet_load" - ${CLICKHOUSE_CLIENT} --query="CREATE TABLE test.parquet_load ($COLUMNS) ENGINE = Memory" + ${CLICKHOUSE_CLIENT} --query="DROP TABLE IF EXISTS parquet_load" + ${CLICKHOUSE_CLIENT} --query="CREATE TABLE parquet_load ($COLUMNS) ENGINE = Memory" # Some files is broken, exception is ok. - cat $DATA_DIR/$NAME | ${CLICKHOUSE_CLIENT} --query="INSERT INTO test.parquet_load FORMAT Parquet" 2>&1 | sed 's/Exception/Ex---tion/' + cat $DATA_DIR/$NAME | ${CLICKHOUSE_CLIENT} --query="INSERT INTO parquet_load FORMAT Parquet" 2>&1 | sed 's/Exception/Ex---tion/' - ${CLICKHOUSE_CLIENT} --query="SELECT * FROM test.parquet_load LIMIT 100" - ${CLICKHOUSE_CLIENT} --query="DROP TABLE test.parquet_load" + ${CLICKHOUSE_CLIENT} --query="SELECT * FROM parquet_load LIMIT 100" + ${CLICKHOUSE_CLIENT} --query="DROP TABLE parquet_load" done diff --git a/dbms/tests/queries/0_stateless/00902_entropy.sql b/dbms/tests/queries/0_stateless/00902_entropy.sql index eef1f9b829c..dfbda33bbbc 100644 --- a/dbms/tests/queries/0_stateless/00902_entropy.sql +++ b/dbms/tests/queries/0_stateless/00902_entropy.sql @@ -1,44 +1,44 @@ -DROP TABLE IF EXISTS test.defaults; -CREATE TABLE IF NOT EXISTS test.defaults +DROP TABLE IF EXISTS defaults; +CREATE TABLE IF NOT EXISTS defaults ( vals String ) ENGINE = Memory; -insert into test.defaults values ('ba'), ('aa'), ('ba'), ('b'), ('ba'), ('aa'); -select val < 1.5 and val > 1.459 from (select entropy(vals) as val from test.defaults); +insert into defaults values ('ba'), ('aa'), ('ba'), ('b'), ('ba'), ('aa'); +select val < 1.5 and val > 1.459 from (select entropy(vals) as val from defaults); -DROP TABLE IF EXISTS test.defaults; -CREATE TABLE IF NOT EXISTS test.defaults +DROP TABLE IF EXISTS defaults; +CREATE TABLE IF NOT EXISTS defaults ( vals UInt64 ) ENGINE = Memory; -insert into test.defaults values (0), (0), (1), (0), (0), (0), (1), (2), (3), (5), (3), (1), (1), (4), (5), (2) -select val < 2.4 and val > 2.3393 from (select entropy(vals) as val from test.defaults); +insert into defaults values (0), (0), (1), (0), (0), (0), (1), (2), (3), (5), (3), (1), (1), (4), (5), (2) +select val < 2.4 and val > 2.3393 from (select entropy(vals) as val from defaults); -DROP TABLE IF EXISTS test.defaults; -CREATE TABLE IF NOT EXISTS test.defaults +DROP TABLE IF EXISTS defaults; +CREATE TABLE IF NOT EXISTS defaults ( vals UInt32 ) ENGINE = Memory; -insert into test.defaults values (0), (0), (1), (0), (0), (0), (1), (2), (3), (5), (3), (1), (1), (4), (5), (2) -select val < 2.4 and val > 2.3393 from (select entropy(vals) as val from test.defaults); +insert into defaults values (0), (0), (1), (0), (0), (0), (1), (2), (3), (5), (3), (1), (1), (4), (5), (2) +select val < 2.4 and val > 2.3393 from (select entropy(vals) as val from defaults); -DROP TABLE IF EXISTS test.defaults; -CREATE TABLE IF NOT EXISTS test.defaults +DROP TABLE IF EXISTS defaults; +CREATE TABLE IF NOT EXISTS defaults ( vals Int32 ) ENGINE = Memory; -insert into test.defaults values (0), (0), (-1), (0), (0), (0), (-1), (2), (3), (5), (3), (-1), (-1), (4), (5), (2) -select val < 2.4 and val > 2.3393 from (select entropy(vals) as val from test.defaults); +insert into defaults values (0), (0), (-1), (0), (0), (0), (-1), (2), (3), (5), (3), (-1), (-1), (4), (5), (2) +select val < 2.4 and val > 2.3393 from (select entropy(vals) as val from defaults); -DROP TABLE IF EXISTS test.defaults; -CREATE TABLE IF NOT EXISTS test.defaults +DROP TABLE IF EXISTS defaults; +CREATE TABLE IF NOT EXISTS defaults ( vals DateTime ) ENGINE = Memory; -insert into test.defaults values (toDateTime('2016-06-15 23:00:00')), (toDateTime('2016-06-15 23:00:00')), (toDateTime('2016-06-15 23:00:00')), (toDateTime('2016-06-15 23:00:00')), (toDateTime('2016-06-15 24:00:00')), (toDateTime('2016-06-15 24:00:00')), (toDateTime('2016-06-15 24:00:00')), (toDateTime('2017-06-15 24:00:00')), (toDateTime('2017-06-15 24:00:00')), (toDateTime('2018-06-15 24:00:00')), (toDateTime('2018-06-15 24:00:00')), (toDateTime('2019-06-15 24:00:00')); -select val < 2.189 and val > 2.1886 from (select entropy(vals) as val from test.defaults); +insert into defaults values (toDateTime('2016-06-15 23:00:00')), (toDateTime('2016-06-15 23:00:00')), (toDateTime('2016-06-15 23:00:00')), (toDateTime('2016-06-15 23:00:00')), (toDateTime('2016-06-15 24:00:00')), (toDateTime('2016-06-15 24:00:00')), (toDateTime('2016-06-15 24:00:00')), (toDateTime('2017-06-15 24:00:00')), (toDateTime('2017-06-15 24:00:00')), (toDateTime('2018-06-15 24:00:00')), (toDateTime('2018-06-15 24:00:00')), (toDateTime('2019-06-15 24:00:00')); +select val < 2.189 and val > 2.1886 from (select entropy(vals) as val from defaults); diff --git a/dbms/tests/queries/0_stateless/00905_compile_expressions_compare_big_dates.sql b/dbms/tests/queries/0_stateless/00905_compile_expressions_compare_big_dates.sql index 6917714e091..beff4cd0374 100644 --- a/dbms/tests/queries/0_stateless/00905_compile_expressions_compare_big_dates.sql +++ b/dbms/tests/queries/0_stateless/00905_compile_expressions_compare_big_dates.sql @@ -1,14 +1,14 @@ SET compile_expressions = 1; SET min_count_to_compile_expression = 1; -DROP TABLE IF EXISTS test.foo_c; +DROP TABLE IF EXISTS foo_c; -CREATE TABLE test.foo_c(d DateTime) ENGINE = Memory; +CREATE TABLE foo_c(d DateTime) ENGINE = Memory; -INSERT INTO test.foo_c VALUES ('2019-02-06 01:01:01'),('2019-02-07 01:01:01'),('2019-02-08 01:01:01'),('2021-02-06 01:01:01'),('2093-05-29 01:01:01'),('2100-06-06 01:01:01'),('2100-10-14 01:01:01'),('2100-11-01 01:01:01'),('2100-11-15 01:01:01'),('2100-11-30 01:01:01'),('2100-12-11 01:01:01'),('2100-12-21 01:01:01'); +INSERT INTO foo_c VALUES ('2019-02-06 01:01:01'),('2019-02-07 01:01:01'),('2019-02-08 01:01:01'),('2021-02-06 01:01:01'),('2093-05-29 01:01:01'),('2100-06-06 01:01:01'),('2100-10-14 01:01:01'),('2100-11-01 01:01:01'),('2100-11-15 01:01:01'),('2100-11-30 01:01:01'),('2100-12-11 01:01:01'),('2100-12-21 01:01:01'); -SELECT toDate(d) AS dd FROM test.foo_c WHERE (dd >= '2019-02-06') AND (toDate(d) <= toDate('2019-08-09')) GROUP BY dd ORDER BY dd; +SELECT toDate(d) AS dd FROM foo_c WHERE (dd >= '2019-02-06') AND (toDate(d) <= toDate('2019-08-09')) GROUP BY dd ORDER BY dd; -SELECT toDate(d) FROM test.foo_c WHERE (d > toDate('2019-02-10')) AND (d <= toDate('2022-01-01')) ORDER BY d; +SELECT toDate(d) FROM foo_c WHERE (d > toDate('2019-02-10')) AND (d <= toDate('2022-01-01')) ORDER BY d; -DROP TABLE IF EXISTS test.foo_c; +DROP TABLE IF EXISTS foo_c; diff --git a/dbms/tests/queries/0_stateless/00906_low_cardinality_cache.sql b/dbms/tests/queries/0_stateless/00906_low_cardinality_cache.sql index ca286e9379f..b8ffce12e23 100644 --- a/dbms/tests/queries/0_stateless/00906_low_cardinality_cache.sql +++ b/dbms/tests/queries/0_stateless/00906_low_cardinality_cache.sql @@ -1,5 +1,5 @@ -drop table if exists test.lc; -create table test.lc (b LowCardinality(String)) engine=MergeTree order by b; -insert into test.lc select '0123456789' from numbers(100000000); -select count(), b from test.lc group by b; -drop table if exists test.lc; +drop table if exists lc; +create table lc (b LowCardinality(String)) engine=MergeTree order by b; +insert into lc select '0123456789' from numbers(100000000); +select count(), b from lc group by b; +drop table if exists lc; diff --git a/dbms/tests/queries/0_stateless/00906_low_cardinality_rollup.sql b/dbms/tests/queries/0_stateless/00906_low_cardinality_rollup.sql index 591a0681357..3b8be7b9ac6 100644 --- a/dbms/tests/queries/0_stateless/00906_low_cardinality_rollup.sql +++ b/dbms/tests/queries/0_stateless/00906_low_cardinality_rollup.sql @@ -1,12 +1,12 @@ -DROP TABLE if exists test.lc; -CREATE TABLE test.lc (a LowCardinality(Nullable(String)), b LowCardinality(Nullable(String))) ENGINE = MergeTree order by tuple(); -INSERT INTO test.lc VALUES ('a', 'b'); -INSERT INTO test.lc VALUES ('c', 'd'); +DROP TABLE if exists lc; +CREATE TABLE lc (a LowCardinality(Nullable(String)), b LowCardinality(Nullable(String))) ENGINE = MergeTree order by tuple(); +INSERT INTO lc VALUES ('a', 'b'); +INSERT INTO lc VALUES ('c', 'd'); -SELECT a, b, count(a) FROM test.lc GROUP BY a, b WITH ROLLUP; -SELECT a, count(a) FROM test.lc GROUP BY a WITH ROLLUP; +SELECT a, b, count(a) FROM lc GROUP BY a, b WITH ROLLUP; +SELECT a, count(a) FROM lc GROUP BY a WITH ROLLUP; -SELECT a, b, count(a) FROM test.lc GROUP BY a, b WITH CUBE; -SELECT a, count(a) FROM test.lc GROUP BY a WITH CUBE; +SELECT a, b, count(a) FROM lc GROUP BY a, b WITH CUBE; +SELECT a, count(a) FROM lc GROUP BY a WITH CUBE; -DROP TABLE if exists test.lc; +DROP TABLE if exists lc; diff --git a/dbms/tests/queries/0_stateless/00907_set_index_max_rows.sh b/dbms/tests/queries/0_stateless/00907_set_index_max_rows.sh index ed2a732c74f..98c0086488d 100755 --- a/dbms/tests/queries/0_stateless/00907_set_index_max_rows.sh +++ b/dbms/tests/queries/0_stateless/00907_set_index_max_rows.sh @@ -3,11 +3,11 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.set_idx;" +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS set_idx;" $CLICKHOUSE_CLIENT -n --query=" SET allow_experimental_data_skipping_indices = 1; -CREATE TABLE test.set_idx +CREATE TABLE set_idx ( u64 UInt64, i32 Int32, @@ -17,11 +17,11 @@ ORDER BY u64 SETTINGS index_granularity = 6;" $CLICKHOUSE_CLIENT --query=" -INSERT INTO test.set_idx +INSERT INTO set_idx SELECT number, number FROM system.numbers LIMIT 100" # simple select -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.set_idx WHERE i32 > 0 FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM set_idx WHERE i32 > 0 FORMAT JSON" | grep "rows_read" -$CLICKHOUSE_CLIENT --query="DROP TABLE test.set_idx;" \ No newline at end of file +$CLICKHOUSE_CLIENT --query="DROP TABLE set_idx;" \ No newline at end of file diff --git a/dbms/tests/queries/0_stateless/00907_set_index_with_nullable_and_low_cardinality.sql b/dbms/tests/queries/0_stateless/00907_set_index_with_nullable_and_low_cardinality.sql index 363e0e9c0b5..21bbbf1e6e9 100644 --- a/dbms/tests/queries/0_stateless/00907_set_index_with_nullable_and_low_cardinality.sql +++ b/dbms/tests/queries/0_stateless/00907_set_index_with_nullable_and_low_cardinality.sql @@ -1,69 +1,69 @@ SET allow_experimental_data_skipping_indices=1; -drop table if exists test.nullable_set_index; -create table test.nullable_set_index (a UInt64, b Nullable(String), INDEX b_index b TYPE set(0) GRANULARITY 8192) engine = MergeTree order by a; -insert into test.nullable_set_index values (1, 'a'); -insert into test.nullable_set_index values (2, 'b'); -select * from test.nullable_set_index where b = 'a'; +drop table if exists nullable_set_index; +create table nullable_set_index (a UInt64, b Nullable(String), INDEX b_index b TYPE set(0) GRANULARITY 8192) engine = MergeTree order by a; +insert into nullable_set_index values (1, 'a'); +insert into nullable_set_index values (2, 'b'); +select * from nullable_set_index where b = 'a'; select '-'; -select * from test.nullable_set_index where b = 'b'; +select * from nullable_set_index where b = 'b'; select '-'; -select * from test.nullable_set_index where b = 'c'; +select * from nullable_set_index where b = 'c'; select '--'; -drop table if exists test.nullable_set_index; -create table test.nullable_set_index (a UInt64, b Nullable(String), INDEX b_index b TYPE set(1) GRANULARITY 8192) engine = MergeTree order by a; -insert into test.nullable_set_index values (1, 'a'); -insert into test.nullable_set_index values (2, 'b'); -select * from test.nullable_set_index where b = 'a'; +drop table if exists nullable_set_index; +create table nullable_set_index (a UInt64, b Nullable(String), INDEX b_index b TYPE set(1) GRANULARITY 8192) engine = MergeTree order by a; +insert into nullable_set_index values (1, 'a'); +insert into nullable_set_index values (2, 'b'); +select * from nullable_set_index where b = 'a'; select '-'; -select * from test.nullable_set_index where b = 'b'; +select * from nullable_set_index where b = 'b'; select '-'; -select * from test.nullable_set_index where b = 'c'; +select * from nullable_set_index where b = 'c'; select '--'; -drop table if exists test.nullable_set_index; -create table test.nullable_set_index (a UInt64, b Nullable(String), INDEX b_index b TYPE set(0) GRANULARITY 8192) engine = MergeTree order by a; -insert into test.nullable_set_index values (1, 'a'), (2, 'b'); -select * from test.nullable_set_index where b = 'a'; +drop table if exists nullable_set_index; +create table nullable_set_index (a UInt64, b Nullable(String), INDEX b_index b TYPE set(0) GRANULARITY 8192) engine = MergeTree order by a; +insert into nullable_set_index values (1, 'a'), (2, 'b'); +select * from nullable_set_index where b = 'a'; select '-'; -select * from test.nullable_set_index where b = 'b'; +select * from nullable_set_index where b = 'b'; select '-'; -select * from test.nullable_set_index where b = 'c'; +select * from nullable_set_index where b = 'c'; select '----'; -drop table if exists test.nullable_set_index; -create table test.nullable_set_index (a UInt64, b LowCardinality(Nullable(String)), INDEX b_index b TYPE set(0) GRANULARITY 8192) engine = MergeTree order by a; -insert into test.nullable_set_index values (1, 'a'); -insert into test.nullable_set_index values (2, 'b'); -select * from test.nullable_set_index where b = 'a'; +drop table if exists nullable_set_index; +create table nullable_set_index (a UInt64, b LowCardinality(Nullable(String)), INDEX b_index b TYPE set(0) GRANULARITY 8192) engine = MergeTree order by a; +insert into nullable_set_index values (1, 'a'); +insert into nullable_set_index values (2, 'b'); +select * from nullable_set_index where b = 'a'; select '-'; -select * from test.nullable_set_index where b = 'b'; +select * from nullable_set_index where b = 'b'; select '-'; -select * from test.nullable_set_index where b = 'c'; +select * from nullable_set_index where b = 'c'; select '--'; -drop table if exists test.nullable_set_index; -create table test.nullable_set_index (a UInt64, b LowCardinality(Nullable(String)), INDEX b_index b TYPE set(1) GRANULARITY 8192) engine = MergeTree order by a; -insert into test.nullable_set_index values (1, 'a'); -insert into test.nullable_set_index values (2, 'b'); -select * from test.nullable_set_index where b = 'a'; +drop table if exists nullable_set_index; +create table nullable_set_index (a UInt64, b LowCardinality(Nullable(String)), INDEX b_index b TYPE set(1) GRANULARITY 8192) engine = MergeTree order by a; +insert into nullable_set_index values (1, 'a'); +insert into nullable_set_index values (2, 'b'); +select * from nullable_set_index where b = 'a'; select '-'; -select * from test.nullable_set_index where b = 'b'; +select * from nullable_set_index where b = 'b'; select '-'; -select * from test.nullable_set_index where b = 'c'; +select * from nullable_set_index where b = 'c'; select '--'; -drop table if exists test.nullable_set_index; -create table test.nullable_set_index (a UInt64, b LowCardinality(Nullable(String)), INDEX b_index b TYPE set(0) GRANULARITY 8192) engine = MergeTree order by a; -insert into test.nullable_set_index values (1, 'a'), (2, 'b'); -select * from test.nullable_set_index where b = 'a'; +drop table if exists nullable_set_index; +create table nullable_set_index (a UInt64, b LowCardinality(Nullable(String)), INDEX b_index b TYPE set(0) GRANULARITY 8192) engine = MergeTree order by a; +insert into nullable_set_index values (1, 'a'), (2, 'b'); +select * from nullable_set_index where b = 'a'; select '-'; -select * from test.nullable_set_index where b = 'b'; +select * from nullable_set_index where b = 'b'; select '-'; -select * from test.nullable_set_index where b = 'c'; +select * from nullable_set_index where b = 'c'; select '----'; -drop table if exists test.nullable_set_index; +drop table if exists nullable_set_index; diff --git a/dbms/tests/queries/0_stateless/00907_set_index_with_nullable_and_low_cardinality_bug.sql b/dbms/tests/queries/0_stateless/00907_set_index_with_nullable_and_low_cardinality_bug.sql index 5bec1210a1e..6af826163a3 100644 --- a/dbms/tests/queries/0_stateless/00907_set_index_with_nullable_and_low_cardinality_bug.sql +++ b/dbms/tests/queries/0_stateless/00907_set_index_with_nullable_and_low_cardinality_bug.sql @@ -1,8 +1,8 @@ SET allow_experimental_data_skipping_indices=1; -drop table if exists test.null_lc_set_index; +drop table if exists null_lc_set_index; -CREATE TABLE test.null_lc_set_index ( +CREATE TABLE null_lc_set_index ( timestamp DateTime, action LowCardinality(Nullable(String)), user LowCardinality(Nullable(String)), @@ -11,10 +11,10 @@ CREATE TABLE test.null_lc_set_index ( PARTITION BY toYYYYMMDD(timestamp) ORDER BY (timestamp, action, cityHash64(user)) SAMPLE BY cityHash64(user); -INSERT INTO test.null_lc_set_index VALUES (1550883010, 'subscribe', 'alice'); -INSERT INTO test.null_lc_set_index VALUES (1550883020, 'follow', 'bob'); +INSERT INTO null_lc_set_index VALUES (1550883010, 'subscribe', 'alice'); +INSERT INTO null_lc_set_index VALUES (1550883020, 'follow', 'bob'); -SELECT action, user FROM test.null_lc_set_index WHERE user = 'alice'; +SELECT action, user FROM null_lc_set_index WHERE user = 'alice'; -drop table if exists test.null_lc_set_index; +drop table if exists null_lc_set_index; diff --git a/dbms/tests/queries/0_stateless/00908_analyze_query.reference b/dbms/tests/queries/0_stateless/00908_analyze_query.reference index b784efbad42..a10c36ca4dd 100644 --- a/dbms/tests/queries/0_stateless/00908_analyze_query.reference +++ b/dbms/tests/queries/0_stateless/00908_analyze_query.reference @@ -1 +1 @@ -SELECT \n a, \n b\nFROM test.a +SELECT \n a, \n b\nFROM a diff --git a/dbms/tests/queries/0_stateless/00908_analyze_query.sql b/dbms/tests/queries/0_stateless/00908_analyze_query.sql index 116b4bdc72d..ca8e834e108 100644 --- a/dbms/tests/queries/0_stateless/00908_analyze_query.sql +++ b/dbms/tests/queries/0_stateless/00908_analyze_query.sql @@ -1,8 +1,8 @@ set enable_debug_queries = 1; -DROP TABLE IF EXISTS test.a; -CREATE TABLE test.a (a UInt8, b UInt8) ENGINE MergeTree ORDER BY a; +DROP TABLE IF EXISTS a; +CREATE TABLE a (a UInt8, b UInt8) ENGINE MergeTree ORDER BY a; -ANALYZE SELECT * FROM test.a; +ANALYZE SELECT * FROM a; -DROP TABLE test.a; +DROP TABLE a; diff --git a/dbms/tests/queries/0_stateless/00908_bloom_filter_index.sh b/dbms/tests/queries/0_stateless/00908_bloom_filter_index.sh index 8eb4bc7bb9a..7d8e20b2aa3 100755 --- a/dbms/tests/queries/0_stateless/00908_bloom_filter_index.sh +++ b/dbms/tests/queries/0_stateless/00908_bloom_filter_index.sh @@ -3,15 +3,15 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.bloom_filter_idx;" -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.bloom_filter_idx2;" -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.bloom_filter_idx2;" +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS bloom_filter_idx;" +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS bloom_filter_idx2;" +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS bloom_filter_idx2;" # NGRAM BF $CLICKHOUSE_CLIENT -n --query=" SET allow_experimental_data_skipping_indices = 1; -CREATE TABLE test.bloom_filter_idx +CREATE TABLE bloom_filter_idx ( k UInt64, s String, @@ -22,7 +22,7 @@ SETTINGS index_granularity = 2;" $CLICKHOUSE_CLIENT -n --query=" SET allow_experimental_data_skipping_indices = 1; -CREATE TABLE test.bloom_filter_idx2 +CREATE TABLE bloom_filter_idx2 ( k UInt64, s FixedString(15), @@ -32,7 +32,7 @@ ORDER BY k SETTINGS index_granularity = 2;" -$CLICKHOUSE_CLIENT --query="INSERT INTO test.bloom_filter_idx VALUES +$CLICKHOUSE_CLIENT --query="INSERT INTO bloom_filter_idx VALUES (0, 'ClickHouse - столбцовая система управления базами данных (СУБД) для онлайн обработки аналитических запросов (OLAP).'), (1, 'ClickHouse is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).'), (2, 'column-oriented database management system'), @@ -47,7 +47,7 @@ $CLICKHOUSE_CLIENT --query="INSERT INTO test.bloom_filter_idx VALUES (12, '
странный html
'), (13, 'abc')" -$CLICKHOUSE_CLIENT --query="INSERT INTO test.bloom_filter_idx2 VALUES +$CLICKHOUSE_CLIENT --query="INSERT INTO bloom_filter_idx2 VALUES (0, 'ClickHouse'), (1, 'column-oriented'), (2, 'column-oriented'), @@ -57,56 +57,56 @@ $CLICKHOUSE_CLIENT --query="INSERT INTO test.bloom_filter_idx2 VALUES (13, 'abc')" # EQUAL -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx2 WHERE lower(s) = 'aбвгдеёж' OR s = 'aбвгдеёж' ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx2 WHERE lower(s) = 'aбвгдеёж' OR s = 'aбвгдеёж' ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx2 WHERE lower(s) = 'aбвгдеёж' OR s = 'aбвгдеёж' ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx2 WHERE lower(s) = 'aбвгдеёж' OR s = 'aбвгдеёж' ORDER BY k FORMAT JSON" | grep "rows_read" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s = 'aбвгдеёж' ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s = 'aбвгдеёж' ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s = 'aбвгдеёж' ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s = 'aбвгдеёж' ORDER BY k FORMAT JSON" | grep "rows_read" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE lower(s) = 'abc' ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE lower(s) = 'abc' ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE lower(s) = 'abc' ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE lower(s) = 'abc' ORDER BY k FORMAT JSON" | grep "rows_read" # LIKE -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s LIKE '%database%' AND s LIKE '%ClickHouse%' ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s LIKE '%database%' AND s LIKE '%ClickHouse%' ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s LIKE '%database%' AND s LIKE '%ClickHouse%' ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s LIKE '%database%' AND s LIKE '%ClickHouse%' ORDER BY k FORMAT JSON" | grep "rows_read" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s LIKE '%database%' AND lower(s) LIKE '%clickhouse%' ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s LIKE '%database%' AND lower(s) LIKE '%clickhouse%' ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s LIKE '%database%' AND lower(s) LIKE '%clickhouse%' ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s LIKE '%database%' AND lower(s) LIKE '%clickhouse%' ORDER BY k FORMAT JSON" | grep "rows_read" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s LIKE '%базами данных%' AND s LIKE '%ClickHouse%' ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s LIKE '%базами данных%' AND s LIKE '%ClickHouse%' ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s LIKE '%базами данных%' AND s LIKE '%ClickHouse%' ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s LIKE '%базами данных%' AND s LIKE '%ClickHouse%' ORDER BY k FORMAT JSON" | grep "rows_read" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE (s LIKE '%базами данных%' AND s LIKE '%ClickHouse%') OR s LIKE '____строка' ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE (s LIKE '%базами данных%' AND s LIKE '%ClickHouse%') OR s LIKE '____строка' ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE (s LIKE '%базами данных%' AND s LIKE '%ClickHouse%') OR s LIKE '____строка' ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE (s LIKE '%базами данных%' AND s LIKE '%ClickHouse%') OR s LIKE '____строка' ORDER BY k FORMAT JSON" | grep "rows_read" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s LIKE '%%
_%_%_
%%' ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s LIKE '%%
_%_%_
%%' ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s LIKE '%%
_%_%_
%%' ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s LIKE '%%
_%_%_
%%' ORDER BY k FORMAT JSON" | grep "rows_read" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s LIKE '%2\\\\%2%' ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s LIKE '%2\\\\%2%' ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s LIKE '%2\\\\%2%' ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s LIKE '%2\\\\%2%' ORDER BY k FORMAT JSON" | grep "rows_read" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s LIKE '%_\\\\%2\\\\__\\\\' ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s LIKE '%_\\\\%2\\\\__\\\\' ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s LIKE '%_\\\\%2\\\\__\\\\' ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s LIKE '%_\\\\%2\\\\__\\\\' ORDER BY k FORMAT JSON" | grep "rows_read" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s LIKE '2\\\\_2\\\\%2_2\\\\' ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s LIKE '2\\\\_2\\\\%2_2\\\\' ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s LIKE '2\\\\_2\\\\%2_2\\\\' ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s LIKE '2\\\\_2\\\\%2_2\\\\' ORDER BY k FORMAT JSON" | grep "rows_read" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s LIKE '2\\\\_2\\\\%2_2_' ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s LIKE '2\\\\_2\\\\%2_2_' ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s LIKE '2\\\\_2\\\\%2_2_' ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s LIKE '2\\\\_2\\\\%2_2_' ORDER BY k FORMAT JSON" | grep "rows_read" # IN -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s IN ('aбвгдеёж', 'abc') ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE s IN ('aбвгдеёж', 'abc') ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s IN ('aбвгдеёж', 'abc') ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE s IN ('aбвгдеёж', 'abc') ORDER BY k FORMAT JSON" | grep "rows_read" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE (s, lower(s)) IN (('aбвгдеёж', 'aбвгдеёж'), ('abc', 'cba')) ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx WHERE (s, lower(s)) IN (('aбвгдеёж', 'aбвгдеёж'), ('abc', 'cba')) ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE (s, lower(s)) IN (('aбвгдеёж', 'aбвгдеёж'), ('abc', 'cba')) ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx WHERE (s, lower(s)) IN (('aбвгдеёж', 'aбвгдеёж'), ('abc', 'cba')) ORDER BY k FORMAT JSON" | grep "rows_read" # TOKEN BF $CLICKHOUSE_CLIENT -n --query=" SET allow_experimental_data_skipping_indices = 1; -CREATE TABLE test.bloom_filter_idx3 +CREATE TABLE bloom_filter_idx3 ( k UInt64, s String, @@ -115,7 +115,7 @@ CREATE TABLE test.bloom_filter_idx3 ORDER BY k SETTINGS index_granularity = 2;" -$CLICKHOUSE_CLIENT --query="INSERT INTO test.bloom_filter_idx3 VALUES +$CLICKHOUSE_CLIENT --query="INSERT INTO bloom_filter_idx3 VALUES (0, 'ClickHouse is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).'), (1, 'column-oriented'), (2, 'column-oriented'), @@ -125,19 +125,19 @@ $CLICKHOUSE_CLIENT --query="INSERT INTO test.bloom_filter_idx3 VALUES (13, 'abc')" # EQUAL -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx3 WHERE lower(s) = 'column-oriented' OR s = 'column-oriented' ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx3 WHERE lower(s) = 'column-oriented' OR s = 'column-oriented' ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx3 WHERE lower(s) = 'column-oriented' OR s = 'column-oriented' ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx3 WHERE lower(s) = 'column-oriented' OR s = 'column-oriented' ORDER BY k FORMAT JSON" | grep "rows_read" # LIKE -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx3 WHERE lower(s) LIKE '%(dbms)%' ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx3 WHERE lower(s) LIKE '%(dbms)%' ORDER BY k FORMAT JSON" | grep "rows_read" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx3 WHERE s LIKE 'column-%' AND s LIKE '%-oriented' ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx3 WHERE s LIKE 'column-%' AND s LIKE '%-oriented' ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx3 WHERE lower(s) LIKE '%(dbms)%' ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx3 WHERE lower(s) LIKE '%(dbms)%' ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx3 WHERE s LIKE 'column-%' AND s LIKE '%-oriented' ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx3 WHERE s LIKE 'column-%' AND s LIKE '%-oriented' ORDER BY k FORMAT JSON" | grep "rows_read" # IN -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx3 WHERE s IN ('some string', 'abc') ORDER BY k" -$CLICKHOUSE_CLIENT --query="SELECT * FROM test.bloom_filter_idx3 WHERE s IN ('some string', 'abc') ORDER BY k FORMAT JSON" | grep "rows_read" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx3 WHERE s IN ('some string', 'abc') ORDER BY k" +$CLICKHOUSE_CLIENT --query="SELECT * FROM bloom_filter_idx3 WHERE s IN ('some string', 'abc') ORDER BY k FORMAT JSON" | grep "rows_read" -$CLICKHOUSE_CLIENT --query="DROP TABLE test.bloom_filter_idx" -$CLICKHOUSE_CLIENT --query="DROP TABLE test.bloom_filter_idx2" -$CLICKHOUSE_CLIENT --query="DROP TABLE test.bloom_filter_idx3" \ No newline at end of file +$CLICKHOUSE_CLIENT --query="DROP TABLE bloom_filter_idx" +$CLICKHOUSE_CLIENT --query="DROP TABLE bloom_filter_idx2" +$CLICKHOUSE_CLIENT --query="DROP TABLE bloom_filter_idx3" \ No newline at end of file diff --git a/dbms/tests/queries/0_stateless/00908_long_http_insert.sh b/dbms/tests/queries/0_stateless/00908_long_http_insert.sh index 5acc70cfe0d..90ca0f7d7ac 100755 --- a/dbms/tests/queries/0_stateless/00908_long_http_insert.sh +++ b/dbms/tests/queries/0_stateless/00908_long_http_insert.sh @@ -4,8 +4,8 @@ set -e CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -echo 'DROP TABLE IF EXISTS test.table_for_insert' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- -echo 'CREATE TABLE test.table_for_insert (a UInt8, b UInt8) ENGINE = Memory' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- -echo "INSERT INTO test.table_for_insert VALUES `printf '%*s' "1000000" | sed 's/ /(1, 2)/g'`" | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- -echo 'SELECT count(*) FROM test.table_for_insert' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- -echo 'DROP TABLE IF EXISTS test.table_for_insert' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- +echo 'DROP TABLE IF EXISTS table_for_insert' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- +echo 'CREATE TABLE table_for_insert (a UInt8, b UInt8) ENGINE = Memory' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- +echo "INSERT INTO table_for_insert VALUES `printf '%*s' "1000000" | sed 's/ /(1, 2)/g'`" | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- +echo 'SELECT count(*) FROM table_for_insert' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- +echo 'DROP TABLE IF EXISTS table_for_insert' | ${CLICKHOUSE_CURL} -sSg ${CLICKHOUSE_URL} -d @- diff --git a/dbms/tests/queries/0_stateless/00909_arrayEnumerateUniq.sql b/dbms/tests/queries/0_stateless/00909_arrayEnumerateUniq.sql index d622b1acd76..cb872eb8733 100644 --- a/dbms/tests/queries/0_stateless/00909_arrayEnumerateUniq.sql +++ b/dbms/tests/queries/0_stateless/00909_arrayEnumerateUniq.sql @@ -109,36 +109,36 @@ SELECT arrayEnumerateDenseRanked(1, [[[1,2,3],[1,2,3],[1,2,3]],[[1,2,3],[1,2,3], select '---------table'; -DROP TABLE IF EXISTS test.arrays_test; -CREATE TABLE test.arrays_test (a1 Array(UInt16), a2 Array(UInt16), a3 Array(Array(UInt16)), a4 Array(Array(UInt16)) ) ENGINE = Memory; +DROP TABLE IF EXISTS arrays_test; +CREATE TABLE arrays_test (a1 Array(UInt16), a2 Array(UInt16), a3 Array(Array(UInt16)), a4 Array(Array(UInt16)) ) ENGINE = Memory; ---INSERT INTO test.arrays_test VALUES ([1,2,3], [2,2,1], [[1,2,3,4],[2,2,1],[3]], [[1,2,4,4],[2,2,1],[3]]), ([1,2,4], [2,2,1], [[1,2,3,4],[2,2,1],[3]], [[1,2,5,4],[2,2,1],[3]]), ([1,2,3], [2,2,1], [[1,2,3,4],[2,2,1],[3]], [[1,2,4,4],[2,2,1],[3]]), ([1,2,3], [2,2,1], [[1,2,3,4],[2,2,1],[3]], [[1,2,4,4],[2,2,1],[3]]); -INSERT INTO test.arrays_test VALUES ([1,2,3], [2,2,1], [[1,2,3,4],[2,2,1],[3]], [[1,2,4,4],[2,2,1],[3]]), ([21,22,24], [22,22,21], [[21,22,23,24],[22,22,21],[23]], [[21,22,25,24],[22,22,21],[23]]), ([31,32,33], [32,32,31], [[31,32,33,34],[32,32,31],[33]], [[31,32,34,34],[32,32,31],[33]]), ([41,42,43], [42,42,41], [[41,42,43,44],[42,42,41],[43]], [[41,42,44,44],[42,42,41],[43]]); ---INSERT INTO test.arrays_test VALUES ([1,2,3], [1,2,1], [[1,2,3,4],[2,2,1],[3]], [[1,2,4,4],[2,2,1],[3]]), ([21,22,24], [21,22,21], [[21,22,23,24],[22,22,21],[23]], [[21,22,25,24],[22,22,21],[23]]); -INSERT INTO test.arrays_test VALUES ([1,1,1], [1,1,1], [[1,1,1],[1,1,1],[1]], [[1,1,1],[1,1,1],[1]]); -INSERT INTO test.arrays_test VALUES ([1,2,3], [4,5,6], [[7,8,9],[10,11,12],[13]], [[14,15,16],[17,18,19],[20]]); +--INSERT INTO arrays_test VALUES ([1,2,3], [2,2,1], [[1,2,3,4],[2,2,1],[3]], [[1,2,4,4],[2,2,1],[3]]), ([1,2,4], [2,2,1], [[1,2,3,4],[2,2,1],[3]], [[1,2,5,4],[2,2,1],[3]]), ([1,2,3], [2,2,1], [[1,2,3,4],[2,2,1],[3]], [[1,2,4,4],[2,2,1],[3]]), ([1,2,3], [2,2,1], [[1,2,3,4],[2,2,1],[3]], [[1,2,4,4],[2,2,1],[3]]); +INSERT INTO arrays_test VALUES ([1,2,3], [2,2,1], [[1,2,3,4],[2,2,1],[3]], [[1,2,4,4],[2,2,1],[3]]), ([21,22,24], [22,22,21], [[21,22,23,24],[22,22,21],[23]], [[21,22,25,24],[22,22,21],[23]]), ([31,32,33], [32,32,31], [[31,32,33,34],[32,32,31],[33]], [[31,32,34,34],[32,32,31],[33]]), ([41,42,43], [42,42,41], [[41,42,43,44],[42,42,41],[43]], [[41,42,44,44],[42,42,41],[43]]); +--INSERT INTO arrays_test VALUES ([1,2,3], [1,2,1], [[1,2,3,4],[2,2,1],[3]], [[1,2,4,4],[2,2,1],[3]]), ([21,22,24], [21,22,21], [[21,22,23,24],[22,22,21],[23]], [[21,22,25,24],[22,22,21],[23]]); +INSERT INTO arrays_test VALUES ([1,1,1], [1,1,1], [[1,1,1],[1,1,1],[1]], [[1,1,1],[1,1,1],[1]]); +INSERT INTO arrays_test VALUES ([1,2,3], [4,5,6], [[7,8,9],[10,11,12],[13]], [[14,15,16],[17,18,19],[20]]); -SELECT * FROM test.arrays_test ORDER BY a1, a2; +SELECT * FROM arrays_test ORDER BY a1, a2; select '---------GO1'; -SELECT '1,a1,1', arrayEnumerateUniqRanked(1,a1,1) FROM test.arrays_test ORDER BY a1, a2; -SELECT '1,a2,1', arrayEnumerateUniqRanked(1,a2,1) FROM test.arrays_test ORDER BY a1, a2; -SELECT '1,a3,1', arrayEnumerateUniqRanked(1,a3,1) FROM test.arrays_test ORDER BY a1, a2; -SELECT '1,a4,1', arrayEnumerateUniqRanked(1,a4,1) FROM test.arrays_test ORDER BY a1, a2; +SELECT '1,a1,1', arrayEnumerateUniqRanked(1,a1,1) FROM arrays_test ORDER BY a1, a2; +SELECT '1,a2,1', arrayEnumerateUniqRanked(1,a2,1) FROM arrays_test ORDER BY a1, a2; +SELECT '1,a3,1', arrayEnumerateUniqRanked(1,a3,1) FROM arrays_test ORDER BY a1, a2; +SELECT '1,a4,1', arrayEnumerateUniqRanked(1,a4,1) FROM arrays_test ORDER BY a1, a2; SELECT 'arrayEnumerateUniqRanked(1,a1,1,a2,1) ='; -SELECT '1,a1,1,a2,1', arrayEnumerateUniqRanked(1,a1,1,a2,1) FROM test.arrays_test ORDER BY a1, a2; +SELECT '1,a1,1,a2,1', arrayEnumerateUniqRanked(1,a1,1,a2,1) FROM arrays_test ORDER BY a1, a2; select 'arrayEnumerateUniq(a1, a2) ='; -SELECT arrayEnumerateUniq(a1, a2) FROM test.arrays_test ORDER BY a1, a2; +SELECT arrayEnumerateUniq(a1, a2) FROM arrays_test ORDER BY a1, a2; select '---------GO2'; -SELECT '1,a3,1,a4,1', arrayEnumerateUniqRanked(1,a3,1,a4,1) FROM test.arrays_test ORDER BY a1, a2; -SELECT '1,a3,2,a4,1', arrayEnumerateUniqRanked(1,a3,2,a4,1) FROM test.arrays_test ORDER BY a1, a2; -SELECT '1,a3,1,a4,2', arrayEnumerateUniqRanked(1,a3,1,a4,2) FROM test.arrays_test ORDER BY a1, a2; -SELECT '1,a3,2,a4,2', arrayEnumerateUniqRanked(1,a3,2,a4,2) FROM test.arrays_test ORDER BY a1, a2; -SELECT '2,a3,2,a4,2', arrayEnumerateUniqRanked(2,a3,2,a4,2) FROM test.arrays_test ORDER BY a1, a2; -SELECT '2,a3,2,a4,1', arrayEnumerateUniqRanked(2,a3,2,a4,1) FROM test.arrays_test ORDER BY a1, a2; -SELECT '2,a3,1,a4,2', arrayEnumerateUniqRanked(2,a3,1,a4,2) FROM test.arrays_test ORDER BY a1, a2; +SELECT '1,a3,1,a4,1', arrayEnumerateUniqRanked(1,a3,1,a4,1) FROM arrays_test ORDER BY a1, a2; +SELECT '1,a3,2,a4,1', arrayEnumerateUniqRanked(1,a3,2,a4,1) FROM arrays_test ORDER BY a1, a2; +SELECT '1,a3,1,a4,2', arrayEnumerateUniqRanked(1,a3,1,a4,2) FROM arrays_test ORDER BY a1, a2; +SELECT '1,a3,2,a4,2', arrayEnumerateUniqRanked(1,a3,2,a4,2) FROM arrays_test ORDER BY a1, a2; +SELECT '2,a3,2,a4,2', arrayEnumerateUniqRanked(2,a3,2,a4,2) FROM arrays_test ORDER BY a1, a2; +SELECT '2,a3,2,a4,1', arrayEnumerateUniqRanked(2,a3,2,a4,1) FROM arrays_test ORDER BY a1, a2; +SELECT '2,a3,1,a4,2', arrayEnumerateUniqRanked(2,a3,1,a4,2) FROM arrays_test ORDER BY a1, a2; select '---------END'; -DROP TABLE test.arrays_test; +DROP TABLE arrays_test; select '---------BAD'; SELECT arrayEnumerateUniqRanked(); -- { serverError 42 } diff --git a/dbms/tests/queries/0_stateless/00909_kill_not_initialized_query.sh b/dbms/tests/queries/0_stateless/00909_kill_not_initialized_query.sh index 72c61b55cbf..d8a4f29b30f 100755 --- a/dbms/tests/queries/0_stateless/00909_kill_not_initialized_query.sh +++ b/dbms/tests/queries/0_stateless/00909_kill_not_initialized_query.sh @@ -6,24 +6,24 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.cannot_kill_query" -$CLICKHOUSE_CLIENT -q "CREATE TABLE test.cannot_kill_query (x UInt64) ENGINE = MergeTree ORDER BY x" &> /dev/null -$CLICKHOUSE_CLIENT -q "INSERT INTO test.cannot_kill_query SELECT * FROM numbers(10000000)" &> /dev/null +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS cannot_kill_query" +$CLICKHOUSE_CLIENT -q "CREATE TABLE cannot_kill_query (x UInt64) ENGINE = MergeTree ORDER BY x" &> /dev/null +$CLICKHOUSE_CLIENT -q "INSERT INTO cannot_kill_query SELECT * FROM numbers(10000000)" &> /dev/null # This SELECT query will run for a long time. It's used as bloker for ALTER query. It will be killed with SYNC kill. -query_for_pending="SELECT count() FROM test.cannot_kill_query WHERE NOT ignore(sleep(1)) SETTINGS max_threads=1, max_block_size=1" +query_for_pending="SELECT count() FROM cannot_kill_query WHERE NOT ignore(sleep(1)) SETTINGS max_threads=1, max_block_size=1" $CLICKHOUSE_CLIENT -q "$query_for_pending" &>/dev/null & sleep 1 # queries should be in strict order # This ALTER query will wait until $query_for_pending finished. Also it will block $query_to_kill. -$CLICKHOUSE_CLIENT -q "ALTER TABLE test.cannot_kill_query MODIFY COLUMN x UInt64" &>/dev/null & +$CLICKHOUSE_CLIENT -q "ALTER TABLE cannot_kill_query MODIFY COLUMN x UInt64" &>/dev/null & sleep 1 # This SELECT query will also run for a long time. Also it's blocked by ALTER query. It will be killed with ASYNC kill. # This is main idea which we check -- blocked queries can be killed with ASYNC kill. -query_to_kill="SELECT sum(1) FROM test.cannot_kill_query WHERE NOT ignore(sleep(1)) SETTINGS max_threads=1" +query_to_kill="SELECT sum(1) FROM cannot_kill_query WHERE NOT ignore(sleep(1)) SETTINGS max_threads=1" $CLICKHOUSE_CLIENT -q "$query_to_kill" &>/dev/null & sleep 1 # just to be sure that kill of $query_to_kill will be executed after $query_to_kill. @@ -48,4 +48,4 @@ do fi done -$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS test.cannot_kill_query" &>/dev/null +$CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS cannot_kill_query" &>/dev/null diff --git a/dbms/tests/queries/0_stateless/00909_ngram_distance.sql b/dbms/tests/queries/0_stateless/00909_ngram_distance.sql index 867e69f4fe7..ea7bd252fc7 100644 --- a/dbms/tests/queries/0_stateless/00909_ngram_distance.sql +++ b/dbms/tests/queries/0_stateless/00909_ngram_distance.sql @@ -14,17 +14,17 @@ select round(1000 * ngramDistanceUTF8('абвгдеёжз', 'абвгдеёж')) select round(1000 * ngramDistanceUTF8('абвгдеёжз', 'гдеёзд')); select round(1000 * ngramDistanceUTF8('абвгдеёжз', 'ёёёёёёёё')); -drop table if exists test.test_distance; -create table test.test_distance (Title String) engine = Memory; -insert into test.test_distance values ('привет как дела?... Херсон'), ('привет как дела клип - Яндекс.Видео'), ('привет'), ('пап привет как дела - Яндекс.Видео'), ('привет братан как дела - Яндекс.Видео'), ('http://metric.ru/'), ('http://autometric.ru/'), ('http://metrica.yandex.com/'), ('http://metris.ru/'), ('http://metrika.ru/'), (''); +drop table if exists test_distance; +create table test_distance (Title String) engine = Memory; +insert into test_distance values ('привет как дела?... Херсон'), ('привет как дела клип - Яндекс.Видео'), ('привет'), ('пап привет как дела - Яндекс.Видео'), ('привет братан как дела - Яндекс.Видео'), ('http://metric.ru/'), ('http://autometric.ru/'), ('http://metrica.yandex.com/'), ('http://metris.ru/'), ('http://metrika.ru/'), (''); -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceUTF8(Title, 'привет как дела') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceUTF8(Title, 'как привет дела') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceUTF8(Title, 'metrika') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceUTF8(Title, 'metrica') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceUTF8(Title, 'metriks') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceUTF8(Title, 'metrics') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceUTF8(Title, 'yandex') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceUTF8(Title, 'привет как дела') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceUTF8(Title, 'как привет дела') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceUTF8(Title, 'metrika') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceUTF8(Title, 'metrica') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceUTF8(Title, 'metriks') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceUTF8(Title, 'metrics') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceUTF8(Title, 'yandex') as distance; select round(1000 * ngramDistanceCaseInsensitiveUTF8(materialize(''), '')) from system.numbers limit 5; @@ -43,15 +43,15 @@ select round(1000 * ngramDistanceCaseInsensitiveUTF8('аБВГдеёЖз', 'Аб select round(1000 * ngramDistanceCaseInsensitiveUTF8('абвгдеёжз', 'гдеёЗД')); select round(1000 * ngramDistanceCaseInsensitiveUTF8('АБВГДеёжз', 'ЁЁЁЁЁЁЁЁ')); -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'ПрИвЕт кАК ДЕЛа') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'как ПРИВЕТ дела') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'metrika') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'Metrika') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'mEtrica') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'metriKS') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'metrics') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'YanDEX') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'приВЕТ КАк ДеЛа КлИп - яндеКс.видео') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'ПрИвЕт кАК ДЕЛа') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'как ПРИВЕТ дела') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'metrika') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'Metrika') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'mEtrica') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'metriKS') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'metrics') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'YanDEX') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitiveUTF8(Title, 'приВЕТ КАк ДеЛа КлИп - яндеКс.видео') as distance; select round(1000 * ngramDistance(materialize(''), '')) from system.numbers limit 5; @@ -70,13 +70,13 @@ select round(1000 * ngramDistance('abcdefgh', 'abcdefg')); select round(1000 * ngramDistance('abcdefgh', 'defgh')); select round(1000 * ngramDistance('abcdefgh', 'aaaaaaaa')); -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistance(Title, 'привет как дела') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistance(Title, 'как привет дела') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistance(Title, 'metrika') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistance(Title, 'metrica') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistance(Title, 'metriks') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistance(Title, 'metrics') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistance(Title, 'yandex') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistance(Title, 'привет как дела') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistance(Title, 'как привет дела') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistance(Title, 'metrika') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistance(Title, 'metrica') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistance(Title, 'metriks') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistance(Title, 'metrics') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistance(Title, 'yandex') as distance; select round(1000 * ngramDistanceCaseInsensitive(materialize(''), '')) from system.numbers limit 5; select round(1000 * ngramDistanceCaseInsensitive(materialize('abc'), '')) from system.numbers limit 5; @@ -94,13 +94,13 @@ select round(1000 * ngramDistanceCaseInsensitive('abcdefgh', 'abcdeFG')); select round(1000 * ngramDistanceCaseInsensitive('AAAAbcdefgh', 'defgh')); select round(1000 * ngramDistanceCaseInsensitive('ABCdefgH', 'aaaaaaaa')); -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitive(Title, 'ПрИвЕт кАК ДЕЛа') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitive(Title, 'как ПРИВЕТ дела') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitive(Title, 'metrika') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitive(Title, 'Metrika') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitive(Title, 'mEtrica') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitive(Title, 'metriKS') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitive(Title, 'metrics') as distance; -SELECT Title, round(1000 * distance) FROM test.test_distance ORDER BY ngramDistanceCaseInsensitive(Title, 'YanDEX') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitive(Title, 'ПрИвЕт кАК ДЕЛа') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitive(Title, 'как ПРИВЕТ дела') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitive(Title, 'metrika') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitive(Title, 'Metrika') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitive(Title, 'mEtrica') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitive(Title, 'metriKS') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitive(Title, 'metrics') as distance; +SELECT Title, round(1000 * distance) FROM test_distance ORDER BY ngramDistanceCaseInsensitive(Title, 'YanDEX') as distance; -drop table if exists test.test_distance; +drop table if exists test_distance; diff --git a/dbms/tests/queries/0_stateless/00910_decimal_group_array_crash_3783.sql b/dbms/tests/queries/0_stateless/00910_decimal_group_array_crash_3783.sql index f18d6b89594..bec1a23a5da 100644 --- a/dbms/tests/queries/0_stateless/00910_decimal_group_array_crash_3783.sql +++ b/dbms/tests/queries/0_stateless/00910_decimal_group_array_crash_3783.sql @@ -1,5 +1,3 @@ -USE test; - select groupArray(s) from (select sum(n) s from (select toDecimal32(1, 2) as n)); select groupArray(s) from (select sum(n) s from (select toDecimal64(1, 5) as n)); select groupArray(s) from (select sum(n) s from (select toDecimal128(1, 10) as n)); diff --git a/dbms/tests/queries/0_stateless/00913_many_threads.sql b/dbms/tests/queries/0_stateless/00913_many_threads.sql index fa567582b21..7714a1ab782 100644 --- a/dbms/tests/queries/0_stateless/00913_many_threads.sql +++ b/dbms/tests/queries/0_stateless/00913_many_threads.sql @@ -1,6 +1,8 @@ -- This test creates many threads to test a case when ThreadPool will remove some threads from pool after job is done. SET max_block_size = 1, min_insert_block_size_rows = 0, min_insert_block_size_bytes = 0; +USE test; + CREATE TEMPORARY TABLE t (x UInt64); INSERT INTO t SELECT * FROM system.numbers LIMIT 1500; diff --git a/dbms/tests/queries/0_stateless/00914_join_bgranvea.sql b/dbms/tests/queries/0_stateless/00914_join_bgranvea.sql index 4f7820efbbb..11cd082a660 100644 --- a/dbms/tests/queries/0_stateless/00914_join_bgranvea.sql +++ b/dbms/tests/queries/0_stateless/00914_join_bgranvea.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS table1; DROP TABLE IF EXISTS table2; diff --git a/dbms/tests/queries/0_stateless/00916_add_materialized_column_after.reference b/dbms/tests/queries/0_stateless/00916_add_materialized_column_after.reference index a5e38b8e2a7..8b78d0c27d3 100644 --- a/dbms/tests/queries/0_stateless/00916_add_materialized_column_after.reference +++ b/dbms/tests/queries/0_stateless/00916_add_materialized_column_after.reference @@ -1,3 +1,3 @@ -x UInt32 -y String MATERIALIZED toString(x) -z UInt64 +x UInt32 +y String MATERIALIZED toString(x) +z UInt64 diff --git a/dbms/tests/queries/0_stateless/00916_add_materialized_column_after.sql b/dbms/tests/queries/0_stateless/00916_add_materialized_column_after.sql index 125872a9510..b52a471b2b7 100644 --- a/dbms/tests/queries/0_stateless/00916_add_materialized_column_after.sql +++ b/dbms/tests/queries/0_stateless/00916_add_materialized_column_after.sql @@ -1,8 +1,8 @@ -DROP TABLE IF EXISTS test.add_materialized_column_after; +DROP TABLE IF EXISTS add_materialized_column_after; -CREATE TABLE test.add_materialized_column_after (x UInt32, z UInt64) ENGINE MergeTree ORDER BY x; -ALTER TABLE test.add_materialized_column_after ADD COLUMN y MATERIALIZED toString(x) AFTER x; +CREATE TABLE add_materialized_column_after (x UInt32, z UInt64) ENGINE MergeTree ORDER BY x; +ALTER TABLE add_materialized_column_after ADD COLUMN y MATERIALIZED toString(x) AFTER x; -DESC TABLE test.add_materialized_column_after; +DESC TABLE add_materialized_column_after; -DROP TABLE test.add_materialized_column_after; +DROP TABLE add_materialized_column_after; diff --git a/dbms/tests/queries/0_stateless/00917_multiple_joins_denny_crane.sql b/dbms/tests/queries/0_stateless/00917_multiple_joins_denny_crane.sql index cf227ef0e8b..9b59799ad27 100644 --- a/dbms/tests/queries/0_stateless/00917_multiple_joins_denny_crane.sql +++ b/dbms/tests/queries/0_stateless/00917_multiple_joins_denny_crane.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS ANIMAL; CREATE TABLE ANIMAL ( ANIMAL Nullable(String) ) engine = TinyLog; diff --git a/dbms/tests/queries/0_stateless/00925_zookeeper_empty_replicated_merge_tree_optimize_final.sql b/dbms/tests/queries/0_stateless/00925_zookeeper_empty_replicated_merge_tree_optimize_final.sql index 6903209c5c4..a79462bf77f 100644 --- a/dbms/tests/queries/0_stateless/00925_zookeeper_empty_replicated_merge_tree_optimize_final.sql +++ b/dbms/tests/queries/0_stateless/00925_zookeeper_empty_replicated_merge_tree_optimize_final.sql @@ -1,9 +1,9 @@ -DROP TABLE IF EXISTS test.replicated_optimize1; -DROP TABLE IF EXISTS test.replicated_optimize2; -CREATE TABLE test.replicated_optimize1 (d Date, k UInt64, i32 Int32) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test/optimize', 'r1', d, k, 8192); -CREATE TABLE test.replicated_optimize2 (d Date, k UInt64, i32 Int32) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test/optimize', 'r2', d, k, 8192); +DROP TABLE IF EXISTS replicated_optimize1; +DROP TABLE IF EXISTS replicated_optimize2; +CREATE TABLE replicated_optimize1 (d Date, k UInt64, i32 Int32) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test/optimize', 'r1', d, k, 8192); +CREATE TABLE replicated_optimize2 (d Date, k UInt64, i32 Int32) ENGINE=ReplicatedMergeTree('/clickhouse/tables/test/optimize', 'r2', d, k, 8192); -OPTIMIZE TABLE test.replicated_optimize1 FINAL; +OPTIMIZE TABLE replicated_optimize1 FINAL; -DROP TABLE test.replicated_optimize1; -DROP TABLE test.replicated_optimize2; +DROP TABLE replicated_optimize1; +DROP TABLE replicated_optimize2; diff --git a/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_collapsing_merge_tree.reference b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_collapsing_merge_tree.reference new file mode 100644 index 00000000000..e5e283f754b --- /dev/null +++ b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_collapsing_merge_tree.reference @@ -0,0 +1,11 @@ +4 +4 +8 +7 +----- +4 +1 +0 +0 +6 +2 diff --git a/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_collapsing_merge_tree.sql b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_collapsing_merge_tree.sql new file mode 100644 index 00000000000..669250625f2 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_collapsing_merge_tree.sql @@ -0,0 +1,73 @@ +----- Group of very similar simple tests ------ +DROP TABLE IF EXISTS test.zero_rows_per_granule; + +CREATE TABLE test.zero_rows_per_granule ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64, + Sign Int8 +) ENGINE CollapsingMergeTree(Sign) PARTITION BY toYYYYMM(p) ORDER BY k + SETTINGS index_granularity_bytes=20, + enable_vertical_merge_algorithm=1, + vertical_merge_algorithm_min_rows_to_activate=0, + vertical_merge_algorithm_min_columns_to_activate=0; + +INSERT INTO test.zero_rows_per_granule (p, k, v1, v2, Sign) VALUES ('2018-05-15', 1, 1000, 2000, 1), ('2018-05-16', 2, 3000, 4000, 1), ('2018-05-17', 3, 5000, 6000, 1), ('2018-05-18', 4, 7000, 8000, 1); + +SELECT COUNT(*) FROM test.zero_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'zero_rows_per_granule' and database='test' and active=1; + +INSERT INTO test.zero_rows_per_granule (p, k, v1, v2, Sign) VALUES ('2018-05-15', 5, 1000, 2000, 1), ('2018-05-16', 6, 3000, 4000, 1), ('2018-05-17', 7, 5000, 6000, 1), ('2018-05-19', 8, 7000, 8000, 1); + +OPTIMIZE TABLE test.zero_rows_per_granule FINAL; + +SELECT COUNT(*) FROM test.zero_rows_per_granule FINAL; + +SELECT sum(marks) from system.parts WHERE table = 'zero_rows_per_granule' and database='test' and active=1; + +DROP TABLE IF EXISTS test.zero_rows_per_granule; + +SELECT '-----'; +DROP TABLE IF EXISTS test.four_rows_per_granule; + +CREATE TABLE test.four_rows_per_granule ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64, + Sign Int8 +) ENGINE CollapsingMergeTree(Sign) PARTITION BY toYYYYMM(p) ORDER BY k + SETTINGS index_granularity_bytes=110, + enable_vertical_merge_algorithm=1, + vertical_merge_algorithm_min_rows_to_activate=0, + vertical_merge_algorithm_min_columns_to_activate=0; + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2, Sign) VALUES ('2018-05-15', 1, 1000, 2000, 1), ('2018-05-16', 2, 3000, 4000, 1), ('2018-05-17', 3, 5000, 6000, 1), ('2018-05-18', 4, 7000, 8000, 1); + +SELECT COUNT(*) FROM test.four_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule' and database='test' and active=1; + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2, Sign) VALUES ('2018-05-15', 1, 1000, 2000, -1), ('2018-05-16', 2, 3000, 4000, -1), ('2018-05-17', 3, 5000, 6000, -1), ('2018-05-18', 4, 7000, 8000, -1); + +OPTIMIZE TABLE test.four_rows_per_granule FINAL; + +SELECT COUNT(*) FROM test.four_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule' and database='test' and active=1; + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2, Sign) VALUES ('2018-05-15', 1, 1000, 2000, 1), ('2018-05-16', 2, 3000, 4000, 1), ('2018-05-17', 3, 5000, 6000, 1), ('2018-05-18', 4, 7000, 8000, 1); + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2, Sign) VALUES ('2018-05-15', 5, 1000, 2000, 1), ('2018-05-16', 6, 3000, 4000, 1), ('2018-05-17', 7, 5000, 6000, 1), ('2018-05-18', 8, 7000, 8000, 1); + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2, Sign) VALUES ('2018-05-15', 5, 1000, 2000, -1), ('2018-05-17', 7, 5000, 6000, -1); + +OPTIMIZE TABLE test.four_rows_per_granule FINAL; + +SELECT COUNT(*) FROM test.four_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule' and database='test' and active=1; + +DROP TABLE IF EXISTS test.four_rows_per_granule; diff --git a/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_merge_tree.reference b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_merge_tree.reference new file mode 100644 index 00000000000..3e002b3899c --- /dev/null +++ b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_merge_tree.reference @@ -0,0 +1,66 @@ +----HORIZONTAL MERGE TESTS---- +4 +4 +8 +8 +----- +4 +2 +8 +4 +----- +4 +1 +8 +2 +----- +4 +1 +8 +1 +----- +4 +1 +4 +1 +8 +1 +42 42 +100 aaaa +101 bbbb +102 cccc +103 dddd +2 +----VERTICAL MERGE TESTS---- +4 +4 +8 +8 +----- +4 +2 +8 +4 +----- +4 +1 +8 +2 +----- +4 +1 +8 +2 +----- +4 +1 +4 +1 +8 +1 +42 42 +100 aaaa +101 bbbb +102 cccc +103 dddd +3 diff --git a/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_merge_tree.sql b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_merge_tree.sql new file mode 100644 index 00000000000..de289c40f5a --- /dev/null +++ b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_merge_tree.sql @@ -0,0 +1,363 @@ +----- Group of very similar simple tests ------ +select '----HORIZONTAL MERGE TESTS----'; +DROP TABLE IF EXISTS test.zero_rows_per_granule; + +CREATE TABLE test.zero_rows_per_granule ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE MergeTree() PARTITION BY toYYYYMM(p) ORDER BY k SETTINGS index_granularity_bytes = 20; + +INSERT INTO test.zero_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.zero_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'zero_rows_per_granule' and database='test' and active=1; + +INSERT INTO test.zero_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 5, 1000, 2000), ('2018-05-16', 6, 3000, 4000), ('2018-05-17', 7, 5000, 6000), ('2018-05-19', 8, 7000, 8000); + +OPTIMIZE TABLE test.zero_rows_per_granule FINAL; + +SELECT COUNT(*) FROM test.zero_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'zero_rows_per_granule' and database='test' and active=1; + +DROP TABLE IF EXISTS test.zero_rows_per_granule; + +SELECT '-----'; + +DROP TABLE IF EXISTS test.two_rows_per_granule; + +CREATE TABLE test.two_rows_per_granule ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE MergeTree() PARTITION BY toYYYYMM(p) ORDER BY k SETTINGS index_granularity_bytes = 40; + +INSERT INTO test.two_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.two_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'two_rows_per_granule' and database='test' and active=1; + +INSERT INTO test.two_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 5, 1000, 2000), ('2018-05-16', 6, 3000, 4000), ('2018-05-17', 7, 5000, 6000), ('2018-05-19', 8, 7000, 8000); + +OPTIMIZE TABLE test.two_rows_per_granule FINAL; + +SELECT COUNT(*) FROM test.two_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'two_rows_per_granule' and database='test' and active=1; + +DROP TABLE IF EXISTS test.two_rows_per_granule; + +SELECT '-----'; + +DROP TABLE IF EXISTS test.four_rows_per_granule; + +CREATE TABLE test.four_rows_per_granule ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE MergeTree() PARTITION BY toYYYYMM(p) ORDER BY k SETTINGS index_granularity_bytes = 110; + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.four_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule' and database='test' and active=1; +DETACH TABLE test.four_rows_per_granule; +ATTACH TABLE test.four_rows_per_granule; + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 5, 1000, 2000), ('2018-05-16', 6, 3000, 4000), ('2018-05-17', 7, 5000, 6000), ('2018-05-19', 8, 7000, 8000); + +OPTIMIZE TABLE test.four_rows_per_granule FINAL; + +DETACH TABLE test.four_rows_per_granule; + +ATTACH TABLE test.four_rows_per_granule; + +SELECT COUNT(*) FROM test.four_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule' and database='test' and active=1; + +DROP TABLE IF EXISTS test.four_rows_per_granule; + +----- More interesting tests ------ +SELECT '-----'; + +DROP TABLE IF EXISTS test.huge_granularity_small_blocks; + +CREATE TABLE test.huge_granularity_small_blocks ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE MergeTree() PARTITION BY toYYYYMM(p) ORDER BY k SETTINGS index_granularity_bytes = 1000000; + +INSERT INTO test.huge_granularity_small_blocks (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.huge_granularity_small_blocks; + +SELECT distinct(marks) from system.parts WHERE table = 'huge_granularity_small_blocks' and database='test' and active=1; + +INSERT INTO test.huge_granularity_small_blocks (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 5, 3000, 4000), ('2018-05-17', 6, 5000, 6000), ('2018-05-19', 7, 7000, 8000); + +DETACH TABLE test.huge_granularity_small_blocks; + +ATTACH TABLE test.huge_granularity_small_blocks; + +OPTIMIZE TABLE test.huge_granularity_small_blocks FINAL; + +SELECT COUNT(*) FROM test.huge_granularity_small_blocks; + +SELECT distinct(marks) from system.parts WHERE table = 'huge_granularity_small_blocks' and database='test' and active=1; + +DROP TABLE IF EXISTS test.huge_granularity_small_blocks; + +SELECT '-----'; + +DROP TABLE IF EXISTS test.adaptive_granularity_alter; + +CREATE TABLE test.adaptive_granularity_alter ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE MergeTree() PARTITION BY toYYYYMM(p) ORDER BY k SETTINGS index_granularity_bytes = 110; + +INSERT INTO test.adaptive_granularity_alter (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.adaptive_granularity_alter; + +SELECT distinct(marks) from system.parts WHERE table = 'adaptive_granularity_alter' and database='test' and active=1; + +OPTIMIZE TABLE test.adaptive_granularity_alter FINAL; + +ALTER TABLE test.adaptive_granularity_alter MODIFY COLUMN v1 Int16; + +DETACH TABLE test.adaptive_granularity_alter; + +ATTACH TABLE test.adaptive_granularity_alter; + +SELECT COUNT(*) FROM test.adaptive_granularity_alter; + +SELECT distinct(marks) from system.parts WHERE table = 'adaptive_granularity_alter' and database='test' and active=1; + +INSERT INTO test.adaptive_granularity_alter (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 5, 3000, 4000), ('2018-05-17', 6, 5000, 6000), ('2018-05-19', 42, 42, 42); + +SELECT COUNT(*) FROM test.adaptive_granularity_alter; + +SELECT distinct(marks) from system.parts WHERE table = 'adaptive_granularity_alter' and database='test' and active=1; + +ALTER TABLE test.adaptive_granularity_alter MODIFY COLUMN v2 String; + +DETACH TABLE test.adaptive_granularity_alter; + +ATTACH TABLE test.adaptive_granularity_alter; + +INSERT INTO test.adaptive_granularity_alter (p, k, v1, v2) VALUES ('2018-05-15', 100, 1000, 'aaaa'), ('2018-05-16', 101, 3000, 'bbbb'), ('2018-05-17', 102, 5000, 'cccc'), ('2018-05-19', 103, 7000, 'dddd'); + +OPTIMIZE TABLE test.adaptive_granularity_alter FINAL; + +SELECT k, v2 FROM test.adaptive_granularity_alter WHERE k >= 100 OR k = 42; + +SELECT sum(marks) from system.parts WHERE table = 'adaptive_granularity_alter' and database='test' and active=1; + +DROP TABLE IF EXISTS test.adaptive_granularity_alter; + +----------------------------------------------- +-------------VERTICAL MERGE TESTS-------------- +----------------------------------------------- +select '----VERTICAL MERGE TESTS----'; +DROP TABLE IF EXISTS test.zero_rows_per_granule; + +CREATE TABLE test.zero_rows_per_granule ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE MergeTree() PARTITION BY toYYYYMM(p) ORDER BY k + SETTINGS index_granularity_bytes=20, + enable_vertical_merge_algorithm=1, + vertical_merge_algorithm_min_rows_to_activate=0, + vertical_merge_algorithm_min_columns_to_activate=0; + + +INSERT INTO test.zero_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.zero_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'zero_rows_per_granule' and database='test' and active=1; + +INSERT INTO test.zero_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 5, 1000, 2000), ('2018-05-16', 6, 3000, 4000), ('2018-05-17', 7, 5000, 6000), ('2018-05-19', 8, 7000, 8000); + +OPTIMIZE TABLE test.zero_rows_per_granule FINAL; + +SELECT COUNT(*) FROM test.zero_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'zero_rows_per_granule' and database='test' and active=1; + +DROP TABLE IF EXISTS test.zero_rows_per_granule; + +SELECT '-----'; + +DROP TABLE IF EXISTS test.two_rows_per_granule; + +CREATE TABLE test.two_rows_per_granule ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE MergeTree() PARTITION BY toYYYYMM(p) ORDER BY k + SETTINGS index_granularity_bytes=40, + enable_vertical_merge_algorithm=1, + vertical_merge_algorithm_min_rows_to_activate=0, + vertical_merge_algorithm_min_columns_to_activate=0; + +INSERT INTO test.two_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.two_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'two_rows_per_granule' and database='test' and active=1; + +INSERT INTO test.two_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 5, 1000, 2000), ('2018-05-16', 6, 3000, 4000), ('2018-05-17', 7, 5000, 6000), ('2018-05-19', 8, 7000, 8000); + +OPTIMIZE TABLE test.two_rows_per_granule FINAL; + +SELECT COUNT(*) FROM test.two_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'two_rows_per_granule' and database='test' and active=1; + +DROP TABLE IF EXISTS test.two_rows_per_granule; + +SELECT '-----'; + +DROP TABLE IF EXISTS test.four_rows_per_granule; + +CREATE TABLE test.four_rows_per_granule ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE MergeTree() PARTITION BY toYYYYMM(p) ORDER BY k + SETTINGS index_granularity_bytes = 110, + enable_vertical_merge_algorithm=1, + vertical_merge_algorithm_min_rows_to_activate=0, + vertical_merge_algorithm_min_columns_to_activate=0; + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.four_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule' and database='test' and active=1; +DETACH TABLE test.four_rows_per_granule; +ATTACH TABLE test.four_rows_per_granule; + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 5, 1000, 2000), ('2018-05-16', 6, 3000, 4000), ('2018-05-17', 7, 5000, 6000), ('2018-05-19', 8, 7000, 8000); + +OPTIMIZE TABLE test.four_rows_per_granule FINAL; + +DETACH TABLE test.four_rows_per_granule; + +ATTACH TABLE test.four_rows_per_granule; + +SELECT COUNT(*) FROM test.four_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule' and database='test' and active=1; + +DROP TABLE IF EXISTS test.four_rows_per_granule; + +----- More interesting tests ------ +SELECT '-----'; + +DROP TABLE IF EXISTS test.huge_granularity_small_blocks; + +CREATE TABLE test.huge_granularity_small_blocks ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE MergeTree() PARTITION BY toYYYYMM(p) ORDER BY k + SETTINGS index_granularity_bytes=1000000, + enable_vertical_merge_algorithm=1, + vertical_merge_algorithm_min_rows_to_activate=0, + vertical_merge_algorithm_min_columns_to_activate=0; + +INSERT INTO test.huge_granularity_small_blocks (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.huge_granularity_small_blocks; + +SELECT distinct(marks) from system.parts WHERE table = 'huge_granularity_small_blocks' and database='test' and active=1; + +INSERT INTO test.huge_granularity_small_blocks (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 5, 3000, 4000), ('2018-05-17', 6, 5000, 6000), ('2018-05-19', 7, 7000, 8000); + +DETACH TABLE test.huge_granularity_small_blocks; + +ATTACH TABLE test.huge_granularity_small_blocks; + +OPTIMIZE TABLE test.huge_granularity_small_blocks FINAL; + +SELECT COUNT(*) FROM test.huge_granularity_small_blocks; + +SELECT distinct(marks) from system.parts WHERE table = 'huge_granularity_small_blocks' and database='test' and active=1; + +DROP TABLE IF EXISTS test.huge_granularity_small_blocks; + +SELECT '-----'; + +DROP TABLE IF EXISTS test.adaptive_granularity_alter; + +CREATE TABLE test.adaptive_granularity_alter ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE MergeTree() PARTITION BY toYYYYMM(p) ORDER BY k + SETTINGS index_granularity_bytes=110, + enable_vertical_merge_algorithm=1, + vertical_merge_algorithm_min_rows_to_activate=0, + vertical_merge_algorithm_min_columns_to_activate=0; + + +INSERT INTO test.adaptive_granularity_alter (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.adaptive_granularity_alter; + +SELECT distinct(marks) from system.parts WHERE table = 'adaptive_granularity_alter' and database='test' and active=1; + +OPTIMIZE TABLE test.adaptive_granularity_alter FINAL; + +ALTER TABLE test.adaptive_granularity_alter MODIFY COLUMN v1 Int16; + +DETACH TABLE test.adaptive_granularity_alter; + +ATTACH TABLE test.adaptive_granularity_alter; + +SELECT COUNT(*) FROM test.adaptive_granularity_alter; + +SELECT distinct(marks) from system.parts WHERE table = 'adaptive_granularity_alter' and database='test' and active=1; + +INSERT INTO test.adaptive_granularity_alter (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 5, 3000, 4000), ('2018-05-17', 6, 5000, 6000), ('2018-05-19', 42, 42, 42); + +SELECT COUNT(*) FROM test.adaptive_granularity_alter; + +SELECT distinct(marks) from system.parts WHERE table = 'adaptive_granularity_alter' and database='test' and active=1; + +ALTER TABLE test.adaptive_granularity_alter MODIFY COLUMN v2 String; + +DETACH TABLE test.adaptive_granularity_alter; + +ATTACH TABLE test.adaptive_granularity_alter; + +INSERT INTO test.adaptive_granularity_alter (p, k, v1, v2) VALUES ('2018-05-15', 100, 1000, 'aaaa'), ('2018-05-16', 101, 3000, 'bbbb'), ('2018-05-17', 102, 5000, 'cccc'), ('2018-05-19', 103, 7000, 'dddd'); + +OPTIMIZE TABLE test.adaptive_granularity_alter FINAL; + +SELECT k, v2 FROM test.adaptive_granularity_alter WHERE k >= 100 OR k = 42; + +SELECT sum(marks) from system.parts WHERE table = 'adaptive_granularity_alter' and database='test' and active=1; + +DROP TABLE IF EXISTS test.adaptive_granularity_alter; diff --git a/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_pk.reference b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_pk.reference new file mode 100644 index 00000000000..a5daa54856d --- /dev/null +++ b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_pk.reference @@ -0,0 +1,31 @@ +----00489---- +1 11 1235 +2 11 4395 +3 22 3545 +4 22 6984 +5 33 4596 +123 33 1235 +121 33 2791 +122 33 2791 +125 44 4578 +124 44 4935 +128 55 1235 +127 55 2791 +126 55 5786 +1 11 1235 +63 11 3572 +61 11 4563 +62 11 4578 +63 11 3572 +61 11 4563 +62 11 4578 +----00607---- +1 +1 +1 +1 +1 +1 +----00804---- +2 +1 diff --git a/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_pk.sql b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_pk.sql new file mode 100644 index 00000000000..eaececd68e4 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_pk.sql @@ -0,0 +1,85 @@ +SET send_logs_level = 'none'; +SELECT '----00489----'; +DROP TABLE IF EXISTS test.pk; + +CREATE TABLE test.pk (d Date DEFAULT '2000-01-01', x DateTime, y UInt64, z UInt64) ENGINE = MergeTree() PARTITION BY d ORDER BY (toStartOfMinute(x), y, z) SETTINGS index_granularity_bytes=19; -- one row granule + +INSERT INTO test.pk (x, y, z) VALUES (1, 11, 1235), (2, 11, 4395), (3, 22, 3545), (4, 22, 6984), (5, 33, 4596), (61, 11, 4563), (62, 11, 4578), (63, 11, 3572), (64, 22, 5786), (65, 22, 5786), (66, 22, 2791), (67, 22, 2791), (121, 33, 2791), (122, 33, 2791), (123, 33, 1235), (124, 44, 4935), (125, 44, 4578), (126, 55, 5786), (127, 55, 2791), (128, 55, 1235); + +SET max_block_size = 1; + +-- Test inferred limit +SET max_rows_to_read = 5; +SELECT toUInt32(x), y, z FROM test.pk WHERE x BETWEEN toDateTime(0) AND toDateTime(59); + +SET max_rows_to_read = 9; +SELECT toUInt32(x), y, z FROM test.pk WHERE x BETWEEN toDateTime(120) AND toDateTime(240); + +-- Index is coarse, cannot read single row +SET max_rows_to_read = 5; +SELECT toUInt32(x), y, z FROM test.pk WHERE x = toDateTime(1); + +-- Index works on interval 00:01:00 - 00:01:59 +SET max_rows_to_read = 4; +SELECT toUInt32(x), y, z FROM test.pk WHERE x BETWEEN toDateTime(60) AND toDateTime(119) AND y = 11; + +-- Cannot read less rows as PK is coarser on interval 00:01:00 - 00:02:00 +SET max_rows_to_read = 5; +SELECT toUInt32(x), y, z FROM test.pk WHERE x BETWEEN toDateTime(60) AND toDateTime(120) AND y = 11; + +DROP TABLE test.pk; + +SET max_block_size = 8192; +SELECT '----00607----'; + +SET max_rows_to_read = 0; +DROP TABLE IF EXISTS test.merge_tree; +CREATE TABLE test.merge_tree (x UInt32) ENGINE = MergeTree ORDER BY x SETTINGS index_granularity_bytes = 4; +INSERT INTO test.merge_tree VALUES (0), (1); + +SET force_primary_key = 1; +SET max_rows_to_read = 1; + +SELECT count() FROM test.merge_tree WHERE x = 0; +SELECT count() FROM test.merge_tree WHERE toUInt32(x) = 0; +SELECT count() FROM test.merge_tree WHERE toUInt64(x) = 0; + +SELECT count() FROM test.merge_tree WHERE x IN (0, 0); +SELECT count() FROM test.merge_tree WHERE toUInt32(x) IN (0, 0); +SELECT count() FROM test.merge_tree WHERE toUInt64(x) IN (0, 0); + +DROP TABLE test.merge_tree; + +SELECT '----00804----'; +SET max_rows_to_read = 0; +SET force_primary_key = 0; + +DROP TABLE IF EXISTS test.large_alter_table; +DROP TABLE IF EXISTS test.store_of_hash; + +CREATE TABLE test.large_alter_table ( + somedate Date CODEC(ZSTD, ZSTD, ZSTD(12), LZ4HC(12)), + id UInt64 CODEC(LZ4, ZSTD, NONE, LZ4HC), + data String CODEC(ZSTD(2), LZ4HC, NONE, LZ4, LZ4) +) ENGINE = MergeTree() PARTITION BY somedate ORDER BY id SETTINGS index_granularity_bytes=40; + +INSERT INTO test.large_alter_table SELECT toDate('2019-01-01'), number, toString(number + rand()) FROM system.numbers LIMIT 300000; + +CREATE TABLE test.store_of_hash (hash UInt64) ENGINE = Memory(); + +INSERT INTO test.store_of_hash SELECT sum(cityHash64(*)) FROM test.large_alter_table; + +ALTER TABLE test.large_alter_table MODIFY COLUMN data CODEC(NONE, LZ4, LZ4HC, ZSTD); + +OPTIMIZE TABLE test.large_alter_table; + +DETACH TABLE test.large_alter_table; +ATTACH TABLE test.large_alter_table; + +INSERT INTO test.store_of_hash SELECT sum(cityHash64(*)) FROM test.large_alter_table; + +SELECT COUNT(hash) FROM test.store_of_hash; +SELECT COUNT(DISTINCT hash) FROM test.store_of_hash; + +DROP TABLE IF EXISTS test.large_alter_table; +DROP TABLE IF EXISTS test.store_of_hash; diff --git a/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_replacing_merge_tree.reference b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_replacing_merge_tree.reference new file mode 100644 index 00000000000..a418a89ccc5 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_replacing_merge_tree.reference @@ -0,0 +1,32 @@ +4 +4 +8 +7 +----- +4 +2 +8 +4 +----- +4 +1 +8 +2 +----- +4 +1 +8 +2 +----- +4 +1 +4 +1 +8 +2 +42 42 +100 aaaa +101 bbbb +102 cccc +103 dddd +3 diff --git a/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_replacing_merge_tree.sql b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_replacing_merge_tree.sql new file mode 100644 index 00000000000..14d3a18a8c5 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_replacing_merge_tree.sql @@ -0,0 +1,198 @@ +----- Group of very similar simple tests ------ +DROP TABLE IF EXISTS test.zero_rows_per_granule; + +CREATE TABLE test.zero_rows_per_granule ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE ReplacingMergeTree() PARTITION BY toYYYYMM(p) ORDER BY k + SETTINGS index_granularity_bytes=20, + enable_vertical_merge_algorithm=1, + vertical_merge_algorithm_min_rows_to_activate=0, + vertical_merge_algorithm_min_columns_to_activate=0; + +INSERT INTO test.zero_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.zero_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'zero_rows_per_granule' and database='test' and active=1; + +INSERT INTO test.zero_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 5, 1000, 2000), ('2018-05-16', 6, 3000, 4000), ('2018-05-17', 7, 5000, 6000), ('2018-05-19', 8, 7000, 8000); + +OPTIMIZE TABLE test.zero_rows_per_granule FINAL; + +SELECT COUNT(*) FROM test.zero_rows_per_granule FINAL; + +SELECT sum(marks) from system.parts WHERE table = 'zero_rows_per_granule' and database='test' and active=1; + +DROP TABLE IF EXISTS test.zero_rows_per_granule; + +SELECT '-----'; + +DROP TABLE IF EXISTS test.two_rows_per_granule; + +CREATE TABLE test.two_rows_per_granule ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE ReplacingMergeTree() PARTITION BY toYYYYMM(p) ORDER BY k + SETTINGS index_granularity_bytes=40, + enable_vertical_merge_algorithm=1, + vertical_merge_algorithm_min_rows_to_activate=0, + vertical_merge_algorithm_min_columns_to_activate=0; + +INSERT INTO test.two_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.two_rows_per_granule FINAL; + +SELECT distinct(marks) from system.parts WHERE table = 'two_rows_per_granule' and database='test' and active=1; + +INSERT INTO test.two_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 5, 1000, 2000), ('2018-05-16', 6, 3000, 4000), ('2018-05-17', 7, 5000, 6000), ('2018-05-19', 8, 7000, 8000); + +OPTIMIZE TABLE test.two_rows_per_granule FINAL; + +SELECT COUNT(*) FROM test.two_rows_per_granule FINAL; + +SELECT distinct(marks) from system.parts WHERE table = 'two_rows_per_granule' and database='test' and active=1; + +DROP TABLE IF EXISTS test.two_rows_per_granule; + +SELECT '-----'; + +DROP TABLE IF EXISTS test.four_rows_per_granule; + +CREATE TABLE test.four_rows_per_granule ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE ReplacingMergeTree() PARTITION BY toYYYYMM(p) ORDER BY k + SETTINGS index_granularity_bytes = 110, + enable_vertical_merge_algorithm=1, + vertical_merge_algorithm_min_rows_to_activate=0, + vertical_merge_algorithm_min_columns_to_activate=0; + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.four_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule' and database='test' and active=1; +DETACH TABLE test.four_rows_per_granule; +ATTACH TABLE test.four_rows_per_granule; + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 5, 1000, 2000), ('2018-05-16', 6, 3000, 4000), ('2018-05-17', 7, 5000, 6000), ('2018-05-19', 8, 7000, 8000); + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 5, 1000, 2000), ('2018-05-16', 6, 3000, 4000), ('2018-05-17', 7, 5000, 6000), ('2018-05-19', 8, 7000, 8000); + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 5, 1000, 2000), ('2018-05-16', 6, 3000, 4000), ('2018-05-17', 7, 5000, 6000), ('2018-05-19', 8, 7000, 8000); + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2) VALUES ('2018-05-15', 5, 1000, 2000), ('2018-05-16', 6, 3000, 4000), ('2018-05-17', 7, 5000, 6000), ('2018-05-19', 8, 7000, 8000); + +SELECT sleep(0.5) Format Null; + +OPTIMIZE TABLE test.four_rows_per_granule FINAL; + +DETACH TABLE test.four_rows_per_granule; + +ATTACH TABLE test.four_rows_per_granule; + +SELECT COUNT(*) FROM test.four_rows_per_granule FINAL; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule' and database='test' and active=1; + +DROP TABLE IF EXISTS test.four_rows_per_granule; + +----- More interesting tests ------ +SELECT '-----'; + +DROP TABLE IF EXISTS test.huge_granularity_small_blocks; + +CREATE TABLE test.huge_granularity_small_blocks ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE ReplacingMergeTree() PARTITION BY toYYYYMM(p) ORDER BY k + SETTINGS index_granularity_bytes=1000000, + enable_vertical_merge_algorithm=1, + vertical_merge_algorithm_min_rows_to_activate=0, + vertical_merge_algorithm_min_columns_to_activate=0; + +INSERT INTO test.huge_granularity_small_blocks (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.huge_granularity_small_blocks; + +SELECT distinct(marks) from system.parts WHERE table = 'huge_granularity_small_blocks' and database='test' and active=1; + +INSERT INTO test.huge_granularity_small_blocks (p, k, v1, v2) VALUES ('2018-05-15', 5, 1000, 2000), ('2018-05-16', 6, 3000, 4000), ('2018-05-17', 7, 5000, 6000), ('2018-05-19', 8, 7000, 8000); + +DETACH TABLE test.huge_granularity_small_blocks; + +ATTACH TABLE test.huge_granularity_small_blocks; + +OPTIMIZE TABLE test.huge_granularity_small_blocks FINAL; + +SELECT COUNT(*) FROM test.huge_granularity_small_blocks FINAL; + +SELECT distinct(marks) from system.parts WHERE table = 'huge_granularity_small_blocks' and database='test' and active=1; + +DROP TABLE IF EXISTS test.huge_granularity_small_blocks; + +----- Some alter tests ---- +SELECT '-----'; + +DROP TABLE IF EXISTS test.adaptive_granularity_alter; + +CREATE TABLE test.adaptive_granularity_alter ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE ReplacingMergeTree() PARTITION BY toYYYYMM(p) ORDER BY k + SETTINGS index_granularity_bytes=110, + enable_vertical_merge_algorithm=1, + vertical_merge_algorithm_min_rows_to_activate=0, + vertical_merge_algorithm_min_columns_to_activate=0; + +INSERT INTO test.adaptive_granularity_alter (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.adaptive_granularity_alter; + +SELECT distinct(marks) from system.parts WHERE table = 'adaptive_granularity_alter' and database='test' and active=1; + + +ALTER TABLE test.adaptive_granularity_alter MODIFY COLUMN v1 Int16; + +DETACH TABLE test.adaptive_granularity_alter; + +ATTACH TABLE test.adaptive_granularity_alter; + +SELECT COUNT(*) FROM test.adaptive_granularity_alter; + +SELECT distinct(marks) from system.parts WHERE table = 'adaptive_granularity_alter' and database='test' and active=1; + +INSERT INTO test.adaptive_granularity_alter (p, k, v1, v2) VALUES ('2018-05-15', 5, 1000, 2000), ('2018-05-16', 6, 3000, 4000), ('2018-05-17', 7, 5000, 6000), ('2018-05-19', 42, 42, 42); + +OPTIMIZE TABLE test.adaptive_granularity_alter FINAL; + +SELECT COUNT(*) FROM test.adaptive_granularity_alter; + +SELECT distinct(marks) from system.parts WHERE table = 'adaptive_granularity_alter' and database='test' and active=1; + +ALTER TABLE test.adaptive_granularity_alter MODIFY COLUMN v2 String; + +DETACH TABLE test.adaptive_granularity_alter; + +ATTACH TABLE test.adaptive_granularity_alter; + +INSERT INTO test.adaptive_granularity_alter (p, k, v1, v2) VALUES ('2018-05-15', 100, 1000, 'aaaa'), ('2018-05-16', 101, 3000, 'bbbb'), ('2018-05-17', 102, 5000, 'cccc'), ('2018-05-19', 103, 7000, 'dddd'); + +OPTIMIZE TABLE test.adaptive_granularity_alter FINAL; + +SELECT k, v2 FROM test.adaptive_granularity_alter WHERE k >= 100 OR k = 42; + +SELECT distinct(marks) from system.parts WHERE table = 'adaptive_granularity_alter' and database='test' and active=1; + +DROP TABLE IF EXISTS test.adaptive_granularity_alter; diff --git a/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_versioned_collapsing_merge_tree.reference b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_versioned_collapsing_merge_tree.reference new file mode 100644 index 00000000000..067189f73fc --- /dev/null +++ b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_versioned_collapsing_merge_tree.reference @@ -0,0 +1,16 @@ +4 +4 +8 +8 +----- +4 +1 +0 +0 +6 +2 +----- +6 +3 +0 +0 diff --git a/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_versioned_collapsing_merge_tree.sql b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_versioned_collapsing_merge_tree.sql new file mode 100644 index 00000000000..f27e0289aec --- /dev/null +++ b/dbms/tests/queries/0_stateless/00926_adaptive_index_granularity_versioned_collapsing_merge_tree.sql @@ -0,0 +1,119 @@ +----- Group of very similar simple tests ------ +DROP TABLE IF EXISTS test.zero_rows_per_granule; + +CREATE TABLE test.zero_rows_per_granule ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64, + Sign Int8, + Version UInt8 +) ENGINE VersionedCollapsingMergeTree(Sign, Version) PARTITION BY toYYYYMM(p) ORDER BY k + SETTINGS index_granularity_bytes=20, + enable_vertical_merge_algorithm=1, + vertical_merge_algorithm_min_rows_to_activate=0, + vertical_merge_algorithm_min_columns_to_activate=0; + +INSERT INTO test.zero_rows_per_granule (p, k, v1, v2, Sign, Version) VALUES ('2018-05-15', 1, 1000, 2000, 1, 1), ('2018-05-16', 2, 3000, 4000, 1, 1), ('2018-05-17', 3, 5000, 6000, 1, 1), ('2018-05-18', 4, 7000, 8000, 1, 1); + +SELECT COUNT(*) FROM test.zero_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'zero_rows_per_granule' and database='test' and active=1; + +INSERT INTO test.zero_rows_per_granule (p, k, v1, v2, Sign, Version) VALUES ('2018-05-15', 5, 1000, 2000, 1, 1), ('2018-05-16', 6, 3000, 4000, 1, 1), ('2018-05-17', 7, 5000, 6000, 1, 1), ('2018-05-19', 8, 7000, 8000, 1, 1); + +OPTIMIZE TABLE test.zero_rows_per_granule FINAL; + +SELECT COUNT(*) FROM test.zero_rows_per_granule FINAL; + +SELECT sum(marks) from system.parts WHERE table = 'zero_rows_per_granule' and database='test' and active=1; + +DROP TABLE IF EXISTS test.zero_rows_per_granule; + +SELECT '-----'; +DROP TABLE IF EXISTS test.four_rows_per_granule; + +CREATE TABLE test.four_rows_per_granule ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64, + Sign Int8, + Version UInt8 +) ENGINE VersionedCollapsingMergeTree(Sign, Version) PARTITION BY toYYYYMM(p) ORDER BY k + SETTINGS index_granularity_bytes=120, + enable_vertical_merge_algorithm=1, + vertical_merge_algorithm_min_rows_to_activate=0, + vertical_merge_algorithm_min_columns_to_activate=0; + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2, Sign, Version) VALUES ('2018-05-15', 1, 1000, 2000, 1, 1), ('2018-05-16', 2, 3000, 4000, 1, 1), ('2018-05-17', 3, 5000, 6000, 1, 1), ('2018-05-18', 4, 7000, 8000, 1, 1); + +SELECT COUNT(*) FROM test.four_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule' and database='test' and active=1; + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2, Sign, Version) VALUES ('2018-05-15', 1, 1000, 2000, -1, 1), ('2018-05-16', 2, 3000, 4000, -1, 1), ('2018-05-17', 3, 5000, 6000, -1, 1), ('2018-05-18', 4, 7000, 8000, -1, 1); + +OPTIMIZE TABLE test.four_rows_per_granule FINAL; + +SELECT COUNT(*) FROM test.four_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule' and database='test' and active=1; + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2, Sign, Version) VALUES ('2018-05-15', 1, 1000, 2000, 1, 1), ('2018-05-16', 2, 3000, 4000, 1, 1), ('2018-05-17', 3, 5000, 6000, 1, 1), ('2018-05-18', 4, 7000, 8000, 1, 1); + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2, Sign, Version) VALUES ('2018-05-15', 5, 1000, 2000, 1, 1), ('2018-05-16', 6, 3000, 4000, 1, 1), ('2018-05-17', 7, 5000, 6000, 1, 1), ('2018-05-18', 8, 7000, 8000, 1, 1); + +INSERT INTO test.four_rows_per_granule (p, k, v1, v2, Sign, Version) VALUES ('2018-05-15', 5, 1000, 2000, -1, 1), ('2018-05-17', 7, 5000, 6000, -1, 1); + +OPTIMIZE TABLE test.four_rows_per_granule FINAL; + +SELECT COUNT(*) FROM test.four_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule' and database='test' and active=1; + +DROP TABLE IF EXISTS test.four_rows_per_granule; + +SELECT '-----'; + +DROP TABLE IF EXISTS test.six_rows_per_granule; + +CREATE TABLE test.six_rows_per_granule ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64, + Sign Int8, + Version UInt8 +) ENGINE VersionedCollapsingMergeTree(Sign, Version) PARTITION BY toYYYYMM(p) ORDER BY k + SETTINGS index_granularity_bytes=170, + enable_vertical_merge_algorithm=1, + vertical_merge_algorithm_min_rows_to_activate=0, + vertical_merge_algorithm_min_columns_to_activate=0; + + +INSERT INTO test.six_rows_per_granule (p, k, v1, v2, Sign, Version) VALUES ('2018-05-15', 1, 1000, 2000, 1, 1), ('2018-05-16', 1, 1000, 2000, -1, 2); + +INSERT INTO test.six_rows_per_granule (p, k, v1, v2, Sign, Version) VALUES ('2018-05-15', 2, 1000, 2000, 1, 1), ('2018-05-16', 2, 1000, 2000, -1, 2); + +INSERT INTO test.six_rows_per_granule (p, k, v1, v2, Sign, Version) VALUES ('2018-05-15', 3, 1000, 2000, 1, 1), ('2018-05-16', 3, 1000, 2000, -1, 2); + +OPTIMIZE TABLE test.six_rows_per_granule FINAL; + +SELECT COUNT(*) FROM test.six_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'six_rows_per_granule' and database='test' and active=1; + +INSERT INTO test.six_rows_per_granule (p, k, v1, v2, Sign, Version) VALUES ('2018-05-15', 1, 1000, 2000, -1, 1), ('2018-05-16', 1, 1000, 2000, 1, 2); + +INSERT INTO test.six_rows_per_granule (p, k, v1, v2, Sign, Version) VALUES ('2018-05-15', 2, 1000, 2000, -1, 1), ('2018-05-16', 2, 1000, 2000, 1, 2); + +INSERT INTO test.six_rows_per_granule (p, k, v1, v2, Sign, Version) VALUES ('2018-05-15', 3, 1000, 2000, -1, 1), ('2018-05-16', 3, 1000, 2000, 1, 2); + +OPTIMIZE TABLE test.six_rows_per_granule FINAL; + +SELECT COUNT(*) FROM test.six_rows_per_granule; + +SELECT distinct(marks) from system.parts WHERE table = 'six_rows_per_granule' and database='test' and active=1; + +DROP TABLE IF EXISTS test.six_rows_per_granule; diff --git a/dbms/tests/queries/0_stateless/00926_zookeeper_adaptive_index_granularity_replicated_merge_tree.reference b/dbms/tests/queries/0_stateless/00926_zookeeper_adaptive_index_granularity_replicated_merge_tree.reference new file mode 100644 index 00000000000..642f836c646 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00926_zookeeper_adaptive_index_granularity_replicated_merge_tree.reference @@ -0,0 +1,47 @@ +----HORIZONTAL MERGE TESTS---- +4 +4 +4 +4 +4 +4 +8 +8 +8 +8 +----- +4 +1 +4 +1 +1 +1 +8 +2 +8 +2 +----- +4 +1 +4 +1 +4 +1 +4 +1 +8 +1 +8 +1 +42 42 +100 aaaa +101 bbbb +102 cccc +103 dddd +2 +42 42 +100 aaaa +101 bbbb +102 cccc +103 dddd +2 diff --git a/dbms/tests/queries/0_stateless/00926_zookeeper_adaptive_index_granularity_replicated_merge_tree.sql b/dbms/tests/queries/0_stateless/00926_zookeeper_adaptive_index_granularity_replicated_merge_tree.sql new file mode 100644 index 00000000000..0ac96ce751b --- /dev/null +++ b/dbms/tests/queries/0_stateless/00926_zookeeper_adaptive_index_granularity_replicated_merge_tree.sql @@ -0,0 +1,198 @@ +----- Group of very similar simple tests ------ +select '----HORIZONTAL MERGE TESTS----'; +DROP TABLE IF EXISTS test.zero_rows_per_granule1; +DROP TABLE IF EXISTS test.zero_rows_per_granule2; + +CREATE TABLE test.zero_rows_per_granule1 ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/zero_rows_in_granule', '1') PARTITION BY toYYYYMM(p) ORDER BY k SETTINGS index_granularity_bytes = 20; + +CREATE TABLE test.zero_rows_per_granule2 ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/zero_rows_in_granule', '2') PARTITION BY toYYYYMM(p) ORDER BY k SETTINGS index_granularity_bytes = 20; + +INSERT INTO test.zero_rows_per_granule1 (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SYSTEM SYNC REPLICA test.zero_rows_per_granule2; + +SELECT COUNT(*) FROM test.zero_rows_per_granule1; + +SELECT distinct(marks) from system.parts WHERE table = 'zero_rows_per_granule1' and database='test' and active=1; + +SELECT COUNT(*) FROM test.zero_rows_per_granule2; + +SELECT distinct(marks) from system.parts WHERE table = 'zero_rows_per_granule2' and database='test' and active=1; + +INSERT INTO test.zero_rows_per_granule2 (p, k, v1, v2) VALUES ('2018-05-15', 5, 1000, 2000), ('2018-05-16', 6, 3000, 4000), ('2018-05-17', 7, 5000, 6000), ('2018-05-19', 8, 7000, 8000); + +SELECT distinct(marks) from system.parts WHERE table = 'zero_rows_per_granule2' and database='test' and active=1; + +SELECT distinct(marks) from system.parts WHERE table = 'zero_rows_per_granule1' and database='test' and active=1; + +SELECT sleep(0.5) Format Null; + +OPTIMIZE TABLE test.zero_rows_per_granule2 FINAL; + +SYSTEM SYNC REPLICA test.zero_rows_per_granule1; + +SELECT COUNT(*) FROM test.zero_rows_per_granule2; + +SELECT distinct(marks) from system.parts WHERE table = 'zero_rows_per_granule2' and database='test' and active=1; + +SELECT COUNT(*) FROM test.zero_rows_per_granule1; + +SELECT distinct(marks) from system.parts WHERE table = 'zero_rows_per_granule1' and database='test' and active=1; + +DROP TABLE IF EXISTS test.zero_rows_per_granule1; +DROP TABLE IF EXISTS test.zero_rows_per_granule2; + +SELECT '-----'; + +DROP TABLE IF EXISTS test.four_rows_per_granule1; +DROP TABLE IF EXISTS test.four_rows_per_granule2; + +CREATE TABLE test.four_rows_per_granule1 ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/four_rows_in_granule', '1') PARTITION BY toYYYYMM(p) ORDER BY k SETTINGS index_granularity_bytes = 110; + +CREATE TABLE test.four_rows_per_granule2 ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/four_rows_in_granule', '2') PARTITION BY toYYYYMM(p) ORDER BY k SETTINGS index_granularity_bytes = 110; + +INSERT INTO test.four_rows_per_granule1 (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.four_rows_per_granule1; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule1' and database='test' and active=1; + +SYSTEM SYNC REPLICA test.four_rows_per_granule2; + +SELECT COUNT(*) FROM test.four_rows_per_granule2; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule2' and database='test' and active=1; + +DETACH TABLE test.four_rows_per_granule2; +ATTACH TABLE test.four_rows_per_granule2; + +INSERT INTO test.four_rows_per_granule2 (p, k, v1, v2) VALUES ('2018-05-15', 5, 1000, 2000), ('2018-05-16', 6, 3000, 4000), ('2018-05-17', 7, 5000, 6000), ('2018-05-19', 8, 7000, 8000); + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule2' and database='test' and active=1; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule1' and database='test' and active=1; + +SELECT sleep(0.5) Format Null; + +OPTIMIZE TABLE test.four_rows_per_granule2 FINAL; + +DETACH TABLE test.four_rows_per_granule2; + +ATTACH TABLE test.four_rows_per_granule2; + +SELECT COUNT(*) FROM test.four_rows_per_granule2; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule2' and database='test' and active=1; + +SYSTEM SYNC REPLICA test.four_rows_per_granule1; + +SELECT COUNT(*) FROM test.four_rows_per_granule1; + +SELECT distinct(marks) from system.parts WHERE table = 'four_rows_per_granule1' and database='test' and active=1; + +DROP TABLE IF EXISTS test.four_rows_per_granule1; +DROP TABLE IF EXISTS test.four_rows_per_granule2; + +SELECT '-----'; + +DROP TABLE IF EXISTS test.adaptive_granularity_alter1; +DROP TABLE IF EXISTS test.adaptive_granularity_alter2; + +CREATE TABLE test.adaptive_granularity_alter1 ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/adaptive_granularity_alter', '1') PARTITION BY toYYYYMM(p) ORDER BY k SETTINGS index_granularity_bytes = 110; + +CREATE TABLE test.adaptive_granularity_alter2 ( + p Date, + k UInt64, + v1 UInt64, + v2 Int64 +) ENGINE ReplicatedMergeTree('/clickhouse/tables/test/adaptive_granularity_alter', '2') PARTITION BY toYYYYMM(p) ORDER BY k SETTINGS index_granularity_bytes = 110; + +INSERT INTO test.adaptive_granularity_alter1 (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 2, 3000, 4000), ('2018-05-17', 3, 5000, 6000), ('2018-05-18', 4, 7000, 8000); + +SELECT COUNT(*) FROM test.adaptive_granularity_alter1; + +SELECT distinct(marks) from system.parts WHERE table = 'adaptive_granularity_alter1' and database='test' and active=1; + +SYSTEM SYNC REPLICA test.adaptive_granularity_alter2; + +SELECT COUNT(*) FROM test.adaptive_granularity_alter2; + +SELECT distinct(marks) from system.parts WHERE table = 'adaptive_granularity_alter2' and database='test' and active=1; + +ALTER TABLE test.adaptive_granularity_alter2 MODIFY COLUMN v1 Int16; + +DETACH TABLE test.adaptive_granularity_alter2; + +ATTACH TABLE test.adaptive_granularity_alter2; + +SELECT COUNT(*) FROM test.adaptive_granularity_alter2; + +SELECT distinct(marks) from system.parts WHERE table = 'adaptive_granularity_alter2' and database='test' and active=1; + +SYSTEM SYNC REPLICA test.adaptive_granularity_alter1; + +SELECT COUNT(*) FROM test.adaptive_granularity_alter1; + +SELECT distinct(marks) from system.parts WHERE table = 'adaptive_granularity_alter1' and database='test' and active=1; + +INSERT INTO test.adaptive_granularity_alter1 (p, k, v1, v2) VALUES ('2018-05-15', 1, 1000, 2000), ('2018-05-16', 5, 3000, 4000), ('2018-05-17', 6, 5000, 6000), ('2018-05-19', 42, 42, 42); + +SELECT COUNT(*) FROM test.adaptive_granularity_alter1; + +SELECT distinct(marks) from system.parts WHERE table = 'adaptive_granularity_alter1' and database='test' and active=1; + +SYSTEM SYNC REPLICA test.adaptive_granularity_alter2; + +SELECT COUNT(*) FROM test.adaptive_granularity_alter2; + +SELECT distinct(marks) from system.parts WHERE table = 'adaptive_granularity_alter2' and database='test' and active=1; + +ALTER TABLE test.adaptive_granularity_alter1 MODIFY COLUMN v2 String; + +DETACH TABLE test.adaptive_granularity_alter1; + +ATTACH TABLE test.adaptive_granularity_alter1; + +INSERT INTO test.adaptive_granularity_alter1 (p, k, v1, v2) VALUES ('2018-05-15', 100, 1000, 'aaaa'), ('2018-05-16', 101, 3000, 'bbbb'), ('2018-05-17', 102, 5000, 'cccc'), ('2018-05-19', 103, 7000, 'dddd'); + +SELECT sleep(0.5) Format Null; + +OPTIMIZE TABLE test.adaptive_granularity_alter1 FINAL; + +SELECT k, v2 FROM test.adaptive_granularity_alter1 WHERE k >= 100 OR k = 42; + +SELECT sum(marks) from system.parts WHERE table = 'adaptive_granularity_alter1' and database='test' and active=1; + +SYSTEM SYNC REPLICA test.adaptive_granularity_alter2; + +SELECT k, v2 FROM test.adaptive_granularity_alter2 WHERE k >= 100 OR k = 42; + +SELECT sum(marks) from system.parts WHERE table = 'adaptive_granularity_alter2' and database='test' and active=1; + +DROP TABLE IF EXISTS test.adaptive_granularity_alter1; +DROP TABLE IF EXISTS test.adaptive_granularity_alter2; diff --git a/dbms/tests/queries/0_stateless/00927_asof_join_correct_bt.sql b/dbms/tests/queries/0_stateless/00927_asof_join_correct_bt.sql index a813f2fa410..281a81d51c0 100644 --- a/dbms/tests/queries/0_stateless/00927_asof_join_correct_bt.sql +++ b/dbms/tests/queries/0_stateless/00927_asof_join_correct_bt.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS A; DROP TABLE IF EXISTS B; diff --git a/dbms/tests/queries/0_stateless/00927_asof_join_long.sql b/dbms/tests/queries/0_stateless/00927_asof_join_long.sql index ea9ca430c09..eb6eabfa4b9 100644 --- a/dbms/tests/queries/0_stateless/00927_asof_join_long.sql +++ b/dbms/tests/queries/0_stateless/00927_asof_join_long.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS tvs; CREATE TABLE tvs(k UInt32, t UInt32, tv UInt64) ENGINE = Memory; diff --git a/dbms/tests/queries/0_stateless/00927_asof_join_noninclusive.sql b/dbms/tests/queries/0_stateless/00927_asof_join_noninclusive.sql index c7934c7c7c0..50644352b64 100644 --- a/dbms/tests/queries/0_stateless/00927_asof_join_noninclusive.sql +++ b/dbms/tests/queries/0_stateless/00927_asof_join_noninclusive.sql @@ -1,5 +1,3 @@ -USE test; - DROP TABLE IF EXISTS A; DROP TABLE IF EXISTS B; diff --git a/dbms/tests/queries/0_stateless/00927_asof_join_other_types.sh b/dbms/tests/queries/0_stateless/00927_asof_join_other_types.sh index 3cf1791bcfe..4822b5e1aea 100755 --- a/dbms/tests/queries/0_stateless/00927_asof_join_other_types.sh +++ b/dbms/tests/queries/0_stateless/00927_asof_join_other_types.sh @@ -5,8 +5,6 @@ set -e CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT -q "USE test;" - for typename in "UInt32" "UInt64" "Float64" "Float32" do $CLICKHOUSE_CLIENT -q "DROP TABLE IF EXISTS A;" @@ -19,4 +17,7 @@ do $CLICKHOUSE_CLIENT -q "INSERT INTO B(k,t,b) VALUES (2,3,3);" $CLICKHOUSE_CLIENT -q "SELECT k, t, a, b FROM A ASOF LEFT JOIN B USING(k,t) ORDER BY (k,t);" + + $CLICKHOUSE_CLIENT -q "DROP TABLE A;" + $CLICKHOUSE_CLIENT -q "DROP TABLE B;" done \ No newline at end of file diff --git a/dbms/tests/queries/0_stateless/00927_asof_joins.sql b/dbms/tests/queries/0_stateless/00927_asof_joins.sql index a2781b70df0..2dd6ca07b15 100644 --- a/dbms/tests/queries/0_stateless/00927_asof_joins.sql +++ b/dbms/tests/queries/0_stateless/00927_asof_joins.sql @@ -1,15 +1,13 @@ -USE test; - DROP TABLE IF EXISTS md; DROP TABLE IF EXISTS tv; CREATE TABLE md(key UInt32, t DateTime, bid Float64, ask Float64) ENGINE = MergeTree() ORDER BY (key, t); -INSERT INTO test.md(key,t,bid,ask) VALUES (1,20,7,8),(1,5,1,2),(1,10,11,12),(1,15,5,6); -INSERT INTO test.md(key,t,bid,ask) VALUES (2,20,17,18),(2,5,11,12),(2,10,21,22),(2,15,5,6); +INSERT INTO md(key,t,bid,ask) VALUES (1,20,7,8),(1,5,1,2),(1,10,11,12),(1,15,5,6); +INSERT INTO md(key,t,bid,ask) VALUES (2,20,17,18),(2,5,11,12),(2,10,21,22),(2,15,5,6); CREATE TABLE tv(key UInt32, t DateTime, tv Float64) ENGINE = MergeTree() ORDER BY (key, t); -INSERT INTO test.tv(key,t,tv) VALUES (1,5,1.5),(1,6,1.51),(1,10,11.5),(1,11,11.51),(1,15,5.5),(1,16,5.6),(1,20,7.5); -INSERT INTO test.tv(key,t,tv) VALUES (2,5,2.5),(2,6,2.51),(2,10,12.5),(2,11,12.51),(2,15,6.5),(2,16,5.6),(2,20,8.5); +INSERT INTO tv(key,t,tv) VALUES (1,5,1.5),(1,6,1.51),(1,10,11.5),(1,11,11.51),(1,15,5.5),(1,16,5.6),(1,20,7.5); +INSERT INTO tv(key,t,tv) VALUES (2,5,2.5),(2,6,2.51),(2,10,12.5),(2,11,12.51),(2,15,6.5),(2,16,5.6),(2,20,8.5); SELECT tv.key, toString(tv.t, 'UTC'), md.bid, tv.tv, md.ask FROM tv ASOF LEFT JOIN md USING(key,t) ORDER BY (tv.key, tv.t); diff --git a/dbms/tests/queries/0_stateless/00927_table_filter.sql b/dbms/tests/queries/0_stateless/00927_table_filter.sql index 0997e343fad..af9cfa11d59 100644 --- a/dbms/tests/queries/0_stateless/00927_table_filter.sql +++ b/dbms/tests/queries/0_stateless/00927_table_filter.sql @@ -3,42 +3,42 @@ DROP TABLE IF EXISTS filtered_table2; DROP TABLE IF EXISTS filtered_table3; -- Filter: a = 1, values: (1, 0), (1, 1) -CREATE TABLE test.filtered_table1 (a UInt8, b UInt8) ENGINE MergeTree ORDER BY a; -INSERT INTO test.filtered_table1 values (0, 0), (0, 1), (1, 0), (1, 1); +CREATE TABLE filtered_table1 (a UInt8, b UInt8) ENGINE MergeTree ORDER BY a; +INSERT INTO filtered_table1 values (0, 0), (0, 1), (1, 0), (1, 1); -- Filter: a + b < 1 or c - d > 5, values: (0, 0, 0, 0), (0, 0, 6, 0) -CREATE TABLE test.filtered_table2 (a UInt8, b UInt8, c UInt8, d UInt8) ENGINE MergeTree ORDER BY a; -INSERT INTO test.filtered_table2 values (0, 0, 0, 0), (1, 2, 3, 4), (4, 3, 2, 1), (0, 0, 6, 0); +CREATE TABLE filtered_table2 (a UInt8, b UInt8, c UInt8, d UInt8) ENGINE MergeTree ORDER BY a; +INSERT INTO filtered_table2 values (0, 0, 0, 0), (1, 2, 3, 4), (4, 3, 2, 1), (0, 0, 6, 0); -- Filter: c = 1, values: (0, 1), (1, 0) -CREATE TABLE test.filtered_table3 (a UInt8, b UInt8, c UInt16 ALIAS a + b) ENGINE MergeTree ORDER BY a; -INSERT INTO test.filtered_table3 values (0, 0), (0, 1), (1, 0), (1, 1); +CREATE TABLE filtered_table3 (a UInt8, b UInt8, c UInt16 ALIAS a + b) ENGINE MergeTree ORDER BY a; +INSERT INTO filtered_table3 values (0, 0), (0, 1), (1, 0), (1, 1); SELECT '-- PREWHERE should fail'; -SELECT * FROM test.filtered_table1 PREWHERE 1; -- { serverError 182 } -SELECT * FROM test.filtered_table2 PREWHERE 1; -- { serverError 182 } -SELECT * FROM test.filtered_table3 PREWHERE 1; -- { serverError 182 } +SELECT * FROM filtered_table1 PREWHERE 1; -- { serverError 182 } +SELECT * FROM filtered_table2 PREWHERE 1; -- { serverError 182 } +SELECT * FROM filtered_table3 PREWHERE 1; -- { serverError 182 } -SELECT * FROM test.filtered_table1; -SELECT * FROM test.filtered_table2; -SELECT * FROM test.filtered_table3; +SELECT * FROM filtered_table1; +SELECT * FROM filtered_table2; +SELECT * FROM filtered_table3; -SELECT a FROM test.filtered_table1; -SELECT b FROM test.filtered_table1; -SELECT a FROM test.filtered_table1 WHERE a = 1; -SELECT a = 1 FROM test.filtered_table1; +SELECT a FROM filtered_table1; +SELECT b FROM filtered_table1; +SELECT a FROM filtered_table1 WHERE a = 1; +SELECT a = 1 FROM filtered_table1; -SELECT a FROM test.filtered_table3; -SELECT b FROM test.filtered_table3; -SELECT c FROM test.filtered_table3; -SELECT a + b FROM test.filtered_table3; -SELECT a FROM test.filtered_table3 WHERE c = 1; -SELECT c = 1 FROM test.filtered_table3; -SELECT a + b = 1 FROM test.filtered_table3; +SELECT a FROM filtered_table3; +SELECT b FROM filtered_table3; +SELECT c FROM filtered_table3; +SELECT a + b FROM filtered_table3; +SELECT a FROM filtered_table3 WHERE c = 1; +SELECT c = 1 FROM filtered_table3; +SELECT a + b = 1 FROM filtered_table3; -SELECT * FROM test.filtered_table1 as t1 ANY LEFT JOIN test.filtered_table1 as t2 ON t1.a = t2.b; -SELECT * FROM test.filtered_table1 as t2 ANY RIGHT JOIN test.filtered_table1 as t1 ON t2.b = t1.a; +SELECT * FROM filtered_table1 as t1 ANY LEFT JOIN filtered_table1 as t2 ON t1.a = t2.b; +SELECT * FROM filtered_table1 as t2 ANY RIGHT JOIN filtered_table1 as t1 ON t2.b = t1.a; -DROP TABLE test.filtered_table1; -DROP TABLE test.filtered_table2; -DROP TABLE test.filtered_table3; +DROP TABLE filtered_table1; +DROP TABLE filtered_table2; +DROP TABLE filtered_table3; diff --git a/dbms/tests/queries/0_stateless/00930_arrayIntersect.sql b/dbms/tests/queries/0_stateless/00930_arrayIntersect.sql index f034c74a62c..e5eee83b337 100644 --- a/dbms/tests/queries/0_stateless/00930_arrayIntersect.sql +++ b/dbms/tests/queries/0_stateless/00930_arrayIntersect.sql @@ -1,27 +1,27 @@ -drop table if exists test.array_intersect; +drop table if exists array_intersect; -create table test.array_intersect (date Date, arr Array(UInt8)) engine=MergeTree partition by date order by date; +create table array_intersect (date Date, arr Array(UInt8)) engine=MergeTree partition by date order by date; -insert into test.array_intersect values ('2019-01-01', [1,2,3]); -insert into test.array_intersect values ('2019-01-01', [1,2]); -insert into test.array_intersect values ('2019-01-01', [1]); -insert into test.array_intersect values ('2019-01-01', []); +insert into array_intersect values ('2019-01-01', [1,2,3]); +insert into array_intersect values ('2019-01-01', [1,2]); +insert into array_intersect values ('2019-01-01', [1]); +insert into array_intersect values ('2019-01-01', []); -select arrayIntersect(arr, [1,2]) from test.array_intersect order by arr; -select arrayIntersect(arr, []) from test.array_intersect order by arr; -select arrayIntersect([], arr) from test.array_intersect order by arr; -select arrayIntersect([1,2], arr) from test.array_intersect order by arr; -select arrayIntersect([1,2], [1,2,3,4]) from test.array_intersect order by arr; -select arrayIntersect([], []) from test.array_intersect order by arr; +select arrayIntersect(arr, [1,2]) from array_intersect order by arr; +select arrayIntersect(arr, []) from array_intersect order by arr; +select arrayIntersect([], arr) from array_intersect order by arr; +select arrayIntersect([1,2], arr) from array_intersect order by arr; +select arrayIntersect([1,2], [1,2,3,4]) from array_intersect order by arr; +select arrayIntersect([], []) from array_intersect order by arr; -optimize table test.array_intersect; +optimize table array_intersect; -select arrayIntersect(arr, [1,2]) from test.array_intersect order by arr; -select arrayIntersect(arr, []) from test.array_intersect order by arr; -select arrayIntersect([], arr) from test.array_intersect order by arr; -select arrayIntersect([1,2], arr) from test.array_intersect order by arr; -select arrayIntersect([1,2], [1,2,3,4]) from test.array_intersect order by arr; -select arrayIntersect([], []) from test.array_intersect order by arr; +select arrayIntersect(arr, [1,2]) from array_intersect order by arr; +select arrayIntersect(arr, []) from array_intersect order by arr; +select arrayIntersect([], arr) from array_intersect order by arr; +select arrayIntersect([1,2], arr) from array_intersect order by arr; +select arrayIntersect([1,2], [1,2,3,4]) from array_intersect order by arr; +select arrayIntersect([], []) from array_intersect order by arr; -drop table if exists test.array_intersect; +drop table if exists array_intersect; diff --git a/dbms/tests/queries/0_stateless/00931_low_cardinality_nullable_aggregate_function_type.sql b/dbms/tests/queries/0_stateless/00931_low_cardinality_nullable_aggregate_function_type.sql index 04089aef377..3c4fe033db1 100644 --- a/dbms/tests/queries/0_stateless/00931_low_cardinality_nullable_aggregate_function_type.sql +++ b/dbms/tests/queries/0_stateless/00931_low_cardinality_nullable_aggregate_function_type.sql @@ -1,8 +1,8 @@ -drop table if exists test.lc; +drop table if exists lc; -CREATE TABLE test.lc (`date` Date, `name` LowCardinality(Nullable(String)), `clicks` Nullable(Int32)) ENGINE = MergeTree() ORDER BY date SETTINGS index_granularity = 8192; -INSERT INTO test.lc SELECT '2019-01-01', null, 0 FROM numbers(1000000); -SELECT date, argMax(name, clicks) FROM test.lc GROUP BY date; +CREATE TABLE lc (`date` Date, `name` LowCardinality(Nullable(String)), `clicks` Nullable(Int32)) ENGINE = MergeTree() ORDER BY date SETTINGS index_granularity = 8192; +INSERT INTO lc SELECT '2019-01-01', null, 0 FROM numbers(1000000); +SELECT date, argMax(name, clicks) FROM lc GROUP BY date; -drop table if exists test.lc; +drop table if exists lc; diff --git a/dbms/tests/queries/0_stateless/00931_low_cardinality_read_with_empty_array.sql b/dbms/tests/queries/0_stateless/00931_low_cardinality_read_with_empty_array.sql index 8c9e6070673..039ba0c0b53 100644 --- a/dbms/tests/queries/0_stateless/00931_low_cardinality_read_with_empty_array.sql +++ b/dbms/tests/queries/0_stateless/00931_low_cardinality_read_with_empty_array.sql @@ -1,7 +1,7 @@ -drop table if exists test.lc; -create table test.lc (key UInt64, value Array(LowCardinality(String))) engine = MergeTree order by key; -insert into test.lc select number, if(number < 10000 or number > 100000, [toString(number)], emptyArrayString()) from system.numbers limit 200000; -select * from test.lc where (key < 100 or key > 50000) and not has(value, toString(key)) and length(value) == 1 limit 10 settings max_block_size = 8192, max_threads = 1; +drop table if exists lc; +create table lc (key UInt64, value Array(LowCardinality(String))) engine = MergeTree order by key; +insert into lc select number, if(number < 10000 or number > 100000, [toString(number)], emptyArrayString()) from system.numbers limit 200000; +select * from lc where (key < 100 or key > 50000) and not has(value, toString(key)) and length(value) == 1 limit 10 settings max_block_size = 8192, max_threads = 1; -drop table if exists test.lc; +drop table if exists lc; diff --git a/dbms/tests/queries/0_stateless/00933_alter_ttl.reference b/dbms/tests/queries/0_stateless/00933_alter_ttl.reference new file mode 100644 index 00000000000..2b549fc57c3 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00933_alter_ttl.reference @@ -0,0 +1,5 @@ +CREATE TABLE test.ttl (`d` Date, `a` Int32) ENGINE = MergeTree PARTITION BY toDayOfMonth(d) ORDER BY a TTL d + toIntervalDay(1) SETTINGS index_granularity = 8192 +2100-10-10 3 +2100-10-10 4 +d Date +a Int32 d + toIntervalDay(1) diff --git a/dbms/tests/queries/0_stateless/00933_alter_ttl.sql b/dbms/tests/queries/0_stateless/00933_alter_ttl.sql new file mode 100644 index 00000000000..e5c50c5ce60 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00933_alter_ttl.sql @@ -0,0 +1,25 @@ +set send_logs_level = 'none'; + +drop table if exists test.ttl; + +create table test.ttl (d Date, a Int) engine = MergeTree order by a partition by toDayOfMonth(d); +alter table test.ttl modify ttl d + interval 1 day; +show create table test.ttl; +insert into test.ttl values (toDateTime('2000-10-10 00:00:00'), 1); +insert into test.ttl values (toDateTime('2000-10-10 00:00:00'), 2); +insert into test.ttl values (toDateTime('2100-10-10 00:00:00'), 3); +insert into test.ttl values (toDateTime('2100-10-10 00:00:00'), 4); +select sleep(1) format Null; -- wait if very fast merge happen +optimize table test.ttl partition 10 final; + +select * from test.ttl order by d; + +alter table test.ttl modify ttl a; -- { serverError 450 } + +drop table if exists test.ttl; + +create table test.ttl (d Date, a Int) engine = MergeTree order by tuple() partition by toDayOfMonth(d); +alter table test.ttl modify column a Int ttl d + interval 1 day; +desc table test.ttl; +alter table test.ttl modify column d Int ttl d + interval 1 day; -- { serverError 44} + diff --git a/dbms/tests/queries/0_stateless/00933_reserved_word.sql b/dbms/tests/queries/0_stateless/00933_reserved_word.sql index 8e463fbffb9..447a618bfc9 100644 --- a/dbms/tests/queries/0_stateless/00933_reserved_word.sql +++ b/dbms/tests/queries/0_stateless/00933_reserved_word.sql @@ -1,7 +1,7 @@ -DROP TABLE IF EXISTS test.reserved_word_table; -CREATE TABLE test.reserved_word_table (`index` UInt8) ENGINE = MergeTree ORDER BY `index`; +DROP TABLE IF EXISTS reserved_word_table; +CREATE TABLE reserved_word_table (`index` UInt8) ENGINE = MergeTree ORDER BY `index`; -DETACH TABLE test.reserved_word_table; -ATTACH TABLE test.reserved_word_table; +DETACH TABLE reserved_word_table; +ATTACH TABLE reserved_word_table; -DROP TABLE test.reserved_word_table; +DROP TABLE reserved_word_table; diff --git a/dbms/tests/queries/0_stateless/00933_test_fix_extra_seek_on_compressed_cache.sh b/dbms/tests/queries/0_stateless/00933_test_fix_extra_seek_on_compressed_cache.sh index b34d5072d3e..b0fd9a70bd4 100755 --- a/dbms/tests/queries/0_stateless/00933_test_fix_extra_seek_on_compressed_cache.sh +++ b/dbms/tests/queries/0_stateless/00933_test_fix_extra_seek_on_compressed_cache.sh @@ -4,13 +4,13 @@ CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) . $CURDIR/../shell_config.sh -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.small_table" +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS small_table" -$CLICKHOUSE_CLIENT --query="CREATE TABLE test.small_table (a UInt64 default 0, n UInt64) ENGINE = MergeTree() PARTITION BY tuple() ORDER BY (a);" +$CLICKHOUSE_CLIENT --query="CREATE TABLE small_table (a UInt64 default 0, n UInt64) ENGINE = MergeTree() PARTITION BY tuple() ORDER BY (a);" -$CLICKHOUSE_CLIENT --query="INSERT INTO test.small_table(n) SELECT * from system.numbers limit 100000;" +$CLICKHOUSE_CLIENT --query="INSERT INTO small_table(n) SELECT * from system.numbers limit 100000;" -cached_query="SELECT count() FROM test.small_table where n > 0;" +cached_query="SELECT count() FROM small_table where n > 0;" $CLICKHOUSE_CLIENT --use_uncompressed_cache=1 --query="$cached_query" &> /dev/null @@ -21,5 +21,5 @@ $CLICKHOUSE_CLIENT --query="SYSTEM FLUSH LOGS" $CLICKHOUSE_CLIENT --query="SELECT ProfileEvents.Values[indexOf(ProfileEvents.Names, 'Seek')], ProfileEvents.Values[indexOf(ProfileEvents.Names, 'ReadCompressedBytes')], ProfileEvents.Values[indexOf(ProfileEvents.Names, 'UncompressedCacheHits')] AS hit FROM system.query_log WHERE (query_id = 'test-query-uncompressed-cache') AND (type = 2) ORDER BY event_time DESC LIMIT 1" -$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS test.small_table" +$CLICKHOUSE_CLIENT --query="DROP TABLE IF EXISTS small_table" diff --git a/dbms/tests/queries/0_stateless/00933_ttl_simple.reference b/dbms/tests/queries/0_stateless/00933_ttl_simple.reference new file mode 100644 index 00000000000..f1377e3d220 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00933_ttl_simple.reference @@ -0,0 +1,7 @@ +0 0 +0 0 +2000-10-10 00:00:00 0 +2000-10-10 00:00:00 0 +2000-10-10 00:00:00 0 +2100-10-10 00:00:00 3 +2100-10-10 2 diff --git a/dbms/tests/queries/0_stateless/00933_ttl_simple.sql b/dbms/tests/queries/0_stateless/00933_ttl_simple.sql new file mode 100644 index 00000000000..41bdacd4313 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00933_ttl_simple.sql @@ -0,0 +1,47 @@ +drop table if exists test.ttl; + +create table test.ttl (d DateTime, a Int ttl d + interval 1 second, b Int ttl d + interval 1 second) engine = MergeTree order by tuple() partition by toMinute(d); +insert into test.ttl values (now(), 1, 2); +insert into test.ttl values (now(), 3, 4); +select sleep(1.1) format Null; +optimize table test.ttl final; +select a, b from test.ttl; + +drop table if exists test.ttl; + +create table test.ttl (d DateTime, a Int ttl d + interval 1 DAY) engine = MergeTree order by tuple() partition by toDayOfMonth(d); +insert into test.ttl values (toDateTime('2000-10-10 00:00:00'), 1); +insert into test.ttl values (toDateTime('2000-10-10 00:00:00'), 2); +insert into test.ttl values (toDateTime('2000-10-10 00:00:00'), 3); +select sleep(0.7) format Null; -- wait if very fast merge happen +optimize table test.ttl final; +select * from test.ttl order by d; + +drop table if exists test.ttl; + +create table test.ttl (d DateTime, a Int) engine = MergeTree order by tuple() partition by tuple() ttl d + interval 1 day; +insert into test.ttl values (toDateTime('2000-10-10 00:00:00'), 1); +insert into test.ttl values (toDateTime('2000-10-10 00:00:00'), 2); +insert into test.ttl values (toDateTime('2100-10-10 00:00:00'), 3); +select sleep(0.7) format Null; -- wait if very fast merge happen +optimize table test.ttl final; +select * from test.ttl order by d; + +drop table if exists test.ttl; + +create table test.ttl (d Date, a Int) engine = MergeTree order by a partition by toDayOfMonth(d) ttl d + interval 1 day; +insert into test.ttl values (toDate('2000-10-10'), 1); +insert into test.ttl values (toDate('2100-10-10'), 2); +select sleep(0.7) format Null; -- wait if very fast merge happen +optimize table test.ttl final; +select * from test.ttl order by d; + +set send_logs_level = 'none'; + +drop table if exists test.ttl; + +create table test.ttl (d DateTime ttl d) engine = MergeTree order by tuple() partition by toSecond(d); -- { serverError 44} +create table test.ttl (d DateTime, a Int ttl d) engine = MergeTree order by a partition by toSecond(d); -- { serverError 44} +create table test.ttl (d DateTime, a Int ttl 2 + 2) engine = MergeTree order by tuple() partition by toSecond(d); -- { serverError 450 } +create table test.ttl (d DateTime, a Int ttl toDateTime(1)) engine = MergeTree order by tuple() partition by toSecond(d); -- { serverError 450 } +create table test.ttl (d DateTime, a Int ttl d - d) engine = MergeTree order by tuple() partition by toSecond(d); -- { serverError 450 } diff --git a/dbms/tests/queries/0_stateless/00933_ttl_with_default.reference b/dbms/tests/queries/0_stateless/00933_ttl_with_default.reference new file mode 100644 index 00000000000..ce0c55c3e17 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00933_ttl_with_default.reference @@ -0,0 +1,12 @@ +3 +4 +111 +111 +1 2 +2 4 +3 300 +4 400 +1 222 +2 222 +3 15 +4 20 diff --git a/dbms/tests/queries/0_stateless/00933_ttl_with_default.sql b/dbms/tests/queries/0_stateless/00933_ttl_with_default.sql new file mode 100644 index 00000000000..b72d86f9e76 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00933_ttl_with_default.sql @@ -0,0 +1,30 @@ +drop table if exists test.ttl; + +create table test.ttl (d DateTime, a Int default 111 ttl d + interval 1 DAY) engine = MergeTree order by tuple() partition by toDayOfMonth(d); +insert into test.ttl values (toDateTime('2000-10-10 00:00:00'), 1); +insert into test.ttl values (toDateTime('2000-10-10 00:00:00'), 2); +insert into test.ttl values (toDateTime('2100-10-10 00:00:00'), 3); +insert into test.ttl values (toDateTime('2100-10-10 00:00:00'), 4); +optimize table test.ttl final; +select a from test.ttl order by a; + +drop table if exists test.ttl; + +create table test.ttl (d DateTime, a Int, b default a * 2 ttl d + interval 1 DAY) engine = MergeTree order by tuple() partition by toDayOfMonth(d); +insert into test.ttl values (toDateTime('2000-10-10 00:00:00'), 1, 100); +insert into test.ttl values (toDateTime('2000-10-10 00:00:00'), 2, 200); +insert into test.ttl values (toDateTime('2100-10-10 00:00:00'), 3, 300); +insert into test.ttl values (toDateTime('2100-10-10 00:00:00'), 4, 400); +optimize table test.ttl final; +select a, b from test.ttl order by a; + +drop table if exists test.ttl; + +create table test.ttl (d DateTime, a Int, b default 222 ttl d + interval 1 DAY) engine = MergeTree order by tuple() partition by toDayOfMonth(d); +insert into test.ttl values (toDateTime('2000-10-10 00:00:00'), 1, 5); +insert into test.ttl values (toDateTime('2000-10-10 00:00:00'), 2, 10); +insert into test.ttl values (toDateTime('2100-10-10 00:00:00'), 3, 15); +insert into test.ttl values (toDateTime('2100-10-10 00:00:00'), 4, 20); +optimize table test.ttl final; +select a, b from test.ttl order by a; + diff --git a/dbms/tests/queries/0_stateless/00935_to_iso_week_first_year.reference b/dbms/tests/queries/0_stateless/00935_to_iso_week_first_year.reference new file mode 100644 index 00000000000..5eeb23e3620 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00935_to_iso_week_first_year.reference @@ -0,0 +1,30 @@ +0000-00-00 1 1970 +1970-01-02 1 1970 +1970-01-03 1 1970 +1970-01-04 1 1970 +1970-01-05 2 1970 +1970-01-06 2 1970 +1970-01-07 2 1970 +1970-01-08 2 1970 +1970-01-09 2 1970 +1970-01-10 2 1970 +1970-01-11 2 1970 +1970-01-12 3 1970 +1970-01-13 3 1970 +1970-01-14 3 1970 +1970-01-15 3 1970 +1970-01-02 00:00:00 1 1970 +1970-01-03 00:00:00 1 1970 +1970-01-04 00:00:00 1 1970 +1970-01-05 00:00:00 2 1970 +1970-01-06 00:00:00 2 1970 +1970-01-07 00:00:00 2 1970 +1970-01-08 00:00:00 2 1970 +1970-01-09 00:00:00 2 1970 +1970-01-10 00:00:00 2 1970 +1970-01-11 00:00:00 2 1970 +1970-01-12 00:00:00 3 1970 +1970-01-13 00:00:00 3 1970 +1970-01-14 00:00:00 3 1970 +1970-01-15 00:00:00 3 1970 +1970-01-16 00:00:00 3 1970 diff --git a/dbms/tests/queries/0_stateless/00935_to_iso_week_first_year.sql b/dbms/tests/queries/0_stateless/00935_to_iso_week_first_year.sql new file mode 100644 index 00000000000..b311596359c --- /dev/null +++ b/dbms/tests/queries/0_stateless/00935_to_iso_week_first_year.sql @@ -0,0 +1,3 @@ +SELECT toDate('1970-01-01') + number AS d, toISOWeek(d), toISOYear(d) FROM numbers(15); +-- Note that 1970-01-01 00:00:00 in Moscow is before unix epoch. +SELECT toDateTime(toDate('1970-01-02') + number, 'Europe/Moscow') AS t, toISOWeek(t), toISOYear(t) FROM numbers(15); diff --git a/dbms/tests/queries/0_stateless/00936_substring_utf8_non_const.reference b/dbms/tests/queries/0_stateless/00936_substring_utf8_non_const.reference new file mode 100644 index 00000000000..daa12776a92 --- /dev/null +++ b/dbms/tests/queries/0_stateless/00936_substring_utf8_non_const.reference @@ -0,0 +1,231 @@ + +h +he +hel +hell +hello +hello, +hello, +hello, п +hello, пр +hello, при +hello, прив +hello, приве +hello, привет +hello, привет +hello, привет +hel +ell +llo +lo, +o, +, п + пр +при +рив +иве +вет +ет +т + + + + +e +ll +lo, +o, п +, при + приве +привет +ривет +ивет +вет +ет +т + + + +т +ет +вет +ивет +ривет +приве + прив +, при +o, пр +lo, п +llo, +ello, +hello +hello +hello +hello +т +ет +вет +ивет +ривет +привет + привет +, привет +o, привет +lo, привет +llo, привет +ello, привет +hello, привет +hello, привет +hello, привет +hello, привет +hello, привет +ello, привет +llo, привет +lo, привет +o, привет +, привет + привет +привет +ривет +ивет +вет +ет +т + + + +hello, привет +hello, привет +hello, привет +o, привет +o, привет +o, привет +hello, при +hello, при +hello, при +o, пр +o, пр +o, пр +ривет +ривет +ривет +lo, п +lo, п +lo, п + +h +he +hel +hell +hello +hello, +hello, +hello, п +hello, пр +hello, при +hello, прив +hello, приве +hello, привет +hello, привет +hello, привет +hel +ell +llo +lo, +o, +, п + пр +при +рив +иве +вет +ет +т + + + + +e +ll +lo, +o, п +, при + приве +привет +ривет +ивет +вет +ет +т + + + +т +ет +вет +ивет +ривет +приве + прив +, при +o, пр +lo, п +llo, +ello, +hello +hello +hello +hello +т +ет +вет +ивет +ривет +привет + привет +, привет +o, привет +lo, привет +llo, привет +ello, привет +hello, привет +hello, привет +hello, привет +hello, привет +hello, привет +ello, привет +llo, привет +lo, привет +o, привет +, привет + привет +привет +ривет +ивет +вет +ет +т + + + +hello, привет +hello, привет +hello, привет +o, привет +o, привет +o, привет +hello, при +hello, при +hello, при +o, пр +o, пр +o, пр +ривет +ривет +ривет +lo, п +lo, п +lo, п +1 +1 +1 diff --git a/dbms/tests/queries/0_stateless/00936_substring_utf8_non_const.sql b/dbms/tests/queries/0_stateless/00936_substring_utf8_non_const.sql new file mode 100644 index 00000000000..a2b115d776d --- /dev/null +++ b/dbms/tests/queries/0_stateless/00936_substring_utf8_non_const.sql @@ -0,0 +1,42 @@ +SELECT substringUTF8('hello, привет', 1, number) FROM numbers(16); +SELECT substringUTF8('hello, привет', number + 1, 3) FROM numbers(16); +SELECT substringUTF8('hello, привет', number + 1, number) FROM numbers(16); +SELECT substringUTF8('hello, привет', -1 - number, 5) FROM numbers(16); +SELECT substringUTF8('hello, привет', -1 - number) FROM numbers(16); +SELECT substringUTF8('hello, привет', 1 + number) FROM numbers(16); + +SELECT substringUTF8('hello, привет', 1) FROM numbers(3); +SELECT substringUTF8('hello, привет', 5) FROM numbers(3); +SELECT substringUTF8('hello, привет', 1, 10) FROM numbers(3); +SELECT substringUTF8('hello, привет', 5, 5) FROM numbers(3); +SELECT substringUTF8('hello, привет', -5) FROM numbers(3); +SELECT substringUTF8('hello, привет', -10, 5) FROM numbers(3); + +SELECT substringUTF8(materialize('hello, привет'), 1, number) FROM numbers(16); +SELECT substringUTF8(materialize('hello, привет'), number + 1, 3) FROM numbers(16); +SELECT substringUTF8(materialize('hello, привет'), number + 1, number) FROM numbers(16); +SELECT substringUTF8(materialize('hello, привет'), -1 - number, 5) FROM numbers(16); +SELECT substringUTF8(materialize('hello, привет'), -1 - number) FROM numbers(16); +SELECT substringUTF8(materialize('hello, привет'), 1 + number) FROM numbers(16); + +SELECT substringUTF8(materialize('hello, привет'), 1) FROM numbers(3); +SELECT substringUTF8(materialize('hello, привет'), 5) FROM numbers(3); +SELECT substringUTF8(materialize('hello, привет'), 1, 10) FROM numbers(3); +SELECT substringUTF8(materialize('hello, привет'), 5, 5) FROM numbers(3); +SELECT substringUTF8(materialize('hello, привет'), -5) FROM numbers(3); +SELECT substringUTF8(materialize('hello, привет'), -10, 5) FROM numbers(3); + +SELECT DISTINCT substring(toString(range(rand(1) % 50)), rand(2) % 50, rand(3) % 50) = substringUTF8(toString(range(rand(1) % 50)), rand(2) % 50, rand(3) % 50) AS res FROM numbers(1000000); +SELECT DISTINCT substring(toString(range(rand(1) % 50)), rand(2) % 50) = substringUTF8(toString(range(rand(1) % 50)), rand(2) % 50) AS res FROM numbers(1000000); + +-- NOTE: The behaviour of substring and substringUTF8 is inconsistent when negative offset is greater than string size: +-- substring: +-- hello +-- ^-----^ - offset -10, length 7, result: "he" +-- substringUTF8: +-- hello +-- ^-----^ - offset -10, length 7, result: "hello" + +-- SELECT DISTINCT substring(toString(range(rand(1) % 50)), -(rand(2) % 50), rand(3) % 50) = substringUTF8(toString(range(rand(1) % 50)), -(rand(2) % 50), rand(3) % 50) AS res FROM numbers(1000000); + +SELECT DISTINCT substring(toString(range(rand(1) % 50)), -(rand(2) % 50)) = substringUTF8(toString(range(rand(1) % 50)), -(rand(2) % 50)) AS res FROM numbers(1000000); diff --git a/dbms/tests/queries/1_stateful/00140_rename.sql b/dbms/tests/queries/1_stateful/00140_rename.sql index 2b24ef084b2..b0ecd2aeb92 100644 --- a/dbms/tests/queries/1_stateful/00140_rename.sql +++ b/dbms/tests/queries/1_stateful/00140_rename.sql @@ -21,12 +21,12 @@ RENAME TABLE test.hits10 TO test.hits; SELECT count() FROM test.hits WHERE CounterID = 732797; -RENAME TABLE test.hits TO hits, test.visits TO test.hits; +RENAME TABLE test.hits TO default.hits, test.visits TO test.hits; SELECT sum(Sign) FROM test.hits WHERE CounterID = 912887; -SELECT count() FROM hits WHERE CounterID = 732797; +SELECT count() FROM default.hits WHERE CounterID = 732797; -RENAME TABLE test.hits TO test.visits, hits TO test.hits; +RENAME TABLE test.hits TO test.visits, default.hits TO test.hits; SELECT count() FROM test.hits WHERE CounterID = 732797; SELECT sum(Sign) FROM test.visits WHERE CounterID = 912887; diff --git a/dbms/tests/queries/shell_config.sh b/dbms/tests/queries/shell_config.sh index a972690e0cf..ec65f148b01 100644 --- a/dbms/tests/queries/shell_config.sh +++ b/dbms/tests/queries/shell_config.sh @@ -1,9 +1,10 @@ - +export CLICKHOUSE_DATABASE=${CLICKHOUSE_DATABASE:="test"} export CLICKHOUSE_CLIENT_SERVER_LOGS_LEVEL=${CLICKHOUSE_CLIENT_SERVER_LOGS_LEVEL:="warning"} [ -n "$CLICKHOUSE_CONFIG_CLIENT" ] && CLICKHOUSE_CLIENT_OPT0+=" --config-file=${CLICKHOUSE_CONFIG_CLIENT} " [ -n "${CLICKHOUSE_HOST}" ] && CLICKHOUSE_CLIENT_OPT0+=" --host=${CLICKHOUSE_HOST} " [ -n "${CLICKHOUSE_PORT_TCP}" ] && CLICKHOUSE_CLIENT_OPT0+=" --port=${CLICKHOUSE_PORT_TCP} " [ -n "${CLICKHOUSE_CLIENT_SERVER_LOGS_LEVEL}" ] && CLICKHOUSE_CLIENT_OPT0+=" --send_logs_level=${CLICKHOUSE_CLIENT_SERVER_LOGS_LEVEL} " +[ -n "${CLICKHOUSE_DATABASE}" ] && CLICKHOUSE_CLIENT_OPT0+=" --database=${CLICKHOUSE_DATABASE} " export CLICKHOUSE_BINARY=${CLICKHOUSE_BINARY:="clickhouse"} [ -x "$CLICKHOUSE_BINARY-client" ] && CLICKHOUSE_CLIENT_BINARY=${CLICKHOUSE_CLIENT_BINARY:=$CLICKHOUSE_BINARY-client} @@ -35,6 +36,7 @@ export CLICKHOUSE_PORT_HTTPS=${CLICKHOUSE_PORT_HTTPS:="8443"} export CLICKHOUSE_PORT_HTTP_PROTO=${CLICKHOUSE_PORT_HTTP_PROTO:="http"} export CLICKHOUSE_URL=${CLICKHOUSE_URL:="${CLICKHOUSE_PORT_HTTP_PROTO}://${CLICKHOUSE_HOST}:${CLICKHOUSE_PORT_HTTP}/"} export CLICKHOUSE_URL_HTTPS=${CLICKHOUSE_URL_HTTPS:="https://${CLICKHOUSE_HOST}:${CLICKHOUSE_PORT_HTTPS}/"} +export CLICKHOUSE_URL_PARAMS=${CLICKHOUSE_URL_PARAMS:="${CLICKHOUSE_URL}?database=${CLICKHOUSE_DATABASE}"} export CLICKHOUSE_CURL_COMMAND=${CLICKHOUSE_CURL_COMMAND:="curl"} export CLICKHOUSE_CURL=${CLICKHOUSE_CURL:="${CLICKHOUSE_CURL_COMMAND} --max-time 10"} export CLICKHOUSE_TMP=${CLICKHOUSE_TMP:="."} diff --git a/debian/clickhouse-server-base.install b/debian/clickhouse-server-base.install deleted file mode 100644 index 2a1411e7b56..00000000000 --- a/debian/clickhouse-server-base.install +++ /dev/null @@ -1,12 +0,0 @@ -usr/bin/clickhouse -usr/bin/clickhouse-server -usr/bin/clickhouse-clang -usr/bin/clickhouse-lld -usr/bin/clickhouse-copier -usr/bin/clickhouse-odbc-bridge -usr/bin/clickhouse-report -etc/systemd/system/clickhouse-server.service -etc/init.d/clickhouse-server -etc/cron.d/clickhouse-server -usr/share/clickhouse/* -etc/security/limits.d/clickhouse.conf diff --git a/debian/clickhouse-server.service b/debian/clickhouse-server.service index d26a543a146..8050de49748 100644 --- a/debian/clickhouse-server.service +++ b/debian/clickhouse-server.service @@ -5,7 +5,6 @@ Description=ClickHouse Server (analytic DBMS for big data) Type=simple User=clickhouse Group=clickhouse -PermissionsStartOnly=true Restart=always RestartSec=30 ExecStart=/usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml diff --git a/debian/control b/debian/control index 78ea9069731..e2b720b2508 100644 --- a/debian/control +++ b/debian/control @@ -15,7 +15,7 @@ Standards-Version: 3.9.8 Package: clickhouse-client Architecture: all -Depends: ${shlibs:Depends}, ${misc:Depends}, clickhouse-common-static (= ${binary:Version}) | clickhouse-server-base (= ${binary:Version}) +Depends: ${shlibs:Depends}, ${misc:Depends}, clickhouse-common-static (= ${binary:Version}) Replaces: clickhouse-compressor Conflicts: clickhouse-compressor Description: Client binary for ClickHouse diff --git a/debian/pbuilder-hooks/B90test-server b/debian/pbuilder-hooks/B90test-server index 2a4ecb6a3f8..65cd0713001 100755 --- a/debian/pbuilder-hooks/B90test-server +++ b/debian/pbuilder-hooks/B90test-server @@ -17,6 +17,10 @@ if [ "${PACKAGE_INSTALL}" ]; then apt install -y -f --allow-downgrades ||: dpkg -l | grep clickhouse ||: + # Second install to replace debian versions + dpkg --auto-deconfigure -i /tmp/buildd/*.deb ||: + dpkg -l | grep clickhouse ||: + # Some test references uses specific timezone ln -fs /usr/share/zoneinfo/Europe/Moscow /etc/localtime echo 'Europe/Moscow' > /etc/timezone diff --git a/debian/rules b/debian/rules index 0916b99f638..7c008d7456d 100755 --- a/debian/rules +++ b/debian/rules @@ -122,11 +122,6 @@ override_dh_install: touch $(DESTDIR)/etc/clickhouse-server/metrika/config.xml touch $(DESTDIR)/etc/clickhouse-server/metrika/users.xml - # todo: remove after removing clickhouse-server-base package: - #mkdir -p $(DESTDIR)/etc/init.d $(DESTDIR)/etc/cron.d - #cp debian/clickhouse-server.init $(DESTDIR)/etc/init.d/clickhouse-server - #cp debian/clickhouse-server.cron.d $(DESTDIR)/etc/cron.d/clickhouse-server - dh_install --list-missing --sourcedir=$(DESTDIR) override_dh_auto_install: diff --git a/docker/test/pvs/Dockerfile b/docker/test/pvs/Dockerfile new file mode 100644 index 00000000000..5467b6e79a0 --- /dev/null +++ b/docker/test/pvs/Dockerfile @@ -0,0 +1,25 @@ +FROM yandex/clickhouse-binary-builder + +RUN apt-get --allow-unauthenticated update -y \ + && env DEBIAN_FRONTEND=noninteractive \ + apt-get --allow-unauthenticated install --yes --no-install-recommends \ + bash \ + sudo \ + wget \ + software-properties-common \ + gpg-agent + +RUN wget -q -O - http://files.viva64.com/etc/pubkey.txt | sudo apt-key add - +RUN sudo wget -O /etc/apt/sources.list.d/viva64.list http://files.viva64.com/etc/viva64.list + +RUN apt-get --allow-unauthenticated update -y \ + && env DEBIAN_FRONTEND=noninteractive \ + apt-get --allow-unauthenticated install --yes --no-install-recommends \ + pvs-studio + +CMD cd /repo_folder && pvs-studio-analyzer credentials $LICENCE_NAME $LICENCE_KEY -o ./licence.lic \ + && cmake . && ninja re2_st && \ + pvs-studio-analyzer analyze -o pvs-studio.log -e contrib -j 4 -l ./licence.lic; \ + plog-converter -a GA:1,2 -t fullhtml -o /test_output/pvs-studio-html-report pvs-studio.log; \ + plog-converter -a GA:1,2 -t tasklist -o /test_output/pvs-studio-task-report.txt pvs-studio.log + diff --git a/docs/en/interfaces/formats.md b/docs/en/interfaces/formats.md index a97270a39b3..4a7a7b9e8c5 100644 --- a/docs/en/interfaces/formats.md +++ b/docs/en/interfaces/formats.md @@ -646,9 +646,9 @@ See also [Format Schema](#formatschema). Protobuf - is a [Protocol Buffers](https://developers.google.com/protocol-buffers/) format. -ClickHouse supports both `proto2` and `proto3`. Repeated/optional/required fields are supported. - This format requires an external format schema. The schema is cached between queries. +ClickHouse supports both `proto2` and `proto3` syntaxes. Repeated/optional/required fields are supported. + Usage examples: ```sql @@ -659,7 +659,7 @@ SELECT * FROM test.table FORMAT Protobuf SETTINGS format_schema = 'schemafile:Me cat protobuf_messages.bin | clickhouse-client --query "INSERT INTO test.table FORMAT Protobuf SETTINGS format_schema='schemafile:MessageType'" ``` -Where the file `schemafile.proto` looks like this: +where the file `schemafile.proto` looks like this: ``` syntax = "proto3"; @@ -691,11 +691,13 @@ message MessageType { ``` ClickHouse tries to find a column named `x.y.z` (or `x_y_z` or `X.y_Z` and so on). -Nested messages are suitable to input or output a [nested data structures](../data_types/nested_data_structures/nested/). +Nested messages are suitable to input or output a [nested data structures](../data_types/nested_data_structures/nested.md). -Default values defined in a `proto2` protobuf schema like this +Default values defined in a protobuf schema like this ``` +syntax = "proto2"; + message MessageType { optional int32 result_per_page = 3 [default = 10]; } @@ -703,6 +705,10 @@ message MessageType { are not applied; the [table defaults](../query_language/create.md#create-default-values) are used instead of them. +ClickHouse inputs and outputs protobuf messages in the `length-delimited` format. +It means before every message should be written its length as a [varint](https://developers.google.com/protocol-buffers/docs/encoding#varints). +See also [how to read/write length-delimited protobuf messages in popular languages](https://cwiki.apache.org/confluence/display/GEODE/Delimiting+Protobuf+Messages). + ## Format Schema {#formatschema} The file name containing the format schema is set by the setting `format_schema`. diff --git a/docs/en/interfaces/http.md b/docs/en/interfaces/http.md index a72a2e4a06e..e1d1708a04e 100644 --- a/docs/en/interfaces/http.md +++ b/docs/en/interfaces/http.md @@ -128,12 +128,12 @@ echo 'DROP TABLE t' | curl 'http://localhost:8123/' --data-binary @- For successful requests that don't return a data table, an empty response body is returned. -You can use the internal ClickHouse compression format when transmitting data. The compressed data has a non-standard format, and you will need to use the special `clickhouse-compressor` program to work with it (it is installed with the `clickhouse-client` package). To increase the efficiency of the data insertion, you may disable the server-side checksum verification with the [http_native_compression_disable_checksumming_on_decompress](../operations/settings/settings.md#settings-http_native_compression_disable_checksumming_on_decompress) setting. +You can use the internal ClickHouse compression format when transmitting data. The compressed data has a non-standard format, and you will need to use the special `clickhouse-compressor` program to work with it (it is installed with the `clickhouse-client` package). To increase the efficiency of data insertion, you can disable server-side checksum verification by using the [http_native_compression_disable_checksumming_on_decompress](../operations/settings/settings.md#settings-http_native_compression_disable_checksumming_on_decompress) setting. -If you specified `compress = 1` in the URL, the server compresses the data it sends you. -If you specified `decompress = 1` in the URL, the server decompresses the same data that you pass in the `POST` method. +If you specified `compress=1` in the URL, the server compresses the data it sends you. +If you specified `decompress=1` in the URL, the server decompresses the same data that you pass in the `POST` method. -It is also possible to use the standard `gzip`-based [HTTP compression](https://en.wikipedia.org/wiki/HTTP_compression). To send a `POST` request compressed using `gzip`, append the request header `Content-Encoding: gzip`. +It is also possible to use standard `gzip`-based [HTTP compression](https://en.wikipedia.org/wiki/HTTP_compression). To send a `POST` request compressed using `gzip`, append the request header `Content-Encoding: gzip`. In order for ClickHouse to compress the response using `gzip`, you must append `Accept-Encoding: gzip` to the request headers, and enable the ClickHouse [enable_http_compression](../operations/settings/settings.md#settings-enable_http_compression) setting. You can configure the compression level of the data with the [http_zlib_compression_level](#settings-http_zlib_compression_level) setting. You can use this to reduce network traffic when transmitting a large amount of data, or for creating dumps that are immediately compressed. @@ -149,7 +149,7 @@ echo "SELECT 1" | gzip -c | curl -sS --data-binary @- -H 'Content-Encoding: gzip ``` !!! note "Note" - Some HTTP clients can decompress data (`gzip` and `deflate`) from the server by default and you may get the decompressed data even if you use the compression settings correctly. + Some HTTP clients might decompress data from the server by default (with `gzip` and `deflate`) and you might get decompressed data even if you use the compression settings correctly. You can use the 'database' URL parameter to specify the default database. @@ -183,10 +183,10 @@ echo 'SELECT 1' | curl 'http://user:password@localhost:8123/' -d @- echo 'SELECT 1' | curl 'http://localhost:8123/?user=user&password=password' -d @- ``` -If the user name is not indicated, the username 'default' is used. If the password is not indicated, an empty password is used. +If the user name is not specified, the `default` name is used. If the password is not specified, the empty password is used. You can also use the URL parameters to specify any settings for processing a single query, or entire profiles of settings. Example:http://localhost:8123/?profile=web&max_rows_to_read=1000000000&query=SELECT+1 -For more information, see the section "Settings". +For more information, see the [Settings][../operations/settings/index.md] section. ```bash $ echo 'SELECT number FROM system.numbers LIMIT 10' | curl 'http://localhost:8123/?' --data-binary @- diff --git a/docs/en/interfaces/third-party/integrations.md b/docs/en/interfaces/third-party/integrations.md index 97468341529..6533145c866 100644 --- a/docs/en/interfaces/third-party/integrations.md +++ b/docs/en/interfaces/third-party/integrations.md @@ -51,6 +51,9 @@ - [loghouse](https://github.com/flant/loghouse) (for [Kubernetes](https://kubernetes.io)) - [logagent](https://www.sematext.com/logagent) - [logagent output-plugin-clickhouse](https://sematext.com/docs/logagent/output-plugin-clickhouse/) +- Geo + - [MaxMind](https://dev.maxmind.com/geoip/) + - [clickhouse-maxmind-geoip](https://github.com/AlexeyKupershtokh/clickhouse-maxmind-geoip) ## Programming Language Ecosystems diff --git a/docs/en/operations/server_settings/settings.md b/docs/en/operations/server_settings/settings.md index e610dcbdc14..cbd70b178c5 100644 --- a/docs/en/operations/server_settings/settings.md +++ b/docs/en/operations/server_settings/settings.md @@ -489,31 +489,18 @@ Keys for server/client settings: ``` -## part_log +## part_log {#server_settings-part-log} Logging events that are associated with [MergeTree](../../operations/table_engines/mergetree.md). For instance, adding or merging data. You can use the log to simulate merge algorithms and compare their characteristics. You can visualize the merge process. -Queries are logged in the ClickHouse table, not in a separate file. - -Columns in the log: - -- event_time – Date of the event. -- duration_ms – Duration of the event. -- event_type – Type of event. 1 – new data part; 2 – merge result; 3 – data part downloaded from replica; 4 – data part deleted. -- database_name – The name of the database. -- table_name – Name of the table. -- part_name – Name of the data part. -- partition_id – The identifier of the partition. -- size_in_bytes – Size of the data part in bytes. -- merged_from – An array of names of data parts that make up the merge (also used when downloading a merged part). -- merge_time_ms – Time spent on the merge. +Queries are logged in the [system.part_log](../system_tables.md#system_tables-part-log) table, not in a separate file. You can configure the name of this table in the `table` parameter (see below). Use the following parameters to configure logging: -- database – Name of the database. -- table – Name of the table. -- partition_by – Sets a [custom partitioning key](../../operations/table_engines/custom_partitioning_key.md). -- flush_interval_milliseconds – Interval for flushing data from the buffer in memory to the table. +- `database` – Name of the database. +- `table` – Name of the system table. +- `partition_by` – Sets a [custom partitioning key](../../operations/table_engines/custom_partitioning_key.md). +- `flush_interval_milliseconds` – Interval for flushing data from the buffer in memory to the table. **Example** diff --git a/docs/en/operations/settings/settings.md b/docs/en/operations/settings/settings.md index eaa12c66e53..5abb9f83c63 100644 --- a/docs/en/operations/settings/settings.md +++ b/docs/en/operations/settings/settings.md @@ -14,7 +14,7 @@ Restrictions: - If the subquery concerns a distributed table containing more than one shard, - Not used for a table-valued [remote](../../query_language/table_functions/remote.md) function. -The possible values are: +Possible values: - `deny` — Default value. Prohibits using these types of subqueries (returns the "Double-distributed in/JOIN subqueries is denied" exception). - `local` — Replaces the database and table in the subquery with local ones for the destination server (shard), leaving the normal `IN`/`JOIN.` @@ -29,8 +29,8 @@ Predicate pushdown may significantly reduce network traffic for distributed quer Possible values: -- 0 — Functionality is turned off. -- 1 — Functionality is turned on. +- 0 — Disabled. +- 1 — Enabled. Default value: 0. @@ -75,42 +75,42 @@ If `force_primary_key=1`, ClickHouse checks to see if the query has a primary ke ## fsync_metadata -Enable or disable fsync when writing .sql files. Enabled by default. +Enables or disables [fsync](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html) when writing `.sql` files. Enabled by default. It makes sense to disable it if the server has millions of tiny table chunks that are constantly being created and destroyed. ## enable_http_compression {#settings-enable_http_compression} -Enables/disables compression of the data in the response to an HTTP request. +Enables or disables data compression in the response to an HTTP request. For more information, read the [HTTP interface description](../../interfaces/http.md). Possible values: -- 0 — The functionality is disabled. -- 1 — The functionality is enabled. +- 0 — Disabled. +- 1 — Enabled. Default value: 0. ## http_zlib_compression_level {#settings-http_zlib_compression_level} -Sets the level of the compression of the data in the response to an HTTP request if [enable_http_compression = 1](#settings-enable_http_compression). +Sets the level of data compression in the response to an HTTP request if [enable_http_compression = 1](#settings-enable_http_compression). -Possible values: numbers from 1 to 9. +Possible values: Numbers from 1 to 9. Default value: 3. ## http_native_compression_disable_checksumming_on_decompress {#settings-http_native_compression_disable_checksumming_on_decompress} -Enables/disables the verification of the checksum when uncompressing the HTTP POST data from the client. Used only for ClickHouse native format of compression (neither `gzip` nor `deflate`). +Enables or disables checksum verification when decompressing the HTTP POST data from the client. Used only for ClickHouse native compression format (not used with `gzip` or `deflate`). For more information, read the [HTTP interface description](../../interfaces/http.md). Possible values: -- 0 — The functionality is disabled. -- 1 — The functionality is enabled. +- 0 — Disabled. +- 1 — Enabled. Default value: 0. @@ -142,23 +142,23 @@ If `input_format_allow_errors_ratio` is exceeded, ClickHouse throws an exception ## input_format_values_interpret_expressions {#settings-input_format_values_interpret_expressions} -Turns on the full SQL parser if the fast stream parser can't parse the data. This setting is used only for [Values](../../interfaces/formats.md#data-format-values) format at the data insertion. For more information about syntax parsing, see the [Syntax](../../query_language/syntax.md) section. +Enables or disables the full SQL parser if the fast stream parser can't parse the data. This setting is used only for the [Values](../../interfaces/formats.md#data-format-values) format at the data insertion. For more information about syntax parsing, see the [Syntax](../../query_language/syntax.md) section. Possible values: -- 0 — The functionality is turned off. +- 0 — Disabled. In this case, you must provide formatted data. See the [Formats](../../interfaces/formats.md) section. -- 1 — The functionality is turned on. +- 1 — Enabled. - In this case, you can use an SQL expression as a value, but ClickHouse inserts the data much slower this way. If you insert only formatted data, then ClickHouse behaves as the setting value is 0. + In this case, you can use an SQL expression as a value, but data insertion is much slower this way. If you insert only formatted data, then ClickHouse behaves as if the setting value is 0. Default value: 1. **Example of Use** -Let's try to insert the [DateTime](../../data_types/datetime.md) type value with the different settings. +Insert the [DateTime](../../data_types/datetime.md) type value with the different settings. ```sql SET input_format_values_interpret_expressions = 0; @@ -175,7 +175,7 @@ INSERT INTO datetime_t VALUES (now()) Ok. ``` -The last query is equivalent to the following. +The last query is equivalent to the following: ```sql SET input_format_values_interpret_expressions = 0; @@ -189,7 +189,7 @@ Ok. Turns on/off the extended data exchange between a ClickHouse client and a ClickHouse server. This setting applies for `INSERT` queries. -When executing the `INSERT` query, ClickHouse client prepares data and sends it to the server for writing. During the preparation of the data, the client gets the table structure from the server. In some cases, the client needs more information than the server sends by default. Turn on the extended data exchange with `input_format_defaults_for_omitted_fields = 1`. +When executing the `INSERT` query, the ClickHouse client prepares data and sends it to the server for writing. The client gets the table structure from the server when preparing the data. In some cases, the client needs more information than the server sends by default. Turn on the extended data exchange with `input_format_defaults_for_omitted_fields = 1`. When the extended data exchange is enabled, the server sends the additional metadata along with the table structure. The composition of the metadata depends on the operation. @@ -204,8 +204,8 @@ For all other operations, ClickHouse doesn't apply the setting. **Possible values** -- 0 — Functionality is disabled. -- 1 — Functionality is enabled. +- 0 — Disabled. +- 1 — Enabled. **Default value:** 0. @@ -580,15 +580,20 @@ Default value: 60 seconds. ## select_sequential_consistency {#settings-select_sequential_consistency} -Enables/disables sequential consistency for `SELECT` queries: +Enables or disables sequential consistency for `SELECT` queries: + +Possible values: - 0 — Disabled. - 1 — Enabled. + Default value: 0. +**Usage** + When sequential consistency is enabled, ClickHouse allows the client to execute the `SELECT` query only for those replicas that contain data from all previous `INSERT` queries executed with `insert_quorum`. If the client refers to a partial replica, ClickHouse will generate an exception. The SELECT query will not include data that has not yet been written to the quorum of replicas. -See also the following parameters: +**See Also** - [insert_quorum](#settings-insert_quorum) - [insert_quorum_timeout](#settings-insert_quorum_timeout) diff --git a/docs/en/operations/system_tables.md b/docs/en/operations/system_tables.md index a8a9e2e80af..faa32216ca3 100644 --- a/docs/en/operations/system_tables.md +++ b/docs/en/operations/system_tables.md @@ -98,7 +98,8 @@ Columns: Contains information about parameters [graphite_rollup](server_settings/settings.md#server_settings-graphite_rollup) which use in tables with [\*GraphiteMergeTree](table_engines/graphitemergetree.md) engines. -Столбцы: +Columns: + - `config_name` (String) - `graphite_rollup` parameter name. - `regexp` (String) - A pattern for the metric name. - `function` (String) - The name of the aggregating function. @@ -201,6 +202,33 @@ Formats: - engine (String) – Name of the table engine without parameters. +## system.part_log {#system_tables-part-log} + +The `system.part_log` table is created only if the [part_log](server_settings/settings.md#server_settings-part-log) server setting is specified. + +This table contains information about the events that occurred with the [data parts](table_engines/custom_partitioning_key.md) in the [MergeTree](table_engines/mergetree.md) family tables. For instance, adding or merging data. + +The `system.part_log` table contains the following columns: + +- `event_type` (Enum) — Type of the event that occurred with the data part. Can have one of the following values: `NEW_PART` — inserting, `MERGE_PARTS` — merging, `DOWNLOAD_PART` — downloading, `REMOVE_PART` — removing or detaching using [DETACH PARTITION](../query_language/alter.md#alter_detach-partition), `MUTATE_PART` — updating. +- `event_date` (Date) — Event date. +- `event_time` (DateTime) — Event time. +- `duration_ms` (UInt64) — Duration. +- `database` (String) — Name of the database the data part is in. +- `table` (String) — Name of the table the data part is in. +- `part_name` (String) — Name of the data part. +- `partition_id` (String) — ID of the partition that the data part was inserted to. The column takes the 'all' value if the partitioning is by `tuple()`. +- `rows` (UInt64) — The number of rows in the data part. +- `size_in_bytes` (UInt64) — Size of the data part in bytes. +- `merged_from` (Array(String)) — An array of names of the parts which the current part was made up from (after the merge). +- `bytes_uncompressed` (UInt64) — Size of uncompressed bytes. +- `read_rows` (UInt64) — The number of rows was read during the merge. +- `read_bytes` (UInt64) — The number of bytes was read during the merge. +- `error` (UInt16) — The code number of the occurred error. +- `exception` (String) — Text message of the occurred error. + +The `system.part_log` table is created after the first inserting data to the `MergeTree` table. + ## system.processes This system table is used for implementing the `SHOW PROCESSLIST` query. diff --git a/docs/en/operations/table_engines/distributed.md b/docs/en/operations/table_engines/distributed.md index 39f99d30a3f..ade20da4eff 100644 --- a/docs/en/operations/table_engines/distributed.md +++ b/docs/en/operations/table_engines/distributed.md @@ -63,8 +63,8 @@ Cluster names must not contain dots. The parameters `host`, `port`, and optionally `user`, `password`, `secure`, `compression` are specified for each server: : - `host` – The address of the remote server. You can use either the domain or the IPv4 or IPv6 address. If you specify the domain, the server makes a DNS request when it starts, and the result is stored as long as the server is running. If the DNS request fails, the server doesn't start. If you change the DNS record, restart the server. -- `port`– The TCP port for messenger activity ('tcp_port' in the config, usually set to 9000). Do not confuse it with http_port. -- `user`– Name of the user for connecting to a remote server. Default value: default. This user must have access to connect to the specified server. Access is configured in the users.xml file. For more information, see the section "Access rights". +- `port` – The TCP port for messenger activity ('tcp_port' in the config, usually set to 9000). Do not confuse it with http_port. +- `user` – Name of the user for connecting to a remote server. Default value: default. This user must have access to connect to the specified server. Access is configured in the users.xml file. For more information, see the section "Access rights". - `password` – The password for connecting to a remote server (not masked). Default value: empty string. - `secure` - Use ssl for connection, usually you also should define `port` = 9440. Server should listen on 9440 and have correct certificates. - `compression` - Use data compression. Default value: true. diff --git a/docs/en/operations/table_engines/mergetree.md b/docs/en/operations/table_engines/mergetree.md index a9ea822c8f8..f0167140a0e 100644 --- a/docs/en/operations/table_engines/mergetree.md +++ b/docs/en/operations/table_engines/mergetree.md @@ -31,8 +31,8 @@ Main features: ``` CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] ( - name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], - name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2], ... INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1, INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2 @@ -41,6 +41,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] [ORDER BY expr] [PRIMARY KEY expr] [SAMPLE BY expr] +[TTL expr] [SETTINGS name=value, ...] ``` @@ -66,10 +67,18 @@ For a description of request parameters, see [request description](../../query_l If a sampling expression is used, the primary key must contain it. Example: `SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))`. +- `TTL` - An expression for setting storage time for rows. + + It must depends on `Date` or `DateTime` column and has one `Date` or `DateTime` column as a result. Example: + `TTL date + INTERVAL 1 DAY` + + For more details, see [TTL for columns and tables](mergetree.md) + - `SETTINGS` — Additional parameters that control the behavior of the `MergeTree`: - `index_granularity` — The granularity of an index. The number of data rows between the "marks" of an index. By default, 8192. The list of all available parameters you can see in [MergeTreeSettings.h](https://github.com/yandex/ClickHouse/blob/master/dbms/src/Storages/MergeTree/MergeTreeSettings.h). - `use_minimalistic_part_header_in_zookeeper` — Storage method of the data parts headers in ZooKeeper. If `use_minimalistic_part_header_in_zookeeper=1`, then ZooKeeper stores less data. For more information refer the [setting description](../server_settings/settings.md#server-settings-use_minimalistic_part_header_in_zookeeper) in the "Server configuration parameters" chapter. - `min_merge_bytes_to_use_direct_io` — The minimum data volume for merge operation required for using of the direct I/O access to the storage disk. During the merging of the data parts, ClickHouse calculates summary storage volume of all the data to be merged. If the volume exceeds `min_merge_bytes_to_use_direct_io` bytes, then ClickHouse reads and writes the data using direct I/O interface (`O_DIRECT` option) to the storage disk. If `min_merge_bytes_to_use_direct_io = 0`, then the direct I/O is disabled. Default value: `10 * 1024 * 1024 * 1024` bytes. + - `merge_with_ttl_timeout` - Minimal time in seconds, when merge with TTL can be repeated. Default value: 86400 (1 day). **Example of sections setting** @@ -298,4 +307,13 @@ For concurrent table access, we use multi-versioning. In other words, when a tab Reading from a table is automatically parallelized. + +## TTL for columns and tables + +Data with expired TTL is removed while executing merges. + +If TTL is set for column, when it expires, value will be replaced by default. If all values in columns were zeroed in part, data for this column will be deleted from disk for part. You are not allowed to set TTL for all key columns. If TTL is set for table, when it expires, row will be deleted. + +When TTL expires on some value or row in part, extra merge will be executed. To control frequency of merges with TTL you can set `merge_with_ttl_timeout`. If it is too low, many extra merges and lack of regular merges can reduce the perfomance. + [Original article](https://clickhouse.yandex/docs/en/operations/table_engines/mergetree/) diff --git a/docs/en/query_language/alter.md b/docs/en/query_language/alter.md index e52abc35c00..85941987ce9 100644 --- a/docs/en/query_language/alter.md +++ b/docs/en/query_language/alter.md @@ -7,7 +7,7 @@ The `ALTER` query is only supported for `*MergeTree` tables, as well as `Merge`a Changing the table structure. ``` sql -ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN ... +ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ... ``` In the query, specify a list of one or more comma-separated actions. @@ -15,37 +15,99 @@ Each action is an operation on a column. The following actions are supported: -``` sql -ADD COLUMN name [type] [default_expr] [AFTER name_after] -``` +- [ADD COLUMN](#alter_add-column) — Adds a new column to the table. +- [DROP COLUMN](#alter_drop-column) — Deletes the column. +- [CLEAR COLUMN](#alter_clear-column) — Resets column values. +- [COMMENT COLUMN](#alter_comment-column) — Adds a text comment to the column. +- [MODIFY COLUMN](#alter_modify-column) — Changes column's type and/or default expression. -Adds a new column to the table with the specified name, type, and `default_expr` (see the section "Default expressions"). If you specify `AFTER name_after` (the name of another column), the column is added after the specified one in the list of table columns. Otherwise, the column is added to the end of the table. Note that there is no way to add a column to the beginning of a table. For a chain of actions, 'name_after' can be the name of a column that is added in one of the previous actions. +Detailed description of these actions is shown below. -Adding a column just changes the table structure, without performing any actions with data. The data doesn't appear on the disk after ALTER. If the data is missing for a column when reading from the table, it is filled in with default values (by performing the default expression if there is one, or using zeros or empty strings). The column appears on the disk after merging data parts (see MergeTree). - -This approach allows us to complete the ALTER query instantly, without increasing the volume of old data. +#### ADD COLUMN {#alter_add-column} ``` sql -DROP COLUMN name +ADD COLUMN [IF NOT EXISTS] name [type] [default_expr] [AFTER name_after] ``` -Deletes the column with the name 'name'. +Adds a new column to the table with the specified `name`, `type`, and `default_expr` (see the section [Default expressions](create.md#create-default-values)). + +If the `IF NOT EXISTS` clause is included, the query won't return an error if the column already exists. If you specify `AFTER name_after` (the name of another column), the column is added after the specified one in the list of table columns. Otherwise, the column is added to the end of the table. Note that there is no way to add a column to the beginning of a table. For a chain of actions, `name_after` can be the name of a column that is added in one of the previous actions. + +Adding a column just changes the table structure, without performing any actions with data. The data doesn't appear on the disk after `ALTER`. If the data is missing for a column when reading from the table, it is filled in with default values (by performing the default expression if there is one, or using zeros or empty strings). The column appears on the disk after merging data parts (see [MergeTree](../operations/table_engines/mergetree.md)). + +This approach allows us to complete the `ALTER` query instantly, without increasing the volume of old data. + +Example: + +``` sql +ALTER TABLE visits ADD COLUMN browser String AFTER user_id +``` + +#### DROP COLUMN {#alter_drop-column} + +``` sql +DROP COLUMN [IF EXISTS] name +``` + +Deletes the column with the name `name`. If the `IF EXISTS` clause is specified, the query won't return an error if the column doesn't exist. Deletes data from the file system. Since this deletes entire files, the query is completed almost instantly. -``` sql -CLEAR COLUMN name IN PARTITION partition_name -``` - -Clears all data in a column in a specified partition. +Example: ``` sql -MODIFY COLUMN name [type] [default_expr] +ALTER TABLE visits DROP COLUMN browser ``` -Changes the 'name' column's type to 'type' and/or the default expression to 'default_expr'. When changing the type, values are converted as if the 'toType' function were applied to them. +#### CLEAR COLUMN {#alter_clear-column} -If only the default expression is changed, the query doesn't do anything complex, and is completed almost instantly. +``` sql +CLEAR COLUMN [IF EXISTS] name IN PARTITION partition_name +``` + +Resets all data in a column for a specified partition. Read more about setting the partition name in the section [How to specify the partition expression](#alter-how-to-specify-part-expr). + +If the `IF EXISTS` clause is specified, the query won't return an error if the column doesn't exist. + +Example: + +``` sql +ALTER TABLE visits CLEAR COLUMN browser IN PARTITION tuple() +``` + +#### COMMENT COLUMN {#alter_comment-column} + +``` sql +COMMENT COLUMN [IF EXISTS] name 'comment' +``` + +Adds a comment to the column. If the `IF EXISTS` clause is specified, the query won't return an error if the column doesn't exist. + +Each column can have one comment. If a comment already exists for the column, a new comment overwrites the previous comment. + +Comments are stored in the `comment_expression` column returned by the [DESCRIBE TABLE](misc.md#misc-describe-table) query. + +Example: + +``` sql +ALTER TABLE visits COMMENT COLUMN browser 'The table shows the browser used for accessing the site.' +``` + +#### MODIFY COLUMN {#alter_modify-column} + +``` sql +MODIFY COLUMN [IF EXISTS] name [type] [default_expr] +``` + +This query changes the `name` column's type to `type` and/or the default expression to `default_expr`. If the `IF EXISTS` clause is specified, the query won't return an error if the column doesn't exist. + +When changing the type, values are converted as if the [toType](functions/type_conversion_functions.md) functions were applied to them. If only the default expression is changed, the query doesn't do anything complex, and is completed almost instantly. + +Example: + +``` sql +ALTER TABLE visits MODIFY COLUMN browser Array(String) +``` Changing the column type is the only complex action – it changes the contents of files with data. For large tables, this may take a long time. @@ -59,19 +121,20 @@ There are several processing stages: Only the first stage takes time. If there is a failure at this stage, the data is not changed. If there is a failure during one of the successive stages, data can be restored manually. The exception is if the old files were deleted from the file system but the data for the new files did not get written to the disk and was lost. +The `ALTER` query for changing columns is replicated. The instructions are saved in ZooKeeper, then each replica applies them. All `ALTER` queries are run in the same order. The query waits for the appropriate actions to be completed on the other replicas. However, a query to change columns in a replicated table can be interrupted, and all actions will be performed asynchronously. + +#### ALTER Query Limitations + The `ALTER` query lets you create and delete separate elements (columns) in nested data structures, but not whole nested data structures. To add a nested data structure, you can add columns with a name like `name.nested_name` and the type `Array(T)`. A nested data structure is equivalent to multiple array columns with a name that has the same prefix before the dot. -There is no support for deleting columns in the primary key or the sampling key (columns that are in the `ENGINE` expression). Changing the type for columns that are included in the primary key is only possible if this change does not cause the data to be modified (for example, it is allowed to add values to an Enum or change a type with `DateTime` to `UInt32`). +There is no support for deleting columns in the primary key or the sampling key (columns that are used in the `ENGINE` expression). Changing the type for columns that are included in the primary key is only possible if this change does not cause the data to be modified (for example, it is allowed to add values to an Enum or to change a type from `DateTime` to `UInt32`). -If the `ALTER` query is not sufficient for making the table changes you need, you can create a new table, copy the data to it using the `INSERT SELECT` query, then switch the tables using the `RENAME` query and delete the old table. +If the `ALTER` query is not sufficient to make the table changes you need, you can create a new table, copy the data to it using the [INSERT SELECT](insert_into.md#insert_query_insert-select) query, then switch the tables using the [RENAME](misc.md#misc_operations-rename) query and delete the old table. You can use the [clickhouse-copier](../operations/utils/clickhouse-copier.md) as an alternative to the `INSERT SELECT` query. The `ALTER` query blocks all reads and writes for the table. In other words, if a long `SELECT` is running at the time of the `ALTER` query, the `ALTER` query will wait for it to complete. At the same time, all new queries to the same table will wait while this `ALTER` is running. For tables that don't store data themselves (such as `Merge` and `Distributed`), `ALTER` just changes the table structure, and does not change the structure of subordinate tables. For example, when running ALTER for a `Distributed` table, you will also need to run `ALTER` for the tables on all remote servers. -The `ALTER` query for changing columns is replicated. The instructions are saved in ZooKeeper, then each replica applies them. All `ALTER` queries are run in the same order. The query waits for the appropriate actions to be completed on the other replicas. However, a query to change columns in a replicated table can be interrupted, and all actions will be performed asynchronously. - - ### Manipulations With Key Expressions The following command is supported: diff --git a/docs/en/query_language/create.md b/docs/en/query_language/create.md index 265883df22b..f8e1bab3f78 100644 --- a/docs/en/query_language/create.md +++ b/docs/en/query_language/create.md @@ -17,8 +17,8 @@ The `CREATE TABLE` query can have several forms. ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] ( - name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec], - name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [compression_codec], + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec] [TTL expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [compression_codec] [TTL expr2], ... ) ENGINE = engine ``` @@ -80,6 +80,13 @@ If you add a new column to a table but later change its default expression, the It is not possible to set default values for elements in nested data structures. +### TTL expression + +Can be specified only for MergeTree-family tables. An expression for setting storage time for values. It must depends on `Date` or `DateTime` column and has one `Date` or `DateTime` column as a result. Example: + `TTL date + INTERVAL 1 DAY` + +You are not allowed to set TTL for key columns. For more details, see [TTL for columns and tables](../operations/table_engines/mergetree.md) + ## Column Compression Codecs Besides default data compression, defined in [server settings](../operations/server_settings/settings.md#compression), per-column specification is also available. @@ -124,7 +131,7 @@ PARTITION BY dt ORDER BY (path, ts) ``` -### Temporary Tables +## Temporary Tables ClickHouse supports temporary tables which have the following characteristics: diff --git a/docs/en/query_language/functions/array_functions.md b/docs/en/query_language/functions/array_functions.md index d0075f8417e..05fbeeb76af 100644 --- a/docs/en/query_language/functions/array_functions.md +++ b/docs/en/query_language/functions/array_functions.md @@ -499,7 +499,7 @@ SELECT arrayDistinct([1, 2, 2, 3, 1]) ## arrayEnumerateDense(arr) -Returns an array of the same size as the source array, indicating where each element first appears in the source array. For example: arrayEnumerateDense([10,20,10,30]) = [1,2,1,4]. +Returns an array of the same size as the source array, indicating where each element first appears in the source array. For example: arrayEnumerateDense([10,20,10,30]) = [1,2,1,3]. ## arrayIntersect(arr) diff --git a/docs/en/query_language/insert_into.md b/docs/en/query_language/insert_into.md index 1d6d268e631..914c3b2917f 100644 --- a/docs/en/query_language/insert_into.md +++ b/docs/en/query_language/insert_into.md @@ -41,7 +41,7 @@ INSERT INTO t FORMAT TabSeparated You can insert data separately from the query by using the command-line client or the HTTP interface. For more information, see the section "[Interfaces](../interfaces/index.md#interfaces)". -### Inserting The Results of `SELECT` +### Inserting The Results of `SELECT` {#insert_query_insert-select} ``` sql INSERT INTO [db.]table [(c1, c2, c3)] SELECT ... diff --git a/docs/en/query_language/misc.md b/docs/en/query_language/misc.md index 34d508526e5..46feeed8c6f 100644 --- a/docs/en/query_language/misc.md +++ b/docs/en/query_language/misc.md @@ -57,7 +57,13 @@ If the table is corrupted, you can copy the non-corrupted data to another table. DESC|DESCRIBE TABLE [db.]table [INTO OUTFILE filename] [FORMAT format] ``` -Returns two `String`-type columns: `name` and `type`, which indicate the names and types of columns in the specified table. +Returns the following `String` type columns: + +- `name` — Column name. +- `type`— Column type. +- `default_type` — Clause that is used in [default expression](create.md#create-default-values) (`DEFAULT`, `MATERIALIZED` or `ALIAS`). Column contains an empty string, if the default expression isn't specified. +- `default_expression` — Value specified in the `DEFAULT` clause. +- `comment_expression` — Comment text. Nested data structures are output in "expanded" format. Each column is shown separately, with the name after a dot. @@ -176,7 +182,7 @@ If you specify `FINAL`, optimization will be performed even when all the data is !!! warning OPTIMIZE can't fix the "Too many parts" error. -## RENAME +## RENAME {#misc_operations-rename} Renames one or more tables. diff --git a/docs/en/query_language/syntax.md b/docs/en/query_language/syntax.md index 843671602b1..e0b67b14c61 100644 --- a/docs/en/query_language/syntax.md +++ b/docs/en/query_language/syntax.md @@ -8,7 +8,7 @@ The `INSERT` query uses both parsers: INSERT INTO t VALUES (1, 'Hello, world'), (2, 'abc'), (3, 'def') ``` -The `INSERT INTO t VALUES` fragment is parsed by the full parser, and the data `(1, 'Hello, world'), (2, 'abc'), (3, 'def')` is parsed by the fast stream parser. You can turn on the full parser for the data too. Use the [input_format_values_interpret_expressions](../operations/settings/settings.md#settings-input_format_values_interpret_expressions) setting. When `input_format_values_interpret_expressions = 1`, ClickHouse tries to parse values with the fast stream parser and if it fails ClickHouse tries to use the full parser for the data supposing it as an SQL [expression](#syntax-expressions). +The `INSERT INTO t VALUES` fragment is parsed by the full parser, and the data `(1, 'Hello, world'), (2, 'abc'), (3, 'def')` is parsed by the fast stream parser. You can also turn on the full parser for the data by using the [input_format_values_interpret_expressions](../operations/settings/settings.md#settings-input_format_values_interpret_expressions) setting. When `input_format_values_interpret_expressions = 1`, ClickHouse first tries to parse values with the fast stream parser. If it fails, ClickHouse tries to use the full parser for the data, treating it like an SQL [expression](#syntax-expressions). Data can have any format. When a query is received, the server calculates no more than [max_query_size](../operations/settings/settings.md#settings-max_query_size) bytes of the request in RAM (by default, 1 MB), and the rest is stream parsed. This means the system doesn't have problems with large `INSERT` queries, like MySQL does. diff --git a/docs/fa/interfaces/third-party/integrations.md b/docs/fa/interfaces/third-party/integrations.md index c9aebd9b235..b1d806f776e 100644 --- a/docs/fa/interfaces/third-party/integrations.md +++ b/docs/fa/interfaces/third-party/integrations.md @@ -52,6 +52,9 @@ - [loghouse](https://github.com/flant/loghouse) (برای [Kubernetes](https://kubernetes.io)) - [logagent](https://www.sematext.com/logagent) - [logagent output-plugin-clickhouse](https://sematext.com/docs/logagent/output-plugin-clickhouse/) +- جغرافیایی + - [MaxMind](https://dev.maxmind.com/geoip/) + - [clickhouse-maxmind-geoip](https://github.com/AlexeyKupershtokh/clickhouse-maxmind-geoip) ## اکوسیستم زبان برنامه نویسی diff --git a/docs/ru/interfaces/formats.md b/docs/ru/interfaces/formats.md index 1e6e856fd7d..5988bea4b98 100644 --- a/docs/ru/interfaces/formats.md +++ b/docs/ru/interfaces/formats.md @@ -638,6 +638,8 @@ struct Message { Protobuf - формат [Protocol Buffers](https://developers.google.com/protocol-buffers/). Формат нуждается во внешнем описании схемы. Схема кэшируется между запросами. +ClickHouse поддерживает как синтаксис `proto2`, так и `proto3`; все типы полей (repeated/optional/required) поддерживаются. + Пример использования формата: ```sql @@ -663,9 +665,9 @@ message MessageType { }; ``` -Соответствие между столбцами таблицы и полями сообщения Protocol Buffers устанавливается по имени, +Соответствие между столбцами таблицы и полями сообщения `Protocol Buffers` устанавливается по имени, при этом игнорируется регистр букв и символы `_` (подчеркивание) и `.` (точка) считаются одинаковыми. -Если типы столбцов не соответствуют точно типам полей сообщения Protocol Buffers, производится необходимая конвертация. +Если типы столбцов не соответствуют точно типам полей сообщения `Protocol Buffers`, производится необходимая конвертация. Вложенные сообщения поддерживаются, например, для поля `z` в таком сообщении @@ -682,11 +684,13 @@ message MessageType { ``` ClickHouse попытается найти столбец с именем `x.y.z` (или `x_y_z`, или `X.y_Z` и т.п.). -Вложенные сообщения удобно использовать в качестве соответствия для [вложенной структуры данных](../data_types/nested_data_structures/nested/). +Вложенные сообщения удобно использовать в качестве соответствия для [вложенной структуры данных](../data_types/nested_data_structures/nested.md). Значения по умолчанию, определенные в схеме, например, ``` +syntax = "proto2"; + message MessageType { optional int32 result_per_page = 3 [default = 10]; } @@ -694,6 +698,9 @@ message MessageType { не применяются; вместо них используются определенные в таблице [значения по умолчанию](../query_language/create.md#create-default-values). +ClickHouse пишет и читает сообщения `Protocol Buffers` в формате `length-delimited`. Это означает, что перед каждым сообщением пишется его длина +в формате [varint](https://developers.google.com/protocol-buffers/docs/encoding#varints). См. также [как читать и записывать сообщения Protocol Buffers в формате length-delimited в различных языках программирования](https://cwiki.apache.org/confluence/display/GEODE/Delimiting+Protobuf+Messages). + ## Схема формата {#formatschema} Имя файла со схемой записывается в настройке `format_schema`. При использовании форматов `Cap'n Proto` и `Protobuf` требуется указать схему. diff --git a/docs/ru/interfaces/http.md b/docs/ru/interfaces/http.md index effd512ea3f..a78f12c7090 100644 --- a/docs/ru/interfaces/http.md +++ b/docs/ru/interfaces/http.md @@ -35,7 +35,7 @@ Date: Fri, 16 Nov 2012 19:21:50 GMT ``` Как видно, curl немного неудобен тем, что надо URL-эскейпить пробелы. -wget сам всё эскейпит, но его не рекомендуется использовать, так как он плохо работает по HTTP 1.1 при использовании keep-alive и Transfer-Encoding: chunked. +Хотя wget сам всё эскейпит, но его не рекомендуется использовать, так как он плохо работает по HTTP 1.1 при использовании keep-alive и Transfer-Encoding: chunked. ```bash $ echo 'SELECT 1' | curl 'http://localhost:8123/' --data-binary @- @@ -129,16 +129,29 @@ echo 'DROP TABLE t' | curl 'http://localhost:8123/' --data-binary @- Для запросов, которые не возвращают таблицу с данными, в случае успеха, выдаётся пустое тело ответа. -Вы можете использовать внутренний формат сжатия Clickhouse при передаче данных. Формат сжатых данных нестандартный, и вам придётся использовать для работы с ним специальную программу clickhouse-compressor (устанавливается вместе с пакетом clickhouse-client). +Вы можете использовать внутренний формат сжатия Clickhouse при передаче данных. Формат сжатых данных нестандартный, и вам придётся использовать для работы с ним специальную программу `clickhouse-compressor` (устанавливается вместе с пакетом `clickhouse-client`). Для повышения эффективности вставки данных можно отключить проверку контрольной суммы на стороне сервера с помощью настройки[http_native_compression_disable_checksumming_on_decompress](../operations/settings/settings.md#settings-http_native_compression_disable_checksumming_on_decompress). -Если вы указали в URL compress=1, то сервер будет сжимать отправляемые вам данные. -Если вы указали в URL decompress=1, то сервер будет разжимать те данные, которые вы передаёте ему POST-ом. +Если вы указали `compress=1` в URL, то сервер сжимает данные, которые он отправляет. +Если вы указали `decompress=1` в URL, сервер распаковывает те данные, которые вы передаёте методом `POST`. -Также имеется возможность использования стандартного сжатия HTTP, на основе gzip. Чтобы отправить POST-запрос, сжатый с помощью gzip, добавьте к запросу заголовок `Content-Encoding: gzip`. -Чтобы ClickHouse сжимал ответ на запрос с помощью gzip, необходимо добавить `Accept-Encoding: gzip` к заголовкам запроса, и включить настройку ClickHouse `enable_http_compression`. +Также можно использовать стандартное [HTTP сжатие](https://en.wikipedia.org/wiki/HTTP_compression) с помощью `gzip`. Чтобы отправить запрос `POST`, сжатый с помощью `gzip`, добавьте к запросу заголовок `Content-Encoding: gzip`. +Чтобы ClickHouse сжимал ответ на запрос с помощью `gzip`, необходимо добавить `Accept-Encoding: gzip` к заголовкам запроса, и включить настройку ClickHouse [enable_http_compression](../operations/settings/settings.md#settings-enable_http_compression). Вы можете настроить уровень сжатия данных с помощью настройки [http_zlib_compression_level](#settings-http_zlib_compression_level). Это может быть использовано для уменьшения трафика по сети при передаче большого количества данных, а также для создания сразу сжатых дампов. +Примеры отправки данных со сжатием: + +```bash +#Отправка данных на сервер: +curl -vsS "http://localhost:8123/?enable_http_compression=1" -d 'SELECT number FROM system.numbers LIMIT 10' -H 'Accept-Encoding: gzip' + +#Отправка данных клиенту: +echo "SELECT 1" | gzip -c | curl -sS --data-binary @- -H 'Content-Encoding: gzip' 'http://localhost:8123/' +``` + +!!! note "Примечание" + Некоторые HTTP-клиенты могут по умолчанию распаковывать данные (`gzip` и `deflate`) с сервера в фоновом режиме и вы можете получить распакованные данные, даже если правильно используете настройки сжатия. + В параметре URL database может быть указана БД по умолчанию. ```bash @@ -171,11 +184,11 @@ echo 'SELECT 1' | curl 'http://user:password@localhost:8123/' -d @- echo 'SELECT 1' | curl 'http://localhost:8123/?user=user&password=password' -d @- ``` -Если имя пользователя не указано, то используется имя пользователя default. Если пароль не указан, то используется пустой пароль. +Если имя пользователя не указано, то используется `default`. Если пароль не указан, то используется пустой пароль. Также в параметрах URL вы можете указать любые настройки, которые будут использованы для обработки одного запроса, или целые профили настроек. Пример: http://localhost:8123/?profile=web&max_rows_to_read=1000000000&query=SELECT+1 -Подробнее см. раздел "Настройки". +Подробнее смотрите в разделе [Настройки](../operations/settings/index.md). ```bash $ echo 'SELECT number FROM system.numbers LIMIT 10' | curl 'http://localhost:8123/?' --data-binary @- @@ -193,9 +206,9 @@ $ echo 'SELECT number FROM system.numbers LIMIT 10' | curl 'http://localhost:812 Об остальных параметрах смотри раздел "SET". -В HTTP-протоколе можно использовать ClickHouse-сессии, для этого необходимо добавить к запросу GET-пaраметр `session_id`. В качестве идентификатора сессии можно использовать произвольную строку. По умолчанию через 60 секунд бездействия сессия будет прервана. Можно изменить этот таймаут, изменяя настройку `default_session_timeout` в конфигурации сервера, или добавив к запросу GET параметр `session_timeout`. Статус сессии можно проверить с помощью параметра `session_check=1`. В рамках одной сессии одновременно может испольняться только один запрос. +Аналогично можно использовать ClickHouse-сессии в HTTP-протоколе. Для этого необходимо добавить к запросу GET параметр `session_id`. В качестве идентификатора сессии можно использовать произвольную строку. По умолчанию через 60 секунд бездействия сессия будет прервана. Можно изменить этот таймаут, изменяя настройку `default_session_timeout` в конфигурации сервера, или добавив к запросу GET параметр `session_timeout`. Статус сессии можно проверить с помощью параметра `session_check=1`. В рамках одной сессии одновременно может исполняться только один запрос. -Имеется возможность получать информацию о прогрессе выполнения запроса в залоголвках X-ClickHouse-Progress, для этого нужно включить настройку send_progress_in_http_headers. +Имеется возможность получать информацию о прогрессе выполнения запроса в залоголвках X-ClickHouse-Progress. Для этого нужно включить настройку send_progress_in_http_headers. Запущенные запросы не останавливаются автоматически при разрыве HTTP соединения. Парсинг и форматирование данных производится на стороне сервера и использование сети может быть неэффективным. Может быть передан необязательный параметр query_id - идентификатор запроса, произвольная строка. Подробнее смотрите раздел "Настройки, replace_running_query". diff --git a/docs/ru/interfaces/third-party/integrations.md b/docs/ru/interfaces/third-party/integrations.md index 2f619d353a7..43d736c8e7c 100644 --- a/docs/ru/interfaces/third-party/integrations.md +++ b/docs/ru/interfaces/third-party/integrations.md @@ -50,6 +50,9 @@ - [loghouse](https://github.com/flant/loghouse) (для [Kubernetes](https://kubernetes.io)) - [logagent](https://www.sematext.com/logagent) - [logagent output-plugin-clickhouse](https://sematext.com/docs/logagent/output-plugin-clickhouse/) +- Гео + - [MaxMind](https://dev.maxmind.com/geoip/) + - [clickhouse-maxmind-geoip](https://github.com/AlexeyKupershtokh/clickhouse-maxmind-geoip) ## Экосистемы вокруг языков программирования diff --git a/docs/ru/operations/server_settings/settings.md b/docs/ru/operations/server_settings/settings.md index c583b7ea42a..e25bb90a253 100644 --- a/docs/ru/operations/server_settings/settings.md +++ b/docs/ru/operations/server_settings/settings.md @@ -488,31 +488,18 @@ ClickHouse проверит условия `min_part_size` и `min_part_size_rat ``` -## part_log +## part_log {#server_settings-part-log} Логгирование событий, связанных с данными типа [MergeTree](../../operations/table_engines/mergetree.md). Например, события добавления или мержа данных. Лог можно использовать для симуляции алгоритмов слияния, чтобы сравнивать их характеристики. Также, можно визуализировать процесс слияния. -Запросы логгируются не в отдельный файл, а в таблицу ClickHouse. - -Столбцы лога: - -- event_time - Дата события. -- duration_ms - Время события. -- event_type - Тип события. 1 - кусок новый, 2 - результат мержа, 3 - кусок скачан с реплики, 4 - кусок удаляется. -- database_name - Имя базы даных. -- table_name - Имя таблицы. -- part_name - Имя куска данных. -- partition_id - Идентификатор партиции. -- size_in_bytes - Размер куска данных в байтах. -- merged_from - Массив имён кусков, из которых он образован при мерже (так же заполняется в случае скачивания уже смерженного куска). -- merge_time_ms - Время, потраченное на мерж. +Запросы логгируются не в отдельный файл, а в таблицу [system.part_log](../system_tables.md#system_tables-part-log). Вы можете изменить название этой таблицы в параметре `table` (см. ниже). При настройке логгирования используются следующие параметры: -- database - Имя базы данных. -- table - Имя таблицы. -- partition_by - Устанавливает [произвольный ключ партиционирования](../../operations/table_engines/custom_partitioning_key.md). -- flush_interval_milliseconds - Период сброса данных из буфера в памяти в таблицу. +- `database` — имя базы данных; +- `table` — имя таблицы; +- `partition_by` — устанавливает [произвольный ключ партиционирования](../../operations/table_engines/custom_partitioning_key.md); +- `flush_interval_milliseconds` — период сброса данных из буфера в памяти в таблицу. **Пример** diff --git a/docs/ru/operations/settings/settings.md b/docs/ru/operations/settings/settings.md index 2df71ce5378..b8cdb7a5418 100644 --- a/docs/ru/operations/settings/settings.md +++ b/docs/ru/operations/settings/settings.md @@ -28,8 +28,8 @@ ClickHouse применяет настройку в тех случаях, ко Возможные значения: -- 0 — функциональность выключена. -- 1 — функциональность включена. +- 0 — выключена. +- 1 — включена. Значение по умолчанию: 0. @@ -72,10 +72,44 @@ ClickHouse применяет настройку в тех случаях, ко ## fsync_metadata -Включить или отключить fsync при записи .sql файлов. По умолчанию включено. +Включает или отключает [fsync](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html) при записи `.sql` файлов. По умолчанию включено. Имеет смысл выключать, если на сервере миллионы мелких таблиц-чанков, которые постоянно создаются и уничтожаются. +## enable_http_compression {#settings-enable_http_compression} + +Включает или отключает сжатие данных в ответе на HTTP-запрос. + +Для получения дополнительной информации, читайте [Описание интерфейса HTTP](../../interfaces/http.md). + +Возможные значения: + +- 0 — выключена. +- 1 — включена. + +Значение по умолчанию: 0. + +## http_zlib_compression_level {#settings-http_zlib_compression_level} + +Задает уровень сжатия данных в ответе на HTTP-запрос, если [enable_http_compression = 1](#settings-enable_http_compression). + +Возможные значения: числа от 1 до 9. + +Значение по умолчанию: 3. + +## http_native_compression_disable_checksumming_on_decompress {#settings-http_native_compression_disable_checksumming_on_decompress} + +Включает или отключает проверку контрольной суммы при распаковке данных HTTP POST от клиента. Используется только для собственного (`Navite`) формата сжатия ClickHouse (ни `gzip`, ни `deflate`). + +Для получения дополнительной информации, читайте [Описание интерфейса HTTP](../../interfaces/http.md). + +Возможные значения: + +- 0 — выключена. +- 1 — включена. + +Значение по умолчанию: 0. + ## input_format_allow_errors_num Устанавливает максимальное количество допустимых ошибок при чтении из текстовых форматов (CSV, TSV и т.п.). @@ -101,6 +135,50 @@ ClickHouse применяет настройку в тех случаях, ко В случае превышения `input_format_allow_errors_ratio` ClickHouse генерирует исключение. +## input_format_values_interpret_expressions {#settings-input_format_values_interpret_expressions} + +Включает или отключает парсер SQL, если потоковый парсер не может проанализировать данные. Этот параметр используется только для формата [Values](../../interfaces/formats.md#data-format-values) при вводе данных. Дополнительные сведения о парсерах читайте в разделе [Синтаксис](../../query_language/syntax.md). + +Возможные значения: + +- 0 — выключена. + + В этом случае необходимо вставлять форматированные данные. Смотрите раздел [Форматы](../../interfaces/formats.md). + +- 1 — включена. + + В этом случае вы можете использовать выражение SQL в качестве значения, но вставка данных намного медленнее. Если вы вставляете только форматированные данные, ClickHouse ведет себя так, как будто значение параметра равно 0. + +Значение по умолчанию: 1. + +**Пример использования** + +Вставим значение типа [DateTime](../../data_types/datetime.md) при разных значения настройки. + +```sql +SET input_format_values_interpret_expressions = 0; +INSERT INTO datetime_t VALUES (now()) + +Exception on client: +Code: 27. DB::Exception: Cannot parse input: expected ) before: now()): (at row 1) +``` + +```sql +SET input_format_values_interpret_expressions = 1; +INSERT INTO datetime_t VALUES (now()) + +Ok. +``` + +Последний запрос эквивалентен следующему: + +```sql +SET input_format_values_interpret_expressions = 0; +INSERT INTO datetime_t SELECT now() + +Ok. +``` + ## input_format_defaults_for_omitted_fields {#session_settings-input_format_defaults_for_omitted_fields} Включает/выключает расширенный обмен данными между клиентом ClickHouse и сервером ClickHouse. Параметр применяется для запросов `INSERT`. @@ -115,13 +193,13 @@ ClickHouse применяет настройку в тех случаях, ко Для всех остальных операций ClickHouse не применяет этот параметр. -!!! Примечание " Примечание" +!!! note "Примечание" Функциональность расширенного обмена данными потребляет дополнительные вычислительные ресурсы на сервере и может снизить производительность. **Возможные значения** -- 0 — функциональность выключена. -- 1 — функциональность включена. +- 0 — выключена. +- 1 — включена. **Значение по умолчанию**: 0. @@ -490,15 +568,20 @@ ClickHouse использует этот параметр при чтении д ## select_sequential_consistency {#settings-select_sequential_consistency} -Включение/выключение последовательной консистентности для запросов `SELECT`: +Включает или выключает последовательную консистентность для запросов `SELECT`. + +Возможные значения: - 0 — выключена. - 1 — включена. + Значение по умолчанию: 0. +**Использование** + Когда последовательная консистентность включена, то ClickHouse позволит клиенту выполнить запрос `SELECT` только к тем репликам, которые содержат данные всех предыдущих запросов `INSERT`, выполненных с `insert_quorum`. Если клиент обратится к неполной реплике, то ClickHouse сгенерирует исключение. В запросе SELECT не будут участвовать данные, которые ещё не были записаны на кворум реплик. -См. также параметры: +**Смотрите также** - [insert_quorum](#settings-insert_quorum) - [insert_quorum_timeout](#settings-insert_quorum_timeout) diff --git a/docs/ru/operations/system_tables.md b/docs/ru/operations/system_tables.md index 4b50bedfdf8..4400c989b44 100644 --- a/docs/ru/operations/system_tables.md +++ b/docs/ru/operations/system_tables.md @@ -154,25 +154,52 @@ default_expression String - выражение для значения по ум - `YYYYMM` для автоматической схемы партиционирования по месяцам. - `any_string` при партиционировании вручную. -- name (String) - Имя куска. -- active (UInt8) - Признак активности. Если кусок активен, то он используется таблице, в противном случает он будет удален. Неактивные куски остаются после слияний. -- marks (UInt64) - Количество засечек. Чтобы получить примерное количество строк в куске, умножьте ``marks`` на гранулированность индекса (обычно 8192). -- marks_size (UInt64) - Размер файла с засечками. -- rows (UInt64) - Количество строк. -- bytes (UInt64) - Количество байт в сжатом виде. -- modification_time (DateTime) - Время модификации директории с куском. Обычно соответствует времени создания куска. -- remove_time (DateTime) - Время, когда кусок стал неактивным. -- refcount (UInt32) - Количество мест, в котором кусок используется. Значение больше 2 говорит о том, что кусок участвует в запросах или в слияниях. -- min_date (Date) - Минимальное значение ключа даты в куске. -- max_date (Date) - Максимальное значение ключа даты в куске. -- min_block_number (UInt64) - Минимальный номер куска из которых состоит текущий после слияния. -- max_block_number (UInt64) - Максимальный номер куска из которых состоит текущий после слияния. -- level (UInt32) - Глубина дерева слияний. Если слияний не было, то ``level=0``. -- primary_key_bytes_in_memory (UInt64) - Объем памяти (в байтах), занимаемой значениями первичных ключей. -- primary_key_bytes_in_memory_allocated (UInt64) - Выделенный с резервом объем памяти (в байтах) для размещения первичных ключей. -- database (String) - Имя базы данных. -- table (String) - Имя таблицы. -- engine (String) - Имя движка таблицы, без параметров. +- `name` (String) - имя куска; +- `active` (UInt8) - признак активности. Если кусок активен, то он используется таблицей, в противном случает он будет удален. Неактивные куски остаются после слияний; +- `marks` (UInt64) - количество засечек. Чтобы получить примерное количество строк в куске, умножьте `marks` на гранулированность индекса (обычно 8192); +- `marks_size` (UInt64) - размер файла с засечками; +- `rows` (UInt64) - количество строк; +- `bytes` (UInt64) - количество байт в сжатом виде; +- `modification_time` (DateTime) - время модификации директории с куском. Обычно соответствует времени создания куска; +- `remove_time` (DateTime) - время, когда кусок стал неактивным; +- `refcount` (UInt32) - количество мест, в котором кусок используется. Значение больше 2 говорит о том, что кусок участвует в запросах или в слияниях; +- `min_date` (Date) - минимальное значение ключа даты в куске; +- `max_date` (Date) - максимальное значение ключа даты в куске; +- `min_block_number` (UInt64) - минимальное число кусков, из которых состоит текущий после слияния; +- `max_block_number` (UInt64) - максимальное число кусков, из которых состоит текущий после слияния; +- `level` (UInt32) - глубина дерева слияний. Если слияний не было, то `level=0`; +- `primary_key_bytes_in_memory` (UInt64) - объем памяти (в байтах), занимаемой значениями первичных ключей; +- `primary_key_bytes_in_memory_allocated` (UInt64) - выделенный с резервом объем памяти (в байтах) для размещения первичных ключей; +- `database (String)` - имя базы данных; +- `table (String)` - имя таблицы; +- `engine (String)` - имя движка таблицы, без параметров. + +## system.part_log {#system_tables-part-log} + +Системная таблица `system.part_log` создается только в том случае, если задана серверная настройка [part_log](server_settings/settings.md#server_settings-part-log). + +Содержит информацию о всех событиях, произошедших с [кусками данных](table_engines/custom_partitioning_key.md) таблиц семейства [MergeTree](table_engines/mergetree.md) (например, события добавления, удаления или слияния данных). + +Столбцы: + +- `event_type` (Enum) — тип события. Столбец может содержать одно из следующих значений: `NEW_PART` — вставка нового куска; `MERGE_PARTS` — слияние кусков; `DOWNLOAD_PART` — загрузка с реплики; `REMOVE_PART` — удаление или отсоединение из таблицы с помощью [DETACH PARTITION](../query_language/alter.md#alter_detach-partition); `MUTATE_PART` — изменение куска. +- `event_date` (Date) — дата события; +- `event_time` (DateTime) — время события; +- `duration_ms` (UInt64) — длительность; +- `database` (String) — имя базы данных, в которой находится кусок; +- `table` (String) — имя таблицы, в которой находится кусок; +- `part_name` (String) — имя куска; +- `partition_id` (String) — идентификатор партиции, в которую был добавлен кусок. В столбце будет значение 'all', если таблица партициируется по выражению `tuple()`; +- `rows` (UInt64) — число строк в куске; +- `size_in_bytes` (UInt64) — размер куска данных в байтах; +- `merged_from` (Array(String)) — массив имён кусков, из которых образован текущий кусок в результате слияния (также столбец заполняется в случае скачивания уже смерженного куска); +- `bytes_uncompressed` (UInt64) — количество прочитанных разжатых байт; +- `read_rows` (UInt64) — сколько было прочитано строк при слиянии кусков; +- `read_bytes` (UInt64) — сколько было прочитано байт при слиянии кусков; +- `error` (UInt16) — код ошибки, возникшей при текущем событии; +- `exception` (String) — текст ошибки. + +Системная таблица `system.part_log` будет создана после первой вставки данных в таблицу `MergeTree`. ## system.processes diff --git a/docs/ru/operations/table_engines/mergetree.md b/docs/ru/operations/table_engines/mergetree.md index cab159cc35e..0ce16a5c310 100644 --- a/docs/ru/operations/table_engines/mergetree.md +++ b/docs/ru/operations/table_engines/mergetree.md @@ -30,8 +30,8 @@ ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] ( - name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], - name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2], ... INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1, INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2 @@ -66,10 +66,18 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] Если используется выражение для сэмплирования, то первичный ключ должен содержать его. Пример: `SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))`. +- `TTL` - выражение для задания времени хранения строк. + + Оно должно зависеть от стобца типа `Date` или `DateTime` и в качестве результата вычислять столбец типа `Date` или `DateTime`. Пример: + `TTL date + INTERVAL 1 DAY` + + Подробнее смотрите в [TTL для стоблцов и таблиц](mergetree.md) + - `SETTINGS` — дополнительные параметры, регулирующие поведение `MergeTree`: - `index_granularity` — гранулярность индекса. Число строк данных между «засечками» индекса. По умолчанию — 8192. Список всех доступных параметров можно посмотреть в [MergeTreeSettings.h](https://github.com/yandex/ClickHouse/blob/master/dbms/src/Storages/MergeTree/MergeTreeSettings.h). - `min_merge_bytes_to_use_direct_io` — минимальный объем данных, необходимый для прямого (небуферизованного) чтения/записи (direct I/O) на диск. При слиянии частей данных ClickHouse вычисляет общий объем хранения всех данных, подлежащих слиянию. Если общий объем хранения всех данных для чтения превышает `min_bytes_to_use_direct_io` байт, тогда ClickHouse использует флаг `O_DIRECT` при чтении данных с диска. Если `min_merge_bytes_to_use_direct_io = 0`, тогда прямой ввод-вывод отключен. Значение по умолчанию: `10 * 1024 * 1024 * 1024` байт. + - `merge_with_ttl_timeout` - Минимальное время в секундах для повторного выполнения слияний с TTL. По умолчанию - 86400 (1 день). **Пример задания секций** @@ -282,4 +290,13 @@ INDEX b (u64 * length(str), i32 + f64 * 100, date, str) TYPE set(100) GRANULARIT Чтения из таблицы автоматически распараллеливаются. + +## TTL для столбцов и таблиц + +Данные с истекшим TTL удаляются во время слияний. + +Если TTL указан для столбца, то когда он истекает, значение заменяется на значение по умолчанию. Если все значения столбца обнулены в куске, то данные этого столбца удаляются с диска в куске. Если TTL указан для таблицы, то когда он истекает, удаляется строка. + +Когда истекает TTL для какого-нибудь значения или строки в куске, назначается внеочередное слияние. Чтобы контролировать частоту слияний с TTL, вы можете задать настройку `merge_with_ttl_timeout`. Если ее значение слишком мало, то будет происходить слишком много внеочередных слияний и мало обычных, вследствие чего может ухудшиться производительность. + [Оригинальная статья](https://clickhouse.yandex/docs/ru/operations/table_engines/mergetree/) diff --git a/docs/ru/query_language/alter.md b/docs/ru/query_language/alter.md index 1d2df635289..64ae5d2e5ab 100644 --- a/docs/ru/query_language/alter.md +++ b/docs/ru/query_language/alter.md @@ -7,48 +7,111 @@ Изменение структуры таблицы. ``` sql -ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN ... +ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ... ``` В запросе указывается список из одного или более действий через запятую. -Каждое действие - операция над столбцом. +Каждое действие — операция над столбцом. Существуют следующие действия: -``` sql -ADD COLUMN name [type] [default_expr] [AFTER name_after] -``` +- [ADD COLUMN](#alter_add-column) — добавляет столбец в таблицу; +- [DROP COLUMN](#alter_drop-column) — удаляет столбец; +- [CLEAR COLUMN](#alter_clear-column) — сбрасывает все значения в столбце для заданной партиции; +- [COMMENT COLUMN](#alter_comment-column) — добавляет комментарий к столбцу; +- [MODIFY COLUMN](#alter_modify-column) — изменяет тип столбца и/или выражение для значения по умолчанию. -Добавляет в таблицу новый столбец с именем name, типом type и выражением для умолчания `default_expr` (смотрите раздел "Значения по умолчанию"). Если указано `AFTER name_after` (имя другого столбца), то столбец добавляется (в список столбцов таблицы) после указанного. Иначе, столбец добавляется в конец таблицы. Внимательный читатель может заметить, что отсутствует возможность добавить столбец в начало таблицы. Для цепочки действий, name_after может быть именем столбца, который добавляется в одном из предыдущих действий. +Подробное описание для каждого действия приведено ниже. -Добавление столбца всего лишь меняет структуру таблицы, и не производит никаких действий с данными - соответствующие данные не появляются на диске после ALTER-а. При чтении из таблицы, если для какого-либо столбца отсутствуют данные, то он заполняется значениями по умолчанию (выполняя выражение по умолчанию, если такое есть, или нулями, пустыми строками). Также, столбец появляется на диске при слиянии кусков данных (см. MergeTree). - -Такая схема позволяет добиться мгновенной работы запроса ALTER и отсутствия необходимости увеличивать объём старых данных. +#### ADD COLUMN {#alter_add-column} ``` sql -DROP COLUMN name +ADD COLUMN [IF NOT EXISTS] name [type] [default_expr] [AFTER name_after] ``` -Удаляет столбец с именем name. -Удаляет данные из файловой системы. Так как это представляет собой удаление целых файлов, запрос выполняется почти мгновенно. +Добавляет в таблицу новый столбец с именем `name`, типом `type` и выражением для умолчания `default_expr` (смотрите раздел [Значения по умолчанию](create.md#create-default-values)). -```sql -CLEAR COLUMN name IN PARTITION partition_name -``` +Если указано `IF EXISTS`, запрос не будет возвращать ошибку, если столбца не существует. Если указано `AFTER name_after` (имя другого столбца), то столбец добавляется (в список столбцов таблицы) после указанного. Иначе, столбец добавляется в конец таблицы. Обратите внимание, ClickHouse не позволяет добавлять столбцы в начало таблицы. Для цепочки действий, `name_after` может быть именем столбца, который добавляется в одном из предыдущих действий. -Удаляет все данные в столбце для заданной партиции. +Добавление столбца всего лишь меняет структуру таблицы, и не производит никаких действий с данными - соответствующие данные не появляются на диске после ALTER-а. При чтении из таблицы, если для какого-либо столбца отсутствуют данные, то он заполняется значениями по умолчанию (выполняя выражение по умолчанию, если такое есть, или нулями, пустыми строками). Также, столбец появляется на диске при слиянии кусков данных (см. [MergeTree](../operations/table_engines/mergetree.md)). + +Такая схема позволяет добиться мгновенной работы запроса `ALTER` и отсутствия необходимости увеличивать объём старых данных. + +Пример: ``` sql -MODIFY COLUMN name [type] [default_expr] +ALTER TABLE visits ADD COLUMN browser String AFTER user_id ``` -Изменяет тип столбца name на type и/или выражение для умолчания на default_expr. При изменении типа, значения преобразуются так, как если бы к ним была применена функция toType. +#### DROP COLUMN {#alter_drop-column} -Если изменяется только выражение для умолчания, то запрос не делает никакой сложной работы и выполняется мгновенно. +``` sql +DROP COLUMN [IF EXISTS] name +``` + +Удаляет столбец с именем `name`. Если указано `IF EXISTS`, запрос не будет возвращать ошибку, если столбца не существует. + +Запрос удаляет данные из файловой системы. Так как это представляет собой удаление целых файлов, запрос выполняется почти мгновенно. + +Пример: + +``` sql +ALTER TABLE visits DROP COLUMN browser +``` + +#### CLEAR COLUMN {#alter_clear-column} + +``` sql +CLEAR COLUMN [IF EXISTS] name IN PARTITION partition_name +``` +Сбрасывает все значения в столбце для заданной партиции. Если указано `IF EXISTS`, запрос не будет возвращать ошибку, если столбца не существует. + +Как корректно задать имя партиции, см. в разделе [Как задавать имя партиции в запросах ALTER](#alter-how-to-specify-part-expr). + +Пример: + +``` sql +ALTER TABLE visits CLEAR COLUMN browser IN PARTITION tuple() +``` + +#### COMMENT COLUMN {#alter_comment-column} + +``` sql +COMMENT COLUMN [IF EXISTS] name 'Text comment' +``` + +Добавляет комментарий к таблице. Если указано `IF EXISTS`, запрос не будет возвращать ошибку, если столбца не существует. + +Каждый столбец может содержать только один комментарий. При выполнении запроса существующий комментарий заменяется на новый. + +Посмотреть комментарии можно в столбце `comment_expression` из запроса [DESCRIBE TABLE](misc.md#misc-describe-table). + +Пример: + +``` sql +ALTER TABLE visits COMMENT COLUMN browser 'Столбец показывает, из каких браузеров пользователи заходили на сайт.' +``` + +#### MODIFY COLUMN {#alter_modify-column} + +``` sql +MODIFY COLUMN [IF EXISTS] name [type] [default_expr] +``` + +Изменяет тип столбца `name` на `type` и/или выражение для умолчания на `default_expr`. Если указано `IF EXISTS`, запрос не будет возвращать ошибку, если столбца не существует. + +При изменении типа, значения преобразуются так, как если бы к ним была применена функция [toType](functions/type_conversion_functions.md). Если изменяется только выражение для умолчания, запрос не делает никакой сложной работы и выполняется мгновенно. + +Пример запроса: + +``` sql +ALTER TABLE visits MODIFY COLUMN browser Array(String) +``` Изменение типа столбца - это единственное действие, которое выполняет сложную работу - меняет содержимое файлов с данными. Для больших таблиц, выполнение может занять длительное время. Выполнение производится в несколько стадий: + - подготовка временных (новых) файлов с изменёнными данными; - переименование старых файлов; - переименование временных (новых) файлов в старые; @@ -57,18 +120,19 @@ MODIFY COLUMN name [type] [default_expr] Из них, длительной является только первая стадия. Если на этой стадии возникнет сбой, то данные не поменяются. Если на одной из следующих стадий возникнет сбой, то данные будет можно восстановить вручную. За исключением случаев, когда старые файлы удалены из файловой системы, а данные для новых файлов не доехали на диск и потеряны. +Запрос `ALTER` на изменение столбцов реплицируется. Соответствующие инструкции сохраняются в ZooKeeper, и затем каждая реплика их применяет. Все запросы `ALTER` выполняются в одном и том же порядке. Запрос ждёт выполнения соответствующих действий на всех репликах. Но при этом, запрос на изменение столбцов в реплицируемой таблице можно прервать, и все действия будут осуществлены асинхронно. + +#### Ограничения запроса ALTER + Запрос `ALTER` позволяет создавать и удалять отдельные элементы (столбцы) вложенных структур данных, но не вложенные структуры данных целиком. Для добавления вложенной структуры данных, вы можете добавить столбцы с именем вида `name.nested_name` и типом `Array(T)` - вложенная структура данных полностью эквивалентна нескольким столбцам-массивам с именем, имеющим одинаковый префикс до точки. Отсутствует возможность удалять столбцы, входящие в первичный ключ или ключ для сэмплирования (в общем, входящие в выражение `ENGINE`). Изменение типа у столбцов, входящих в первичный ключ возможно только в том случае, если это изменение не приводит к изменению данных (например, разрешено добавление значения в Enum или изменение типа с `DateTime` на `UInt32`). -Если возможностей запроса `ALTER` не хватает для нужного изменения таблицы, вы можете создать новую таблицу, скопировать туда данные с помощью запроса `INSERT SELECT`, затем поменять таблицы местами с помощью запроса `RENAME`, и удалить старую таблицу. +Если возможностей запроса `ALTER` не хватает для нужного изменения таблицы, вы можете создать новую таблицу, скопировать туда данные с помощью запроса [INSERT SELECT](insert_into.md#insert_query_insert-select), затем поменять таблицы местами с помощью запроса [RENAME](misc.md#misc_operations-rename), и удалить старую таблицу. В качестве альтернативы для запроса `INSERT SELECT`, можно использовать инструмент [clickhouse-copier](../operations/utils/clickhouse-copier.md). Запрос `ALTER` блокирует все чтения и записи для таблицы. То есть, если на момент запроса `ALTER`, выполнялся долгий `SELECT`, то запрос `ALTER` сначала дождётся его выполнения. И в это время, все новые запросы к той же таблице, будут ждать, пока завершится этот `ALTER`. -Для таблиц, которые не хранят данные самостоятельно (типа `Merge` и `Distributed`), `ALTER` всего лишь меняет структуру таблицы, но не меняет структуру подчинённых таблиц. Для примера, при ALTER-е таблицы типа `Distributed`, вам также потребуется выполнить запрос `ALTER` для таблиц на всех удалённых серверах. - -Запрос `ALTER` на изменение столбцов реплицируется. Соответствующие инструкции сохраняются в ZooKeeper, и затем каждая реплика их применяет. Все запросы `ALTER` выполняются в одном и том же порядке. Запрос ждёт выполнения соответствующих действий на всех репликах. Но при этом, запрос на изменение столбцов в реплицируемой таблице можно прервать, и все действия будут осуществлены асинхронно. - +Для таблиц, которые не хранят данные самостоятельно (типа [Merge](../operations/table_engines/merge.md) и [Distributed](../operations/table_engines/distributed.md)), `ALTER` всего лишь меняет структуру таблицы, но не меняет структуру подчинённых таблиц. Для примера, при ALTER-е таблицы типа `Distributed`, вам также потребуется выполнить запрос `ALTER` для таблиц на всех удалённых серверах. ### Манипуляции с ключевыми выражениями таблиц diff --git a/docs/ru/query_language/create.md b/docs/ru/query_language/create.md index 3484d6f6f31..ee6dc3c7820 100644 --- a/docs/ru/query_language/create.md +++ b/docs/ru/query_language/create.md @@ -9,8 +9,6 @@ CREATE DATABASE [IF NOT EXISTS] db_name `База данных` - это просто директория для таблиц. Если написано `IF NOT EXISTS`, то запрос не будет возвращать ошибку, если база данных уже существует. - - ## CREATE TABLE {#create-table-query} Запрос `CREATE TABLE` может иметь несколько форм. @@ -18,8 +16,8 @@ CREATE DATABASE [IF NOT EXISTS] db_name ```sql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] ( - name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec], - name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [compression_codec], + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec] [TTL expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [compression_codec] [TTL expr2], ... ) ENGINE = engine ``` @@ -82,7 +80,15 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ... Отсутствует возможность задать значения по умолчанию для элементов вложенных структур данных. -# Форматы сжатия для колонок +### Выражение для TTL + +Может быть указано только для таблиц семейства MergeTree. Выражение для указания времени хранения значений. Оно должно зависеть от стобца типа `Date` или `DateTime` и в качестве результата вычислять столбец типа `Date` или `DateTime`. Пример: + `TTL date + INTERVAL 1 DAY` + +Нельзя указывать TTL для ключевых столбцов. Подробнее смотрите в [TTL для стоблцов и таблиц](../operations/table_engines/mergetree.md) + + +## Форматы сжатия для колонок Помимо сжатия для колонок по умолчанию, определяемого в [настройках сервера](../operations/server_settings/settings.md#compression), существует возможность указать формат сжатия индивидуально для каждой колонки. @@ -128,7 +134,7 @@ ORDER BY (path, ts) ``` -### Временные таблицы +## Временные таблицы ClickHouse поддерживает временные таблицы со следующими характеристиками: diff --git a/docs/ru/query_language/insert_into.md b/docs/ru/query_language/insert_into.md index 631f56bde88..356b720e157 100644 --- a/docs/ru/query_language/insert_into.md +++ b/docs/ru/query_language/insert_into.md @@ -40,7 +40,7 @@ INSERT INTO t FORMAT TabSeparated С помощью консольного клиента или HTTP интерфейса можно вставлять данные отдельно от запроса. Как это сделать, читайте в разделе "[Интерфейсы](../interfaces/index.md#interfaces)". -### Вставка результатов `SELECT` +### Вставка результатов `SELECT` {#insert_query_insert-select} ``` sql INSERT INTO [db.]table [(c1, c2, c3)] SELECT ... diff --git a/docs/ru/query_language/misc.md b/docs/ru/query_language/misc.md index 54aa5a774b9..942ce4a541d 100644 --- a/docs/ru/query_language/misc.md +++ b/docs/ru/query_language/misc.md @@ -49,13 +49,20 @@ CHECK TABLE [db.]name 3. Выполните запрос `INSERT INTO SELECT * FROM `. В результате неповрежденные данные будут скопированы в другую таблицу. Обратите внимание, будут скопированы только те данные, которые следуют до поврежденного участка. 4. Перезапустите `clickhouse-client`, чтобы вернуть предыдущее значение параметра `max_threads`. -## DESCRIBE TABLE +## DESCRIBE TABLE {#misc-describe-table} ```sql DESC|DESCRIBE TABLE [db.]table [INTO OUTFILE filename] [FORMAT format] ``` +Возвращает описание столбцов таблицы. -Возвращает два столбца: `name`, `type` типа `String`, в которых описаны имена и типы столбцов указанной таблицы. +Результат запроса содержит столбцы (все столбцы имеют тип String): + +- `name` — имя столбца таблицы; +- `type`— тип столбца; +- `default_type` — в каком виде задано [выражение для значения по умолчанию](create.md#create-default-values): `DEFAULT`, `MATERIALIZED` или `ALIAS`. Столбец содержит пустую строку, если значение по умолчанию не задано. +- `default_expression` — значение, заданное в секции `DEFAULT`; +- `comment_expression` — комментарий к столбцу. Вложенные структуры данных выводятся в "развёрнутом" виде. То есть, каждый столбец - по отдельности, с именем через точку. @@ -173,7 +180,7 @@ OPTIMIZE TABLE [db.]name [ON CLUSTER cluster] [PARTITION partition] [FINAL] !!! warning "Внимание"Запрос OPTIMIZE не может устранить причину появления ошибки "Too many parts". -## RENAME +## RENAME {#misc_operations-rename} Переименовывает одну или несколько таблиц. diff --git a/docs/ru/query_language/operators.md b/docs/ru/query_language/operators.md index db6599c3bcb..a493e555af7 100644 --- a/docs/ru/query_language/operators.md +++ b/docs/ru/query_language/operators.md @@ -158,7 +158,9 @@ END В случае указания `x` - функция `transform(x, [a, ...], [b, ...], c)`. Иначе — `multiIf(a, b, ..., c)`. При отсутствии секции `ELSE c`, значением по умолчанию будет `NULL`. -P.S. Функция `transform` не умеет работать с `NULL`. + +!!! note "Примечание" + Функция `transform` не умеет работать с `NULL`. ## Оператор склеивания строк diff --git a/docs/tools/release.sh b/docs/tools/release.sh index 5d7f066026f..4965193d59b 100755 --- a/docs/tools/release.sh +++ b/docs/tools/release.sh @@ -32,7 +32,7 @@ else QLOUD_ENV="${QLOUD_PROJECT}.prod" fi QLOUD_COMPONENT="${QLOUD_ENV}.nginx" -QLOUD_VERSION=$(curl -f -v -H "Authorization: OAuth ${QLOUD_TOKEN}" "${QLOUD_ENDPOINT}/environment/status/${QLOUD_ENV}" | python -c "import json; import sys; print json.loads(sys.stdin.read()).get('version')") -curl -f -v -H "Authorization: OAuth ${QLOUD_TOKEN}" -H "Content-Type: application/json" --data "{\"repository\": \"${REMOTE_NAME}\", \"hash\": \"${DOCKER_HASH}\"}" "${QLOUD_ENDPOINT}/component/${QLOUD_COMPONENT}/${QLOUD_VERSION}/deploy" > /dev/null +QLOUD_VERSION=$(curl -v -H "Authorization: OAuth ${QLOUD_TOKEN}" "${QLOUD_ENDPOINT}/environment/status/${QLOUD_ENV}" | python -c "import json; import sys; print json.loads(sys.stdin.read()).get('version')") +curl -v -H "Authorization: OAuth ${QLOUD_TOKEN}" -H "Content-Type: application/json" --data "{\"repository\": \"${REMOTE_NAME}\", \"hash\": \"${DOCKER_HASH}\"}" "${QLOUD_ENDPOINT}/component/${QLOUD_COMPONENT}/${QLOUD_VERSION}/deploy" > /dev/null echo ">>> Successfully deployed ${TAG} ${DOCKER_HASH} to ${QLOUD_ENV} <<<" diff --git a/docs/tools/requirements.txt b/docs/tools/requirements.txt index f0df3b8ff36..6ac9a4a034c 100644 --- a/docs/tools/requirements.txt +++ b/docs/tools/requirements.txt @@ -8,7 +8,7 @@ click==6.7 CommonMark==0.5.4 cssmin==0.2.0 docutils==0.14 -futures==3.2.0 +futures==3.1.1 htmlmin==0.1.12 idna==2.6 imagesize==0.7.1 diff --git a/docs/tools/website.py b/docs/tools/website.py index 0605058a6c6..1b5c580a7de 100644 --- a/docs/tools/website.py +++ b/docs/tools/website.py @@ -33,7 +33,7 @@ def minify_website(args): continue logging.info('Minifying %s', path) - with open(path, 'r') as f: + with open(path, 'rb') as f: content = f.read().decode('utf-8') if filename.endswith('.html'): content = htmlmin.minify(content, remove_empty_space=False) @@ -41,5 +41,5 @@ def minify_website(args): content = cssmin.cssmin(content) elif filename.endswith('.js'): content = jsmin.jsmin(content) - with open(path, 'w') as f: + with open(path, 'wb') as f: f.write(content.encode('utf-8')) diff --git a/docs/zh/interfaces/third-party/integrations.md b/docs/zh/interfaces/third-party/integrations.md index 971c393d193..fab2bdd07b0 100644 --- a/docs/zh/interfaces/third-party/integrations.md +++ b/docs/zh/interfaces/third-party/integrations.md @@ -49,6 +49,9 @@ - [loghouse](https://github.com/flant/loghouse) (对于 [Kubernetes](https://kubernetes.io)) - [logagent](https://www.sematext.com/logagent) - [logagent output-plugin-clickhouse](https://sematext.com/docs/logagent/output-plugin-clickhouse/) +- 地理 + - [MaxMind](https://dev.maxmind.com/geoip/) + - [clickhouse-maxmind-geoip](https://github.com/AlexeyKupershtokh/clickhouse-maxmind-geoip) ## 编程语言生态系统 @@ -75,5 +78,4 @@ - [Ecto](https://github.com/elixir-ecto/ecto) - [clickhouse_ecto](https://github.com/appodeal/clickhouse_ecto) - [来源文章](https://clickhouse.yandex/docs/zh/interfaces/third-party/integrations/) diff --git a/docs/zh/operations/table_engines/distributed.md b/docs/zh/operations/table_engines/distributed.md index 39f99d30a3f..f02b45e6d47 100644 --- a/docs/zh/operations/table_engines/distributed.md +++ b/docs/zh/operations/table_engines/distributed.md @@ -1,24 +1,24 @@ # Distributed -**The Distributed engine does not store data itself**, but allows distributed query processing on multiple servers. -Reading is automatically parallelized. During a read, the table indexes on remote servers are used, if there are any. -The Distributed engine accepts parameters: the cluster name in the server's config file, the name of a remote database, the name of a remote table, and (optionally) a sharding key. -Example: +**分布式引擎本身不存储数据**, 但可以在多个服务器上进行分布式查询。 +读是自动并行的。读取时,远程服务器表的索引(如果有的话)会被使用。 +分布式引擎参数:服务器配置文件中的集群名,远程数据库名,远程表名,数据分片键(可选)。 +示例: ``` Distributed(logs, default, hits[, sharding_key]) ``` -Data will be read from all servers in the 'logs' cluster, from the default.hits table located on every server in the cluster. -Data is not only read, but is partially processed on the remote servers (to the extent that this is possible). -For example, for a query with GROUP BY, data will be aggregated on remote servers, and the intermediate states of aggregate functions will be sent to the requestor server. Then data will be further aggregated. +将会从位于“logs”集群中 default.hits 表所有服务器上读取数据。 +远程服务器不仅用于读取数据,还会对尽可能数据做部分处理。 +例如,对于使用 GROUP BY 的查询,数据首先在远程服务器聚合,之后返回聚合函数的中间状态给查询请求的服务器。再在请求的服务器上进一步汇总数据。 -Instead of the database name, you can use a constant expression that returns a string. For example: currentDatabase(). +数据库名参数除了用数据库名之外,也可用返回字符串的常量表达式。例如:currentDatabase()。 -logs – The cluster name in the server's config file. +logs – 服务器配置文件中的集群名称。 -Clusters are set like this: +集群示例配置如下: ```xml @@ -54,72 +54,72 @@ Clusters are set like this: ``` -Here a cluster is defined with the name 'logs' that consists of two shards, each of which contains two replicas. -Shards refer to the servers that contain different parts of the data (in order to read all the data, you must access all the shards). -Replicas are duplicating servers (in order to read all the data, you can access the data on any one of the replicas). +这里定义了一个名为‘logs’的集群,它由两个分片组成,每个分片包含两个副本。 +分片是指包含数据不同部分的服务器(要读取所有数据,必须访问所有分片)。 +副本是存储复制数据的服务器(要读取所有数据,访问任一副本上的数据即可)。 -Cluster names must not contain dots. +集群名称不能包含点号。 -The parameters `host`, `port`, and optionally `user`, `password`, `secure`, `compression` are specified for each server: +每个服务器需要指定 `host`,`port`,和可选的 `user`,`password`,`secure`,`compression` 的参数: -: - `host` – The address of the remote server. You can use either the domain or the IPv4 or IPv6 address. If you specify the domain, the server makes a DNS request when it starts, and the result is stored as long as the server is running. If the DNS request fails, the server doesn't start. If you change the DNS record, restart the server. -- `port`– The TCP port for messenger activity ('tcp_port' in the config, usually set to 9000). Do not confuse it with http_port. -- `user`– Name of the user for connecting to a remote server. Default value: default. This user must have access to connect to the specified server. Access is configured in the users.xml file. For more information, see the section "Access rights". -- `password` – The password for connecting to a remote server (not masked). Default value: empty string. -- `secure` - Use ssl for connection, usually you also should define `port` = 9440. Server should listen on 9440 and have correct certificates. -- `compression` - Use data compression. Default value: true. +: - `host` – 远程服务器地址。可以域名、IPv4或IPv6。如果指定域名,则服务在启动时发起一个 DNS 请求,并且请求结果会在服务器运行期间一直被记录。如果 DNS 请求失败,则服务不会启动。如果你修改了 DNS 记录,则需要重启服务。 + - `port` – 消息传递的 TCP 端口(「tcp_port」配置通常设为 9000)。不要跟 http_port 混淆。 + - `user` – 用于连接远程服务器的用户名。默认值:default。该用户必须有权限访问该远程服务器。访问权限配置在 users.xml 文件中。更多信息,请查看“访问权限”部分。 + - `password` – 用于连接远程服务器的密码。默认值:空字符串。 + - `secure` – 是否使用ssl进行连接,设为true时,通常也应该设置 `port` = 9440。服务器也要监听 9440 并有正确的证书。 + - `compression` - 是否使用数据压缩。默认值:true。 -When specifying replicas, one of the available replicas will be selected for each of the shards when reading. You can configure the algorithm for load balancing (the preference for which replica to access) – see the 'load_balancing' setting. -If the connection with the server is not established, there will be an attempt to connect with a short timeout. If the connection failed, the next replica will be selected, and so on for all the replicas. If the connection attempt failed for all the replicas, the attempt will be repeated the same way, several times. -This works in favor of resiliency, but does not provide complete fault tolerance: a remote server might accept the connection, but might not work, or work poorly. +配置了副本,读取操作会从每个分片里选择一个可用的副本。可配置负载平衡算法(挑选副本的方式) - 请参阅“load_balancing”设置。 +如果跟服务器的连接不可用,则在尝试短超时的重连。如果重连失败,则选择下一个副本,依此类推。如果跟所有副本的连接尝试都失败,则尝试用相同的方式再重复几次。 +该机制有利于系统可用性,但不保证完全容错:如有远程服务器能够接受连接,但无法正常工作或状况不佳。 -You can specify just one of the shards (in this case, query processing should be called remote, rather than distributed) or up to any number of shards. In each shard, you can specify from one to any number of replicas. You can specify a different number of replicas for each shard. +你可以配置一个(这种情况下,查询操作更应该称为远程查询,而不是分布式查询)或任意多个分片。在每个分片中,可以配置一个或任意多个副本。不同分片可配置不同数量的副本。 -You can specify as many clusters as you wish in the configuration. +可以在配置中配置任意数量的集群。 -To view your clusters, use the 'system.clusters' table. +要查看集群,可使用“system.clusters”表。 -The Distributed engine allows working with a cluster like a local server. However, the cluster is inextensible: you must write its configuration in the server config file (even better, for all the cluster's servers). +通过分布式引擎可以像使用本地服务器一样使用集群。但是,集群不是自动扩展的:你必须编写集群配置到服务器配置文件中(最好,给所有集群的服务器写上完整配置)。 -There is no support for Distributed tables that look at other Distributed tables (except in cases when a Distributed table only has one shard). As an alternative, make the Distributed table look at the "final" tables. +不支持用分布式表查询别的分布式表(除非该表只有一个分片)。或者说,要用分布表查查询“最终”的数据表。 -The Distributed engine requires writing clusters to the config file. Clusters from the config file are updated on the fly, without restarting the server. If you need to send a query to an unknown set of shards and replicas each time, you don't need to create a Distributed table – use the 'remote' table function instead. See the section "Table functions". +分布式引擎需要将集群信息写入配置文件。配置文件中的集群信息会即时更新,无需重启服务器。如果你每次是要向不确定的一组分片和副本发送查询,则不适合创建分布式表 - 而应该使用“远程”表函数。 请参阅“表函数”部分。 -There are two methods for writing data to a cluster: +向集群写数据的方法有两种: -First, you can define which servers to write which data to, and perform the write directly on each shard. In other words, perform INSERT in the tables that the distributed table "looks at". -This is the most flexible solution – you can use any sharding scheme, which could be non-trivial due to the requirements of the subject area. -This is also the most optimal solution, since data can be written to different shards completely independently. +一,自已指定要将哪些数据写入哪些服务器,并直接在每个分片上执行写入。换句话说,在分布式表上“查询”,在数据表上 INSERT。 +这是最灵活的解决方案 – 你可以使用任何分片方案,对于复杂业务特性的需求,这可能是非常重要的。 +这也是最佳解决方案,因为数据可以完全独立地写入不同的分片。 -Second, you can perform INSERT in a Distributed table. In this case, the table will distribute the inserted data across servers itself. -In order to write to a Distributed table, it must have a sharding key set (the last parameter). In addition, if there is only one shard, the write operation works without specifying the sharding key, since it doesn't have any meaning in this case. +二,在分布式表上执行 INSERT。在这种情况下,分布式表会跨服务器分发插入数据。 +为了写入分布式表,必须要配置分片键(最后一个参数)。当然,如果只有一个分片,则写操作在没有分片键的情况下也能工作,因为这种情况下分片键没有意义。 -Each shard can have a weight defined in the config file. By default, the weight is equal to one. Data is distributed across shards in the amount proportional to the shard weight. For example, if there are two shards and the first has a weight of 9 while the second has a weight of 10, the first will be sent 9 / 19 parts of the rows, and the second will be sent 10 / 19. +每个分片都可以在配置文件中定义权重。默认情况下,权重等于1。数据依据分片权重按比例分发到分片上。例如,如果有两个分片,第一个分片的权重是9,而第二个分片的权重是10,则发送 9 / 19 的行到第一个分片, 10 / 19 的行到第二个分片。 -Each shard can have the 'internal_replication' parameter defined in the config file. +分片可在配置文件中定义 'internal_replication' 参数。 -If this parameter is set to 'true', the write operation selects the first healthy replica and writes data to it. Use this alternative if the Distributed table "looks at" replicated tables. In other words, if the table where data will be written is going to replicate them itself. +此参数设置为“true”时,写操作只选一个正常的副本写入数据。如果分布式表的子表是复制表(*ReplicaMergeTree),请使用此方案。换句话说,这其实是把数据的复制工作交给实际需要写入数据的表本身而不是分布式表。 -If it is set to 'false' (the default), data is written to all replicas. In essence, this means that the Distributed table replicates data itself. This is worse than using replicated tables, because the consistency of replicas is not checked, and over time they will contain slightly different data. +若此参数设置为“false”(默认值),写操作会将数据写入所有副本。实质上,这意味着要分布式表本身来复制数据。这种方式不如使用复制表的好,因为不会检查副本的一致性,并且随着时间的推移,副本数据可能会有些不一样。 -To select the shard that a row of data is sent to, the sharding expression is analyzed, and its remainder is taken from dividing it by the total weight of the shards. The row is sent to the shard that corresponds to the half-interval of the remainders from 'prev_weight' to 'prev_weights + weight', where 'prev_weights' is the total weight of the shards with the smallest number, and 'weight' is the weight of this shard. For example, if there are two shards, and the first has a weight of 9 while the second has a weight of 10, the row will be sent to the first shard for the remainders from the range \[0, 9), and to the second for the remainders from the range \[9, 19). +选择将一行数据发送到哪个分片的方法是,首先计算分片表达式,然后将这个计算结果除以所有分片的权重总和得到余数。该行会发送到那个包含该余数的从'prev_weight'到'prev_weights + weight'的半闭半开区间对应的分片上,其中 'prev_weights' 是该分片前面的所有分片的权重和,'weight' 是该分片的权重。例如,如果有两个分片,第一个分片权重为9,而第二个分片权重为10,则余数在 \[0,9) 中的行发给第一个分片,余数在 \[9,19) 中的行发给第二个分片。 -The sharding expression can be any expression from constants and table columns that returns an integer. For example, you can use the expression 'rand()' for random distribution of data, or 'UserID' for distribution by the remainder from dividing the user's ID (then the data of a single user will reside on a single shard, which simplifies running IN and JOIN by users). If one of the columns is not distributed evenly enough, you can wrap it in a hash function: intHash64(UserID). +分片表达式可以是由常量和表列组成的任何返回整数表达式。例如,您可以使用表达式 'rand()' 来随机分配数据,或者使用 'UserID' 来按用户 ID 的余数分布(相同用户的数据将分配到单个分片上,这可降低带有用户信息的 IN 和 JOIN 的语句运行的复杂度)。如果该列数据分布不够均匀,可以将其包装在散列函数中:intHash64(UserID)。 -A simple remainder from division is a limited solution for sharding and isn't always appropriate. It works for medium and large volumes of data (dozens of servers), but not for very large volumes of data (hundreds of servers or more). In the latter case, use the sharding scheme required by the subject area, rather than using entries in Distributed tables. +这种简单的用余数来选择分片的方案是有局限的,并不总适用。它适用于中型和大型数据(数十台服务器)的场景,但不适用于巨量数据(数百台或更多服务器)的场景。后一种情况下,应根据业务特性需求考虑的分片方案,而不是直接用分布式表的多分片。 -SELECT queries are sent to all the shards, and work regardless of how data is distributed across the shards (they can be distributed completely randomly). When you add a new shard, you don't have to transfer the old data to it. You can write new data with a heavier weight – the data will be distributed slightly unevenly, but queries will work correctly and efficiently. +SELECT 查询会被发送到所有分片,并且无论数据在分片中如何分布(即使数据完全随机分布)都可正常工作。添加新分片时,不必将旧数据传输到该分片。你可以给新分片分配大权重然后写新数据 - 数据可能会稍分布不均,但查询会正确高效地运行。 -You should be concerned about the sharding scheme in the following cases: +下面的情况,你需要关注分片方案: -- Queries are used that require joining data (IN or JOIN) by a specific key. If data is sharded by this key, you can use local IN or JOIN instead of GLOBAL IN or GLOBAL JOIN, which is much more efficient. -- A large number of servers is used (hundreds or more) with a large number of small queries (queries of individual clients - websites, advertisers, or partners). In order for the small queries to not affect the entire cluster, it makes sense to locate data for a single client on a single shard. Alternatively, as we've done in Yandex.Metrica, you can set up bi-level sharding: divide the entire cluster into "layers", where a layer may consist of multiple shards. Data for a single client is located on a single layer, but shards can be added to a layer as necessary, and data is randomly distributed within them. Distributed tables are created for each layer, and a single shared distributed table is created for global queries. +- 使用需要特定键连接数据( IN 或 JOIN )的查询。如果数据是用该键进行分片,则应使用本地 IN 或 JOIN 而不是 GLOBAL IN 或 GLOBAL JOIN,这样效率更高。 +- 使用大量服务器(上百或更多),但有大量小查询(个别客户的查询 - 网站,广告商或合作伙伴)。为了使小查询不影响整个集群,让单个客户的数据处于单个分片上是有意义的。或者,正如我们在 Yandex.Metrica 中所做的那样,你可以配置两级分片:将整个集群划分为“层”,一个层可以包含多个分片。单个客户的数据位于单个层上,根据需要将分片添加到层中,层中的数据随机分布。然后给每层创建分布式表,再创建一个全局的分布式表用于全局的查询。 -Data is written asynchronously. For an INSERT to a Distributed table, the data block is just written to the local file system. The data is sent to the remote servers in the background as soon as possible. You should check whether data is sent successfully by checking the list of files (data waiting to be sent) in the table directory: /var/lib/clickhouse/data/database/table/. +数据是异步写入的。对于分布式表的 INSERT,数据块只写本地文件系统。之后会尽快地在后台发送到远程服务器。你可以通过查看表目录中的文件列表(等待发送的数据)来检查数据是否成功发送:/var/lib/clickhouse/data/database/table/ 。 -If the server ceased to exist or had a rough restart (for example, after a device failure) after an INSERT to a Distributed table, the inserted data might be lost. If a damaged data part is detected in the table directory, it is transferred to the 'broken' subdirectory and no longer used. +如果在 INSERT 到分布式表时服务器节点丢失或重启(如,设备故障),则插入的数据可能会丢失。如果在表目录中检测到损坏的数据分片,则会将其转移到“broken”子目录,并不再使用。 -When the max_parallel_replicas option is enabled, query processing is parallelized across all replicas within a single shard. For more information, see the section "Settings, max_parallel_replicas". +启用 max_parallel_replicas 选项后,会在分表的所有副本上并行查询处理。更多信息,请参阅“设置,max_parallel_replicas”部分。 [Original article](https://clickhouse.yandex/docs/en/operations/table_engines/distributed/) diff --git a/docs/zh/query_language/create.md b/docs/zh/query_language/create.md index aa02a602f77..1b1abef47db 100644 --- a/docs/zh/query_language/create.md +++ b/docs/zh/query_language/create.md @@ -45,7 +45,7 @@ CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ... 在`ENGINE`子句后还可能存在一些其他的子句,更详细的信息可以参考 [表引擎](../operations/table_engines/index.md) 中关于建表的描述。 -### 默认值 +### 默认值 {#create-default-values} 在列描述中你可以通过以下方式之一为列指定默认表达式:`DEFAULT expr`,`MATERIALIZED expr`,`ALIAS expr`。 示例:`URLDomain String DEFAULT domain(URL)`。 diff --git a/docs/zh/query_language/insert_into.md b/docs/zh/query_language/insert_into.md index 33caac11d42..8c3f8142651 100644 --- a/docs/zh/query_language/insert_into.md +++ b/docs/zh/query_language/insert_into.md @@ -41,7 +41,7 @@ INSERT INTO t FORMAT TabSeparated 在使用命令行客户端或HTTP客户端时,你可以将具体的查询语句与数据分开发送。更多具体信息,请参考“[客户端](../interfaces/index.md#interfaces)”部分。 -### 使用`SELECT`的结果写入 +### 使用`SELECT`的结果写入 {#insert_query_insert-select} ``` sql INSERT INTO [db.]table [(c1, c2, c3)] SELECT ... diff --git a/libs/CMakeLists.txt b/libs/CMakeLists.txt index 9b047c6948e..89c8748df4c 100644 --- a/libs/CMakeLists.txt +++ b/libs/CMakeLists.txt @@ -8,7 +8,6 @@ if (USE_DEBUG_HELPERS) endif () add_subdirectory (libcommon) -add_subdirectory (libpocoext) add_subdirectory (libdaemon) if (USE_INTERNAL_MEMCPY) diff --git a/libs/libcommon/CMakeLists.txt b/libs/libcommon/CMakeLists.txt index c0be7e218e1..999290996a9 100644 --- a/libs/libcommon/CMakeLists.txt +++ b/libs/libcommon/CMakeLists.txt @@ -20,6 +20,7 @@ add_library (common ${LINK_MODE} src/getMemoryAmount.cpp src/demangle.cpp src/setTerminalEcho.cpp + src/getThreadNumber.cpp include/common/Types.h include/common/DayNum.h @@ -40,6 +41,7 @@ add_library (common ${LINK_MODE} include/common/setTerminalEcho.h include/common/find_symbols.h include/common/constexpr_helpers.h + include/common/getThreadNumber.h include/ext/bit_cast.h include/ext/collection_cast.h @@ -61,7 +63,6 @@ add_library (common ${LINK_MODE} if (USE_JEMALLOC) message (STATUS "Link jemalloc: ${JEMALLOC_LIBRARIES}") set (MALLOC_LIBRARIES ${JEMALLOC_LIBRARIES}) - elseif (USE_TCMALLOC) if (DEBUG_TCMALLOC AND NOT GPERFTOOLS_TCMALLOC_MINIMAL_DEBUG) message (FATAL_ERROR "Requested DEBUG_TCMALLOC but debug library is not found. You should install Google Perftools. Example: sudo apt-get install libgoogle-perftools-dev") @@ -94,8 +95,6 @@ if (NOT USE_INTERNAL_BOOST_LIBRARY) endif () target_link_libraries (common - PRIVATE - pocoext PUBLIC ${Poco_Foundation_LIBRARY} ${CITYHASH_LIBRARIES} diff --git a/libs/libcommon/include/common/DateLUTImpl.h b/libs/libcommon/include/common/DateLUTImpl.h index 0a713207f60..28d536fc93d 100644 --- a/libs/libcommon/include/common/DateLUTImpl.h +++ b/libs/libcommon/include/common/DateLUTImpl.h @@ -371,7 +371,7 @@ public: /// The week number 1 is the first week in year that contains 4 or more days (that's more than half). inline unsigned toISOWeek(DayNum d) const { - return 1 + (toFirstDayNumOfWeek(d) - toFirstDayNumOfISOYear(d)) / 7; + return 1 + DayNum(toFirstDayNumOfWeek(d) - toFirstDayNumOfISOYear(d)) / 7; } inline unsigned toISOWeek(time_t t) const diff --git a/libs/libpocoext/include/Poco/Ext/ThreadNumber.h b/libs/libcommon/include/common/getThreadNumber.h similarity index 79% rename from libs/libpocoext/include/Poco/Ext/ThreadNumber.h rename to libs/libcommon/include/common/getThreadNumber.h index 48478243093..a9305e13a21 100644 --- a/libs/libpocoext/include/Poco/Ext/ThreadNumber.h +++ b/libs/libcommon/include/common/getThreadNumber.h @@ -3,12 +3,5 @@ /** Последовательный номер потока, начиная с 1, среди тех потоков, для которых был получен этот номер. * Используется при логгировании. */ -namespace Poco -{ -namespace ThreadNumber -{ - unsigned get(); -} - -} +unsigned getThreadNumber(); diff --git a/libs/libcommon/include/common/iostream_debug_helpers.h b/libs/libcommon/include/common/iostream_debug_helpers.h index 2fc6bed52b2..2c41742e455 100644 --- a/libs/libcommon/include/common/iostream_debug_helpers.h +++ b/libs/libcommon/include/common/iostream_debug_helpers.h @@ -1,7 +1,7 @@ #pragma once #include "demangle.h" - +#include "getThreadNumber.h" #include #include #include @@ -141,7 +141,7 @@ Out & dump(Out & out, const char * name, T && x) #endif #define DUMPVAR(VAR) dump(std::cerr, #VAR, (VAR)); std::cerr << "; "; -#define DUMPHEAD std::cerr << __FILE__ << ':' << __LINE__ << " "; +#define DUMPHEAD std::cerr << __FILE__ << ':' << __LINE__ << " [ " << getThreadNumber() << " ] "; #define DUMPTAIL std::cerr << '\n'; #define DUMP1(V1) do { DUMPHEAD DUMPVAR(V1) DUMPTAIL } while(0) diff --git a/libs/libpocoext/src/ThreadNumber.cpp b/libs/libcommon/src/getThreadNumber.cpp similarity index 77% rename from libs/libpocoext/src/ThreadNumber.cpp rename to libs/libcommon/src/getThreadNumber.cpp index 6458ea8c221..0c2d7d28283 100644 --- a/libs/libpocoext/src/ThreadNumber.cpp +++ b/libs/libcommon/src/getThreadNumber.cpp @@ -1,11 +1,11 @@ -#include +#include #include #include static thread_local unsigned thread_number = 0; static std::atomic_uint threads{0}; -unsigned Poco::ThreadNumber::get() +unsigned getThreadNumber() { if (unlikely(thread_number == 0)) thread_number = ++threads; diff --git a/libs/libdaemon/CMakeLists.txt b/libs/libdaemon/CMakeLists.txt index b352602f81c..eb73f1cda33 100644 --- a/libs/libdaemon/CMakeLists.txt +++ b/libs/libdaemon/CMakeLists.txt @@ -21,6 +21,5 @@ if (USE_UNWIND) endif () target_include_directories (daemon PUBLIC include) -target_include_directories (daemon PRIVATE ${ClickHouse_SOURCE_DIR}/libs/libpocoext/include) target_link_libraries (daemon PRIVATE clickhouse_common_io clickhouse_common_config common ${Poco_Net_LIBRARY} ${Poco_Util_LIBRARY} ${EXECINFO_LIBRARY} ${ELF_LIBRARY}) diff --git a/libs/libdaemon/src/BaseDaemon.cpp b/libs/libdaemon/src/BaseDaemon.cpp index cb2346f4379..6bf9ef3f451 100644 --- a/libs/libdaemon/src/BaseDaemon.cpp +++ b/libs/libdaemon/src/BaseDaemon.cpp @@ -25,8 +25,7 @@ #include #include #include -#include -#include +#include #include #include #include @@ -128,7 +127,7 @@ static void call_default_signal_handler(int sig) } -using ThreadNumber = decltype(Poco::ThreadNumber::get()); +using ThreadNumber = decltype(getThreadNumber()); static const size_t buf_size = sizeof(int) + sizeof(siginfo_t) + sizeof(ucontext_t) + sizeof(ThreadNumber); using signal_function = void(int, siginfo_t*, void*); @@ -169,7 +168,7 @@ static void faultSignalHandler(int sig, siginfo_t * info, void * context) DB::writeBinary(sig, out); DB::writePODBinary(*info, out); DB::writePODBinary(*reinterpret_cast(context), out); - DB::writeBinary(Poco::ThreadNumber::get(), out); + DB::writeBinary(getThreadNumber(), out); out.next(); @@ -556,7 +555,7 @@ static void terminate_handler() DB::WriteBufferFromFileDescriptor out(signal_pipe.write_fd, buf_size, buf); DB::writeBinary(static_cast(SignalListener::StdTerminate), out); - DB::writeBinary(Poco::ThreadNumber::get(), out); + DB::writeBinary(getThreadNumber(), out); DB::writeBinary(log_message, out); out.next(); diff --git a/libs/libdaemon/src/ExtendedLogChannel.cpp b/libs/libdaemon/src/ExtendedLogChannel.cpp index 46dcd65e893..7a1ac0688e0 100644 --- a/libs/libdaemon/src/ExtendedLogChannel.cpp +++ b/libs/libdaemon/src/ExtendedLogChannel.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include @@ -27,7 +27,7 @@ ExtendedLogMessage ExtendedLogMessage::getFrom(const Poco::Message & base) if (current_thread) msg_ext.query_id = CurrentThread::getQueryId(); - msg_ext.thread_number = Poco::ThreadNumber::get(); + msg_ext.thread_number = getThreadNumber(); return msg_ext; } diff --git a/libs/libdaemon/src/OwnPatternFormatter.cpp b/libs/libdaemon/src/OwnPatternFormatter.cpp index 5d503824ba8..70f102ef351 100644 --- a/libs/libdaemon/src/OwnPatternFormatter.cpp +++ b/libs/libdaemon/src/OwnPatternFormatter.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include #include diff --git a/libs/libdaemon/src/OwnSplitChannel.cpp b/libs/libdaemon/src/OwnSplitChannel.cpp index 93f73085ab4..f7cb28764d3 100644 --- a/libs/libdaemon/src/OwnSplitChannel.cpp +++ b/libs/libdaemon/src/OwnSplitChannel.cpp @@ -6,7 +6,7 @@ #include #include -#include +#include #include #include diff --git a/libs/libglibc-compatibility/CMakeLists.txt b/libs/libglibc-compatibility/CMakeLists.txt index 29d66596386..4747953afde 100644 --- a/libs/libglibc-compatibility/CMakeLists.txt +++ b/libs/libglibc-compatibility/CMakeLists.txt @@ -1,10 +1,14 @@ -enable_language (ASM) +enable_language(ASM) +include(CheckIncludeFile) -if (COMPILER_CLANG) - set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-builtin-requires-header") -endif () +check_include_file("sys/random.h" HAVE_SYS_RANDOM_H) -set (GLIBC_COMPATIBILITY_SOURCES +if(COMPILER_CLANG) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-builtin-requires-header") +endif() + + +set(GLIBC_COMPATIBILITY_SOURCES glibc-compatibility.c musl/pipe2.c musl/fallocate.c @@ -19,18 +23,21 @@ musl/sched_cpucount.c musl/glob.c musl/exp2f.c musl/pwritev.c -musl/getentropy.c musl/getrandom.c musl/fcntl.c musl/timespec_get.c musl/sched_getcpu.c ) -if (MAKE_STATIC_LIBRARIES) - set (GLIBC_COMPATIBILITY_SOURCES ${GLIBC_COMPATIBILITY_SOURCES} - libcxxabi/cxa_thread_atexit.cpp) -endif () +if(HAVE_SYS_RANDOM_H) + list(APPEND GLIBC_COMPATIBILITY_SOURCES musl/getentropy.c) +endif() -add_library (glibc-compatibility ${GLIBC_COMPATIBILITY_SOURCES}) +if(MAKE_STATIC_LIBRARIES) + set(GLIBC_COMPATIBILITY_SOURCES ${GLIBC_COMPATIBILITY_SOURCES} + libcxxabi/cxa_thread_atexit.cpp) +endif() + +add_library(glibc-compatibility ${GLIBC_COMPATIBILITY_SOURCES}) target_include_directories(glibc-compatibility PRIVATE libcxxabi) diff --git a/libs/libpocoext/CMakeLists.txt b/libs/libpocoext/CMakeLists.txt deleted file mode 100644 index cacfdeeac30..00000000000 --- a/libs/libpocoext/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -add_library (pocoext ${LINK_MODE} - src/LevelFilterChannel.cpp - src/ThreadNumber.cpp - src/SessionPoolHelpers.cpp - - include/Poco/Ext/LevelFilterChannel.h - include/Poco/Ext/ThreadNumber.h - include/Poco/Ext/SessionPoolHelpers.h) - -if (Poco_Data_FOUND) - target_include_directories (pocoext SYSTEM PRIVATE ${Poco_Data_INCLUDE_DIR}) - target_link_libraries(pocoext PRIVATE ${Poco_Data_LIBRARY}) -endif() - -target_include_directories (pocoext PUBLIC include PRIVATE ${COMMON_INCLUDE_DIR}) - -if (NOT USE_INTERNAL_POCO_LIBRARY) - target_include_directories (pocoext SYSTEM BEFORE PUBLIC ${Poco_INCLUDE_DIRS}) -endif () - -target_link_libraries(pocoext PUBLIC ${Poco_Foundation_LIBRARY}) diff --git a/libs/libpocoext/include/Poco/Ext/LevelFilterChannel.h b/libs/libpocoext/include/Poco/Ext/LevelFilterChannel.h deleted file mode 100644 index a03b84168b2..00000000000 --- a/libs/libpocoext/include/Poco/Ext/LevelFilterChannel.h +++ /dev/null @@ -1,55 +0,0 @@ -#pragma once - -#include "Poco/Foundation.h" -#include "Poco/Channel.h" -#include "Poco/Message.h" -#include - - -namespace Poco -{ - -/// This channel sends messages only higher then specified level -class Foundation_API LevelFilterChannel : public Channel -{ -public: - /// Sends the given Message to all - /// attaches channels. - void log(const Message & msg); - - /// Sets or changes a configuration property. - /// - /// Only the "level" property is supported, which allows setting desired level - void setProperty(const std::string & name, const std::string & value); - - /// Sets the destination channel to which the formatted - /// messages are passed on. - void setChannel(Channel * channel_); - - /// Returns the channel to which the formatted - /// messages are passed on. - Channel * getChannel() const; - - /// Opens the attached channel. - void open(); - - /// Closes the attached channel. - void close(); - - /// Sets the Logger's log level. - void setLevel(Message::Priority); - /// Sets the Logger's log level using a symbolic value. - void setLevel(const std::string & value); - - /// Returns the Logger's log level. - Message::Priority getLevel() const; - -protected: - ~LevelFilterChannel(); - -private: - Channel * channel = nullptr; - Message::Priority priority = Message::PRIO_ERROR; -}; - -} diff --git a/libs/libpocoext/include/Poco/Ext/SessionPoolHelpers.h b/libs/libpocoext/include/Poco/Ext/SessionPoolHelpers.h deleted file mode 100644 index 93caee46944..00000000000 --- a/libs/libpocoext/include/Poco/Ext/SessionPoolHelpers.h +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include -#include - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wunused-parameter" - #include -#pragma GCC diagnostic pop - - -using PocoSessionPoolConstructor = std::function()>; - -/** Is used to adjust max size of default Poco thread pool. See issue #750 - * Acquire the lock, resize pool and construct new Session. - */ -std::shared_ptr createAndCheckResizePocoSessionPool(PocoSessionPoolConstructor pool_constr); diff --git a/libs/libpocoext/src/LevelFilterChannel.cpp b/libs/libpocoext/src/LevelFilterChannel.cpp deleted file mode 100644 index 8839aa33e5d..00000000000 --- a/libs/libpocoext/src/LevelFilterChannel.cpp +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2008, Yandex LLC. -// See the license of ClickHouse. - -#include "Poco/Ext/LevelFilterChannel.h" -#include "Poco/LoggingRegistry.h" -#include "Poco/String.h" - - -namespace Poco -{ - -LevelFilterChannel::~LevelFilterChannel() -{ - if (channel) - channel->release(); -} - - -void LevelFilterChannel::setChannel(Channel * channel_) -{ - if (channel) - channel->release(); - channel = channel_; - if (channel) - channel->duplicate(); -} - - -Channel * LevelFilterChannel::getChannel() const -{ - return channel; -} - -void LevelFilterChannel::open() -{ - if (channel) - channel->open(); -} - - -void LevelFilterChannel::close() -{ - if (channel) - channel->close(); -} - - -void LevelFilterChannel::setLevel(Message::Priority priority_) -{ - priority = priority_; -} - - -void LevelFilterChannel::setLevel(const std::string & value) -{ - if (icompare(value, "fatal") == 0) - setLevel(Message::PRIO_FATAL); - else if (icompare(value, "critical") == 0) - setLevel(Message::PRIO_CRITICAL); - else if (icompare(value, "error") == 0) - setLevel(Message::PRIO_ERROR); - else if (icompare(value, "warning") == 0) - setLevel(Message::PRIO_WARNING); - else if (icompare(value, "notice") == 0) - setLevel(Message::PRIO_NOTICE); - else if (icompare(value, "information") == 0) - setLevel(Message::PRIO_INFORMATION); - else if (icompare(value, "debug") == 0) - setLevel(Message::PRIO_DEBUG); - else if (icompare(value, "trace") == 0) - setLevel(Message::PRIO_TRACE); - else - throw InvalidArgumentException("Not a valid log value", value); -} - - -Message::Priority LevelFilterChannel::getLevel() const -{ - return priority; -} - - -void LevelFilterChannel::setProperty(const std::string & name, const std::string & value) -{ - if (icompare(name, "level") == 0) - setLevel(value); - else if (icompare(name, "channel") == 0) - setChannel(LoggingRegistry::defaultRegistry().channelForName(value)); - else - Channel::setProperty(name, value); -} - - -void LevelFilterChannel::log(const Message& msg) -{ - if ((priority >= msg.getPriority()) && channel) - channel->log(msg); -} - -} diff --git a/libs/libpocoext/src/SessionPoolHelpers.cpp b/libs/libpocoext/src/SessionPoolHelpers.cpp deleted file mode 100644 index 61c1ace6b96..00000000000 --- a/libs/libpocoext/src/SessionPoolHelpers.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include -#include - - -std::shared_ptr createAndCheckResizePocoSessionPool(PocoSessionPoolConstructor pool_constr) -{ - static std::mutex mutex; - - Poco::ThreadPool & pool = Poco::ThreadPool::defaultPool(); - - /// NOTE: The lock don't guarantee that external users of the pool don't change its capacity - std::unique_lock lock(mutex); - - if (pool.available() == 0) - pool.addCapacity(2 * std::max(pool.capacity(), 1)); - - return pool_constr(); -} diff --git a/release b/release index b8ed159bc7a..509e28d9323 100755 --- a/release +++ b/release @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # If you have "no space left" error, you can change the location of temporary files with BUILDPLACE environment variable. diff --git a/utils/check-marks/main.cpp b/utils/check-marks/main.cpp index 52020dfff25..0e075f6be4e 100644 --- a/utils/check-marks/main.cpp +++ b/utils/check-marks/main.cpp @@ -1,6 +1,7 @@ #include #include +#include #include #include @@ -78,16 +79,27 @@ void checkByCompressedReadBuffer(const std::string & mrk_path, const std::string DB::CompressedReadBufferFromFile bin_in(bin_path, 0, 0); DB::WriteBufferFromFileDescriptor out(STDOUT_FILENO); + bool mrk2_format = boost::algorithm::ends_with(mrk_path, ".mrk2"); for (size_t mark_num = 0; !mrk_in.eof(); ++mark_num) { UInt64 offset_in_compressed_file = 0; UInt64 offset_in_decompressed_block = 0; + UInt64 index_granularity_rows = 0; DB::readBinary(offset_in_compressed_file, mrk_in); DB::readBinary(offset_in_decompressed_block, mrk_in); - out << "Mark " << mark_num << ", points to " << offset_in_compressed_file << ", " << offset_in_decompressed_block << ".\n" << DB::flush; + out << "Mark " << mark_num << ", points to " << offset_in_compressed_file << ", " << offset_in_decompressed_block; + + if (mrk2_format) + { + DB::readBinary(index_granularity_rows, mrk_in); + + out << ", has rows after " << index_granularity_rows; + } + + out << ".\n" << DB::flush; bin_in.seek(offset_in_compressed_file, offset_in_decompressed_block); } diff --git a/utils/check-style/check-include b/utils/check-style/check-include index 4c0e0c69e83..28aacf95670 100755 --- a/utils/check-style/check-include +++ b/utils/check-style/check-include @@ -48,7 +48,6 @@ inc="-I. \ -I./libs/libmysqlxx/include \ -I./libs/libcommon/include \ -I${BUILD_DIR}/libs/libcommon/include \ --I./libs/libpocoext/include \ -I./libs/libzkutil/include \ -I./libs/libdaemon/include \ -I./libs/consistent-hashing \ diff --git a/utils/github/__init__.py b/utils/github/__init__.py new file mode 100644 index 00000000000..40a96afc6ff --- /dev/null +++ b/utils/github/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/utils/github/__main__.py b/utils/github/__main__.py new file mode 100644 index 00000000000..e5a5a89e8d4 --- /dev/null +++ b/utils/github/__main__.py @@ -0,0 +1,173 @@ +# -*- coding: utf-8 -*- + +''' + Rules for commit messages, branch names and everything: + + - All important(!) commits to master branch must originate from pull-requests. + - All pull-requests must be squash-merged or explicitly merged without rebase. + - All pull-requests to master must have at least one label prefixed with `pr-`. + - Labels that require pull-request to be backported must be red colored (#ff0000). + - Stable branch name must be of form `YY.NUMBER`. + - All stable branches must be forked directly from the master branch and never be merged back, + or merged with any other branches based on the master branch (including master branch itself). + + Output of this script: + + - Commits without references from pull-requests. + - Pull-requests to master without proper labels. + - Pull-requests that need to be backported, with statuses per stable branch. + +''' + +from . import local, query + +from termcolor import colored # `pip install termcolor` + +import argparse +import re +import sys + +CHECK_MARK = colored('🗸', 'green') +CROSS_MARK = colored('🗙', 'red') +LABEL_MARK = colored('🏷', 'yellow') +CLOCK_MARK = colored('↻', 'cyan') + + +parser = argparse.ArgumentParser(description='Helper for the ClickHouse Release machinery') +parser.add_argument('--repo', '-r', type=str, default='', metavar='PATH', + help='path to the root of the ClickHouse repository') +parser.add_argument('--remote', type=str, default='origin', + help='remote name of the "yandex/ClickHouse" upstream') +parser.add_argument('-n', type=int, default=3, dest='number', + help='number of last stable branches to consider') +parser.add_argument('--token', type=str, required=True, + help='token for Github access') +parser.add_argument('--login', type=str, + help='filter authorship by login') + +args = parser.parse_args() + +github = query.Query(args.token) +repo = local.Local(args.repo, args.remote, github.get_default_branch()) + +stables = repo.get_stables()[-args.number:] # [(branch name, base)] +if not stables: + sys.exit('No stable branches found!') +else: + print('Found stable branches:') + for stable in stables: + print(f'{CHECK_MARK} {stable[0]} forked from {stable[1]}') + +first_commit = stables[0][1] +pull_requests = github.get_pull_requests(first_commit, args.login) +good_commits = set(pull_request['mergeCommit']['oid'] for pull_request in pull_requests) + +bad_commits = [] # collect and print them in the end +from_commit = repo.get_head_commit() +for i in reversed(range(len(stables))): + for commit in repo.iterate(from_commit, stables[i][1]): + if str(commit) not in good_commits and commit.author.name != 'robot-clickhouse': + bad_commits.append(commit) + + from_commit = stables[i][1] + +members = set(github.get_members("yandex", "clickhouse")) +def print_responsible(pull_request): + if pull_request["author"]["login"] in members: + return colored(pull_request["author"]["login"], 'green') + elif pull_request["mergedBy"]["login"] in members: + return f'{pull_request["author"]["login"]} → {colored(pull_request["mergedBy"]["login"], "green")}' + else: + return f'{pull_request["author"]["login"]} → {pull_request["mergedBy"]["login"]}' + +bad_pull_requests = [] # collect and print if not empty +need_backporting = [] +for pull_request in pull_requests: + label_found = False + + for label in github.get_labels(pull_request): + if label['name'].startswith('pr-'): + label_found = True + if label['color'] == 'ff0000': + need_backporting.append(pull_request) + break + + if not label_found: + bad_pull_requests.append(pull_request) + +if bad_pull_requests: + print('\nPull-requests without description label:') + for bad in reversed(sorted(bad_pull_requests, key = lambda x : x['number'])): + print(f'{CROSS_MARK} {bad["number"]}: {bad["url"]} ({print_responsible(bad)})') + +# FIXME: compatibility logic, until the direct modification of master is not prohibited. +if bad_commits and not args.login: + print('\nCommits not referenced by any pull-request:') + + for bad in bad_commits: + print(f'{CROSS_MARK} {bad} {bad.author}') + +# TODO: check backports. +if need_backporting: + re_vlabel = re.compile(r'^v\d+\.\d+$') + + print('\nPull-requests need to be backported:') + for pull_request in reversed(sorted(need_backporting, key=lambda x: x['number'])): + targets = [] # use common list for consistent order in output + good = set() + labeled = set() + wait = set() + + for stable in stables: + if repo.comparator(stable[1]) < repo.comparator(pull_request['mergeCommit']['oid']): + targets.append(stable[0]) + + # FIXME: compatibility logic - check for a manually set label, that indicates status 'backported'. + # FIXME: O(n²) - no need to iterate all labels for every `stable` + for label in github.get_labels(pull_request): + if re_vlabel.match(label['name']): + if f'v{stable[0]}' == label['name']: + labeled.add(stable[0]) + + for event in github.get_timeline(pull_request): + if(event['isCrossRepository'] or + event['target']['number'] != pull_request['number'] or + event['source']['baseRefName'] not in targets): + continue + + found_label = False + for label in github.get_labels(event['source']): + if label['name'] == 'pr-backport': + found_label = True + break + if not found_label: + continue + + if event['source']['merged']: + good.add(event['source']['baseRefName']) + else: + wait.add(event['source']['baseRefName']) + + # print pull-request's status + if len(good) + len(labeled) == len(targets): + print(f'{CHECK_MARK}', end=' ') + else: + print(f'{CROSS_MARK}', end=' ') + print(f'{pull_request["number"]}', end=':') + for target in targets: + if target in good: + print(f'\t{CHECK_MARK} {target}', end='') + elif target in labeled: + print(f'\t{LABEL_MARK} {target}', end='') + elif target in wait: + print(f'\t{CLOCK_MARK} {target}', end='') + else: + print(f'\t{CROSS_MARK} {target}', end='') + print(f'\t{pull_request["url"]} ({print_responsible(pull_request)})') + +# print legend +print('\nLegend:') +print(f'{CHECK_MARK} - good') +print(f'{CROSS_MARK} - bad') +print(f'{LABEL_MARK} - backport is detected via label') +print(f'{CLOCK_MARK} - backport is waiting to merge') diff --git a/utils/github/local.py b/utils/github/local.py new file mode 100644 index 00000000000..8dbef6b9b6a --- /dev/null +++ b/utils/github/local.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- + +# `pip install …` +import git # gitpython + +import functools +import os +import re + + +class Local: + '''Implements some useful methods atop of the local repository + ''' + RE_STABLE_REF = re.compile(r'^refs/remotes/.+/\d+\.\d+$') + + def __init__(self, repo_path, remote_name, default_branch_name): + self._repo = git.Repo(repo_path, search_parent_directories=(not repo_path)) + self._remote = self._repo.remotes[remote_name] + self._default = self._remote.refs[default_branch_name] + + # public key comparator + def cmp(x, y): + if x == y: + return 0 + if self._repo.is_ancestor(x, y): + return -1 + else: + return 1 + self.comparator = functools.cmp_to_key(cmp) + + def get_head_commit(self): + return self._repo.commit(self._default) + + def iterate(self, begin, end): + rev_range = '{}...{}'.format(begin, end) + for commit in self._repo.iter_commits(rev_range, first_parent=True): + yield commit + + ''' Returns sorted list of tuples: + * remote branch (git.refs.remote.RemoteReference), + * base commit (git.Commit), + * head (git.Commit)). + List is sorted by commits in ascending order. + ''' + def get_stables(self): + stables = [] + + for stable in [r for r in self._remote.refs if Local.RE_STABLE_REF.match(r.path)]: + base = self._repo.merge_base(self._default, self._repo.commit(stable)) + if not base: + print(f'Branch {stable.path} is not based on branch {self._default}. Ignoring.') + elif len(base) > 1: + print(f'Branch {stable.path} has more than one base commit. Ignoring.') + else: + stables.append((os.path.basename(stable.name), base[0])) + + return sorted(stables, key=lambda x : self.comparator(x[1])) diff --git a/utils/github/query.py b/utils/github/query.py new file mode 100644 index 00000000000..dae4fd062d5 --- /dev/null +++ b/utils/github/query.py @@ -0,0 +1,345 @@ +# -*- coding: utf-8 -*- + +import requests + + +class Query: + '''Implements queries to the Github API using GraphQL + ''' + + def __init__(self, token, max_page_size=100, min_page_size=5): + self._token = token + self._max_page_size = max_page_size + self._min_page_size = min_page_size + + _MEMBERS = ''' + {{ + organization(login: "{organization}") {{ + team(slug: "{team}") {{ + members(first: {max_page_size} {next}) {{ + pageInfo {{ + hasNextPage + endCursor + }} + nodes {{ + login + }} + }} + }} + }} + }} + ''' + def get_members(self, organization, team): + '''Get all team members for organization + + Returns: + logins: a list of members' logins + ''' + logins = [] + not_end = True + query = Query._MEMBERS.format(organization=organization, + team=team, + max_page_size=self._max_page_size, + next='') + + while not_end: + result = self._run(query)['organization']['team'] + if result is None: + break + result = result['members'] + not_end = result['pageInfo']['hasNextPage'] + query = Query._MEMBERS.format(organization=organization, + team=team, + max_page_size=self._max_page_size, + next=f'after: "{result["pageInfo"]["endCursor"]}"') + + logins += [node['login'] for node in result['nodes']] + + return logins + + _LABELS = ''' + {{ + repository(owner: "yandex" name: "ClickHouse") {{ + pullRequest(number: {number}) {{ + labels(first: {max_page_size} {next}) {{ + pageInfo {{ + hasNextPage + endCursor + }} + nodes {{ + name + color + }} + }} + }} + }} + }} + ''' + def get_labels(self, pull_request): + '''Fetchs all labels for given pull-request + + Args: + pull_request: JSON object returned by `get_pull_requests()` + + Returns: + labels: a list of JSON nodes with the name and color fields + ''' + labels = [label for label in pull_request['labels']['nodes']] + not_end = pull_request['labels']['pageInfo']['hasNextPage'] + query = Query._LABELS.format(number = pull_request['number'], + max_page_size = self._max_page_size, + next=f'after: "{pull_request["labels"]["pageInfo"]["endCursor"]}"') + + while not_end: + result = self._run(query)['repository']['pullRequest']['labels'] + not_end = result['pageInfo']['hasNextPage'] + query = Query._LABELS.format(number=pull_request['number'], + max_page_size=self._max_page_size, + next=f'after: "{result["pageInfo"]["endCursor"]}"') + + labels += [label for label in result['nodes']] + + return labels + + _TIMELINE = ''' + {{ + repository(owner: "yandex" name: "ClickHouse") {{ + pullRequest(number: {number}) {{ + timeline(first: {max_page_size} {next}) {{ + pageInfo {{ + hasNextPage + endCursor + }} + nodes {{ + ... on CrossReferencedEvent {{ + isCrossRepository + source {{ + ... on PullRequest {{ + number + baseRefName + merged + labels(first: {max_page_size}) {{ + pageInfo {{ + hasNextPage + endCursor + }} + nodes {{ + name + color + }} + }} + }} + }} + target {{ + ... on PullRequest {{ + number + }} + }} + }} + }} + }} + }} + }} + }} + ''' + def get_timeline(self, pull_request): + '''Fetchs all cross-reference events from pull-request's timeline + + Args: + pull_request: JSON object returned by `get_pull_requests()` + + Returns: + events: a list of JSON nodes for CrossReferenceEvent + ''' + events = [event for event in pull_request['timeline']['nodes'] if event and event['source']] + not_end = pull_request['timeline']['pageInfo']['hasNextPage'] + query = Query._TIMELINE.format(number = pull_request['number'], + max_page_size = self._max_page_size, + next=f'after: "{pull_request["timeline"]["pageInfo"]["endCursor"]}"') + + while not_end: + result = self._run(query)['repository']['pullRequest']['timeline'] + not_end = result['pageInfo']['hasNextPage'] + query = Query._TIMELINE.format(number=pull_request['number'], + max_page_size=self._max_page_size, + next=f'after: "{result["pageInfo"]["endCursor"]}"') + + events += [event for event in result['nodes'] if event and event['source']] + + return events + + _PULL_REQUESTS = ''' + {{ + repository(owner: "yandex" name: "ClickHouse") {{ + defaultBranchRef {{ + name + target {{ + ... on Commit {{ + history(first: {max_page_size} {next}) {{ + pageInfo {{ + hasNextPage + endCursor + }} + nodes {{ + oid + associatedPullRequests(first: {min_page_size}) {{ + totalCount + nodes {{ + ... on PullRequest {{ + number + author {{ + login + }} + mergedBy {{ + login + }} + url + baseRefName + baseRepository {{ + nameWithOwner + }} + mergeCommit {{ + oid + }} + labels(first: {min_page_size}) {{ + pageInfo {{ + hasNextPage + endCursor + }} + nodes {{ + name + color + }} + }} + timeline(first: {min_page_size}) {{ + pageInfo {{ + hasNextPage + endCursor + }} + nodes {{ + ... on CrossReferencedEvent {{ + isCrossRepository + source {{ + ... on PullRequest {{ + number + baseRefName + merged + labels(first: 0) {{ + nodes {{ + name + }} + }} + }} + }} + target {{ + ... on PullRequest {{ + number + }} + }} + }} + }} + }} + }} + }} + }} + }} + }} + }} + }} + }} + }} + }} + ''' + def get_pull_requests(self, before_commit, login): + '''Get all merged pull-requests from the HEAD of default branch to the last commit (excluding) + + Args: + before_commit (string-convertable): commit sha of the last commit (excluding) + login (string): filter pull-requests by user login + + Returns: + pull_requests: a list of JSON nodes with pull-requests' details + ''' + pull_requests = [] + not_end = True + query = Query._PULL_REQUESTS.format(max_page_size=self._max_page_size, + min_page_size=self._min_page_size, + next='') + + while not_end: + result = self._run(query)['repository']['defaultBranchRef'] + default_branch_name = result['name'] + result = result['target']['history'] + not_end = result['pageInfo']['hasNextPage'] + query = Query._PULL_REQUESTS.format(max_page_size=self._max_page_size, + min_page_size=self._min_page_size, + next=f'after: "{result["pageInfo"]["endCursor"]}"') + + for commit in result['nodes']: + if str(commit['oid']) == str(before_commit): + not_end = False + break + + # TODO: fetch all pull-requests that were merged in a single commit. + assert commit['associatedPullRequests']['totalCount'] <= self._min_page_size, \ + f'there are {commit["associatedPullRequests"]["totalCount"]} pull-requests merged in commit {commit["oid"]}' + + for pull_request in commit['associatedPullRequests']['nodes']: + if(pull_request['baseRepository']['nameWithOwner'] == 'yandex/ClickHouse' and + pull_request['baseRefName'] == default_branch_name and + pull_request['mergeCommit']['oid'] == commit['oid'] and + (not login or pull_request['author']['login'] == login)): + pull_requests.append(pull_request) + + return pull_requests + + _DEFAULT = ''' + { + repository(owner: "yandex", name: "ClickHouse") { + defaultBranchRef { + name + } + } + } + ''' + def get_default_branch(self): + '''Get short name of the default branch + + Returns: + name (string): branch name + ''' + return self._run(Query._DEFAULT)['repository']['defaultBranchRef']['name'] + + def _run(self, query): + from requests.adapters import HTTPAdapter + from urllib3.util.retry import Retry + + def requests_retry_session( + retries=3, + backoff_factor=0.3, + status_forcelist=(500, 502, 504), + session=None, + ): + session = session or requests.Session() + retry = Retry( + total=retries, + read=retries, + connect=retries, + backoff_factor=backoff_factor, + status_forcelist=status_forcelist, + ) + adapter = HTTPAdapter(max_retries=retry) + session.mount('http://', adapter) + session.mount('https://', adapter) + return session + + headers = {'Authorization': f'bearer {self._token}'} + request = requests_retry_session().post('https://api.github.com/graphql', json={'query': query}, headers=headers) + if request.status_code == 200: + result = request.json() + if 'errors' in result: + raise Exception(f'Errors occured: {result["errors"]}') + return result['data'] + else: + import json + raise Exception(f'Query failed with code {request.status_code}:\n{json.dumps(request.json(), indent=4)}') diff --git a/utils/list_backports.sh b/utils/list_backports.sh new file mode 100755 index 00000000000..552b560d5c6 --- /dev/null +++ b/utils/list_backports.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +set -e +SCRIPTPATH=$(readlink -f "$0") +SCRIPTDIR=$(dirname "$SCRIPTPATH") +PYTHONPATH="$SCRIPTDIR" python3 -m github "$@" diff --git a/website/index.html b/website/index.html index f89d622566e..cbb8e60efe8 100644 --- a/website/index.html +++ b/website/index.html @@ -92,6 +92,11 @@
+
+
+ Upcoming ClickHouse Community Meetups: Limassol on May 7 and Beijing on June 8 +
+

ClickHouse. Just makes you think faster.

diff --git a/website/robots.txt b/website/robots.txt index e427703572e..db843cdbf06 100644 --- a/website/robots.txt +++ b/website/robots.txt @@ -3,6 +3,9 @@ Disallow: /docs/en/single/ Disallow: /docs/ru/single/ Disallow: /docs/zh/single/ Disallow: /docs/fa/single/ +Disallow: /docs/v1* +Disallow: /docs/v2* +Disallow: /docs/v3* Disallow: /docs/en/search.html Disallow: /docs/ru/search.html Disallow: /docs/fa/search.html