@neralabs/rerail-pack-sql 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +179 -56
- package/licenses/sqlfluff/UPSTREAM.md +395 -1
- package/pack.json +119 -2
- package/package.json +2 -2
- package/rules/sqlfluff-al04-aliasing-unique-table.json +252 -0
- package/rules/sqlfluff-al08-aliasing-unique-column.json +116 -0
- package/rules/sqlfluff-al09-aliasing-self-alias-column.json +162 -0
- package/rules/sqlfluff-am01-ambiguous-distinct.json +53 -0
- package/rules/sqlfluff-am05-ambiguous-join.json +1 -0
- package/rules/sqlfluff-am09-ambiguous-order-by-limit.json +110 -0
- package/rules/sqlfluff-cv02-convention-coalesce.json +1 -0
- package/rules/sqlfluff-cv04-convention-count-rows.json +52 -0
- package/rules/sqlfluff-cv05-convention-is-null.json +61 -0
- package/rules/sqlfluff-cv08-convention-left-join.json +18 -0
- package/rules/sqlfluff-pg01-postgres-excessive-locks.json +234 -0
- package/rules/sqlfluff-pg02-postgres-not-valid-foreign-key.json +75 -0
- package/rules/sqlfluff-rf04-references-keywords.json +119 -0
- package/rules/sqlfluff-rf05-references-special-chars.json +123 -0
- package/rules/sqlfluff-rf06-references-quoting.json +63 -0
- package/rules/sqlfluff-st01-structure-else-null.json +49 -0
- package/rules/sqlfluff-st02-structure-simple-case.json +405 -0
- package/rules/sqlfluff-st08-structure-distinct.json +168 -0
- package/rules/sqlfluff-st10-structure-constant-expression.json +365 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format": "rerail.policy/v1",
|
|
3
|
+
"id": "sqlfluff-rf04-references-keywords",
|
|
4
|
+
"revision": 2,
|
|
5
|
+
"mode": "steer",
|
|
6
|
+
"description": "Don't use SQL keywords as unquoted table aliases, column aliases or column names; rename them so they can't be misread.",
|
|
7
|
+
"scope": {
|
|
8
|
+
"include": [
|
|
9
|
+
"**/*.sql"
|
|
10
|
+
],
|
|
11
|
+
"exclude": []
|
|
12
|
+
},
|
|
13
|
+
"clauses": [
|
|
14
|
+
{
|
|
15
|
+
"id": "keyword-identifier",
|
|
16
|
+
"forbid": {
|
|
17
|
+
"ast": {
|
|
18
|
+
"language": "sql",
|
|
19
|
+
"rule": {
|
|
20
|
+
"kind": "identifier",
|
|
21
|
+
"regex": "(?i)^(?:ABORT|ABSOLUTE|ACCESS|ACCOUNT|ACCOUNTS|ACTION|ADD|ADMIN|AFTER|AGGREGATE|ALIAS|ALL|ALLOW_CONNECTIONS|ALSO|ALTER|ALWAYS|ANALYSE|ANALYZE|AND|ANY|APPLY|ARRAY|AS|ASC|ASSERTION|ASSIGNMENT|ASYMMETRIC|AT|ATOMIC|ATTACH|ATTRIBUTE|AUDIT|AUTHORIZATION|AUTO_INCREMENT|AVG_ROW_LENGTH|BACKUP|BACKWARD|BEFORE|BEGIN|BERNOULLI|BETWEEN|BIGINT|BIGSERIAL|BINARY|BINDING|BIT|BITVAR|BOOL|BOOLEAN|BOTH|BOX|BPCHAR|BREADTH|BREAK|BROWSE|BUFFERS|BULK|BY|BYPASSRLS|BYTEA|CACHE|CALL|CALLED|CASCADE|CASCADED|CAST|CATALOG|CHAIN|CHANGE|CHAR|CHARACTER|CHARACTERISTICS|CHECK|CHECKED|CHECKPOINT|CHECKSUM|CIDR|CIRCLE|CIRCULARSTRING|CLASS|CLOSE|CLUSTER|CLUSTERED|COALESCE|COLLATE|COLLATION|COLUMN|COLUMNS|COMMENT|COMMENTS|COMMIT|COMMITTED|COMPLETION|COMPOUNDCURVE|COMPRESS|COMPRESSION|COMPUTE|CONFIGURATION|CONFLICT|CONNECT|CONNECTION|CONSTRAINT|CONSTRAINTS|CONTAINSTABLE|CONTENT|CONTINUE|CONVERSION|COPY|CORRELATION|COST|COSTS|CREATE|CREATEDB|CREATEROLE|CREATEUSER|CSV|CUBE|CURRENT|CURRENT_DATE|CURRENT_ROLE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|CURSOR|CURVEPOLYGON|CYCLE|DATA|DATABASE|DATABASES|DATE|DATERANGE|DATETIME|DAY|DAYOFMONTH|DAYOFWEEK|DAYOFYEAR|DAYS|DAY_HOUR|DAY_MICROSECOND|DAY_MINUTE|DAY_SECOND|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFAULTS|DEFERRABLE|DEFERRED|DEFINER|DELAYED|DELAY_KEY_WRITE|DELETE|DELIMITER|DELIMITERS|DENY|DEPENDENCIES|DEPENDS|DEPTH|DESC|DESCRIBE|DESTROY|DESTRUCTOR|DETACH|DETERMINISTIC|DICTIONARY|DISABLE|DISABLE_PAGE_SKIPPING|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DIV|DO|DOCUMENT|DOMAIN|DOUBLE|DROP|DUMMY|DUMP|EACH|ELSE|ELSEIF|EMPTY|ENABLE|ENCLOSED|ENCODING|ENCRYPTED|END|ENUM|ERRLVL|ESCAPE|ESCAPED|EVENT|EXCEPT|EXCLUDE|EXCLUDING|EXCLUSIVE|EXECUTE|EXISTING|EXISTS|EXIT|EXPLAIN|EXPRESSION|EXTENDED|EXTENSION|EXTERNAL|EXTRACT|FALSE|FAMILY|FETCH|FIELDS|FILE|FILLFACTOR|FILTER|FINALIZE|FIRST|FLOAT|FLOAT4|FLOAT8|FLUSH|FOLLOWING|FOR|FORCE|FORCE_NOT_NULL|FORCE_NULL|FORCE_QUOTE|FOREIGN|FORMAT|FORWARD|FREETEXT|FREETEXTTABLE|FREEZE|FROM|FULLTEXT|FUNCTION|FUNCTIONS|FUTURE|GENERATED|GEOGRAPHY|GEOMETRY|GEOMETRYCOLLECTION|GEOMETRYCOLLECTIONM|GEOMETRYCOLLECTIONZ|GEOMETRYCOLLECTIONZM|GLOBAL|GRANT|GRANTED|GRANTS|GREATEST|GROUP|GROUPING|GROUPS|HANDLER|HASH|HAVING|HEADER|HEAP|HIGH_PRIORITY|HOLD|HOLDLOCK|HOST|HOSTS|HOUR|HOUR_MICROSECOND|HOUR_MINUTE|HOUR_SECOND|ICU|IDENTIFIED|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IGNORE|ILIKE|IMMEDIATE|IMMUTABLE|IMPLICIT|IMPORT|IMPORTED|IN|INCLUDE|INCLUDING|INCREMENT|INDEX|INDEXES|INDEX_CLEANUP|INET|INFILE|INFIX|INHERIT|INHERITS|INITIALIZE|INITIALLY|INLINE|INOUT|INPUT|INSENSITIVE|INSERT|INSERT_ID|INSTEAD|INT|INT1|INT2|INT3|INT4|INT4RANGE|INT8|INT8RANGE|INTEGER|INTEGRATION|INTEGRATIONS|INTERSECT|INTERVAL|INTO|INVOKER|IS|ISAM|ISNULL|ISOLATION|IS_SUPERUSER|IS_TEMPLATE|ITERATE|JSON|JSONB|KEY|KEYS|KILL|LABEL|LANCOMPILER|LANGUAGE|LARGE|LAST|LAST_INSERT_ID|LATERAL|LC_COLLATE|LC_CTYPE|LEADING|LEAKPROOF|LEAST|LEAVE|LEFTARG|LESS|LEVEL|LIBC|LIKE|LIMIT|LINE|LINENO|LINES|LINESTRING|LINESTRINGM|LINESTRINGZ|LINESTRINGZM|LIST|LISTEN|LOAD|LOCAL|LOCALE|LOCALTIME|LOCALTIMESTAMP|LOCATION|LOCK|LOCKED|LOCKS|LOGGED|LOGIN|LOGS|LOG_VERBOSITY|LONG|LONGBLOB|LONGTEXT|LOOP|LOW_PRIORITY|LSEG|MACADDR|MACADDR8|MAIN|MANAGE|MAPPING|MASKING|MATCH|MATCHED|MATERIALIZED|MAXEXTENTS|MAXVALUE|MAX_ROWS|MCV|MEDIUMBLOB|MEDIUMINT|MEDIUMTEXT|MERGE|METHOD|MIDDLEINT|MILLISECOND|MINUS|MINUTE|MINUTE_MICROSECOND|MINUTE_SECOND|MINVALUE|MIN_ROWS|ML|MLSLABEL|MODE|MODEL|MODIFY|MODULUS|MONEY|MONITOR|MONTH|MONTHNAME|MOVE|MULTICURVE|MULTILINESTRING|MULTILINESTRINGM|MULTILINESTRINGZ|MULTILINESTRINGZM|MULTIPOINT|MULTIPOINTM|MULTIPOINTZ|MULTIPOINTZM|MULTIPOLYGON|MULTIPOLYGONM|MULTIPOLYGONZ|MULTIPOLYGONZM|MULTISURFACE|MYISAM|NAME|NAMES|NAN|NATIONAL|NCHAR|NDISTINCT|NEW|NEXT|NFC|NFD|NFKC|NFKD|NO|NOAUDIT|NOBYPASSRLS|NOCACHE|NOCHECK|NOCOMPRESS|NOCREATEDB|NOCREATEROLE|NOCREATEUSER|NOCYCLE|NOINHERIT|NOLOGIN|NONCLUSTERED|NONE|NOORDER|NOREPLICATION|NORMALIZE|NORMALIZED|NOSUPERUSER|NOTHING|NOTIFY|NOTNULL|NOWAIT|NO_WRITE_TO_BINLOG|NULLIF|NULLS|NUMERIC|NUMRANGE|OBJECT|OBJECTS|OF|OFF|OFFLINE|OFFSET|OFFSETS|OIDS|OLD|ONLINE|ONLY|ON_ERROR|OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|OPERATE|OPERATION|OPERATOR|OPTIMIZE|OPTION|OPTIONALLY|OPTIONS|OR|ORDINALITY|OTHERS|OUT|OUTFILE|OVER|OVERLAPS|OVERLAY|OVERRIDING|OVERWRITE|OWNED|OWNER|OWNERSHIP|PACK_KEYS|PARALLEL|PARAMETERS|PARSER|PARTIAL|PARTITION|PASSING|PASSWORD|PATH|PCTFREE|PERMISSIVE|PG_LSN|PIPE|PLACING|PLAIN|PLANS|POINT|POINTM|POINTZ|POINTZM|POLICY|POLYGON|POLYGONM|POLYGONZ|POLYGONZM|POLYHEDRALSURFACE|POSITION|POSTFIX|PRECEDING|PRECISION|PREFIX|PREORDER|PREPARE|PREPARED|PRESERVE|PRIMARY|PRINT|PRIOR|PRIVILEGES|PROC|PROCEDURAL|PROCEDURE|PROCEDURES|PROCESS|PROCESSLIST|PROCESS_TOAST|PROGRAM|PROVIDER|PUBLIC|PUBLICATION|PURGE|QUALIFY|QUARTER|QUOTE|RAID0|RAISERROR|RANGE|RAW|READ|READTEXT|REAL|REASSIGN|RECHECK|RECONFIGURE|RECURSIVE|REF|REFERENCES|REFERENCE_USAGE|REFERENCING|REFRESH|REGEXP|REINDEX|REJECT_LIMIT|RELATIVE|RELEASE|RELOAD|REMAINDER|RENAME|REPEAT|REPEATABLE|REPLACE|REPLICA|REPLICATION|REQUIRE|RESET|RESIGNAL|RESOURCE|RESPECT|RESTART|RESTRICT|RESTRICTED|RESTRICTIVE|RETRIEVE|RETURN|RETURNS|REVOKE|RLIKE|ROLE|ROLES|ROLLBACK|ROLLUP|ROUTINE|ROUTINES|ROW|ROWCOUNT|ROWGUIDCOL|ROWID|ROWNUM|ROWS|RULE|SAFE|SAVE|SAVEPOINT|SCALAR|SCHEMA|SCHEMAS|SCROLL|SEARCH|SECOND|SECOND_MICROSECOND|SECURITY|SEPARATOR|SEQUENCE|SEQUENCES|SERIAL|SERIAL2|SERIAL4|SERIAL8|SERIALIZABLE|SERVER|SERVER_ENCODING|SERVER_VERSION|SESSION|SESSION_USER|SET|SETOF|SETS|SETTINGS|SETUSER|SHARE|SHARES|SHOW|SHUTDOWN|SIGNAL|SILENT|SIMILAR|SIMPLE|SKIP|SKIP_LOCKED|SMALLINT|SMALLSERIAL|SNAPSHOT|SOME|SONAME|SOURCE|SPATIAL|SQL|SQLCA|SQL_BIG_RESULT|SQL_BIG_SELECTS|SQL_BIG_TABLES|SQL_CALC_FOUND_ROWS|SQL_LOG_OFF|SQL_LOG_UPDATE|SQL_LOW_PRIORITY_UPDATES|SQL_SELECT_LIMIT|SQL_SMALL_RESULT|SQL_WARNINGS|SSL|STABLE|STAGE|STAGES|STANDALONE|START|STARTING|STARTS|STATEMENT|STATISTICS|STDIN|STDOUT|STOP|STORAGE|STORED|STRAIGHT_JOIN|STREAM|STREAMS|STRICT|STRIP|SUBLIST|SUBSCRIPTION|SUBSTRING|SUCCESSFUL|SUMMARY|SUPERUSER|SUPPORT|SYMMETRIC|SYNONYM|SYSDATE|SYSID|SYSTEM|TABLE|TABLES|TABLESAMPLE|TABLESPACE|TARGET|TASK|TASKS|TEMP|TEMPLATE|TEMPORARY|TERMINATE|TERMINATED|TEXT|TEXTSIZE|THAN|THEN|TIES|TIME|TIMESTAMP|TIMESTAMPTZ|TIMETZ|TIMING|TIN|TINYBLOB|TINYINT|TINYTEXT|TO|TOAST|TOP|TRAILING|TRAN|TRANSACTION|TRANSACTIONS|TRANSFORM|TRANSIENT|TREAT|TRIANGLE|TRIGGER|TRIM|TRUE|TRUNCATE|TRUSTED|TSEQUAL|TSQUERY|TSRANGE|TSTZRANGE|TSVECTOR|TYPE|TYPES|UESCAPE|UID|UNBOUNDED|UNCOMMITTED|UNDO|UNENCRYPTED|UNIQUE|UNKNOWN|UNLISTEN|UNLOCK|UNLOGGED|UNSAFE|UNSIGNED|UNTIL|UPDATE|UPDATETEXT|USAGE|USE|USER|USERS|USE_ANY_ROLE|UTC_DATE|UTC_TIME|UTC_TIMESTAMP|UUID|VACUUM|VALID|VALIDATE|VALIDATOR|VALUE|VALUES|VARCHAR|VARCHAR2|VARCHARACTER|VARIABLE|VARIABLES|VARYING|VECTOR|VERBOSE|VERSION|VIEW|VIEWS|VIRTUAL|VOLATILE|WAITFOR|WAL|WAREHOUSE|WAREHOUSES|WEEK|WEEKDAY|WHEN|WHERE|WHILE|WHITESPACE|WINDOW|WITH|WITHIN|WITHOUT|WORK|WRAPPER|WRITE|WRITETEXT|X509|XML|XMLATTRIBUTES|XMLCONCAT|XMLELEMENT|XMLEXISTS|XMLFOREST|XMLNAMESPACES|XMLPARSE|XMLPI|XMLROOT|XMLSERIALIZE|XMLTABLE|XOR|YAML|YEAR|YEAR_MONTH|YES|ZEROFILL|ZONE)$",
|
|
22
|
+
"any": [
|
|
23
|
+
{
|
|
24
|
+
"inside": {
|
|
25
|
+
"field": "alias",
|
|
26
|
+
"any": [
|
|
27
|
+
{
|
|
28
|
+
"kind": "term"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"kind": "relation"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"kind": "from"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"kind": "statement"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"kind": "insert"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"kind": "cross_join"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"kind": "lateral_cross_join"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"kind": "lateral_join"
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"inside": {
|
|
56
|
+
"field": "name",
|
|
57
|
+
"kind": "column_definition",
|
|
58
|
+
"any": [
|
|
59
|
+
{
|
|
60
|
+
"has": {
|
|
61
|
+
"field": "type",
|
|
62
|
+
"regex": "(?s)."
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"has": {
|
|
67
|
+
"field": "custom_type",
|
|
68
|
+
"regex": "(?s)."
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
"inside": {
|
|
73
|
+
"kind": "column_definitions",
|
|
74
|
+
"stopBy": "neighbor",
|
|
75
|
+
"inside": {
|
|
76
|
+
"kind": "create_table",
|
|
77
|
+
"stopBy": "neighbor"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"not": {
|
|
84
|
+
"any": [
|
|
85
|
+
{
|
|
86
|
+
"precedes": {
|
|
87
|
+
"kind": "ERROR"
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"inside": {
|
|
92
|
+
"kind": "ERROR",
|
|
93
|
+
"stopBy": "end"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
]
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
"violation": {
|
|
102
|
+
"anchor": "witness.span",
|
|
103
|
+
"code": "RF04",
|
|
104
|
+
"message": "Keywords should not be used as identifiers.",
|
|
105
|
+
"suppress": {
|
|
106
|
+
"sqlfluff": {
|
|
107
|
+
"rules": [
|
|
108
|
+
"RF04",
|
|
109
|
+
"L029",
|
|
110
|
+
"all",
|
|
111
|
+
"references",
|
|
112
|
+
"references.keywords"
|
|
113
|
+
]
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
]
|
|
119
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format": "rerail.policy/v1",
|
|
3
|
+
"id": "sqlfluff-rf05-references-special-chars",
|
|
4
|
+
"revision": 1,
|
|
5
|
+
"mode": "steer",
|
|
6
|
+
"description": "Use only letters, digits and underscores in SQL identifiers, quoted or not; other characters make names hard to use.",
|
|
7
|
+
"scope": {
|
|
8
|
+
"include": [
|
|
9
|
+
"**/*.sql"
|
|
10
|
+
],
|
|
11
|
+
"exclude": []
|
|
12
|
+
},
|
|
13
|
+
"clauses": [
|
|
14
|
+
{
|
|
15
|
+
"id": "special-character-in-identifier",
|
|
16
|
+
"forbid": {
|
|
17
|
+
"ast": {
|
|
18
|
+
"language": "sql",
|
|
19
|
+
"rule": {
|
|
20
|
+
"regex": "(?s)^(?:[^\\\"`\\[][^\\\"`\\[]*[^\\p{L}\\p{N}_\\\"`\\[][^\\\"`\\[]*|\\\".*[^\\p{L}\\p{N}_].*\\\"|`.*[^\\p{L}\\p{N}_].*`|\\[.*[^\\p{L}\\p{N}_].*\\])$",
|
|
21
|
+
"any": [
|
|
22
|
+
{
|
|
23
|
+
"kind": "identifier"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"kind": "literal",
|
|
27
|
+
"inside": {
|
|
28
|
+
"kind": "column_definition",
|
|
29
|
+
"field": "name"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"not": {
|
|
34
|
+
"any": [
|
|
35
|
+
{
|
|
36
|
+
"inside": {
|
|
37
|
+
"stopBy": "neighbor",
|
|
38
|
+
"any": [
|
|
39
|
+
{
|
|
40
|
+
"kind": "create_extension"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"kind": "drop_extension"
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"kind": "identifier",
|
|
50
|
+
"inside": {
|
|
51
|
+
"kind": "function_argument",
|
|
52
|
+
"stopBy": "neighbor"
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"all": [
|
|
57
|
+
{
|
|
58
|
+
"not": {
|
|
59
|
+
"inside": {
|
|
60
|
+
"field": "alias",
|
|
61
|
+
"stopBy": "neighbor",
|
|
62
|
+
"regex": "(?s)."
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"inside": {
|
|
68
|
+
"stopBy": {
|
|
69
|
+
"all": [
|
|
70
|
+
{
|
|
71
|
+
"kind": "term"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"inside": {
|
|
75
|
+
"kind": "select_expression",
|
|
76
|
+
"stopBy": "neighbor"
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
"all": [
|
|
82
|
+
{
|
|
83
|
+
"kind": "term"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"inside": {
|
|
87
|
+
"kind": "select_expression",
|
|
88
|
+
"stopBy": "neighbor"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
],
|
|
92
|
+
"has": {
|
|
93
|
+
"field": "alias",
|
|
94
|
+
"regex": "(?s)."
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"violation": {
|
|
106
|
+
"anchor": "witness.start",
|
|
107
|
+
"code": "RF05",
|
|
108
|
+
"message": "Special characters should not be used in identifiers.",
|
|
109
|
+
"suppress": {
|
|
110
|
+
"sqlfluff": {
|
|
111
|
+
"rules": [
|
|
112
|
+
"RF05",
|
|
113
|
+
"L057",
|
|
114
|
+
"all",
|
|
115
|
+
"references",
|
|
116
|
+
"references.special_chars"
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format": "rerail.policy/v1",
|
|
3
|
+
"id": "sqlfluff-rf06-references-quoting",
|
|
4
|
+
"revision": 1,
|
|
5
|
+
"mode": "steer",
|
|
6
|
+
"description": "Remove double quotes from SQL identifiers that mean the same unquoted; PostgreSQL folds unquoted names to lower case anyway.",
|
|
7
|
+
"scope": {
|
|
8
|
+
"include": [
|
|
9
|
+
"**/*.sql"
|
|
10
|
+
],
|
|
11
|
+
"exclude": []
|
|
12
|
+
},
|
|
13
|
+
"clauses": [
|
|
14
|
+
{
|
|
15
|
+
"id": "unnecessary-ansi-quoted-identifier",
|
|
16
|
+
"forbid": {
|
|
17
|
+
"ast": {
|
|
18
|
+
"language": "sql",
|
|
19
|
+
"rule": {
|
|
20
|
+
"regex": "^\"[\\p{L}_--\\p{Lu}--\\p{Lt}][\\p{L}\\p{N}_$--\\p{Lu}--\\p{Lt}]*\"$",
|
|
21
|
+
"any": [
|
|
22
|
+
{
|
|
23
|
+
"kind": "identifier"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"kind": "literal"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"not": {
|
|
30
|
+
"any": [
|
|
31
|
+
{
|
|
32
|
+
"regex": "(?i)^\"(?:ALL|ANALYSE|ANALYZE|AND|ANY|ARRAY|AS|ASC|ASYMMETRIC|AUTHORIZATION|BINARY|BOTH|CASE|CAST|CHECK|COLLATE|COLUMN|COMMUTATOR|CONCURRENTLY|CONNECT|CONSTRAINT|CREATE|CROSS|CURRENT_CATALOG|CURRENT_DATE|CURRENT_ROLE|CURRENT_SCHEMA|CURRENT_TIME|CURRENT_TIMESTAMP|DEFAULT|DEFERRABLE|DESC|DISTINCT|DO|ELSE|END|EXCEPT|FALSE|FETCH|FOR|FOREIGN|FREEZE|FROM|FULL|GRANT|GROUP|HASHES|HAVING|ILIKE|IN|INITIALLY|INNER|INTERSECT|INTO|IS|ISNULL|JOIN|LATERAL|LEADING|LEFT|LIKE|LIMIT|LOCALTIME|LOCALTIMESTAMP|MERGES|NATURAL|NEGATOR|NOT|NOTNULL|NULL|OFFSET|ON|ONLY|OR|ORDER|OUTER|OVERLAPS|PLACING|PRIMARY|REFERENCES|RETURNING|RIGHT|RIGHTARG|SELECT|SESSION_USER|SIMILAR|SOME|SYMMETRIC|TABLESAMPLE|THEN|TO|TRAILING|TRUE|UNION|UNIQUE|USING|VARIADIC|VERBOSE|WHEN|WHERE|WINDOW|WITH)\"$"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"inside": {
|
|
36
|
+
"kind": "function_body",
|
|
37
|
+
"stopBy": "end"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"violation": {
|
|
46
|
+
"anchor": "witness.start",
|
|
47
|
+
"code": "RF06",
|
|
48
|
+
"message": "Unnecessary quoted identifier; use the unquoted form.",
|
|
49
|
+
"suppress": {
|
|
50
|
+
"sqlfluff": {
|
|
51
|
+
"rules": [
|
|
52
|
+
"RF06",
|
|
53
|
+
"L059",
|
|
54
|
+
"all",
|
|
55
|
+
"references",
|
|
56
|
+
"references.quoting"
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format": "rerail.policy/v1",
|
|
3
|
+
"id": "sqlfluff-st01-structure-else-null",
|
|
4
|
+
"revision": 1,
|
|
5
|
+
"mode": "steer",
|
|
6
|
+
"description": "Remove ELSE NULL from SQL CASE expressions; CASE already returns NULL when no branch matches.",
|
|
7
|
+
"scope": {
|
|
8
|
+
"include": [
|
|
9
|
+
"**/*.sql"
|
|
10
|
+
],
|
|
11
|
+
"exclude": []
|
|
12
|
+
},
|
|
13
|
+
"clauses": [
|
|
14
|
+
{
|
|
15
|
+
"id": "redundant-else-null",
|
|
16
|
+
"forbid": {
|
|
17
|
+
"ast": {
|
|
18
|
+
"language": "sql",
|
|
19
|
+
"rule": {
|
|
20
|
+
"kind": "case",
|
|
21
|
+
"has": {
|
|
22
|
+
"kind": "keyword_else",
|
|
23
|
+
"precedes": {
|
|
24
|
+
"kind": "literal",
|
|
25
|
+
"regex": "^(?i:null)$"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"violation": {
|
|
32
|
+
"anchor": "witness.start",
|
|
33
|
+
"code": "ST01",
|
|
34
|
+
"message": "Do not specify ELSE NULL in a CASE WHEN statement.",
|
|
35
|
+
"suppress": {
|
|
36
|
+
"sqlfluff": {
|
|
37
|
+
"rules": [
|
|
38
|
+
"ST01",
|
|
39
|
+
"L035",
|
|
40
|
+
"all",
|
|
41
|
+
"structure",
|
|
42
|
+
"structure.else_null"
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|