01702_system_query_log.sql 5.2 KB
Newer Older
1 2 3 4
-- fire all kinds of queries and then check if those are present in the system.query_log
SET log_comment='system.query_log logging test';

SELECT 'DROP queries and also a cleanup before the test';
5
DROP DATABASE IF EXISTS sqllt SYNC;
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
DROP USER IF EXISTS sqllt_user;
DROP ROLE IF EXISTS sqllt_role;
DROP POLICY IF EXISTS sqllt_policy ON sqllt.table, sqllt.view, sqllt.dictionary;
DROP ROW POLICY IF EXISTS sqllt_row_policy ON sqllt.table, sqllt.view, sqllt.dictionary;
DROP QUOTA IF EXISTS sqllt_quota;
DROP SETTINGS PROFILE IF EXISTS sqllt_settings_profile;

SELECT 'CREATE queries';
CREATE DATABASE sqllt;

CREATE TABLE sqllt.table
(
    i UInt8, s String
)
ENGINE = MergeTree PARTITION BY tuple() ORDER BY tuple();

CREATE VIEW sqllt.view AS SELECT i, s FROM sqllt.table;
CREATE DICTIONARY sqllt.dictionary (key UInt64, value UInt64) PRIMARY KEY key SOURCE(CLICKHOUSE(DB 'sqllt' TABLE 'table' HOST 'localhost' PORT 9001)) LIFETIME(0) LAYOUT(FLAT());

CREATE USER sqllt_user IDENTIFIED WITH PLAINTEXT_PASSWORD BY 'password';
CREATE ROLE sqllt_role;

CREATE POLICY sqllt_policy ON sqllt.table, sqllt.view, sqllt.dictionary AS PERMISSIVE TO ALL;
CREATE POLICY sqllt_row_policy ON sqllt.table, sqllt.view, sqllt.dictionary AS PERMISSIVE TO ALL;

CREATE QUOTA sqllt_quota KEYED BY user_name TO sqllt_role;
CREATE SETTINGS PROFILE sqllt_settings_profile SETTINGS interactive_delay = 200000;

GRANT sqllt_role TO sqllt_user;


SELECT 'SET queries';
SET log_profile_events=false;
SET DEFAULT ROLE sqllt_role TO sqllt_user;
V
Vasily Nemkov 已提交
40
-- SET ROLE sqllt_role; -- tests are executed by user `default` which is defined in XML and is impossible to update.
41 42

SELECT 'ALTER TABLE queries';
V
Vasily Nemkov 已提交
43 44 45 46 47 48 49 50 51
ALTER TABLE sqllt.table ADD COLUMN new_col UInt32 DEFAULT 123456789;
ALTER TABLE sqllt.table COMMENT COLUMN new_col 'dummy column with a comment';
ALTER TABLE sqllt.table CLEAR COLUMN new_col;
ALTER TABLE sqllt.table MODIFY COLUMN new_col DateTime DEFAULT '2015-05-18 07:40:13';
ALTER TABLE sqllt.table MODIFY COLUMN new_col REMOVE COMMENT;
ALTER TABLE sqllt.table RENAME COLUMN new_col TO the_new_col;
ALTER TABLE sqllt.table DROP COLUMN the_new_col;
ALTER TABLE sqllt.table UPDATE i = i + 1 WHERE 1;
ALTER TABLE sqllt.table DELETE WHERE i > 65535;
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

-- not done, seems to hard, so I've skipped queries of ALTER-X, where X is:
-- PARTITION
-- ORDER BY
-- SAMPLE BY
-- INDEX
-- CONSTRAINT
-- TTL
-- USER
-- QUOTA
-- ROLE
-- ROW POLICY
-- SETTINGS PROFILE

