From 194262c0f9a727e259aa84b0caf2df05897780e7 Mon Sep 17 00:00:00 2001 From: Kevin Longe <273747162+kvlonge@users.noreply.github.com> Date: Sat, 31 Oct 2026 12:03:07 +0000 Subject: [PATCH] feat!: name built-in Rules SQLCLEAN and own the host contract Built-in Rule codes are SQLCLEANnnn instead of SQCnnn, custom Rule codes start with XSQLCLEAN, and the parse error is SQLCLEAN999. The embedding API no longer carries SQLBuild names. Hosts write the SQLClean placeholder prefixes exported from constants, describe a test or macro wrapper with one fixture_harness request object instead of allows_ceremonial_select and allows_empty_fixture_star, and derive relation_keys themselves: DeclaredRelation and declared_relation_keys are removed. BREAKING CHANGE: SQC and XSQC codes are now SQLCLEAN and XSQLCLEAN, and the lint request replaces the two harness flags with fixture_harness. Co-authored-by: Kevin Longe --- .github/demos/check-fix.gif | Bin 369493 -> 374426 bytes README.md | 4 +- benchmarks/linters/README.md | 2 +- benchmarks/linters/bench.sh | 2 +- benchmarks/linters/rules/layers.py | 6 +- benchmarks/linters/summarize.py | 2 +- crates/sqlclean-cli/skill/SKILL.md | 10 +- .../skill/references/docs/benchmarks.md | 2 +- .../skill/references/docs/cli/check.md | 18 +- .../skill/references/docs/cli/fix.md | 6 +- .../skill/references/docs/cli/rules.md | 28 +- .../skill/references/docs/configuration.md | 32 +- .../docs/custom-rules/fixes-and-options.md | 22 +- .../references/docs/custom-rules/overview.md | 26 +- .../docs/custom-rules/statement-facts.md | 2 +- .../references/docs/custom-rules/testing.md | 6 +- .../skill/references/docs/embedding.md | 55 +- .../skill/references/docs/formatting.md | 2 +- .../skill/references/docs/index.md | 4 +- .../skill/references/docs/quickstart.md | 28 +- .../skill/references/docs/rules/overview.md | 88 ++-- .../skill/references/docs/rules/reference.md | 190 +++---- .../src/checking/_helpers/orchestration.rs | 2 +- crates/sqlclean-cli/src/checking/constants.rs | 20 +- .../src/config/tests/test_load_config.rs | 6 +- crates/sqlclean/src/constants.rs | 14 +- .../src/sql_lint/_helpers/additional.rs | 40 +- .../sqlclean/src/sql_lint/_helpers/engine.rs | 125 ++--- .../src/sql_lint/_helpers/formatter.rs | 4 +- .../src/sql_lint/_helpers/formatter_syntax.rs | 8 +- .../src/sql_lint/_helpers/printed_layout.rs | 5 +- crates/sqlclean/src/sql_lint/constants.rs | 4 +- .../src/sql_lint/main/cross_join_subject.rs | 2 +- crates/sqlclean/src/sql_lint/models.rs | 26 +- crates/sqlclean/src/sql_lint/tests/helpers.rs | 17 +- .../src/sql_lint/tests/test_cross_joins.rs | 10 +- .../sql_lint/tests/test_empty_fixture_lint.rs | 15 +- .../src/sql_lint/tests/test_layout_rules.rs | 8 +- .../src/sql_lint/tests/test_line_wrap.rs | 6 +- .../sql_lint/tests/test_lint_exemptions.rs | 4 +- .../src/sql_lint/tests/test_sql_lint.rs | 490 +++++++++--------- .../sqlclean/src/sql_lint/tests/test_types.rs | 2 +- .../sql_lint/tests/test_unused_table_alias.rs | 70 +-- .../src/sql_quality/_helpers/cte_columns.rs | 8 +- .../src/sql_quality/_helpers/declared_keys.rs | 50 -- .../src/sql_quality/_helpers/json_parses.rs | 2 +- .../src/sql_quality/_helpers/literals.rs | 2 +- .../src/sql_quality/_helpers/ranking.rs | 2 +- .../sql_quality/_helpers/removal_safety.rs | 2 +- .../src/sql_quality/_helpers/safety.rs | 4 +- crates/sqlclean/src/sql_quality/constants.rs | 46 +- .../main/declared_relation_keys.rs | 38 -- crates/sqlclean/src/sql_quality/main/mod.rs | 1 - crates/sqlclean/src/sql_quality/mod.rs | 2 - crates/sqlclean/src/sql_quality/models.rs | 27 - .../src/sql_quality/tests/test_json_parses.rs | 2 +- .../sql_quality/tests/test_quality_rules.rs | 86 +-- .../sql_quality/tests/test_quality_scale.rs | 2 +- .../sql_quality/tests/test_safety_rules.rs | 46 +- fensu.toml | 5 - src/sqlclean/rules/_helpers/definition.py | 4 +- src/sqlclean/rules/constants.py | 2 +- .../sqlclean/hosting/test_sqlclean_command.py | 72 ++- .../src/sqlclean/rule_testing/helpers.py | 10 +- .../sqlclean/rules/test_rule_definition.py | 16 +- website/public/index.html | 18 +- website/recordings/prepare.sh | 2 +- website/src/content/docs/docs/benchmarks.mdx | 2 +- website/src/content/docs/docs/cli/check.mdx | 18 +- website/src/content/docs/docs/cli/fix.mdx | 6 +- website/src/content/docs/docs/cli/rules.mdx | 28 +- .../src/content/docs/docs/configuration.mdx | 32 +- .../docs/custom-rules/fixes-and-options.mdx | 22 +- .../docs/docs/custom-rules/overview.mdx | 26 +- .../docs/custom-rules/statement-facts.mdx | 2 +- .../docs/docs/custom-rules/testing.mdx | 6 +- website/src/content/docs/docs/embedding.mdx | 54 +- website/src/content/docs/docs/formatting.mdx | 2 +- website/src/content/docs/docs/index.mdx | 4 +- website/src/content/docs/docs/quickstart.mdx | 28 +- .../src/content/docs/docs/rules/overview.mdx | 86 +-- .../src/content/docs/docs/rules/reference.mdx | 174 +++---- 82 files changed, 1168 insertions(+), 1184 deletions(-) delete mode 100644 crates/sqlclean/src/sql_quality/_helpers/declared_keys.rs delete mode 100644 crates/sqlclean/src/sql_quality/main/declared_relation_keys.rs diff --git a/.github/demos/check-fix.gif b/.github/demos/check-fix.gif index 1cfa45a9c3589e4eb8198dcdbbde5fb74fd24a9d..c3ce0cce208be2795b9f62d17e845f84e03d41e2 100644 GIT binary patch literal 374426 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

##MSyxip|@ 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%0Dnb+$}#pmFT!Az0kZo+ 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

k4@D{{l$||r4M{C4Y!KP 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%0Dd(OPw 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�RMY9L6)c6ZYywz+$$yoRY|p8aiK(e$zNKnfcusHa4{U#`T@) zP8m%qye#I#9Po!@zqRRPx&rYRHD~Z&I8IwFkpFSI{HvzY|7Z6jgqzJ_LyGb8ziO(U zgUghXE+HO2)tUdvI{2W&O*i@MW}=w+Bc#7{Pk0qj?iPEsc+r;ER46s>vk-UdvEQy;{rrhLZb6iWmV$mfThfAype5aGtJ3p03KYrkLEPvcKM6@r&)lu}=bvqF5(Bf1`OyLFaMLBkN33oS6cRTpcJ=N4zYB0ya>PSuA5)xXX2T7J;TZDyw$>|>$<>5v}tAgic6t@FCU0sGo#Us zFAv(%nTnO%IJNvF6>{{hch+cbD*ouBhIaxIr`cT0-H)Plw_DHWcQD{+WA>(+KPZkL zZ#!1u>_1)?6kpd?`!95Aj|S!o><=j32Hx1UGt}Pdx-49IV{Yz$NGJPgQ>7gGK|2}M zrb^6zGZ_^)du|x3{9JcaOD7jv1-I7s9VACLt?O&m_64Lx{ln<9$F;QJmbYVlXHVSy zg=TW6%KTizy`x%~-thw)?X4=P(6>6`D=-6kc;=L(R7BOBH51ylUiW#&7xCVDVz`Q>G< zZwMJu^Weay_pNSETlI{LxF8)ywIeW2s9tK+@UbQgsi~=B5!`L4lmuKfO2LmU6}BD3 zUbNu-qZ4Dz2I<%%rCXL=How*T{sth+6}nI161C~>T!fJJaHElqq0Zb{2Jd;2(SnmN zLeBOy*_PuOM(4N(dyYV>@t>EHUuuPmv#YG82Pmt%di_t`stwXJxy8@+y`wF_?;flA z+|k&Wb88ykT5P1_u(T)&t!JM5`IhI>*|>;)my1?kAFNwC19N?r#VmH(MZEX?{HPqp z^}5YTM(ZsQX3i|#+%d7wCu?D}t}82SE~3Y`hbG5Ac-7{?cqn(=7=d=3EeWBFsyeZT zx%o{4=CSK)x8aR`Azo}d%YpS89ZneU(y=HV-|O+tI_(E*K{bd8 z1=|~2Yh|Rd2<*~PHGVEFaqklRxOBy2JI0fT;Bq_lR&p6;6Evy$9!jQtK&|N$kvq?> z)ARyMO5L>?uAA3xIW{X<@L*CWhDBeY=F2=DwDlyuPlN<2C03hTde--L=$TH2Ydt~s z#^0(V3{^5EQ4ZMrtE8g1V!MJUHJpB~!>miyZIi=mGi1?CyU0?HWruKUV(2TXC{ptB z3>+7i1X(JFd#=hTPMNLKHwK1`sN+S6y$t+UEz`V#gH8YwcO3{jUSQedD85wNnGbe0`mzH#?sCXww;HvIbb_OV)}THO}jbM4JT+ zA7}ku*he-kId)-VfzB3Z&x#F#s*f`%Q9iww%L|6Zl{h%IA%foEH(a;Xr;&TCAG3-g zws#evsZ^K1Z9KSxRV^y{cZlKoL9K7-c_gfl9>0kv<*v&Mbe|O@$ndL$!vJO}A7U_e z`JOcF!6`qgTz_n>$RA&JJVQI9jNO3ST-9k_LWpFpoQADQIcoI;>^4M0A@Os3TfO?W z9_rOZ*={}&b4=@22S#E#-{Kh?rzO;Wl5X$}XPMUOn3`3B^bj)5_QsPW6fMJYJmYb*nd9JGs z5`ItZ+22wZ$F;Q<0UrwTca-AoNTyHtBA7Ste^GSj0ZHWVAHZjZ0fy7@#v43ROAU_< zuNuJ2$_&j6%L?bzKxt*GrFyX;sO&C1Gcscl=g zZ<{}U|L~XmgUrms=XsvjTb)-%Vq}ZWynb-ABQApuRL}IwxA;+S4*49lDJU&zm!{!8 zE{OyN2zU+|1OY9wJm%slYx;DWa)*tzFQxm}$N+mn|&^dFm?r%TlSZ}<& zr?*LhIaou;Ob&`vY!s2~v)(icuVIG3>gOR)32+|1xy8VIC4sA#d{?=xVon?I*>K|=Ky@DoMIl1uy{39Q`JrsfJ}1oa581W& zPd}|$liCIn5l6#ZWMzeu{5!rzro`_5&w&B7d21}?XM?}rUi$6Ir~kb^7sw~j@~8Oz z7w4`V{tAMNbDz^k$G=j+TyRapVgu_DpUglA-P(<9^kwEa4xt~C9iUmA;;K&N@qa-= zS_auQT^XUbEB6)?j612?BS&j=6^Mug=a?8b;3V_aPYi1QtZiw zX=zqJN1IA8+XPX}`<&@q#Q-@NJ#ZQtnL9;rmn>4`w2-dLYv2UR$&Zfz5%f&+>U+WS z8d0vob)a8NN#T+UWMaDG!TmvBM^0fK17U+*lVX$ zJ>E5a+pmrP$vCg{>Idoi`by)FeKVfQSN{9?jJq1>EUpP>I$m5a>4F^%)B&8;CPTKN z%pN<43+7*~*~q#Jml`QGdiD_urPM<99|C&y><$@1aP#V?PJeKoWoP%ET>CCW;K-Ge ze@59a3`{L|`l}=CH!IK%yU2>Oju?_jAb4KSIyp07x|}BHV$|91M#TJE0gNXS_G1e} zX&^DSgGI89Ou%uH0eNj?kLuUFwX#q1CkGkfP9tjwWz=!mTEimyxT?)UySrUkQSA5^ zOtSC)<<3MW1Eg;RXjOI1@gp^n_&mz{8a@F<0wi@8w5eGaHm+aCM|BP-q4mveJ{ zPp50HfnlmtTIah^I2Uc#q3zYRq;0i_#vFbaL4O#l{jtCHRIy{HxfU+3I~Ia^ z;p9FWEitIJ8>u_fRYz9To#xbCHKR9*(OX^U$04v!u;rd0;9^MKMJYN-PU6Sb5A?eQ zSztoW=)xLaN*fN@`vk2GzxOvRIteA|OFx8cjR!>Us<$?Pyw6=*H`Z+ZI<^(?&_i*0 zI7h!KqmHs$zuJ_>g5%{Y&)nl4Ijj!} zb(*l2{G*Y1*T_)GNN=hscL1v0$+e7I=yns*Lq3>Bvq)cofYd+q+m&3}0M3|Q3GwY> zpp||=#u$(@=2=0QzpT^Bcx++*D6<<{k*J(7z1gcfiLR1)kpxZKwWz+3pSq3uE0`=1~l?8^88MyJ{nAKL9`|09dGl7_z3Oxc)pN z^$kuHE(aIbXjg1Zi;VTBg*F}Ae-Vdg8JUMAPzj&a2mm^QJ%ENR8e+Y}X$!j!O#ER% zypd*=P=h;A(q}5A*6=Mr;#tU7C9F;^ZL^IwjI|DLW^jIJ4U$tH*jl&h+2`a)ovpo2 zh7{;4f^1onJ~x-TwrOppr1z3P9l@f1DQ^KpxX$p#K#jz}c8t9Nh0Fh@4A^MXxB!8* zdt7WyT|@(9$ZH9Wfs>mdkOXq{ehp}GzSv!E-vda&a!YBdp36pEzA!FT6O`omQuj8 zQ9szIkrHUSg#OULx@TlG670h$3>ug{dU&pkWt2dxPTr_^##A_JSNf$cxL~x^m~4 z=aU)A^B#PVg9>>UvOR3vIaz)|{PR!-vrPV^AT>+aONk#>CtR3PE-XZ;qp276 z{OT0U-?sOE7Ytq(+Y&CG&45sBF5LirmwHk6*>~2t2GjNnm8aoGF5|e7Rw{4o{Ps{B zPD!)rP;i%wAV}I5nvMO-X$QUhs*{>A_~wY>C7JPzu@5|D=)6Huz&aZ zdAtjpY^3hA(6l%iHD08?M_SQMCJDXGsQT|D#IWx_T4;@Y>Lgo$8%{l-r}uMNo%-X3 z;%}-5WRHxtNe?>`>pZL!nE5m1%NF4W+Ef0NehZ_3djT@he~~d?11v()8!!`Gqh~%a zFqfa2#X~`zh0z1B^Pe-W1BQKjk%tE6b;*w7^4W?1QtY+YyJ~2%40$JGEVq$g{mpQy zL4|y{RL^cS!eTy5%Y>3qRzHU1S}9jC_BvTqyp6PAT+jT;MouK8pF09qTgmx0+K`Oy z(6_!Qmni_Vqi@j5_Dt{+cfi0DUh3c{I+}k$Wd?7w{S0WrBfjlgvD>!2g z+87)FF;HOOI_Vdjx!~aS70<2@bo@UH+#}bl9HqWBAl8=)mdV+hv7e4#rT=NKbh?dq z_{;_T(>xTuBHJ744n<=WEtjSzXt!|Yd|SGQ@w%Y%=Gy92Rtw|GL%#|ud#B_UN~XNg z-!f-azq6g)e-5&<;|sCdFY9lA${;EAOkobwj(c8}kaKeGT(7^=)*Sx?U^4jrlPuIx z0l3o!Ey$BJ@Pw7UWZZTu-ohMW-o4bai>U`8_tX7~{sVeF`w*9$ZlgZMnUB{&NdV)f1POA1 zhjGRN+3tr?A@$g_>{P)1F%k*1)$Dn0AV9#{r+ULo#Y9!c!6z^NF# zcUHgiE-+2b7(khqB&?efDmWVw8kz5L+KEfx3CqqO0md}D2`odZ4_z{3%FZ|I<}=l+~-q|r=v#D(FnZQ zo(@U+!oLnnd|zZvdy%#DMfUNweV3jtY>;pP=zho+=3g&P{K)GQJc2;T(>mGnRAPi_ zQGs#$;{91oX_U(JS6Pc8d(vm+G&>))*gOm-;p76NDDiJ7Q$oocw?R85kP8WU*fy}* z#@@`oR=!^nWLfg%9J^#Q%)}Tr3;UIXJs^*ZafPOGY4N?n=yddK&YAT(CZMS3HUDxBnKrQa;2;zs(gfwlZX@?i`6B7oFMWb08- zh%){}St(#(9{a{K6l-@jl*?@An!!ON==!}2JH!b1T=EuK+-#fp(W{0@!iQ^nmqUx8H0&KKDY>0pl97Y|!1Hk>C98RI^wE*cHpQ*+eY5*}=sn_}cSc=KgFUYrid$_^n z{YA`s<1%|muQ5GTH`0Er^ZuFh*UpQNP6})fvG596^Qrl!=Rs-b9ixu*l9t z-5tH-mE1{RKDJ9TDAL4tZtGFMnjg1(W;(yOIpcXsgHO`;ut(-_YGcsc{mHvCU(DVa zzT{`M$M(X_tKQ!JE%Be*x9gB&13nW^Q=DQ;WlymH_|sqO4)y*5o*D>Wwero9ti{)Nj)VrYEKSFjOx?-J zOnX{e7xv6}y7K++PuBA92iMEr=I*%df*y(<&Nm%ir>x-TbyKp=DcDNv2`$KOp2`D! z7BwUOHJpLxI`ZO&9{#P)7r853eL~KJCp*pzJelk~FFEpxMy{f0(WOitZ}6FLn3<&8 ze7K(DDku9UHGf{A$m%nZv~SwGx|{QwyV@>2-Ko3ki8$pC)>dU^tO+ljmOBEzZ`a*b zCYi6#1F|26zB^obGTCsl$snlM*G??bSfu53qOH>3 zz?m({d|R;{VLK@l2llqUs7VgcOkMiTt3&6PK9qJg@#u>b)cV^Tec?Xg*K%B6AuzS7 zS!b}TobdFyMRlyM->~fCtG&A2*E~xaBq#Qlw?A5@TA+iZeeeC%&i?x0D0ff&us1fr zx^uD1qEz#uva?r4)J`HDR=cV(!;mZOKkDD=bTcH_CE^cF{K}(84sRGAn6=h;X6B}G zTAr?`anK){)Rc3$-Z7?YUX#=J9qB{riTf8EbgqyOd(X_odAg-nL2>x9zZMj$up1`} z5e|P$Gub^JICyVzs?MbKYLx$T06DHvztYIegIZ3eb?9wd(&vDE^Qv)$=CrlCb>*XF zHAz*E7hLj89{l{r=mCnL{F;6fB3HM~k-ksa9nD4B{$LH9>%X)mg#+!WNGtE%wN|=0 zfK&cd@}#vUw=~cDl`!jlfCDo<%OJbZ{Dt% zv$6VhM84y>)S3umYyu_LqHrja(N39|-ZC}RDWBA4Ns6h5^2 zrz2bbxpZ)5CjVMoW7&-I-c))j|C-ZSy=dC==LkC|b?Q!B|L2Dr0gnW;W@q;`o+trt zM>Ss86gFriS|$&EP=`*xo1eUY;C_3ZiD z#vMPk2Tfk?k+$__X28#d=7=r3Z%AME?Y^Tfia8WFcV+gyJ&(qFi(=1Sn7g{_-rnEg z6@n{q=@mQgwG4g4Dff>mMnhrvEv)dHX8@U<+xK&&rVUXBg=0t{{3UQ(z3LV+y{3b`d0O!^ZZYkNAkL;s?P8&})$g2Z#|CGWce`8Hq;&Zm6K!~8Ntm)O; zVuJ~j-zY)CQjQsrD<$czRZ5}S-=(W~X3z(+LZUy&X(7mQ@F_&^;sQl zEO#8|_BuMuPh-L+=VUmgQK@Ly(YgHZSEx3xE*J-n(RroZJMjxIT%8iI_Uv2H$fCx} zZ|z{;_!GIG1u(NxuPlosx@Kna-fFOy$$dRgr&Q z)L>K=Mz}N+@PzHC;q2+NjQ0Q~vkr8~EhKwMF=lOf9WR6cea%Pu3cWza8E4qpLco06 zZCar<>94e7D}{v$nx1>%D7l^5@nbHEWd@XQ#w*q%(hob=X9TCd_PJ3my^+=Cqrru= zFeAn8hTm@D}7eR?F&ZAH|320q4CD<^?h_fdH9+O&; zOslT2u)t%d&Lm15H!@^QlgnKqCDLfy>QW})_;*3VI4NaG>D8z%eFEi=UC86-VR5tH(+a$WBua!k=eQ$#p|s7_($O-aJicBtUPqIR)EU;r3({5i?enxuhW-ARPOoJ-m^3J2)Q|KAX{hL|<-CAua`zYS5ag z-@m6#mESrb4ADmHH})W32E7l2Jed*3V`B*BFd$XAcfqAxC0DO0;sU|;KA=&{>Cu+q zHTk-OhIh4#fBZ``ubA}DTODcx7wNUp+;c66|fAao?7g{N!6|# zgErio{B3E%8xkHZp=5B>e;nj_q3{>ZWDRG!cCFwafx;_9HQPv@;6y(6+;eREFFvPs zuCuC-W0PlbsY2WIHK`;p5F>4**nibmNGTXsJ;fUyx7WIVBNvOhz=E~U_feociy#ZEA)2-fhSaJSDCfO*;ihDqg;h+y|4(T9QW4E zh>%g|NrFKOd3{KuT@R(m0frF(I^b%#YC|&U!=cEkm2^~*J_TvDqu)Q!(ez@II9Cdi9I{K z%|zgN=YG2l2`A{`H3&7h3;76XEBWLEsd`lhB}(GqEhQxx;nf_9$VNK#>%=#U0li97 zO=$a0UGo&EkxH>pPZo6PID~c;1}DhK#ZvQFADD}f69p@Sg;67yY7>h0scm?WoLpAiktZj8Fn27IQ>%2;Y5}zx z2}Sto>JUxbbwFgODLi_qU?u3wftUB&rE1EOE~T0a3UEsKNa`GY&2+hggG{r+db@Ot zJhd6snDNMd@){eZ3R8#Dz>7!i|BISpz1kZA=_tIuSmlnA%Z-9177EmbM0b(PY}&GF zKRzxlF>AdE1eKG$9#G268ROQF2`(K5}#g_#=wjA)voN9tlm4T=p=q%tuViqvTnkb3>22Mn2k{QTMEl`ElYS4bsn& z?AGY($N!w&|J{^h>Id27FZvt)?%zs&tap99E$DIMl*ij=JZ@U>c*n8B(v~0bo5`-+ zAElL#UGSW5j^dMhdKnHXEl(w8b8W&dq$dmx*pCB#-4$5Zk+%my61f)uS zqV(fdr^{e7uqPZm{$I|%xrFDGMN$nrfw^PtVYUdhdag68(+ zYDd7S)sTDtvpX+>?mc)mZ}t-VdA1v-m|~#L!QyZIfhWm#cPwDt3qSm;Cg{PECF2X? z6|T+7DTs3KzrQ_C8W?!-TZ6ehK8AeoCh+^J0dJJNUY16zJM1=M*VZ(vB-(sJE90cN z$e>lannM0Sn64(fBlqEw-)_!bBApoYV#WkbzcQvp(YIvapQPXZ+p_HCt-wG&9AOTA za#mH&QJ-JV`i*Q|E}Ag>ce|71Rvt<+Ypjea>-Y=Z%YBMS6i(Z*^wBMQzoljZH+po* z!3NWe92*pF2as*#<2g`qYK^>DwfDNR3ez~>Zog6jkfr$V&vUn0fFBnCh@5vr0z5ic zPmw1*+6O$CkJBtqU5atASvgP++z;68CI?w#d1M3bY;JeO0jlxIxE*()jpRrxdVhQX zJos-GlLH2Pl{DZ0+1>!b0hFhpN$t%LJRYt2SuogSZhwAp5wpuf&jp#tbDHi^X!cgL z7^ijQ{ddr_pHc%}dZBrBLICC}#mH?K(Fi)^foFL^I!_nugRgf2!T%xH4tsJ#RoQNhQzGle}e1 zv>_lWSItf(XN+0@<|=28sMIvY1igA%hr$Uc36#Ie>Qcv#ftuG)wvN18QO&JZMi)QJ;FH=O zA`XNy6DMcu)uofp@h~{c3JW^aPSb{qrUkG}HOsrmi!B;IasB?6i_8~4W^AMxKdRm4*QQOxaMG&v8yFEmGr>6 z1TF~LG-Vwmte;XSAk8AQm=yPxXjb*ZlRF@+m?G5BP8|c)fs2b5s3L&rOYbM&rKfd}@oT|Mu49y`N+8K?R2(?724#kvH0F~%Z zUE2!fJc~A3-uh@7eBzaIvL0TKQ0H9xxTqTt;M5!&J9pj}iVP~Lrl3;IN}VFqlIK)C zseS~oU}|SG4$4X8QVq}Ybod-FOScL!;w%Hs>Htxfs{E-{g)aPL?enubtOf ziK+Lo6j`JAjIR0%TzsnK01v_QM#%m$WsyLGN=YTfFd!$DrE2mf6p3w=>9!9{KB=OZ z;*aCz5aCu#F)&YkXBNT`XsV>7>j1vM-W%2{ZZ1PysueRaiVQ$x5ZQBkuhp+xO&@Qy zR@`2QFubCYJ6iL3S2uBYmfZ6%C#hX0VOiVGO+;#$GQ&woDH0y7r~ptY0Fp&6UQ1K^ zinJn~6SKxbzeW~m9d|x??NP4!&7ZaI;f1@B>x=d5IlsaPz{R3u^RO@WKI{HNE^hu+ zW?e>b{p_c=i_Nd$oU@*8VMMcA!)C^LCDl2iY>YoN-dpP)y?S&ka@brKNhpHrfNu7( zu&FYC))RHq>(RuLn%d-AldJTn|2c`SAij6B3wV<_Gqy+{KS`Dh{;zkl(=<`u|N6iy z4w+958?bUXr)!?(p&eq8kee%YVV}RQXnk-g;=~*q9$PjW&pWT@=VZU>-BZ#4a2L(I z*%*?scjMU~?^~BqiqvZvz|Tw6{j|dN?WxS8|A~csEC0PGMcXb$7-7tpLYBCCthFYo zh0mc!j|{Q{TsR%wH0r?BWWnh#5~U)%F>vn0kX6RaIU#9)Irc{CDJqA5Mq_XBXSLn( z@T#oocD|DqtymM*a+e*HRBuH!C0p>XN$r*|J8D4IyotCteIWxMf1E!t33L6ES^alN}WOA=T;;!?yC7 z{Iq86_LXP4)@rB|4c6|c>$!P*7l)vEbD|3ijc7%yw7{D#Y&zwg&ToECkN!28RL5!0 z-t$`(eSxelVSY7%GH!M48QAd0j*6pGwgCVw;nqkW<3iV&%$bWlTTX77#Nca{9*l0e zjC@1-7o6_%F{6PS5%Rx>jP#9zWD|MQU@{W;P;QP>lo>emeD&HJ4&z^+D_jLm+nlyW zv;xW8pZNh>^mFuk+H+TUU)Q^gKNP4uM0s5WwL9N>w{?5HY0l^lc%i?LCLr`r>n5LT z8d4+UVY1q(t7S$GJalU1aYo#^EW+NV&^=dQX{b$#eY||{cjsE|Q=zQLhx;Td z-e~Hn*DIU}+syb1qiS|PV*#+g^atoJbCt18W-6z(;-s+tPN70{>u=kv@@uSZbmMr7 z9<0K9hwD!Dm&{b1KHe4JD}F&%?cXqZ;o7nDy7qw0l<6NWJr3~%zWw5p&JTX~-%p5| zEOKQ&XE_UUB&qTLecHF3eL#AT`S*jx_cmWTzk8&?|6%CQ5~^F^u`%aCbLRVheADv! zu6pPrZ%vGdye~vcIZn*D@hz!%d*ifY%oow^;Dt?H1XKEhhrj%A^!}r&v}@ZT_V;$X z72r`7p>?6>24gyAt%`7X?kw1-*xhk%xX$-&83h-l(f`$zKc0#e&R8 zxa`8}#ib)|z<_>>v|a|f8SF_te3kpB23KliTiza$GP3xU9}g2U!sNA8ovkDv0GMbU zygVLo&gwVIGdV1~_17icBGegp;h167tR02m{F?w-W<>dCTIrr5GYtb+Wx0a^j&cP< zgsE3pA(|tCb8jeWeUTuNQwKl-0)#d*gHl#oRN`SuO^<6^r3+U51@=?r|x2PP0=nmon$`thGNh*Oyob$OAV; zcZ28LPMtXv@m&esp4H**o$qtXrgTFi*~?nEa8e@3oOZHdE&ATibA~x#pM+IBDx@#7 z&4~MGxZs{?b-1P1xW&to8TEM{57A^ddxYHKuXi2(D7Jf8+|3nP5$3?-MpvpK7ABUdd8#i z)AE>`fF7OUo7!T`pF+P&@SgDMVpH=N-xiZlkriB4b`Z@J^n_dUYJCGcSqebqe3+n> z%SB)mOTm3|ax)JGkx%tPzy3VN&>PU}E(fBm=36#(34KZsP_$Wou;`1BF`wJRwQ+x` zi$8XLbq>g`Hp27Dp0fdVo1rRdWonXCNJItm)xQ-I@z5Ob#9HOrOk4o|dx2~vfUAf0g;q!#UToxvFOSch} zb_1iFqsr|;X1Y3kBFi~F?iZ!nC>u6hcP!uQm*yD}$sZjMcqn@IZAx%U7+yH0OnM-l zL3?Ip&9MvH*?Mv;!m3}<4>9ib5uRqpx>27Z`;iVgY$Lce;#bIV>KGLqKE+%X7{GbY z@1?&Sbqnu%a#~X&bXk3JOO!)^#|rKT8qV9gpr2b2ZRwqo{U4)*E25tHO%-Fbk3Q_` zaZR!Th~VUwyb*}grysxKHf?MxE4P*NxJwfr>j*9$GPn#NzsBr2SyMB}^{q=)cn_VV zZ0asR&O8uDwMR0SF?&24xJUY=8Eiq~AN(iDaCjleTK@%dJ6hdC5fP*%Y859pB_*MS z`__H?<>3j--cw{UB%2U9<;t;6m6eu${{-yhaGty#o~#9 z3ckh&zzg+oM|e5q*5eBLUR)D&LsFB;Y=wi3Aa~jzePN*w#G#4&bMqKWzQ~d%aS2b% zu@W=N7CGDTYWon_oUuW8;h5Sx%m~qK7}}vHPeehjd%Z635UTzsehGDPf4*C%UK2hp z-=_1b4qCivm1*(j=XJ!$RrV1IDnoXKZ} zTA@ilV35G*PYsqTpvwSlA>r?W%ak8~dL9=+{J?**u{WY$6n3UN>=_hx-_+AipcoX^ ztn?;Kvqqm?pUWj@Tl<>;pHPfchJD>fKw%g)0$;su4><(44@kj?M%0N>?%&-W+DqZ% zv?zSXlABPmfg;19dO)Nn;AR8mp-hD1q-Q$;JtpeJ*?Y!iaG*OwfI08S4({%Q3bC&m z%>H+C%dm=L7!pFj!+!Z^xS&1So{4$H@?tUo=W~Xx%`7*l)ginWW)eU+?7o`|V#N0H z43Bi260_&&H<;rdu3s%LW)%T7=aF>0RV8^WC*oK&00yQpoE}qL^5z0FoW2^U+@X{i zIM6)k(bnqfpKRxQY5DePDjZ(K4ZGSFCQ6|T%(DCW`PR0A5&x9?ZIk28lRpfJ;Dg~` zdnQj*^9S-H{hvpzPNyUW#E71Ic|MPtkQ}w=RwTP%O4PxqPi>Rku1;C{JWm%eB|jNS z4u~%z7)1fmjnBh=4oJLuF!A=mmm}kZcNaMAWx=#Prb&GVr$?x%GE>ru}lG_EOhqcS;tIC-LIdTe{*BI032;EXDz7s5-?wx>1(&hng1;{&h&pM5+K zHfPM55XgukW}hmYQ(>Jm5Sae5J^kGCsqcoTI~|-y2@)3(G5)=j#CmEW(c<$$*Fq#4 z0^E;dG{Zq^2Y2Egm-t18B&&lKRvlXSxzG~_Lv{il%_c^f&`YrQQ#8Po7_f-GdG)Dx`bZC1>T)P=i(O&Cmha?m{4#dKTf9lBPf}qCdCdD z5tbfK+8o+25bH7%P8}CUn|tD$NF^70_U7{LDHBo zZnWF8Ul9;SN+|ALG(rS5sY3d}s!s|Zdl=c*!y9i0fA{c6z5zV^7GA?4vtg26}greAPshPRxHsa684G5+bZi?0?_n)35N8lAC}^8EIM*gJn;(wRj-)bY4YZFzYl@HCVNzs zD6vU(WM@ybOreYa;l$U8#%wO46NhwxaZRQ;reacBk5lmv35dv}#pKatib;M2Ckms& zNZjPN9-Tth%f!A4Qi5I_*Cn3vQL)ala)X^MNqy^44}Kv3c=`7Dq@PZ4XfZuu0%cS^ z7CWN2<_N-JuUyjrr1E}L49PvWbZa(fQUZw0s@l^NE;o7FPYb1X25{!~H};jV&Yp=Y zf6{iE8#-I{csQyGH;U*Z%3Nc&101$?W%m6r@m~KCexd8J|9Vu%RUt5OtaBk(0vxLt z@s(n?8^ii09P8_A`G8l(rF;-0*d0kpD{g%lx#c@^t+n^I+tKw+rWioXs>Zgz z1Id-)bbPeWzB|}hMrVrR&Zsyoc$-P(OJH!=inUJ~74M3pTzZBE0rm*MzD($McJJQ_ zFlA622ZGBw1b~Q+MhvFBd|Gt;<%CuA&T(OUlZw>>IFyMKH!5!TL2Kh*ncjs&mGw+g zL!o+6sI=P+#r=$`{r+ll=dXMMVCO2^H;O`g-v!?n-dz>(VZw>a6HKwAqR~9!y|<7i z!6xZ@wtfzed=^HIF-0_q1;cNmZwdjcVyeuc@e3X-6aSv1jNf?T$ZB!$v(^u{C;zv! zGoLVGu=@eP1IF{8`J(3Q^j(X zUmEAq>v4ELfgt6gvT@8^KQWS+4Fr)DqGWut}%gIi~ zNl~>=qsvLoc?)fr@UQOiNajcFH^mX2^naVe?Ae~ZD+;>!%I1?EcOKL9n4hZ5@gPM6 zN3LuKxb6WSUImV84!#Wgu=)l+EV;)$>z4i0)uT%o)FSr(V(c%&-DAYTO?O3!9Rg{O zZ}IOzyA)nhQCv)G`WaVy! zTBhyVvoYY(au+ouL7 zT~I>miO{*GDZP+mHNYsG^g~!OtqBV&7JDTRtnS8HiO!i92uiOoAx!yc$1Tc6Q_Myv zbl&d>vSX^Q8{oRmScm%mZDlrE#Rx}Pjh|L%^~nfRxh z?eD!Za3&9^;aw)hT1E5rX8wA)C%Tu=RVxy75YkUXHIV|#l;KT1vCWG3y>mS$iv%qo zBB-DniHsv?!lkuQ!6~#XQ`?2#^U5Z0a^;5{g}7i}ShrB;SrR?VovUCT(}-XLNm-lWJ=?}%y~r=qek<+KnT1=Qx-xqr&UEvcAonLdnE(?4p*6wz zlwzDxk4^b>KcnbbOX$?K0m-lxjOB{`%_e`Tm@hX`|NTVCdhzia;=R+61#au{(nIn7 z=jFk><_~??=;a8Gb}w)b!Wq^1K=svdwS3K(qx*UZ_n)=pXM=D~zM63A6-8%>rX&ix zlmCioCdD$ldyHon_e_Z+FlIl&!BsK6KjwM=v(Znhtr^GWH~i%x!ztC(qH27@iK)It z&ni}oeq7!npC2ch7ne_uBYT74oO5|x!S-eKo)%d46yQ%wp}tVso8nne6ERRE$~_!xYi1NiiIN7u)PW!;;RMfm25 zil8;+v3PiM!vAVSSlH{-}uID7i9~kISWZ>12QDrSKqOR0kehjC|!nshd+Y+nA73%anPv>u0lGyoB~V1_!pN1v=f)hY z6{F(9sE^Q*=N-AvOyy%hunXz1R}U{Hm#OXv3L(WJkiSgK`rohi!ri|eI{bS#TJIo2 z08O3HI4&m3g@n7dpkK2 z7snDxm%_hA#e@sCXKG?ks7$DcfCOgng;W)K9~0dN_${P3T+GYWhaWS=a-m7Gi{UVs zqXRgCaZ>O`WsJIKvRpy7FgRvWEKZ7yA*XlNdUM1AmmdEvWy1Xbrr*Q^0oAR^sz8f* zdL_Zvzm;q&y6LMW>xI#y-A?se$-SU}Py!+9=ZqA?w>=Y+drCPMS!I~LYH(`*-pw5A zRE;zEr0zW%(+ybrym&?{K_4|0XraJfWn>HZ?vJFj%-)$ZvobB6%WbE9)=Hu+7js=l{6gRBqEP$nx1X->N)@9Ij8 z`)gUvBvarmth^BqEM5LE>wn4CcCug;-3@;O&D@)GpzjY_d8WptWLPGoyRI6SY}w?L zvYC`!;v8F+8xI>Elrj(pw~4TRxjoxA{!zzwjV|>q0d2lE9m5qMdzb$hGn(6zzVp!R zOXeL;?D}w9)usUJpoQD0yw@#&f4Us*Hj`S7IHmc_C8OR&*bUgG; z-xW{!fba4A*cHK>^IqrA>RXqdy~Ww}jADCory;Po_i#0GLDTQQ@6!D2uIIPXcNCr0 zwVCseJ>FAMD5)+FrYEzC?3{IA-mBbD?*vl-v3;%XsM>W+lgB}S+scUryH|$If_E&X z9}THVeinJveNN>ps#|}yJ-lMp!?@vg^a*mrJI6XwuxI&xw3Wm+lwWgCdNa*e*S$h@2yG~Yx@UIwNlHth{rvfISl>yFb82zus~zrPi+b3}=G|AeCVU1& zvnkR1=ew8K_YssaMh}XPE)h5ua@4Nq0>lT)zb)$JV-%{YN3KXC*g(vvbrR2U}(?Bz-c!0aK%f>)z z6DDhOU$#LGahA!)J_Rs_u^*mnUrMxYt^5oOw!2j3P#b(#5`)y>rQekKD{a}I0Np1}EPHMofHdjsW&SQAXJ9wKH z6TBhVtKabjMf}hskTSoM)=m2T@P(lRP9OE@)b+GtRy`AYVxY?!;|etH&H5`I+daG$ zn+wl@Jqvu4#Y1XWU{-LGZ}H)veN&`5+1?zbQRO|SOb_pk6ab;m%Hvo(-Gco>e?)5d zw^fZEHcs&H-BYq0`gf#f@aHdI<67$~*l=67xF&3%cKQ9;->$QD{{lO{MSjn<2i5*^Jjh0-YLGzdiE?(8VP!S zeP}>oa9PG-2J%C3N4;yd{VX=*H?jjIqPiolCc7`=vtPssl)Bw78z80s7cjSUk+N#% zVb#1|vF9P981?60On4FM6~?DTqyiyA$2UGR$Fh-5Lq`BEBX1poAYrD`DeFxpsj`(Z zPXb|QdYqgIpLdPdxVh>8G8+f%Mc|fY%)IO)W`+A@h0YPk_gZZs`eOJXf>>!cny;XT zKWs%m8glN`K0NbsN2nK9S-(86z`v4fN*iPcIpeA++6v`7SpX~R+eaCwhERwTenF1Wy~QijMT2v21m@; zvU}ohQLBZxGph8iGDwH*6zS~h03^40-gmL*uZ1>|I3@5r*u}&a_ew~asVRJ;<>qg_ zY~OwMc73e=%CnQ{_D#;&!R8F|l>LL%abZF)Gp{zL?WSkhDZ;%ok1?Uzx|on$b%*)7 z5i+q&XG`IZLpI8q-Zn6}A8_A)vfjJbA(7h*g!ve1*7ftg3F=S^!Uip%n|^NR7X@$U z$%b`hD%V*UZ?5f3eOWz$zR-6&LQ^`VmA1t}2roQEDoXunUCE>~E{B&k_ouaXIt}&r zC@F$1>u}YnUlcVlIsz}#i;4yWF!Bjt3yKLS6S)$78ElXf0dCYRU-x~7?ru%33w(4x zi^kl&_{#odu)(I~reKf=TMKee;y!w1|MnJu@_o~dS+@=Bv|%*RQIIZ}_;$)dcgNRm*$%IF9oXII#e!aXqzkLmWHv9-9GAm_`Jy1yBlM>}3Bg+HZ=+v_g-+$`R zRE&x`V@j})0bWh5Jpk-y9mQj`%gZ4v&;3umJ$sd>sjbiQF16Vk16*1KF5FTgp?<)W zZ54r{%5fPMy^}|#3vaY?r5g6%-o5ow_klN~gtNBg- z3j?D}lI{J+2x-^OPY;X_qvw~bOv%Z}RPnNe=*8lih^6QEI**TF$GK+3)QEC;xE~{Z z`?tYOEMTP2KB+@8c#IvF3Q9J$!|`3PU=+wn&pYV({YcOG{~4%L`?1q4zbRJ;8SJ#Z%b-KO_Z)}=xZf;R(E=gN^Je6fR^s|Z;gNe-3vps~4lsNAHQ(V}v#0M`4B z+9!TI%Y6PAQv*^G(t+~>JjE>&8 z?7X$|UDW5%9w&LXd5Ft6iDE{sjimF{{1?DDG%(UzU%K&m`Nx&#Lwb@E``&w%6FriTjz`Jmwz0vpsITGPb$L^}GLT?^>gpxYqWbB#_$>5`>V;Bur2N6_Fy+PrxwY zP_d|pB2-a16GSVB76I{wkWjfOh=>+B2z15*B0@z998kavrHDY$B2WaR3B`&YrD{Qs zH#qrz`Tgly{nd58E`RSIv-bPG&pUhO+3)j=tfu=JcppZ+v}wvq6}L1>g$Ttf#oCsp zZtX!Fy^-zvV|in+Y5Ab|X2;HNi(aqNZ1>#C`Mf!GUh0#DP*;m|H^A(>)yLe28$CHY zr1oP{n*Dgo?e&E>xZXQ6KLY2>i|{m?fX6{q!p(u13noo~-58TbA#+ra z1K-rWn^umu_-Q>?Twvs*;#}?aP>k7}^`LXheWU>bD~ibzp~t|g9I(gM?X z6k@A}+Nyqj?m(AB&zn~8M#$8>=o16}*1Z%n?+K%kK>Q(Q&y878nzpD%=Fgq3h3=r& z;i6)r9)d!!Tm6Frc$%Yyf{6m5S|(paPD6}2qzqPR){i6Jx5YG|NqO7Hl5G|eRQ{PUXe=bj29CumZtHHycSR;Yw|C?n)!>rw+u!vtLl zfe07OXlaw%tr&V6Pdz7-eC6ZFOoXJVfN94U^h0mTR`<1E>g#3nKX*vi0yaQiMVMPzR>8M041M8qU5==dh z$s=d=W5-ca#!}H;bOLLF8LX!*=HKtBU9PZ zdoX93j?T)k+pXseR4=@f!xcSE5rS35tLi&U85Ra)c|={masP?Dg@G$P9-*>HjP9-5 z5=Mx12DS@McLB6G+{BgO_fQrSd+3fh6phm@Nl}LegsR2$0Q3WCoR*~{#OWlPrTajE zXM`MOg{Y*%I46}9=j-UjYb2=>3~Bc7~-#G5p7o0 z23V*MXN|-83Q@k^-DZ~C7oW1_l*JX0;)iqUNbzo*hAgHX#FK1E8AnBT12j*A?77~= zdynOB-Ig!?FWch0Hp=pm1#<%$>ZFE(cZ)6cj4agnQyqyviDc%`QVB_`ffcfg*9Zyo z0>L8;G3wY<@1S4NS+_h=f?Po2^Ex8 z4P}!u%b18f6j?! z0)&XjM+Z@HyTWQx&qF8?Yd2I4(QiKfrYOd^b7?lj9|2am+7EbTrbPs2rd1~_rg+5! z=ikxIQL$2n+N=X)`#3UM_inzv_j-M%`%h@HKTaFNeCT*{1um-JYu1K&1Z!AdYq)$B z%Q#h=4d#sCvQkPgM)XhXmQJg!^XUBMa8b*AvkHS5OUDjVOY4j?Co1b=lx9I9ry&8y zO&Fz)4At{nwX+=B%yg6xBN)OonHy!sGIj*@gXIM8c;Lfy!mh!9#6x^jh4)SHvjedq zj^YjDvNafegS{9F=7(#AiMIlCDak8P-R-o>OvU3Hgd_S*$(WS5!Sf`MTrF#Vm(=H^ z<&^(*i=De9EBR653>Si1O@27rS1hS9o#7i~U5eN|5}CyL-lSw$%`eNaE9ejoLc(Sr zN!9VQ$}rj_kY*dJlo4bKiTMVz32e6~MEm;bRL!1^HF^$E%N*6*8k`*rKGLbP-)Q*d zTBL(uc-|8aszoe_pRJYw>JvB2qC*?YjTeTKMs9@8hvZp8K`trNr>P=Q%VE-T1n?78 zl7X6^U3CW;25zhFS={3wKv`6)#e5aN4X3*jutqIHROT=x9MFpJ)8ZFX{rEI{&)uhE6jE@fROZDO5T0}{jqZ{}vE!^L|e(~JTiBD>a6;|20 zEi?XlX0B0nfqdkrW3N(3S}18TWZk1T5o(YP3g#7DR`bMsnBqB`RJKymct~(0oo!2S z-F=V|NZvsrMQZbMlb~)OZdJ>Shm#H8e;#4Gx{4C5pPcQg3_tzrA$|Y z(VbcbK1=tawj_61*Qk&xgLRu`r8mxUBE?mml0=FZsiCDq!uaQ`W*jajV7&_?j4;>u zBGr%>)v}CE-o2#t3L;Mk$^Epa%QeDA?EycP#VEyFt}`7o2&PrMG1APBuo%^@ebqB- zhe}G+oAcvOtkVgSXUS2m?6ZDzyQR`hgCH5ra3SD1tNAmNWz1akzs01+$I}USYd!!p_2DN zC-xehFYN=pQKmN~X;mSa6mJ8TY=`lOA?YBfj;t=E)Y8+G;E4UcIR;see#!}whnpM8 zK%|vK#M7YMBp+1BeY616vk--N zA`dC2EX#@YXD%{lB8A#$opg*6MiH^ygmo2pHUkO|OE)Q2$p=-Hy?%0r!S6Gze8kYy zJ72y+^p#;8jG3mc4->4h_+CItXCN=vvM3iKzKbr>fUOhjUw?WPl zB)lQKlv};G0oQ%gH?;S+D7I1D<_gLlzE``&nwfRA(IFvYNy@w`z{L_yoW9CE2u!a4 z?(jB~o=v-g0aqxl+44#Ir!DkEj2r*jq>Q7xigC*;zPT-hOVL2D(a_J|*aYiau5UBR z0gV(6AKAnSees;7YV$&Z{O(IU)tov2S7;J;rd_+LySC;Wvwkx-UB|9L_gI}_^_;D< zPx$UZ%GK{R305ymN(s1S6FlzukAX&JG0}AyG%Vg`QbTa{{sFWjQ7yd!|i)dtvbHtc)85^g4x1`w*wa*4(|;-F26tUoyER63Tc=Yc0_5p zpwGj1$UOE$+u?b%#E5}q7krs_HnD?pLNeSC(_hv*8g33;{%z=9Q&Gr`p))IoD%bqH zhGsZw3Fh8>J7f< zZ+a=1x%^!<`eoLw&+kp zB}^{F#2$t1ApMllYCq}Lkz(YmjaUN?A+CE;dypy#V0xK!U>@^@z2Rk#&< zd&dT@(cHW0H9eyM1uB~-hUup>(^E#Vu%KyZ^h=$V!IgNXJCiLbu+%-F{>c%abW5A8 zTl{n9+KwY02j8$z^E3*G{^JMRlBV z|4=FIdb{M&lLx&QH(eXqciaQxq~E!v(YAVzdzWnWI-zWOHMQjEj+OoQ#ivZg_1#u? z^O~mLzIpwXx%#?uXEwdd9zU($tQzZ^o14T_vfiqXoUFa&&Da85Rxj!o1-5b7yc%?? zncs@Aqjp6rtWsv8oORAY^=o;KUI`8X=`Zrq!m`{a+PC`3opFlM)(C*>_vjv}x7+Bz z)>Hnx5YUX_F-_O3|)bADFJ+rm@ z<4+4)`l8!xi=ybAw(B(5*5lE+_U8*z<;Qk}+pGAPiw{<%Jsf&qY1p~k&|?p_pshJa zHlJ$S7*TpI%P(@heWqdi-@uBm)?EB|{b0GWk`WMDSvPWUeKAjkf9%}!ro8h~)A+hB z8-e~xeIGRK=#Ax{?Lq_70h*H*A-Y2TjobDK3ccxV2#7=FZ}n|ej%y-G^hkS z>r~kbV zY3T1#@*Z`6^yTqa!Rfo)zlY;d=^5zCE4Yxrc+d~Zc>sV4 zKm`F%!2m!g07MM{!2wVjfC2zuNd*X@0*rG3o^w!vkyH>GAQTRyhJ(N~ASf+}1__2C z!Ejm#4K0)!38g_n;dD?012qjTHG-ZR$w*C$g25SJNE8i%iH4Q|fn-3?u^{M~5Dd&n zIu;~~nU;=;7R5@-z(U7(hK`Y)9>qe>#7fW1hC;ESm^c_1Ss57F7+JU&&u}oIIGE0G zGO=X~!0<&@QvvcvWbMtd>3v%-CbMl`c1qJB~N-`G}FUTujR8W&sR98^eQc%%QQqxve(^W1uRn;(1 z)znoj!m8=$X=od2>6&Qi8ENYo>F68l=$q;qnCKc}^^MI9O{|Pet&9NxW9%hU0KnAT z#@x!@(%RvYos+d4&ep-z-to$1XE#UOHAkE~?usYwiWkn!9p~oh;^yUg#ohIq=aoN? zm)rH5Zth-J-EUp@^l@i7I*9!pYyd zegBs4-P?Bp{qBa`xl8cBN4Ogp8W0$MKR6bF(!lCSOJYD&004mRCl~@g z{Y(7xH{j1TiTVF8$^U;z{=a-lU=)Bkj7y(X*c$<35_K3M74^rU1Pt@^8;S=L*knAH zMjA?nQ_x!RTn3G$qv^ty)efVLW#gHcD`R;EP36yX<$XUajW$(G7N|$Sxec2uUzX^n zi#m=qS4~%7OAPZ3TdH3_wr%oU9&33#TaW9H=Qe7snQwBRu67)6tzB%xuaD&$wbd;@ z3HbV9dAzND?j61&kgUcQkH{XUW`nJJHd!Ia#Qcz+=+c zygglM`Pk`sXUoS~(v|T?CQn*FEw=l9eEa-K+n1G|2n4TbSNq=jNV=Hwi>{8Zn^Pr5 z1*T6szkQr*y0P-&>60H{$o&ZvUbF75pI^78A3INWKmGM1!=Tc3wYdBDufwk&S0nx)%#2& zrsUS*#ap-55->x;>xr^&+}D%j-&d|DE5B;jL|mwvS|@6s@pzZ2f3E6Xn(@W$cj;KC z%06QWZI6uyw%4jQ9y<7MZ)D=4@9`2bsfEQ^?&VeQbG%x&-{<0o*w^4f-GZfg0q?6e z9|e8i-Yg)5$Zr^3|2_;vP`K}Jh008zwn~V)qT8hz)}A5}Vm-{{;uDeh%FrYy(GQiS z4?RCrRbH$T361IQ=|f1iQ^vM~&kvA2Y6})-D`_vz4Bx1%f{N{s2F~2rX*jO!EU1vG zA$x?JpTa+GKK!)s81YOoey4TG|Kq1Na(Goui1bJy_1O`$Rvgd9+q>>eCbq5#5)XTn zZq!I|5!8V+XnYTX6fL&f17`Kw?d46*EkG*5KrfWP1_&h5Nw<#!S-NIQd{nxyK3@=u zY(+ziM$ImfbW{R0`(xs5JJNmd^@B-68?;>8j=-?p^0QH6P z2dJdvJ{?SB^;A42eweQ%J--;J6&EaZh|yJ51<`(IQ!PzY=QI#nh5{|xK7C)r4=0^{ z{hd#S{>_ES2;;$qi~*=f z$6L?a5FsE{`PCD)PCIsH}4@( z3k9Z**B$Rq$gRkJlJQNJnN|9+^JGeU@w(q0Lj2S54|0suNo%vr4rYMS((C*Xr|*tW zT|>0;?NK2iwUgh6oAsdu8{<9H=eCQ%ybD(g?hf8?`sUd;yx&qE@_RhwS3)6JNWWM7 zW!)ul;jqVU5Q)noaGTdTRP}&|weXzXNMU1_6v@iUYbpq}mpNyS9dHuP^8j1Xi6XkY zBmJ~5>r??ZSilsytty*u)G;c?#f+IF1Hj)Tg3Qb$BBiqSoc&(Bt-~5q)5xIY{k??W z^ZabX`a{y9=84ygOE_lR)nps@lJJQFJ4?dDiVJ(m<|P6=KSqXC;l?Q;$Wkgg&dC}c2dsA-V)aH8~_T$O9dygSx~r@yj&hb_@Ft3u?|v-W?s+`_P!#gS>_g6`645kVzg;E|<<_84E4FsCwbw`St2fP=)fQ0V&|s z*GGri4^_U7QYJ$lc@~@?E7dFBJP+eID1?B7HCe~7aw5$|sHCk-o*Xo=Qj_<`NTse! ze9Bd@dNG>TBUU&bo#5(M!trTKPiO4aLnrr~4bNE`SHtO?g@bZwSdXY_{Hs862|HC! z6*k6jrkLYfrM^kEMdsK{x#G7fY*MvVh2iUJ`)}2@&#SH5#$MOm|MnP1``C8a@J(aR z>uM>9tw?vna2J3^wc>_|VJMuyp7*UT;Q3>xA7iuKN8joRv^6+tqq#ng@1ziu$41h! z;a6<=;vxL%qVGD*A9NlxW(5=Fx0$J2^{K#u*eQVIf@Si3*``X9+OPq3FjilHdnF)R zG!iRJp=9-d+J6(^x<>OEkE~mIXuTU}6!{pzAkOeCC?7gCQDDYjO*EjFm(Y;pMP8## z`&8>;Bf9k2pEdW2d<>r_4k@@*2t!Szz}*Yu{kTBP`TEgfemMB2ql31$&+9!K?nV1E z13?2@y+J@(Dy>p27VHQWeKI-9m zXU%GE{;}~n(nj3EtBwq-APgxCH6$vxlRFL-sF)sVBue4fwD5h> z=gueM4_2Y_t@Jd-J&DdZzUJ==J{~a+?NpSg=fF;PnK0{V2^QO z3r9{AMhKG|Xn3^eRryGo(l3hON^?{!g@sa)d=lH%lT5j`ghA;#pX8fX{Y+*sBD}K) z?iE?W`4SC=@*KOfJUN>CTti~&Mn!uZ@FBGhWkU@8A~9LLNGCQ;|AeF+Z=u|FCTVkU z)_KTJ)QC18EG(#b$x<@#*D~3yf=2y37&_XqToc{aT|4@M1;h6g3|ALF(AW*<>Wl9>C$^71a;-@%M zA!$@)`TN7;X2mycl7_Xuzdz<4D9#O=8Z@N;-bs>GT9`G}Z)y7dDcDbGY13P;WBT{! zTg^&ue|YOY{rdZh^MMkXIz^|K>15X)EVss5aA#2FWY6)g@;f13|53}6{i|)t@8t^o zpZlJCz4=3VOON;N%k-0jJ8~)?YzpqaZaVoEd{<@XI&Z-I^vUxU*%=3;k$#1cnB(&Xc| zs4Zh3#O1Wd<;}%CI*co1i!YXsFSU&?&$1F3VPv@-Uo#h9cNkA%OK6l&Xtqsg9f_-I zXMEV6z-STI1qYds9&1mWm`!{U8#Kk1G$5BW0}FZ+kkpl# zv=AG(G?&!;BZ&+PT$4|(u}OX(dw(k{xwI{L2X_DSVR9a8%6{y<1KX60yD5jTdq?dl ziL)suu>n~D31B-S^d1qGO@wz4k@H0J2MMAL@pKBQ%yy|~?xnJ2r*d?pR=V>6*ol!p zQqeR4{0eD7HfiVL?h0q8`L(5q)7+K(ndZfsE*aL!0J~?!64-%nZXgKhS6@mi>W+!UHS22iErA2|JdfMb8?s_>9h z`9Qe$fm`-N&yI&)^AEj$J~Y1iP$=vn-Y(PsUS>dc=KU(-Z4XA1ju_*gnOdw_;Xi#N z?Xr~aX2ss~jqk{knaxW6d7H?dEhd+p(c$y(UN$^4JE!Va-hB3#@7aa(H;WZ=hOKkT z=RGU4b5dJ#YV5Ap{mgMZliO(E)@+w6=AYXx;?miX`}1{f_fJQAwmfQB-T;lm(7n8> z2YF)#F8%X)v4?q69kH(z@{?`z->}EcW#?zK=P%uhd;2s09c4Ig&BJZg?$L_gqpf-D zhmJ?i{*ON23;x7j0R5H`c(33vyWps!;5geR*pAU}z5u9L2(~YTdKOX)7!MS}zjhQ- zy)LBV@ZDuE8mBH|jyF4VzvzNo5r<+B`$Ex|gCcZ}FPCER6QSaB@utE##VR(%;);P{ zN5w15CDI&zlJ+H!^-AQ&Zpn3)e3~m!g{P=j)%Hx$ytJH8T#dx8Va#)HL zC0Zz!@!6GG8>ZRjlnHf|IaH@P9hFJ2m%GB#-R#R{?v=ZHrh9glE6kUBkEP=|D%2Dz z{6sVS?^oz#SKN=!2wJEx`dLBvkP)s}sa;VLy%6A(Rr#7?TbVfK8+%k)#$1)gVVGfG z)$y(}>nJOyvnp-A>XChRAxCwVLUn0pcKQA4N7>cY962=$)ulhHN%wOa6(3jIJ#Jmd zY0r5~>Ui9xnA?5yxRt%8FDG}vzNYJ5&B#&iSZ7UNN9Bvo(kYHwQ^ndDj z7w(rWE!5f{)sh#=))eb-_I2+S%eQjsu65S!L^|`UkS(`?(Y}Gp$d~a~ zgAH>dznBT<p8qE8yj78)fJsxh2Rj}@C_DIcpZ1~xV1G$|TAR$gpsJ8DvY z{8&?|`Kf)gE}}+1x4FNw+4x3{>96KdjuwmY8mr4Klhxt22tUCmElYkaPEVYLI9p%N zw73PTT?=eoOK=Fh1VklR+@)E2a;81k#_Aya#}kwWC< z_B7x2SWdb4C+)YU+mjbB5;;5W$+l)F8Knnyn5K8+Aj}>vb~GP!6h5xBSL#d~>L||* zEza#s@9eC(QC0V=GaKI87-&{``3cDPN&8|@!;>cu-3q8Vy84v51}=BmWEToB6b?P< znpo_5@vEyowu^uDiOJ>88KsstflsY-pDyIKRL?y^}V@hw;{+abfXs zw$!l?kz-voqIt*T&f`z}yh_R(CX(Nck0c6?bxr8Lns|{HIn4Du2K;rO5fJ%eXNUju@e8~57yIIRdk&K&%oB&m_M@)J zh{eehuXX_URGiWj_<1`tcq%1#3NF!sT%LMhG>PI4VpMs_JpTMl{s>jxOM=5ou6&&z z$1j-}U-9P~(mTEq(|RTR2`&2c74p?9Nyi8w?r9pzg=yLRCl`aKyFR{DbR1P!o_-6Q zR#!p86UTLfXY?I=JA)XS^JYwc&tR9kjBYY$(Hd$xzOHW`Gk^NpVfpot(rcENGfpaR z+#KI{(Y#>}d!6U^+LK#XZTZdS_%z-`!%JoMr}?aZFmFKq?6-#5pii^+Xy^PT=6p@& z@HgjfCe3-)&e=YnyYy*Ji*{aJVqV2$Uh(FP)@67LRK%IU8UOOeGE%J6v@?_1Z zY?XFzHD72}w!4)lWZfihU6F2(ZF&9E#Jalopr-0OJFj)!Ze@W-V@BR%CaPm*bYtdk zM=k3{FNKWSn2w&MTX%T7Atbqu)L3;=eeZU%i0eifs2b}$dLNp$k-GCf8M&Dtz8P!0 z8RfMZp12uWvl%q8d2eUaAGzf#zJ)j5y6Ls$NlDzgUbE#kvE{O}<%Hb6EWT}PynV@Q z+oEgZYWH@Y>f-e}l`b2OdixRa`(w}NsXo;mhTrQ$pLMcM2F70uJbyGW={=BR`eDZDlflgoFoq9r zx<4(|_0NT%7T$hZQ~li0wWeV7dF#>Vn&VH<)E!sk$Im*Dbd9#AvVm#$HRpUZc{d4{!H) z%zAg6P^%|`?7P+tlqVWz9W+hO^o{nE2`o0N7t=l07|?T(Z-=gBsg zg0?HS+ODd#U8isJSZTdc-+D8&^_E$y4{xjQmzF!vTJEN_+;eUTlxhj4G>1+$hZQtO z+-i^KqkN>@1{hLe~`@Q_(_X7N6R`g`X@Z_cE$&2`t z@#>S2v6I0MCw*|rGf_&{X{g{yX^p2eRZ~b~6u_z`Sv?#=%cGrzUDb@HhniBxz?ZTTW>Dc z(Q@A1zTA1|)7!yZn=ek?!M_bNIOjH;`=V%hb@OcZT!#W7YS#0%`)*?oB%FuxeoDK& z5S9&va@!xczbZ3H-$DL7@O)G2_$-=x(fh-2Bjx7GQ2yl~-fy`)5TCgn4)JS)NtaK! z4-ap@f1a-vV|t-uY3p^Z^Y9}_CGxgQTPQWJ)A8Zb^3!y^0;k{izehihxXJ5$5_I&f zwwvPVObI#p{X1qLrHTR-B&nZfiTFAYs~bs!y3Gh%MJ-fH(nQ=zz*HgR-jTHE<;L+O zdOg7gZKjWK^8qFsw+0>7GQ);4*6XDWx|}!SQ_DE-zH89q6&Uj=Gn!X(9%=dP^3b3*Px+tK-x%RwyCj7;u%=R_+#gRv9Zjgc9Wd+v|E#joXzF0CJLLS zzK!x92V~4tzIFPVsZqeqHL9Sq%~-7hjspr-hxICRg*IoDtc5}F$J-W0QiB;vVlo@e zmS&Lq2bSh~60%knW;!jVmX=prUd!0rxnONqCFmPvcWdy@7|VzipN(_qSqq4?0g1)- zN=mQ~gmFZ>2;x={^>E-!mP*yEd;Q>d4VNmFswmech}_a|>#T>DGxV{mmwjfhW_Gby z*}ieOw^`Qa6!>LO&N=wUMw@de1tO0NqdwP;i=fw)cZp)X*6tF+8!hh|Csf|AHs@}N{w{$aIg{u#2u610^bdFZImVLdv<67>mA%*Mtci(qhF9?My zx);Tq>vS(k(N**)%e>aVmwG}^{ievrDO-djZ&3SlT-HRWO$E@rggD}sf<=;hTaF>~hS{j6fD1oIZJ%dPhA z=LQbsn|d=)qS{fu4?Hqty@CM;ZXfWm@hs-8$7GFllM9YatrlKKnq)XVk_`s4c+5^z z6`XyA40~tZcyqbCL1qXnWfb^L8&R0%N)Iet zndW8!Bn5(dv@xGXG1Kgf z&tM|Eq-JR>U(p*`6ILVM6^knpgiF&A~Xyzi3W9O8kqaenZq>G}XgS(M*yS zclCPta=q^i$YuuZ>mCmeV>A(MZsRXY)>@p4B-p(YGzk-x%)&6gFs4HCx{e+HTs3a< z-F)+a^RDSU;SrCAH8xCelGk=!d1FuJI>{v^v9aJ%%cdiBWI#yF|x){Qy0aF!9*P^ZnP1Z?3hc&|7KnYsXF} znQ4m4&k2rw0vQklUg~vs-3zAlRP5|kOg>WGU46FlRqE-{6br^{Zjv{G5=uq&-?-sV zapU-V3TywKLM%Bc@H8u%iP_NZjgh1i%^TT`{DYfQhWz=WZgFAR_>A6$^`|Mq=rc7g zlkZdlkLu*D6o_R;S<=o^%u$nZbkAn4z}ybkE@4@Oa|%6j_f(=RWXH;0P&`{fA)Jb%9` zhiv@2t-TUxEQGVU$!6b4Cj(61DE{*m1j@*JF;9NAHv*n5apU&5ACeQTF`E_VL-sBo z&iUBrc>m4K`Ldhs)-}ivSe)V|HDIkw#yWE==VcH7JE^9O334Ca=LHB#>Mc|Riv~C{ zUrADw6J^X__sLwdzZ2&~G9P{)iR&|^Rr4z{O?4d#o7Q-*sIbgGxc$cMZB6Uf>lcgk zSeU5FU6g@GWQCG)6qIk;tHv* zeW`SOhF%IJe&aN0MA~i-(?EQLl*_}Q^F%^b{&!X+w{ zpWCPq-wVI~sIz)Vi&Np~Uf$?3gg2M;yM29lFdpU9_}aChMnX4sqgb1;@p+tvRn%Wy z>3hkS=V_K)Q@7iqz-t_nX%L@d*|iLs%B2V9t83tN&+gm!@1mAt(Q2F8FL%)ZtRj|W zPSrcuRj1Lfbc^lPo99TIXXgbB&3)ErYHqIeG5CI6JNz800FA~mLQUAkq^#w2uX68g zswyWgH4okNN z)g{KBOA7L=4qgH2&p%A2Qo;H;ehfvpUYz5~eCn>FUUkQx@k;ww+TEo*`Y_`|Ejp`2 z1VD0>lO@ZWz$9wAWhnQ7w(`c_&?D#(US~qGr7un_S~TzRLM7kDJDNktOaT|gru$u1 zojpu^nnZc5#@fKZb7L1eWvRI*M}X#o(E_s-4!}2%LBP-H>t+QMz>$wG?2zW5PmKjf z>J3M_Vtc8j!2jUR{C@{i2crHjFjo|S5CK#55mK=tP~6RZY2+nvFrIc&qwr;Ti9rgD zhNzXCh0Z`2lV!M{K010l6RK9-rN3SdNAZL|8WCyYfBr}kgY${1>sG=NLc5Sgt&wONH)NhK%Lp6c0>xJ@XY6> zR`2E3{2M>E=*UsZG|Kj@Vv_~qq2INCem&%Q&PEH!UYsFA>A2)Pxpsn5grd(+#%qY6 zGN@oIF6=xi8f#M>S0mpZ_+0u3U#hBoTrFR;PT%0Y+AOg+(GX+Xl*-Oa}w3Xf!FSIpom9>?6>Ze)3d-&-Fb z!p+-lsoo*;P2QhzK?yUIYu*=wcC%?za2Mx8HIBOOhLfY^KGE@g+Mag7hVd2}ZdA<( z(EveB9Qg|u1hJUYkV$3i+t~@G2uWO$OzS6$m|V7r+T59&BTP>EI~TOy)Q`lttduS; z+!e7z+o%yEfnMJFXvaehEK_2p99j zoln1Jd~E@7XOJke6D(Rt?{NN|S%FG$UjhT=gudZB z%PCpfPVz+j`X6N3^pEoRN3#7VS=#96{BN>U75gVyiqAI`8-|OESSy&LB4cv-xP~0$ zeGB6`%F6HLo_RbGpU=YyxAJkbk+(|Gr}|h56w%C-w6Zn08?T$ps~4#)o1JmZT5Q+* zUMx9mAilxP?7LrsChYOuId2nS6P2W0jieKE+!gqoyjNKD(1RP+eKlpPi{XKH=EfkByUzA})Le_VmZgdUJg_c-<5FMNc_t{$ z^OxO@dFVfI#e|puL*ly5-w8e)ESb%O9F6w`e?K_GZsycgz$11N%o^(w@#_aC23JW` zMgO<1=>7*(|6&pZ_2)n87Q4cO1k!S7pWaZd*wb>iBn;|%5|8BeJRCN^f?(!m3bzuL zF79Ox9$Kv`yuG2536T=d^)J;hA93fpZl)KUF1i)0ZCx|CthdbRj!hevAU<8OVwONCO}PX#PH_qXe%jH4L6ay%DA zbOifalI90#SUNeUru9x|aMW0`43%B}NUf=oA3wip52|fI<#2O7PoI2;zX1XN8pdo-K- zEN%5ts`=_`gBBeRW#9ee9Li!BPZ#@1c>nrM*4 zT=~yVu&_0+oguqZS3@5JWWE!dU6iT?i?*@Tf)Z}`Jr)j#RISOnoVM{a!6qj}C9|Th zCrgOe`=!!{TyA9OJt!SI3NNR`$yjldy)Xt|U&W?l`S4t;q5;t_&W@Bb98#v2sh zbCG_mQYV)XJ*1+pdq@_|F4#YODEWWk6RGjH!eh9@{#N*Q6t4pCkNz0x(?%d*BGSq+ zK38-ZE(d*Mq;fCT588mL`!TqVV{qb*@qY46*D!e!I-}R~+$G))B{sYexvZ>~yWpR>FnSgBA`^+mns>0m-I+YSSL6-&p3?VI4~7lq98P>7d$qnm`b_(p zKAWs_o|n$Hg$8P;sFAuF%@96tpOIxVQ)#yv#c6e@ss4{~+YkS{)G@jqoQh^5-_tXHN?j$%r9X!9M~s+5 z<0H>VX?DFV78p)p(R$k-pcSPZ&U{I-^zNGTcqZt|Sn1DOdI@1->H%zqYv_^u3&EYR zut=*G?{Ro7%*X1i3X96+pt<6m%a4uP#~R?+3xa0c{KUewR%$&uq1?Xw`LtJFCfuwe z4*d`U6^P1l>}sdQEdL}Y>)TSJw%Xh)KA#;fi3II^hA3_aZR~xm_{xKEI+)iwqQ8}c zZ-FiKgsl%HG12HH^r<1%nl(=`Ca=b@MIM^{6XWmy!1yooqEr6b zRJs3T-q`whIQ!{H=RoBZ{y|ZRi}4vRUtZCSmO!6b`fF2JxU0D;OUeuakBUc_NBa6> zSkTH|huG;2m1t3GnANJ=d@X-lv&ZzefpUXV@I%dxi%Hp!)sy`0HGDXKE*B-4pn3*R+c%s*|hQIl~li|_+q&$LpcQ2#YP0!t~1i3VS=V>mT(gdn-jRgBK1%) zPWfKpTF;pn;j8yQWyTEXN=Mm6d3|gVzS)n@-#IwnL+HQSngLaQLa&gGIc&Vq|9Cy8VJfeo6t1 zOCR6Ra!N?zUB)Foxf-&`THnHS1J)v9 zas{jhl(#K#5sFV+ZyH^zgb`At1Fg}`5_4q+ZQc(QJR8@Hft{t1c-8H_%!^7uq|EXhb=%HrA`>_ShOFPD_V%9tIx3w=Rsz;@F z-!bRwGXaFoNyP8GiHhf_$Ne<;x;ZbWl=nl^p@A>G`Q}P1ZNINTja!&#yr0OG@| zn7;Aeg-<4lY|&(&Z}v?5(TdAXRq_pC6V0wB1=5ios3}D(oddCb|D&zV(=#-LEOhMh zxmdyK1H+*R3H>Zq(S!3g@cz@TN;1pi#DG;DDDQ|mCp0Pyp!g{~_2g)`?>hFg_q<5P zjw7i{(vs1Zk1ek9=0t0hS<{VItPrd|Kcvm(QnRLG+XiT%EECLgQW(3a1fZ==y6VRxdG+MSnydKt3xY(?M>`_O_skWBcG=G z#bwlmfwqB&v@GfG0kJYi#YP2nQUl55!;Up<`+p1sx&I5}XcI8d|I=Up83KYLDgV5o ziU1D)5%}zHWMHvZ>kgWp@8z_G2v98H*nbsjZv=;{PKu7&rgR0bSnkn+GTwSDYd>ApL?b6qw+ zuJd1;4bF?WzCKnuu9|=_J^=tQxr3UbZ|=p40)SMz>>8H&K(w}wHv&L zR03h}^42zISrY8iI$j{rEwe19Q;6$rQUDuQ9+i z;=xnAc@VAF?j;?uce^8UZp;^#|FzjLl`0LxgYNC>pVRch=!-Y^^kwO@9rGb1m)+A7 z#5?E0dcArx&c})sXK6U=i2)eK_+`1);>9u#&{N=Re*5vFgc(vHOZ61LiDLIi+BmNY zkuY#B6kOCtW9|mjrxOI2$MU%u0}&$E2pA&V!U2d7_RCA7y-KN6*W|6}36JNq?h<|p zbK_$CAQDW%FRDplC_RIM*TeUr^g|}veP;%^e3?^v{%$rbfS+Hu5Fm_#ErWf*(D0r{ zgmNuf!z!J$#CTS+!K#BQumvYDE;Z=agyiJ(D+Mww8JEOMwY=+_V4(y7Vr3@*mPonE znZiD}ejz_XHee_mQNZhvY9e8pw;RSbH)HXR>1l=~Laa_XeS%}#8w0_tqGTqdM;$De z;40eTwCA6Inp4_NYLttQBJAFdfoxX#(Wq`ns05BD9s_-C^L zff!TJKVI*J31JmY&$jPRf!G!cEx_htJ5yRLqlaq{daW8Lo5bgy+t4%Vd7yDfxg>c0 z!pb|!?I9-10rLShSNvB5mkoh0Uh(eK?j()+48~CL#yiXaofHu_C|l3vqY1-lgN#tT z81n?BN@X7qdaWnCmqv|{W_r#hmJhBxjV-?;O$UN8wQ4{%kgMU-xhBA5wE66-U7XYkYMrc#Vsa=8~&+sZggg zJ++!-e=R)#UAv}qd}>4%`#abi+c1lhUO26`Hp?~+2mk^IQ1_BE+O|Z{#nfbs1NsJK zifdDuy7PLECakO_ZH3uaN+@ML_>utSsYG@nWuE{n^9TKbsBa=k(-b1Z}bL0m|W!;zM089-FA2 zNl9oSVadWytf6^5oG_mLFF{%<_QeSS6H9oG%y60TI!b6 z5PZhE^%-Hl%lfip8`c`bQmf#_PaSk1OHBx~7?fM8@f2v!{ zLA|1ow${A@6g&SD2!2HbEA8SVLfyZB%(GTdnke)!<)P|>IF#ly#z%9aEv}^em!3+G5RuAEFJROTRICB&J)1Toja$=rW^Kz&VY*1W3G?oGcoBp zAQR1r+Tm*@MX88`cplBoBaU}tFt$Y$1PMLND~e%cbZ~JKAiGEWnAlVueg|45#;{rw zp#ix5R3S`+m}djxt~-deeQtn5Xe!3jSb+6ePyd6w-Gu9Y7Vu|TLrmmAb|F74_UFh~ zypQ%?;JDT~Ldkn-qU!Jf?RYc`DMGeYBhh)vm5Xt)hbep&DYnx9@5zd`RQ{fTXTIV# zc?hlO+fBL(=x3d@jpjbc%aAzW=e%eXEwn8RrH*saa` zi@)AtJR?OM#zB^_J~1I-t$bW+y!AlwnFqE4d+%{@+pS_cI&dGF$A^^#>4Hk_fhQ73 zaoWuOz$>v}F^h&cC8Rf+k5UN|Ehju>BDpZv97eEm?8R^k#-oxd0~j#L4_J(g7;AUI zock#Fvl?~kz+G*AvGY*HyI_!GthN}|Cq^V-jV^@Bk62=f!LjW+LXlT@#3p&jTrN!m|v9FraQq%=SPB#3Vs%277wx~fO3jiwDoV%z? zWPZk+o@J_MyrHfGRGdBPAnisV@^F}{>itN(z5HF)-fB%DAkly*LUYq(wjK%{4J z@NSkM>N-{MG=+t7pyvvtXTu*~x1)k76T;~8C})LsRgDsDe{;vV&idaL{=?S}6h48R_67)P)M+^&_?x9^TgwtNRbpZp>Li;N=0F^N`yCkRp zhFb*#(XeHdLr1&Wa){%>crsY70Vvi39h#zDQAgs)-WVz%0Yx8-0_h!M=Ew+n^^1xW z6!aQeNWlVp2>^MIMkwGH+OwIG0U*i1eG5f?HOzP5p4Fm%^Q(Nh}A?pTByF_>o$+%QEQLd7kBqmCAill1|b zsUucM)XpTxq%9M=knfv0LMa3+P)uBTlDWK{<>U}+tC0KDi}rt`!f?Wiy9cDpd3{+egMvrXFuiRY0q{_Ifa#iP=kBG|=>Yfi zfyoU(9vtwTf-n`$xgW5M{X>>Vt|?yw7@J?4|2PB+*rf;%fw~5s-(bYULn?drj8Gpc zES|2I0OHxDG9ArO{po6{pd2^=>UD?m;L<)vr=p41*={qliG<|uC*Ru+zekmYCWrC> z9|n`@{83bQX!KAD{DOEY3nE=1;i0F9YyPUu;bB(y9OF3v^(LNrM)-j!4!8#cYK=a8 zK*i@kMz#R}40tN-Jq1>gknc96kV$)I zM0bJqc&G;sYLAK(D+F3%p&oeXrCojjQc89#pU&y`_aH!>&^PM7F}=G7#bLlHOb`zo zbvK?i307W}VY_RxEM^aEYR!9=p`*XoNor>VpCE zGXQl8D?D}!N=8v?dvXDkS~f8G~LWKjH&} zahM`!tktj|=rX40s;8ea0g6W}WfGw`2+(8(2yq1JhF38tstAH3`~a2eg)!oukWt2S zZiJeX8IUs(+NB85g`K-^Tl?COu^^kS_$P}H9&&XGgvCK`;Gmb7G?k{R)$Uu=-2vJ6 zK%)z32T;&kIOyOJ&>RmPgo`=eFO(vH{q94UIw7vt%hNwlZ=#an8bB=oR22@r)ebaP zhuU3(j^gr0?ir5H=iO`o%HycVNwh0O+U{Mb<`KOc0kMFhTLd7lWB6A_Q}FM=r5M^( z6x}ps_ZH+QM45$dc^4Vk1EK}MmQZvXL^|a_x~d*oodKW+3AuuzTRYhQ&Bfp@wAzEaJ@8DG?A_b2b%&k*5H$w8YBl$bep?$ zp@fusyT~;XZ3hItE^kqMIi{74Nm*BGcWMrd2?f2j3@%jAo`8+=F+v|CIEt@1f=TL6Jgu4*&`d3aIK)kMN z$&*TM$*}7HT*D+*{TKQXOfH$ksPyW3A6kIp38#M$e{d*`5^V7R@r@R1WrbL#C%qWB zRiq;v=b*VfRL3UbJqVisqvK2psm$`axI%4T*Fb8|LDH~{d`yDL8o)~?seBpv=_IaD zM|eV`!aSt1mN3pC7DLz;Ev1rn(1wP4q99%#u?pAkg{%2OFGQG$7>C9~TQizVn>8s&^>P3mMh zSxa~Y6LKdphdG3F=uc-JMpVb1uBBnF88nlWy9tCXdi*ObsrV!6o}T^csv!Ek??R+6U2z2e{!W$2SG zv_ua1*Z_6|2X8i!KCF9K{C>eI2|Cpjk_wYgLH6r6lTS@gB7IE2J{jfmBqmpntJh+} z+GtBBu{%uIzb*D>E#f)~qo-kfd}ySE2Tx3d4K&O?2{x35IF>-UqQ}Z~1o@nOo(AMn z7#q6CVgN>m>ktv9k+r;i5nBAX3H?huwju?Wpv63rk#np)o@&V&2-`eBp49jG=@Eav zBos-o*XX$AU60@C2r?P|9zfMk-jFQ7)##9lBQ}l_?1uy#CJwV}#NzL6Zld zhU->8w_u4+?E?k~Z!P<$y+zALS<5TgCIS>Z%FfBx(-%Bo!|UY9*Xx}SDG86I1DqHW z@#!Qw(MW-52(^qN)gzi@B;vbTJ*`u^7UnjP+#ozjuN z7%1l?6Wjs(2OXO0MtBcl_oD&BqnnQr-do0TQNe z$o{IeM>$<={zozu%1sDQ0MoxC|KHi5_01oj|NE=RK8L%lCnX>MRy7u_om<(xTt3h? zj}aXYbpMsvM_qjZyr$1UR|sCC7ENBrze|8#w2tr|tVhM~_Z%vJ@=0_Wn|-5Mn;=Kt zJj`49Pud>!c%&-gX{6MU5Svzmu>&^G6lET`>=Kjj?I=M%3HGw?s`4(`(@hM23&@i` zu6N*;d}GzqOLCykuvl(Gu*4_(Hb(~bE8?lD@1~HOwG?Wi)KAcTdL;ze2r$U z$$srx!bsBAR&VMx|GIeQ9G022{2j?#kumss(==;i+Y$_k)R5hK_@XSarev88bXA4a zwY_w}3g6VSlM{j6>a1q7*+c6S8-2_t<*{zxM#NSDARh8QwRmI4)&@#>u*0d!#g9m@ z-8Ls>taDuZDO_Mxbf;9h=yBHeO3TpZ@qRzD{w7_|GGlAaF4f)B65us7mZCHHw;jChCsO>1bPX1Zt{^ zW?+l>S=GVOxcJIV-MnVUz5n$$*a3kPC#R2jr(9^ZjokdB!9FCUaT4Vgf%mLlEioz+ z3JPS@x%*3pvyRHX6<*)>>;JB~uoeSZTZssA)2AdybIX{1 zC}?1Z98PPsJ$`J>03bQA>D%PG=p;!=g%^)La$=`42Ry=sD;1XxOCgI(HLEvPSX?}P$W(B7{T{j&t&9{ zC1-x?nw^~tEITkpjV*mne{*m@w7qWH>Pg10^Z${}X!=oy8P@hLil^-^s^X^R98Fog z)1`F741~%#R>a@91St5!Kz*+_U-<_*xKV$W{x{*tG9QqG;b%Iel>)4*#`1ZEW_*4X z#t-v_iimJw6?3{~iRE%e#0;MDh}iE$L5qwe+Ws-KlK{11`?dX9Uc@L`{r{-e)evdV za8Fo6f#%L`Y{^{!&8q*1OI2}MumSk1SBj~B53P&4B?xKYs;838_|Tfivl=*aFcvWB z7l{xPD(1cwfVA_&y?omxwO`s#g>kMJ-ABx2vm{c2(rfVPR9)y_sBGvIzf*n(;$Ut> zLaH|OsK3hz#(kK4c^Zxixr`?!!SFU$DdgKK)d&^!ppJjt^%=jzoBpr!sf8?D}JjDt{7V5bnijp+oK$Vn`oH@n?BHmGk7P4FU%|H-C zXO8vXV^k5&98H2%=_--`j8eJt@RHIYH<=tOj|%IQC>VT+%?EKQ(q(_eyfg{QL;M&tUs4$4!!ZnKx`!K$oi_Lh;mbO@4Vnd9SYg?mPx(UIi)j{gq_EDT$739>}qWesmbronsh9}g7 zRXj6L_l!oDuV(Gtm=nC|NvvqEFHl;L=7R8H3-Hh9*A*Xf!)lmV*4$~Cg4375S~cJ~ zZ{4YiCu)=JD{W_7faM@+GNWyPp0EiM$T`0jp^o*mca@aL`Vfm8)faQO@z5@l9Bfuq zbP!9gaQ!XQ2AVKZD|l+((r#4G@HnN|lsK~xX}8h@QdN^Ezx%g9bu8AWR*w`cmg4G` zFZOPgmVA0sax`+`bq~59I-^uXOkSixthYrh--{rGw;2P+!BYF}2I5`5#(pDboo8MR zZp{bDihyNG$4MRa^+Xpjf8dB6Ym^%~A+T!wNa^StIR5}KU$TCf;ihw8$s3L8Gu*wd zQw}TlAJ1F8a_r!SawVy4XZLIuBND?4nHSM0_c4Kcru`gFF`gPU{#uFl(U9%lHg^M+ zWBkKuQg?5eHgokC+OLc$b6Y2?GbATa?KlA?$H|1WjRu7oHF|aQh^N=%7GijslsRXn zoN)6OMZMp-qaOqfKJ7LX(wcRuRdLm7ENIMY7_q1*J#4rlttU;Pa;wbb@X}S8&*0R%BkB# zHFMB=R*DeV;AbEA?psnl^Wk3B9ye6TVGO&_pycq)gg6~7V)=~wbY-o@gOFqD0edqG%Yfum4Eojc_ovTI`HxthFx>t9)J+_qc~F zDbJ@N@(wzb284lSD`aC-r$hm#Prhe<+NcFNIKw}&q-;^?zx0hQ;lB3^NC}0b%qFkc zwpDTELY#tpG~*;UL9+=~$8#_nnd%j(^3_!uwv2@^s0$m_iwt(ffXYrR$KX);ZJ6Xf zR8pHJRgX{(l*&p`zt=W6(v` zu&Zr$lWEAjDNGVgy>?0?tb%PO5k)#zh+lG6*L3LSZ?mQ}dBvDSiCR{w@x{q$UdXiu zO=1-)L#!#_@TZ#!VBE%%1qsL5|7jk(sB_!SttiGI_;Qy?^`>FuYLNNH?fCJ=x=Ho_6Qk}NL;SE4R1Rb#}UlUTJ8LYju< z^J7aWR)@v>5($7#(5g4^P;8j8%Aon?vR62v$(e+b4H$9XyoU*8QB3TzHdKNbvwjMx zx45`U6?q0t3=TCU*bRL9` z^-|}SYC?6rFYBDJ+30+U(n0iRgh8`jrjFyIvnSC30Q8p)-WoV6lc*ELnCUgNk_T^* zMQuvgbtO*(^CYoY@i1ylBc^!r!mex}YD%*XQpfS4m%$1fCLCS$=OTkTmw992*E^E`QFUF+A zD$g|m^QtgH-c9Oqkb_ef(n@5*nk)0|30o1%44T|w6*P6OQ%+TLWfTsuo+OS*C`nj$UMEmaTt|r5LRmKriBLMdL6oa1!HC#dOg1@co?0c zC2BcM8Eu;LAf7a#%w{4T`cRo|e#-#O;w5rsu_|j=lRKfd41w9(luIlGw#AarcI<}? zk=&+{$w~qT=%iugiYm;0AGFs*j7X@=%~pd`C3A-{LQWlToV_?3DxR zpDc|~tX$uRT)GtW%2t0X#PWEhIcHSs`Y?$)WCnnCN{~OOMXwvysTyJx!U&NR>5ZNqytYjf{<8~-)4EFPBG2*-+PgPlamd5++Fe3v}BUO z`?}e6$vNQIY&q4ihm4cY36n2%f3TmIOlpK_2?wcox%kIzGA`lOw`3B`BhfA(cRyH8 z-fhPRNmb>yxL~_3rG28C0Vii3A38loSR0j6IXRT=j?ZI1uuhe4*fC@uv8b6Z5B4e% z7Rw1x^6MojnRB$qg&f-{AW)`B9grW~I`o;BT!2qbzLA`Sru0t@<$O9Z_04QT$mvR9dPnkCRPX;FP?mI_41Qz zJx|&nJo)3rla8lP92(mUFF+$Z{Lhms&hxRC*~^;~KyEQ|$y>Em@W_pmBR4OP-0B(W ze=u_KT%**0PU}MtFjl5Ds-#ax__+`BnX1bxZEWA8iwtVsBz*7W)5n*eKIwTn^5E&~ z<)BG;cKUhLSsT-%r<>z0=}tWRajwVx*^AZBUT%K&N}b-iTK@Xvv#GLYZ+o7-dyxKa z2U!2~+282rlZ@vd-Jjn}22(kh4)5omS3m!<`T76UtFGTyY?@L!mOlTl=lS;s&wo64 zYBQ`}EA#xxFo7N>M2P7`e|e##8o9=VDKcS0ObotaQ>;2!VIuaLNJFM~Y;avM#wFny z+1703VYYtu#EN;s6(_Y>W40|a+x={?lA*W6dN5nfj=g4<$8M`^v_ra-jTzedrRdM+M*Uun`u9GyaIrlfGY1Mg9MsU$ss3udtLvgQ7?o}}s-a8iIfoH(#TnSA` zid-`uT{Iq}8IL_QKEGjn!OrLITmZoYu(Y7>Pc0YeyVB%@Y&gDxn%Fuf*eM^pIgX(% zTNq*{H!4@kH2-xuqn-gv8=g8&Dbsn*`s1Fl+2|W54{(busa=C^%?}cKcQcBYhc|o8 ziNGwwEfuekp1h`tPq;Ia_jKPoUwKY3V$f<4WTu%LodUTmeiha*Iw0^ks!?m6M0pA#{&sEnls( zP+P^TkC@)r0J(L+Z{z05NN zDT-_J0BVZ*@l`Mtc!OySWN=oWc$wVK0gijX3FO?@fq7Rn7tg<3_vf0C#s*~3WaU{~ z{5204Q+mrz1_LyN9w!HwK-2O{d|U374jTlZ-k?)XAM0KBV>29)fKIDIC(w{Ta3^@C zjunlnS0p@w_ogI&h`>RJbm%lbdgjFSXKF-j+lNHGa-ybcl|-{yhFLXZ48&u!joCjq>MEx}FdI6VT}hPO5-QgA32W_N0_>RhB^VVio{1Tr=j>lih9+AdQoh&HdgM-M5jUM2ne0WT(`G2GF^T#qy9#hSe#|zMMz}1fjoU)VypMe?*Zwsa%$T4jM+LO;K~#ZAjCig`CX28SA~p zAIL8@q-;~90+_Y2*fr3Gw2AKN&_ea1+ej*NFO{iQ&MwIXFst|&e;)3nQWbm{EwY^B z5)NW$=x1NvKksFvO_-IX78UV_y1DE9^a~^g^*XI4 zqRr|gN0~W+S?sA<12)(8VhM=0Xwxp$Aisx>-2{@&67_$n8SwD#m z!tE>jhFMdJUYU(fn^3EtfGe3;$uN2yN7H&|g6gF@VMIIbP{$t!Rt;!Y44}m__1Zq_ zi{ty3!07$f%8id<-&oBCXv5lKO-}L0u^r%&Va%F7^~yGlNaFvIBln!@TER!}$TD*F1su)vuDcic#mfVJ71)G_B>3gDT*HQ4o4Lzr;dECYP$0y?$E#9i7I+tS?r3 zPeek~m}4G=-;?E4T%?y?F^iA6MXD|#5hoMN*XohpCWZMmvhuf3j!f+o{@+3`thh?M zCFfE;r1s+@e0fTC=|B-p?K_Ns0QT>5l`;c5SgY_eoS&nA9{7iPW2`2k7%}a}LwdJu ztZtLDixukEzwL?zUA)wr8Vmf}P{mc6?Z2HM^H4>_>fq8H;Syw3?*q>^^cI@hRVVNI zMSUtA4CJYJdW83+lC%i4o=|L&pnYZP&Bdr=3pG~7@}WP~&t54O0i~OZbH4j#PjWg{ z)A6|d?vzTp@3EVgznv1AjdpV?zR!QS7E9xxS5?h^wWpju^G@fE-7N|%m1mBf^Eyyv zD%-W|pY6L#&!p8@&7Ph``+WNjx_rUmp!IJ)dEakLJe7DZ=d;gH(}Ltn|E?B7AjWxP z{_v$caWDV?-@|&`F;MTW@*Xa@8bNVW+8~gcA~h=hG83 zAODaalZ`7mwj5?X{uSZI?vswgl3Sn0I?*aaBYsRZ(#Pr|j-1uUixiAXnq}Ry{e%wXc=NW0Mw6*6R({3g&tJZ4P z-!fY<)7vErMsGCdtYH=pC(anA*c~@OsQ?Tw2u<8>LWl1x=k?8AsfQPYxZa;!Fgt?Y zX9&6ciAPT^Ubl%zwTlGQ0rv_YCT0FopLreoDyGPeF};&+hC7jX zPnf9y(CGza-+2is_m|9HH_QECa_Uz1L(6mKKOnT!D{pyB???+AnrHK_Gv5Eg{lq=K zqotXemD7Du%c@sXE>r|JH{ovueSi}IinjXS7&MlA89^>;ycd(bc;#eSxK!03qz=+H z_23pJo3773$(Q^^JYIS)CXriZMe#?l>V?{#;DiB6Bj70_-K)2`b@Z}f@XoB*@g$?) z%WU(?Bu}8_Y1wmQL4_}J20hAuxPA-cta(5fNx;Y(@9+47mWjr@C7J!QJ=+Z$ueN7F z6R$oTWnR~1?Bx`r0vqV?3porjrU7rU4qMH_uI3cY@c~&cIN6H zw~iTIdjq#l=sQt8rJHW~>b-6+@JtL|VDKw+7&o}Qb-PzKsBa4*uZo#xYS>JM6xb>=<_ZbA}3)>+w&*|6JZx&2c^r$OMEv?M+t@eSu@Q(&HJ z@sM5@bfaWCNqZ|qTunaM(zorEoc+4^>VVCq*s~{|Ap$llnC3>s`lP3rnNe-Y?-EJY z+;@}LgYQoG+?x5Q?QK-p*8UZD82lMc8$zE%`hRuf+wV`#!yKg{o zws8CPM>EFt<$UkF?{}?UjQk_&b3IHN#m6>oT*RBcWXYo8>-km}mt1YQ2wLl5OoT4E zED0Tgt95+9R}g&kdkSQ7%p426vs179)_v0ULE|2Q2d}g+YZPJM&!Oh%6b=zCY`7Gz zAt)LL-h-RtuE4%7vrcp4GMUTZg@RaEPHsGf*fBxx%mG^G@cWaV$k1j|=b8Mrvdr)V zv@Df|%%0F-=e0?wg%T~ngm6q99$6Z8o&C4zB&!)`xR^52PdQMcjGr&J=`0`)-=J}Y zZcAyu4eWXJpxLgi3t%1v$w3?`HUS!#Ec+d?&HXOjJYaV%!xY6Uv*Lb|6O4DP%J5

K2}xZ&;lTh*I<}K79#nz7& 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%0Doz&N@>XEpQ`-N|?A0cSv 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%0D^IBGBu2VDmKGH(ZdU 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 QwuAnk-R=L+yIb7<0bFuN7ytkO diff --git a/README.md b/README.md index 68605fc..79dc572 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ SQLClean in other configurations, on the same files: | SQLClean command | Wall time | |---|---:| -| `sqlclean check --select SQC` (every built-in Rule) | 1.33 s | +| `sqlclean check --select SQLCLEAN` (every built-in Rule) | 1.33 s | | `sqlclean check` plus three custom Python Rules | 2.27 s | | `sqlclean check` rerun with nothing changed (result cache) | 0.23 s | @@ -114,7 +114,7 @@ def lowered(operand: ast.Expression) -> bool: @rule( - code="XSQCTEAM001", + code="XSQLCLEANTEAM001", message="Email comparisons must be case-insensitive", remediation="Compare LOWER(email) with LOWER(...) instead.", enabled_by_default=True, diff --git a/benchmarks/linters/README.md b/benchmarks/linters/README.md index e91e37c..8123145 100644 --- a/benchmarks/linters/README.md +++ b/benchmarks/linters/README.md @@ -34,7 +34,7 @@ and peak memory with `/usr/bin/time`, and every lint command writes JSON finding | Variant | Command | |---|---| | `sqlclean` | `sqlclean check --output-format json` (13 default Rules) | -| `sqlclean_all` | `sqlclean check --select SQC --output-format json` (all 45 Rules) | +| `sqlclean_all` | `sqlclean check --select SQLCLEAN --output-format json` (all 45 Rules) | | `sqlclean_custom` | `sqlclean check --config custom.toml --output-format json` (default Rules and the three Python Rules in `rules/`) | | `sqlclean_format` | `sqlclean format --check` | | `sqruff` | `sqruff lint -f json .` | diff --git a/benchmarks/linters/bench.sh b/benchmarks/linters/bench.sh index 643b744..b468d58 100755 --- a/benchmarks/linters/bench.sh +++ b/benchmarks/linters/bench.sh @@ -34,7 +34,7 @@ trap 'rm -rf "$WORK"' EXIT declare -A CMD CMD[sqlclean]="$SQLCLEAN check --output-format json" -CMD[sqlclean_all]="$SQLCLEAN check --select SQC --output-format json" +CMD[sqlclean_all]="$SQLCLEAN check --select SQLCLEAN --output-format json" # The default Rules plus the three Python Rules in rules/, copied into the work directory. CMD[sqlclean_custom]="$SQLCLEAN check --config custom.toml --output-format json" # sqruff's and SQLFluff's default rules include layout; SQLClean checks layout with its formatter. diff --git a/benchmarks/linters/rules/layers.py b/benchmarks/linters/rules/layers.py index f3b25af..7398b34 100644 --- a/benchmarks/linters/rules/layers.py +++ b/benchmarks/linters/rules/layers.py @@ -8,7 +8,7 @@ @rule( - code="XSQCLAYER001", + code="XSQLCLEANLAYER001", message="Mart reads a raw source", remediation="Read the staging model instead.", enabled_by_default=True, @@ -26,7 +26,7 @@ def marts_read_staging(*, statement: Statement, ctx: RuleContext) -> list[Findin @rule( - code="XSQCLAYER002", + code="XSQLCLEANLAYER002", message="Staging model reads another model", remediation="Staging models read only raw sources and seeds.", enabled_by_default=True, @@ -46,7 +46,7 @@ def staging_reads_sources(*, statement: Statement, ctx: RuleContext) -> list[Fin @rule( - code="XSQCDET001", + code="XSQLCLEANDET001", message="Model calls a nondeterministic function", remediation="Pass the time or seed in as a column so reruns give the same rows.", enabled_by_default=True, diff --git a/benchmarks/linters/summarize.py b/benchmarks/linters/summarize.py index f58f32c..772fca7 100644 --- a/benchmarks/linters/summarize.py +++ b/benchmarks/linters/summarize.py @@ -40,7 +40,7 @@ def count_findings(variant: str, out: str) -> tuple[int, int]: data = json.loads(out) if variant.startswith("sqlclean"): codes = [finding["code"] for finding in data["findings"]] - return len(codes), codes.count("SQC999") + return len(codes), codes.count("SQLCLEAN999") if variant == "sqruff": codes = [finding.get("code") for findings in data.values() for finding in findings] return len(codes), sum(1 for code in codes if code in (None, "PRS")) diff --git a/crates/sqlclean-cli/skill/SKILL.md b/crates/sqlclean-cli/skill/SKILL.md index 69ee72e..1e046f7 100644 --- a/crates/sqlclean-cli/skill/SKILL.md +++ b/crates/sqlclean-cli/skill/SKILL.md @@ -1,6 +1,6 @@ --- name: sqlclean -description: ALWAYS load this skill when linting, fixing or formatting SQL with SQLClean, editing sqlclean.toml, writing or testing custom Rules (Python @rule functions with XSQC codes), recording Rule exceptions, or reading SQLClean findings (SQC codes, SQC999 parse errors) in CI, JSON or SARIF output. +description: ALWAYS load this skill when linting, fixing or formatting SQL with SQLClean, editing sqlclean.toml, writing or testing custom Rules (Python @rule functions with XSQLCLEAN codes), recording Rule exceptions, or reading SQLClean findings (SQLCLEAN codes, SQLCLEAN999 parse errors) in CI, JSON or SARIF output. --- @@ -17,7 +17,7 @@ engine extracts from each statement. `[rules]`). Paths in it are relative to its directory. 2. **Check.** `sqlclean check [PATHS]` exits 0 when clean, 1 with findings, 2 on errors. Use `--output-format json` when you need to read findings programmatically. -3. **Explain.** `sqlclean rules SQC001` shows a Rule's message, fix safety and remediation. +3. **Explain.** `sqlclean rules SQLCLEAN001` shows a Rule's message, fix safety and remediation. 4. **Fix.** `sqlclean fix --diff` previews safe fixes plus formatting; `sqlclean fix` writes them. Fixes marked unsafe can change query results, such as `= NULL` becoming `IS NULL`. Never pass `--unsafe-fixes` without the user's say-so. @@ -31,16 +31,16 @@ engine extracts from each statement. `[[rules.rule_exceptions]]` entry with the Rule, path and a `reason`. Use `[[rules.rule_ignores]]` only for whole paths a Rule does not apply to. - An exception that no longer matches a finding is reported as stale; remove it. -- `SQC999` is a parse error. It cannot be ignored: fix the SQL or set the right `dialect`, +- `SQLCLEAN999` is a parse error. It cannot be ignored: fix the SQL or set the right `dialect`, globally or per path under `[[dialects]]`. -- `--select` and `--ignore` take codes or prefixes such as `SQC001` or `SQC`. +- `--select` and `--ignore` take codes or prefixes such as `SQLCLEAN001` or `SQLCLEAN`. - Results are cached in `.sqlclean/cache/`. Use `--no-cache` only when debugging a custom Rule that imports helpers from outside its `[rules] custom` paths. ## Custom Rules - A custom Rule is a function decorated with `@rule` from `sqlclean`, in a file under a path - listed in `[rules] custom`. Its code is `XSQC`, optional capital letters, then three digits. + listed in `[rules] custom`. Its code is `XSQLCLEAN`, optional capital letters, then three digits. - The first keyword parameter names the subject: `statement: Statement`, `file: SqlFile` or `repository: Repository`. The second is `ctx: RuleContext`. - Return `ctx.finding(...)` values. Fixes are lists of `ctx.replace`, `ctx.insert_before`, diff --git a/crates/sqlclean-cli/skill/references/docs/benchmarks.md b/crates/sqlclean-cli/skill/references/docs/benchmarks.md index 3b48db7..6621d0d 100644 --- a/crates/sqlclean-cli/skill/references/docs/benchmarks.md +++ b/crates/sqlclean-cli/skill/references/docs/benchmarks.md @@ -14,7 +14,7 @@ SQLFluff ran once. | Command | Wall time | CPU time | Peak memory | vs SQLClean defaults | |---|---:|---:|---:|---:| | `sqlclean check` (13 default Rules) | **0.81 s** | 2.5 s | 48 MiB | 1× | -| `sqlclean check --select SQC` (all 45 Rules) | **1.33 s** | 3.8 s | 140 MiB | 1.6× | +| `sqlclean check --select SQLCLEAN` (all 45 Rules) | **1.33 s** | 3.8 s | 140 MiB | 1.6× | | `sqlclean check` with three [custom Rules](#custom-rules) | **2.27 s** | 6.9 s | 182 MiB | 2.8× | | `sqlclean format --check` | **3.03 s** | 11.5 s | 49 MiB | 3.7× | | `sqruff lint` | 41.0 s | 114 s | 235 MiB | 51× | diff --git a/crates/sqlclean-cli/skill/references/docs/cli/check.md b/crates/sqlclean-cli/skill/references/docs/cli/check.md index 8e0ff69..ff4ca72 100644 --- a/crates/sqlclean-cli/skill/references/docs/cli/check.md +++ b/crates/sqlclean-cli/skill/references/docs/cli/check.md @@ -29,7 +29,7 @@ sqlclean check [OPTIONS] [PATHS]... ```bash sqlclean check # every matching file under the configuration root sqlclean check models/orders.sql reports/ # only these files and directories -sqlclean check --select SQC001,SQC004 # only these Rules +sqlclean check --select SQLCLEAN001,SQLCLEAN004 # only these Rules sqlclean check --output-format sarif > sqlclean.sarif ``` @@ -50,20 +50,20 @@ when `include` does not match it, unless `exclude` does. See | `--config ` | Use this configuration file instead of the nearest `sqlclean.toml` | `--select` and `--ignore` take a comma-separated list, or the flag repeated. A value is an exact -code such as `SQC001` or a prefix such as `SQC` or `XSQCNAME`. A value that matches no Rule is an +code such as `SQLCLEAN001` or a prefix such as `SQLCLEAN` or `XSQLCLEANNAME`. A value that matches no Rule is an error. See [Selecting Rules](../rules/overview.md#selecting-rules). ## Text output ```text -error[SQC004]: Row selection is nondeterministic +error[SQLCLEAN004]: Row selection is nondeterministic --> models/customers.sql:6:1 | 6 | LIMIT 10; | ^^^^^ = help: Add ORDER BY with a deterministic tie-breaker before LIMIT or OFFSET. -error[SQC001]: Comparison with NULL is never true +error[SQLCLEAN001]: Comparison with NULL is never true --> models/orders.sql:8:22 | 8 | WHERE o.cancelled_at = NULL @@ -71,7 +71,7 @@ error[SQC001]: Comparison with NULL is never true = help: Use IS NULL or IS NOT NULL when testing for NULL. = fix: available with `sqlclean fix --unsafe-fixes` -error: stale rule exception: SQC004 in models/orders.sql matches no finding; remove it from sqlclean.toml +error: stale rule exception: SQLCLEAN004 in models/orders.sql matches no finding; remove it from sqlclean.toml Found 3 problems (1 fixable with `sqlclean fix --unsafe-fixes`). ``` @@ -92,7 +92,7 @@ and count characters, not bytes. { "findings": [ { - "code": "SQC004", + "code": "SQLCLEAN004", "path": "models/customers.sql", "line": 6, "column": 1, @@ -103,7 +103,7 @@ and count characters, not bytes. "fix": null }, { - "code": "SQC001", + "code": "SQLCLEAN001", "path": "models/orders.sql", "line": 8, "column": 22, @@ -116,7 +116,7 @@ and count characters, not bytes. ], "stale_exceptions": [ { - "rule": "SQC004", + "rule": "SQLCLEAN004", "path": "models/orders.sql", "relation": null } @@ -140,7 +140,7 @@ text: ```json { - "ruleId": "SQC001", + "ruleId": "SQLCLEAN001", "level": "error", "message": { "text": "Comparison with NULL is never true. Use IS NULL or IS NOT NULL when testing for NULL." diff --git a/crates/sqlclean-cli/skill/references/docs/cli/fix.md b/crates/sqlclean-cli/skill/references/docs/cli/fix.md index 9e1e033..ac7e56f 100644 --- a/crates/sqlclean-cli/skill/references/docs/cli/fix.md +++ b/crates/sqlclean-cli/skill/references/docs/cli/fix.md @@ -36,14 +36,14 @@ Files are chosen as for [`sqlclean check`](check.md). | `--no-cache` | Evaluate every file instead of reusing results for unchanged inputs | | `--config ` | Use this configuration file instead of the nearest `sqlclean.toml` | -Only fixes of selected Rules apply. `sqlclean fix --select SQC005` removes unused CTEs and +Only fixes of selected Rules apply. `sqlclean fix --select SQLCLEAN005` removes unused CTEs and formats the files, and leaves every other finding alone. ## Output ```text Fixed 1 problem(s) and changed 1 file(s). -error[SQC001]: Comparison with NULL is never true +error[SQLCLEAN001]: Comparison with NULL is never true --> models/open_orders.sql:7:24 | 7 | WHERE cancelled_at = NULL @@ -88,7 +88,7 @@ findings: formatter cannot format is reported as `: could not format: ` and keeps its fixes. A file that does not parse gets no fixes and is reported as -[`SQC999`](../rules/overview.md#parse-errors-sqc999). +[`SQLCLEAN999`](../rules/overview.md#parse-errors-sqlclean999). ## Exit codes diff --git a/crates/sqlclean-cli/skill/references/docs/cli/rules.md b/crates/sqlclean-cli/skill/references/docs/cli/rules.md index 2b80af8..f8fd032 100644 --- a/crates/sqlclean-cli/skill/references/docs/cli/rules.md +++ b/crates/sqlclean-cli/skill/references/docs/cli/rules.md @@ -26,9 +26,9 @@ sqlclean rules [OPTIONS] [CODE] ```bash sqlclean rules # list every Rule -sqlclean rules SQC001 # show one Rule +sqlclean rules SQLCLEAN001 # show one Rule sqlclean rules --json # every Rule as JSON -sqlclean rules --json SQC001 # one Rule as JSON +sqlclean rules --json SQLCLEAN001 # one Rule as JSON ``` ## Flags @@ -42,14 +42,14 @@ sqlclean rules --json SQC001 # one Rule as JSON ## Listing Rules ```text -SQC001 default Comparison with NULL is never true -SQC002 default Comma-separated sources create an implicit cartesian join -SQC003 default Non-cross join has no meaningful condition -SQC004 default Row selection is nondeterministic +SQLCLEAN001 default Comparison with NULL is never true +SQLCLEAN002 default Comma-separated sources create an implicit cartesian join +SQLCLEAN003 default Non-cross join has no meaningful condition +SQLCLEAN004 default Row selection is nondeterministic ... -SQC045 JSON payload is parsed more than once in one SELECT -XSQCNAME001 default Query reads a temporary table -XSQCSTYLE001 default COUNT(1) should be COUNT(*) +SQLCLEAN045 JSON payload is parsed more than once in one SELECT +XSQLCLEANNAME001 default Query reads a temporary table +XSQLCLEANSTYLE001 default COUNT(1) should be COUNT(*) ``` `default` marks the Rules that run when `[rules] select` is not set. See @@ -59,11 +59,11 @@ XSQCSTYLE001 default COUNT(1) should be COUNT(*) ## Showing one Rule ```bash -sqlclean rules SQC001 +sqlclean rules SQLCLEAN001 ``` ```text -SQC001: Comparison with NULL is never true +SQLCLEAN001: Comparison with NULL is never true Subject: statement Enabled by default: yes Fixable: unsafe @@ -73,7 +73,7 @@ Remediation: Use IS NULL or IS NOT NULL when testing for NULL. A custom Rule also shows the Python module that defines it: ```text -XSQCSTYLE001: COUNT(1) should be COUNT(*) +XSQLCLEANSTYLE001: COUNT(1) should be COUNT(*) Subject: statement Enabled by default: yes Defined in: sql_rules.naming @@ -86,13 +86,13 @@ Remediation: Write COUNT(*). ## JSON output ```bash -sqlclean rules --json XSQCNAME001 +sqlclean rules --json XSQLCLEANNAME001 ``` ```json [ { - "code": "XSQCNAME001", + "code": "XSQLCLEANNAME001", "message": "Query reads a temporary table", "remediation": "Read from the published table instead.", "enabled_by_default": true, diff --git a/crates/sqlclean-cli/skill/references/docs/configuration.md b/crates/sqlclean-cli/skill/references/docs/configuration.md index 5a26208..4e8d21f 100644 --- a/crates/sqlclean-cli/skill/references/docs/configuration.md +++ b/crates/sqlclean-cli/skill/references/docs/configuration.md @@ -31,25 +31,25 @@ line_width = 100 indent = 4 [rules] -select = ["SQC"] # omit to run the Rules enabled by default -ignore = ["SQC027"] +select = ["SQLCLEAN"] # omit to run the Rules enabled by default +ignore = ["SQLCLEAN027"] custom = ["sql_rules"] # Python files or directories that define custom Rules [rules.thresholds] -max_literal_length = 100 # SQC044 -max_ranking_order_by = 5 # SQC043 +max_literal_length = 100 # SQLCLEAN044 +max_ranking_order_by = 5 # SQLCLEAN043 -[rules.rule_options.XSQCNAME001] +[rules.rule_options.XSQLCLEANNAME001] prefixes = ["tmp_", "scratch_"] [[rules.rule_exceptions]] # one reviewed finding that is allowed -rule = "SQC038" +rule = "SQLCLEAN038" path = "models/calendar.sql" relation = "dates" reason = "Every pair of dates is needed." [[rules.rule_ignores]] # Rules that do not apply to some paths -rules = ["SQC034"] +rules = ["SQLCLEAN034"] paths = ["scratch/**"] reason = "Exploratory queries." ``` @@ -76,8 +76,8 @@ directory is the root. | `[rules] select` | Rules enabled by default | Rule codes or prefixes to run | | `[rules] ignore` | `[]` | Rule codes or prefixes to skip | | `[rules] custom` | `[]` | Python files or directories that define [custom Rules](custom-rules/overview.md) | -| `[rules.thresholds] max_literal_length` | `100` | The longest string literal `SQC044` allows | -| `[rules.thresholds] max_ranking_order_by` | `5` | The most `ORDER BY` expressions `SQC043` allows in a ranking window | +| `[rules.thresholds] max_literal_length` | `100` | The longest string literal `SQLCLEAN044` allows | +| `[rules.thresholds] max_ranking_order_by` | `5` | The most `ORDER BY` expressions `SQLCLEAN043` allows in a ranking window | | `[rules.rule_options.]` | none | Option values of one custom Rule; see [Options](custom-rules/fixes-and-options.md#options) | | `[[rules.rule_exceptions]]` | none | One allowed finding; see [Exceptions](rules/overview.md#exceptions) | | `[[rules.rule_ignores]]` | none | Rules that do not apply to some paths; see [Path ignores](rules/overview.md#path-ignores) | @@ -112,7 +112,7 @@ dialect = "tsql" ``` A file that does not parse under its dialect is reported as -[`SQC999`](rules/overview.md#parse-errors-sqc999), with the dialect in the message. Without +[`SQLCLEAN999`](rules/overview.md#parse-errors-sqlclean999), with the dialect in the message. Without the `[[dialects]]` entry above, this T-SQL file under `reports/` is parsed as `duckdb`: ```sql @@ -120,7 +120,7 @@ SELECT [order id] FROM orders ``` ```text -error[SQC999]: SQL could not be parsed as duckdb: Parse error at line 1, column 17: Expected RBracket, got Var ('id') near [SELECT [order id] FROM orders] +error[SQLCLEAN999]: SQL could not be parsed as duckdb: Parse error at line 1, column 17: Expected RBracket, got Var ('id') near [SELECT [order id] FROM orders] ``` Supported dialects, case-insensitive: @@ -178,11 +178,11 @@ report any finding. | `line_width` of `0` | `sqlclean.toml: [format] line_width must be positive` | | `indent` of `0` or more than `8` | `sqlclean.toml: [format] indent must be between 1 and 8` | | A threshold of `0` | `sqlclean.toml: [rules.thresholds] max_literal_length and max_ranking_order_by must be positive` | -| An exception or ignore without a reason | `sqlclean.toml: rule exception or ignore for SQC001 needs a reason` | -| An exception with `cte` but no `relation` | `sqlclean.toml: rule exception for SQC038 at models/calendar.sql sets cte without relation` | +| An exception or ignore without a reason | `sqlclean.toml: rule exception or ignore for SQLCLEAN001 needs a reason` | +| An exception with `cte` but no `relation` | `sqlclean.toml: rule exception for SQLCLEAN038 at models/calendar.sql sets cte without relation` | | A `custom` path that does not exist | `[rules] custom path does not exist: sql_rules` | -| `rule_options` for a built-in Rule | `[rules.rule_options.SQC001]: built-in Rules take no options; set limits in [rules.thresholds]` | -| `rule_options` for a code no custom Rule has | `[rules.rule_options.XSQCNOPE001]: no custom Rule has this code` | -| A selector that matches no Rule | `Rule selector 'SQC9' matches no Rule` | +| `rule_options` for a built-in Rule | `[rules.rule_options.SQLCLEAN001]: built-in Rules take no options; set limits in [rules.thresholds]` | +| `rule_options` for a code no custom Rule has | `[rules.rule_options.XSQLCLEANNOPE001]: no custom Rule has this code` | +| A selector that matches no Rule | `Rule selector 'SQLCLEAN9' matches no Rule` | Errors are printed as `sqlclean: error: `. diff --git a/crates/sqlclean-cli/skill/references/docs/custom-rules/fixes-and-options.md b/crates/sqlclean-cli/skill/references/docs/custom-rules/fixes-and-options.md index e3f6c1f..850834e 100644 --- a/crates/sqlclean-cli/skill/references/docs/custom-rules/fixes-and-options.md +++ b/crates/sqlclean-cli/skill/references/docs/custom-rules/fixes-and-options.md @@ -23,7 +23,7 @@ A fix is a list of edits to the file. Declare `fixable` on the Rule, then pass t from sqlclean import FixSafety, Finding, RuleContext, Statement, rule @rule( - code="XSQCSTYLE001", + code="XSQLCLEANSTYLE001", message="COUNT(1) should be COUNT(*)", remediation="Write COUNT(*).", fixable=FixSafety.SAFE, @@ -42,7 +42,7 @@ A function call is located at its name, so `f.end + 1` is the first character in parentheses. ```bash -sqlclean fix --diff --select XSQCSTYLE +sqlclean fix --diff --select XSQLCLEANSTYLE ``` ```diff @@ -81,7 +81,7 @@ edit must lie inside the finding's file. See [Safe and unsafe fixes](../rules/overview.md#safe-and-unsafe-fixes). A finding without `fix` has no fix, even in a fixable Rule. A Rule that returns a fix without -declaring `fixable` fails with `Rule XSQCSTYLE001 returned a fix but does not declare fixable`. +declaring `fixable` fails with `Rule XSQLCLEANSTYLE001 returned a fix but does not declare fixable`. ### How fixes combine @@ -107,7 +107,7 @@ PREFIXES = RuleOption.string_list( ) @rule( - code="XSQCNAME001", + code="XSQLCLEANNAME001", message="Query reads a temporary table", remediation="Read from the published table instead.", options=(PREFIXES,), @@ -123,7 +123,7 @@ def temporary_table(*, statement: Statement, ctx: RuleContext) -> list[Finding]: ``` ```toml -[rules.rule_options.XSQCNAME001] +[rules.rule_options.XSQLCLEANNAME001] prefixes = ["tmp_", "scratch_"] ``` @@ -147,12 +147,12 @@ exit code `2`: | Problem | Error | |---------|-------| -| A value of the wrong type | `[rules.rule_options.XSQCNAME001] option prefixes expects a list, got 'tmp_'` | -| An integer out of bounds | `[rules.rule_options.XSQCFILE002] option max_statements must be at least 1` | -| A string outside `choices` | `[rules.rule_options.XSQCFILE002] option style must be one of ['strict', 'loose']` | -| A name the Rule does not declare | `Rule XSQCNAME001 has no option prefix` | -| A code no custom Rule has | `[rules.rule_options.XSQCNOPE001]: no custom Rule has this code` | -| A Rule that reads an option it did not declare | `Rule XSQCFILE002 reads undeclared option verbose` | +| A value of the wrong type | `[rules.rule_options.XSQLCLEANNAME001] option prefixes expects a list, got 'tmp_'` | +| An integer out of bounds | `[rules.rule_options.XSQLCLEANFILE002] option max_statements must be at least 1` | +| A string outside `choices` | `[rules.rule_options.XSQLCLEANFILE002] option style must be one of ['strict', 'loose']` | +| A name the Rule does not declare | `Rule XSQLCLEANNAME001 has no option prefix` | +| A code no custom Rule has | `[rules.rule_options.XSQLCLEANNOPE001]: no custom Rule has this code` | +| A Rule that reads an option it did not declare | `Rule XSQLCLEANFILE002 reads undeclared option verbose` | Built-in Rules take no options. Their two limits are set in [`[rules.thresholds]`](../rules/overview.md#thresholds). diff --git a/crates/sqlclean-cli/skill/references/docs/custom-rules/overview.md b/crates/sqlclean-cli/skill/references/docs/custom-rules/overview.md index 7793d4e..de3a62d 100644 --- a/crates/sqlclean-cli/skill/references/docs/custom-rules/overview.md +++ b/crates/sqlclean-cli/skill/references/docs/custom-rules/overview.md @@ -26,7 +26,7 @@ output and cache as the built-in Rules. from sqlclean import Finding, RuleContext, Statement, rule @rule( - code="XSQCNAME001", + code="XSQLCLEANNAME001", message="Query reads a temporary table", remediation="Read from the published table instead.", enabled_by_default=True, @@ -47,7 +47,7 @@ custom = ["sql_rules"] ``` ```text -error[XSQCNAME001]: Query reads a temporary table +error[XSQLCLEANNAME001]: Query reads a temporary table --> models/orders.sql:2:6 | 2 | FROM tmp_orders @@ -66,13 +66,13 @@ functions, constants and classes stay ordinary Python. - Modules are imported by their path from the configuration root: `sql_rules/naming.py` is `sql_rules.naming`. A Rule module can import a helper the same way, for example `from sql_rules.helpers import table_prefixes`. -- Two Rules with the same code are an error: `custom Rule code XSQCNAME001 is defined twice`. +- Two Rules with the same code are an error: `custom Rule code XSQLCLEANNAME001 is defined twice`. ## Declaring a Rule | `@rule` argument | Default | Description | |------------------|---------|-------------| -| `code` | required | `XSQC`, optional capital letters, and three digits, such as `XSQCNAME001` | +| `code` | required | `XSQLCLEAN`, optional capital letters, and three digits, such as `XSQLCLEANNAME001` | | `message` | required | The finding message | | `remediation` | required | What to do about a finding | | `enabled_by_default` | `False` | Run the Rule when `[rules] select` is not set | @@ -81,7 +81,7 @@ functions, constants and classes stay ordinary Python. | `slug` | the code in lower case | A short name for the Rule | A Rule that is not enabled by default runs when `select` names it, by code or by a prefix such as -`XSQC` or `XSQCNAME`. See [Selecting Rules](../rules/overview.md#selecting-rules). Fixes and +`XSQLCLEAN` or `XSQLCLEANNAME`. See [Selecting Rules](../rules/overview.md#selecting-rules). Fixes and options are covered in [Fixes and options](fixes-and-options.md). ## Choosing a subject @@ -101,7 +101,7 @@ from collections import Counter from sqlclean import Finding, Repository, RuleContext, SqlFile, rule @rule( - code="XSQCFILE001", + code="XSQLCLEANFILE001", message="File holds more than one statement", remediation="Split the file so each holds one statement.", ) @@ -109,7 +109,7 @@ def one_statement(*, file: SqlFile, ctx: RuleContext) -> list[Finding]: return [ctx.finding(subject=file)] if len(file.statements) > 1 else [] @rule( - code="XSQCREPO001", + code="XSQLCLEANREPO001", message="Two files define a CTE with the same name", remediation="Give each CTE a name that is unique across files.", ) @@ -146,7 +146,7 @@ A Repository Rule passes the statement or file each finding belongs to as `subje ## How Rules run - Custom Rules run after the built-in Rules, on files that parse. A file with a - [parse error](../rules/overview.md#parse-errors-sqc999) gets no custom Rule findings. + [parse error](../rules/overview.md#parse-errors-sqlclean999) gets no custom Rule findings. - From 500 files, Statement and File Rules split the files across one Python process per CPU. A Rule can't share state between files, so anything that spans files belongs in a Repository Rule, which always runs in one process with every file. @@ -179,12 +179,12 @@ A Rule that cannot load or run stops the command with exit code `2`: | Problem | Error | |---------|-------| -| An invalid code | `custom Rule code must be XSQC, optional capital letters and 3 digits, such as XSQCNAME001: XSQC01` | -| A wrong signature | `custom Rule XSQCBAD001 must accept exactly one typed Statement, SqlFile or Repository subject and one typed RuleContext, both keyword-only` | +| An invalid code | `custom Rule code must be XSQLCLEAN, optional capital letters and 3 digits, such as XSQLCLEANNAME001: XSQLCLEAN01` | +| A wrong signature | `custom Rule XSQLCLEANBAD001 must accept exactly one typed Statement, SqlFile or Repository subject and one typed RuleContext, both keyword-only` | | A module that fails to import | `could not import custom Rule module sql_rules.bad: ` | -| An exception in the Rule | `custom Rule XSQCBAD001 failed on models/a.sql: IndexError: tuple index out of range`, then the traceback | -| A return value that is not a list of findings | `custom Rule XSQCRET001 must return a list of findings from ctx.finding(...)` | -| A fix from a Rule without `fixable` | `Rule XSQCBAD001 returned a fix but does not declare fixable` | +| An exception in the Rule | `custom Rule XSQLCLEANBAD001 failed on models/a.sql: IndexError: tuple index out of range`, then the traceback | +| A return value that is not a list of findings | `custom Rule XSQLCLEANRET001 must return a list of findings from ctx.finding(...)` | +| A fix from a Rule without `fixable` | `Rule XSQLCLEANBAD001 returned a fix but does not declare fixable` | ## Continue diff --git a/crates/sqlclean-cli/skill/references/docs/custom-rules/statement-facts.md b/crates/sqlclean-cli/skill/references/docs/custom-rules/statement-facts.md index 49828ae..b029079 100644 --- a/crates/sqlclean-cli/skill/references/docs/custom-rules/statement-facts.md +++ b/crates/sqlclean-cli/skill/references/docs/custom-rules/statement-facts.md @@ -29,7 +29,7 @@ carries its position, so a finding can point at it and a fix can replace it. from sqlclean import Finding, RuleContext, Statement, rule @rule( - code="XSQCJOIN001", + code="XSQLCLEANJOIN001", message="Join to customers has no condition", remediation="Join customers on customer_id.", ) diff --git a/crates/sqlclean-cli/skill/references/docs/custom-rules/testing.md b/crates/sqlclean-cli/skill/references/docs/custom-rules/testing.md index 2c10112..b32bbcf 100644 --- a/crates/sqlclean-cli/skill/references/docs/custom-rules/testing.md +++ b/crates/sqlclean-cli/skill/references/docs/custom-rules/testing.md @@ -143,7 +143,7 @@ and does not format the result. It shows exactly what the Rule's fix changes. | Problem | Message | |---------|---------| | A different number of findings | `reads orders: expected 1 findings, got 0` | -| Findings that depend on file order | `custom Rule XSQCND001 is not deterministic` | +| Findings that depend on file order | `custom Rule XSQLCLEANND001 is not deterministic` | | Case SQL that does not parse | `sqlclean could not parse the case SQL: sqlclean: error: Parse error at line 1, column 18: ...` | | A function without `@rule` | `evaluate_rule needs a function decorated with @rule` | | No `sqlclean` executable | `the sqlclean executable is not installed; install sqlclean` | @@ -163,7 +163,7 @@ The usual cause is state kept between calls, such as a module-level set of names ```python SEEN: set[str] = set() -@rule(code="XSQCND001", message="Table read in an earlier file", remediation="...") +@rule(code="XSQLCLEANND001", message="Table read in an earlier file", remediation="...") def seen_before(*, statement: Statement, ctx: RuleContext) -> list[Finding]: found = [ctx.finding(subject=statement, node=t) for t in statement.tables if t.name in SEEN] SEEN.update(t.name for t in statement.tables) @@ -171,7 +171,7 @@ def seen_before(*, statement: Statement, ctx: RuleContext) -> list[Finding]: ``` ```text -RuleCaseError: custom Rule XSQCND001 is not deterministic +RuleCaseError: custom Rule XSQLCLEANND001 is not deterministic ``` Compute findings from the subject and `ctx` alone. When a Rule needs to compare files, give it a diff --git a/crates/sqlclean-cli/skill/references/docs/embedding.md b/crates/sqlclean-cli/skill/references/docs/embedding.md index e8e4a90..231da35 100644 --- a/crates/sqlclean-cli/skill/references/docs/embedding.md +++ b/crates/sqlclean-cli/skill/references/docs/embedding.md @@ -11,6 +11,7 @@ Online: https://sqlclean.io/docs/embedding/ - Adding the dependency - Entry points - Lint requests +- Template code - Fixes - Formatting - Statement facts @@ -30,7 +31,7 @@ fn main() -> Result<(), String> { version: LINT_API_VERSION, sql: "SELECT order_id FROM orders WHERE cancelled_at = NULL LIMIT 10".to_owned(), dialect: "duckdb".to_owned(), - enabled_rules: Some(vec!["SQC001".to_owned(), "SQC004".to_owned()]), + enabled_rules: Some(vec!["SQLCLEAN001".to_owned(), "SQLCLEAN004".to_owned()]), ..LintRequest::default() }; let response: LintResponse = lint(request)?; @@ -45,9 +46,9 @@ fn main() -> Result<(), String> { ``` ```text -SQC001 47..48 Comparison with NULL is never true +SQLCLEAN001 47..48 Comparison with NULL is never true fix: replace 47..48 with "IS" -SQC004 54..59 Row selection is nondeterministic +SQLCLEAN004 54..59 Row selection is nondeterministic ``` ## Adding the dependency @@ -87,21 +88,49 @@ the dialect. Offsets in requests, findings, edits and facts count Unicode charac | `dialect` | required | A [dialect name](configuration.md#dialects) | | `enabled_rules` | the default Rules | Rule codes or prefixes to run | | `ignored_rules` | `[]` | Rule codes or prefixes to skip | -| `max_literal_length` | `100` | The `SQC044` limit | -| `max_ranking_order_by` | `5` | The `SQC043` limit | +| `max_literal_length` | `100` | The `SQLCLEAN044` limit | +| `max_ranking_order_by` | `5` | The `SQLCLEAN043` limit | | `config_file` | `sqlclean.toml` | The configuration file name that remediation text refers to | -| `externally_referenced_ctes` | `[]` | CTE names that something outside the SQL reads, so `SQC005` does not report them | -| `relation_keys` | `{}` | Declared unique keys by relation name; an empty key means the relation holds at most one row, so `SQC038` does not report a cross join with it | - -Other fields describe template code the host has replaced before linting. See `LintRequest` in -`sql_lint::models`. - -A selector that matches no Rule is an error: `unknown native lint rule 'SQC9'`. +| `externally_referenced_ctes` | `[]` | CTE names that something outside the SQL reads, so `SQLCLEAN005` does not report them | +| `relation_keys` | `{}` | Unique keys by table name as the SQL writes it, compared without case; an empty key means the relation holds at most one row, so `SQLCLEAN038` does not report a cross join with it and `SQLCLEAN018` can prove a ranking order | +| `relation_names` | `{}` | The relation each placeholder table name stands for, so `SQLCLEAN038` messages and exceptions name it | +| `external_identifiers` | `[]` | Names the host defines outside the SQL, which are not unknown qualifiers | +| `dependency_identifiers` | `[]` | Placeholder table names that stand for other relations | +| `sql_macro_outputs` | `[]` | The character range each macro call's output fills and the relations it passes, so qualification is judged as the macro wrote it | +| `allows_dynamic_output_star` | `false` | The host proved the output columns, so a top-level `SELECT *` passes `SQLCLEAN021` | +| `fixture_harness` | absent | The generated wrapper around a test or macro body; see [Template code](#template-code) | + +A selector that matches no Rule is an error: `unknown native lint rule 'SQLCLEAN9'`. + +## Template code + +A host that lints templated SQL replaces each template expression with a placeholder before +linting, and maps offsets back afterwards. The crate exports the placeholder prefixes in +`constants`: + +| Constant | Stands for | +|----------|------------| +| `INTERPOLATION_PLACEHOLDER_PREFIX` | An interpolated expression, relation or CTE list; the formatter keeps it in place | +| `MACRO_PARAMETER_PLACEHOLDER_PREFIX` | A macro parameter; `SQLCLEAN028` treats `parameter.slot` reads as written by the macro | +| `RELATION_PARAMETER_PLACEHOLDER_PREFIX` | A relation parameter, written `__`; `SELECT *` from it alone passes `SQLCLEAN021` | +| `VALUE_PARAMETER_PLACEHOLDER_PREFIX` | A value parameter | + +Rules never judge a placeholder as an authored name. + +`fixture_harness` describes the query a test runner or macro wraps around a body. When it is +present, a terminal `SELECT 1` is ceremonial: it passes `SQLCLEAN022` and `SQLCLEAN035`, and `SQLCLEAN041` and +`SQLCLEAN042` do not apply. + +| Field | Description | +|-------|-------------| +| `cte_prefixes` | Prefixes of the CTE names the harness generates, which `SQLCLEAN005` treats as reachable | +| `input_cte_prefixes` | Prefixes of the CTEs standing in for the body's inputs | +| `empty_relation` | The table function an input CTE reads with `SELECT * FROM ()` when it has no rows, which passes `SQLCLEAN021` | ## Fixes `LintDiagnostic.fix` holds at most one edit: `start`, `end` and `replacement`. The engine does not -say whether a fix is safe. The `sqlclean` command treats the `SQC001` fix as unsafe, because +say whether a fix is safe. The `sqlclean` command treats the `SQLCLEAN001` fix as unsafe, because turning `= NULL` into `IS NULL` changes which rows match, and every other built-in fix as safe. A host that applies fixes makes the same decision. See [Safe and unsafe fixes](rules/overview.md#safe-and-unsafe-fixes). diff --git a/crates/sqlclean-cli/skill/references/docs/formatting.md b/crates/sqlclean-cli/skill/references/docs/formatting.md index c6d51b1..7f42db6 100644 --- a/crates/sqlclean-cli/skill/references/docs/formatting.md +++ b/crates/sqlclean-cli/skill/references/docs/formatting.md @@ -197,4 +197,4 @@ j.sql: could not format: Parse error at line 1, column 16: Expected Colon, got R other file as usual. Fix the SQL, set the file's dialect with [`[[dialects]]`](configuration.md#dialects), or [`exclude`](configuration.md#choosing-files) the file. `sqlclean check` reports the same file as -[`SQC999`](rules/overview.md#parse-errors-sqc999). +[`SQLCLEAN999`](rules/overview.md#parse-errors-sqlclean999). diff --git a/crates/sqlclean-cli/skill/references/docs/index.md b/crates/sqlclean-cli/skill/references/docs/index.md index 42d7053..e8a82c2 100644 --- a/crates/sqlclean-cli/skill/references/docs/index.md +++ b/crates/sqlclean-cli/skill/references/docs/index.md @@ -16,7 +16,7 @@ sqlclean check ``` ```text -error[SQC001]: Comparison with NULL is never true +error[SQLCLEAN001]: Comparison with NULL is never true --> models/open_orders.sql:1:77 | 1 | with open_orders as (select order_id, amount from orders where cancelled_at = null), @@ -24,7 +24,7 @@ error[SQC001]: Comparison with NULL is never true = help: Use IS NULL or IS NOT NULL when testing for NULL. = fix: available with `sqlclean fix --unsafe-fixes` -error[SQC005]: CTE is unreachable from the final query +error[SQLCLEAN005]: CTE is unreachable from the final query --> models/open_orders.sql:2:1 | 2 | refunds as (select order_id from payments where amount < 0) diff --git a/crates/sqlclean-cli/skill/references/docs/quickstart.md b/crates/sqlclean-cli/skill/references/docs/quickstart.md index d08c635..ee8f369 100644 --- a/crates/sqlclean-cli/skill/references/docs/quickstart.md +++ b/crates/sqlclean-cli/skill/references/docs/quickstart.md @@ -49,7 +49,7 @@ sqlclean check ``` ```text -error[SQC001]: Comparison with NULL is never true +error[SQLCLEAN001]: Comparison with NULL is never true --> models/open_orders.sql:1:90 | 1 | with open_orders as (select order_id, customer_id, amount from orders where cancelled_at = null), @@ -57,7 +57,7 @@ error[SQC001]: Comparison with NULL is never true = help: Use IS NULL or IS NOT NULL when testing for NULL. = fix: available with `sqlclean fix --unsafe-fixes` -error[SQC005]: CTE is unreachable from the final query +error[SQLCLEAN005]: CTE is unreachable from the final query --> models/open_orders.sql:2:1 | 2 | refunds as (select order_id from payments where amount < 0) @@ -65,7 +65,7 @@ error[SQC005]: CTE is unreachable from the final query = help: Reference the CTE from the final query or another reachable CTE, or remove it. = fix: available with `sqlclean fix` -error[SQC004]: Row selection is nondeterministic +error[SQLCLEAN004]: Row selection is nondeterministic --> models/open_orders.sql:3:55 | 3 | select order_id, customer_id, amount from open_orders limit 100 @@ -89,7 +89,7 @@ sqlclean fix ```text Fixed 1 problem(s) and changed 1 file(s). -error[SQC001]: Comparison with NULL is never true +error[SQLCLEAN001]: Comparison with NULL is never true --> models/open_orders.sql:7:24 | 7 | WHERE cancelled_at = NULL @@ -97,7 +97,7 @@ error[SQC001]: Comparison with NULL is never true = help: Use IS NULL or IS NOT NULL when testing for NULL. = fix: available with `sqlclean fix --unsafe-fixes` -error[SQC004]: Row selection is nondeterministic +error[SQLCLEAN004]: Row selection is nondeterministic --> models/open_orders.sql:15:1 | 15 | LIMIT 100 @@ -115,7 +115,7 @@ it: sqlclean fix --unsafe-fixes ``` -`SQC004` has no fix: only you know which column makes the order deterministic. Add +`SQLCLEAN004` has no fix: only you know which column makes the order deterministic. Add `ORDER BY order_id` before `LIMIT 100`, then run `sqlclean fix` once more to format the new clause. The file is now: @@ -169,28 +169,28 @@ every built-in Rule: dialect = "duckdb" [rules] -select = ["SQC"] +select = ["SQLCLEAN"] ``` -`SQC` is a prefix, so it selects all 53 built-in Rules. Three of the opt-in structure Rules now +`SQLCLEAN` is a prefix, so it selects all 53 built-in Rules. Three of the opt-in structure Rules now report the file: ```text -error[SQC041]: Only the last top-level CTE may be named final, and it must use that name +error[SQLCLEAN041]: Only the last top-level CTE may be named final, and it must use that name --> models/open_orders.sql:1:6 | 1 | WITH open_orders AS ( | ^^^^^^^^^^^ - = help: Name the last top-level CTE final and rename any other final CTE; SQC035 checks the terminal SELECT. + = help: Name the last top-level CTE final and rename any other final CTE; SQLCLEAN035 checks the terminal SELECT. -error[SQC034]: Query keeps transformation logic outside top-level CTEs +error[SQLCLEAN034]: Query keeps transformation logic outside top-level CTEs --> models/open_orders.sql:10:1 | 10 | SELECT | ^^^^^^ = help: Move transformation logic into named top-level CTEs before the terminal SELECT. -error[SQC035]: Terminal SELECT does not read plainly from the final top-level CTE +error[SQLCLEAN035]: Terminal SELECT does not read plainly from the final top-level CTE --> models/open_orders.sql:10:1 | 10 | SELECT @@ -206,8 +206,8 @@ Follow them, or skip the ones your team does not want: dialect = "duckdb" [rules] -select = ["SQC"] -ignore = ["SQC034", "SQC035", "SQC041"] +select = ["SQLCLEAN"] +ignore = ["SQLCLEAN034", "SQLCLEAN035", "SQLCLEAN041"] ``` ```text diff --git a/crates/sqlclean-cli/skill/references/docs/rules/overview.md b/crates/sqlclean-cli/skill/references/docs/rules/overview.md index 4794250..8475f9c 100644 --- a/crates/sqlclean-cli/skill/references/docs/rules/overview.md +++ b/crates/sqlclean-cli/skill/references/docs/rules/overview.md @@ -13,14 +13,14 @@ Online: https://sqlclean.io/docs/rules/overview/ - Thresholds - Exceptions - Path ignores -- Parse errors (SQC999) +- Parse errors (SQLCLEAN999) - Safe and unsafe fixes - Caching - Continue A Rule is one check over SQL. It reports a finding at an exact position, with a message, a -remediation, and sometimes a fix. SQLClean has 53 built-in Rules with `SQC###` codes, and runs -[custom Rules](../custom-rules/overview.md) written in Python with `XSQC` codes. +remediation, and sometimes a fix. SQLClean has 53 built-in Rules with `SQLCLEAN###` codes, and runs +[custom Rules](../custom-rules/overview.md) written in Python with `XSQLCLEAN` codes. Consider a query that returns an arbitrary hundred rows: @@ -35,7 +35,7 @@ sqlclean check ``` ```text -error[SQC004]: Row selection is nondeterministic +error[SQLCLEAN004]: Row selection is nondeterministic --> models/recent_orders.sql:3:1 | 3 | LIMIT 100 @@ -62,26 +62,26 @@ Select Rules in `sqlclean.toml` by exact code or by prefix: ```toml [rules] -select = ["SQC"] # every built-in Rule -ignore = ["SQC027", "SQC03"] # except SQC027 and SQC030 to SQC039 +select = ["SQLCLEAN"] # every built-in Rule +ignore = ["SQLCLEAN027", "SQLCLEAN03"] # except SQLCLEAN027 and SQLCLEAN030 to SQLCLEAN039 ``` -- An exact code such as `SQC004` selects one Rule. -- A prefix selects every Rule whose code starts with it: `SQC` selects all built-in Rules, - `SQC00` selects `SQC001` to `SQC009`, and `XSQCNAME` selects every custom Rule in the `NAME` +- An exact code such as `SQLCLEAN004` selects one Rule. +- A prefix selects every Rule whose code starts with it: `SQLCLEAN` selects all built-in Rules, + `SQLCLEAN00` selects `SQLCLEAN001` to `SQLCLEAN009`, and `XSQLCLEANNAME` selects every custom Rule in the `NAME` family. - `ignore` removes Rules from the selection, by code or prefix. -- A selector that matches no Rule is an error: `Rule selector 'SQC9' matches no Rule`. +- A selector that matches no Rule is an error: `Rule selector 'SQLCLEAN9' matches no Rule`. On the command line, `--select` replaces `[rules] select` for one run, and `--ignore` adds to `[rules] ignore`: ```bash -sqlclean check --select SQC001,SQC004 -sqlclean check --ignore SQC039 +sqlclean check --select SQLCLEAN001,SQLCLEAN004 +sqlclean check --ignore SQLCLEAN039 ``` -`select = []` runs no Rules. Files are still parsed, so [parse errors](#parse-errors-sqc999) are +`select = []` runs no Rules. Files are still parsed, so [parse errors](#parse-errors-sqlclean999) are still reported. ## Default Rules @@ -92,19 +92,19 @@ duplicate names and unused CTEs. | Code | Finding | |------|---------| -| `SQC001` | Comparison with NULL is never true | -| `SQC002` | Comma-separated sources create an implicit cartesian join | -| `SQC003` | Non-cross join has no meaningful condition | -| `SQC004` | Row selection is nondeterministic | -| `SQC005` | CTE is unreachable from the final query | -| `SQC006` | DISTINCT is redundant with the grouped output | -| `SQC007` | Positional set operation is vulnerable to column-order drift | -| `SQC009` | Table alias is duplicated in the same query scope | -| `SQC010` | Output alias is duplicated in the same select list | -| `SQC018` | ROW_NUMBER has no deterministic ordering | -| `SQC019` | NOT IN list contains NULL and can reject every row | -| `SQC020` | Set-operation branches project different column counts | -| `SQC039` | Inline query relation obscures data flow | +| `SQLCLEAN001` | Comparison with NULL is never true | +| `SQLCLEAN002` | Comma-separated sources create an implicit cartesian join | +| `SQLCLEAN003` | Non-cross join has no meaningful condition | +| `SQLCLEAN004` | Row selection is nondeterministic | +| `SQLCLEAN005` | CTE is unreachable from the final query | +| `SQLCLEAN006` | DISTINCT is redundant with the grouped output | +| `SQLCLEAN007` | Positional set operation is vulnerable to column-order drift | +| `SQLCLEAN009` | Table alias is duplicated in the same query scope | +| `SQLCLEAN010` | Output alias is duplicated in the same select list | +| `SQLCLEAN018` | ROW_NUMBER has no deterministic ordering | +| `SQLCLEAN019` | NOT IN list contains NULL and can reject every row | +| `SQLCLEAN020` | Set-operation branches project different column counts | +| `SQLCLEAN039` | Inline query relation obscures data flow | The other 32 Rules run only when `select` names them, by code or prefix. A prefix selects every matching Rule, whether it is enabled by default or not. A custom Rule is enabled by default when its @@ -116,8 +116,8 @@ Two built-in Rules compare against a limit, set under `[rules.thresholds]`: ```toml [rules.thresholds] -max_literal_length = 100 # SQC044: the longest string literal allowed -max_ranking_order_by = 5 # SQC043: the most ORDER BY expressions in a ranking window +max_literal_length = 100 # SQLCLEAN044: the longest string literal allowed +max_ranking_order_by = 5 # SQLCLEAN043: the most ORDER BY expressions in a ranking window ``` Both default to the values shown and must be positive. Built-in Rules take no other options. @@ -129,7 +129,7 @@ so a reviewer sees it in the diff, and it needs a reason: ```toml [[rules.rule_exceptions]] -rule = "SQC004" +rule = "SQLCLEAN004" path = "models/order_preview.sql" reason = "A preview of any hundred orders is enough." ``` @@ -137,23 +137,23 @@ reason = "A preview of any hundred orders is enough." `rule` is an exact code, not a prefix. `path` is the file's path relative to the configuration root, as findings print it. The exception covers every finding of that Rule in that file. -SQLClean has no inline suppression comments. A comment such as `-- noqa: SQC001` changes nothing; +SQLClean has no inline suppression comments. A comment such as `-- noqa: SQLCLEAN001` changes nothing; record the exception in `sqlclean.toml` instead. ### Cross join exceptions A file-wide exception for a deliberate `CROSS JOIN` would also hide any accidental cross join added -to the file later. `SQC038` findings name the joined relation and, inside a CTE, that CTE, so an +to the file later. `SQLCLEAN038` findings name the joined relation and, inside a CTE, that CTE, so an exception can cover exactly one join: ```text -error[SQC038]: CROSS JOIN with `regions` in CTE `pairs` creates an explicit cartesian product +error[SQLCLEAN038]: CROSS JOIN with `regions` in CTE `pairs` creates an explicit cartesian product --> models/calendar.sql:11:3 ``` ```toml [[rules.rule_exceptions]] -rule = "SQC038" +rule = "SQLCLEAN038" path = "models/calendar.sql" relation = "regions" cte = "pairs" # optional: only the join inside this CTE @@ -161,10 +161,10 @@ reason = "Every order date is reported for every region." ``` `relation` and `cte` compare without case. Without `cte`, the exception covers joins with that -relation anywhere in the file. `cte` needs `relation`, and `relation` matches only `SQC038` +relation anywhere in the file. `cte` needs `relation`, and `relation` matches only `SQLCLEAN038` findings. -`SQC038` does not report a cross join when one side is provably at most one row, such as a CTE +`SQLCLEAN038` does not report a cross join when one side is provably at most one row, such as a CTE that aggregates without `GROUP BY`, `LIMIT 1` or a one-row `VALUES`, so many intentional cross joins need no exception: @@ -186,11 +186,11 @@ CROSS JOIN latest AS l An exception that matches no finding is stale. `check` and `fix` report it and exit with `1`: ```text -error: stale rule exception: SQC004 in models/orders.sql matches no finding; remove it from sqlclean.toml +error: stale rule exception: SQLCLEAN004 in models/orders.sql matches no finding; remove it from sqlclean.toml ``` Delete the entry. Exceptions are only judged stale when their file was checked and their Rule was -selected, so `sqlclean check models/customers.sql` or `--select SQC001` never reports an exception +selected, so `sqlclean check models/customers.sql` or `--select SQLCLEAN001` never reports an exception for another file or Rule. ## Path ignores @@ -200,7 +200,7 @@ prefixes, glob patterns, and a reason: ```toml [[rules.rule_ignores]] -rules = ["SQC034", "SQC035"] +rules = ["SQLCLEAN034", "SQLCLEAN035"] paths = ["scratch/**"] reason = "Exploratory queries." ``` @@ -208,13 +208,13 @@ reason = "Exploratory queries." Patterns are relative to the configuration root, as in [`include`](../configuration.md#choosing-files). To turn a Rule off everywhere, add it to `[rules] ignore` instead. -## Parse errors (SQC999) +## Parse errors (SQLCLEAN999) -A file that does not parse under its [dialect](../configuration.md#dialects) gets one `SQC999` +A file that does not parse under its [dialect](../configuration.md#dialects) gets one `SQLCLEAN999` finding and no other: ```text -error[SQC999]: SQL could not be parsed as duckdb: Parse error at line 1, column 18: Expected table name or subquery, got Where +error[SQLCLEAN999]: SQL could not be parsed as duckdb: Parse error at line 1, column 18: Expected table name or subquery, got Where --> scratch/broken.sql:1:1 | 1 | SELECT FROM WHERE orders @@ -223,7 +223,7 @@ error[SQC999]: SQL could not be parsed as duckdb: Parse error at line 1, column ``` The finding points at the start of the file; the message gives the line and column of the error. -`SQC999` is not a selectable Rule: selection, `ignore`, path ignores and exceptions never hide it. +`SQLCLEAN999` is not a selectable Rule: selection, `ignore`, path ignores and exceptions never hide it. Fix the SQL, set the right dialect for the file, or [`exclude`](../configuration.md#choosing-files) the file. @@ -231,9 +231,9 @@ the file. Some Rules carry a fix. [`sqlclean fix`](../cli/fix.md) applies it. -- A **safe** fix keeps the query's results. `SQC005` removes an unused CTE; `SQC002` turns +- A **safe** fix keeps the query's results. `SQLCLEAN005` removes an unused CTE; `SQLCLEAN002` turns `FROM orders, customers` into `FROM orders CROSS JOIN customers`. -- An **unsafe** fix can change results. `SQC001` turns `cancelled_at = NULL`, which matches no row, +- An **unsafe** fix can change results. `SQLCLEAN001` turns `cancelled_at = NULL`, which matches no row, into `cancelled_at IS NULL`, which matches rows. That is almost always the intent, but it is a different query. Unsafe fixes apply only with `--unsafe-fixes`. diff --git a/crates/sqlclean-cli/skill/references/docs/rules/reference.md b/crates/sqlclean-cli/skill/references/docs/rules/reference.md index 2dec3ac..8299a30 100644 --- a/crates/sqlclean-cli/skill/references/docs/rules/reference.md +++ b/crates/sqlclean-cli/skill/references/docs/rules/reference.md @@ -8,14 +8,14 @@ Online: https://sqlclean.io/docs/rules/reference/ ## Contents -- SQC001: NULL comparisons -- SQC002 and SQC003: joins without keys -- SQC005: unused CTEs -- SQC018: unstable row numbers -- SQC019: NULL in NOT IN -- SQC046 to SQC053: queries that cannot do what they say -- SQC039: inline subqueries -- SQC034, SQC035 and SQC041: query structure +- SQLCLEAN001: NULL comparisons +- SQLCLEAN002 and SQLCLEAN003: joins without keys +- SQLCLEAN005: unused CTEs +- SQLCLEAN018: unstable row numbers +- SQLCLEAN019: NULL in NOT IN +- SQLCLEAN046 to SQLCLEAN053: queries that cannot do what they say +- SQLCLEAN039: inline subqueries +- SQLCLEAN034, SQLCLEAN035 and SQLCLEAN041: query structure SQLClean has 53 built-in Rules. `Default` Rules run when `[rules] select` is not set; the others run when `select` names them by code or prefix. A Rule with a `Safe` fix is fixed by @@ -27,67 +27,67 @@ Run `sqlclean rules ` for a Rule's remediation. | Code | Finding | Default | Fix | |------|---------|---------|-----| -| `SQC001` | Comparison with NULL is never true | Yes | Unsafe | -| `SQC002` | Comma-separated sources create an implicit cartesian join | Yes | Safe | -| `SQC003` | Non-cross join has no meaningful condition | Yes | Safe | -| `SQC004` | Row selection is nondeterministic | Yes | — | -| `SQC005` | CTE is unreachable from the final query | Yes | Safe | -| `SQC006` | DISTINCT is redundant with the grouped output | Yes | Safe | -| `SQC007` | Positional set operation is vulnerable to column-order drift | Yes | — | -| `SQC008` | Bare UNION leaves duplicate handling implicit | No | Safe | -| `SQC009` | Table alias is duplicated in the same query scope | Yes | — | -| `SQC010` | Output alias is duplicated in the same select list | Yes | — | -| `SQC011` | Clause mixes positional and named references | No | — | -| `SQC012` | ELSE NULL is redundant | No | — | -| `SQC013` | DISTINCT is written as though it were a function | No | Safe | -| `SQC014` | Predicate compares identical constant values | No | — | -| `SQC015` | Empty statement follows another terminator | No | — | -| `SQC016` | Expression is aliased to its existing name | No | — | -| `SQC017` | Row count uses a constant expression | No | Safe | -| `SQC018` | ROW_NUMBER has no deterministic ordering | Yes | — | -| `SQC019` | NOT IN list contains NULL and can reject every row | Yes | — | -| `SQC020` | Set-operation branches project different column counts | Yes | — | -| `SQC021` | Query output has an uncontrolled column shape | No | — | -| `SQC022` | Calculated projection has no stable output name | No | — | -| `SQC023` | Table alias is never referenced | No | — | -| `SQC024` | WHERE predicate rejects NULL rows from a LEFT JOIN | No | — | -| `SQC025` | JOIN type is implicit | No | Safe | -| `SQC026` | ORDER BY mixes explicit and implicit directions | No | — | -| `SQC027` | Column reference is unqualified in a multi-relation query | No | — | -| `SQC028` | Single-relation query mixes qualified and unqualified columns | No | — | -| `SQC029` | Qualified reference uses a relation absent from this query scope | No | — | -| `SQC030` | CASE expression only converts a condition to TRUE or FALSE | No | Safe | -| `SQC031` | CASE expression is nested directly inside ELSE | No | — | -| `SQC032` | Joined relation contributes no referenced values | No | — | -| `SQC033` | Comment is not attached to the syntax node it explains | No | — | -| `SQC034` | Query keeps transformation logic outside top-level CTEs | No | — | -| `SQC035` | Terminal SELECT does not read plainly from the final top-level CTE | No | — | -| `SQC036` | CTE is nested inside another query | No | — | -| `SQC037` | Recursive CTE is not permitted | No | — | -| `SQC038` | CROSS JOIN creates an explicit cartesian product | No | — | -| `SQC039` | Inline query relation obscures data flow | Yes | — | -| `SQC040` | JOIN ON contains a computed expression | No | — | -| `SQC041` | Only the last top-level CTE may be named final, and it must use that name | No | — | -| `SQC042` | CTE output column is never read later in the query | No | — | -| `SQC043` | Ranking window sorts by more expressions than max_ranking_order_by | No | — | -| `SQC044` | String literal is longer than max_literal_length | No | — | -| `SQC045` | JSON payload is parsed more than once in one SELECT | No | — | -| `SQC046` | WITH defines the same CTE name more than once | Yes | — | -| `SQC047` | CASE WHEN NULL or IN (NULL) never matches | Yes | — | -| `SQC048` | Expression divides by a literal zero | Yes | — | -| `SQC049` | UPDATE or DELETE has no limiting predicate and changes every row | No | — | -| `SQC050` | INSERT does not list its target columns | No | — | -| `SQC051` | NATURAL JOIN matches on every column the relations share | Yes | — | -| `SQC052` | BETWEEN lower bound is greater than its upper bound | Yes | — | -| `SQC053` | Aggregate or window function is used in WHERE, ON or GROUP BY | Yes | — | - -`SQC999` is the [parse error](overview.md#parse-errors-sqc999) finding. It is not a +| `SQLCLEAN001` | Comparison with NULL is never true | Yes | Unsafe | +| `SQLCLEAN002` | Comma-separated sources create an implicit cartesian join | Yes | Safe | +| `SQLCLEAN003` | Non-cross join has no meaningful condition | Yes | Safe | +| `SQLCLEAN004` | Row selection is nondeterministic | Yes | — | +| `SQLCLEAN005` | CTE is unreachable from the final query | Yes | Safe | +| `SQLCLEAN006` | DISTINCT is redundant with the grouped output | Yes | Safe | +| `SQLCLEAN007` | Positional set operation is vulnerable to column-order drift | Yes | — | +| `SQLCLEAN008` | Bare UNION leaves duplicate handling implicit | No | Safe | +| `SQLCLEAN009` | Table alias is duplicated in the same query scope | Yes | — | +| `SQLCLEAN010` | Output alias is duplicated in the same select list | Yes | — | +| `SQLCLEAN011` | Clause mixes positional and named references | No | — | +| `SQLCLEAN012` | ELSE NULL is redundant | No | — | +| `SQLCLEAN013` | DISTINCT is written as though it were a function | No | Safe | +| `SQLCLEAN014` | Predicate compares identical constant values | No | — | +| `SQLCLEAN015` | Empty statement follows another terminator | No | — | +| `SQLCLEAN016` | Expression is aliased to its existing name | No | — | +| `SQLCLEAN017` | Row count uses a constant expression | No | Safe | +| `SQLCLEAN018` | ROW_NUMBER has no deterministic ordering | Yes | — | +| `SQLCLEAN019` | NOT IN list contains NULL and can reject every row | Yes | — | +| `SQLCLEAN020` | Set-operation branches project different column counts | Yes | — | +| `SQLCLEAN021` | Query output has an uncontrolled column shape | No | — | +| `SQLCLEAN022` | Calculated projection has no stable output name | No | — | +| `SQLCLEAN023` | Table alias is never referenced | No | — | +| `SQLCLEAN024` | WHERE predicate rejects NULL rows from a LEFT JOIN | No | — | +| `SQLCLEAN025` | JOIN type is implicit | No | Safe | +| `SQLCLEAN026` | ORDER BY mixes explicit and implicit directions | No | — | +| `SQLCLEAN027` | Column reference is unqualified in a multi-relation query | No | — | +| `SQLCLEAN028` | Single-relation query mixes qualified and unqualified columns | No | — | +| `SQLCLEAN029` | Qualified reference uses a relation absent from this query scope | No | — | +| `SQLCLEAN030` | CASE expression only converts a condition to TRUE or FALSE | No | Safe | +| `SQLCLEAN031` | CASE expression is nested directly inside ELSE | No | — | +| `SQLCLEAN032` | Joined relation contributes no referenced values | No | — | +| `SQLCLEAN033` | Comment is not attached to the syntax node it explains | No | — | +| `SQLCLEAN034` | Query keeps transformation logic outside top-level CTEs | No | — | +| `SQLCLEAN035` | Terminal SELECT does not read plainly from the final top-level CTE | No | — | +| `SQLCLEAN036` | CTE is nested inside another query | No | — | +| `SQLCLEAN037` | Recursive CTE is not permitted | No | — | +| `SQLCLEAN038` | CROSS JOIN creates an explicit cartesian product | No | — | +| `SQLCLEAN039` | Inline query relation obscures data flow | Yes | — | +| `SQLCLEAN040` | JOIN ON contains a computed expression | No | — | +| `SQLCLEAN041` | Only the last top-level CTE may be named final, and it must use that name | No | — | +| `SQLCLEAN042` | CTE output column is never read later in the query | No | — | +| `SQLCLEAN043` | Ranking window sorts by more expressions than max_ranking_order_by | No | — | +| `SQLCLEAN044` | String literal is longer than max_literal_length | No | — | +| `SQLCLEAN045` | JSON payload is parsed more than once in one SELECT | No | — | +| `SQLCLEAN046` | WITH defines the same CTE name more than once | Yes | — | +| `SQLCLEAN047` | CASE WHEN NULL or IN (NULL) never matches | Yes | — | +| `SQLCLEAN048` | Expression divides by a literal zero | Yes | — | +| `SQLCLEAN049` | UPDATE or DELETE has no limiting predicate and changes every row | No | — | +| `SQLCLEAN050` | INSERT does not list its target columns | No | — | +| `SQLCLEAN051` | NATURAL JOIN matches on every column the relations share | Yes | — | +| `SQLCLEAN052` | BETWEEN lower bound is greater than its upper bound | Yes | — | +| `SQLCLEAN053` | Aggregate or window function is used in WHERE, ON or GROUP BY | Yes | — | + +`SQLCLEAN999` is the [parse error](overview.md#parse-errors-sqlclean999) finding. It is not a selectable Rule. -`SQC043` and `SQC044` read their limits from +`SQLCLEAN043` and `SQLCLEAN044` read their limits from [`[rules.thresholds]`](overview.md#thresholds). -## SQC001: NULL comparisons +## SQLCLEAN001: NULL comparisons `= NULL` and `<> NULL` are never true, so the filter matches no row: @@ -98,7 +98,7 @@ WHERE cancelled_at = NULL ``` ```text -error[SQC001]: Comparison with NULL is never true +error[SQLCLEAN001]: Comparison with NULL is never true --> models/open_orders.sql:3:20 | 3 | WHERE cancelled_at = NULL @@ -110,7 +110,7 @@ error[SQC001]: Comparison with NULL is never true The fix writes `WHERE cancelled_at IS NULL`. It is unsafe because the query then returns rows it did not return before. -## SQC002 and SQC003: joins without keys +## SQLCLEAN002 and SQLCLEAN003: joins without keys A comma between sources joins every row with every row unless a `WHERE` predicate filters them: @@ -122,7 +122,7 @@ FROM orders AS o, customers AS c WHERE o.customer_id = c.customer_id ``` -The `SQC002` fix keeps the meaning and makes the cartesian product visible: +The `SQLCLEAN002` fix keeps the meaning and makes the cartesian product visible: ```diff -FROM orders AS o, customers AS c @@ -132,10 +132,10 @@ The `SQC002` fix keeps the meaning and makes the cartesian product visible: ``` Move the predicate into `JOIN customers AS c ON o.customer_id = c.customer_id` by hand to make it a -keyed join. `SQC003` reports a `JOIN` whose condition is missing or constant, such as +keyed join. `SQLCLEAN003` reports a `JOIN` whose condition is missing or constant, such as `ON 1 = 1`; its fix turns a `JOIN` without a condition into `CROSS JOIN`. -## SQC005: unused CTEs +## SQLCLEAN005: unused CTEs A CTE that no reachable query reads is dead code: @@ -152,7 +152,7 @@ SELECT order_id FROM paid ``` ```text -error[SQC005]: CTE is unreachable from the final query +error[SQLCLEAN005]: CTE is unreachable from the final query --> models/paid_orders.sql:5:1 | 5 | refunded AS ( @@ -163,7 +163,7 @@ error[SQC005]: CTE is unreachable from the final query The fix removes `refunded`. -## SQC018: unstable row numbers +## SQLCLEAN018: unstable row numbers Without `ORDER BY` in the window, the row numbered `1` can change between runs: @@ -175,7 +175,7 @@ FROM orders ``` ```text -error[SQC018]: ROW_NUMBER has no deterministic ordering +error[SQLCLEAN018]: ROW_NUMBER has no deterministic ordering ``` An `ORDER BY` is not always enough. Ties still rank in any order unless `PARTITION BY` and @@ -184,7 +184,7 @@ from the query, such as the `GROUP BY` columns of a CTE. Ranking straight over a with a second message: ```text -error[SQC018]: Ranking window order is not proven unique within its partition +error[SQLCLEAN018]: Ranking window order is not proven unique within its partition --> models/ranked.sql:3:3 | 3 | ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY ordered_at, order_id) AS order_rank @@ -212,10 +212,10 @@ SELECT FROM customer_orders ``` -`SQC004` reports the same problem for `LIMIT` and `OFFSET`; see the example in +`SQLCLEAN004` reports the same problem for `LIMIT` and `OFFSET`; see the example in [Rules](overview.md). -## SQC019: NULL in NOT IN +## SQLCLEAN019: NULL in NOT IN `x NOT IN (..., NULL)` is never true, so the filter rejects every row: @@ -226,7 +226,7 @@ WHERE status NOT IN ('cancelled', NULL) ``` ```text -error[SQC019]: NOT IN list contains NULL and can reject every row +error[SQLCLEAN019]: NOT IN list contains NULL and can reject every row --> models/active_orders.sql:3:14 | 3 | WHERE status NOT IN ('cancelled', NULL) @@ -234,49 +234,49 @@ error[SQC019]: NOT IN list contains NULL and can reject every row = help: Remove NULL from the list or express the anti-join with a NULL-safe NOT EXISTS. ``` -## SQC046 to SQC053: queries that cannot do what they say +## SQLCLEAN046 to SQLCLEAN053: queries that cannot do what they say These Rules report a query that runs differently from how it reads. None of them has a fix, because only the author knows the intended query. ```sql WITH paid AS ( - SELECT order_id, amount FROM orders WHERE amount BETWEEN 100 AND 10 -- SQC052 + SELECT order_id, amount FROM orders WHERE amount BETWEEN 100 AND 10 -- SQLCLEAN052 ), -paid AS ( -- SQC046 - SELECT order_id, amount / 0 AS ratio FROM orders -- SQC048 +paid AS ( -- SQLCLEAN046 + SELECT order_id, amount / 0 AS ratio FROM orders -- SQLCLEAN048 ) SELECT customer_id, - CASE region WHEN NULL THEN 'unknown' END AS region_label -- SQC047 + CASE region WHEN NULL THEN 'unknown' END AS region_label -- SQLCLEAN047 FROM paid -NATURAL JOIN customers -- SQC051 -WHERE SUM(amount) > 100 -- SQC053 +NATURAL JOIN customers -- SQLCLEAN051 +WHERE SUM(amount) > 100 -- SQLCLEAN053 GROUP BY customer_id ``` -- `SQC046` compares CTE names within one `WITH` the way the dialect resolves them, so quoted +- `SQLCLEAN046` compares CTE names within one `WITH` the way the dialect resolves them, so quoted `"paid"` and `"PAID"` are different names in PostgreSQL but the same name in DuckDB. A nested `WITH` may reuse an outer name. -- `SQC047` reports `CASE x WHEN NULL` and `x IN (NULL)`, which compare with `=` and so never - match. `NOT IN` lists with NULL are `SQC019`. -- `SQC048` reports `/`, `%`, `//` and `MOD` with a literal zero divisor. Depending on the dialect +- `SQLCLEAN047` reports `CASE x WHEN NULL` and `x IN (NULL)`, which compare with `=` and so never + match. `NOT IN` lists with NULL are `SQLCLEAN019`. +- `SQLCLEAN048` reports `/`, `%`, `//` and `MOD` with a literal zero divisor. Depending on the dialect the query fails or returns NULL. -- `SQC052` compares number and `DATE 'YYYY-MM-DD'` bounds exactly and skips `BETWEEN SYMMETRIC`. +- `SQLCLEAN052` compares number and `DATE 'YYYY-MM-DD'` bounds exactly and skips `BETWEEN SYMMETRIC`. A reversed `NOT BETWEEN` is reported too, because it matches every non-NULL value. -- `SQC053` reports aggregates in `WHERE`, `ON` and `GROUP BY`, and window functions anywhere in +- `SQLCLEAN053` reports aggregates in `WHERE`, `ON` and `GROUP BY`, and window functions anywhere in those clauses. Aggregates in `HAVING`, windows in `QUALIFY`, `FILTER (WHERE ...)` and subqueries pass. Two write-safety Rules are opt-in, because changing every row is sometimes intended: -- `SQC049` reports an `UPDATE` or `DELETE` whose rows nothing limits. A `WHERE` without a column +- `SQLCLEAN049` reports an `UPDATE` or `DELETE` whose rows nothing limits. A `WHERE` without a column or subquery, such as `WHERE TRUE`, does not count; a join condition or a `LIMIT` does. -- `SQC050` reports `INSERT` without a column list. `DEFAULT VALUES` and DuckDB's `BY NAME` pass. +- `SQLCLEAN050` reports `INSERT` without a column list. `DEFAULT VALUES` and DuckDB's `BY NAME` pass. -## SQC039: inline subqueries +## SQLCLEAN039: inline subqueries A subquery in `FROM` hides a step of the query. Name it as a CTE instead: @@ -296,7 +296,7 @@ SELECT order_id FROM paid ``` -## SQC034, SQC035 and SQC041: query structure +## SQLCLEAN034, SQLCLEAN035 and SQLCLEAN041: query structure These opt-in Rules ask every query to do its work in top-level CTEs, name the last one `final`, and end with a plain `SELECT` of named columns from it. This query passes every built-in Rule: @@ -323,4 +323,4 @@ SELECT FROM final ``` -Ending with `SELECT * FROM final` is reported by `SQC021`, which asks for named output columns. +Ending with `SELECT * FROM final` is reported by `SQLCLEAN021`, which asks for named output columns. diff --git a/crates/sqlclean-cli/src/checking/_helpers/orchestration.rs b/crates/sqlclean-cli/src/checking/_helpers/orchestration.rs index 6fc3a19..2b708cc 100644 --- a/crates/sqlclean-cli/src/checking/_helpers/orchestration.rs +++ b/crates/sqlclean-cli/src/checking/_helpers/orchestration.rs @@ -100,7 +100,7 @@ pub(crate) fn check_sources( }) } -/// Whether a selection can match custom Rules: an `XSQC` code or a prefix of `XSQC`. +/// Whether a selection can match custom Rules: an `XSQLCLEAN` code or a prefix of `XSQLCLEAN`. fn selects_custom_rules(selectors: &[String]) -> bool { selectors.iter().any(|selector| { selector.starts_with(CUSTOM_RULE_PREFIX) diff --git a/crates/sqlclean-cli/src/checking/constants.rs b/crates/sqlclean-cli/src/checking/constants.rs index d0cb12f..c35f2eb 100644 --- a/crates/sqlclean-cli/src/checking/constants.rs +++ b/crates/sqlclean-cli/src/checking/constants.rs @@ -1,15 +1,23 @@ /// The finding for a file the parser rejects; it cannot be deselected or excepted. -pub const PARSE_ERROR_CODE: &str = "SQC999"; +pub const PARSE_ERROR_CODE: &str = "SQLCLEAN999"; pub(crate) const PARSE_ERROR_MESSAGE: &str = "SQL could not be parsed"; pub(crate) const PARSE_ERROR_REMEDIATION: &str = "Fix the syntax error, or set this file's dialect in sqlclean.toml."; -pub(crate) const CROSS_JOIN_CODE: &str = "SQC038"; +pub(crate) const CROSS_JOIN_CODE: &str = "SQLCLEAN038"; /// Custom Rule codes start with this prefix. -pub const CUSTOM_RULE_PREFIX: &str = "XSQC"; +pub const CUSTOM_RULE_PREFIX: &str = "XSQLCLEAN"; /// Built-in Rules whose findings can carry a fix. pub(crate) const FIXABLE_BUILTIN_RULES: [&str; 10] = [ - "SQC001", "SQC002", "SQC003", "SQC005", "SQC006", "SQC008", "SQC013", "SQC017", "SQC025", - "SQC030", + "SQLCLEAN001", + "SQLCLEAN002", + "SQLCLEAN003", + "SQLCLEAN005", + "SQLCLEAN006", + "SQLCLEAN008", + "SQLCLEAN013", + "SQLCLEAN017", + "SQLCLEAN025", + "SQLCLEAN030", ]; /// Built-in Rules whose fix can change query results, so `--unsafe-fixes` must opt in. -pub(crate) const UNSAFE_FIX_BUILTIN_RULES: [&str; 1] = ["SQC001"]; +pub(crate) const UNSAFE_FIX_BUILTIN_RULES: [&str; 1] = ["SQLCLEAN001"]; diff --git a/crates/sqlclean-cli/src/config/tests/test_load_config.rs b/crates/sqlclean-cli/src/config/tests/test_load_config.rs index 021acd3..a676b48 100644 --- a/crates/sqlclean-cli/src/config/tests/test_load_config.rs +++ b/crates/sqlclean-cli/src/config/tests/test_load_config.rs @@ -9,11 +9,11 @@ fn given_a_config_file_when_loading_from_below_then_the_nearest_one_applies() -> let test_cases = [ LoadedConfigTestCase { description: "values set in a parent directory apply and unset thresholds keep defaults", - config_text: "dialect = \"duckdb\"\n[format]\nline_width = 80\n[rules]\nselect = [\"SQC004\"]\n[rules.thresholds]\nmax_literal_length = 40\n", + config_text: "dialect = \"duckdb\"\n[format]\nline_width = 80\n[rules]\nselect = [\"SQLCLEAN004\"]\n[rules.thresholds]\nmax_literal_length = 40\n", start: "models/orders", expected_dialect: "duckdb", expected_line_width: 80, - expected_select: Some(&["SQC004"]), + expected_select: Some(&["SQLCLEAN004"]), expected_max_literal_length: 40, expected_max_ranking_order_by: 5, }, @@ -89,7 +89,7 @@ fn given_invalid_values_when_loading_then_each_is_rejected_with_its_reason() -> }, RejectedConfigTestCase { description: "an exception with a blank reason", - config_text: "[[rules.rule_exceptions]]\nrule = \"SQC004\"\npath = \"a.sql\"\nreason = \" \"\n", + config_text: "[[rules.rule_exceptions]]\nrule = \"SQLCLEAN004\"\npath = \"a.sql\"\nreason = \" \"\n", expected_error: "needs a reason", }, RejectedConfigTestCase { diff --git a/crates/sqlclean/src/constants.rs b/crates/sqlclean/src/constants.rs index 2954b0f..068c43d 100644 --- a/crates/sqlclean/src/constants.rs +++ b/crates/sqlclean/src/constants.rs @@ -10,6 +10,16 @@ pub(crate) const SETTING_SNIPPET_INDENT: &str = " "; /// The configuration file remediation text names when the request does not name one. pub const DEFAULT_CONFIG_FILE: &str = "sqlclean.toml"; /// The identifier prefix a host writes in place of each template interpolation. -pub const LINT_SENTINEL_PREFIX: &str = "__sqb_lint_"; +pub const INTERPOLATION_PLACEHOLDER_PREFIX: &str = "__sqlclean_interpolation_"; /// The identifier prefix a host writes in place of a SQL macro parameter. -pub const SQL_MACRO_PARAMETER_SENTINEL_PREFIX: &str = "__sqlbuild_macro_parameter_"; +pub const MACRO_PARAMETER_PLACEHOLDER_PREFIX: &str = "__sqlclean_macro_parameter_"; +/// The prefix of a relation parameter placeholder, written `__`. +pub const RELATION_PARAMETER_PLACEHOLDER_PREFIX: &str = "__sqlclean_relation_parameter_"; +/// The identifier prefix a host writes in place of a value parameter. +pub const VALUE_PARAMETER_PLACEHOLDER_PREFIX: &str = "__sqlclean_value_parameter_"; +/// Placeholders standing for names the host generates, which Rules never judge as authored names. +pub(crate) const GENERATED_PLACEHOLDER_PREFIXES: [&str; 3] = [ + INTERPOLATION_PLACEHOLDER_PREFIX, + RELATION_PARAMETER_PLACEHOLDER_PREFIX, + VALUE_PARAMETER_PLACEHOLDER_PREFIX, +]; diff --git a/crates/sqlclean/src/sql_lint/_helpers/additional.rs b/crates/sqlclean/src/sql_lint/_helpers/additional.rs index 301f421..369923f 100644 --- a/crates/sqlclean/src/sql_lint/_helpers/additional.rs +++ b/crates/sqlclean/src/sql_lint/_helpers/additional.rs @@ -2,26 +2,26 @@ use std::collections::HashSet; use polyglot_sql::tokens::{Span, Token, TokenType}; -use crate::constants::SQL_MACRO_PARAMETER_SENTINEL_PREFIX; use crate::constants::{CLOSE_PAREN, OPEN_PAREN, SQL_WILDCARD}; use crate::constants::{EMPTY_FIXTURE_QUERY_TOKEN_COUNT, ENCLOSING_CTE_TOKEN_COUNT}; +use crate::constants::{ + GENERATED_PLACEHOLDER_PREFIXES, MACRO_PARAMETER_PLACEHOLDER_PREFIX, + RELATION_PARAMETER_PLACEHOLDER_PREFIX, +}; use crate::sql_lint::_helpers::engine::{ direct_indices, is_comment, is_layout, is_query_from, query_end, significant_after, significant_before, token_depths, }; use crate::sql_lint::constants::RELATION_MODIFIER_KEYWORDS; -use crate::sql_lint::models::{AdditionalFactOptions, AdditionalQueryFacts, SqlMacroOutput}; +use crate::sql_lint::models::{ + AdditionalFactOptions, AdditionalQueryFacts, FixtureHarness, SqlMacroOutput, +}; use rustc_hash::{FxHashMap, FxHashSet}; const COUNT_ONE_LITERAL: &str = "1"; const QUALIFIED_REFERENCE_LENGTH: usize = 3; const QUALIFIER_PAIR_LENGTH: usize = 2; const IMPLICIT_ALIAS_MINIMUM_LENGTH: usize = 2; -const GENERATED_IDENTIFIER_PREFIXES: [&str; 3] = [ - "__sqb_lint_", - "__sqlbuild_audit_parameter_", - "__sqlbuild_context_parameter_", -]; struct QuerySlice<'a> { tokens: &'a [Token], @@ -56,7 +56,7 @@ struct SelectFactContext<'a> { dependency_identifiers: &'a HashSet, allows_ceremonial_select: bool, allows_dynamic_output_star: bool, - allows_empty_fixture_star: bool, + fixture_harness: Option<&'a FixtureHarness>, } struct ProjectedStarContext<'a> { @@ -178,7 +178,7 @@ pub(super) fn collect_additional_facts( dependency_identifiers: options.dependency_identifiers, allows_ceremonial_select: options.allows_ceremonial_select, allows_dynamic_output_star: options.allows_dynamic_output_star, - allows_empty_fixture_star: options.allows_empty_fixture_star, + fixture_harness: options.fixture_harness, }); facts.duplicate_output_aliases = select_facts.duplicate_output_aliases; facts.unaliased_calculations = select_facts.unaliased_calculations; @@ -375,9 +375,12 @@ fn is_canonical_empty_input_fixture( select_index: usize, query_end: usize, ) -> bool { - if !context.allows_empty_fixture_star { + let Some(harness) = context.fixture_harness else { return false; - } + }; + let Some(empty_relation) = harness.empty_relation.as_deref() else { + return false; + }; let significant_query: Vec<&str> = context.tokens[select_index..query_end] .iter() .filter(|token| !is_layout(token) && !is_comment(token)) @@ -387,7 +390,7 @@ fn is_canonical_empty_input_fixture( || !significant_query[0].eq_ignore_ascii_case("select") || significant_query[1] != SQL_WILDCARD || !significant_query[2].eq_ignore_ascii_case("from") - || !significant_query[3].eq_ignore_ascii_case("__empty_fixture") + || !significant_query[3].eq_ignore_ascii_case(empty_relation) || significant_query[4] != OPEN_PAREN || significant_query[5] != CLOSE_PAREN { @@ -406,9 +409,10 @@ fn is_canonical_empty_input_fixture( return false; } let cte_name = previous[2].text.trim_matches(['"', '`']); - ["__ref__", "__source__", "__seed__"] + harness + .input_cte_prefixes .iter() - .any(|prefix| cte_name.starts_with(prefix)) + .any(|prefix| cte_name.starts_with(prefix.as_str())) } fn is_compiler_proven_dynamic_output_select( @@ -485,7 +489,7 @@ fn is_lone_audit_parameter_relation(tokens: &[Token], relation: &[usize]) -> boo }; let normalized = tokens[relation_index].text.to_ascii_lowercase(); let Some(index) = normalized - .strip_prefix("__sqlbuild_audit_parameter_") + .strip_prefix(RELATION_PARAMETER_PLACEHOLDER_PREFIX) .and_then(|value| value.strip_suffix("__")) else { return false; @@ -694,7 +698,7 @@ fn collect_reference_facts(context: &ReferenceFactContext<'_>) -> AdditionalQuer facts } -/// The unqualified references of a single-relation scope that also qualifies some, each judged as it was written. In a macro file a plain slot read such as `@orders.amount` lints as a parameter sentinel pair and counts as unqualified. In a call's output, a read qualified by a relation the call passes takes neither style: the slot decides how it expands, not the caller or the macro author. A scope whose every reference a macro call generated is judged once, in the macro file. +/// The unqualified references of a single-relation scope that also qualifies some, each judged as it was written. In a macro body a plain slot read lints as a pair of macro parameter placeholders and counts as unqualified. In a call's output, a read qualified by a relation the call passes takes neither style: the slot decides how it expands, not the caller or the macro author. A scope whose every reference a macro call generated is judged once, in the macro file. fn inconsistent_qualification( tokens: &[Token], (qualified, unqualified): (&[usize], &[usize]), @@ -751,7 +755,7 @@ fn is_plain_slot_read(tokens: &[Token], index: usize) -> bool { token .text .to_ascii_lowercase() - .starts_with(SQL_MACRO_PARAMETER_SENTINEL_PREFIX) + .starts_with(MACRO_PARAMETER_PLACEHOLDER_PREFIX) }; is_parameter(&tokens[index]) && tokens.get(index + 2).is_some_and(is_parameter) } @@ -1068,7 +1072,7 @@ fn is_values_relation(tokens: &[Token], relation_clause: &[usize]) -> bool { fn is_generated_identifier(token: &Token) -> bool { let normalized = token.text.to_ascii_lowercase(); - GENERATED_IDENTIFIER_PREFIXES + GENERATED_PLACEHOLDER_PREFIXES .iter() .any(|prefix| normalized.starts_with(prefix)) } diff --git a/crates/sqlclean/src/sql_lint/_helpers/engine.rs b/crates/sqlclean/src/sql_lint/_helpers/engine.rs index 639a90b..cb3b3d2 100644 --- a/crates/sqlclean/src/sql_lint/_helpers/engine.rs +++ b/crates/sqlclean/src/sql_lint/_helpers/engine.rs @@ -7,8 +7,8 @@ use polyglot_sql::{DialectType, Expression, ExpressionWalk}; use crate::sql_lint::constants::LINT_API_VERSION; use crate::sql_lint::models::{ - AdditionalFactOptions, CrossJoinRequest, LintDiagnostic, LintEdit, LintRequest, LintResponse, - LintRuleMetadata, ParsedSql, QueryFacts, SqlMacroOutput, + AdditionalFactOptions, CrossJoinRequest, FixtureHarness, LintDiagnostic, LintEdit, LintRequest, + LintResponse, LintRuleMetadata, ParsedSql, QueryFacts, SqlMacroOutput, }; use crate::sql_lint::_helpers::additional::collect_additional_facts; @@ -18,224 +18,211 @@ use crate::sql_lint::_helpers::parsing::parse; use crate::sql_lint::_helpers::terminal_shape::collect_terminal_shape_facts; const NULL_COMPARISON: LintRuleMetadata = LintRuleMetadata { - code: "SQC001", + code: "SQLCLEAN001", message: "Comparison with NULL is never true", remediation: "Use IS NULL or IS NOT NULL when testing for NULL.", }; -const CEREMONIAL_CTE_PREFIXES: [&str; 11] = [ - "__expected__", - "__assert__", - "__ref__", - "__source__", - "__seed__", - "__dbt_ref__", - "__macro_actual__", - "__macro_expected__", - "__udf_actual__", - "__udf_expected__", - "__table_fn_", -]; const IMPLICIT_CARTESIAN_JOIN: LintRuleMetadata = LintRuleMetadata { - code: "SQC002", + code: "SQLCLEAN002", message: "Comma-separated sources create an implicit cartesian join", remediation: "Replace comma-separated sources with an explicit keyed join, or use CROSS JOIN when the cartesian product is intentional.", }; const JOIN_WITHOUT_CONDITION: LintRuleMetadata = LintRuleMetadata { - code: "SQC003", + code: "SQLCLEAN003", message: "Non-cross join has no meaningful condition", remediation: "Add a meaningful ON or USING condition, or declare an intentional cartesian product with CROSS JOIN.", }; const UNORDERED_LIMIT: LintRuleMetadata = LintRuleMetadata { - code: "SQC004", + code: "SQLCLEAN004", message: "Row selection is nondeterministic", remediation: "Add ORDER BY with a deterministic tie-breaker before LIMIT or OFFSET.", }; const UNUSED_CTE: LintRuleMetadata = LintRuleMetadata { - code: "SQC005", + code: "SQLCLEAN005", message: "CTE is unreachable from the final query", remediation: "Reference the CTE from the final query or another reachable CTE, or remove it.", }; const REDUNDANT_DISTINCT: LintRuleMetadata = LintRuleMetadata { - code: "SQC006", + code: "SQLCLEAN006", message: "DISTINCT is redundant with the grouped output", remediation: "Remove DISTINCT; the equivalent GROUP BY already determines the output groups.", }; const POSITIONAL_SET_STAR: LintRuleMetadata = LintRuleMetadata { - code: "SQC007", + code: "SQLCLEAN007", message: "Positional set operation is vulnerable to column-order drift", remediation: "Enumerate columns in the same order in every set-operation branch.", }; const EXPLICIT_UNION: LintRuleMetadata = LintRuleMetadata { - code: "SQC008", + code: "SQLCLEAN008", message: "Bare UNION leaves duplicate handling implicit", remediation: "Use UNION DISTINCT or UNION ALL to state duplicate handling explicitly.", }; const DUPLICATE_TABLE_ALIAS: LintRuleMetadata = LintRuleMetadata { - code: "SQC009", + code: "SQLCLEAN009", message: "Table alias is duplicated in the same query scope", remediation: "Give every relation in this query scope a unique alias.", }; const DUPLICATE_OUTPUT_ALIAS: LintRuleMetadata = LintRuleMetadata { - code: "SQC010", + code: "SQLCLEAN010", message: "Output alias is duplicated in the same select list", remediation: "Give every projected expression a unique output alias.", }; const MIXED_GROUP_ORDER_REFERENCES: LintRuleMetadata = LintRuleMetadata { - code: "SQC011", + code: "SQLCLEAN011", message: "Clause mixes positional and named references", remediation: "Use column names or positions consistently throughout this clause.", }; const REDUNDANT_ELSE_NULL: LintRuleMetadata = LintRuleMetadata { - code: "SQC012", + code: "SQLCLEAN012", message: "ELSE NULL is redundant", remediation: "Remove ELSE NULL; CASE expressions return NULL when ELSE is omitted.", }; const PARENTHESIZED_DISTINCT: LintRuleMetadata = LintRuleMetadata { - code: "SQC013", + code: "SQLCLEAN013", message: "DISTINCT is written as though it were a function", remediation: "Write DISTINCT as a SELECT modifier without function-like parentheses.", }; const CONSTANT_PREDICATE: LintRuleMetadata = LintRuleMetadata { - code: "SQC014", + code: "SQLCLEAN014", message: "Predicate compares identical constant values", remediation: "Remove the scaffold predicate or replace it with the intended condition.", }; const CONSECUTIVE_SEMICOLON: LintRuleMetadata = LintRuleMetadata { - code: "SQC015", + code: "SQLCLEAN015", message: "Empty statement follows another terminator", remediation: "Remove the redundant statement terminator.", }; const REDUNDANT_SELF_ALIAS: LintRuleMetadata = LintRuleMetadata { - code: "SQC016", + code: "SQLCLEAN016", message: "Expression is aliased to its existing name", remediation: "Remove the self-alias when the inferred output identity remains stable.", }; const COUNT_ONE: LintRuleMetadata = LintRuleMetadata { - code: "SQC017", + code: "SQLCLEAN017", message: "Row count uses a constant expression", remediation: "Use COUNT(*) to state that rows, rather than a nullable expression, are counted.", }; const UNSTABLE_ROW_NUMBER: LintRuleMetadata = LintRuleMetadata { - code: "SQC018", + code: "SQLCLEAN018", message: "ROW_NUMBER has no deterministic ordering", remediation: "Add ORDER BY with a stable tie-breaker inside the window specification.", }; const NULL_NOT_IN: LintRuleMetadata = LintRuleMetadata { - code: "SQC019", + code: "SQLCLEAN019", message: "NOT IN list contains NULL and can reject every row", remediation: "Remove NULL from the list or express the anti-join with a NULL-safe NOT EXISTS.", }; const SET_ARITY_MISMATCH: LintRuleMetadata = LintRuleMetadata { - code: "SQC020", + code: "SQLCLEAN020", message: "Set-operation branches project different column counts", remediation: "Project the same number of columns in every set-operation branch.", }; const PROJECTED_STAR: LintRuleMetadata = LintRuleMetadata { - code: "SQC021", + code: "SQLCLEAN021", message: "Query output has an uncontrolled column shape", remediation: "Enumerate the intended output columns explicitly.", }; const UNALIASED_CALCULATION: LintRuleMetadata = LintRuleMetadata { - code: "SQC022", + code: "SQLCLEAN022", message: "Calculated projection has no stable output name", remediation: "Add an explicit AS alias that describes the projected value.", }; const UNUSED_TABLE_ALIAS: LintRuleMetadata = LintRuleMetadata { - code: "SQC023", + code: "SQLCLEAN023", message: "Table alias is never referenced", remediation: "Use the alias to qualify references or remove it.", }; const NULL_REJECTED_LEFT_JOIN: LintRuleMetadata = LintRuleMetadata { - code: "SQC024", + code: "SQLCLEAN024", message: "WHERE predicate rejects NULL rows from a LEFT JOIN", remediation: "Move the right-side predicate into ON or use INNER JOIN when row rejection is intentional.", }; const IMPLICIT_INNER_JOIN: LintRuleMetadata = LintRuleMetadata { - code: "SQC025", + code: "SQLCLEAN025", message: "JOIN type is implicit", remediation: "Write INNER JOIN explicitly.", }; const AMBIGUOUS_ORDER_DIRECTIONS: LintRuleMetadata = LintRuleMetadata { - code: "SQC026", + code: "SQLCLEAN026", message: "ORDER BY mixes explicit and implicit directions", remediation: "State ASC or DESC for every ordering expression in this clause.", }; const UNQUALIFIED_MULTI_SOURCE_COLUMN: LintRuleMetadata = LintRuleMetadata { - code: "SQC027", + code: "SQLCLEAN027", message: "Column reference is unqualified in a multi-relation query", remediation: "Qualify the column with its relation alias.", }; const INCONSISTENT_SINGLE_SOURCE_QUALIFICATION: LintRuleMetadata = LintRuleMetadata { - code: "SQC028", + code: "SQLCLEAN028", message: "Single-relation query mixes qualified and unqualified columns", remediation: "Use one consistent qualification style in this query scope.", }; const UNKNOWN_RELATION_QUALIFIER: LintRuleMetadata = LintRuleMetadata { - code: "SQC029", + code: "SQLCLEAN029", message: "Qualified reference uses a relation absent from this query scope", remediation: "Use an available relation alias or add the intended relation to FROM.", }; const SIMPLE_BOOLEAN_CASE: LintRuleMetadata = LintRuleMetadata { - code: "SQC030", + code: "SQLCLEAN030", message: "CASE expression only converts a condition to TRUE or FALSE", remediation: "Use a NULL-safe boolean expression directly.", }; const NESTED_ELSE_CASE: LintRuleMetadata = LintRuleMetadata { - code: "SQC031", + code: "SQLCLEAN031", message: "CASE expression is nested directly inside ELSE", remediation: "Flatten the nested branch into the surrounding CASE expression.", }; const UNUSED_JOINED_RELATION: LintRuleMetadata = LintRuleMetadata { - code: "SQC032", + code: "SQLCLEAN032", message: "Joined relation contributes no referenced values", remediation: "Use the joined relation or remove the join. When the join intentionally filters rows, record it as a reviewed rule exception with a reason in the configuration file.", }; const COMMENT_ATTACHMENT: LintRuleMetadata = LintRuleMetadata { - code: "SQC033", + code: "SQLCLEAN033", message: "Comment is not attached to the syntax node it explains", remediation: "Use a standalone -- comment block immediately above the relevant CTE, JOIN, filter, predicate, selected expression, CASE branch, grouping, or ordering node.", }; const CTE_ONLY_BODY: LintRuleMetadata = LintRuleMetadata { - code: "SQC034", + code: "SQLCLEAN034", message: "Query keeps transformation logic outside top-level CTEs", remediation: "Move transformation logic into named top-level CTEs before the terminal SELECT.", }; const TERMINAL_SELECT: LintRuleMetadata = LintRuleMetadata { - code: "SQC035", + code: "SQLCLEAN035", message: "Terminal SELECT does not read plainly from the final top-level CTE", remediation: "Name the final logical CTE and leave one terminal SELECT from that CTE.", }; const NESTED_CTE: LintRuleMetadata = LintRuleMetadata { - code: "SQC036", + code: "SQLCLEAN036", message: "CTE is nested inside another query", remediation: "Hoist the nested CTE into the statement's top-level WITH list.", }; const RECURSIVE_CTE: LintRuleMetadata = LintRuleMetadata { - code: "SQC037", + code: "SQLCLEAN037", message: "Recursive CTE is not permitted", remediation: "Replace recursion with an explicit upstream relation or a bounded non-recursive query shape.", }; const CROSS_JOIN: LintRuleMetadata = LintRuleMetadata { - code: "SQC038", + code: "SQLCLEAN038", message: "CROSS JOIN creates an explicit cartesian product", remediation: "Use a keyed JOIN, or make one side provably at most one row (LIMIT 1, an aggregate without GROUP BY, or a one-row VALUES). When the cartesian product is intentional, record it as a reviewed [[rules.rule_exceptions]] entry with rule, path, relation and reason in the configuration file.", }; const INLINE_QUERY_RELATION: LintRuleMetadata = LintRuleMetadata { - code: "SQC039", + code: "SQLCLEAN039", message: "Inline query relation obscures data flow", remediation: "Extract the derived relation into a named top-level CTE; use explicit LATERAL only when the relation must remain correlated.", }; const TRIVIAL_EQUALITY_TOKEN_COUNT: usize = 3; const JOIN_EXPRESSION: LintRuleMetadata = LintRuleMetadata { - code: "SQC040", + code: "SQLCLEAN040", message: "JOIN ON contains a computed expression", remediation: "Compute keys, including variant path access, in input CTEs and join on plain columns. Literal-only predicates such as ON TRUE are allowed.", }; const FINAL_CTE_NAME: LintRuleMetadata = LintRuleMetadata { - code: "SQC041", + code: "SQLCLEAN041", message: "Only the last top-level CTE may be named final, and it must use that name", - remediation: "Name the last top-level CTE final and rename any other final CTE; SQC035 checks the terminal SELECT.", + remediation: "Name the last top-level CTE final and rename any other final CTE; SQLCLEAN035 checks the terminal SELECT.", }; pub(crate) const DEFAULT_RULES: [&str; 19] = [ @@ -316,10 +303,12 @@ const ALL_RULE_METADATA: [&LintRuleMetadata; 53] = [ &crate::sql_quality::constants::MISPLACED_AGGREGATE, ]; -fn is_ceremonial_cte_name(name: &str) -> bool { - CEREMONIAL_CTE_PREFIXES +/// Whether the harness generated the CTE `name`. +fn is_harness_cte(harness: &FixtureHarness, name: &str) -> bool { + harness + .cte_prefixes .iter() - .any(|prefix| name.starts_with(prefix)) + .any(|prefix| name.starts_with(prefix.as_str())) } struct QueryTokenContext<'a> { @@ -352,7 +341,7 @@ struct FactBuildOptions<'a> { externally_referenced_ctes: &'a HashSet, allows_ceremonial_select: bool, allows_dynamic_output_star: bool, - allows_empty_fixture_star: bool, + fixture_harness: Option<&'a FixtureHarness>, } pub(crate) fn lint_json_impl(request_json: &str) -> Result { @@ -399,9 +388,9 @@ pub(crate) fn lint(request: LintRequest) -> Result { sql_macro_outputs: &request.sql_macro_outputs, dependency_identifiers: &dependency_identifiers, externally_referenced_ctes: &externally_referenced_ctes, - allows_ceremonial_select: request.allows_ceremonial_select, + allows_ceremonial_select: request.fixture_harness.is_some(), allows_dynamic_output_star: request.allows_dynamic_output_star, - allows_empty_fixture_star: request.allows_empty_fixture_star, + fixture_harness: request.fixture_harness.as_ref(), }; let facts = build_facts(&statements, &tokens, &request.sql, &options); let context = DiagnosticContext { @@ -434,7 +423,7 @@ pub(crate) fn lint(request: LintRequest) -> Result { Some("computing a join key requires an authored CTE rewrite"), )); } - if enabled.contains(FINAL_CTE_NAME.code) && !request.allows_ceremonial_select { + if enabled.contains(FINAL_CTE_NAME.code) && request.fixture_harness.is_none() { diagnostics.extend(diagnostics_for_spans( &FINAL_CTE_NAME, &crate::sql_lint::_helpers::terminal_shape::final_cte_name_spans(&tokens, &depths), @@ -455,7 +444,7 @@ pub(crate) fn lint(request: LintRequest) -> Result { .unwrap_or(crate::sql_quality::constants::DEFAULT_MAX_RANKING_ORDER_BY), relation_keys: &request.relation_keys, externally_referenced_ctes: &externally_referenced_ctes, - fixture_body: request.allows_ceremonial_select, + fixture_body: request.fixture_harness.is_some(), config_file: request .config_file .as_deref() @@ -515,7 +504,7 @@ fn build_facts( dependency_identifiers: options.dependency_identifiers, allows_ceremonial_select: options.allows_ceremonial_select, allows_dynamic_output_star: options.allows_dynamic_output_star, - allows_empty_fixture_star: options.allows_empty_fixture_star, + fixture_harness: options.fixture_harness, }, ); for expression in expressions { @@ -1145,11 +1134,11 @@ fn collect_unused_for_with( .intersection(&names) .cloned(), ); - if options.allows_ceremonial_select { + if let Some(harness) = options.fixture_harness { reachable.extend( names .iter() - .filter(|name| is_ceremonial_cte_name(name)) + .filter(|name| is_harness_cte(harness, name)) .cloned(), ); } diff --git a/crates/sqlclean/src/sql_lint/_helpers/formatter.rs b/crates/sqlclean/src/sql_lint/_helpers/formatter.rs index bd8442b..c881702 100644 --- a/crates/sqlclean/src/sql_lint/_helpers/formatter.rs +++ b/crates/sqlclean/src/sql_lint/_helpers/formatter.rs @@ -5,7 +5,7 @@ use polyglot_sql::tokens::{Token, TokenType}; use polyglot_sql::{ComplexityGuardOptions, Dialect, DialectType, ParseOptions}; use rayon::iter::{IntoParallelIterator, ParallelIterator}; -use crate::constants::LINT_SENTINEL_PREFIX; +use crate::constants::INTERPOLATION_PLACEHOLDER_PREFIX; use crate::sql_lint::_helpers::formatter_syntax::{cte_macro_indices, protect_syntax}; use crate::sql_lint::_helpers::printed_layout::{PrintedSql, WrapOptions, wrap_lines}; use crate::sql_lint::_helpers::token_layout::{ @@ -236,7 +236,7 @@ fn layout_oracle( } fn layout_cte_macros(mut formatted: String, dialect: &Dialect) -> Result { - if !formatted.contains(LINT_SENTINEL_PREFIX) { + if !formatted.contains(INTERPOLATION_PLACEHOLDER_PREFIX) { return Ok(formatted); } let tokens = dialect diff --git a/crates/sqlclean/src/sql_lint/_helpers/formatter_syntax.rs b/crates/sqlclean/src/sql_lint/_helpers/formatter_syntax.rs index c53a540..86071f4 100644 --- a/crates/sqlclean/src/sql_lint/_helpers/formatter_syntax.rs +++ b/crates/sqlclean/src/sql_lint/_helpers/formatter_syntax.rs @@ -1,4 +1,4 @@ -use crate::constants::LINT_SENTINEL_PREFIX; +use crate::constants::INTERPOLATION_PLACEHOLDER_PREFIX; use crate::sql_lint::_helpers::engine::token_depths; use crate::sql_lint::constants::{ CTE_MACRO_PLACEHOLDER_LITERAL, POSITION_ARGUMENT_SEPARATOR, POSTFIX_CAST_PREFIX_TOKEN_COUNT, @@ -116,7 +116,7 @@ pub(super) fn protect_syntax( cast_types: &[(usize, usize)], expressions: bool, ) -> Result { - let mut prefix = "__sqlbuild_format_".to_string(); + let mut prefix = "__sqlclean_format_".to_string(); let lowercase: String = sql.to_ascii_lowercase(); while lowercase.contains(&prefix) { prefix.push('_'); @@ -292,7 +292,7 @@ pub(super) fn cte_macro_indices(tokens: &[Token]) -> HashSet { scopes.insert(depths[index]); } else if token.token_type == TokenType::Select { scopes.remove(&depths[index]); - } else if token.text.starts_with(LINT_SENTINEL_PREFIX) + } else if token.text.starts_with(INTERPOLATION_PLACEHOLDER_PREFIX) && scopes.contains(&depths[index]) && index > 0 && (matches!( @@ -315,7 +315,7 @@ fn starts_cte(tokens: &[Token], index: usize) -> bool { let Some(token) = tokens.get(index) else { return false; }; - if token.text.starts_with(LINT_SENTINEL_PREFIX) { + if token.text.starts_with(INTERPOLATION_PLACEHOLDER_PREFIX) { return true; } let named: bool = matches!( diff --git a/crates/sqlclean/src/sql_lint/_helpers/printed_layout.rs b/crates/sqlclean/src/sql_lint/_helpers/printed_layout.rs index a949f60..a26645f 100644 --- a/crates/sqlclean/src/sql_lint/_helpers/printed_layout.rs +++ b/crates/sqlclean/src/sql_lint/_helpers/printed_layout.rs @@ -16,7 +16,6 @@ const BETWEEN_SEPARATOR: &str = "AND"; const VALUES_KEYWORD: &str = "VALUES"; const DECODE_FUNCTION: &str = "DECODE"; const CASE_KEYWORD: &str = "CASE"; -const SENTINEL_PREFIX: &str = "__SQB_LINT_"; const SINGLE_ITEM_CLAUSES: [&str; 4] = ["SELECT", "WHERE", "QUALIFY", "HAVING"]; const SELECT_MODIFIERS: [&str; 10] = [ "DISTINCT", "ALL", "TOP", "PERCENT", "WITH", "TIES", "ON", "AS", "STRUCT", "VALUE", @@ -551,7 +550,9 @@ impl PrintedSql<'_> { /// The last token of the CTE, or CTE macro placeholder, that starts at `item`. fn common_table_expression_end(&self, item: usize) -> Option { let name = self.tokens.get(item)?; - if name.to_ascii_uppercase().starts_with(SENTINEL_PREFIX) + if name + .to_ascii_lowercase() + .starts_with(crate::constants::INTERPOLATION_PLACEHOLDER_PREFIX) && !self.is(item + 1, "AS") && !self.is(item + 1, OPEN_PARENTHESIS) { diff --git a/crates/sqlclean/src/sql_lint/constants.rs b/crates/sqlclean/src/sql_lint/constants.rs index 4b329c0..eead024 100644 --- a/crates/sqlclean/src/sql_lint/constants.rs +++ b/crates/sqlclean/src/sql_lint/constants.rs @@ -50,11 +50,11 @@ pub(crate) const RELATION_MODIFIER_KEYWORDS: [&str; 43] = [ "WHERE", "WINDOW", ]; -/// The parts of a `SQC038` message that names its joined relation and CTE. +/// The parts of a `SQLCLEAN038` message that names its joined relation and CTE. pub(crate) const CROSS_JOIN_PREFIX: &str = "CROSS JOIN with `"; pub(crate) const CROSS_JOIN_CTE_MARKER: &str = "` in CTE `"; pub(crate) const CROSS_JOIN_SUFFIX: &str = "` creates an explicit cartesian product"; -/// The `SQC038` message for a join whose relation cannot be named. +/// The `SQLCLEAN038` message for a join whose relation cannot be named. pub(crate) const CROSS_JOIN_UNNAMED_MESSAGE: &str = "CROSS JOIN creates an explicit cartesian product with an unnamed relation; only a file-wide exception (rule and path) can cover it"; /// Stands for the finding's project-relative path until the caller that knows it fills it in. pub(crate) const CROSS_JOIN_PATH_PLACEHOLDER: &str = ""; diff --git a/crates/sqlclean/src/sql_lint/main/cross_join_subject.rs b/crates/sqlclean/src/sql_lint/main/cross_join_subject.rs index 524a580..7a6d996 100644 --- a/crates/sqlclean/src/sql_lint/main/cross_join_subject.rs +++ b/crates/sqlclean/src/sql_lint/main/cross_join_subject.rs @@ -1,4 +1,4 @@ -//! The relation and CTE a `SQC038` finding names, for relation-level Rule exceptions. +//! The relation and CTE a `SQLCLEAN038` finding names, for relation-level Rule exceptions. use crate::sql_lint::constants::{CROSS_JOIN_CTE_MARKER, CROSS_JOIN_PREFIX, CROSS_JOIN_SUFFIX}; diff --git a/crates/sqlclean/src/sql_lint/models.rs b/crates/sqlclean/src/sql_lint/models.rs index d6053e4..52cf220 100644 --- a/crates/sqlclean/src/sql_lint/models.rs +++ b/crates/sqlclean/src/sql_lint/models.rs @@ -77,13 +77,12 @@ pub struct LintRequest { pub dependency_identifiers: Vec, #[serde(default)] pub externally_referenced_ctes: Vec, + /// The harness the host wraps this body in; absent for an ordinary query. #[serde(default)] - pub allows_ceremonial_select: bool, + pub fixture_harness: Option, #[serde(default)] pub allows_dynamic_output_star: bool, #[serde(default)] - pub allows_empty_fixture_star: bool, - #[serde(default)] pub max_literal_length: Option, #[serde(default)] pub max_ranking_order_by: Option, @@ -91,7 +90,7 @@ pub struct LintRequest { pub relation_keys: HashMap>>, #[serde(default)] pub relation_names: HashMap, - /// The SQL each `@sql.` call in the query generated, so column qualification is judged as the macro wrote it. + /// The SQL each macro call in the query generated, so column qualification is judged as the macro wrote it. #[serde(default)] pub sql_macro_outputs: Vec, /// The configuration file remediation text names; SQLClean's own when absent. @@ -99,7 +98,22 @@ pub struct LintRequest { pub config_file: Option, } -/// The character range one `@sql.` call's output fills, and the names its arguments pass, which a plain slot read such as `@rel.amount` expands to qualify with. +/// The generated wrapper around a test or macro body: its terminal SELECT is ceremonial, and these names are generated. +#[derive(Clone, Debug, Default, Deserialize, PartialEq, Eq)] +#[serde(deny_unknown_fields)] +pub struct FixtureHarness { + /// Prefixes of the CTE names the harness generates, which are reachable even when unread. + #[serde(default)] + pub cte_prefixes: Vec, + /// Prefixes of the CTEs standing in for the body's inputs, which may read the empty relation with `SELECT *`. + #[serde(default)] + pub input_cte_prefixes: Vec, + /// The table function an input CTE reads, as `SELECT * FROM ()`, when it has no rows. + #[serde(default)] + pub empty_relation: Option, +} + +/// The character range one macro call's output fills, and the relations its arguments pass, which a plain parameter slot read expands to qualify with. #[derive(Clone, Debug, Default, Deserialize, PartialEq, Eq)] pub struct SqlMacroOutput { pub start: usize, @@ -115,7 +129,7 @@ pub(crate) struct AdditionalFactOptions<'a> { pub sql_macro_outputs: &'a [SqlMacroOutput], pub allows_ceremonial_select: bool, pub allows_dynamic_output_star: bool, - pub allows_empty_fixture_star: bool, + pub fixture_harness: Option<&'a FixtureHarness>, } #[derive(Debug, Serialize)] diff --git a/crates/sqlclean/src/sql_lint/tests/helpers.rs b/crates/sqlclean/src/sql_lint/tests/helpers.rs index bb4c1b9..d3c11d2 100644 --- a/crates/sqlclean/src/sql_lint/tests/helpers.rs +++ b/crates/sqlclean/src/sql_lint/tests/helpers.rs @@ -14,7 +14,7 @@ use crate::sql_tokens::main::canonical_tokens::canonical_tokens; use crate::sql_tokens::main::query_fingerprint::query_fingerprint; /// The dependency sentinel the cross join cases name `order_policy`. -pub(crate) const POLICY_SENTINEL: &str = "__sqb_lint_7__"; +pub(crate) const POLICY_SENTINEL: &str = "__sqlclean_interpolation_7__"; /// Format a JSON array of format requests in parallel, as a JSON array of responses. pub(crate) fn format_batch_json(request_json: &str) -> Result { @@ -266,12 +266,12 @@ fn is_tight_call(name: &str, sql: &str, arguments: &str) -> bool { .contains(&format!("{} (", name.to_ascii_uppercase())) } -/// The `SQC038` messages for one cross join case. +/// The `SQLCLEAN038` messages for one cross join case. pub(crate) fn cross_join_messages(test_case: &CrossJoinTestCase) -> Result, String> { cross_join_texts(test_case, "message") } -/// The `SQC038` remediations for one cross join case. +/// The `SQLCLEAN038` remediations for one cross join case. pub(crate) fn cross_join_remediations( test_case: &CrossJoinTestCase, ) -> Result, String> { @@ -288,7 +288,7 @@ fn cross_join_texts(test_case: &CrossJoinTestCase, field: &str) -> Result Result Value { + json!({ + "cte_prefixes": ["__expected__", "__ref__", "__source__", "__macro_actual__", "__macro_expected__"], + "input_cte_prefixes": ["__ref__", "__source__", "__seed__"], + "empty_relation": "__empty_fixture", + }) +} diff --git a/crates/sqlclean/src/sql_lint/tests/test_cross_joins.rs b/crates/sqlclean/src/sql_lint/tests/test_cross_joins.rs index eb0645d..ed3b8a4 100644 --- a/crates/sqlclean/src/sql_lint/tests/test_cross_joins.rs +++ b/crates/sqlclean/src/sql_lint/tests/test_cross_joins.rs @@ -22,14 +22,14 @@ fn given_cross_joins_when_one_side_is_provably_one_row_then_only_multiplying_joi }, CrossJoinTestCase { description: "a one-row seed on the right", - sql: "SELECT o.order_id FROM orders AS o CROSS JOIN __sqb_lint_7__ AS p", + sql: "SELECT o.order_id FROM orders AS o CROSS JOIN __sqlclean_interpolation_7__ AS p", dialect: "duckdb", one_row_relations: &[POLICY_SENTINEL], expected_messages: &[], }, CrossJoinTestCase { description: "a seed with several rows names its relation", - sql: "SELECT o.order_id FROM orders AS o CROSS JOIN __sqb_lint_7__ AS p", + sql: "SELECT o.order_id FROM orders AS o CROSS JOIN __sqlclean_interpolation_7__ AS p", dialect: "duckdb", one_row_relations: &[], expected_messages: &[ @@ -38,7 +38,7 @@ fn given_cross_joins_when_one_side_is_provably_one_row_then_only_multiplying_joi }, CrossJoinTestCase { description: "a one-row seed on the left of the first join", - sql: "SELECT o.order_id FROM __sqb_lint_7__ AS p CROSS JOIN orders AS o", + sql: "SELECT o.order_id FROM __sqlclean_interpolation_7__ AS p CROSS JOIN orders AS o", dialect: "duckdb", one_row_relations: &[POLICY_SENTINEL], expected_messages: &[], @@ -160,7 +160,7 @@ fn given_cross_joins_when_one_side_is_provably_one_row_then_only_multiplying_joi }, CrossJoinTestCase { description: "a later join still multiplies the rows before it", - sql: "SELECT o.order_id FROM __sqb_lint_7__ AS p CROSS JOIN orders AS o CROSS JOIN customers AS c", + sql: "SELECT o.order_id FROM __sqlclean_interpolation_7__ AS p CROSS JOIN orders AS o CROSS JOIN customers AS c", dialect: "duckdb", one_row_relations: &[POLICY_SENTINEL], expected_messages: &[ @@ -234,7 +234,7 @@ fn given_unnamed_cross_join_when_linting_then_help_prints_a_file_wide_exception( dialect: "duckdb", one_row_relations: &[], expected_messages: &[ - "[[rules.rule_exceptions]]\n rule = \"SQC038\"\n path = \"\"\n reason = \"\"", + "[[rules.rule_exceptions]]\n rule = \"SQLCLEAN038\"\n path = \"\"\n reason = \"\"", ], }]; diff --git a/crates/sqlclean/src/sql_lint/tests/test_empty_fixture_lint.rs b/crates/sqlclean/src/sql_lint/tests/test_empty_fixture_lint.rs index db4988b..11a3aec 100644 --- a/crates/sqlclean/src/sql_lint/tests/test_empty_fixture_lint.rs +++ b/crates/sqlclean/src/sql_lint/tests/test_empty_fixture_lint.rs @@ -1,6 +1,7 @@ use serde_json::{Value, json}; use crate::sql_lint::main::engine::lint_json; +use crate::sql_lint::tests::helpers::fixture_harness; use crate::sql_lint::tests::test_types; #[test] @@ -10,31 +11,31 @@ fn given_empty_fixture_context_when_linting_projected_star_then_only_canonical_i test_types::EmptyFixtureLintTestCase { description: "canonical ref fixture", sql: "WITH __ref__orders AS (SELECT * FROM __empty_fixture()) SELECT 1", - allows_empty_fixture_star: true, + in_fixture_harness: true, expected_diagnostic_count: 0, }, test_types::EmptyFixtureLintTestCase { description: "canonical source fixture", sql: "WITH __source__web__orders AS (SELECT * FROM __empty_fixture()) SELECT 1", - allows_empty_fixture_star: true, + in_fixture_harness: true, expected_diagnostic_count: 0, }, test_types::EmptyFixtureLintTestCase { description: "ordinary SQL has no intrinsic exemption", sql: "SELECT * FROM __empty_fixture()", - allows_empty_fixture_star: false, + in_fixture_harness: false, expected_diagnostic_count: 1, }, test_types::EmptyFixtureLintTestCase { description: "expected fixture remains controlled", sql: "WITH __expected__orders AS (SELECT * FROM __empty_fixture()) SELECT 1", - allows_empty_fixture_star: true, + in_fixture_harness: true, expected_diagnostic_count: 1, }, test_types::EmptyFixtureLintTestCase { description: "additional projection is not canonical", sql: "WITH __ref__orders AS (SELECT *, 1 AS extra FROM __empty_fixture()) SELECT 1", - allows_empty_fixture_star: true, + in_fixture_harness: true, expected_diagnostic_count: 1, }, ]; @@ -44,8 +45,8 @@ fn given_empty_fixture_context_when_linting_projected_star_then_only_canonical_i "version": 1, "sql": test_case.sql, "dialect": "snowflake", - "enabled_rules": ["SQC021"], - "allows_empty_fixture_star": test_case.allows_empty_fixture_star + "enabled_rules": ["SQLCLEAN021"], + "fixture_harness": test_case.in_fixture_harness.then(fixture_harness) }) .to_string(), )?; diff --git a/crates/sqlclean/src/sql_lint/tests/test_layout_rules.rs b/crates/sqlclean/src/sql_lint/tests/test_layout_rules.rs index 15dd495..d8597cd 100644 --- a/crates/sqlclean/src/sql_lint/tests/test_layout_rules.rs +++ b/crates/sqlclean/src/sql_lint/tests/test_layout_rules.rs @@ -172,16 +172,16 @@ fn given_clause_layout_rules_when_formatting_then_each_rule_applies_idempotently test_types::LayoutRuleTestCase { description: "a CTE macro placeholder is separated like a CTE", dialect: "duckdb", - sql: "WITH __sqb_lint_0__, paid AS (SELECT * FROM orders) SELECT * FROM paid", + sql: "WITH __sqlclean_interpolation_0__, paid AS (SELECT * FROM orders) SELECT * FROM paid", line_width: 100, - expected_sql: "WITH\n__sqb_lint_0__,\n\npaid AS (\n SELECT *\n FROM orders\n)\n\nSELECT *\nFROM paid", + expected_sql: "WITH\n__sqlclean_interpolation_0__,\n\npaid AS (\n SELECT *\n FROM orders\n)\n\nSELECT *\nFROM paid", }, test_types::LayoutRuleTestCase { description: "comma-less CTE macro placeholders in a row are separated like CTEs", dialect: "duckdb", - sql: "WITH a AS (SELECT 1 AS x), __sqb_lint_0__ __sqb_lint_1__ paid AS (SELECT * FROM a) SELECT * FROM paid", + sql: "WITH a AS (SELECT 1 AS x), __sqlclean_interpolation_0__ __sqlclean_interpolation_1__ paid AS (SELECT * FROM a) SELECT * FROM paid", line_width: 100, - expected_sql: "WITH a AS (\n SELECT 1 AS x\n),\n\n__sqb_lint_0__\n\n__sqb_lint_1__\npaid AS (\n SELECT *\n FROM a\n)\nSELECT *\nFROM paid", + expected_sql: "WITH a AS (\n SELECT 1 AS x\n),\n\n__sqlclean_interpolation_0__\n\n__sqlclean_interpolation_1__\npaid AS (\n SELECT *\n FROM a\n)\nSELECT *\nFROM paid", }, test_types::LayoutRuleTestCase { description: "an alias and comma that push a call over the width break the call", diff --git a/crates/sqlclean/src/sql_lint/tests/test_line_wrap.rs b/crates/sqlclean/src/sql_lint/tests/test_line_wrap.rs index 3a3d365..7e9693b 100644 --- a/crates/sqlclean/src/sql_lint/tests/test_line_wrap.rs +++ b/crates/sqlclean/src/sql_lint/tests/test_line_wrap.rs @@ -67,10 +67,10 @@ fn given_lines_over_the_width_when_formatting_then_each_wrap_rule_applies_idempo }, test_types::LineWrapTestCase { description: "a sentinel counts with the width of the text it stands for", - sql: "select coalesce(__sqb_lint_0__, b) as amount from orders", + sql: "select coalesce(__sqlclean_interpolation_0__, b) as amount from orders", line_width: 40, - token_widths: &[("__SQB_LINT_0__", 30)], - expected_sql: "SELECT\n COALESCE(\n __sqb_lint_0__,\n b\n ) AS amount\nFROM orders", + token_widths: &[("__SQLCLEAN_INTERPOLATION_0__", 30)], + expected_sql: "SELECT\n COALESCE(\n __sqlclean_interpolation_0__,\n b\n ) AS amount\nFROM orders", }, test_types::LineWrapTestCase { description: "a nested expression breaks only the levels that overflow", diff --git a/crates/sqlclean/src/sql_lint/tests/test_lint_exemptions.rs b/crates/sqlclean/src/sql_lint/tests/test_lint_exemptions.rs index 5ed8b24..94768c3 100644 --- a/crates/sqlclean/src/sql_lint/tests/test_lint_exemptions.rs +++ b/crates/sqlclean/src/sql_lint/tests/test_lint_exemptions.rs @@ -62,7 +62,7 @@ fn given_sql_macro_output_when_linting_qualification_then_each_column_counts_as_ "version": 1, "sql": test_case.sql, "dialect": "duckdb", - "enabled_rules": ["SQC028"], + "enabled_rules": ["SQLCLEAN028"], "sql_macro_outputs": [{ "start": start, "end": start + test_case.output.len(), @@ -103,7 +103,7 @@ unrelated AS (SELECT * FROM pivot_input) SELECT * FROM final", "version": 1, "sql": test_case.sql, "dialect": "snowflake", - "enabled_rules": ["SQC021"], + "enabled_rules": ["SQLCLEAN021"], "allows_dynamic_output_star": true, }) .to_string(), diff --git a/crates/sqlclean/src/sql_lint/tests/test_sql_lint.rs b/crates/sqlclean/src/sql_lint/tests/test_sql_lint.rs index 4171cd0..909602d 100644 --- a/crates/sqlclean/src/sql_lint/tests/test_sql_lint.rs +++ b/crates/sqlclean/src/sql_lint/tests/test_sql_lint.rs @@ -2,7 +2,7 @@ use serde_json::{Value, json}; use crate::sql_lint::main::engine::lint_json; use crate::sql_lint::main::formatter::format_json; -use crate::sql_lint::tests::helpers::format_batch_json; +use crate::sql_lint::tests::helpers::{fixture_harness, format_batch_json}; use crate::sql_lint::tests::{helpers, test_types}; #[test] @@ -57,32 +57,32 @@ fn given_sql_cases_when_linting_then_diagnostics_match() -> Result<(), String> { test_types::LintTestCase { description: "NULL comparison", sql: "SELECT value FROM a WHERE value = NULL", - expected_codes: &["SQC001"], - expected_anchors: &[("SQC001", "=")], + expected_codes: &["SQLCLEAN001"], + expected_anchors: &[("SQLCLEAN001", "=")], }, test_types::LintTestCase { description: "wrapped NULL comparison", sql: "SELECT value FROM a WHERE (NULL) = value", - expected_codes: &["SQC001"], - expected_anchors: &[("SQC001", "=")], + expected_codes: &["SQLCLEAN001"], + expected_anchors: &[("SQLCLEAN001", "=")], }, test_types::LintTestCase { description: "implicit cartesian join", sql: "SELECT a.id FROM a, b", - expected_codes: &["SQC002"], - expected_anchors: &[("SQC002", ",")], + expected_codes: &["SQLCLEAN002"], + expected_anchors: &[("SQLCLEAN002", ",")], }, test_types::LintTestCase { description: "unconditioned join", sql: "SELECT a.id FROM a JOIN b", - expected_codes: &["SQC003"], - expected_anchors: &[("SQC003", "JOIN")], + expected_codes: &["SQLCLEAN003"], + expected_anchors: &[("SQLCLEAN003", "JOIN")], }, test_types::LintTestCase { description: "unordered limit", sql: "SELECT id FROM items LIMIT 1", - expected_codes: &["SQC004"], - expected_anchors: &[("SQC004", "LIMIT")], + expected_codes: &["SQLCLEAN004"], + expected_anchors: &[("SQLCLEAN004", "LIMIT")], }, test_types::LintTestCase { description: "limit zero selects no rows in any order", @@ -105,8 +105,8 @@ fn given_sql_cases_when_linting_then_diagnostics_match() -> Result<(), String> { test_types::LintTestCase { description: "semi-structured limit key does not hide a later row limit clause", sql: "SELECT payload:Limit::VARCHAR AS order_limit FROM orders LIMIT 1", - expected_codes: &["SQC004"], - expected_anchors: &[("SQC004", "LIMIT")], + expected_codes: &["SQLCLEAN004"], + expected_anchors: &[("SQLCLEAN004", "LIMIT")], }, test_types::LintTestCase { description: "semi-structured limit key in a filter is not a row limit clause", @@ -117,26 +117,26 @@ fn given_sql_cases_when_linting_then_diagnostics_match() -> Result<(), String> { test_types::LintTestCase { description: "unused CTE", sql: "WITH unused AS (SELECT 1) SELECT 1", - expected_codes: &["SQC005"], - expected_anchors: &[("SQC005", "unused")], + expected_codes: &["SQLCLEAN005"], + expected_anchors: &[("SQLCLEAN005", "unused")], }, test_types::LintTestCase { description: "unreachable CTE chain", sql: "WITH first AS (SELECT 1), second AS (SELECT * FROM first) SELECT 1", - expected_codes: &["SQC005", "SQC005"], + expected_codes: &["SQLCLEAN005", "SQLCLEAN005"], expected_anchors: &[], }, test_types::LintTestCase { description: "unused CTE on set operation", sql: "WITH unused AS (SELECT 1 AS id) SELECT id FROM left_table UNION ALL SELECT id FROM right_table", - expected_codes: &["SQC005"], - expected_anchors: &[("SQC005", "unused")], + expected_codes: &["SQLCLEAN005"], + expected_anchors: &[("SQLCLEAN005", "unused")], }, test_types::LintTestCase { description: "redundant distinct", sql: "SELECT DISTINCT id FROM items GROUP BY id", - expected_codes: &["SQC006"], - expected_anchors: &[("SQC006", "DISTINCT")], + expected_codes: &["SQLCLEAN006"], + expected_anchors: &[("SQLCLEAN006", "DISTINCT")], }, test_types::LintTestCase { description: "aggregate distinct is not a select modifier", @@ -147,35 +147,35 @@ fn given_sql_cases_when_linting_then_diagnostics_match() -> Result<(), String> { test_types::LintTestCase { description: "positional set star", sql: "SELECT * FROM a UNION ALL SELECT * FROM b", - expected_codes: &["SQC007"], - expected_anchors: &[("SQC007", "UNION")], + expected_codes: &["SQLCLEAN007"], + expected_anchors: &[("SQLCLEAN007", "UNION")], }, test_types::LintTestCase { description: "parenthesized positional set star", sql: "(SELECT * FROM a) UNION ALL (SELECT id FROM b)", - expected_codes: &["SQC007"], - expected_anchors: &[("SQC007", "UNION")], + expected_codes: &["SQLCLEAN007"], + expected_anchors: &[("SQLCLEAN007", "UNION")], }, test_types::LintTestCase { description: "nested set wildcard does not contaminate outer set operation", sql: "SELECT 'actual' WHERE EXISTS (SELECT id FROM actual EXCEPT SELECT * FROM expected) UNION ALL SELECT 'expected'", - expected_codes: &["SQC007"], - expected_anchors: &[("SQC007", "EXCEPT")], + expected_codes: &["SQLCLEAN007"], + expected_anchors: &[("SQLCLEAN007", "EXCEPT")], }, test_types::LintTestCase { description: "multiple statements", sql: "SELECT value FROM first LIMIT 1; SELECT value FROM second OFFSET 1", - expected_codes: &["SQC004", "SQC004"], - expected_anchors: &[("SQC004", "LIMIT"), ("SQC004", "OFFSET")], + expected_codes: &["SQLCLEAN004", "SQLCLEAN004"], + expected_anchors: &[("SQLCLEAN004", "LIMIT"), ("SQLCLEAN004", "OFFSET")], }, test_types::LintTestCase { description: "nested query anchors", sql: "SELECT * FROM (SELECT id FROM inner_items ORDER BY id LIMIT 1) safe JOIN outer_items ON TRUE OFFSET 2", - expected_codes: &["SQC039", "SQC003", "SQC004"], + expected_codes: &["SQLCLEAN039", "SQLCLEAN003", "SQLCLEAN004"], expected_anchors: &[ - ("SQC039", "SELECT"), - ("SQC003", "JOIN"), - ("SQC004", "OFFSET"), + ("SQLCLEAN039", "SELECT"), + ("SQLCLEAN003", "JOIN"), + ("SQLCLEAN004", "OFFSET"), ], }, test_types::LintTestCase { @@ -247,14 +247,14 @@ fn given_sql_cases_when_linting_then_diagnostics_match() -> Result<(), String> { test_types::LintTestCase { description: "nested star outside set arms", sql: "SELECT id, name FROM (SELECT * FROM base) b UNION ALL SELECT id, name FROM other", - expected_codes: &["SQC039"], - expected_anchors: &[("SQC039", "SELECT")], + expected_codes: &["SQLCLEAN039"], + expected_anchors: &[("SQLCLEAN039", "SELECT")], }, test_types::LintTestCase { description: "nested star inside wrapped set arm", sql: "(SELECT id FROM (SELECT * FROM base) b) UNION ALL (SELECT id FROM other)", - expected_codes: &["SQC039"], - expected_anchors: &[("SQC039", "SELECT")], + expected_codes: &["SQLCLEAN039"], + expected_anchors: &[("SQLCLEAN039", "SELECT")], }, ]; @@ -291,361 +291,361 @@ fn given_plain_sql_rules_when_linting_then_project_context_is_not_required() -> test_types::PlainSqlLintTestCase { description: "trailing comment", sql: "SELECT id -- why\nFROM items", - rule: "SQC033", + rule: "SQLCLEAN033", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "detached comment", sql: "SELECT id\n-- why\n\nFROM items", - rule: "SQC033", + rule: "SQLCLEAN033", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "attached predicate comment", sql: "SELECT id FROM items WHERE active\n-- retain settled rows\nAND settled", - rule: "SQC033", + rule: "SQLCLEAN033", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "attached CTE comment", sql: "WITH\n-- normalized rows\nnormalized AS (SELECT id FROM items)\nSELECT id FROM normalized", - rule: "SQC033", + rule: "SQLCLEAN033", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "attached join comment", sql: "SELECT left_rows.id FROM left_rows\n-- match stable identities\nJOIN right_rows ON left_rows.id = right_rows.id", - rule: "SQC033", + rule: "SQLCLEAN033", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "attached filter comment", sql: "SELECT id FROM items\n-- retain active rows\nWHERE active", - rule: "SQC033", + rule: "SQLCLEAN033", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "attached projection comment", sql: "SELECT\n-- stable identity\nid\nFROM items", - rule: "SQC033", + rule: "SQLCLEAN033", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "attached CASE branch comment", sql: "SELECT CASE\n-- settled outcome\nWHEN settled THEN 1 ELSE 0 END FROM items", - rule: "SQC033", + rule: "SQLCLEAN033", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "attached ordering comment with Unicode and CRLF", sql: "SELECT id FROM items\r\n-- deterministic café order\r\nORDER BY id", - rule: "SQC033", + rule: "SQLCLEAN033", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "block comment", sql: "SELECT id\n/* selected identity */\nFROM items", - rule: "SQC033", + rule: "SQLCLEAN033", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "body without CTE", sql: "SELECT id FROM items", - rule: "SQC034", + rule: "SQLCLEAN034", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "logic in terminal select", sql: "WITH final_rows AS (SELECT id FROM items) SELECT id FROM final_rows WHERE id > 0", - rule: "SQC034", + rule: "SQLCLEAN034", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "terminal select reads wrong CTE", sql: "WITH first_rows AS (SELECT 1 AS id), final_rows AS (SELECT id FROM first_rows) SELECT id FROM first_rows", - rule: "SQC035", + rule: "SQLCLEAN035", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "plain terminal select", sql: "WITH first_rows AS (SELECT 1 AS id), final_rows AS (SELECT id FROM first_rows) SELECT id FROM final_rows", - rule: "SQC035", + rule: "SQLCLEAN035", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "plain terminal select with keyword-named columns", sql: "WITH final_rows AS (SELECT 1 AS date, 2 AS comment, 3 AS key, 4 AS percent, 5 AS sequence, 6 AS time) SELECT date, comment, key, percent, sequence, time FROM final_rows", - rule: "SQC035", + rule: "SQLCLEAN035", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "terminal date literal remains an expression", sql: "WITH final_rows AS (SELECT 1 AS id) SELECT DATE '2026-01-01' FROM final_rows", - rule: "SQC035", + rule: "SQLCLEAN035", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "terminal modulo calculation remains an expression", sql: "WITH final_rows AS (SELECT 10 AS quantity, 3 AS pack_size) SELECT quantity % pack_size AS remainder FROM final_rows", - rule: "SQC035", + rule: "SQLCLEAN035", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "plain terminal select from CTE with output column list", sql: "WITH final_rows(id) AS (SELECT 1) SELECT id FROM final_rows", - rule: "SQC035", + rule: "SQLCLEAN035", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "CTE output column list names its calculation", sql: "WITH final_rows(id) AS (SELECT 1) SELECT id FROM final_rows", - rule: "SQC022", + rule: "SQLCLEAN022", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "terminal union remains outside final CTE", sql: "WITH final_rows AS (SELECT 1 AS id) SELECT id FROM final_rows UNION ALL SELECT id FROM final_rows", - rule: "SQC034", + rule: "SQLCLEAN034", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "terminal union is not a plain final CTE read", sql: "WITH final_rows AS (SELECT 1 AS id) SELECT id FROM final_rows UNION ALL SELECT id FROM final_rows", - rule: "SQC035", + rule: "SQLCLEAN035", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "parenthesized terminal union remains outside final CTE", sql: "WITH final_rows AS (SELECT 1 AS id) (SELECT id FROM final_rows) UNION ALL (SELECT id FROM final_rows)", - rule: "SQC034", + rule: "SQLCLEAN034", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "parenthesized terminal union is not a plain final CTE read", sql: "WITH final_rows AS (SELECT 1 AS id) (SELECT id FROM final_rows) UNION ALL (SELECT id FROM final_rows)", - rule: "SQC035", + rule: "SQLCLEAN035", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "mixed parenthesized terminal union remains outside final CTE", sql: "WITH final_rows AS (SELECT 1 AS id) (SELECT id FROM final_rows) UNION ALL SELECT id FROM final_rows", - rule: "SQC034", + rule: "SQLCLEAN034", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "mixed parenthesized terminal union is not a plain final CTE read", sql: "WITH final_rows AS (SELECT 1 AS id) (SELECT id FROM final_rows) UNION ALL SELECT id FROM final_rows", - rule: "SQC035", + rule: "SQLCLEAN035", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "mixed parenthesized terminal intersect is not a plain final CTE read", sql: "WITH final_rows AS (SELECT 1 AS id) (SELECT id FROM final_rows) INTERSECT SELECT id FROM final_rows", - rule: "SQC035", + rule: "SQLCLEAN035", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "mixed parenthesized terminal except is not a plain final CTE read", sql: "WITH final_rows AS (SELECT 1 AS id) (SELECT id FROM final_rows) EXCEPT SELECT id FROM final_rows", - rule: "SQC035", + rule: "SQLCLEAN035", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "nested CTE", sql: "SELECT id FROM (WITH nested_rows AS (SELECT 1 AS id) SELECT id FROM nested_rows)", - rule: "SQC036", + rule: "SQLCLEAN036", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "Snowflake hierarchy START WITH is not a nested CTE", sql: "WITH entities AS (SELECT id, parent_id FROM source_rows), hierarchy AS (SELECT id FROM entities START WITH parent_id IS NULL CONNECT BY parent_id = PRIOR id) SELECT id FROM hierarchy", - rule: "SQC036", + rule: "SQLCLEAN036", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "recursive CTE", sql: "WITH RECURSIVE numbers AS (SELECT 1 UNION ALL SELECT 2) SELECT * FROM numbers", - rule: "SQC037", + rule: "SQLCLEAN037", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "cross join", sql: "SELECT left_rows.id FROM left_rows CROSS JOIN right_rows", - rule: "SQC038", + rule: "SQLCLEAN038", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "inline query after from", sql: "SELECT derived.order_id FROM (SELECT order_id FROM orders) AS derived", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "inline query after join", sql: "SELECT orders.order_id FROM orders INNER JOIN (SELECT order_id FROM shipments) AS shipped_orders ON orders.order_id = shipped_orders.order_id", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "inline values query after full outer join", sql: "SELECT COALESCE(actual.order_id, expected.order_id) AS order_id FROM actual FULL OUTER JOIN (SELECT column1 AS order_id FROM VALUES (1), (2)) AS expected ON actual.order_id = expected.order_id", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "inline values relation after join", sql: "SELECT orders.order_id FROM orders INNER JOIN (VALUES (1), (2)) AS expected(order_id) ON orders.order_id = expected.order_id", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "inline nested with query", sql: "SELECT derived.order_id FROM (WITH imported_orders AS (SELECT order_id FROM orders) SELECT order_id FROM imported_orders) AS derived", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "redundantly parenthesized inline query", sql: "SELECT derived.order_id FROM (((SELECT order_id FROM orders))) AS derived", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "comma-separated inline query", sql: "SELECT orders.order_id FROM orders, (SELECT order_id FROM shipments) AS shipped_orders", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "scalar subquery", sql: "SELECT (SELECT MAX(order_id) FROM orders) AS latest_order_id", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "scalar subquery containing a derived relation", sql: "SELECT (SELECT derived.order_id FROM (SELECT nested.order_id FROM (SELECT 1 AS order_id) AS nested) AS derived) AS order_id", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "exists subquery containing a derived relation", sql: "SELECT order_id FROM orders WHERE EXISTS (SELECT 1 FROM (SELECT nested.order_id FROM (SELECT order_id FROM shipments) AS nested) AS shipped_orders WHERE shipped_orders.order_id = orders.order_id)", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "exists set branch containing a derived relation", sql: "SELECT EXISTS (SELECT 1 UNION ALL SELECT derived.order_id FROM (SELECT 1 AS order_id) AS derived)", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "scalar with query containing a derived relation in a CTE", sql: "SELECT (WITH derived AS (SELECT nested.order_id FROM (SELECT 1 AS order_id) AS nested) SELECT order_id FROM derived) AS order_id", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "scalar with query containing a derived terminal relation", sql: "SELECT (WITH orders AS (SELECT 1 AS order_id) SELECT derived.order_id FROM (SELECT order_id FROM orders) AS derived) AS order_id", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "nested derived relations outside an excluded subquery", sql: "SELECT derived.order_id FROM (SELECT nested.order_id FROM (SELECT 1 AS order_id) AS nested) AS derived", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 2, }, test_types::PlainSqlLintTestCase { description: "nested derived relations inside a parenthesized ordinary relation", sql: "SELECT derived.order_id FROM ((SELECT nested.order_id FROM (SELECT 1 AS order_id) AS nested)) AS derived", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 2, }, test_types::PlainSqlLintTestCase { description: "scalar subquery after projection comma", sql: "SELECT 1 AS constant_value, (SELECT MAX(order_id) FROM orders) AS latest_order_id", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "scalar subquery after expression from", sql: "SELECT EXTRACT(YEAR FROM (SELECT MAX(order_date) FROM orders)) AS latest_order_year", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "scalar subquery after sibling projection subquery", sql: "SELECT (SELECT MAX(order_id) FROM orders), COALESCE(NULL, (SELECT MAX(order_id) FROM orders))", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "expression from after sibling projection subquery", sql: "SELECT (SELECT MAX(order_id) FROM orders), EXTRACT(YEAR FROM (SELECT MAX(order_date) FROM orders))", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "scalar subquery after order by comma", sql: "SELECT order_id FROM orders ORDER BY order_id, (SELECT MAX(status_id) FROM statuses)", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "scalar subquery with a derived relation after order by comma", sql: "SELECT order_id FROM orders ORDER BY order_id, (SELECT derived.status_id FROM (SELECT 1 AS status_id) AS derived)", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "exists subquery", sql: "SELECT order_id FROM orders WHERE EXISTS (SELECT 1 FROM shipments WHERE shipments.order_id = orders.order_id)", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "in subquery", sql: "SELECT order_id FROM orders WHERE order_id IN (SELECT order_id FROM shipments)", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "named CTE relation", sql: "WITH shipped_orders AS (SELECT order_id FROM shipments) SELECT orders.order_id FROM orders INNER JOIN shipped_orders ON orders.order_id = shipped_orders.order_id", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "materialized CTE containing a derived relation", sql: "WITH orders AS MATERIALIZED (SELECT derived.order_id FROM (SELECT 1 AS order_id) AS derived) SELECT order_id FROM orders", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "not materialized CTE containing a derived relation", sql: "WITH orders AS NOT MATERIALIZED (SELECT derived.order_id FROM (SELECT 1 AS order_id) AS derived) SELECT order_id FROM orders", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 1, }, test_types::PlainSqlLintTestCase { description: "lateral query relation", sql: "SELECT orders.order_id FROM orders, LATERAL (SELECT orders.order_id) AS derived", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "apply query relation", sql: "SELECT orders.order_id FROM orders CROSS APPLY (SELECT orders.order_id) AS derived", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, test_types::PlainSqlLintTestCase { description: "table function relation", sql: "SELECT flattened.value FROM TABLE(FLATTEN(input => PARSE_JSON('[1]'))) AS flattened", - rule: "SQC039", + rule: "SQLCLEAN039", expected_count: 0, }, ]; @@ -676,49 +676,49 @@ fn given_native_rules_when_linting_then_diagnosis_and_remediation_are_actionable test_types::LintMetadataTestCase { description: "NULL comparison guidance", sql: "SELECT value FROM a WHERE value = NULL", - expected_code: "SQC001", + expected_code: "SQLCLEAN001", expected_message: "Comparison with NULL is never true", expected_remediation: "Use IS NULL or IS NOT NULL when testing for NULL.", }, test_types::LintMetadataTestCase { description: "implicit join guidance", sql: "SELECT a.id FROM a, b", - expected_code: "SQC002", + expected_code: "SQLCLEAN002", expected_message: "Comma-separated sources create an implicit cartesian join", expected_remediation: "Replace comma-separated sources with an explicit keyed join, or use CROSS JOIN when the cartesian product is intentional.", }, test_types::LintMetadataTestCase { description: "unconditioned join guidance", sql: "SELECT a.id FROM a JOIN b", - expected_code: "SQC003", + expected_code: "SQLCLEAN003", expected_message: "Non-cross join has no meaningful condition", expected_remediation: "Add a meaningful ON or USING condition, or declare an intentional cartesian product with CROSS JOIN.", }, test_types::LintMetadataTestCase { description: "unordered limit guidance", sql: "SELECT id FROM items LIMIT 1", - expected_code: "SQC004", + expected_code: "SQLCLEAN004", expected_message: "Row selection is nondeterministic", expected_remediation: "Add ORDER BY with a deterministic tie-breaker before LIMIT or OFFSET.", }, test_types::LintMetadataTestCase { description: "unused CTE guidance", sql: "WITH unused AS (SELECT 1) SELECT 1", - expected_code: "SQC005", + expected_code: "SQLCLEAN005", expected_message: "CTE is unreachable from the final query", expected_remediation: "Reference the CTE from the final query or another reachable CTE, or remove it.", }, test_types::LintMetadataTestCase { description: "redundant distinct guidance", sql: "SELECT DISTINCT id FROM items GROUP BY id", - expected_code: "SQC006", + expected_code: "SQLCLEAN006", expected_message: "DISTINCT is redundant with the grouped output", expected_remediation: "Remove DISTINCT; the equivalent GROUP BY already determines the output groups.", }, test_types::LintMetadataTestCase { description: "positional set star guidance", sql: "SELECT * FROM a UNION ALL SELECT * FROM b", - expected_code: "SQC007", + expected_code: "SQLCLEAN007", expected_message: "Positional set operation is vulnerable to column-order drift", expected_remediation: "Enumerate columns in the same order in every set-operation branch.", }, @@ -762,55 +762,55 @@ fn given_fixable_and_ambiguous_findings_when_linting_then_only_proven_edits_are_ test_types::LintFixTestCase { description: "right-hand NULL equality", sql: "SELECT value FROM a WHERE value = NULL", - expected_code: "SQC001", + expected_code: "SQLCLEAN001", expected_replacement: Some("IS"), }, test_types::LintFixTestCase { description: "right-hand NULL inequality", sql: "SELECT value FROM a WHERE value <> NULL", - expected_code: "SQC001", + expected_code: "SQLCLEAN001", expected_replacement: Some("IS NOT"), }, test_types::LintFixTestCase { description: "left-hand NULL comparison requires authored intent", sql: "SELECT value FROM a WHERE NULL = value", - expected_code: "SQC001", + expected_code: "SQLCLEAN001", expected_replacement: None, }, test_types::LintFixTestCase { description: "plain conditionless join", sql: "SELECT a.id FROM a JOIN b", - expected_code: "SQC003", + expected_code: "SQLCLEAN003", expected_replacement: Some("CROSS JOIN"), }, test_types::LintFixTestCase { description: "qualified conditionless join requires intent", sql: "SELECT a.id FROM a LEFT JOIN b", - expected_code: "SQC003", + expected_code: "SQLCLEAN003", expected_replacement: None, }, test_types::LintFixTestCase { description: "conditionless semi join is never rewritten as cross join", sql: "SELECT a.id FROM a SEMI JOIN b", - expected_code: "SQC003", + expected_code: "SQLCLEAN003", expected_replacement: None, }, test_types::LintFixTestCase { description: "redundant distinct", sql: "SELECT DISTINCT id FROM items GROUP BY id", - expected_code: "SQC006", + expected_code: "SQLCLEAN006", expected_replacement: Some(""), }, test_types::LintFixTestCase { description: "single unused select CTE", sql: "WITH unused AS (SELECT 1) SELECT 1", - expected_code: "SQC005", + expected_code: "SQLCLEAN005", expected_replacement: Some(""), }, test_types::LintFixTestCase { description: "reserved framework CTE is never deleted", sql: "WITH __expected__items AS (SELECT 1) SELECT 1", - expected_code: "SQC005", + expected_code: "SQLCLEAN005", expected_replacement: None, }, ]; @@ -837,539 +837,539 @@ fn given_additional_rule_cases_when_linting_then_findings_and_fixes_match() -> R test_types::AdditionalLintRuleTestCase { description: "bare union", sql: "SELECT 1 UNION SELECT 2", - rule: "SQC008", + rule: "SQLCLEAN008", expected_anchor: Some("UNION"), expected_replacement: Some("UNION DISTINCT"), }, test_types::AdditionalLintRuleTestCase { description: "duplicate relation alias", sql: "SELECT x.id FROM alpha AS x JOIN beta AS x ON x.id = x.id", - rule: "SQC009", + rule: "SQLCLEAN009", expected_anchor: Some("x"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "duplicate output alias", sql: "SELECT a AS value, b AS value FROM items", - rule: "SQC010", + rule: "SQLCLEAN010", expected_anchor: Some("value"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "mixed grouping references", sql: "SELECT a, b FROM items GROUP BY 1, b", - rule: "SQC011", + rule: "SQLCLEAN011", expected_anchor: Some("GROUP"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "redundant else null", sql: "SELECT CASE WHEN a THEN b ELSE NULL END FROM items", - rule: "SQC012", + rule: "SQLCLEAN012", expected_anchor: Some("ELSE NULL"), expected_replacement: Some(""), }, test_types::AdditionalLintRuleTestCase { description: "function-like distinct", sql: "SELECT DISTINCT(a) FROM items", - rule: "SQC013", + rule: "SQLCLEAN013", expected_anchor: Some("DISTINCT(a)"), expected_replacement: Some("DISTINCT a"), }, test_types::AdditionalLintRuleTestCase { description: "constant scaffold predicate", sql: "SELECT a FROM items WHERE 1 = 1", - rule: "SQC014", + rule: "SQLCLEAN014", expected_anchor: Some("="), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "consecutive statement terminator", sql: "SELECT 1;;", - rule: "SQC015", + rule: "SQLCLEAN015", expected_anchor: Some(";"), expected_replacement: Some(""), }, test_types::AdditionalLintRuleTestCase { description: "redundant self alias", sql: "SELECT value AS value FROM items", - rule: "SQC016", + rule: "SQLCLEAN016", expected_anchor: Some(" AS value"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "qualified column self alias is redundant", sql: "SELECT items.value AS value FROM items", - rule: "SQC016", + rule: "SQLCLEAN016", expected_anchor: Some(" AS value"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "qualified column self alias after an expression is redundant", sql: "SELECT item_id + 1 AS next_item_id, items.value AS value FROM items", - rule: "SQC016", + rule: "SQLCLEAN016", expected_anchor: Some(" AS value"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "top-modified column self alias is redundant", sql: "SELECT TOP 5 value AS value FROM items", - rule: "SQC016", + rule: "SQLCLEAN016", expected_anchor: Some(" AS value"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "terminal operand name does not make a calculation self-aliased", sql: "SELECT price + value AS value FROM items", - rule: "SQC016", + rule: "SQLCLEAN016", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "cast type syntax is not an output self alias", sql: "SELECT CAST(order_id::INTEGER AS INTEGER) AS order_id FROM orders", - rule: "SQC016", + rule: "SQLCLEAN016", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "relation self alias is not an output self alias", sql: "SELECT orders.order_id FROM orders AS orders", - rule: "SQC016", + rule: "SQLCLEAN016", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "semi-structured path alias is not redundant", sql: "SELECT event.payload:data:order_id AS order_id FROM events AS event", - rule: "SQC016", + rule: "SQLCLEAN016", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "constant row count", sql: "SELECT COUNT(1) FROM items", - rule: "SQC017", + rule: "SQLCLEAN017", expected_anchor: Some("1"), expected_replacement: Some("*"), }, test_types::AdditionalLintRuleTestCase { description: "unordered row number", sql: "SELECT ROW_NUMBER() OVER (PARTITION BY id) FROM items", - rule: "SQC018", + rule: "SQLCLEAN018", expected_anchor: Some("ROW_NUMBER"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "literal null in not-in list", sql: "SELECT id FROM items WHERE id NOT IN (1, NULL)", - rule: "SQC019", + rule: "SQLCLEAN019", expected_anchor: Some("NOT"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "set branch arity mismatch", sql: "SELECT a, b FROM first UNION ALL SELECT c FROM second", - rule: "SQC020", + rule: "SQLCLEAN020", expected_anchor: Some("UNION"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "uncontrolled projection star", sql: "SELECT * FROM items", - rule: "SQC021", + rule: "SQLCLEAN021", expected_anchor: Some("*"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "projection star without from remains uncontrolled", sql: "SELECT *", - rule: "SQC021", + rule: "SQLCLEAN021", expected_anchor: Some("*"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "mixed dynamic pivot projection remains uncontrolled", sql: "SELECT *, customer_id FROM orders PIVOT(MAX(amount) FOR category IN (ANY))", - rule: "SQC021", + rule: "SQLCLEAN021", expected_anchor: Some("*"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "static pivot star remains uncontrolled", sql: "SELECT * FROM orders PIVOT(MAX(amount) FOR category IN ('books'))", - rule: "SQC021", + rule: "SQLCLEAN021", expected_anchor: Some("*"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "static pivot any string remains uncontrolled", sql: "SELECT * FROM orders PIVOT(MAX(amount) FOR category IN ('ANY'))", - rule: "SQC021", + rule: "SQLCLEAN021", expected_anchor: Some("*"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "nested dynamic pivot does not exempt outer projection star", sql: "SELECT * FROM orders WHERE EXISTS (SELECT 1 FROM items PIVOT(MAX(amount) FOR category IN (ANY)))", - rule: "SQC021", + rule: "SQLCLEAN021", expected_anchor: Some("*"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "unrelated any does not exempt static pivot star", sql: "SELECT * FROM orders PIVOT(MAX(amount) FOR category IN ('books')) WHERE customer_id = ANY (SELECT customer_id FROM customers)", - rule: "SQC021", + rule: "SQLCLEAN021", expected_anchor: Some("*"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "comma joined dynamic pivot star remains uncontrolled", sql: "SELECT * FROM orders PIVOT(MAX(amount) FOR category IN (ANY)) AS p, customers AS c", - rule: "SQC021", + rule: "SQLCLEAN021", expected_anchor: Some("*"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "joined audit relation parameter star remains uncontrolled", - sql: "SELECT * FROM __sqlbuild_audit_parameter_0__ AS a CROSS JOIN customers AS c", - rule: "SQC021", + sql: "SELECT * FROM __sqlclean_relation_parameter_0__ AS a CROSS JOIN customers AS c", + rule: "SQLCLEAN021", expected_anchor: Some("*"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "terminal framework dependency star remains uncontrolled", - sql: "SELECT * FROM __sqb_lint_0__", - rule: "SQC021", + sql: "SELECT * FROM __sqlclean_interpolation_0__", + rule: "SQLCLEAN021", expected_anchor: Some("*"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "transformed framework dependency import star remains uncontrolled", - sql: "WITH imported_orders AS (SELECT *, CURRENT_TIMESTAMP AS loaded_at FROM __sqb_lint_0__) SELECT order_id FROM imported_orders", - rule: "SQC021", + sql: "WITH imported_orders AS (SELECT *, CURRENT_TIMESTAMP AS loaded_at FROM __sqlclean_interpolation_0__) SELECT order_id FROM imported_orders", + rule: "SQLCLEAN021", expected_anchor: Some("*"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "ordinary relation import star remains uncontrolled", sql: "WITH imported_orders AS (SELECT * FROM orders) SELECT order_id FROM imported_orders", - rule: "SQC021", + rule: "SQLCLEAN021", expected_anchor: Some("*"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "nested framework dependency import star remains uncontrolled", - sql: "WITH outer_query AS (WITH imported_orders AS (SELECT * FROM __sqb_lint_0__) SELECT order_id FROM imported_orders) SELECT order_id FROM outer_query", - rule: "SQC021", + sql: "WITH outer_query AS (WITH imported_orders AS (SELECT * FROM __sqlclean_interpolation_0__) SELECT order_id FROM imported_orders) SELECT order_id FROM outer_query", + rule: "SQLCLEAN021", expected_anchor: Some("*"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "unaliased calculated projection", sql: "SELECT price * quantity FROM items", - rule: "SQC022", + rule: "SQLCLEAN022", expected_anchor: Some("price"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "unused table alias", sql: "SELECT id FROM items AS unused", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: Some("AS unused"), expected_replacement: Some(""), }, test_types::AdditionalLintRuleTestCase { description: "left join rejected in where", sql: "SELECT a.id FROM a LEFT JOIN b AS right_side ON a.id = right_side.id WHERE right_side.active = TRUE", - rule: "SQC024", + rule: "SQLCLEAN024", expected_anchor: Some("LEFT"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "implicit inner join", sql: "SELECT a.id FROM a JOIN b ON a.id = b.id", - rule: "SQC025", + rule: "SQLCLEAN025", expected_anchor: Some("JOIN"), expected_replacement: Some("INNER JOIN"), }, test_types::AdditionalLintRuleTestCase { description: "mixed order directions", sql: "SELECT a, b FROM items ORDER BY a, b DESC", - rule: "SQC026", + rule: "SQLCLEAN026", expected_anchor: Some("ORDER"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "unqualified multi-source column", sql: "SELECT id FROM a JOIN b ON a.id = b.id", - rule: "SQC027", + rule: "SQLCLEAN027", expected_anchor: Some("id"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "mixed single-source qualification", sql: "SELECT items.id, name FROM items", - rule: "SQC028", + rule: "SQLCLEAN028", expected_anchor: Some("name"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "plain macro slot reads count as unqualified beside a plain group read", - sql: "SELECT __sqlbuild_macro_parameter_1__, __sqlbuild_macro_parameter_0__.__sqlbuild_macro_parameter_2__ AS orders FROM __sqlbuild_macro_parameter_0__", - rule: "SQC028", + sql: "SELECT __sqlclean_macro_parameter_1__, __sqlclean_macro_parameter_0__.__sqlclean_macro_parameter_2__ AS orders FROM __sqlclean_macro_parameter_0__", + rule: "SQLCLEAN028", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "a plain macro slot read beside a hand-qualified column is mixed", - sql: "SELECT __sqlbuild_macro_parameter_0__.__sqlbuild_macro_parameter_1__ AS orders, s.refunds FROM __sqlbuild_macro_parameter_0__ AS s", - rule: "SQC028", - expected_anchor: Some("__sqlbuild_macro_parameter_0__"), + sql: "SELECT __sqlclean_macro_parameter_0__.__sqlclean_macro_parameter_1__ AS orders, s.refunds FROM __sqlclean_macro_parameter_0__ AS s", + rule: "SQLCLEAN028", + expected_anchor: Some("__sqlclean_macro_parameter_0__"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "unknown relation qualifier", sql: "SELECT missing.id FROM items AS present", - rule: "SQC029", + rule: "SQLCLEAN029", expected_anchor: Some("missing"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "Snowflake shorthand cast type is not an unqualified column", sql: "SELECT src.value::STRING AS value FROM items AS src", - rule: "SQC028", + rule: "SQLCLEAN028", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "Snowflake JSON path and shorthand cast type are not columns", sql: "SELECT src.payload:item::TEXT AS item FROM items AS src", - rule: "SQC028", + rule: "SQLCLEAN028", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "Snowflake shorthand cast type is not a multi-source column", sql: "SELECT first.value::TEXT AS value FROM first JOIN second ON first.id = second.id", - rule: "SQC027", + rule: "SQLCLEAN027", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "implicit table alias is known in query scope", sql: "SELECT present.id FROM items present", - rule: "SQC029", + rule: "SQLCLEAN029", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "implicit joined alias contributes a selected value", sql: "SELECT left_side.id, right_side.name FROM alpha left_side LEFT JOIN beta right_side ON left_side.id = right_side.id", - rule: "SQC032", + rule: "SQLCLEAN032", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "Snowflake lateral flatten comma is explicit lateral syntax", sql: "SELECT flattened.value FROM items, LATERAL FLATTEN(input => items.payload) flattened", - rule: "SQC002", + rule: "SQLCLEAN002", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "Snowflake VALUES row separator is not a relation separator", sql: "SELECT column1 FROM VALUES (1), (2), (3)", - rule: "SQC002", + rule: "SQLCLEAN002", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "arithmetic multiplication is not a projected wildcard", sql: "SELECT price * quantity AS total FROM items", - rule: "SQC021", + rule: "SQLCLEAN021", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "number-led multiplication is not a projected wildcard", sql: "SELECT 100 * ratio AS percentage FROM items", - rule: "SQC021", + rule: "SQLCLEAN021", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "TOP projection wildcard remains controlled by star rule", sql: "SELECT TOP 10 * FROM items", - rule: "SQC021", + rule: "SQLCLEAN021", expected_anchor: Some("*"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "qualified wildcard modifier does not require an alias", sql: "SELECT src.* EXCLUDE (internal_id) FROM items AS src", - rule: "SQC022", + rule: "SQLCLEAN022", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "EXISTS literal projection does not require an alias", sql: "SELECT parent.id FROM parent WHERE EXISTS (SELECT 1 FROM child WHERE child.id = parent.id)", - rule: "SQC022", + rule: "SQLCLEAN022", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "correlated subquery can reference an outer relation", sql: "SELECT parent.id FROM parent WHERE EXISTS (SELECT 1 FROM child WHERE child.id = parent.id)", - rule: "SQC029", + rule: "SQLCLEAN029", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "Snowflake JSON path key is not a relation qualifier", sql: "SELECT PARSE_JSON(src.payload):item.name::VARCHAR AS item_name FROM items AS src", - rule: "SQC029", + rule: "SQLCLEAN029", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "Snowflake JSON path starts from a qualified relation value", sql: "SELECT parsed:item::VARCHAR AS item FROM items AS src, LATERAL FLATTEN(input => src.payload) AS parsed", - rule: "SQC027", + rule: "SQLCLEAN027", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "Snowflake ASOF JOIN alias is known in query scope", sql: "SELECT matched.ts FROM requested request ASOF JOIN available matched MATCH_CONDITION (request.ts >= matched.ts) ON request.id = matched.id", - rule: "SQC029", + rule: "SQLCLEAN029", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "later set branches inherit the first branch output name", sql: "SELECT 0 AS offset_value UNION ALL SELECT 1 UNION ALL SELECT 2", - rule: "SQC022", + rule: "SQLCLEAN022", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "scalar subquery output does not require an alias inside its scope", sql: "SELECT (SELECT MAX(child.value) FROM child WHERE child.id = parent.id) AS maximum_value FROM parent", - rule: "SQC022", + rule: "SQLCLEAN022", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "later scalar function argument does not require an inner alias", sql: "SELECT COALESCE((SELECT MAX(change_id) FROM first_changes), (SELECT MAX(change_id) FROM second_changes), 0) AS latest_change_id FROM support_tickets", - rule: "SQC022", + rule: "SQLCLEAN022", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "scalar aggregate nested in conditional coalesce does not require an inner alias", sql: "SELECT CASE WHEN batch.layout = 'fallback' THEN COALESCE((SELECT MAX(change.line_id) FROM first_changes AS change WHERE change.batch_id = batch.batch_id AND change.line_id < batch.line_id), (SELECT MAX(archive.line_id) FROM archived_changes AS archive WHERE archive.batch_id = batch.batch_id AND archive.line_id < batch.line_id), header.line_id) + 1 ELSE batch.start_line END AS start_line FROM support_batches AS batch LEFT JOIN support_headers AS header ON header.batch_id = batch.batch_id", - rule: "SQC022", + rule: "SQLCLEAN022", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "prior nested relation does not contaminate a later scalar function argument", sql: "WITH prior_changes AS (SELECT (SELECT MAX(change_id) FROM support_changes) AS latest_change_id FROM support_tickets), current_changes AS (SELECT COALESCE((SELECT MAX(change_id) FROM first_changes), (SELECT MAX(change_id) FROM second_changes), 0) AS latest_change_id FROM current_tickets) SELECT * FROM current_changes", - rule: "SQC022", + rule: "SQLCLEAN022", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "scalar subquery after a prior CTE relation remains in projection scope", sql: "WITH products_used AS (SELECT product_id FROM products), ticket_totals AS (SELECT ticket.ticket_id, (SELECT MAX(change_id) FROM support_changes) AS latest_change_id FROM support_tickets AS ticket) SELECT * FROM ticket_totals", - rule: "SQC022", + rule: "SQLCLEAN022", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "comma-derived table calculation still requires an alias", sql: "SELECT derived.value FROM items, (SELECT amount + tax FROM totals) AS derived", - rule: "SQC022", + rule: "SQLCLEAN022", expected_anchor: Some("amount"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "scalar subquery scope does not cross a prior statement", sql: "SELECT order_id FROM orders; SELECT invoice_id, (SELECT MAX(amount + tax) FROM totals) AS maximum_total FROM invoices", - rule: "SQC022", + rule: "SQLCLEAN022", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "contextual keyword remains a simple qualified projection", sql: "SELECT flattened.index FROM items AS src, LATERAL FLATTEN(input => src.payload) AS flattened", - rule: "SQC022", + rule: "SQLCLEAN022", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "generated expression sentinel is not an authored column", - sql: "SELECT first.id FROM first JOIN second ON first.id = second.id WHERE __sqb_lint_0__", - rule: "SQC027", + sql: "SELECT first.id FROM first JOIN second ON first.id = second.id WHERE __sqlclean_interpolation_0__", + rule: "SQLCLEAN027", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "null-safe comparison FROM is not a relation clause", sql: "SELECT CASE WHEN src.actual IS DISTINCT FROM src.expected THEN 1 ELSE 0 END AS differs FROM items AS src", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "earlier projection alias is not a relation column", sql: "SELECT flattened.value AS item_index, item_index + 1 AS next_index FROM items AS src, LATERAL FLATTEN(input => src.payload) AS flattened", - rule: "SQC027", + rule: "SQLCLEAN027", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "current date context value is not a multi-source column", sql: "SELECT first_side.id FROM first_side JOIN second_side ON first_side.id = second_side.id WHERE first_side.created_at >= CURRENT_DATE", - rule: "SQC027", + rule: "SQLCLEAN027", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "current date context value does not mix qualification styles", sql: "SELECT first_side.id FROM first_side WHERE first_side.created_at >= CURRENT_DATE", - rule: "SQC028", + rule: "SQLCLEAN028", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "simple boolean case", sql: "SELECT CASE WHEN amount > 0 THEN TRUE ELSE FALSE END AS positive FROM items", - rule: "SQC030", + rule: "SQLCLEAN030", expected_anchor: Some("CASE WHEN amount > 0 THEN TRUE ELSE FALSE END"), expected_replacement: Some("COALESCE(amount > 0, FALSE)"), }, test_types::AdditionalLintRuleTestCase { description: "unicode before simple boolean case preserves replacement text", sql: "SELECT 'é', CASE WHEN amount > 0 THEN TRUE ELSE FALSE END AS positive FROM items", - rule: "SQC030", + rule: "SQLCLEAN030", expected_anchor: Some("CASE WHEN amount > 0 THEN TRUE ELSE FALSE END"), expected_replacement: Some("COALESCE(amount > 0, FALSE)"), }, test_types::AdditionalLintRuleTestCase { description: "commented boolean case is diagnosed without a fix", sql: "SELECT CASE WHEN amount /* reason */ > 0 THEN TRUE ELSE FALSE END FROM items", - rule: "SQC030", + rule: "SQLCLEAN030", expected_anchor: Some("CASE WHEN amount /* reason */ > 0 THEN TRUE ELSE FALSE END"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "multi-branch boolean case is diagnosed without an unsafe partial fix", sql: "SELECT CASE WHEN status = 'open' THEN TRUE WHEN priority = 'high' THEN TRUE ELSE FALSE END AS actionable FROM support_tickets", - rule: "SQC030", + rule: "SQLCLEAN030", expected_anchor: Some( "CASE WHEN status = 'open' THEN TRUE WHEN priority = 'high' THEN TRUE ELSE FALSE END", ), @@ -1378,189 +1378,189 @@ fn given_additional_rule_cases_when_linting_then_findings_and_fixes_match() -> R test_types::AdditionalLintRuleTestCase { description: "case nested directly in else", sql: "SELECT CASE WHEN a THEN 1 ELSE CASE WHEN b THEN 2 END END FROM items", - rule: "SQC031", + rule: "SQLCLEAN031", expected_anchor: Some("CASE"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "joined relation contributes no values", sql: "SELECT a.id FROM a LEFT JOIN b ON a.id = b.id", - rule: "SQC032", + rule: "SQLCLEAN032", expected_anchor: Some("JOIN"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "joined relation contributes through an aggregate expression", sql: "SELECT ARRAY_AGG(b.value) AS values FROM a LEFT JOIN b ON a.id = b.id", - rule: "SQC032", + rule: "SQLCLEAN032", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "bare projected star consumes every joined relation", sql: "SELECT * FROM orders AS o INNER JOIN customers AS c ON o.customer_id = c.customer_id", - rule: "SQC032", + rule: "SQLCLEAN032", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "unqualified projection prevents an unsupported unused relation claim", sql: "SELECT customer_name FROM orders AS o INNER JOIN customers AS c ON o.customer_id = c.customer_id", - rule: "SQC032", + rule: "SQLCLEAN032", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "unqualified aggregate argument prevents an unsupported unused relation claim", sql: "SELECT MAX(customer_name) FROM orders AS o INNER JOIN customers AS c ON o.customer_id = c.customer_id", - rule: "SQC032", + rule: "SQLCLEAN032", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "left qualified star does not consume joined relation", sql: "SELECT o.* FROM orders AS o INNER JOIN customers AS c ON o.customer_id = c.customer_id", - rule: "SQC032", + rule: "SQLCLEAN032", expected_anchor: Some("JOIN"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "cross joined relation contributes through a filter predicate", sql: "SELECT orders.order_id FROM orders CROSS JOIN processing_cutoff AS cutoff WHERE orders.created_at < cutoff.created_at", - rule: "SQC032", + rule: "SQLCLEAN032", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "lateral relation contributes through a downstream join condition", sql: "SELECT orders.order_id, products.name FROM orders CROSS JOIN LATERAL UNNEST(orders.product_ids) AS item INNER JOIN products ON (products.product_id = item.product_id)", - rule: "SQC032", + rule: "SQLCLEAN032", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "explicit union is clean", sql: "SELECT 1 UNION ALL SELECT 2", - rule: "SQC008", + rule: "SQLCLEAN008", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "ordered row number without a declared key is unproven", sql: "SELECT ROW_NUMBER() OVER (PARTITION BY id ORDER BY created_at, id) FROM items", - rule: "SQC018", + rule: "SQLCLEAN018", expected_anchor: Some("ROW_NUMBER"), expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "equal set arity is clean", sql: "SELECT a, b FROM first UNION ALL SELECT c, d FROM second", - rule: "SQC020", + rule: "SQLCLEAN020", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "dynamic pivot star has data-dependent columns", sql: "SELECT * FROM orders PIVOT(MAX(amount) FOR category IN (ANY ORDER BY category))", - rule: "SQC021", + rule: "SQLCLEAN021", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "audit relation parameter star has invocation-dependent columns", - sql: "SELECT * FROM __sqlbuild_audit_parameter_0__", - rule: "SQC021", + sql: "SELECT * FROM __sqlclean_relation_parameter_0__", + rule: "SQLCLEAN021", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "qualified alias is used", sql: "SELECT kept.id FROM items AS kept", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "left join predicate retained in on is clean", sql: "SELECT a.id FROM a LEFT JOIN b ON a.id = b.id AND b.active = TRUE", - rule: "SQC024", + rule: "SQLCLEAN024", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "explicit inner join is clean", sql: "SELECT a.id FROM a INNER JOIN b ON a.id = b.id", - rule: "SQC025", + rule: "SQLCLEAN025", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "null literal inside not-in subquery expression is not a literal list", sql: "SELECT id FROM items WHERE id NOT IN (SELECT COALESCE(id, NULL) FROM other)", - rule: "SQC019", + rule: "SQLCLEAN019", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "left join null probe preserves unmatched rows", sql: "SELECT a.id FROM a LEFT JOIN b ON a.id = b.id WHERE b.id IS NULL", - rule: "SQC024", + rule: "SQLCLEAN024", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "left join predicate guarded by null probe preserves unmatched rows", sql: "SELECT a.id FROM a LEFT JOIN b ON a.id = b.id WHERE b.active = TRUE OR b.id IS NULL", - rule: "SQC024", + rule: "SQLCLEAN024", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "qualified catalog path is not treated as an unknown relation alias", sql: "SELECT catalog.schema.items.id FROM catalog.schema.items", - rule: "SQC029", + rule: "SQLCLEAN029", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "correlated subquery keeps outer table alias", sql: "SELECT id FROM items AS kept WHERE EXISTS (SELECT 1 FROM other WHERE other.id = kept.id)", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "asof join is not rewritten as an inner join", sql: "SELECT a.id FROM a ASOF JOIN b ON a.id = b.id", - rule: "SQC025", + rule: "SQLCLEAN025", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "semi join is not rewritten as an inner join", sql: "SELECT a.id FROM a SEMI JOIN b ON a.id = b.id", - rule: "SQC025", + rule: "SQLCLEAN025", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "table alias carrying a column list is retained", sql: "SELECT a, b FROM items AS t(a, b)", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "bracket list commas do not change set projection arity", sql: "SELECT a, [1, 2, 3] AS arr FROM t UNION ALL SELECT a, [4] AS arr FROM t", - rule: "SQC020", + rule: "SQLCLEAN020", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "quoted output alias is not redundant with an unquoted identifier", sql: "SELECT value AS \"value\" FROM items", - rule: "SQC016", + rule: "SQLCLEAN016", expected_anchor: None, expected_replacement: None, }, @@ -1619,8 +1619,8 @@ fn given_ceremonial_cte_contexts_when_linting_then_only_harness_dependencies_are "version": 1, "sql": test_case.sql, "dialect": "duckdb", - "enabled_rules": ["SQC005"], - "allows_ceremonial_select": true, + "enabled_rules": ["SQLCLEAN005"], + "fixture_harness": fixture_harness(), }) .to_string(), )?; @@ -1653,44 +1653,44 @@ fn given_dependency_identity_when_linting_import_stars_then_only_plain_top_level let test_cases = [ test_types::DependencyImportLintTestCase { description: "plain top-level dependency import", - sql: "WITH imported_orders AS (SELECT * FROM __sqb_lint_0__) SELECT order_id FROM imported_orders", - dependency_identifiers: &["__sqb_lint_0__"], + sql: "WITH imported_orders AS (SELECT * FROM __sqlclean_interpolation_0__) SELECT order_id FROM imported_orders", + dependency_identifiers: &["__sqlclean_interpolation_0__"], expected_count: 0, }, test_types::DependencyImportLintTestCase { description: "star without from remains diagnosable", sql: "WITH imported_orders AS (SELECT *) SELECT order_id FROM imported_orders", - dependency_identifiers: &["__sqb_lint_0__"], + dependency_identifiers: &["__sqlclean_interpolation_0__"], expected_count: 1, }, test_types::DependencyImportLintTestCase { description: "set operation import is transformed", - sql: "WITH imported_orders AS (SELECT * FROM __sqb_lint_0__ UNION ALL SELECT order_id FROM orders) SELECT order_id FROM imported_orders", - dependency_identifiers: &["__sqb_lint_0__"], + sql: "WITH imported_orders AS (SELECT * FROM __sqlclean_interpolation_0__ UNION ALL SELECT order_id FROM orders) SELECT order_id FROM imported_orders", + dependency_identifiers: &["__sqlclean_interpolation_0__"], expected_count: 1, }, test_types::DependencyImportLintTestCase { description: "dynamic relation is not a dependency", - sql: "WITH imported_orders AS (SELECT * FROM __sqb_lint_0__) SELECT order_id FROM imported_orders", + sql: "WITH imported_orders AS (SELECT * FROM __sqlclean_interpolation_0__) SELECT order_id FROM imported_orders", dependency_identifiers: &[], expected_count: 1, }, test_types::DependencyImportLintTestCase { description: "terminal dependency star remains uncontrolled", - sql: "SELECT * FROM __sqb_lint_0__", - dependency_identifiers: &["__sqb_lint_0__"], + sql: "SELECT * FROM __sqlclean_interpolation_0__", + dependency_identifiers: &["__sqlclean_interpolation_0__"], expected_count: 1, }, test_types::DependencyImportLintTestCase { description: "transformed dependency import remains uncontrolled", - sql: "WITH imported_orders AS (SELECT *, CURRENT_TIMESTAMP AS loaded_at FROM __sqb_lint_0__) SELECT order_id FROM imported_orders", - dependency_identifiers: &["__sqb_lint_0__"], + sql: "WITH imported_orders AS (SELECT *, CURRENT_TIMESTAMP AS loaded_at FROM __sqlclean_interpolation_0__) SELECT order_id FROM imported_orders", + dependency_identifiers: &["__sqlclean_interpolation_0__"], expected_count: 1, }, test_types::DependencyImportLintTestCase { description: "nested dependency import remains uncontrolled", - sql: "WITH outer_query AS (WITH imported_orders AS (SELECT * FROM __sqb_lint_0__) SELECT order_id FROM imported_orders) SELECT order_id FROM outer_query", - dependency_identifiers: &["__sqb_lint_0__"], + sql: "WITH outer_query AS (WITH imported_orders AS (SELECT * FROM __sqlclean_interpolation_0__) SELECT order_id FROM imported_orders) SELECT order_id FROM outer_query", + dependency_identifiers: &["__sqlclean_interpolation_0__"], expected_count: 1, }, ]; @@ -1700,7 +1700,7 @@ fn given_dependency_identity_when_linting_import_stars_then_only_plain_top_level "version": 1, "sql": test_case.sql, "dialect": "duckdb", - "enabled_rules": ["SQC021"], + "enabled_rules": ["SQLCLEAN021"], "dependency_identifiers": test_case.dependency_identifiers, }) .to_string(), @@ -1725,7 +1725,7 @@ fn given_ceremonial_select_context_when_linting_terminal_shape_then_rule_035_all let test_cases = [test_types::PlainSqlLintTestCase { description: "direct ceremonial select is valid in harness context", sql: "WITH __source__raw_orders AS (SELECT 1 AS order_id), __expected__orders AS (SELECT 1 AS order_id) SELECT 1", - rule: "SQC035", + rule: "SQLCLEAN035", expected_count: 0, }]; for test_case in test_cases { @@ -1735,7 +1735,7 @@ fn given_ceremonial_select_context_when_linting_terminal_shape_then_rule_035_all "sql": test_case.sql, "dialect": "duckdb", "enabled_rules": [test_case.rule], - "allows_ceremonial_select": true, + "fixture_harness": fixture_harness(), }) .to_string(), )?; @@ -1759,7 +1759,7 @@ fn given_tsql_bare_union_when_linting_then_diagnostic_has_no_invalid_fix() -> Re description: "T-SQL bare UNION is diagnosed without an invalid fix", sql: "SELECT 1 UNION SELECT 2", dialect: "tsql", - rule: "SQC008", + rule: "SQLCLEAN008", expected_count: 1, expected_fix: false, expected_reason: "the active dialect does not accept explicit UNION DISTINCT", @@ -1950,8 +1950,8 @@ fn given_ordered_sql_batch_when_formatting_then_outputs_are_parallel_and_ordered fn given_unknown_rule_when_linting_then_request_is_rejected() -> Result<(), String> { let test_cases = [test_types::InvalidRuleTestCase { description: "unknown native lint rule", - rule: "SQC999", - expected_message: "unknown native lint rule 'SQC999'", + rule: "SQLCLEAN999", + expected_message: "unknown native lint rule 'SQLCLEAN999'", }]; for test_case in &test_cases { diff --git a/crates/sqlclean/src/sql_lint/tests/test_types.rs b/crates/sqlclean/src/sql_lint/tests/test_types.rs index 6a3348b..bbe79a3 100644 --- a/crates/sqlclean/src/sql_lint/tests/test_types.rs +++ b/crates/sqlclean/src/sql_lint/tests/test_types.rs @@ -8,7 +8,7 @@ pub(crate) struct LintTestCase { pub(crate) struct EmptyFixtureLintTestCase { pub(crate) description: &'static str, pub(crate) sql: &'static str, - pub(crate) allows_empty_fixture_star: bool, + pub(crate) in_fixture_harness: bool, pub(crate) expected_diagnostic_count: usize, } diff --git a/crates/sqlclean/src/sql_lint/tests/test_unused_table_alias.rs b/crates/sqlclean/src/sql_lint/tests/test_unused_table_alias.rs index 95a86de..69849d6 100644 --- a/crates/sqlclean/src/sql_lint/tests/test_unused_table_alias.rs +++ b/crates/sqlclean/src/sql_lint/tests/test_unused_table_alias.rs @@ -7,105 +7,105 @@ fn given_implicit_and_explicit_table_aliases_when_linting_then_unused_aliases_ma test_types::AdditionalLintRuleTestCase { description: "unused implicit table alias", sql: "SELECT id FROM items unused", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: Some("unused"), expected_replacement: Some(""), }, test_types::AdditionalLintRuleTestCase { description: "unused implicit joined table alias", sql: "SELECT o.id FROM orders o INNER JOIN customers unused ON o.customer_id = o.id", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: Some("unused"), expected_replacement: Some(""), }, test_types::AdditionalLintRuleTestCase { description: "unused implicit qualified table alias", sql: "SELECT id FROM warehouse.analytics.items unused", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: Some("unused"), expected_replacement: Some(""), }, test_types::AdditionalLintRuleTestCase { description: "unused implicit subquery alias", sql: "SELECT id FROM (SELECT id FROM items) unused", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: Some("unused"), expected_replacement: Some(""), }, test_types::AdditionalLintRuleTestCase { description: "unused implicit lateral table function alias", sql: "SELECT src.id FROM items src, LATERAL FLATTEN(input => src.payload) unused", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: Some("unused"), expected_replacement: Some(""), }, test_types::AdditionalLintRuleTestCase { description: "used implicit table alias", sql: "SELECT kept.id FROM items kept", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "used implicit joined table aliases", sql: "SELECT o.id, c.name FROM orders o INNER JOIN customers c ON o.customer_id = c.id", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "used implicit qualified table alias", sql: "SELECT kept.id FROM warehouse.analytics.items kept", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "used implicit subquery alias", sql: "SELECT sub.id FROM (SELECT id FROM items) sub", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "used implicit lateral table function alias", sql: "SELECT flattened.value FROM items src, LATERAL FLATTEN(input => src.payload) flattened", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "implicit alias used by correlated subquery", sql: "SELECT id FROM items kept WHERE EXISTS (SELECT 1 FROM other WHERE other.id = kept.id)", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "implicit alias carrying a column list is retained", sql: "SELECT a FROM items t(a)", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "qualified relation name is not an implicit alias", sql: "SELECT id FROM warehouse.analytics.items", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "join modifier keywords are not implicit aliases", sql: "SELECT o.id, c.name FROM orders o POSITIONAL JOIN customers c", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "join condition identifiers are not implicit aliases", sql: "SELECT o.id, c.name FROM orders o INNER JOIN customers c USING (customer_id)", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, @@ -147,140 +147,140 @@ fn given_join_modifiers_and_whole_row_uses_when_linting_duckdb_then_aliases_are_ test_types::AdditionalLintRuleTestCase { description: "unaliased relation before positional join has no alias", sql: "SELECT * FROM orders POSITIONAL JOIN customers", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "unaliased relation before asof join has no alias", sql: "SELECT * FROM orders ASOF JOIN prices ON orders.item_id = prices.item_id AND orders.ordered_at >= prices.valid_from", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "unaliased relation before natural join has no alias", sql: "SELECT * FROM orders NATURAL JOIN customers", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "unaliased relation before anti join has no alias", sql: "SELECT * FROM orders ANTI JOIN refunds USING (order_id)", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "unaliased relation before semi join has no alias", sql: "SELECT * FROM orders SEMI JOIN refunds USING (order_id)", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "unaliased relation before cross join has no alias", sql: "SELECT * FROM orders CROSS JOIN customers", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "implicit alias repeating the relation name is unused", sql: "SELECT id FROM orders orders", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: Some("orders"), expected_replacement: Some(""), }, test_types::AdditionalLintRuleTestCase { description: "explicit alias repeating the relation name is unused", sql: "SELECT id FROM orders AS orders", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: Some("AS orders"), expected_replacement: Some(""), }, test_types::AdditionalLintRuleTestCase { description: "alias repeating the relation name is used when referenced", sql: "SELECT orders.id FROM orders orders", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "unaliased relation before window clause has no alias", sql: "SELECT SUM(amount) OVER w FROM orders WINDOW w AS (ORDER BY id)", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "unaliased relation before tablesample has no alias", sql: "SELECT * FROM orders TABLESAMPLE BERNOULLI (10)", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "unaliased relation before unpivot has no alias", sql: "SELECT * FROM orders UNPIVOT (amount FOR month IN (jan, feb))", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "implicit alias used as whole-row function argument", sql: "SELECT row_to_json(o) AS payload FROM orders o", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "explicit alias used as whole-row function argument", sql: "SELECT row_to_json(o) AS payload FROM orders AS o", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "implicit alias used as bare projection", sql: "SELECT o FROM orders o", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "explicit alias used as bare projection", sql: "SELECT o FROM orders AS o", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "implicit alias used in whole-row comparison", sql: "SELECT 1 AS present FROM orders o WHERE o IS NOT NULL", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "explicit alias used in whole-row comparison", sql: "SELECT 1 AS present FROM orders AS o WHERE o IS NOT NULL", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: None, expected_replacement: None, }, test_types::AdditionalLintRuleTestCase { description: "unused implicit alias beside an unrelated qualified column is reported", sql: "SELECT c.o FROM customers c CROSS JOIN orders o", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: Some("o"), expected_replacement: Some(""), }, test_types::AdditionalLintRuleTestCase { description: "unused explicit alias shadowed by an output alias is reported", sql: "SELECT order_id AS o FROM orders AS o", - rule: "SQC023", + rule: "SQLCLEAN023", expected_anchor: Some("AS o"), expected_replacement: Some(""), }, diff --git a/crates/sqlclean/src/sql_quality/_helpers/cte_columns.rs b/crates/sqlclean/src/sql_quality/_helpers/cte_columns.rs index 8f48d4b..635a244 100644 --- a/crates/sqlclean/src/sql_quality/_helpers/cte_columns.rs +++ b/crates/sqlclean/src/sql_quality/_helpers/cte_columns.rs @@ -1,4 +1,4 @@ -//! SQC042: output columns of non-final CTEs that no later step reads. +//! SQLCLEAN042: output columns of non-final CTEs that no later step reads. use std::borrow::Cow; @@ -9,7 +9,7 @@ use polyglot_sql::{Expression, ExpressionWalk}; use crate::sql_lint::models::{LintDiagnostic, LintEdit}; use crate::sql_quality::constants::{ DISTINCT_UNUSED_REMEDIATION, GROUP_BY_ALL_UNUSED_REMEDIATION, GROUP_KEY_UNUSED_REMEDIATION, - INTERPOLATION_SENTINEL_PREFIXES, UNUSED_CTE_OUTPUT, + UNUSED_CTE_OUTPUT, }; use crate::sql_quality::models::QualityRequest; use crate::sql_quality::removal_safety::{expression_refusal, reads_whole_rows, select_refusal}; @@ -448,10 +448,10 @@ fn unused_outputs( found } -/// Neutralized `@macro` / `@variable` interpolations can stand for any columns. +/// Placeholders for template expressions can stand for any columns. fn is_interpolation(name: &str) -> bool { let name: String = lower(name); - INTERPOLATION_SENTINEL_PREFIXES + crate::constants::GENERATED_PLACEHOLDER_PREFIXES .iter() .any(|prefix| name.starts_with(prefix)) } diff --git a/crates/sqlclean/src/sql_quality/_helpers/declared_keys.rs b/crates/sqlclean/src/sql_quality/_helpers/declared_keys.rs deleted file mode 100644 index 02607a9..0000000 --- a/crates/sqlclean/src/sql_quality/_helpers/declared_keys.rs +++ /dev/null @@ -1,50 +0,0 @@ -//! Unique keys one relation declares through its incremental config and column audits. - -use crate::sql_quality::constants::{ - INCREMENTAL_MATERIALIZATION, KEY_PRESERVING_STRATEGIES, KEYED_DELETE_INSERT_STRATEGY, - MICROBATCH_MODE, NOT_NULL_AUDIT, UNIQUE_AUDIT, -}; -use crate::sql_quality::models::{DeclaredKeyColumn, DeclaredRelation}; - -/// `unique_key` only where the incremental strategy keeps one row per key. -pub(crate) fn trusted_unique_key(relation: &DeclaredRelation) -> Vec> { - let strategy: String = relation.incremental_strategy.to_lowercase(); - let trusted: bool = relation.materialized.to_lowercase() == INCREMENTAL_MATERIALIZATION - && relation.incremental_mode.to_lowercase() != MICROBATCH_MODE - && KEY_PRESERVING_STRATEGIES.contains(&strategy.as_str()) - && !(strategy == KEYED_DELETE_INSERT_STRATEGY && relation.has_cursor); - match &relation.unique_key { - Some(key) if trusted && !key.is_empty() => vec![key.clone()], - _ => Vec::new(), - } -} - -/// Columns with a `unique` audit that are also non-null by audit or `nullable false`. -pub(crate) fn non_null_unique_columns(relation: &DeclaredRelation) -> Vec { - let mut unique: Vec = Vec::new(); - let mut not_null: Vec = Vec::new(); - for column in &relation.columns { - if has_audit(column, UNIQUE_AUDIT) { - unique.push(column.name.clone()); - } - if has_audit(column, NOT_NULL_AUDIT) || column.not_nullable { - not_null.push(str::to_lowercase(&column.name)); - } - } - for (definition, argument) in &relation.audits { - let Some(argument) = argument else { - continue; - }; - if definition == NOT_NULL_AUDIT { - not_null.push(str::to_lowercase(argument)); - } else if definition == UNIQUE_AUDIT { - unique.push(argument.clone()); - } - } - unique.retain(|column| not_null.contains(&str::to_lowercase(column))); - unique -} - -fn has_audit(column: &DeclaredKeyColumn, name: &str) -> bool { - column.audits.iter().any(|audit| audit == name) -} diff --git a/crates/sqlclean/src/sql_quality/_helpers/json_parses.rs b/crates/sqlclean/src/sql_quality/_helpers/json_parses.rs index ef7a3d3..1caaf5d 100644 --- a/crates/sqlclean/src/sql_quality/_helpers/json_parses.rs +++ b/crates/sqlclean/src/sql_quality/_helpers/json_parses.rs @@ -1,4 +1,4 @@ -//! SQC045: the same JSON payload column parsed more than once in one SELECT scope. +//! SQLCLEAN045: the same JSON payload column parsed more than once in one SELECT scope. use std::borrow::Cow; use std::collections::HashMap; diff --git a/crates/sqlclean/src/sql_quality/_helpers/literals.rs b/crates/sqlclean/src/sql_quality/_helpers/literals.rs index 25ca489..cb250d0 100644 --- a/crates/sqlclean/src/sql_quality/_helpers/literals.rs +++ b/crates/sqlclean/src/sql_quality/_helpers/literals.rs @@ -1,4 +1,4 @@ -//! SQC044: string literals longer than the project limit. +//! SQLCLEAN044: string literals longer than the project limit. use std::borrow::Cow; diff --git a/crates/sqlclean/src/sql_quality/_helpers/ranking.rs b/crates/sqlclean/src/sql_quality/_helpers/ranking.rs index b1088df..23dcb2e 100644 --- a/crates/sqlclean/src/sql_quality/_helpers/ranking.rs +++ b/crates/sqlclean/src/sql_quality/_helpers/ranking.rs @@ -1,4 +1,4 @@ -//! SQC043 ranking sort caps and SQC018 ranking determinism proofs. +//! SQLCLEAN043 ranking sort caps and SQLCLEAN018 ranking determinism proofs. use std::borrow::Cow; use std::collections::{HashMap, HashSet}; diff --git a/crates/sqlclean/src/sql_quality/_helpers/removal_safety.rs b/crates/sqlclean/src/sql_quality/_helpers/removal_safety.rs index 92f6025..24b7641 100644 --- a/crates/sqlclean/src/sql_quality/_helpers/removal_safety.rs +++ b/crates/sqlclean/src/sql_quality/_helpers/removal_safety.rs @@ -1,4 +1,4 @@ -//! SQC042 allow-list: when removing an unused CTE output provably keeps every row. +//! SQLCLEAN042 allow-list: when removing an unused CTE output provably keeps every row. use polyglot_sql::expressions::Select; use polyglot_sql::traversal::contains_aggregate; diff --git a/crates/sqlclean/src/sql_quality/_helpers/safety.rs b/crates/sqlclean/src/sql_quality/_helpers/safety.rs index 8a26587..6615bf3 100644 --- a/crates/sqlclean/src/sql_quality/_helpers/safety.rs +++ b/crates/sqlclean/src/sql_quality/_helpers/safety.rs @@ -1,4 +1,4 @@ -//! SQC046 to SQC053: report-only safety Rules for queries that cannot do what they appear to. +//! SQLCLEAN046 to SQLCLEAN053: report-only safety Rules for queries that cannot do what they appear to. use std::borrow::Cow; use std::collections::HashSet; @@ -237,7 +237,7 @@ fn cte_key(identifier: &Identifier, dialect: DialectType) -> String { } } -/// `CASE x WHEN NULL` and a singleton positive `IN (NULL)`; SQC019 owns `NOT IN`. +/// `CASE x WHEN NULL` and a singleton positive `IN (NULL)`; SQLCLEAN019 owns `NOT IN`. fn null_match_spans(significant: &Significant<'_>) -> Vec { let mut spans: Vec = Vec::new(); for index in 0..significant.tokens.len() { diff --git a/crates/sqlclean/src/sql_quality/constants.rs b/crates/sqlclean/src/sql_quality/constants.rs index 2adffd4..fa1cbd2 100644 --- a/crates/sqlclean/src/sql_quality/constants.rs +++ b/crates/sqlclean/src/sql_quality/constants.rs @@ -1,72 +1,72 @@ use crate::sql_lint::models::LintRuleMetadata; pub(crate) const UNUSED_CTE_OUTPUT: LintRuleMetadata = LintRuleMetadata { - code: "SQC042", + code: "SQLCLEAN042", message: "CTE output column is never read later in the query", remediation: "Remove the column from the CTE output, or read it in a later CTE or the final query.", }; pub(crate) const RANKING_SORT_CAP: LintRuleMetadata = LintRuleMetadata { - code: "SQC043", + code: "SQLCLEAN043", message: "Ranking window sorts by more expressions than max_ranking_order_by", remediation: "Order by the one or two columns that decide which row wins, then a unique row key as the final tie-breaker.", }; pub(crate) const LONG_LITERAL: LintRuleMetadata = LintRuleMetadata { - code: "SQC044", + code: "SQLCLEAN044", message: "String literal is longer than max_literal_length", remediation: "Shorten the literal, or move the value into a reference table or a query parameter.", }; pub(crate) const REPEATED_JSON_PARSE: LintRuleMetadata = LintRuleMetadata { - code: "SQC045", + code: "SQLCLEAN045", message: "JSON payload is parsed more than once in one SELECT", remediation: "Parse the payload once in the CTE that reads it, for example `TRY_PARSE_JSON(value) AS payload`, and read every field from that column in a later step.", }; pub(crate) const DUPLICATE_CTE_NAME: LintRuleMetadata = LintRuleMetadata { - code: "SQC046", + code: "SQLCLEAN046", message: "WITH defines the same CTE name more than once", remediation: "Give each CTE in one WITH clause its own name; engines reject the duplicate or silently read only one definition.", }; pub(crate) const NULL_MATCH: LintRuleMetadata = LintRuleMetadata { - code: "SQC047", + code: "SQLCLEAN047", message: "CASE WHEN NULL or IN (NULL) never matches", remediation: "A simple CASE compares with =, and x IN (NULL) means x = NULL, so neither is ever true. Test the value with IS NULL, for example CASE WHEN x IS NULL THEN ... END.", }; pub(crate) const LITERAL_ZERO_DIVISION: LintRuleMetadata = LintRuleMetadata { - code: "SQC048", + code: "SQLCLEAN048", message: "Expression divides by a literal zero", remediation: "Depending on the dialect this raises an error or returns NULL. Remove the division, or divide by NULLIF(divisor, 0) when the divisor can legitimately be zero.", }; pub(crate) const UNFILTERED_WRITE: LintRuleMetadata = LintRuleMetadata { - code: "SQC049", + code: "SQLCLEAN049", message: "UPDATE or DELETE has no limiting predicate and changes every row", remediation: "Add a WHERE condition that reads the target rows; a constant such as WHERE TRUE does not limit them. Use TRUNCATE, or an exception for this file, when changing every row is intended.", }; pub(crate) const INSERT_WITHOUT_COLUMNS: LintRuleMetadata = LintRuleMetadata { - code: "SQC050", + code: "SQLCLEAN050", message: "INSERT does not list its target columns", remediation: "List the target columns, for example INSERT INTO orders (order_id, status) SELECT ..., so values cannot shift into the wrong column when the table changes.", }; pub(crate) const NATURAL_JOIN: LintRuleMetadata = LintRuleMetadata { - code: "SQC051", + code: "SQLCLEAN051", message: "NATURAL JOIN matches on every column the relations share", remediation: "Join with an explicit ON or USING condition; adding a column with a shared name to either relation silently changes a NATURAL JOIN.", }; pub(crate) const REVERSED_BETWEEN: LintRuleMetadata = LintRuleMetadata { - code: "SQC052", + code: "SQLCLEAN052", message: "BETWEEN lower bound is greater than its upper bound", remediation: "BETWEEN low AND high is empty when low > high, so it never matches, and NOT BETWEEN matches every non-NULL value. Swap the bounds, or write BETWEEN SYMMETRIC where the dialect supports it.", }; pub(crate) const MISPLACED_AGGREGATE: LintRuleMetadata = LintRuleMetadata { - code: "SQC053", + code: "SQLCLEAN053", message: "Aggregate or window function is used in WHERE, ON or GROUP BY", remediation: "Rows are filtered and grouped before aggregates and windows are computed. Filter an aggregate in HAVING, filter a window result in QUALIFY or an outer query, and group by the underlying columns.", }; -pub(crate) const UNSTABLE_ROW_NUMBER_CODE: &str = "SQC018"; +pub(crate) const UNSTABLE_ROW_NUMBER_CODE: &str = "SQLCLEAN018"; pub(crate) const UNPROVEN_RANKING_MESSAGE: &str = "Ranking window order is not proven unique within its partition"; pub(crate) const UNPROVEN_RANKING_REMEDIATION: &str = "PARTITION BY and ORDER BY must together cover a unique key of the ranked rows. End the ORDER BY with a unique, non-null tie-breaker column. If the rows have no unique column, build one upstream from the columns that identify a row (for example `HASH(source_partition, source_offset, line_index) AS row_key`) and order by it last."; -/// SQC043 guidance before the `max_ranking_order_by` setting snippet. -pub(crate) const RANKING_SORT_GUIDANCE: &str = "Order by the one or two columns that decide which row wins, then a unique row key as the final tie-breaker. If the rows have no unique column, build one upstream from the columns that identify a row (for example `HASH(source_partition, source_offset, line_index) AS row_key`), so SQC018 can prove the order is deterministic. If the order genuinely needs more keys, raise `max_ranking_order_by`."; -/// SQC044 guidance before the `max_literal_length` setting snippet. +/// SQLCLEAN043 guidance before the `max_ranking_order_by` setting snippet. +pub(crate) const RANKING_SORT_GUIDANCE: &str = "Order by the one or two columns that decide which row wins, then a unique row key as the final tie-breaker. If the rows have no unique column, build one upstream from the columns that identify a row (for example `HASH(source_partition, source_offset, line_index) AS row_key`), so SQLCLEAN018 can prove the order is deterministic. If the order genuinely needs more keys, raise `max_ranking_order_by`."; +/// SQLCLEAN044 guidance before the `max_literal_length` setting snippet. pub(crate) const LONG_LITERAL_GUIDANCE: &str = "Shorten the literal, or move the value into a reference table or a query parameter so it is defined once."; pub(crate) const RULES_THRESHOLDS_SECTION: &str = "rules.thresholds"; pub(crate) const MAX_RANKING_ORDER_BY_KEY: &str = "max_ranking_order_by"; @@ -225,18 +225,4 @@ pub(crate) const DEFAULT_MAX_LITERAL_LENGTH: usize = 100; pub(crate) const DEFAULT_MAX_RANKING_ORDER_BY: usize = 5; pub(crate) const TIE_SENSITIVE_FUNCTIONS: [&str; 3] = ["ROW_NUMBER", "FIRST_VALUE", "LAST_VALUE"]; pub(crate) const MIN_REMOVABLE_OUTPUTS: usize = 2; -pub(crate) const INTERPOLATION_SENTINEL_PREFIXES: [&str; 3] = [ - "__sqb_lint_", - "__sqlbuild_audit_parameter_", - "__sqlbuild_context_parameter_", -]; pub(crate) const FIRST_ROW: &str = "1"; - -pub(crate) const UNIQUE_AUDIT: &str = "unique"; -pub(crate) const NOT_NULL_AUDIT: &str = "not_null"; -pub(crate) const INCREMENTAL_MATERIALIZATION: &str = "incremental"; -pub(crate) const MICROBATCH_MODE: &str = "microbatch"; -pub(crate) const KEYED_DELETE_INSERT_STRATEGY: &str = "delete_insert"; -pub(crate) const KEY_PRESERVING_STRATEGIES: [&str; 2] = ["merge", KEYED_DELETE_INSERT_STRATEGY]; -pub(crate) const RELATION_KIND_REF: &str = "ref"; -pub(crate) const RELATION_KIND_SEED: &str = "seed"; diff --git a/crates/sqlclean/src/sql_quality/main/declared_relation_keys.rs b/crates/sqlclean/src/sql_quality/main/declared_relation_keys.rs deleted file mode 100644 index f999212..0000000 --- a/crates/sqlclean/src/sql_quality/main/declared_relation_keys.rs +++ /dev/null @@ -1,38 +0,0 @@ -use std::collections::BTreeMap; - -use crate::sql_quality::constants::{RELATION_KIND_REF, RELATION_KIND_SEED}; -use crate::sql_quality::declared_keys::{non_null_unique_columns, trusted_unique_key}; -use crate::sql_quality::models::DeclaredRelation; - -/// Keys proving one row per key by `kind:name`; seeds are also refs, one-row relations key `[]`. -pub fn declared_relation_keys( - relations: &[DeclaredRelation], -) -> BTreeMap>> { - let mut keys: BTreeMap>> = BTreeMap::new(); - for relation in relations { - let mut found: Vec> = trusted_unique_key(relation); - for column in non_null_unique_columns(relation) { - found.push(vec![column]); - } - if relation.at_most_one_row { - found.push(Vec::new()); - } - if found.is_empty() { - continue; - } - let mut kinds: Vec<&str> = vec![relation.kind.as_str()]; - if relation.kind == RELATION_KIND_SEED { - kinds.push(RELATION_KIND_REF); - } - for kind in kinds { - let entry: &mut Vec> = - keys.entry(format!("{kind}:{}", relation.name)).or_default(); - for key in &found { - if !entry.contains(key) { - entry.push(key.clone()); - } - } - } - } - keys -} diff --git a/crates/sqlclean/src/sql_quality/main/mod.rs b/crates/sqlclean/src/sql_quality/main/mod.rs index f8c958d..4c63048 100644 --- a/crates/sqlclean/src/sql_quality/main/mod.rs +++ b/crates/sqlclean/src/sql_quality/main/mod.rs @@ -1,2 +1 @@ -pub mod declared_relation_keys; pub mod diagnostics; diff --git a/crates/sqlclean/src/sql_quality/mod.rs b/crates/sqlclean/src/sql_quality/mod.rs index 7834594..1881d4e 100644 --- a/crates/sqlclean/src/sql_quality/mod.rs +++ b/crates/sqlclean/src/sql_quality/mod.rs @@ -3,8 +3,6 @@ pub mod constants; #[path = "_helpers/cte_columns.rs"] mod cte_columns; -#[path = "_helpers/declared_keys.rs"] -mod declared_keys; #[path = "_helpers/json_parses.rs"] mod json_parses; #[path = "_helpers/keys.rs"] diff --git a/crates/sqlclean/src/sql_quality/models.rs b/crates/sqlclean/src/sql_quality/models.rs index 577d6a0..24892b2 100644 --- a/crates/sqlclean/src/sql_quality/models.rs +++ b/crates/sqlclean/src/sql_quality/models.rs @@ -18,30 +18,3 @@ pub(crate) struct QualityRequest<'a> { /// The configuration file remediation text tells the user to edit. pub(crate) config_file: &'a str, } - -/// One project relation's declared key facts: its incremental config and audited columns. -#[derive(Debug, Clone, Default)] -pub struct DeclaredRelation { - /// `ref`, `seed` or `source`. - pub kind: String, - pub name: String, - pub materialized: String, - pub incremental_mode: String, - pub incremental_strategy: String, - pub has_cursor: bool, - /// The configured `unique_key` columns, when it is a name or a list of names. - pub unique_key: Option>, - pub columns: Vec, - /// Table-level audits as `(definition name, its string column argument)`. - pub audits: Vec<(String, Option)>, - /// Whether the relation is known to hold at most one row, which the empty key proves. - pub at_most_one_row: bool, -} - -/// One declared column: its name, its audit definition names and whether it is declared non-null. -#[derive(Debug, Clone, Default)] -pub struct DeclaredKeyColumn { - pub name: String, - pub audits: Vec, - pub not_nullable: bool, -} diff --git a/crates/sqlclean/src/sql_quality/tests/test_json_parses.rs b/crates/sqlclean/src/sql_quality/tests/test_json_parses.rs index 570a272..3586cc6 100644 --- a/crates/sqlclean/src/sql_quality/tests/test_json_parses.rs +++ b/crates/sqlclean/src/sql_quality/tests/test_json_parses.rs @@ -5,7 +5,7 @@ use serde_json::Value; use crate::sql_quality::tests::helpers::{anchors, lint_dialect, wide_json_select}; use crate::sql_quality::tests::test_types::{JsonParseScaleTestCase, JsonParseTestCase}; -const RULE: &str = "SQC045"; +const RULE: &str = "SQLCLEAN045"; #[test] fn given_json_parse_calls_when_linting_then_repeats_in_one_select_are_reported() diff --git a/crates/sqlclean/src/sql_quality/tests/test_quality_rules.rs b/crates/sqlclean/src/sql_quality/tests/test_quality_rules.rs index 7ad2349..132d61b 100644 --- a/crates/sqlclean/src/sql_quality/tests/test_quality_rules.rs +++ b/crates/sqlclean/src/sql_quality/tests/test_quality_rules.rs @@ -9,7 +9,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "long literal is reported without a split fix", sql: "SELECT 'pending orders awaiting shipment' AS label", - rule: "SQC044", + rule: "SQLCLEAN044", relation_keys: "{}", expected_anchors: &["'pending orders awaiting shipment'"], expected_fixed_sql: None, @@ -17,7 +17,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "short literal passes", sql: "SELECT 'pending' AS label", - rule: "SQC044", + rule: "SQLCLEAN044", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, @@ -25,7 +25,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "typed literal is reported without a fix", sql: "SELECT TIMESTAMP '2026-04-01 10:00:00.000000000' AS ordered_at", - rule: "SQC044", + rule: "SQLCLEAN044", relation_keys: "{}", expected_anchors: &["'2026-04-01 10:00:00.000000000'"], expected_fixed_sql: None, @@ -33,7 +33,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "ranking sort above the cap", sql: "SELECT ROW_NUMBER() OVER (PARTITION BY o.customer_id ORDER BY o.a, o.b, o.order_id) AS rn FROM orders AS o", - rule: "SQC043", + rule: "SQLCLEAN043", relation_keys: "{}", expected_anchors: &["ROW_NUMBER"], expected_fixed_sql: None, @@ -41,7 +41,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "ranking sort within the cap", sql: "SELECT RANK() OVER (ORDER BY o.a, o.order_id) AS rn FROM orders AS o", - rule: "SQC043", + rule: "SQLCLEAN043", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, @@ -49,7 +49,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "ordering covers a declared key", sql: "SELECT ROW_NUMBER() OVER (PARTITION BY o.customer_id ORDER BY o.ordered_at, o.order_id) AS rn FROM orders AS o", - rule: "SQC018", + rule: "SQLCLEAN018", relation_keys: r#"{"orders": [["order_id"]]}"#, expected_anchors: &[], expected_fixed_sql: None, @@ -57,7 +57,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "ordering without a key is unproven", sql: "SELECT ROW_NUMBER() OVER (PARTITION BY o.customer_id ORDER BY o.ordered_at) AS rn FROM orders AS o", - rule: "SQC018", + rule: "SQLCLEAN018", relation_keys: r#"{"orders": [["order_id"]]}"#, expected_anchors: &["ROW_NUMBER"], expected_fixed_sql: None, @@ -65,7 +65,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "key proven through a CTE and a one-to-one join", sql: "WITH lines AS (SELECT l.line_id, l.order_id FROM order_lines AS l), final AS (SELECT l.line_id, o.customer_id, ROW_NUMBER() OVER (PARTITION BY o.customer_id ORDER BY l.line_id) AS rn FROM lines AS l INNER JOIN orders AS o ON l.order_id = o.order_id) SELECT f.line_id, f.customer_id, f.rn FROM final AS f", - rule: "SQC018", + rule: "SQLCLEAN018", relation_keys: r#"{"orders": [["order_id"]], "order_lines": [["line_id"]]}"#, expected_anchors: &[], expected_fixed_sql: None, @@ -73,7 +73,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "key lost through a fan-out join", sql: "WITH final AS (SELECT o.order_id, ROW_NUMBER() OVER (ORDER BY o.order_id) AS rn FROM orders AS o INNER JOIN order_lines AS l ON l.order_id = o.order_id) SELECT f.order_id, f.rn FROM final AS f", - rule: "SQC018", + rule: "SQLCLEAN018", relation_keys: r#"{"orders": [["order_id"]], "order_lines": [["line_id"]]}"#, expected_anchors: &["ROW_NUMBER"], expected_fixed_sql: None, @@ -81,7 +81,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "GROUP BY grain is a key", sql: "WITH totals AS (SELECT o.customer_id, SUM(o.amount) AS amount FROM orders AS o GROUP BY o.customer_id), final AS (SELECT t.customer_id, ROW_NUMBER() OVER (ORDER BY t.amount, t.customer_id) AS rn FROM totals AS t) SELECT f.customer_id, f.rn FROM final AS f", - rule: "SQC018", + rule: "SQLCLEAN018", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, @@ -89,7 +89,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "positional GROUP BY grain is a key", sql: "WITH totals AS (SELECT o.customer_id, SUM(o.amount) AS amount FROM orders AS o GROUP BY 1), final AS (SELECT t.customer_id, ROW_NUMBER() OVER (ORDER BY t.amount, t.customer_id) AS rn FROM totals AS t) SELECT f.customer_id, f.rn FROM final AS f", - rule: "SQC018", + rule: "SQLCLEAN018", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, @@ -97,7 +97,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "a later rn = 1 filter makes the partition a key", sql: "WITH ranked AS (SELECT o.order_id, o.customer_id, ROW_NUMBER() OVER (PARTITION BY o.customer_id ORDER BY o.order_id) AS rn FROM orders AS o), latest AS (SELECT r.customer_id, r.order_id FROM ranked AS r WHERE r.rn = 1), final AS (SELECT l.customer_id, ROW_NUMBER() OVER (ORDER BY l.customer_id) AS position FROM latest AS l) SELECT f.customer_id, f.position FROM final AS f", - rule: "SQC018", + rule: "SQLCLEAN018", relation_keys: r#"{"orders": [["order_id"]]}"#, expected_anchors: &[], expected_fixed_sql: None, @@ -105,7 +105,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "a QUALIFY window cannot prove itself", sql: "SELECT o.customer_id, o.order_id FROM orders AS o QUALIFY ROW_NUMBER() OVER (PARTITION BY o.customer_id ORDER BY o.amount DESC) = 1", - rule: "SQC018", + rule: "SQLCLEAN018", relation_keys: r#"{"orders": [["order_id"]]}"#, expected_anchors: &["ROW_NUMBER"], expected_fixed_sql: None, @@ -113,7 +113,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "a QUALIFY partition is a key for later steps", sql: "WITH latest AS (SELECT o.customer_id, o.order_id FROM orders AS o QUALIFY ROW_NUMBER() OVER (PARTITION BY o.customer_id ORDER BY o.order_id) = 1), final AS (SELECT l.customer_id, ROW_NUMBER() OVER (ORDER BY l.customer_id) AS position FROM latest AS l) SELECT f.customer_id, f.position FROM final AS f", - rule: "SQC018", + rule: "SQLCLEAN018", relation_keys: r#"{"orders": [["order_id"]]}"#, expected_anchors: &[], expected_fixed_sql: None, @@ -121,7 +121,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "RANK ties are deterministic", sql: "SELECT RANK() OVER (ORDER BY o.ordered_at) AS rn FROM orders AS o", - rule: "SQC018", + rule: "SQLCLEAN018", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, @@ -129,7 +129,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "unused CTE output is removed", sql: "WITH orders AS (SELECT o.order_id, o.status, o.note FROM raw_orders AS o), final AS (SELECT r.order_id, r.status FROM orders AS r) SELECT f.order_id, f.status FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &["o.note"], expected_fixed_sql: Some( @@ -139,7 +139,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "star pass-through into the final CTE keeps every column", sql: "WITH orders AS (SELECT o.order_id, o.note FROM raw_orders AS o), final AS (SELECT * FROM orders) SELECT * FROM final", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, @@ -147,7 +147,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "star pass-through follows the reader's own reads", sql: "WITH orders AS (SELECT o.order_id, o.note FROM raw_orders AS o), staged AS (SELECT * FROM orders), final AS (SELECT s.order_id FROM staged AS s) SELECT f.order_id FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &["o.note"], expected_fixed_sql: Some( @@ -157,7 +157,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "a same-named cast of a source column is not a lateral read", sql: "WITH orders AS (SELECT o.order_id, CAST(note AS VARCHAR) AS note, o.note || 'x' AS tagged FROM raw_orders AS o), final AS (SELECT r.order_id, r.tagged FROM orders AS r) SELECT f.order_id, f.tagged FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &["CAST(note AS VARCHAR) AS note"], expected_fixed_sql: Some( @@ -166,16 +166,16 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res }, QualityRuleTestCase { description: "an interpolated expression in a reader may read any column", - sql: "WITH orders AS (SELECT o.order_id, o.status FROM raw_orders AS o), final AS (SELECT r.order_id FROM orders AS r WHERE __sqlbuild_audit_parameter_0__) SELECT f.order_id FROM final AS f", - rule: "SQC042", + sql: "WITH orders AS (SELECT o.order_id, o.status FROM raw_orders AS o), final AS (SELECT r.order_id FROM orders AS r WHERE __sqlclean_relation_parameter_0__) SELECT f.order_id FROM final AS f", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, }, QualityRuleTestCase { description: "an interpolated output is never reported", - sql: "WITH orders AS (SELECT o.order_id, __SQB_LINT_0002 FROM raw_orders AS o), final AS (SELECT r.order_id FROM orders AS r) SELECT f.order_id FROM final AS f", - rule: "SQC042", + sql: "WITH orders AS (SELECT o.order_id, __SQLCLEAN_INTERPOLATION_0002 FROM raw_orders AS o), final AS (SELECT r.order_id FROM orders AS r) SELECT f.order_id FROM final AS f", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, @@ -183,7 +183,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "DISTINCT CTE reports without a fix", sql: "WITH orders AS (SELECT DISTINCT o.order_id, o.note FROM raw_orders AS o), final AS (SELECT r.order_id FROM orders AS r) SELECT f.order_id FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &["o.note"], expected_fixed_sql: None, @@ -191,7 +191,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "columns read in later join and filter clauses are used", sql: "WITH orders AS (SELECT o.order_id, o.customer_id, o.status FROM raw_orders AS o), final AS (SELECT c.name FROM orders AS r INNER JOIN customers AS c ON r.customer_id = c.customer_id WHERE r.status = 'open' QUALIFY ROW_NUMBER() OVER (PARTITION BY r.order_id ORDER BY c.name) = 1) SELECT f.name FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, @@ -199,7 +199,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "a column read only through a nested star is used", sql: "WITH g AS (SELECT r.order_id, r.amount FROM raw_orders AS r), final AS (SELECT g.order_id, HASH(g.*) AS row_hash FROM g) SELECT f.order_id, f.row_hash FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, @@ -207,7 +207,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "a whole-row reference reads every column", sql: "WITH g AS (SELECT r.order_id, r.amount FROM raw_orders AS r), final AS (SELECT g.order_id, HASH(g) AS row_hash FROM g) SELECT f.order_id, f.row_hash FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, @@ -215,7 +215,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "COUNT(DISTINCT row) reads every column", sql: "WITH g AS (SELECT r.order_id, r.amount FROM raw_orders AS r), final AS (SELECT COUNT(DISTINCT g) AS n FROM g) SELECT f.n FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, @@ -223,7 +223,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "COLUMNS(*) reads every column", sql: "WITH g AS (SELECT r.order_id, r.amount FROM raw_orders AS r), final AS (SELECT g.order_id FROM g WHERE COLUMNS(*) IS NOT NULL) SELECT f.order_id FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, @@ -231,7 +231,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "COLUMNS with a pattern reads every column", sql: "WITH g AS (SELECT r.order_id, r.amount FROM raw_orders AS r), final AS (SELECT MAX(COLUMNS('order.*')) FROM g) SELECT * FROM final", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, @@ -239,7 +239,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "DISTINCT star pass-through reads every column", sql: "WITH g AS (SELECT r.order_id, r.amount FROM raw_orders AS r), staged AS (SELECT DISTINCT * FROM g), final AS (SELECT s.order_id FROM staged AS s) SELECT f.order_id FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, @@ -247,7 +247,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "a positional ORDER BY over a star pass-through reads every column", sql: "WITH g AS (SELECT r.order_id, r.amount FROM raw_orders AS r), staged AS (SELECT * FROM g ORDER BY 2 LIMIT 1), final AS (SELECT s.order_id FROM staged AS s) SELECT f.order_id FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, @@ -255,7 +255,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "an output alias read in WHERE or GROUP BY is used", sql: "WITH g AS (SELECT r.order_id, r.amount * 2 AS doubled, r.customer_id % 2 AS bucket FROM raw_orders AS r WHERE doubled > 1 GROUP BY r.order_id, doubled, bucket), final AS (SELECT g.order_id FROM g) SELECT f.order_id FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &[], expected_fixed_sql: None, @@ -263,7 +263,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "GROUP BY ALL grouping column is reported without a fix", sql: "WITH g AS (SELECT r.customer_id, r.status, SUM(r.amount) AS total FROM raw_orders AS r GROUP BY ALL), final AS (SELECT g.customer_id, g.total FROM g) SELECT f.customer_id, f.total FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &["r.status"], expected_fixed_sql: None, @@ -271,7 +271,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "an aggregate in an ungrouped select is reported without a fix", sql: "WITH g AS (SELECT 'all' AS label, COUNT(*) AS n FROM raw_orders AS r), final AS (SELECT g.label FROM g) SELECT f.label FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &["COUNT(*) AS n"], expected_fixed_sql: None, @@ -279,7 +279,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "a set-returning projection is reported without a fix", sql: "WITH g AS (SELECT r.order_id, UNNEST(r.tags) AS tag FROM raw_orders AS r), final AS (SELECT g.order_id FROM g) SELECT f.order_id FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &["UNNEST(r.tags) AS tag"], expected_fixed_sql: None, @@ -287,7 +287,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "ORDER BY ALL with LIMIT is reported without a fix", sql: "WITH g AS (SELECT r.order_id, r.customer_id FROM raw_orders AS r ORDER BY ALL LIMIT 1), final AS (SELECT g.order_id FROM g) SELECT f.order_id FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &["r.customer_id"], expected_fixed_sql: None, @@ -295,7 +295,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "DISTINCT ON is reported without a fix", sql: "WITH g AS (SELECT DISTINCT ON (r.customer_id) r.order_id, r.amount FROM raw_orders AS r ORDER BY r.customer_id, r.order_id), final AS (SELECT g.order_id FROM g) SELECT f.order_id FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &["r.amount"], expected_fixed_sql: None, @@ -303,7 +303,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "a volatile projection is reported without a fix", sql: "WITH g AS (SELECT r.order_id, RANDOM() AS draw FROM raw_orders AS r), final AS (SELECT g.order_id FROM g) SELECT f.order_id FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &["RANDOM() AS draw"], expected_fixed_sql: None, @@ -311,7 +311,7 @@ fn given_quality_rule_inputs_when_linting_then_findings_and_fixes_match() -> Res QualityRuleTestCase { description: "a deterministic scalar projection is removed", sql: "WITH g AS (SELECT r.order_id, COALESCE(UPPER(r.status), 'none') AS label FROM raw_orders AS r), final AS (SELECT g.order_id FROM g) SELECT f.order_id FROM final AS f", - rule: "SQC042", + rule: "SQLCLEAN042", relation_keys: "{}", expected_anchors: &["COALESCE(UPPER(r.status), 'none') AS label"], expected_fixed_sql: Some( @@ -344,7 +344,7 @@ fn given_threshold_findings_when_linting_then_remediation_shows_the_exact_settin QualityRemediationTestCase { description: "long literal points at shortening it and the length setting", sql: "SELECT 'pending orders awaiting shipment' AS label", - rule: "SQC044", + rule: "SQLCLEAN044", expected_fragments: &[ "Shorten the literal", "set this in sqlclean.toml:", @@ -355,7 +355,7 @@ fn given_threshold_findings_when_linting_then_remediation_shows_the_exact_settin QualityRemediationTestCase { description: "long ranking sort points at a row key and the sort setting", sql: "SELECT ROW_NUMBER() OVER (PARTITION BY o.customer_id ORDER BY o.a, o.b, o.order_id) AS rn FROM orders AS o", - rule: "SQC043", + rule: "SQLCLEAN043", expected_fragments: &[ "unique row key as the final tie-breaker", "HASH(source_partition, source_offset, line_index) AS row_key", @@ -366,7 +366,7 @@ fn given_threshold_findings_when_linting_then_remediation_shows_the_exact_settin QualityRemediationTestCase { description: "unproven ranking points at a unique tie-breaker and a built row key", sql: "SELECT ROW_NUMBER() OVER (PARTITION BY o.customer_id ORDER BY o.a) AS rn FROM orders AS o", - rule: "SQC018", + rule: "SQLCLEAN018", expected_fragments: &[ "cover a unique key of the ranked rows", "a unique, non-null tie-breaker column", diff --git a/crates/sqlclean/src/sql_quality/tests/test_quality_scale.rs b/crates/sqlclean/src/sql_quality/tests/test_quality_scale.rs index 46f8ad3..512e814 100644 --- a/crates/sqlclean/src/sql_quality/tests/test_quality_scale.rs +++ b/crates/sqlclean/src/sql_quality/tests/test_quality_scale.rs @@ -21,7 +21,7 @@ fn given_many_wide_ctes_with_findings_when_linting_then_quality_rules_stay_linea "version": 1, "sql": wide_cte_chain(test_case.cte_count, test_case.column_count), "dialect": "duckdb", - "enabled_rules": ["SQC018", "SQC042", "SQC043", "SQC044"], + "enabled_rules": ["SQLCLEAN018", "SQLCLEAN042", "SQLCLEAN043", "SQLCLEAN044"], }); let started: Instant = Instant::now(); let response: Value = serde_json::from_str(&lint_json(&request.to_string())?) diff --git a/crates/sqlclean/src/sql_quality/tests/test_safety_rules.rs b/crates/sqlclean/src/sql_quality/tests/test_safety_rules.rs index 517e6bc..74b5156 100644 --- a/crates/sqlclean/src/sql_quality/tests/test_safety_rules.rs +++ b/crates/sqlclean/src/sql_quality/tests/test_safety_rules.rs @@ -11,126 +11,126 @@ fn given_safety_rule_inputs_when_linting_then_exactly_the_mistakes_are_reported( description: "unquoted CTE names collide regardless of case", dialect: "duckdb", sql: "WITH paid AS (SELECT 1 AS x), PAID AS (SELECT 2 AS x) SELECT x FROM paid", - rule: "SQC046", + rule: "SQLCLEAN046", expected_anchors: &["PAID"], }, SafetyRuleTestCase { description: "quoted names that differ in case are distinct in PostgreSQL", dialect: "postgres", sql: r#"WITH "paid" AS (SELECT 1 AS x), "PAID" AS (SELECT 2 AS x) SELECT x FROM "paid""#, - rule: "SQC046", + rule: "SQLCLEAN046", expected_anchors: &[], }, SafetyRuleTestCase { description: "a quoted name equals the folded unquoted name in Snowflake", dialect: "snowflake", sql: r#"WITH "PAID" AS (SELECT 1 AS x), paid AS (SELECT 2 AS x) SELECT x FROM paid"#, - rule: "SQC046", + rule: "SQLCLEAN046", expected_anchors: &["paid"], }, SafetyRuleTestCase { description: "a nested WITH may reuse an outer CTE name", dialect: "duckdb", sql: "WITH paid AS (WITH paid AS (SELECT 1 AS x) SELECT x FROM paid) SELECT x FROM paid", - rule: "SQC046", + rule: "SQLCLEAN046", expected_anchors: &[], }, SafetyRuleTestCase { description: "simple CASE compares with NULL, and a singleton IN list holds only NULL", dialect: "duckdb", sql: "SELECT CASE status WHEN 'open' THEN 1 WHEN NULL THEN 2 END AS s FROM orders WHERE region IN (NULL)", - rule: "SQC047", + rule: "SQLCLEAN047", expected_anchors: &["WHEN NULL", "IN (NULL)"], }, SafetyRuleTestCase { description: "searched CASE, IS NULL, NOT IN and a longer IN list pass", dialect: "duckdb", sql: "SELECT CASE WHEN status IS NULL THEN 1 END AS s FROM orders WHERE region NOT IN (NULL) AND kind IN (1, NULL)", - rule: "SQC047", + rule: "SQLCLEAN047", expected_anchors: &[], }, SafetyRuleTestCase { description: "only the CASE whose operand compares with NULL is reported", dialect: "duckdb", sql: "SELECT CASE status WHEN 'open' THEN CASE WHEN NULL THEN 1 END END AS a, CASE WHEN amount > 0 THEN CASE region WHEN NULL THEN 2 END END AS b FROM orders", - rule: "SQC047", + rule: "SQLCLEAN047", expected_anchors: &["WHEN NULL"], }, SafetyRuleTestCase { description: "division and modulo by literal zero in operator and function form", dialect: "duckdb", sql: "SELECT amount / 0 AS a, amount % 0.0 AS b, MOD(amount, 0) AS c, amount / (-0) AS d FROM orders", - rule: "SQC048", + rule: "SQLCLEAN048", expected_anchors: &["/ 0", "% 0.0", "MOD(amount, 0)", "/ (-0)"], }, SafetyRuleTestCase { description: "a non-zero or computed divisor passes", dialect: "duckdb", sql: "SELECT amount / 0.5 AS a, amount / 1e-400 AS e, amount / 0 ** 2 AS b, MOD(amount, 0 + 1) AS c, amount / NULLIF(quantity, 0) AS d FROM orders", - rule: "SQC048", + rule: "SQLCLEAN048", expected_anchors: &[], }, SafetyRuleTestCase { description: "a missing or constant WHERE does not limit an UPDATE or DELETE", dialect: "duckdb", sql: "UPDATE orders SET status = 'closed'; DELETE FROM orders WHERE TRUE; DELETE FROM orders WHERE 1 = 1", - rule: "SQC049", + rule: "SQLCLEAN049", expected_anchors: &["UPDATE", "DELETE", "DELETE"], }, SafetyRuleTestCase { description: "a row predicate or a subquery limits the write", dialect: "duckdb", sql: "UPDATE orders SET status = 'closed' WHERE closed_at IS NOT NULL; DELETE FROM orders WHERE EXISTS (SELECT 1 FROM refunds)", - rule: "SQC049", + rule: "SQLCLEAN049", expected_anchors: &[], }, SafetyRuleTestCase { description: "a joined DELETE and a LIMIT bound the rows in MySQL", dialect: "mysql", sql: "DELETE o FROM orders o JOIN customers c ON c.id = o.customer_id; DELETE FROM orders LIMIT 10", - rule: "SQC049", + rule: "SQLCLEAN049", expected_anchors: &[], }, SafetyRuleTestCase { description: "UPDATE FROM without WHERE, and DELETE after a WITH clause", dialect: "postgres", sql: "UPDATE orders SET status = 'closed' FROM customers; WITH stale AS (SELECT 1 AS id) DELETE FROM orders", - rule: "SQC049", + rule: "SQLCLEAN049", expected_anchors: &["UPDATE", "DELETE"], }, SafetyRuleTestCase { description: "an INSERT without a column list in query and VALUES form", dialect: "duckdb", sql: "INSERT INTO orders SELECT * FROM staged_orders; INSERT INTO orders VALUES (1, 'open')", - rule: "SQC050", + rule: "SQLCLEAN050", expected_anchors: &["INSERT", "INSERT"], }, SafetyRuleTestCase { description: "listed columns and BY NAME pass", dialect: "duckdb", sql: "INSERT INTO orders (order_id) SELECT order_id FROM staged_orders; INSERT INTO orders BY NAME SELECT 1 AS order_id", - rule: "SQC050", + rule: "SQLCLEAN050", expected_anchors: &[], }, SafetyRuleTestCase { description: "DEFAULT VALUES needs no column list", dialect: "postgres", sql: "INSERT INTO orders DEFAULT VALUES", - rule: "SQC050", + rule: "SQLCLEAN050", expected_anchors: &[], }, SafetyRuleTestCase { description: "NATURAL joins are reported with their join keywords", dialect: "duckdb", sql: "SELECT * FROM orders NATURAL JOIN customers NATURAL LEFT OUTER JOIN regions JOIN items USING (order_id)", - rule: "SQC051", + rule: "SQLCLEAN051", expected_anchors: &["NATURAL JOIN", "NATURAL LEFT OUTER JOIN"], }, SafetyRuleTestCase { description: "reversed number, negative, decimal and date bounds, with or without NOT", dialect: "duckdb", sql: "SELECT * FROM orders WHERE a BETWEEN 10 AND 1 OR b NOT BETWEEN -1 AND -5 OR c BETWEEN 1.5 AND 1.25 OR d BETWEEN DATE '2026-02-01' AND DATE '2026-01-31'", - rule: "SQC052", + rule: "SQLCLEAN052", expected_anchors: &[ "BETWEEN 10 AND 1", "BETWEEN -1 AND -5", @@ -142,21 +142,21 @@ fn given_safety_rule_inputs_when_linting_then_exactly_the_mistakes_are_reported( description: "ASYMMETRIC keeps the ordered meaning in PostgreSQL", dialect: "postgres", sql: "SELECT * FROM orders WHERE a BETWEEN ASYMMETRIC 10 AND 1", - rule: "SQC052", + rule: "SQLCLEAN052", expected_anchors: &["BETWEEN ASYMMETRIC 10 AND 1"], }, SafetyRuleTestCase { description: "ordered, equal, SYMMETRIC, computed, text and frame bounds pass", dialect: "duckdb", sql: "SELECT SUM(a) OVER (ORDER BY b ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS s FROM orders WHERE a BETWEEN 9 AND 10 OR b BETWEEN -5 AND -1 OR c BETWEEN 5 AND 5 OR d BETWEEN SYMMETRIC 10 AND 1 OR e BETWEEN 10 AND 1 + 20 OR f BETWEEN 'b' AND 'a'", - rule: "SQC052", + rule: "SQLCLEAN052", expected_anchors: &[], }, SafetyRuleTestCase { description: "aggregates and windows in WHERE, ON and after a GROUP BY comma", dialect: "duckdb", sql: "SELECT o.customer_id FROM orders AS o JOIN customers AS c ON c.id = o.customer_id AND COUNT(*) > 1 WHERE SUM(o.amount) > 100 AND ROW_NUMBER() OVER (PARTITION BY o.customer_id ORDER BY o.ordered_at) = 1 GROUP BY o.customer_id, MAX(o.amount)", - rule: "SQC053", + rule: "SQLCLEAN053", expected_anchors: &[ "COUNT(*)", "SUM(o.amount)", @@ -168,14 +168,14 @@ fn given_safety_rule_inputs_when_linting_then_exactly_the_mistakes_are_reported( description: "HAVING, QUALIFY, FILTER, subqueries and unknown functions pass", dialect: "duckdb", sql: "SELECT customer_id, COUNT(*) FILTER (WHERE amount > 0) AS paid FROM orders WHERE amount > (SELECT AVG(amount) FROM orders) AND order_total(amount) > 0 GROUP BY customer_id HAVING COUNT(*) > 1 QUALIFY ROW_NUMBER() OVER (ORDER BY customer_id) = 1", - rule: "SQC053", + rule: "SQLCLEAN053", expected_anchors: &[], }, SafetyRuleTestCase { description: "multi-argument MAX is the scalar function in SQLite", dialect: "sqlite", sql: "SELECT order_id FROM orders WHERE max(amount, refunded) > 100", - rule: "SQC053", + rule: "SQLCLEAN053", expected_anchors: &[], }, ]; diff --git a/fensu.toml b/fensu.toml index 7443fe2..7f53731 100644 --- a/fensu.toml +++ b/fensu.toml @@ -33,11 +33,6 @@ rule = "FPRSL105" path = "crates/sqlclean/src/sql_lint/main/formatter.rs" reason = "Integration surface: SQLBuild's Python bindings format through `format_json`." -[[targets.rust.rule_exceptions]] -rule = "FPRSL105" -path = "crates/sqlclean/src/sql_quality/main/declared_relation_keys.rs" -reason = "Integration surface: SQLBuild's compiled views derive the relation keys its models declare through this entry." - [[targets.rust.rule_exceptions]] rule = "FPRSL105" path = "crates/sqlclean/src/sql_tokens/main/builtin_function_names.rs" diff --git a/src/sqlclean/rules/_helpers/definition.py b/src/sqlclean/rules/_helpers/definition.py index 22774d2..405f43d 100644 --- a/src/sqlclean/rules/_helpers/definition.py +++ b/src/sqlclean/rules/_helpers/definition.py @@ -41,7 +41,7 @@ def define_rule( if not is_custom_code(code): raise RuleDefinitionError( f"custom Rule code must be {CUSTOM_CODE_PREFIX}, optional capital letters and " - f"{RULE_CODE_DIGIT_COUNT} digits, such as XSQCNAME001: {code}" + f"{RULE_CODE_DIGIT_COUNT} digits, such as XSQLCLEANNAME001: {code}" ) names: list[str] = [option.name for option in options] if len(names) != len(set(names)): @@ -70,7 +70,7 @@ def decorate(check: RuleCheck) -> RuleCheck: def is_custom_code(code: str) -> bool: - """Return whether code is XSQC, optional capital letters and three digits.""" + """Return whether code is XSQLCLEAN, optional capital letters and three digits.""" family: str = code[:-RULE_CODE_DIGIT_COUNT] number: str = code[-RULE_CODE_DIGIT_COUNT:] diff --git a/src/sqlclean/rules/constants.py b/src/sqlclean/rules/constants.py index 878101b..c1bd270 100644 --- a/src/sqlclean/rules/constants.py +++ b/src/sqlclean/rules/constants.py @@ -1,7 +1,7 @@ """Constants of the custom Rule authoring API.""" RULE_ATTRIBUTE: str = "__sqlclean_rule__" -CUSTOM_CODE_PREFIX: str = "XSQC" +CUSTOM_CODE_PREFIX: str = "XSQLCLEAN" RULE_CODE_DIGIT_COUNT: int = 3 RULE_PARAMETER_COUNT: int = 2 SIGNATURE_REQUIREMENT: str = ( diff --git a/tests/e2e/src/sqlclean/hosting/test_sqlclean_command.py b/tests/e2e/src/sqlclean/hosting/test_sqlclean_command.py index 279a38a..80e1c89 100644 --- a/tests/e2e/src/sqlclean/hosting/test_sqlclean_command.py +++ b/tests/e2e/src/sqlclean/hosting/test_sqlclean_command.py @@ -22,16 +22,20 @@ from tests.integration.src.sqlclean.rule_testing.helpers import SAMPLE_RULES DUCKDB: str = 'dialect = "duckdb"\n' -CROSS_JOIN_ONLY: str = DUCKDB + '[rules]\nselect = ["SQC038"]\n' -CUSTOM: str = DUCKDB + '[rules]\nselect = ["XSQCNAME", "XSQCSTYLE"]\ncustom = ["sql_rules"]\n' +CROSS_JOIN_ONLY: str = DUCKDB + '[rules]\nselect = ["SQLCLEAN038"]\n' +CUSTOM: str = ( + DUCKDB + '[rules]\nselect = ["XSQLCLEANNAME", "XSQLCLEANSTYLE"]\ncustom = ["sql_rules"]\n' +) CROSS_JOIN_EXCEPTIONS: str = ( CROSS_JOIN_ONLY - + '[[rules.rule_exceptions]]\nrule = "SQC038"\npath = "models/q.sql"\nrelation = "b"\n' + + '[[rules.rule_exceptions]]\nrule = "SQLCLEAN038"\npath = "models/q.sql"\nrelation = "b"\n' + 'reason = "Every pair is needed."\n' - + '[[rules.rule_exceptions]]\nrule = "SQC038"\npath = "models/q.sql"\nrelation = "z"\n' + + '[[rules.rule_exceptions]]\nrule = "SQLCLEAN038"\npath = "models/q.sql"\nrelation = "z"\n' + 'reason = "Removed join."\n' ) NULL_AND_COMMA: str = "select a.id from a, b where a.x = null\n" +# SQLCLEAN001 is a default Rule; SQLCLEAN034 and SQLCLEAN050 are opt-in. +DEFAULT_AND_OPT_IN: str = "insert into orders select a.id from a where a.x = null\n" @pytest.mark.parametrize( @@ -49,17 +53,41 @@ description="selected Rules report in file order", config=DUCKDB, files={"models/q.sql": NULL_AND_COMMA}, - arguments=("--select", "SQC001,SQC002"), + arguments=("--select", "SQLCLEAN001,SQLCLEAN002"), + expected_exit=1, + expected_codes=("SQLCLEAN002", "SQLCLEAN001"), + ), + CheckTestCase( + description="without a selection only the default Rules run", + config=DUCKDB, + files={"models/q.sql": DEFAULT_AND_OPT_IN}, + arguments=(), + expected_exit=1, + expected_codes=("SQLCLEAN001",), + ), + CheckTestCase( + description="the SQLCLEAN family selects every built-in Rule, opt-in ones too", + config=DUCKDB, + files={"models/q.sql": DEFAULT_AND_OPT_IN}, + arguments=("--select", "SQLCLEAN"), + expected_exit=1, + expected_codes=("SQLCLEAN050", "SQLCLEAN034", "SQLCLEAN001"), + ), + CheckTestCase( + description="an exact code selects only that Rule", + config=DUCKDB, + files={"models/q.sql": DEFAULT_AND_OPT_IN}, + arguments=("--select", "SQLCLEAN050"), expected_exit=1, - expected_codes=("SQC002", "SQC001"), + expected_codes=("SQLCLEAN050",), ), CheckTestCase( description="an ignored Rule is skipped", config=DUCKDB, files={"models/q.sql": NULL_AND_COMMA}, - arguments=("--select", "SQC001,SQC002", "--ignore", "SQC002"), + arguments=("--select", "SQLCLEAN001,SQLCLEAN002", "--ignore", "SQLCLEAN002"), expected_exit=1, - expected_codes=("SQC001",), + expected_codes=("SQLCLEAN001",), ), CheckTestCase( description="an exception hides its finding and an unmatched one is stale", @@ -79,7 +107,7 @@ }, arguments=("--config", "strict.toml"), expected_exit=1, - expected_codes=("SQC038",), + expected_codes=("SQLCLEAN038",), ), CheckTestCase( description="lint is check by another name", @@ -88,7 +116,7 @@ arguments=(), command="lint", expected_exit=1, - expected_codes=("SQC038",), + expected_codes=("SQLCLEAN038",), ), CheckTestCase( description="unparseable SQL is reported as a finding", @@ -96,18 +124,18 @@ files={"models/q.sql": "SELECT FROM WHERE (\n"}, arguments=(), expected_exit=1, - expected_codes=("SQC999",), + expected_codes=("SQLCLEAN999",), ), CheckTestCase( description="custom Rules run with their configured options", - config=CUSTOM + '[rules.rule_options.XSQCNAME001]\nprefixes = ["stg_"]\n', + config=CUSTOM + '[rules.rule_options.XSQLCLEANNAME001]\nprefixes = ["stg_"]\n', files={ "sql_rules/naming.py": SAMPLE_RULES, "models/q.sql": "SELECT COUNT(1) AS n FROM stg_orders JOIN tmp_x ON TRUE\n", }, arguments=(), expected_exit=1, - expected_codes=("XSQCSTYLE001", "XSQCNAME001"), + expected_codes=("XSQLCLEANSTYLE001", "XSQLCLEANNAME001"), ), ], ids=lambda case: case.description, @@ -134,7 +162,7 @@ def test_given_project_when_checking_then_reports_findings_and_exit_status( [ RewriteTestCase( description="fix applies safe fixes, leaves unsafe ones and formats", - config=DUCKDB + '[rules]\nselect = ["SQC001", "SQC002"]\n', + config=DUCKDB + '[rules]\nselect = ["SQLCLEAN001", "SQLCLEAN002"]\n', files={"models/q.sql": NULL_AND_COMMA}, arguments=("fix",), expected_exit=1, @@ -144,7 +172,7 @@ def test_given_project_when_checking_then_reports_findings_and_exit_status( ), RewriteTestCase( description="fix with unsafe fixes applies them too and then passes", - config=DUCKDB + '[rules]\nselect = ["SQC001", "SQC002"]\n', + config=DUCKDB + '[rules]\nselect = ["SQLCLEAN001", "SQLCLEAN002"]\n', files={"models/q.sql": NULL_AND_COMMA}, arguments=("fix", "--unsafe-fixes"), expected_exit=0, @@ -165,7 +193,7 @@ def test_given_project_when_checking_then_reports_findings_and_exit_status( ), RewriteTestCase( description="fix --diff writes nothing", - config=DUCKDB + '[rules]\nselect = ["SQC002"]\n', + config=DUCKDB + '[rules]\nselect = ["SQLCLEAN002"]\n', files={"models/q.sql": "select a.id from a, b\n"}, arguments=("fix", "--diff"), expected_exit=1, @@ -239,19 +267,19 @@ def test_given_project_when_rewriting_then_files_and_exit_status_match( [ SummaryTestCase( description="a safe fix is fixable with plain fix", - config=DUCKDB + '[rules]\nselect = ["SQC002"]\n', + config=DUCKDB + '[rules]\nselect = ["SQLCLEAN002"]\n', source="select a.id from a, b\n", expected_summary="Found 1 problem (1 fixable with `sqlclean fix`).", ), SummaryTestCase( description="an unsafe fix needs --unsafe-fixes", - config=DUCKDB + '[rules]\nselect = ["SQC001"]\n', + config=DUCKDB + '[rules]\nselect = ["SQLCLEAN001"]\n', source="select a.id from a where a.x = null\n", expected_summary="Found 1 problem (1 fixable with `sqlclean fix --unsafe-fixes`).", ), SummaryTestCase( description="safe and unsafe fixes are counted apart", - config=DUCKDB + '[rules]\nselect = ["SQC001", "SQC002"]\n', + config=DUCKDB + '[rules]\nselect = ["SQLCLEAN001", "SQLCLEAN002"]\n', source=NULL_AND_COMMA, expected_summary=( "Found 2 problems (1 fixable with `sqlclean fix`, 1 more with `--unsafe-fixes`)." @@ -275,7 +303,7 @@ def test_given_fixable_findings_when_checking_then_summary_counts_safe_and_unsaf [ SarifTestCase( description="the message and remediation read as two sentences", - config=DUCKDB + '[rules]\nselect = ["SQC025"]\n', + config=DUCKDB + '[rules]\nselect = ["SQLCLEAN025"]\n', source="select a.id from a join b on a.id = b.id\n", expected_message="JOIN type is implicit. Write INNER JOIN explicitly.", ), @@ -330,7 +358,7 @@ def test_given_formatted_file_when_formatting_again_then_nothing_changes( }, edited={"models/q.sql": "SELECT * FROM tmp_customers\n"}, expected_exits=(1, 1, 2), - expected_cached_code="XSQCNAME001", + expected_cached_code="XSQLCLEANNAME001", expected_error="missing-python", ), ], @@ -375,7 +403,7 @@ def test_given_many_files_when_checking_custom_rules_then_every_host_share_repor write_project(tmp_path, config=CUSTOM, files={"sql_rules/naming.py": SAMPLE_RULES, **files}) completed: subprocess.CompletedProcess[str] = run( - tmp_path, "check", "--output-format", "json", "--select", "XSQCNAME001", environment={} + tmp_path, "check", "--output-format", "json", "--select", "XSQLCLEANNAME001", environment={} ) report: dict[str, list[dict[str, object]]] = json.loads(completed.stdout) diff --git a/tests/integration/src/sqlclean/rule_testing/helpers.py b/tests/integration/src/sqlclean/rule_testing/helpers.py index 9659135..2f8ae80 100644 --- a/tests/integration/src/sqlclean/rule_testing/helpers.py +++ b/tests/integration/src/sqlclean/rule_testing/helpers.py @@ -21,7 +21,7 @@ @rule( - code="XSQCSHAPE001", + code="XSQLCLEANSHAPE001", message="Statement joins too many relations", remediation="Split the statement into CTEs.", options=(MAX_JOINS,), @@ -32,7 +32,7 @@ def too_many_joins(*, statement: Statement, ctx: RuleContext) -> list: @rule( - code="XSQCNAME001", + code="XSQLCLEANNAME001", message="Table name uses a forbidden prefix", remediation="Read from the published table.", options=(PREFIXES,), @@ -48,7 +48,7 @@ def forbidden_prefix(*, statement: Statement, ctx: RuleContext) -> list: @rule( - code="XSQCSTYLE001", + code="XSQLCLEANSTYLE001", message="COUNT(1) should be COUNT(*)", remediation="Write COUNT(*).", fixable=FixSafety.SAFE, @@ -65,7 +65,7 @@ def count_one(*, statement: Statement, ctx: RuleContext) -> list: @rule( - code="XSQCFILE001", + code="XSQLCLEANFILE001", message="File holds more than one statement", remediation="Keep one statement per file.", ) @@ -74,7 +74,7 @@ def one_statement(*, file: SqlFile, ctx: RuleContext) -> list: @rule( - code="XSQCREPO001", + code="XSQLCLEANREPO001", message="Table is read by only one file", remediation="Inline the table or share it.", ) diff --git a/tests/unit/src/sqlclean/rules/test_rule_definition.py b/tests/unit/src/sqlclean/rules/test_rule_definition.py index c10173f..e9273c8 100644 --- a/tests/unit/src/sqlclean/rules/test_rule_definition.py +++ b/tests/unit/src/sqlclean/rules/test_rule_definition.py @@ -17,12 +17,12 @@ [ RuleCodeTestCase( description="a bare custom prefix with three digits", - code="XSQC001", + code="XSQLCLEAN001", expected_error=None, ), RuleCodeTestCase( description="a family of capital letters", - code="XSQCNAME001", + code="XSQLCLEANNAME001", expected_error=None, ), ], @@ -44,18 +44,18 @@ def test_given_custom_code_when_declaring_then_the_definition_is_attached( [ RuleCodeTestCase( description="a built-in code is reserved", - code="SQC001", - expected_error="custom Rule code must be XSQC", + code="SQLCLEAN001", + expected_error="custom Rule code must be XSQLCLEAN", ), RuleCodeTestCase( description="a lower-case family", - code="XSQCname001", - expected_error="custom Rule code must be XSQC", + code="XSQLCLEANname001", + expected_error="custom Rule code must be XSQLCLEAN", ), RuleCodeTestCase( description="two digits", - code="XSQCNAME01", - expected_error="custom Rule code must be XSQC", + code="XSQLCLEANNAME01", + expected_error="custom Rule code must be XSQLCLEAN", ), ], ids=lambda case: case.description, diff --git a/website/public/index.html b/website/public/index.html index 3f84666..c1c925f 100644 --- a/website/public/index.html +++ b/website/public/index.html @@ -143,14 +143,14 @@

Flag SQL that runs but is easy to get wrong

How Rules work →

sqlclean check
-error[SQC018]: ROW_NUMBER has no deterministic ordering
+error[SQLCLEAN018]: ROW_NUMBER has no deterministic ordering
   --> models/open_orders.sql:2:3
    |
  2 |   ROW_NUMBER() OVER (PARTITION BY o.customer_id) AS order_rank
    |   ^^^^^^^^^^
   = help: Add ORDER BY with a stable tie-breaker inside the window specification.
 
-error[SQC001]: Comparison with NULL is never true
+error[SQLCLEAN001]: Comparison with NULL is never true
   --> models/open_orders.sql:4:22
    |
  4 | WHERE o.cancelled_at = NULL
@@ -158,7 +158,7 @@ 

Flag SQL that runs but is easy to get wrong

= help: Use IS NULL or IS NOT NULL when testing for NULL. = fix: available with `sqlclean fix --unsafe-fixes` -error[SQC019]: NOT IN list contains NULL and can reject every row +error[SQLCLEAN019]: NOT IN list contains NULL and can reject every row --> models/open_orders.sql:5:16 | 5 | AND o.status NOT IN ('refunded', NULL) @@ -250,7 +250,7 @@

Turn review comments into Rules

# sql_rules/layers.py
 @rule(
-    code="XSQCLAYER001",
+    code="XSQLCLEANLAYER001",
     message="Marts must not read raw tables",
     remediation="Read the staging model instead.",
     enabled_by_default=True,
@@ -265,7 +265,7 @@ 

Turn review comments into Rules

] sqlclean check -error[XSQCLAYER001]: Marts must not read raw tables +error[XSQLCLEANLAYER001]: Marts must not read raw tables --> models/marts/revenue.sql:5:12 | 5 | INNER JOIN raw.payments p @@ -317,20 +317,20 @@

Allow a finding once, with a reason

# sqlclean.toml
 [[rules.rule_exceptions]]
-rule = "SQC038"
+rule = "SQLCLEAN038"
 path = "models/marts/calendar.sql"
 relation = "regions"
 reason = "Every date is reported for every region."
 
 sqlclean check
-error[SQC038]: CROSS JOIN with `markets` creates an explicit cartesian product
+error[SQLCLEAN038]: CROSS JOIN with `markets` creates an explicit cartesian product
   --> models/marts/calendar.sql:5:1
    |
  5 | CROSS JOIN markets r
    | ^^^^^
   = help: Use a keyed JOIN, or make one side provably at most one row …
 
-error: stale rule exception: SQC038 in models/marts/calendar.sql for relation regions
+error: stale rule exception: SQLCLEAN038 in models/marts/calendar.sql for relation regions
   matches no finding; remove it from sqlclean.toml
@@ -358,7 +358,7 @@

Before every commit and in CI

"runs": [{ "tool": { "driver": { "name": "sqlclean", … } }, "results": [{ - "ruleId": "XSQCLAYER001", + "ruleId": "XSQLCLEANLAYER001", "message": { "text": "Marts must not read raw tables. Read the staging model instead." }, …
diff --git a/website/recordings/prepare.sh b/website/recordings/prepare.sh index 9d50da1..0d00ece 100755 --- a/website/recordings/prepare.sh +++ b/website/recordings/prepare.sh @@ -49,7 +49,7 @@ def lowered(operand: ast.Expression) -> bool: @rule( - code="XSQCTEAM001", + code="XSQLCLEANTEAM001", message="Email comparisons must be case-insensitive", remediation="Compare LOWER(email) with LOWER(...) instead.", enabled_by_default=True, diff --git a/website/src/content/docs/docs/benchmarks.mdx b/website/src/content/docs/docs/benchmarks.mdx index d75f38e..d0e4bdf 100644 --- a/website/src/content/docs/docs/benchmarks.mdx +++ b/website/src/content/docs/docs/benchmarks.mdx @@ -11,7 +11,7 @@ SQLFluff ran once. | Command | Wall time | CPU time | Peak memory | vs SQLClean defaults | |---|---:|---:|---:|---:| | `sqlclean check` (13 default Rules) | **0.81 s** | 2.5 s | 48 MiB | 1× | -| `sqlclean check --select SQC` (all 45 Rules) | **1.33 s** | 3.8 s | 140 MiB | 1.6× | +| `sqlclean check --select SQLCLEAN` (all 45 Rules) | **1.33 s** | 3.8 s | 140 MiB | 1.6× | | `sqlclean check` with three [custom Rules](#custom-rules) | **2.27 s** | 6.9 s | 182 MiB | 2.8× | | `sqlclean format --check` | **3.03 s** | 11.5 s | 49 MiB | 3.7× | | `sqruff lint` | 41.0 s | 114 s | 235 MiB | 51× | diff --git a/website/src/content/docs/docs/cli/check.mdx b/website/src/content/docs/docs/cli/check.mdx index a288612..b3a4c2c 100644 --- a/website/src/content/docs/docs/cli/check.mdx +++ b/website/src/content/docs/docs/cli/check.mdx @@ -19,7 +19,7 @@ sqlclean check [OPTIONS] [PATHS]... ```bash sqlclean check # every matching file under the configuration root sqlclean check models/orders.sql reports/ # only these files and directories -sqlclean check --select SQC001,SQC004 # only these Rules +sqlclean check --select SQLCLEAN001,SQLCLEAN004 # only these Rules sqlclean check --output-format sarif > sqlclean.sarif ``` @@ -40,20 +40,20 @@ when `include` does not match it, unless `exclude` does. See | `--config ` | Use this configuration file instead of the nearest `sqlclean.toml` | `--select` and `--ignore` take a comma-separated list, or the flag repeated. A value is an exact -code such as `SQC001` or a prefix such as `SQC` or `XSQCNAME`. A value that matches no Rule is an +code such as `SQLCLEAN001` or a prefix such as `SQLCLEAN` or `XSQLCLEANNAME`. A value that matches no Rule is an error. See [Selecting Rules](/docs/rules/overview/#selecting-rules). ## Text output ```text -error[SQC004]: Row selection is nondeterministic +error[SQLCLEAN004]: Row selection is nondeterministic --> models/customers.sql:6:1 | 6 | LIMIT 10; | ^^^^^ = help: Add ORDER BY with a deterministic tie-breaker before LIMIT or OFFSET. -error[SQC001]: Comparison with NULL is never true +error[SQLCLEAN001]: Comparison with NULL is never true --> models/orders.sql:8:22 | 8 | WHERE o.cancelled_at = NULL @@ -61,7 +61,7 @@ error[SQC001]: Comparison with NULL is never true = help: Use IS NULL or IS NOT NULL when testing for NULL. = fix: available with `sqlclean fix --unsafe-fixes` -error: stale rule exception: SQC004 in models/orders.sql matches no finding; remove it from sqlclean.toml +error: stale rule exception: SQLCLEAN004 in models/orders.sql matches no finding; remove it from sqlclean.toml Found 3 problems (1 fixable with `sqlclean fix --unsafe-fixes`). ``` @@ -82,7 +82,7 @@ and count characters, not bytes. { "findings": [ { - "code": "SQC004", + "code": "SQLCLEAN004", "path": "models/customers.sql", "line": 6, "column": 1, @@ -93,7 +93,7 @@ and count characters, not bytes. "fix": null }, { - "code": "SQC001", + "code": "SQLCLEAN001", "path": "models/orders.sql", "line": 8, "column": 22, @@ -106,7 +106,7 @@ and count characters, not bytes. ], "stale_exceptions": [ { - "rule": "SQC004", + "rule": "SQLCLEAN004", "path": "models/orders.sql", "relation": null } @@ -130,7 +130,7 @@ text: ```json { - "ruleId": "SQC001", + "ruleId": "SQLCLEAN001", "level": "error", "message": { "text": "Comparison with NULL is never true. Use IS NULL or IS NOT NULL when testing for NULL." diff --git a/website/src/content/docs/docs/cli/fix.mdx b/website/src/content/docs/docs/cli/fix.mdx index d054888..2e814a4 100644 --- a/website/src/content/docs/docs/cli/fix.mdx +++ b/website/src/content/docs/docs/cli/fix.mdx @@ -35,14 +35,14 @@ Files are chosen as for [`sqlclean check`](/docs/cli/check/). | `--no-cache` | Evaluate every file instead of reusing results for unchanged inputs | | `--config ` | Use this configuration file instead of the nearest `sqlclean.toml` | -Only fixes of selected Rules apply. `sqlclean fix --select SQC005` removes unused CTEs and +Only fixes of selected Rules apply. `sqlclean fix --select SQLCLEAN005` removes unused CTEs and formats the files, and leaves every other finding alone. ## Output ```text Fixed 1 problem(s) and changed 1 file(s). -error[SQC001]: Comparison with NULL is never true +error[SQLCLEAN001]: Comparison with NULL is never true --> models/open_orders.sql:7:24 | 7 | WHERE cancelled_at = NULL @@ -87,7 +87,7 @@ findings: formatter cannot format is reported as `: could not format: ` and keeps its fixes. A file that does not parse gets no fixes and is reported as -[`SQC999`](/docs/rules/overview/#parse-errors-sqc999). +[`SQLCLEAN999`](/docs/rules/overview/#parse-errors-sqlclean999). ## Exit codes diff --git a/website/src/content/docs/docs/cli/rules.mdx b/website/src/content/docs/docs/cli/rules.mdx index a9fd64b..97d0bbe 100644 --- a/website/src/content/docs/docs/cli/rules.mdx +++ b/website/src/content/docs/docs/cli/rules.mdx @@ -16,9 +16,9 @@ sqlclean rules [OPTIONS] [CODE] ```bash sqlclean rules # list every Rule -sqlclean rules SQC001 # show one Rule +sqlclean rules SQLCLEAN001 # show one Rule sqlclean rules --json # every Rule as JSON -sqlclean rules --json SQC001 # one Rule as JSON +sqlclean rules --json SQLCLEAN001 # one Rule as JSON ``` ## Flags @@ -32,14 +32,14 @@ sqlclean rules --json SQC001 # one Rule as JSON ## Listing Rules ```text -SQC001 default Comparison with NULL is never true -SQC002 default Comma-separated sources create an implicit cartesian join -SQC003 default Non-cross join has no meaningful condition -SQC004 default Row selection is nondeterministic +SQLCLEAN001 default Comparison with NULL is never true +SQLCLEAN002 default Comma-separated sources create an implicit cartesian join +SQLCLEAN003 default Non-cross join has no meaningful condition +SQLCLEAN004 default Row selection is nondeterministic ... -SQC045 JSON payload is parsed more than once in one SELECT -XSQCNAME001 default Query reads a temporary table -XSQCSTYLE001 default COUNT(1) should be COUNT(*) +SQLCLEAN045 JSON payload is parsed more than once in one SELECT +XSQLCLEANNAME001 default Query reads a temporary table +XSQLCLEANSTYLE001 default COUNT(1) should be COUNT(*) ``` `default` marks the Rules that run when `[rules] select` is not set. See @@ -49,11 +49,11 @@ XSQCSTYLE001 default COUNT(1) should be COUNT(*) ## Showing one Rule ```bash -sqlclean rules SQC001 +sqlclean rules SQLCLEAN001 ``` ```text -SQC001: Comparison with NULL is never true +SQLCLEAN001: Comparison with NULL is never true Subject: statement Enabled by default: yes Fixable: unsafe @@ -63,7 +63,7 @@ Remediation: Use IS NULL or IS NOT NULL when testing for NULL. A custom Rule also shows the Python module that defines it: ```text -XSQCSTYLE001: COUNT(1) should be COUNT(*) +XSQLCLEANSTYLE001: COUNT(1) should be COUNT(*) Subject: statement Enabled by default: yes Defined in: sql_rules.naming @@ -76,13 +76,13 @@ Remediation: Write COUNT(*). ## JSON output ```bash -sqlclean rules --json XSQCNAME001 +sqlclean rules --json XSQLCLEANNAME001 ``` ```json [ { - "code": "XSQCNAME001", + "code": "XSQLCLEANNAME001", "message": "Query reads a temporary table", "remediation": "Read from the published table instead.", "enabled_by_default": true, diff --git a/website/src/content/docs/docs/configuration.mdx b/website/src/content/docs/docs/configuration.mdx index cc0a41f..b95d1c9 100644 --- a/website/src/content/docs/docs/configuration.mdx +++ b/website/src/content/docs/docs/configuration.mdx @@ -20,25 +20,25 @@ line_width = 100 indent = 4 [rules] -select = ["SQC"] # omit to run the Rules enabled by default -ignore = ["SQC027"] +select = ["SQLCLEAN"] # omit to run the Rules enabled by default +ignore = ["SQLCLEAN027"] custom = ["sql_rules"] # Python files or directories that define custom Rules [rules.thresholds] -max_literal_length = 100 # SQC044 -max_ranking_order_by = 5 # SQC043 +max_literal_length = 100 # SQLCLEAN044 +max_ranking_order_by = 5 # SQLCLEAN043 -[rules.rule_options.XSQCNAME001] +[rules.rule_options.XSQLCLEANNAME001] prefixes = ["tmp_", "scratch_"] [[rules.rule_exceptions]] # one reviewed finding that is allowed -rule = "SQC038" +rule = "SQLCLEAN038" path = "models/calendar.sql" relation = "dates" reason = "Every pair of dates is needed." [[rules.rule_ignores]] # Rules that do not apply to some paths -rules = ["SQC034"] +rules = ["SQLCLEAN034"] paths = ["scratch/**"] reason = "Exploratory queries." ``` @@ -65,8 +65,8 @@ directory is the root. | `[rules] select` | Rules enabled by default | Rule codes or prefixes to run | | `[rules] ignore` | `[]` | Rule codes or prefixes to skip | | `[rules] custom` | `[]` | Python files or directories that define [custom Rules](/docs/custom-rules/overview/) | -| `[rules.thresholds] max_literal_length` | `100` | The longest string literal `SQC044` allows | -| `[rules.thresholds] max_ranking_order_by` | `5` | The most `ORDER BY` expressions `SQC043` allows in a ranking window | +| `[rules.thresholds] max_literal_length` | `100` | The longest string literal `SQLCLEAN044` allows | +| `[rules.thresholds] max_ranking_order_by` | `5` | The most `ORDER BY` expressions `SQLCLEAN043` allows in a ranking window | | `[rules.rule_options.]` | none | Option values of one custom Rule; see [Options](/docs/custom-rules/fixes-and-options/#options) | | `[[rules.rule_exceptions]]` | none | One allowed finding; see [Exceptions](/docs/rules/overview/#exceptions) | | `[[rules.rule_ignores]]` | none | Rules that do not apply to some paths; see [Path ignores](/docs/rules/overview/#path-ignores) | @@ -101,7 +101,7 @@ dialect = "tsql" ``` A file that does not parse under its dialect is reported as -[`SQC999`](/docs/rules/overview/#parse-errors-sqc999), with the dialect in the message. Without +[`SQLCLEAN999`](/docs/rules/overview/#parse-errors-sqlclean999), with the dialect in the message. Without the `[[dialects]]` entry above, this T-SQL file under `reports/` is parsed as `duckdb`: ```sql @@ -109,7 +109,7 @@ SELECT [order id] FROM orders ``` ```text -error[SQC999]: SQL could not be parsed as duckdb: Parse error at line 1, column 17: Expected RBracket, got Var ('id') near [SELECT [order id] FROM orders] +error[SQLCLEAN999]: SQL could not be parsed as duckdb: Parse error at line 1, column 17: Expected RBracket, got Var ('id') near [SELECT [order id] FROM orders] ``` Supported dialects, case-insensitive: @@ -167,11 +167,11 @@ report any finding. | `line_width` of `0` | `sqlclean.toml: [format] line_width must be positive` | | `indent` of `0` or more than `8` | `sqlclean.toml: [format] indent must be between 1 and 8` | | A threshold of `0` | `sqlclean.toml: [rules.thresholds] max_literal_length and max_ranking_order_by must be positive` | -| An exception or ignore without a reason | `sqlclean.toml: rule exception or ignore for SQC001 needs a reason` | -| An exception with `cte` but no `relation` | `sqlclean.toml: rule exception for SQC038 at models/calendar.sql sets cte without relation` | +| An exception or ignore without a reason | `sqlclean.toml: rule exception or ignore for SQLCLEAN001 needs a reason` | +| An exception with `cte` but no `relation` | `sqlclean.toml: rule exception for SQLCLEAN038 at models/calendar.sql sets cte without relation` | | A `custom` path that does not exist | `[rules] custom path does not exist: sql_rules` | -| `rule_options` for a built-in Rule | `[rules.rule_options.SQC001]: built-in Rules take no options; set limits in [rules.thresholds]` | -| `rule_options` for a code no custom Rule has | `[rules.rule_options.XSQCNOPE001]: no custom Rule has this code` | -| A selector that matches no Rule | `Rule selector 'SQC9' matches no Rule` | +| `rule_options` for a built-in Rule | `[rules.rule_options.SQLCLEAN001]: built-in Rules take no options; set limits in [rules.thresholds]` | +| `rule_options` for a code no custom Rule has | `[rules.rule_options.XSQLCLEANNOPE001]: no custom Rule has this code` | +| A selector that matches no Rule | `Rule selector 'SQLCLEAN9' matches no Rule` | Errors are printed as `sqlclean: error: `. diff --git a/website/src/content/docs/docs/custom-rules/fixes-and-options.mdx b/website/src/content/docs/docs/custom-rules/fixes-and-options.mdx index 118f69d..88e476e 100644 --- a/website/src/content/docs/docs/custom-rules/fixes-and-options.mdx +++ b/website/src/content/docs/docs/custom-rules/fixes-and-options.mdx @@ -16,7 +16,7 @@ from sqlclean import FixSafety, Finding, RuleContext, Statement, rule @rule( - code="XSQCSTYLE001", + code="XSQLCLEANSTYLE001", message="COUNT(1) should be COUNT(*)", remediation="Write COUNT(*).", fixable=FixSafety.SAFE, @@ -35,7 +35,7 @@ A function call is located at its name, so `f.end + 1` is the first character in parentheses. ```bash -sqlclean fix --diff --select XSQCSTYLE +sqlclean fix --diff --select XSQLCLEANSTYLE ``` ```diff @@ -74,7 +74,7 @@ edit must lie inside the finding's file. See [Safe and unsafe fixes](/docs/rules/overview/#safe-and-unsafe-fixes). A finding without `fix` has no fix, even in a fixable Rule. A Rule that returns a fix without -declaring `fixable` fails with `Rule XSQCSTYLE001 returned a fix but does not declare fixable`. +declaring `fixable` fails with `Rule XSQLCLEANSTYLE001 returned a fix but does not declare fixable`. ### How fixes combine @@ -101,7 +101,7 @@ PREFIXES = RuleOption.string_list( @rule( - code="XSQCNAME001", + code="XSQLCLEANNAME001", message="Query reads a temporary table", remediation="Read from the published table instead.", options=(PREFIXES,), @@ -117,7 +117,7 @@ def temporary_table(*, statement: Statement, ctx: RuleContext) -> list[Finding]: ``` ```toml -[rules.rule_options.XSQCNAME001] +[rules.rule_options.XSQLCLEANNAME001] prefixes = ["tmp_", "scratch_"] ``` @@ -141,12 +141,12 @@ exit code `2`: | Problem | Error | |---------|-------| -| A value of the wrong type | `[rules.rule_options.XSQCNAME001] option prefixes expects a list, got 'tmp_'` | -| An integer out of bounds | `[rules.rule_options.XSQCFILE002] option max_statements must be at least 1` | -| A string outside `choices` | `[rules.rule_options.XSQCFILE002] option style must be one of ['strict', 'loose']` | -| A name the Rule does not declare | `Rule XSQCNAME001 has no option prefix` | -| A code no custom Rule has | `[rules.rule_options.XSQCNOPE001]: no custom Rule has this code` | -| A Rule that reads an option it did not declare | `Rule XSQCFILE002 reads undeclared option verbose` | +| A value of the wrong type | `[rules.rule_options.XSQLCLEANNAME001] option prefixes expects a list, got 'tmp_'` | +| An integer out of bounds | `[rules.rule_options.XSQLCLEANFILE002] option max_statements must be at least 1` | +| A string outside `choices` | `[rules.rule_options.XSQLCLEANFILE002] option style must be one of ['strict', 'loose']` | +| A name the Rule does not declare | `Rule XSQLCLEANNAME001 has no option prefix` | +| A code no custom Rule has | `[rules.rule_options.XSQLCLEANNOPE001]: no custom Rule has this code` | +| A Rule that reads an option it did not declare | `Rule XSQLCLEANFILE002 reads undeclared option verbose` | Built-in Rules take no options. Their two limits are set in [`[rules.thresholds]`](/docs/rules/overview/#thresholds). diff --git a/website/src/content/docs/docs/custom-rules/overview.mdx b/website/src/content/docs/docs/custom-rules/overview.mdx index bc04aef..5087a6f 100644 --- a/website/src/content/docs/docs/custom-rules/overview.mdx +++ b/website/src/content/docs/docs/custom-rules/overview.mdx @@ -16,7 +16,7 @@ from sqlclean import Finding, RuleContext, Statement, rule @rule( - code="XSQCNAME001", + code="XSQLCLEANNAME001", message="Query reads a temporary table", remediation="Read from the published table instead.", enabled_by_default=True, @@ -37,7 +37,7 @@ custom = ["sql_rules"] ``` ```text -error[XSQCNAME001]: Query reads a temporary table +error[XSQLCLEANNAME001]: Query reads a temporary table --> models/orders.sql:2:6 | 2 | FROM tmp_orders @@ -56,13 +56,13 @@ functions, constants and classes stay ordinary Python. - Modules are imported by their path from the configuration root: `sql_rules/naming.py` is `sql_rules.naming`. A Rule module can import a helper the same way, for example `from sql_rules.helpers import table_prefixes`. -- Two Rules with the same code are an error: `custom Rule code XSQCNAME001 is defined twice`. +- Two Rules with the same code are an error: `custom Rule code XSQLCLEANNAME001 is defined twice`. ## Declaring a Rule | `@rule` argument | Default | Description | |------------------|---------|-------------| -| `code` | required | `XSQC`, optional capital letters, and three digits, such as `XSQCNAME001` | +| `code` | required | `XSQLCLEAN`, optional capital letters, and three digits, such as `XSQLCLEANNAME001` | | `message` | required | The finding message | | `remediation` | required | What to do about a finding | | `enabled_by_default` | `False` | Run the Rule when `[rules] select` is not set | @@ -71,7 +71,7 @@ functions, constants and classes stay ordinary Python. | `slug` | the code in lower case | A short name for the Rule | A Rule that is not enabled by default runs when `select` names it, by code or by a prefix such as -`XSQC` or `XSQCNAME`. See [Selecting Rules](/docs/rules/overview/#selecting-rules). Fixes and +`XSQLCLEAN` or `XSQLCLEANNAME`. See [Selecting Rules](/docs/rules/overview/#selecting-rules). Fixes and options are covered in [Fixes and options](/docs/custom-rules/fixes-and-options/). ## Choosing a subject @@ -92,7 +92,7 @@ from sqlclean import Finding, Repository, RuleContext, SqlFile, rule @rule( - code="XSQCFILE001", + code="XSQLCLEANFILE001", message="File holds more than one statement", remediation="Split the file so each holds one statement.", ) @@ -101,7 +101,7 @@ def one_statement(*, file: SqlFile, ctx: RuleContext) -> list[Finding]: @rule( - code="XSQCREPO001", + code="XSQLCLEANREPO001", message="Two files define a CTE with the same name", remediation="Give each CTE a name that is unique across files.", ) @@ -138,7 +138,7 @@ A Repository Rule passes the statement or file each finding belongs to as `subje ## How Rules run - Custom Rules run after the built-in Rules, on files that parse. A file with a - [parse error](/docs/rules/overview/#parse-errors-sqc999) gets no custom Rule findings. + [parse error](/docs/rules/overview/#parse-errors-sqlclean999) gets no custom Rule findings. - From 500 files, Statement and File Rules split the files across one Python process per CPU. A Rule can't share state between files, so anything that spans files belongs in a Repository Rule, which always runs in one process with every file. @@ -171,12 +171,12 @@ A Rule that cannot load or run stops the command with exit code `2`: | Problem | Error | |---------|-------| -| An invalid code | `custom Rule code must be XSQC, optional capital letters and 3 digits, such as XSQCNAME001: XSQC01` | -| A wrong signature | `custom Rule XSQCBAD001 must accept exactly one typed Statement, SqlFile or Repository subject and one typed RuleContext, both keyword-only` | +| An invalid code | `custom Rule code must be XSQLCLEAN, optional capital letters and 3 digits, such as XSQLCLEANNAME001: XSQLCLEAN01` | +| A wrong signature | `custom Rule XSQLCLEANBAD001 must accept exactly one typed Statement, SqlFile or Repository subject and one typed RuleContext, both keyword-only` | | A module that fails to import | `could not import custom Rule module sql_rules.bad: ` | -| An exception in the Rule | `custom Rule XSQCBAD001 failed on models/a.sql: IndexError: tuple index out of range`, then the traceback | -| A return value that is not a list of findings | `custom Rule XSQCRET001 must return a list of findings from ctx.finding(...)` | -| A fix from a Rule without `fixable` | `Rule XSQCBAD001 returned a fix but does not declare fixable` | +| An exception in the Rule | `custom Rule XSQLCLEANBAD001 failed on models/a.sql: IndexError: tuple index out of range`, then the traceback | +| A return value that is not a list of findings | `custom Rule XSQLCLEANRET001 must return a list of findings from ctx.finding(...)` | +| A fix from a Rule without `fixable` | `Rule XSQLCLEANBAD001 returned a fix but does not declare fixable` | ## Continue diff --git a/website/src/content/docs/docs/custom-rules/statement-facts.mdx b/website/src/content/docs/docs/custom-rules/statement-facts.mdx index 3284593..50138a1 100644 --- a/website/src/content/docs/docs/custom-rules/statement-facts.mdx +++ b/website/src/content/docs/docs/custom-rules/statement-facts.mdx @@ -12,7 +12,7 @@ from sqlclean import Finding, RuleContext, Statement, rule @rule( - code="XSQCJOIN001", + code="XSQLCLEANJOIN001", message="Join to customers has no condition", remediation="Join customers on customer_id.", ) diff --git a/website/src/content/docs/docs/custom-rules/testing.mdx b/website/src/content/docs/docs/custom-rules/testing.mdx index f1c30ee..f3beaca 100644 --- a/website/src/content/docs/docs/custom-rules/testing.mdx +++ b/website/src/content/docs/docs/custom-rules/testing.mdx @@ -136,7 +136,7 @@ and does not format the result. It shows exactly what the Rule's fix changes. | Problem | Message | |---------|---------| | A different number of findings | `reads orders: expected 1 findings, got 0` | -| Findings that depend on file order | `custom Rule XSQCND001 is not deterministic` | +| Findings that depend on file order | `custom Rule XSQLCLEANND001 is not deterministic` | | Case SQL that does not parse | `sqlclean could not parse the case SQL: sqlclean: error: Parse error at line 1, column 18: ...` | | A function without `@rule` | `evaluate_rule needs a function decorated with @rule` | | No `sqlclean` executable | `the sqlclean executable is not installed; install sqlclean` | @@ -157,7 +157,7 @@ The usual cause is state kept between calls, such as a module-level set of names SEEN: set[str] = set() -@rule(code="XSQCND001", message="Table read in an earlier file", remediation="...") +@rule(code="XSQLCLEANND001", message="Table read in an earlier file", remediation="...") def seen_before(*, statement: Statement, ctx: RuleContext) -> list[Finding]: found = [ctx.finding(subject=statement, node=t) for t in statement.tables if t.name in SEEN] SEEN.update(t.name for t in statement.tables) @@ -165,7 +165,7 @@ def seen_before(*, statement: Statement, ctx: RuleContext) -> list[Finding]: ``` ```text -RuleCaseError: custom Rule XSQCND001 is not deterministic +RuleCaseError: custom Rule XSQLCLEANND001 is not deterministic ``` Compute findings from the subject and `ctx` alone. When a Rule needs to compare files, give it a diff --git a/website/src/content/docs/docs/embedding.mdx b/website/src/content/docs/docs/embedding.mdx index 3675c8c..6129294 100644 --- a/website/src/content/docs/docs/embedding.mdx +++ b/website/src/content/docs/docs/embedding.mdx @@ -17,7 +17,7 @@ fn main() -> Result<(), String> { version: LINT_API_VERSION, sql: "SELECT order_id FROM orders WHERE cancelled_at = NULL LIMIT 10".to_owned(), dialect: "duckdb".to_owned(), - enabled_rules: Some(vec!["SQC001".to_owned(), "SQC004".to_owned()]), + enabled_rules: Some(vec!["SQLCLEAN001".to_owned(), "SQLCLEAN004".to_owned()]), ..LintRequest::default() }; let response: LintResponse = lint(request)?; @@ -32,9 +32,9 @@ fn main() -> Result<(), String> { ``` ```text -SQC001 47..48 Comparison with NULL is never true +SQLCLEAN001 47..48 Comparison with NULL is never true fix: replace 47..48 with "IS" -SQC004 54..59 Row selection is nondeterministic +SQLCLEAN004 54..59 Row selection is nondeterministic ``` ## Adding the dependency @@ -74,21 +74,49 @@ the dialect. Offsets in requests, findings, edits and facts count Unicode charac | `dialect` | required | A [dialect name](/docs/configuration/#dialects) | | `enabled_rules` | the default Rules | Rule codes or prefixes to run | | `ignored_rules` | `[]` | Rule codes or prefixes to skip | -| `max_literal_length` | `100` | The `SQC044` limit | -| `max_ranking_order_by` | `5` | The `SQC043` limit | +| `max_literal_length` | `100` | The `SQLCLEAN044` limit | +| `max_ranking_order_by` | `5` | The `SQLCLEAN043` limit | | `config_file` | `sqlclean.toml` | The configuration file name that remediation text refers to | -| `externally_referenced_ctes` | `[]` | CTE names that something outside the SQL reads, so `SQC005` does not report them | -| `relation_keys` | `{}` | Declared unique keys by relation name; an empty key means the relation holds at most one row, so `SQC038` does not report a cross join with it | - -Other fields describe template code the host has replaced before linting. See `LintRequest` in -`sql_lint::models`. - -A selector that matches no Rule is an error: `unknown native lint rule 'SQC9'`. +| `externally_referenced_ctes` | `[]` | CTE names that something outside the SQL reads, so `SQLCLEAN005` does not report them | +| `relation_keys` | `{}` | Unique keys by table name as the SQL writes it, compared without case; an empty key means the relation holds at most one row, so `SQLCLEAN038` does not report a cross join with it and `SQLCLEAN018` can prove a ranking order | +| `relation_names` | `{}` | The relation each placeholder table name stands for, so `SQLCLEAN038` messages and exceptions name it | +| `external_identifiers` | `[]` | Names the host defines outside the SQL, which are not unknown qualifiers | +| `dependency_identifiers` | `[]` | Placeholder table names that stand for other relations | +| `sql_macro_outputs` | `[]` | The character range each macro call's output fills and the relations it passes, so qualification is judged as the macro wrote it | +| `allows_dynamic_output_star` | `false` | The host proved the output columns, so a top-level `SELECT *` passes `SQLCLEAN021` | +| `fixture_harness` | absent | The generated wrapper around a test or macro body; see [Template code](#template-code) | + +A selector that matches no Rule is an error: `unknown native lint rule 'SQLCLEAN9'`. + +## Template code + +A host that lints templated SQL replaces each template expression with a placeholder before +linting, and maps offsets back afterwards. The crate exports the placeholder prefixes in +`constants`: + +| Constant | Stands for | +|----------|------------| +| `INTERPOLATION_PLACEHOLDER_PREFIX` | An interpolated expression, relation or CTE list; the formatter keeps it in place | +| `MACRO_PARAMETER_PLACEHOLDER_PREFIX` | A macro parameter; `SQLCLEAN028` treats `parameter.slot` reads as written by the macro | +| `RELATION_PARAMETER_PLACEHOLDER_PREFIX` | A relation parameter, written `__`; `SELECT *` from it alone passes `SQLCLEAN021` | +| `VALUE_PARAMETER_PLACEHOLDER_PREFIX` | A value parameter | + +Rules never judge a placeholder as an authored name. + +`fixture_harness` describes the query a test runner or macro wraps around a body. When it is +present, a terminal `SELECT 1` is ceremonial: it passes `SQLCLEAN022` and `SQLCLEAN035`, and `SQLCLEAN041` and +`SQLCLEAN042` do not apply. + +| Field | Description | +|-------|-------------| +| `cte_prefixes` | Prefixes of the CTE names the harness generates, which `SQLCLEAN005` treats as reachable | +| `input_cte_prefixes` | Prefixes of the CTEs standing in for the body's inputs | +| `empty_relation` | The table function an input CTE reads with `SELECT * FROM ()` when it has no rows, which passes `SQLCLEAN021` | ## Fixes `LintDiagnostic.fix` holds at most one edit: `start`, `end` and `replacement`. The engine does not -say whether a fix is safe. The `sqlclean` command treats the `SQC001` fix as unsafe, because +say whether a fix is safe. The `sqlclean` command treats the `SQLCLEAN001` fix as unsafe, because turning `= NULL` into `IS NULL` changes which rows match, and every other built-in fix as safe. A host that applies fixes makes the same decision. See [Safe and unsafe fixes](/docs/rules/overview/#safe-and-unsafe-fixes). diff --git a/website/src/content/docs/docs/formatting.mdx b/website/src/content/docs/docs/formatting.mdx index d45b31b..72f0316 100644 --- a/website/src/content/docs/docs/formatting.mdx +++ b/website/src/content/docs/docs/formatting.mdx @@ -183,4 +183,4 @@ j.sql: could not format: Parse error at line 1, column 16: Expected Colon, got R other file as usual. Fix the SQL, set the file's dialect with [`[[dialects]]`](/docs/configuration/#dialects), or [`exclude`](/docs/configuration/#choosing-files) the file. `sqlclean check` reports the same file as -[`SQC999`](/docs/rules/overview/#parse-errors-sqc999). +[`SQLCLEAN999`](/docs/rules/overview/#parse-errors-sqlclean999). diff --git a/website/src/content/docs/docs/index.mdx b/website/src/content/docs/docs/index.mdx index c824b63..280f32d 100644 --- a/website/src/content/docs/docs/index.mdx +++ b/website/src/content/docs/docs/index.mdx @@ -16,7 +16,7 @@ sqlclean check ``` ```text -error[SQC001]: Comparison with NULL is never true +error[SQLCLEAN001]: Comparison with NULL is never true --> models/open_orders.sql:1:77 | 1 | with open_orders as (select order_id, amount from orders where cancelled_at = null), @@ -24,7 +24,7 @@ error[SQC001]: Comparison with NULL is never true = help: Use IS NULL or IS NOT NULL when testing for NULL. = fix: available with `sqlclean fix --unsafe-fixes` -error[SQC005]: CTE is unreachable from the final query +error[SQLCLEAN005]: CTE is unreachable from the final query --> models/open_orders.sql:2:1 | 2 | refunds as (select order_id from payments where amount < 0) diff --git a/website/src/content/docs/docs/quickstart.mdx b/website/src/content/docs/docs/quickstart.mdx index 973920c..ecf15da 100644 --- a/website/src/content/docs/docs/quickstart.mdx +++ b/website/src/content/docs/docs/quickstart.mdx @@ -37,7 +37,7 @@ sqlclean check ``` ```text -error[SQC001]: Comparison with NULL is never true +error[SQLCLEAN001]: Comparison with NULL is never true --> models/open_orders.sql:1:90 | 1 | with open_orders as (select order_id, customer_id, amount from orders where cancelled_at = null), @@ -45,7 +45,7 @@ error[SQC001]: Comparison with NULL is never true = help: Use IS NULL or IS NOT NULL when testing for NULL. = fix: available with `sqlclean fix --unsafe-fixes` -error[SQC005]: CTE is unreachable from the final query +error[SQLCLEAN005]: CTE is unreachable from the final query --> models/open_orders.sql:2:1 | 2 | refunds as (select order_id from payments where amount < 0) @@ -53,7 +53,7 @@ error[SQC005]: CTE is unreachable from the final query = help: Reference the CTE from the final query or another reachable CTE, or remove it. = fix: available with `sqlclean fix` -error[SQC004]: Row selection is nondeterministic +error[SQLCLEAN004]: Row selection is nondeterministic --> models/open_orders.sql:3:55 | 3 | select order_id, customer_id, amount from open_orders limit 100 @@ -77,7 +77,7 @@ sqlclean fix ```text Fixed 1 problem(s) and changed 1 file(s). -error[SQC001]: Comparison with NULL is never true +error[SQLCLEAN001]: Comparison with NULL is never true --> models/open_orders.sql:7:24 | 7 | WHERE cancelled_at = NULL @@ -85,7 +85,7 @@ error[SQC001]: Comparison with NULL is never true = help: Use IS NULL or IS NOT NULL when testing for NULL. = fix: available with `sqlclean fix --unsafe-fixes` -error[SQC004]: Row selection is nondeterministic +error[SQLCLEAN004]: Row selection is nondeterministic --> models/open_orders.sql:15:1 | 15 | LIMIT 100 @@ -103,7 +103,7 @@ it: sqlclean fix --unsafe-fixes ``` -`SQC004` has no fix: only you know which column makes the order deterministic. Add +`SQLCLEAN004` has no fix: only you know which column makes the order deterministic. Add `ORDER BY order_id` before `LIMIT 100`, then run `sqlclean fix` once more to format the new clause. The file is now: @@ -157,28 +157,28 @@ every built-in Rule: dialect = "duckdb" [rules] -select = ["SQC"] +select = ["SQLCLEAN"] ``` -`SQC` is a prefix, so it selects all 53 built-in Rules. Three of the opt-in structure Rules now +`SQLCLEAN` is a prefix, so it selects all 53 built-in Rules. Three of the opt-in structure Rules now report the file: ```text -error[SQC041]: Only the last top-level CTE may be named final, and it must use that name +error[SQLCLEAN041]: Only the last top-level CTE may be named final, and it must use that name --> models/open_orders.sql:1:6 | 1 | WITH open_orders AS ( | ^^^^^^^^^^^ - = help: Name the last top-level CTE final and rename any other final CTE; SQC035 checks the terminal SELECT. + = help: Name the last top-level CTE final and rename any other final CTE; SQLCLEAN035 checks the terminal SELECT. -error[SQC034]: Query keeps transformation logic outside top-level CTEs +error[SQLCLEAN034]: Query keeps transformation logic outside top-level CTEs --> models/open_orders.sql:10:1 | 10 | SELECT | ^^^^^^ = help: Move transformation logic into named top-level CTEs before the terminal SELECT. -error[SQC035]: Terminal SELECT does not read plainly from the final top-level CTE +error[SQLCLEAN035]: Terminal SELECT does not read plainly from the final top-level CTE --> models/open_orders.sql:10:1 | 10 | SELECT @@ -194,8 +194,8 @@ Follow them, or skip the ones your team does not want: dialect = "duckdb" [rules] -select = ["SQC"] -ignore = ["SQC034", "SQC035", "SQC041"] +select = ["SQLCLEAN"] +ignore = ["SQLCLEAN034", "SQLCLEAN035", "SQLCLEAN041"] ``` ```text diff --git a/website/src/content/docs/docs/rules/overview.mdx b/website/src/content/docs/docs/rules/overview.mdx index 5dd2b7e..5669b51 100644 --- a/website/src/content/docs/docs/rules/overview.mdx +++ b/website/src/content/docs/docs/rules/overview.mdx @@ -7,8 +7,8 @@ import Card from '../../../../components/docs/Card.astro'; import CardGroup from '../../../../components/docs/CardGroup.astro'; A Rule is one check over SQL. It reports a finding at an exact position, with a message, a -remediation, and sometimes a fix. SQLClean has 53 built-in Rules with `SQC###` codes, and runs -[custom Rules](/docs/custom-rules/overview/) written in Python with `XSQC` codes. +remediation, and sometimes a fix. SQLClean has 53 built-in Rules with `SQLCLEAN###` codes, and runs +[custom Rules](/docs/custom-rules/overview/) written in Python with `XSQLCLEAN` codes. Consider a query that returns an arbitrary hundred rows: @@ -23,7 +23,7 @@ sqlclean check ``` ```text -error[SQC004]: Row selection is nondeterministic +error[SQLCLEAN004]: Row selection is nondeterministic --> models/recent_orders.sql:3:1 | 3 | LIMIT 100 @@ -50,26 +50,26 @@ Select Rules in `sqlclean.toml` by exact code or by prefix: ```toml [rules] -select = ["SQC"] # every built-in Rule -ignore = ["SQC027", "SQC03"] # except SQC027 and SQC030 to SQC039 +select = ["SQLCLEAN"] # every built-in Rule +ignore = ["SQLCLEAN027", "SQLCLEAN03"] # except SQLCLEAN027 and SQLCLEAN030 to SQLCLEAN039 ``` -- An exact code such as `SQC004` selects one Rule. -- A prefix selects every Rule whose code starts with it: `SQC` selects all built-in Rules, - `SQC00` selects `SQC001` to `SQC009`, and `XSQCNAME` selects every custom Rule in the `NAME` +- An exact code such as `SQLCLEAN004` selects one Rule. +- A prefix selects every Rule whose code starts with it: `SQLCLEAN` selects all built-in Rules, + `SQLCLEAN00` selects `SQLCLEAN001` to `SQLCLEAN009`, and `XSQLCLEANNAME` selects every custom Rule in the `NAME` family. - `ignore` removes Rules from the selection, by code or prefix. -- A selector that matches no Rule is an error: `Rule selector 'SQC9' matches no Rule`. +- A selector that matches no Rule is an error: `Rule selector 'SQLCLEAN9' matches no Rule`. On the command line, `--select` replaces `[rules] select` for one run, and `--ignore` adds to `[rules] ignore`: ```bash -sqlclean check --select SQC001,SQC004 -sqlclean check --ignore SQC039 +sqlclean check --select SQLCLEAN001,SQLCLEAN004 +sqlclean check --ignore SQLCLEAN039 ``` -`select = []` runs no Rules. Files are still parsed, so [parse errors](#parse-errors-sqc999) are +`select = []` runs no Rules. Files are still parsed, so [parse errors](#parse-errors-sqlclean999) are still reported. ## Default Rules @@ -80,19 +80,19 @@ duplicate names and unused CTEs. | Code | Finding | |------|---------| -| `SQC001` | Comparison with NULL is never true | -| `SQC002` | Comma-separated sources create an implicit cartesian join | -| `SQC003` | Non-cross join has no meaningful condition | -| `SQC004` | Row selection is nondeterministic | -| `SQC005` | CTE is unreachable from the final query | -| `SQC006` | DISTINCT is redundant with the grouped output | -| `SQC007` | Positional set operation is vulnerable to column-order drift | -| `SQC009` | Table alias is duplicated in the same query scope | -| `SQC010` | Output alias is duplicated in the same select list | -| `SQC018` | ROW_NUMBER has no deterministic ordering | -| `SQC019` | NOT IN list contains NULL and can reject every row | -| `SQC020` | Set-operation branches project different column counts | -| `SQC039` | Inline query relation obscures data flow | +| `SQLCLEAN001` | Comparison with NULL is never true | +| `SQLCLEAN002` | Comma-separated sources create an implicit cartesian join | +| `SQLCLEAN003` | Non-cross join has no meaningful condition | +| `SQLCLEAN004` | Row selection is nondeterministic | +| `SQLCLEAN005` | CTE is unreachable from the final query | +| `SQLCLEAN006` | DISTINCT is redundant with the grouped output | +| `SQLCLEAN007` | Positional set operation is vulnerable to column-order drift | +| `SQLCLEAN009` | Table alias is duplicated in the same query scope | +| `SQLCLEAN010` | Output alias is duplicated in the same select list | +| `SQLCLEAN018` | ROW_NUMBER has no deterministic ordering | +| `SQLCLEAN019` | NOT IN list contains NULL and can reject every row | +| `SQLCLEAN020` | Set-operation branches project different column counts | +| `SQLCLEAN039` | Inline query relation obscures data flow | The other 32 Rules run only when `select` names them, by code or prefix. A prefix selects every matching Rule, whether it is enabled by default or not. A custom Rule is enabled by default when its @@ -104,8 +104,8 @@ Two built-in Rules compare against a limit, set under `[rules.thresholds]`: ```toml [rules.thresholds] -max_literal_length = 100 # SQC044: the longest string literal allowed -max_ranking_order_by = 5 # SQC043: the most ORDER BY expressions in a ranking window +max_literal_length = 100 # SQLCLEAN044: the longest string literal allowed +max_ranking_order_by = 5 # SQLCLEAN043: the most ORDER BY expressions in a ranking window ``` Both default to the values shown and must be positive. Built-in Rules take no other options. @@ -117,7 +117,7 @@ so a reviewer sees it in the diff, and it needs a reason: ```toml [[rules.rule_exceptions]] -rule = "SQC004" +rule = "SQLCLEAN004" path = "models/order_preview.sql" reason = "A preview of any hundred orders is enough." ``` @@ -125,23 +125,23 @@ reason = "A preview of any hundred orders is enough." `rule` is an exact code, not a prefix. `path` is the file's path relative to the configuration root, as findings print it. The exception covers every finding of that Rule in that file. -SQLClean has no inline suppression comments. A comment such as `-- noqa: SQC001` changes nothing; +SQLClean has no inline suppression comments. A comment such as `-- noqa: SQLCLEAN001` changes nothing; record the exception in `sqlclean.toml` instead. ### Cross join exceptions A file-wide exception for a deliberate `CROSS JOIN` would also hide any accidental cross join added -to the file later. `SQC038` findings name the joined relation and, inside a CTE, that CTE, so an +to the file later. `SQLCLEAN038` findings name the joined relation and, inside a CTE, that CTE, so an exception can cover exactly one join: ```text -error[SQC038]: CROSS JOIN with `regions` in CTE `pairs` creates an explicit cartesian product +error[SQLCLEAN038]: CROSS JOIN with `regions` in CTE `pairs` creates an explicit cartesian product --> models/calendar.sql:11:3 ``` ```toml [[rules.rule_exceptions]] -rule = "SQC038" +rule = "SQLCLEAN038" path = "models/calendar.sql" relation = "regions" cte = "pairs" # optional: only the join inside this CTE @@ -149,10 +149,10 @@ reason = "Every order date is reported for every region." ``` `relation` and `cte` compare without case. Without `cte`, the exception covers joins with that -relation anywhere in the file. `cte` needs `relation`, and `relation` matches only `SQC038` +relation anywhere in the file. `cte` needs `relation`, and `relation` matches only `SQLCLEAN038` findings. -`SQC038` does not report a cross join when one side is provably at most one row, such as a CTE +`SQLCLEAN038` does not report a cross join when one side is provably at most one row, such as a CTE that aggregates without `GROUP BY`, `LIMIT 1` or a one-row `VALUES`, so many intentional cross joins need no exception: @@ -174,11 +174,11 @@ CROSS JOIN latest AS l An exception that matches no finding is stale. `check` and `fix` report it and exit with `1`: ```text -error: stale rule exception: SQC004 in models/orders.sql matches no finding; remove it from sqlclean.toml +error: stale rule exception: SQLCLEAN004 in models/orders.sql matches no finding; remove it from sqlclean.toml ``` Delete the entry. Exceptions are only judged stale when their file was checked and their Rule was -selected, so `sqlclean check models/customers.sql` or `--select SQC001` never reports an exception +selected, so `sqlclean check models/customers.sql` or `--select SQLCLEAN001` never reports an exception for another file or Rule. ## Path ignores @@ -188,7 +188,7 @@ prefixes, glob patterns, and a reason: ```toml [[rules.rule_ignores]] -rules = ["SQC034", "SQC035"] +rules = ["SQLCLEAN034", "SQLCLEAN035"] paths = ["scratch/**"] reason = "Exploratory queries." ``` @@ -196,13 +196,13 @@ reason = "Exploratory queries." Patterns are relative to the configuration root, as in [`include`](/docs/configuration/#choosing-files). To turn a Rule off everywhere, add it to `[rules] ignore` instead. -## Parse errors (SQC999) +## Parse errors (SQLCLEAN999) -A file that does not parse under its [dialect](/docs/configuration/#dialects) gets one `SQC999` +A file that does not parse under its [dialect](/docs/configuration/#dialects) gets one `SQLCLEAN999` finding and no other: ```text -error[SQC999]: SQL could not be parsed as duckdb: Parse error at line 1, column 18: Expected table name or subquery, got Where +error[SQLCLEAN999]: SQL could not be parsed as duckdb: Parse error at line 1, column 18: Expected table name or subquery, got Where --> scratch/broken.sql:1:1 | 1 | SELECT FROM WHERE orders @@ -211,7 +211,7 @@ error[SQC999]: SQL could not be parsed as duckdb: Parse error at line 1, column ``` The finding points at the start of the file; the message gives the line and column of the error. -`SQC999` is not a selectable Rule: selection, `ignore`, path ignores and exceptions never hide it. +`SQLCLEAN999` is not a selectable Rule: selection, `ignore`, path ignores and exceptions never hide it. Fix the SQL, set the right dialect for the file, or [`exclude`](/docs/configuration/#choosing-files) the file. @@ -219,9 +219,9 @@ the file. Some Rules carry a fix. [`sqlclean fix`](/docs/cli/fix/) applies it. -- A **safe** fix keeps the query's results. `SQC005` removes an unused CTE; `SQC002` turns +- A **safe** fix keeps the query's results. `SQLCLEAN005` removes an unused CTE; `SQLCLEAN002` turns `FROM orders, customers` into `FROM orders CROSS JOIN customers`. -- An **unsafe** fix can change results. `SQC001` turns `cancelled_at = NULL`, which matches no row, +- An **unsafe** fix can change results. `SQLCLEAN001` turns `cancelled_at = NULL`, which matches no row, into `cancelled_at IS NULL`, which matches rows. That is almost always the intent, but it is a different query. Unsafe fixes apply only with `--unsafe-fixes`. diff --git a/website/src/content/docs/docs/rules/reference.mdx b/website/src/content/docs/docs/rules/reference.mdx index 103091c..97149a1 100644 --- a/website/src/content/docs/docs/rules/reference.mdx +++ b/website/src/content/docs/docs/rules/reference.mdx @@ -13,67 +13,67 @@ Run `sqlclean rules ` for a Rule's remediation. | Code | Finding | Default | Fix | |------|---------|---------|-----| -| `SQC001` | Comparison with NULL is never true | Yes | Unsafe | -| `SQC002` | Comma-separated sources create an implicit cartesian join | Yes | Safe | -| `SQC003` | Non-cross join has no meaningful condition | Yes | Safe | -| `SQC004` | Row selection is nondeterministic | Yes | — | -| `SQC005` | CTE is unreachable from the final query | Yes | Safe | -| `SQC006` | DISTINCT is redundant with the grouped output | Yes | Safe | -| `SQC007` | Positional set operation is vulnerable to column-order drift | Yes | — | -| `SQC008` | Bare UNION leaves duplicate handling implicit | No | Safe | -| `SQC009` | Table alias is duplicated in the same query scope | Yes | — | -| `SQC010` | Output alias is duplicated in the same select list | Yes | — | -| `SQC011` | Clause mixes positional and named references | No | — | -| `SQC012` | ELSE NULL is redundant | No | — | -| `SQC013` | DISTINCT is written as though it were a function | No | Safe | -| `SQC014` | Predicate compares identical constant values | No | — | -| `SQC015` | Empty statement follows another terminator | No | — | -| `SQC016` | Expression is aliased to its existing name | No | — | -| `SQC017` | Row count uses a constant expression | No | Safe | -| `SQC018` | ROW_NUMBER has no deterministic ordering | Yes | — | -| `SQC019` | NOT IN list contains NULL and can reject every row | Yes | — | -| `SQC020` | Set-operation branches project different column counts | Yes | — | -| `SQC021` | Query output has an uncontrolled column shape | No | — | -| `SQC022` | Calculated projection has no stable output name | No | — | -| `SQC023` | Table alias is never referenced | No | — | -| `SQC024` | WHERE predicate rejects NULL rows from a LEFT JOIN | No | — | -| `SQC025` | JOIN type is implicit | No | Safe | -| `SQC026` | ORDER BY mixes explicit and implicit directions | No | — | -| `SQC027` | Column reference is unqualified in a multi-relation query | No | — | -| `SQC028` | Single-relation query mixes qualified and unqualified columns | No | — | -| `SQC029` | Qualified reference uses a relation absent from this query scope | No | — | -| `SQC030` | CASE expression only converts a condition to TRUE or FALSE | No | Safe | -| `SQC031` | CASE expression is nested directly inside ELSE | No | — | -| `SQC032` | Joined relation contributes no referenced values | No | — | -| `SQC033` | Comment is not attached to the syntax node it explains | No | — | -| `SQC034` | Query keeps transformation logic outside top-level CTEs | No | — | -| `SQC035` | Terminal SELECT does not read plainly from the final top-level CTE | No | — | -| `SQC036` | CTE is nested inside another query | No | — | -| `SQC037` | Recursive CTE is not permitted | No | — | -| `SQC038` | CROSS JOIN creates an explicit cartesian product | No | — | -| `SQC039` | Inline query relation obscures data flow | Yes | — | -| `SQC040` | JOIN ON contains a computed expression | No | — | -| `SQC041` | Only the last top-level CTE may be named final, and it must use that name | No | — | -| `SQC042` | CTE output column is never read later in the query | No | — | -| `SQC043` | Ranking window sorts by more expressions than max_ranking_order_by | No | — | -| `SQC044` | String literal is longer than max_literal_length | No | — | -| `SQC045` | JSON payload is parsed more than once in one SELECT | No | — | -| `SQC046` | WITH defines the same CTE name more than once | Yes | — | -| `SQC047` | CASE WHEN NULL or IN (NULL) never matches | Yes | — | -| `SQC048` | Expression divides by a literal zero | Yes | — | -| `SQC049` | UPDATE or DELETE has no limiting predicate and changes every row | No | — | -| `SQC050` | INSERT does not list its target columns | No | — | -| `SQC051` | NATURAL JOIN matches on every column the relations share | Yes | — | -| `SQC052` | BETWEEN lower bound is greater than its upper bound | Yes | — | -| `SQC053` | Aggregate or window function is used in WHERE, ON or GROUP BY | Yes | — | - -`SQC999` is the [parse error](/docs/rules/overview/#parse-errors-sqc999) finding. It is not a +| `SQLCLEAN001` | Comparison with NULL is never true | Yes | Unsafe | +| `SQLCLEAN002` | Comma-separated sources create an implicit cartesian join | Yes | Safe | +| `SQLCLEAN003` | Non-cross join has no meaningful condition | Yes | Safe | +| `SQLCLEAN004` | Row selection is nondeterministic | Yes | — | +| `SQLCLEAN005` | CTE is unreachable from the final query | Yes | Safe | +| `SQLCLEAN006` | DISTINCT is redundant with the grouped output | Yes | Safe | +| `SQLCLEAN007` | Positional set operation is vulnerable to column-order drift | Yes | — | +| `SQLCLEAN008` | Bare UNION leaves duplicate handling implicit | No | Safe | +| `SQLCLEAN009` | Table alias is duplicated in the same query scope | Yes | — | +| `SQLCLEAN010` | Output alias is duplicated in the same select list | Yes | — | +| `SQLCLEAN011` | Clause mixes positional and named references | No | — | +| `SQLCLEAN012` | ELSE NULL is redundant | No | — | +| `SQLCLEAN013` | DISTINCT is written as though it were a function | No | Safe | +| `SQLCLEAN014` | Predicate compares identical constant values | No | — | +| `SQLCLEAN015` | Empty statement follows another terminator | No | — | +| `SQLCLEAN016` | Expression is aliased to its existing name | No | — | +| `SQLCLEAN017` | Row count uses a constant expression | No | Safe | +| `SQLCLEAN018` | ROW_NUMBER has no deterministic ordering | Yes | — | +| `SQLCLEAN019` | NOT IN list contains NULL and can reject every row | Yes | — | +| `SQLCLEAN020` | Set-operation branches project different column counts | Yes | — | +| `SQLCLEAN021` | Query output has an uncontrolled column shape | No | — | +| `SQLCLEAN022` | Calculated projection has no stable output name | No | — | +| `SQLCLEAN023` | Table alias is never referenced | No | — | +| `SQLCLEAN024` | WHERE predicate rejects NULL rows from a LEFT JOIN | No | — | +| `SQLCLEAN025` | JOIN type is implicit | No | Safe | +| `SQLCLEAN026` | ORDER BY mixes explicit and implicit directions | No | — | +| `SQLCLEAN027` | Column reference is unqualified in a multi-relation query | No | — | +| `SQLCLEAN028` | Single-relation query mixes qualified and unqualified columns | No | — | +| `SQLCLEAN029` | Qualified reference uses a relation absent from this query scope | No | — | +| `SQLCLEAN030` | CASE expression only converts a condition to TRUE or FALSE | No | Safe | +| `SQLCLEAN031` | CASE expression is nested directly inside ELSE | No | — | +| `SQLCLEAN032` | Joined relation contributes no referenced values | No | — | +| `SQLCLEAN033` | Comment is not attached to the syntax node it explains | No | — | +| `SQLCLEAN034` | Query keeps transformation logic outside top-level CTEs | No | — | +| `SQLCLEAN035` | Terminal SELECT does not read plainly from the final top-level CTE | No | — | +| `SQLCLEAN036` | CTE is nested inside another query | No | — | +| `SQLCLEAN037` | Recursive CTE is not permitted | No | — | +| `SQLCLEAN038` | CROSS JOIN creates an explicit cartesian product | No | — | +| `SQLCLEAN039` | Inline query relation obscures data flow | Yes | — | +| `SQLCLEAN040` | JOIN ON contains a computed expression | No | — | +| `SQLCLEAN041` | Only the last top-level CTE may be named final, and it must use that name | No | — | +| `SQLCLEAN042` | CTE output column is never read later in the query | No | — | +| `SQLCLEAN043` | Ranking window sorts by more expressions than max_ranking_order_by | No | — | +| `SQLCLEAN044` | String literal is longer than max_literal_length | No | — | +| `SQLCLEAN045` | JSON payload is parsed more than once in one SELECT | No | — | +| `SQLCLEAN046` | WITH defines the same CTE name more than once | Yes | — | +| `SQLCLEAN047` | CASE WHEN NULL or IN (NULL) never matches | Yes | — | +| `SQLCLEAN048` | Expression divides by a literal zero | Yes | — | +| `SQLCLEAN049` | UPDATE or DELETE has no limiting predicate and changes every row | No | — | +| `SQLCLEAN050` | INSERT does not list its target columns | No | — | +| `SQLCLEAN051` | NATURAL JOIN matches on every column the relations share | Yes | — | +| `SQLCLEAN052` | BETWEEN lower bound is greater than its upper bound | Yes | — | +| `SQLCLEAN053` | Aggregate or window function is used in WHERE, ON or GROUP BY | Yes | — | + +`SQLCLEAN999` is the [parse error](/docs/rules/overview/#parse-errors-sqlclean999) finding. It is not a selectable Rule. -`SQC043` and `SQC044` read their limits from +`SQLCLEAN043` and `SQLCLEAN044` read their limits from [`[rules.thresholds]`](/docs/rules/overview/#thresholds). -## SQC001: NULL comparisons +## SQLCLEAN001: NULL comparisons `= NULL` and `<> NULL` are never true, so the filter matches no row: @@ -84,7 +84,7 @@ WHERE cancelled_at = NULL ``` ```text -error[SQC001]: Comparison with NULL is never true +error[SQLCLEAN001]: Comparison with NULL is never true --> models/open_orders.sql:3:20 | 3 | WHERE cancelled_at = NULL @@ -96,7 +96,7 @@ error[SQC001]: Comparison with NULL is never true The fix writes `WHERE cancelled_at IS NULL`. It is unsafe because the query then returns rows it did not return before. -## SQC002 and SQC003: joins without keys +## SQLCLEAN002 and SQLCLEAN003: joins without keys A comma between sources joins every row with every row unless a `WHERE` predicate filters them: @@ -108,7 +108,7 @@ FROM orders AS o, customers AS c WHERE o.customer_id = c.customer_id ``` -The `SQC002` fix keeps the meaning and makes the cartesian product visible: +The `SQLCLEAN002` fix keeps the meaning and makes the cartesian product visible: ```diff -FROM orders AS o, customers AS c @@ -118,10 +118,10 @@ The `SQC002` fix keeps the meaning and makes the cartesian product visible: ``` Move the predicate into `JOIN customers AS c ON o.customer_id = c.customer_id` by hand to make it a -keyed join. `SQC003` reports a `JOIN` whose condition is missing or constant, such as +keyed join. `SQLCLEAN003` reports a `JOIN` whose condition is missing or constant, such as `ON 1 = 1`; its fix turns a `JOIN` without a condition into `CROSS JOIN`. -## SQC005: unused CTEs +## SQLCLEAN005: unused CTEs A CTE that no reachable query reads is dead code: @@ -138,7 +138,7 @@ SELECT order_id FROM paid ``` ```text -error[SQC005]: CTE is unreachable from the final query +error[SQLCLEAN005]: CTE is unreachable from the final query --> models/paid_orders.sql:5:1 | 5 | refunded AS ( @@ -149,7 +149,7 @@ error[SQC005]: CTE is unreachable from the final query The fix removes `refunded`. -## SQC018: unstable row numbers +## SQLCLEAN018: unstable row numbers Without `ORDER BY` in the window, the row numbered `1` can change between runs: @@ -161,7 +161,7 @@ FROM orders ``` ```text -error[SQC018]: ROW_NUMBER has no deterministic ordering +error[SQLCLEAN018]: ROW_NUMBER has no deterministic ordering ``` An `ORDER BY` is not always enough. Ties still rank in any order unless `PARTITION BY` and @@ -170,7 +170,7 @@ from the query, such as the `GROUP BY` columns of a CTE. Ranking straight over a with a second message: ```text -error[SQC018]: Ranking window order is not proven unique within its partition +error[SQLCLEAN018]: Ranking window order is not proven unique within its partition --> models/ranked.sql:3:3 | 3 | ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY ordered_at, order_id) AS order_rank @@ -198,10 +198,10 @@ SELECT FROM customer_orders ``` -`SQC004` reports the same problem for `LIMIT` and `OFFSET`; see the example in +`SQLCLEAN004` reports the same problem for `LIMIT` and `OFFSET`; see the example in [Rules](/docs/rules/overview/). -## SQC019: NULL in NOT IN +## SQLCLEAN019: NULL in NOT IN `x NOT IN (..., NULL)` is never true, so the filter rejects every row: @@ -212,7 +212,7 @@ WHERE status NOT IN ('cancelled', NULL) ``` ```text -error[SQC019]: NOT IN list contains NULL and can reject every row +error[SQLCLEAN019]: NOT IN list contains NULL and can reject every row --> models/active_orders.sql:3:14 | 3 | WHERE status NOT IN ('cancelled', NULL) @@ -220,49 +220,49 @@ error[SQC019]: NOT IN list contains NULL and can reject every row = help: Remove NULL from the list or express the anti-join with a NULL-safe NOT EXISTS. ``` -## SQC046 to SQC053: queries that cannot do what they say +## SQLCLEAN046 to SQLCLEAN053: queries that cannot do what they say These Rules report a query that runs differently from how it reads. None of them has a fix, because only the author knows the intended query. ```sql WITH paid AS ( - SELECT order_id, amount FROM orders WHERE amount BETWEEN 100 AND 10 -- SQC052 + SELECT order_id, amount FROM orders WHERE amount BETWEEN 100 AND 10 -- SQLCLEAN052 ), -paid AS ( -- SQC046 - SELECT order_id, amount / 0 AS ratio FROM orders -- SQC048 +paid AS ( -- SQLCLEAN046 + SELECT order_id, amount / 0 AS ratio FROM orders -- SQLCLEAN048 ) SELECT customer_id, - CASE region WHEN NULL THEN 'unknown' END AS region_label -- SQC047 + CASE region WHEN NULL THEN 'unknown' END AS region_label -- SQLCLEAN047 FROM paid -NATURAL JOIN customers -- SQC051 -WHERE SUM(amount) > 100 -- SQC053 +NATURAL JOIN customers -- SQLCLEAN051 +WHERE SUM(amount) > 100 -- SQLCLEAN053 GROUP BY customer_id ``` -- `SQC046` compares CTE names within one `WITH` the way the dialect resolves them, so quoted +- `SQLCLEAN046` compares CTE names within one `WITH` the way the dialect resolves them, so quoted `"paid"` and `"PAID"` are different names in PostgreSQL but the same name in DuckDB. A nested `WITH` may reuse an outer name. -- `SQC047` reports `CASE x WHEN NULL` and `x IN (NULL)`, which compare with `=` and so never - match. `NOT IN` lists with NULL are `SQC019`. -- `SQC048` reports `/`, `%`, `//` and `MOD` with a literal zero divisor. Depending on the dialect +- `SQLCLEAN047` reports `CASE x WHEN NULL` and `x IN (NULL)`, which compare with `=` and so never + match. `NOT IN` lists with NULL are `SQLCLEAN019`. +- `SQLCLEAN048` reports `/`, `%`, `//` and `MOD` with a literal zero divisor. Depending on the dialect the query fails or returns NULL. -- `SQC052` compares number and `DATE 'YYYY-MM-DD'` bounds exactly and skips `BETWEEN SYMMETRIC`. +- `SQLCLEAN052` compares number and `DATE 'YYYY-MM-DD'` bounds exactly and skips `BETWEEN SYMMETRIC`. A reversed `NOT BETWEEN` is reported too, because it matches every non-NULL value. -- `SQC053` reports aggregates in `WHERE`, `ON` and `GROUP BY`, and window functions anywhere in +- `SQLCLEAN053` reports aggregates in `WHERE`, `ON` and `GROUP BY`, and window functions anywhere in those clauses. Aggregates in `HAVING`, windows in `QUALIFY`, `FILTER (WHERE ...)` and subqueries pass. Two write-safety Rules are opt-in, because changing every row is sometimes intended: -- `SQC049` reports an `UPDATE` or `DELETE` whose rows nothing limits. A `WHERE` without a column +- `SQLCLEAN049` reports an `UPDATE` or `DELETE` whose rows nothing limits. A `WHERE` without a column or subquery, such as `WHERE TRUE`, does not count; a join condition or a `LIMIT` does. -- `SQC050` reports `INSERT` without a column list. `DEFAULT VALUES` and DuckDB's `BY NAME` pass. +- `SQLCLEAN050` reports `INSERT` without a column list. `DEFAULT VALUES` and DuckDB's `BY NAME` pass. -## SQC039: inline subqueries +## SQLCLEAN039: inline subqueries A subquery in `FROM` hides a step of the query. Name it as a CTE instead: @@ -282,7 +282,7 @@ SELECT order_id FROM paid ``` -## SQC034, SQC035 and SQC041: query structure +## SQLCLEAN034, SQLCLEAN035 and SQLCLEAN041: query structure These opt-in Rules ask every query to do its work in top-level CTEs, name the last one `final`, and end with a plain `SELECT` of named columns from it. This query passes every built-in Rule: @@ -309,4 +309,4 @@ SELECT FROM final ``` -Ending with `SELECT * FROM final` is reported by `SQC021`, which asks for named output columns. +Ending with `SELECT * FROM final` is reported by `SQLCLEAN021`, which asks for named output columns.