SELECT 'SYSTEM queries';
SYSTEM RELOAD EMBEDDED DICTIONARIES;
SYSTEM RELOAD DICTIONARIES;
SYSTEM DROP DNS CACHE;
SYSTEM DROP MARK CACHE;
SYSTEM DROP UNCOMPRESSED CACHE;
SYSTEM FLUSH LOGS;
SYSTEM RELOAD CONFIG;
SYSTEM STOP MERGES;
SYSTEM START MERGES;
SYSTEM STOP TTL MERGES;
SYSTEM START TTL MERGES;
SYSTEM STOP MOVES;
SYSTEM START MOVES;
SYSTEM STOP FETCHES;
SYSTEM START FETCHES;
SYSTEM STOP REPLICATED SENDS;
SYSTEM START REPLICATED SENDS;

-- SYSTEM RELOAD DICTIONARY sqllt.dictionary; -- temporary out of order: Code: 210, Connection refused (localhost:9001) (version 21.3.1.1)
-- DROP REPLICA
-- haha, no
-- SYSTEM KILL;
-- SYSTEM SHUTDOWN;

-- Since we don't really care about the actual output, suppress it with `FORMAT Null`.
SELECT 'SHOW queries';

SHOW CREATE TABLE sqllt.table FORMAT Null;
SHOW CREATE DICTIONARY sqllt.dictionary FORMAT Null;
SHOW DATABASES LIKE 'sqllt' FORMAT Null;
SHOW TABLES FROM sqllt FORMAT Null;
SHOW DICTIONARIES FROM sqllt FORMAT Null;
SHOW GRANTS FORMAT Null;
SHOW GRANTS FOR sqllt_user FORMAT Null;
SHOW CREATE USER sqllt_user FORMAT Null;
SHOW CREATE ROLE sqllt_role FORMAT Null;
SHOW CREATE POLICY sqllt_policy FORMAT Null;
SHOW CREATE ROW POLICY sqllt_row_policy FORMAT Null;
SHOW CREATE QUOTA sqllt_quota FORMAT Null;
SHOW CREATE SETTINGS PROFILE sqllt_settings_profile FORMAT Null;

SELECT 'GRANT queries';
GRANT SELECT ON sqllt.table TO sqllt_user;
GRANT DROP ON sqllt.view TO sqllt_user;

SELECT 'REVOKE queries';
REVOKE SELECT ON sqllt.table FROM sqllt_user;
REVOKE DROP ON sqllt.view FROM sqllt_user;

SELECT 'Misc queries';
DESCRIBE TABLE sqllt.table FORMAT Null;

CHECK TABLE sqllt.table FORMAT Null;
DETACH TABLE sqllt.table;
ATTACH TABLE sqllt.table;

RENAME TABLE sqllt.table TO sqllt.table_new;
RENAME TABLE sqllt.table_new TO sqllt.table;
TRUNCATE TABLE sqllt.table;
126
DROP TABLE sqllt.table SYNC;
127

V
Vasily Nemkov 已提交
128
SET log_comment='';
129 130 131 132 133 134 135
---------------------------------------------------------------------------------------------------
-- Now get all logs related to this test
---------------------------------------------------------------------------------------------------

SYSTEM FLUSH LOGS;
SELECT 'ACTUAL LOG CONTENT:';

V
Vasily Nemkov 已提交
136 137 138
-- Try to filter out all possible previous junk events by excluding old log entries,
SELECT query_kind, query FROM system.query_log
WHERE
V
Vasily Nemkov 已提交
139 140 141
    log_comment LIKE '%system.query_log%' AND type == 'QueryStart' AND event_time >= now() - 10
    AND current_database == currentDatabase()
ORDER BY event_time_microseconds;
142 143 144 145 146 147 148 149 150 151 152


-- cleanup
SELECT 'DROP queries and also a cleanup after the test';
DROP DATABASE IF EXISTS sqllt;
DROP USER IF EXISTS sqllt_user;
DROP ROLE IF EXISTS sqllt_role;
DROP POLICY IF EXISTS sqllt_policy ON sqllt.table, sqllt.view, sqllt.dictionary;
DROP ROW POLICY IF EXISTS sqllt_row_policy ON sqllt.table, sqllt.view, sqllt.dictionary;
DROP QUOTA IF EXISTS sqllt_quota;
DROP SETTINGS PROFILE IF EXISTS sqllt_settings_profile;