@metabase/cli 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{add-collection-COtKcy6Y.mjs → add-collection-BnGPc0Vv.mjs} +3 -3
- package/dist/{alert-DMlSjPEv.mjs → alert-DQkF8jYR.mjs} +7 -7
- package/dist/{alerts-s3al16NZ.mjs → alerts-BncG7w1_.mjs} +6 -6
- package/dist/{append-CbGmdeLw.mjs → append-D4ekYCuD.mjs} +4 -4
- package/dist/{archive-Ce4eArrs.mjs → archive-BQ4OA-R4.mjs} +3 -3
- package/dist/{archive-5EY9UJU_.mjs → archive-BXr9kFNz.mjs} +5 -5
- package/dist/{archive-a05W75XH.mjs → archive-BifJXCHF.mjs} +3 -3
- package/dist/{archive-DW7x0IFB.mjs → archive-CxNUeWII2.mjs} +4 -4
- package/dist/{archive-C_UHeanE.mjs → archive-D2WCz3Oe.mjs} +3 -3
- package/dist/{archive-BFmx4B91.mjs → archive-DjHLWUfC.mjs} +5 -5
- package/dist/{archive-BZCYIBhQ.mjs → archive-DnCF-Ecm.mjs} +5 -5
- package/dist/{archive-DzSdJVqE.mjs → archive-DocyUIME.mjs} +5 -5
- package/dist/{archive-DDO2XX0E.mjs → archive-DpCP4yR1.mjs} +4 -4
- package/dist/{archive-DvbaSglr.mjs → archive-EhW6blNc.mjs} +3 -3
- package/dist/archive-ULXc3xzI.mjs +32 -0
- package/dist/{archive-CnDriekB.mjs → archive-v08JESCM.mjs} +5 -5
- package/dist/{auth-DOz7KW5E.mjs → auth-BPbsm8yV.mjs} +5 -5
- package/dist/{body-Di7940x_.mjs → body-BkkQkGJg.mjs} +2 -2
- package/dist/{branch-flag-CfJ8vwgu.mjs → branch-flag-CTDvbaBa.mjs} +1 -1
- package/dist/{branches-BC-vlk6i.mjs → branches-lPHtM_xR.mjs} +3 -3
- package/dist/{breaking-ByrjsFjq.mjs → breaking-DjMlCD96.mjs} +6 -6
- package/dist/{broken-DLSk1T88.mjs → broken-DUX3GWS5.mjs} +8 -8
- package/dist/{bulk-discard-values-VKGj8c7z.mjs → bulk-discard-values-Dl8Lzypf.mjs} +5 -5
- package/dist/{bulk-edit-CpuleeCQ.mjs → bulk-edit-N2xLVtfG.mjs} +4 -4
- package/dist/{bulk-rescan-values-DeGwiqLS.mjs → bulk-rescan-values-BK2rH2Ik.mjs} +4 -4
- package/dist/{bulk-sync-schema-BKVhauW1.mjs → bulk-sync-schema-BKJc9Rzq.mjs} +4 -4
- package/dist/{cancel-qKj45001.mjs → cancel-DzkRVGIk.mjs} +3 -3
- package/dist/{cancel-task-nmBBd1Ky.mjs → cancel-task-BiTlDY7a.mjs} +2 -2
- package/dist/card-BTBDBsu-.mjs +25 -0
- package/dist/{card-DSrgU7lT.mjs → card-CQNUT9pm.mjs} +1 -1
- package/dist/{card-Bv4ZN0oV.mjs → card-P5mBknsl.mjs} +2 -12
- package/dist/{cards-Bq73s48q.mjs → cards-CSL8ukS1.mjs} +4 -4
- package/dist/cli.mjs +80 -48
- package/dist/{client-BmURNkkW.mjs → client-BBwYPXDW.mjs} +100 -591
- package/dist/collection-B19phRNU.mjs +21 -0
- package/dist/{collection-zrZoJfgR.mjs → collection-B2wRXyTF.mjs} +11 -3
- package/dist/{collection-C03LXnCT.mjs → collection-CTnYZ2Jj.mjs} +1 -1
- package/dist/{collection-namespace-DaDzK31i.mjs → collection-namespace-B1OkM7p1.mjs} +1 -1
- package/dist/{content-translation-BlG41YrA.mjs → content-translation-DoGTQnvH.mjs} +3 -3
- package/dist/{copy-DTiYs_a2.mjs → copy-BYukQEtf.mjs} +4 -4
- package/dist/{copy-DOKlVa7H.mjs → copy-XlCT3gvG.mjs} +6 -6
- package/dist/{copy-flags-BhGWC5kS.mjs → copy-flags-ByB2MicL.mjs} +2 -2
- package/dist/{create-1rLk8b5q.mjs → create-3_oY9KHY.mjs} +3 -3
- package/dist/{create-BXX_n64u.mjs → create-B3fm5I-l2.mjs} +4 -4
- package/dist/{create-BKKNIe93.mjs → create-BP39g5Jk.mjs} +5 -5
- package/dist/{create-DraZzrLO.mjs → create-Bl9sS7v7.mjs} +6 -6
- package/dist/{create-d0trLAzB.mjs → create-Bnb1abv_.mjs} +4 -4
- package/dist/{create-DUytP2Y1.mjs → create-CLZ7w83R.mjs} +4 -4
- package/dist/{create-Duj_2YIF.mjs → create-CYoarNrb.mjs} +4 -4
- package/dist/{create-C0kz0oYc.mjs → create-CbT4SPHV.mjs} +5 -5
- package/dist/{create-B1QDNU1x.mjs → create-Cdt8u1wF.mjs} +6 -6
- package/dist/create-CqF7vqXC.mjs +48 -0
- package/dist/{create-B5BwdPwT.mjs → create-CrtIqtXN.mjs} +6 -6
- package/dist/{create-BpwZJZxb.mjs → create-D5_c5SHo.mjs} +5 -5
- package/dist/{create-Cob0gLsA.mjs → create-DBNxy5rN.mjs} +5 -5
- package/dist/{create-vOw8gmBU.mjs → create-DZJQp3r7.mjs} +3 -3
- package/dist/{create-JaFhqysM.mjs → create-DxMmIHI4.mjs} +5 -5
- package/dist/{create-B1bX6ngX.mjs → create-T4PZPVE9.mjs} +4 -4
- package/dist/{create-branch-B5jB4tKk.mjs → create-branch-CUNFdKyB.mjs} +2 -2
- package/dist/{create-DPggIXfn.mjs → create-jr4xJgSI.mjs} +4 -4
- package/dist/create-k1Bo7h7g.mjs +34 -0
- package/dist/{csv-DfExp9H_.mjs → csv-CcnhKpuj.mjs} +4 -4
- package/dist/{current-task-CbXIH_RA.mjs → current-task-nl2z8sHI.mjs} +3 -3
- package/dist/dashboard-BP0p62fp.mjs +35 -0
- package/dist/data-action-Cr17CfgE.mjs +24 -0
- package/dist/data-action-DZxVB_hD.mjs +85 -0
- package/dist/data-action-R9qxJDPA.mjs +40 -0
- package/dist/{database-BdKkae1m.mjs → database-2HYCdHqK.mjs} +1 -1
- package/dist/{database-DoNoZ8Yc.mjs → database-BewllGR7.mjs} +1 -1
- package/dist/{dataset-DZgJm5hP.mjs → dataset-D-x2Ho2i.mjs} +1 -1
- package/dist/{db-C82M3Gpg.mjs → db-m5bQcXdn.mjs} +7 -7
- package/dist/delete-BOma6qIq.mjs +44 -0
- package/dist/{delete-B4BfGfiJ.mjs → delete-BUCh72Bq.mjs} +4 -4
- package/dist/{delete-DJ7SNXiH.mjs → delete-BXMc-g3Q.mjs} +4 -4
- package/dist/{delete-D0xFMRRq.mjs → delete-BrbmJ3sn.mjs} +4 -4
- package/dist/{delete-9xHRd2CG.mjs → delete-DulVnxD_.mjs} +4 -4
- package/dist/delete-Oc2GE170.mjs +44 -0
- package/dist/{delete-hwPqKXeY.mjs → delete-QHsiWYay.mjs} +4 -4
- package/dist/{delete-runtime-DkgYUQ_n.mjs → delete-runtime-CkNvZfFA.mjs} +1 -1
- package/dist/{delete-table-DhTMft7u.mjs → delete-table-LgJ17t6j.mjs} +4 -4
- package/dist/{delete-hcw_4pBG.mjs → delete-xf2n7SNg.mjs} +4 -4
- package/dist/{dependencies-B8H2gA04.mjs → dependencies-BE5QW7Lb.mjs} +5 -5
- package/dist/{dependency-Dc33mjgd.mjs → dependency-BACk_cVP.mjs} +2 -2
- package/dist/dependency-BlTYysYG.mjs +15 -0
- package/dist/{dependency-tQBxYjFX.mjs → dependency-qP1hx2YN.mjs} +2 -2
- package/dist/{dependents-B2GcS5kB.mjs → dependents-mbgHQNiv.mjs} +9 -9
- package/dist/{dirty-Cz2rUd6S.mjs → dirty-fYlA1N1e.mjs} +3 -3
- package/dist/{discard-values-QWuWGaVK.mjs → discard-values-cIRBP5nT.mjs} +5 -5
- package/dist/document-BaRQ5fBd.mjs +20 -0
- package/dist/{document-wfWbV0B_.mjs → document-DVIu3Vj4.mjs} +1 -1
- package/dist/{document-BDobDiap.mjs → document-UMG6me2P.mjs} +1 -1
- package/dist/{download-Dw15fUMy.mjs → download-CokVpeK6.mjs} +2 -2
- package/dist/{eid-Ex4G-ZlN.mjs → eid-CaumGUFD.mjs} +5 -5
- package/dist/{eid-translation-zEHtr5Oc.mjs → eid-translation-Ba92VOHe.mjs} +1 -0
- package/dist/{entity-DBKPaMr5.mjs → entity-BHYJtRxp.mjs} +2 -2
- package/dist/{entry-flags-DgY3IXFe.mjs → entry-flags-DjICpQkc.mjs} +4 -4
- package/dist/{events-BibJ4ya0.mjs → events-jEo9fytL.mjs} +6 -6
- package/dist/execute-H09Qus4_.mjs +45 -0
- package/dist/{export-U8MdaatW.mjs → export-YtdZo7LZ.mjs} +5 -5
- package/dist/{export-flags-BrfeyE8D.mjs → export-flags-DzW0Ktkh.mjs} +3 -3
- package/dist/{export-preflight-A28L45au.mjs → export-preflight-Db_TChn5.mjs} +3 -3
- package/dist/field-DktidTPB.mjs +21 -0
- package/dist/{fields-i1TFa_th.mjs → fields-DUXlosmx.mjs} +4 -4
- package/dist/{filter-flags-Bm3vuSM-.mjs → filter-flags-DTDcU7OI.mjs} +5 -4
- package/dist/{fks-Dcfn3-73.mjs → fks-Cl2sq-c0.mjs} +5 -5
- package/dist/{get-HFQSttF3.mjs → get-B-WT6ess.mjs} +4 -4
- package/dist/{get-BKDTRMNU.mjs → get-BilMWiFq.mjs} +5 -5
- package/dist/{get-CobILQ_7.mjs → get-Bt_zhviQ.mjs} +5 -5
- package/dist/{get-BiPSePQc.mjs → get-CM596pmP.mjs} +3 -3
- package/dist/{get-DqYn9mez.mjs → get-CTtzccwr.mjs} +4 -4
- package/dist/{get-Dz3dNirC.mjs → get-CVMWhbA82.mjs} +4 -4
- package/dist/{get-B4_3DID6.mjs → get-CWyRAHpz.mjs} +5 -5
- package/dist/{get-DPZUIPjv.mjs → get-C_rjxpoe.mjs} +3 -3
- package/dist/{get-hAoJtVCK.mjs → get-Cg0up9gm.mjs} +3 -3
- package/dist/{get-IjoHBExI.mjs → get-CqlNUyFY.mjs} +5 -5
- package/dist/{get-CcwRn8Y2.mjs → get-DPiNYmXo.mjs} +5 -5
- package/dist/{get-EKBYludD.mjs → get-DTDvlLT3.mjs} +3 -3
- package/dist/{get-D0NZ0ZO1.mjs → get-DtcChy9h.mjs} +5 -5
- package/dist/{get-C3ojRVJ_.mjs → get-DyK_bvg6.mjs} +4 -4
- package/dist/{get-DUwX-RU82.mjs → get-DySyvotk2.mjs} +5 -5
- package/dist/{get-CCLWWqTD.mjs → get-FxCF0rxc.mjs} +4 -4
- package/dist/{get-CVpIQb8v.mjs → get-GuWW4J24.mjs} +5 -5
- package/dist/{get-Cwj1Q-at.mjs → get-XS-6R81E.mjs} +3 -3
- package/dist/{get-BCdtCwaG.mjs → get-oQNL6pLY.mjs} +3 -3
- package/dist/get-okEsnkvC.mjs +31 -0
- package/dist/{get-run-B2SnsZSY.mjs → get-run-CFGxSm_S.mjs} +4 -4
- package/dist/get-zPMv3kZE.mjs +32 -0
- package/dist/git-sync-BwkWeJAz.mjs +29 -0
- package/dist/glossary-BSgRQ2HO.mjs +14 -0
- package/dist/{glossary-wnuxoE_I.mjs → glossary-BkGmCI4X.mjs} +1 -1
- package/dist/{glossary-6LLpItof.mjs → glossary-QN-hHfOT.mjs} +1 -1
- package/dist/{graph-CHlfxVy1.mjs → graph-Wf4e0XIa.mjs} +6 -6
- package/dist/{group-B3X3LTcU.mjs → group-81zoQcEP.mjs} +1 -1
- package/dist/{has-remote-changes-DCMpqGgE.mjs → has-remote-changes-BsS3XB0P.mjs} +2 -2
- package/dist/{import-C7MZhKo6.mjs → import-CXd5HdB0.mjs} +5 -5
- package/dist/{input-sRdxNc3T.mjs → input-AXP2LCOV.mjs} +1 -1
- package/dist/{is-dirty-DpLyHebS.mjs → is-dirty-TDcfeOde.mjs} +2 -2
- package/dist/{items-1ME_eg27.mjs → items-BxvhoxYm.mjs} +6 -6
- package/dist/{key-DMtgTOwN.mjs → key-CUPbYxkk.mjs} +1 -1
- package/dist/{library-fWEv38OB.mjs → library-BKSFtIV9.mjs} +1 -1
- package/dist/{library-CP-9yepy.mjs → library-DuIrR8LS.mjs} +1 -1
- package/dist/{library-D2ogEIfI.mjs → library-DzejNMqX.mjs} +5 -5
- package/dist/{list-Ud7F0XdU.mjs → list-3Dh5yeq-.mjs} +3 -3
- package/dist/{list-dCi6OaIE.mjs → list-6nGX0Rqc.mjs} +4 -4
- package/dist/{list-DkCadZ2E.mjs → list-B3Pngm2j.mjs} +5 -5
- package/dist/{list-BUwDGyIu.mjs → list-B5kRBn7k.mjs} +5 -5
- package/dist/{list-DzP7YXdZ.mjs → list-B8V_OESj.mjs} +3 -3
- package/dist/{list-CQi3AgS5.mjs → list-BUjI5G0_.mjs} +4 -4
- package/dist/{list-LMlJ4uAY.mjs → list-Ba7u5Ai9.mjs} +6 -6
- package/dist/list-CCCy6cBI.mjs +35 -0
- package/dist/list-CRXTfEFk.mjs +28 -0
- package/dist/{list-BoVeF8QA.mjs → list-CUj04tg3.mjs} +6 -6
- package/dist/{list-C9996vbS.mjs → list-Cf6A9Csi.mjs} +3 -3
- package/dist/{list-NINy7ybI.mjs → list-Cr5Hoq-E.mjs} +4 -4
- package/dist/{list-BXcDPU5d.mjs → list-D1Q8H3jn.mjs} +6 -6
- package/dist/{list-CVh8DHOO.mjs → list-D7yH-64Z.mjs} +5 -5
- package/dist/{list-C1oEpUZG.mjs → list-DA1Fo6S6.mjs} +3 -3
- package/dist/{list-B0h-j1E7.mjs → list-D_fsrh8w.mjs} +5 -5
- package/dist/{list-DBAEy3Rx.mjs → list-DjlfBd7W.mjs} +3 -3
- package/dist/{list-OXiXtdiM.mjs → list-DlgjWr4r.mjs} +5 -5
- package/dist/{list-CJ5FyCnL.mjs → list-Do-Xnz0I.mjs} +4 -4
- package/dist/{list-STy8UHs2.mjs → list-DpK3ioES.mjs} +5 -5
- package/dist/{list-BUZ91ctZ.mjs → list-DsR58aMq.mjs} +5 -5
- package/dist/{login-BMON3Fft.mjs → login-CXbCAcuB.mjs} +6 -6
- package/dist/{logout-Cx934GzW.mjs → logout-B6IGzkpG.mjs} +2 -2
- package/dist/{measure-CUqJtDNm.mjs → measure-CbMgNhlG.mjs} +6 -6
- package/dist/{notification-CCZ9mrOw.mjs → notification-W2SVssyY.mjs} +1 -1
- package/dist/{parameter-values-DCrU02Az.mjs → parameter-values-IWi_DNhp.mjs} +3 -3
- package/dist/{parse-enum-Do5Cptbv.mjs → parse-enum-B2rGiC6p.mjs} +1 -1
- package/dist/{parse-id-oCbmouCn.mjs → parse-id-Cv5eM7sg.mjs} +1 -1
- package/dist/{parse-ref-Df8gusl4.mjs → parse-ref-DW7ik6ny.mjs} +1 -1
- package/dist/{parse-text-CVrP7GmZ.mjs → parse-text-CUCSWOeR.mjs} +1 -1
- package/dist/{path-DTuSDGd6.mjs → path-C9r9urRK.mjs} +4 -4
- package/dist/{poll-BKo5dK0l.mjs → poll-CX3jPtXb.mjs} +2 -2
- package/dist/{preflight-UeYuGDPr.mjs → preflight-CiTgqNUy.mjs} +2 -2
- package/dist/{process-BpmZXbcw.mjs → process-DImdroix.mjs} +1 -1
- package/dist/{publish-D3GwLC-K.mjs → publish-xH1n74gd.mjs} +4 -4
- package/dist/{pulse-DzVPfb5J.mjs → pulse-CFj1WfIC.mjs} +1 -1
- package/dist/query-BKtMP5eH.mjs +13 -0
- package/dist/{query-B1Cp9EO6.mjs → query-BOCw0FBK.mjs} +6 -6
- package/dist/{query-Ct697cY-.mjs → query-CN3BW5WB.mjs} +11 -10
- package/dist/{remapping-RsoPWE7c.mjs → remapping-Dggq2Fv0.mjs} +4 -4
- package/dist/{remove-collection-BJo3Wd9K.mjs → remove-collection-cxSSFxza.mjs} +3 -3
- package/dist/{render-C_ev6qoW.mjs → render-Cb8Hct67.mjs} +2 -2
- package/dist/{replace-BSAGp3cR.mjs → replace-wVi_XDut.mjs} +4 -4
- package/dist/{requirement-check-T3bjQ0Mr.mjs → requirement-check-BE3PuGsC.mjs} +2 -2
- package/dist/{rescan-values-CE62_2dc.mjs → rescan-values-C7b1Ghy-.mjs} +4 -4
- package/dist/{rescan-values-rpro4Kw2.mjs → rescan-values-DAp_avxY.mjs} +5 -5
- package/dist/{run-B3BRodEp.mjs → run-CE6ei7s7.mjs} +4 -4
- package/dist/{run-BI1QO9Kn.mjs → run-CUGs7mok.mjs} +7 -7
- package/dist/run-DywhwjNG.mjs +63 -0
- package/dist/{runs-CUseZezf.mjs → runs--14jim_0.mjs} +5 -5
- package/dist/{runtime-C5Ha6Ou8.mjs → runtime-Ckns6TKK.mjs} +2 -2
- package/dist/{schema-tables-C7YkyRh0.mjs → schema-tables-CeW0kpA5.mjs} +5 -5
- package/dist/{schemas-Bj5sJ9uB.mjs → schemas-CHMD0HrY.mjs} +4 -4
- package/dist/{search-BAXg-EJw.mjs → search-CXRavT7G.mjs} +1 -0
- package/dist/{search-CB1A4HWx.mjs → search-DyC54bGf.mjs} +6 -6
- package/dist/{search-BsAwK7Rk.mjs → search-LmBQu1Jg.mjs} +5 -5
- package/dist/{segment-BEjaeLc5.mjs → segment-DeT_Yic6.mjs} +6 -6
- package/dist/{send-Dfh8d1gG.mjs → send-BWSJMrDL.mjs} +3 -3
- package/dist/{set-active-AyjKtBD-.mjs → set-active-C5cLG4_O.mjs} +4 -4
- package/dist/{set-DA8dKyzi.mjs → set-r2xiXrT_.mjs} +4 -4
- package/dist/{set-sensitivity-D0613dHA.mjs → set-sensitivity-BMLKazua.mjs} +4 -4
- package/dist/{setting-B-bxCkC0.mjs → setting-CDRusiqP.mjs} +4 -4
- package/dist/{setup-Bvvqlz9d.mjs → setup-BZaJVww3.mjs} +3 -3
- package/dist/{signal-Dm4N0Bcc.mjs → signal-4tpCIkqR.mjs} +1 -1
- package/dist/{skill-list-DkuCf0k4.mjs → skill-list-D2FhhYS3.mjs} +1 -1
- package/dist/{skills-DxrO7HUz.mjs → skills-9ihLaSmM.mjs} +3 -3
- package/dist/{skills-DlDCTGVE.mjs → skills-y2iVfW9k.mjs} +2 -2
- package/dist/snippet-Ce0o33Rj.mjs +19 -0
- package/dist/{stash-j9JPv3ns.mjs → stash-Dj-mnIa4.mjs} +4 -4
- package/dist/{status-DcbvbRc5.mjs → status-B2Xj_q8f.mjs} +3 -3
- package/dist/{status-DxNcrfnI.mjs → status-BtWz7Pzn.mjs} +4 -4
- package/dist/{subscription-CSR2t-xK.mjs → subscription-Dh--agqE.mjs} +6 -6
- package/dist/{subscriptions--0YvW40u.mjs → subscriptions-CJ8Jdp9A.mjs} +6 -6
- package/dist/{summary-Dslv78-r.mjs → summary-ccbkNDbC.mjs} +3 -3
- package/dist/{sync-schema-BSJiokQf.mjs → sync-schema-CewUOkmm.mjs} +6 -6
- package/dist/{sync-schema-Dgij5ICd.mjs → sync-schema-HwQectZd.mjs} +4 -4
- package/dist/{sync-task-a1zyF1Qb.mjs → sync-task-DEzhiaU9.mjs} +3 -2
- package/dist/{table-Uvu1roSx.mjs → table-CFZU-BRg.mjs} +1 -1
- package/dist/table-P9ovwcaB.mjs +26 -0
- package/dist/{table-selector-flags-B9OiA3Z1.mjs → table-selector-flags-p4jun7-v.mjs} +2 -2
- package/dist/{text-821Rn8M9.mjs → text-C2VwKF9D.mjs} +1 -1
- package/dist/{timeline-uDCmwGFT.mjs → timeline-BgWz8DYK.mjs} +1 -1
- package/dist/timeline-DLaBypse.mjs +21 -0
- package/dist/{timeline-CCSU2qOS.mjs → timeline-DcsCXNUt.mjs} +5 -1
- package/dist/{timeline-event-CSzx8EDP.mjs → timeline-event-xAAR6b-v.mjs} +6 -6
- package/dist/transform-10YE8j5K.mjs +28 -0
- package/dist/{transform-BKX6tl3i.mjs → transform-CWGJB8N_.mjs} +1 -1
- package/dist/{transform-job-AaMZRxAq.mjs → transform-job-BBZ5L46v.mjs} +1 -1
- package/dist/{transform-job-CCguL6LP.mjs → transform-job-ClX8e5iO.mjs} +2 -1
- package/dist/transform-job-D97AutnF.mjs +22 -0
- package/dist/{transform-tag-DHg7j15d.mjs → transform-tag-BXusFzMX.mjs} +5 -5
- package/dist/transform-test-Bexa_K89.mjs +173 -0
- package/dist/transform-test-C49ZTK7M.mjs +32 -0
- package/dist/transform-test-UsH1udc4.mjs +16 -0
- package/dist/{transforms-DwxPfMiG.mjs → transforms-CqV01bMM.mjs} +5 -5
- package/dist/transport-0qFZhEuP.mjs +416 -0
- package/dist/{tree-COFmA20J.mjs → tree-Td6rgyOa.mjs} +3 -3
- package/dist/{unpublish-BQClh4U7.mjs → unpublish-D4XTZsFW.mjs} +3 -3
- package/dist/{unreferenced-DKc0zZDl.mjs → unreferenced-cR-l4zXN.mjs} +6 -6
- package/dist/{update-myfBF5qV.mjs → update-BJL5975i.mjs} +6 -6
- package/dist/{update-BVMgrMy7.mjs → update-BqkqMOVN.mjs} +5 -5
- package/dist/{update-Bgy2amR0.mjs → update-C4iu-vQm.mjs} +6 -6
- package/dist/{update-C9HK3i8s.mjs → update-C7Wmom6x.mjs} +5 -5
- package/dist/{update-CMRWXoZ2.mjs → update-C7dZLbsf.mjs} +4 -4
- package/dist/{update-BBLbEPEP.mjs → update-C8xdeYI2.mjs} +4 -4
- package/dist/{update-B8jQTspb.mjs → update-CHB4kvz-.mjs} +8 -8
- package/dist/{update-BNwjjMk6.mjs → update-CND9At61.mjs} +5 -5
- package/dist/{update-Ca8LSZer.mjs → update-CpwWURTp.mjs} +5 -5
- package/dist/{update-B-wcIl8T.mjs → update-D-cTgmb0.mjs} +6 -6
- package/dist/{update-CPmPnEvm.mjs → update-DFK2iUSP.mjs} +6 -6
- package/dist/{update-CFfr1ZdL.mjs → update-DROjGe3Q.mjs} +4 -4
- package/dist/update-DZHgr6Gu.mjs +52 -0
- package/dist/{update-kM3TDlEp.mjs → update-Dk0E66Va.mjs} +7 -7
- package/dist/{update-DJwu8UT2.mjs → update-DqCZsbLh.mjs} +6 -6
- package/dist/{update-BVFfoopT.mjs → update-DrVc25R8.mjs} +5 -5
- package/dist/{update-MxvqmZ3z.mjs → update-Js0IiqCq.mjs} +5 -5
- package/dist/{update-Dwr3n7_n.mjs → update-dQeji6RA.mjs} +7 -7
- package/dist/{update-dashcard-C8QN2Qcu.mjs → update-dashcard-BmkfJ7t9.mjs} +4 -4
- package/dist/update-nGURR-y6.mjs +41 -0
- package/dist/{upgrade-BBOEVIRa.mjs → upgrade-B6V_1cUh.mjs} +4 -4
- package/dist/{upload-CxpXpjCf.mjs → upload-B6zBzMPW.mjs} +2 -2
- package/dist/{upload-CoBd4qBp.mjs → upload-CfYmBv51.mjs} +3 -3
- package/dist/upload-Dvjfz16M.mjs +13 -0
- package/dist/{uuid-DW30GY7B.mjs → uuid-B8ynbkqG.mjs} +2 -2
- package/dist/{validate-n85yMraN.mjs → validate-C7DGkwb-.mjs} +1 -1
- package/dist/{validate-query-BwXvFFYi.mjs → validate-query-CYUvRvVM.mjs} +7 -3
- package/dist/{values-B6eFE4K5.mjs → values-36bzf9cK.mjs} +3 -3
- package/dist/{verify-Dp8tUbP3.mjs → verify-BdW-GExk.mjs} +3 -3
- package/dist/{verify-BSq7x66g.mjs → verify-C4Tml4fD.mjs} +3 -3
- package/dist/{verify-DnU-wXIs.mjs → verify-Cs9e28YA.mjs} +3 -3
- package/dist/{wait-D6Tw4ZxO.mjs → wait-BV6JOdgi.mjs} +5 -5
- package/dist/{wait-flags-BRUzMI6S.mjs → wait-flags-DjyK03cm.mjs} +2 -2
- package/dist/{window-BqMFpWMh.mjs → window-CfK_j6m1.mjs} +1 -1
- package/package.json +1 -1
- package/skill-data/core/SKILL.md +11 -5
- package/skill-data/data-action/SKILL.md +125 -0
- package/skill-data/native-sql/SKILL.md +1 -1
- package/skill-data/transform/SKILL.md +63 -1
- package/skill-data/transform-test-plan/SKILL.md +82 -0
- package/skill-data/transform-test-plan/references/checklist.md +32 -0
- package/skill-data/transform-test-plan/references/checks.md +156 -0
- package/dist/card-Buc-X4Mh.mjs +0 -25
- package/dist/collection-D-sS0AFw.mjs +0 -21
- package/dist/dashboard-DH_soSQp.mjs +0 -35
- package/dist/dependency-CLznxtLE.mjs +0 -15
- package/dist/document-WhSEyI-3.mjs +0 -20
- package/dist/field-qF1KRJYB.mjs +0 -21
- package/dist/git-sync-BlgB_-8-.mjs +0 -29
- package/dist/glossary-BvVxqjxJ.mjs +0 -14
- package/dist/snippet-B7Kau5U8.mjs +0 -19
- package/dist/table-qjgz2eek.mjs +0 -26
- package/dist/timeline-CNkrY3e3.mjs +0 -21
- package/dist/transform-Y86R7_2F.mjs +0 -28
- package/dist/transform-job-Cg_1jzWI.mjs +0 -22
- package/dist/upload-fcim1xtK.mjs +0 -13
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { c as renderSummary, ct as
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
5
|
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
6
|
import { i as TransformTagUpdateInput, t as TransformTag } from "./transform-tag-CcElGp3C.mjs";
|
|
7
7
|
import { t as transformTagView } from "./transform-tag-Dmb4u3-Q.mjs";
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
|
+
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
|
+
import { o as DataActionUpdateInput, t as DataAction } from "./data-action-DZxVB_hD.mjs";
|
|
7
|
+
import { n as DATA_ACTION_DATASET_QUERY_LABELS, o as preflightMbql5Query, s as skipValidateFlag } from "./validate-query-CYUvRvVM.mjs";
|
|
8
|
+
import { n as dataActionView } from "./data-action-R9qxJDPA.mjs";
|
|
9
|
+
//#region src/commands/data-action/update.ts
|
|
10
|
+
var update_default = defineMetabaseCommand({
|
|
11
|
+
meta: {
|
|
12
|
+
name: "update",
|
|
13
|
+
description: "Update a data action by id"
|
|
14
|
+
},
|
|
15
|
+
details: "The JSON body carries only the fields to change. A new MBQL 5 `dataset_query` is checked against a bundled JSON Schema before sending; pass --skip-validate to bypass.",
|
|
16
|
+
skills: [{
|
|
17
|
+
skill: "data-action",
|
|
18
|
+
purpose: "the fields of a data action"
|
|
19
|
+
}],
|
|
20
|
+
requires: ["dataAction.update"],
|
|
21
|
+
args: {
|
|
22
|
+
...outputFlags,
|
|
23
|
+
...profileFlag,
|
|
24
|
+
...connectionFlags,
|
|
25
|
+
...bodyInputFlags,
|
|
26
|
+
...skipValidateFlag,
|
|
27
|
+
id: {
|
|
28
|
+
type: "positional",
|
|
29
|
+
description: "Data action id",
|
|
30
|
+
required: true
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
inputSchema: DataActionUpdateInput,
|
|
34
|
+
outputSchema: DataAction,
|
|
35
|
+
examples: [
|
|
36
|
+
"cat patch.json | mb data-action update 1",
|
|
37
|
+
"mb data-action update 1 --file patch.json",
|
|
38
|
+
"mb data-action update 1 --body '{\"name\":\"Rename an order\"}'"
|
|
39
|
+
],
|
|
40
|
+
async run({ args, ctx, getClient }) {
|
|
41
|
+
const id = parseId(args.id);
|
|
42
|
+
const body = await readBody({
|
|
43
|
+
flag: args.body,
|
|
44
|
+
file: args.file
|
|
45
|
+
}, DataActionUpdateInput);
|
|
46
|
+
if (body.dataset_query !== void 0) preflightMbql5Query(body.dataset_query, DATA_ACTION_DATASET_QUERY_LABELS, { skip: args["skip-validate"] === true });
|
|
47
|
+
const updated = await (await getClient()).dataAction.update(id, body);
|
|
48
|
+
renderSummary(updated, dataActionView, `Updated data action ${updated.id} "${updated.name}".`, ctx);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
//#endregion
|
|
52
|
+
export { update_default as default };
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { c as renderSummary, ct as
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
5
|
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
|
-
import { c as CardUpdateInput, t as Card } from "./card-
|
|
7
|
-
import { n as cardView } from "./card-
|
|
8
|
-
import {
|
|
6
|
+
import { c as CardUpdateInput, t as Card } from "./card-P5mBknsl.mjs";
|
|
7
|
+
import { n as cardView } from "./card-CQNUT9pm.mjs";
|
|
8
|
+
import { o as preflightMbql5Query, s as skipValidateFlag, t as CARD_DATASET_QUERY_LABELS } from "./validate-query-CYUvRvVM.mjs";
|
|
9
9
|
//#region src/commands/card/update.ts
|
|
10
10
|
var update_default = defineMetabaseCommand({
|
|
11
11
|
meta: {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { c as renderSummary, ct as
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
5
|
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
|
-
import { o as TransformJobUpdateInput, t as TransformJob } from "./transform-job-
|
|
7
|
-
import { t as transformJobView } from "./transform-job-
|
|
6
|
+
import { o as TransformJobUpdateInput, t as TransformJob } from "./transform-job-ClX8e5iO.mjs";
|
|
7
|
+
import { t as transformJobView } from "./transform-job-BBZ5L46v.mjs";
|
|
8
8
|
//#region src/commands/transform-job/update.ts
|
|
9
9
|
var update_default = defineMetabaseCommand({
|
|
10
10
|
meta: {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { c as renderSummary, ct as
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
5
|
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
6
|
import { i as SegmentUpdateInput, t as Segment } from "./segment-OsrbUDzw.mjs";
|
|
7
|
-
import {
|
|
7
|
+
import { i as SEGMENT_DEFINITION_LABELS, o as preflightMbql5Query, s as skipValidateFlag } from "./validate-query-CYUvRvVM.mjs";
|
|
8
8
|
import { t as segmentView } from "./segment-C_gl5ag6.mjs";
|
|
9
9
|
//#region src/commands/segment/update.ts
|
|
10
10
|
var update_default = defineMetabaseCommand({
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { c as renderSummary, ct as
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
5
|
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
6
|
import { t as Table, y as TableUpdateInput } from "./table-zAdW5_3H.mjs";
|
|
7
|
-
import { u as tableView } from "./table-
|
|
7
|
+
import { u as tableView } from "./table-CFZU-BRg.mjs";
|
|
8
8
|
//#region src/commands/table/update.ts
|
|
9
9
|
var update_default = defineMetabaseCommand({
|
|
10
10
|
meta: {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { c as renderSummary, ct as
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
5
|
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
6
|
import { f as TransformUpdateInput, t as Transform } from "./transform-DiW7bREn.mjs";
|
|
7
|
-
import { a as
|
|
8
|
-
import { n as transformView } from "./transform-
|
|
9
|
-
import { t as enrichTransformCollectionError } from "./collection-namespace-
|
|
7
|
+
import { a as TRANSFORM_SOURCE_QUERY_LABELS, o as preflightMbql5Query, s as skipValidateFlag } from "./validate-query-CYUvRvVM.mjs";
|
|
8
|
+
import { n as transformView } from "./transform-CWGJB8N_.mjs";
|
|
9
|
+
import { t as enrichTransformCollectionError } from "./collection-namespace-B1OkM7p1.mjs";
|
|
10
10
|
//#region src/commands/transform/update.ts
|
|
11
11
|
var update_default = defineMetabaseCommand({
|
|
12
12
|
meta: {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { c as renderSummary, ct as
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
5
|
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
6
|
import { d as DashcardPatchInput, l as Dashcard } from "./dashboard-Phz3XpRM.mjs";
|
|
7
7
|
import { r as dashcardView } from "./dashboard-XSTr9QCr.mjs";
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
|
+
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
|
+
import { a as TransformTestUpdateInput, t as TransformTest } from "./transform-test-Bexa_K89.mjs";
|
|
7
|
+
import { n as transformTestView } from "./transform-test-C49ZTK7M.mjs";
|
|
8
|
+
//#region src/commands/transform-test/update.ts
|
|
9
|
+
var update_default = defineMetabaseCommand({
|
|
10
|
+
meta: {
|
|
11
|
+
name: "update",
|
|
12
|
+
description: "Update a transform test from JSON"
|
|
13
|
+
},
|
|
14
|
+
details: "Only the fields the body carries are patched. `inputs` and `expectations` replace what is stored rather than merging into it. The body is closed at every level: a test read back with `get --full` has to shed `id`, `entity_id`, `creator_id`, `created_at` and `updated_at` before it can be sent.",
|
|
15
|
+
requires: ["transformTest.update"],
|
|
16
|
+
args: {
|
|
17
|
+
...outputFlags,
|
|
18
|
+
...profileFlag,
|
|
19
|
+
...connectionFlags,
|
|
20
|
+
...bodyInputFlags,
|
|
21
|
+
id: {
|
|
22
|
+
type: "positional",
|
|
23
|
+
description: "Transform test id",
|
|
24
|
+
required: true
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
inputSchema: TransformTestUpdateInput,
|
|
28
|
+
outputSchema: TransformTest,
|
|
29
|
+
examples: ["cat patch.json | mb transform-test update 1", "mb transform-test update 1 --file patch.json"],
|
|
30
|
+
async run({ args, ctx, getClient }) {
|
|
31
|
+
const id = parseId(args.id);
|
|
32
|
+
const body = await readBody({
|
|
33
|
+
flag: args.body,
|
|
34
|
+
file: args.file
|
|
35
|
+
}, TransformTestUpdateInput);
|
|
36
|
+
const updated = await (await getClient()).transformTest.update(id, body);
|
|
37
|
+
renderSummary(updated, transformTestView, `Updated transform test ${updated.id}.`, ctx);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
//#endregion
|
|
41
|
+
export { update_default as default };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { T as USER_AGENT, t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { n as throwIfAborted, t as combineAborts } from "./signal-
|
|
4
|
-
import { n as streamProcess } from "./process-
|
|
1
|
+
import { Ct as NetworkError, Dt as UnknownError, Et as TimeoutError, W as HttpError, Z as parseJson, _ as promptConfirm, a as renderItem, ct as outputFlags, f as writeText, kt as errorMessage, nt as version, t as interruptSignal, tt as name, vt as AbortError } from "./cli.mjs";
|
|
2
|
+
import { T as USER_AGENT, t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { n as throwIfAborted, t as combineAborts } from "./signal-4tpCIkqR.mjs";
|
|
4
|
+
import { n as streamProcess } from "./process-DImdroix.mjs";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { realpathSync } from "node:fs";
|
|
7
7
|
import { compare, valid } from "semver";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as fileNotFoundError } from "./input-
|
|
1
|
+
import { jt as isFileNotFoundError, yt as ConfigError } from "./cli.mjs";
|
|
2
|
+
import { n as fileNotFoundError } from "./input-AXP2LCOV.mjs";
|
|
3
3
|
import { basename } from "node:path";
|
|
4
4
|
import { readFile } from "node:fs/promises";
|
|
5
5
|
//#region src/runtime/upload.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { c as renderSummary, ct as
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
3
|
import { t as ContentTranslationUploadResult } from "./content-translation-BrHOrmj9.mjs";
|
|
4
|
-
import { n as requireUploadFilePath, t as readCsvFile } from "./upload-
|
|
4
|
+
import { n as requireUploadFilePath, t as readCsvFile } from "./upload-B6zBzMPW.mjs";
|
|
5
5
|
//#region src/output/views/content-translation.ts
|
|
6
6
|
const contentTranslationUploadView = {
|
|
7
7
|
compactPick: ContentTranslationUploadResult,
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { t as defineCommandGroup } from "./group-81zoQcEP.mjs";
|
|
2
|
+
//#region src/commands/upload/index.ts
|
|
3
|
+
var upload_default = defineCommandGroup({
|
|
4
|
+
name: "upload",
|
|
5
|
+
description: "Upload CSV files into Metabase",
|
|
6
|
+
subCommands: {
|
|
7
|
+
csv: () => import("./csv-CcnhKpuj.mjs").then((m) => m.default),
|
|
8
|
+
append: () => import("./append-D4ekYCuD.mjs").then((m) => m.default),
|
|
9
|
+
replace: () => import("./replace-wVi_XDut.mjs").then((m) => m.default)
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
//#endregion
|
|
13
|
+
export { upload_default as default };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Q as parseInteger, t as defineMetabaseCommand } from "./runtime-
|
|
1
|
+
import { ct as outputFlags, d as writeJson, f as writeText, yt as ConfigError } from "./cli.mjs";
|
|
2
|
+
import { Q as parseInteger, t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
5
5
|
//#region src/commands/uuid.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Pt as escapeJsonPointerSegment, Y as isPlainObject, yt as ConfigError } from "./cli.mjs";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import Ajv2020 from "ajv/dist/2020.js";
|
|
4
4
|
import addFormats from "ajv-formats";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as validateQuery, i as isMbql5Query, n as assertNotLegacyEnvelopeWrappingMbql5 } from "./validate-
|
|
1
|
+
import { d as writeJson, yt as ConfigError } from "./cli.mjs";
|
|
2
|
+
import { a as validateQuery, i as isMbql5Query, n as assertNotLegacyEnvelopeWrappingMbql5 } from "./validate-C7DGkwb-.mjs";
|
|
3
3
|
//#region src/commands/validate-query.ts
|
|
4
4
|
const skipValidateFlag = { "skip-validate": {
|
|
5
5
|
type: "boolean",
|
|
@@ -9,6 +9,10 @@ const CARD_DATASET_QUERY_LABELS = {
|
|
|
9
9
|
contextLabel: "card.dataset_query validation failed",
|
|
10
10
|
bodyNoun: "dataset_query"
|
|
11
11
|
};
|
|
12
|
+
const DATA_ACTION_DATASET_QUERY_LABELS = {
|
|
13
|
+
contextLabel: "dataAction.dataset_query validation failed",
|
|
14
|
+
bodyNoun: "dataset_query"
|
|
15
|
+
};
|
|
12
16
|
const TRANSFORM_SOURCE_QUERY_LABELS = {
|
|
13
17
|
contextLabel: "transform.source.query validation failed",
|
|
14
18
|
bodyNoun: "source.query"
|
|
@@ -31,4 +35,4 @@ function preflightMbql5Query(query, labels, options) {
|
|
|
31
35
|
throw new ConfigError(`${labels.contextLabel}: ${outcome.errors.length} error(s) — fix them, or pass --skip-validate to send anyway`);
|
|
32
36
|
}
|
|
33
37
|
//#endregion
|
|
34
|
-
export {
|
|
38
|
+
export { TRANSFORM_SOURCE_QUERY_LABELS as a, SEGMENT_DEFINITION_LABELS as i, DATA_ACTION_DATASET_QUERY_LABELS as n, preflightMbql5Query as o, MEASURE_DEFINITION_LABELS as r, skipValidateFlag as s, CARD_DATASET_QUERY_LABELS as t };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as renderSummary, ct as
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, m as formatScalar, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
4
|
import { u as FieldValues } from "./field-5nivEfd6.mjs";
|
|
5
5
|
import { s as fieldValuesView } from "./field-wmN6raOG.mjs";
|
|
6
6
|
//#region src/commands/field/values.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as renderSummary, ct as
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
4
|
import { t as ModerationReview } from "./moderation-review-BdqEH6N1.mjs";
|
|
5
5
|
import { i as moderationReviewView, n as verifyFlags, r as describeReview, t as reviewInput } from "./verify-flags-CMpRkMPa.mjs";
|
|
6
6
|
//#region src/commands/dashboard/verify.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as renderSummary, ct as
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
4
|
import { t as ModerationReview } from "./moderation-review-BdqEH6N1.mjs";
|
|
5
5
|
import { i as moderationReviewView, n as verifyFlags, r as describeReview, t as reviewInput } from "./verify-flags-CMpRkMPa.mjs";
|
|
6
6
|
//#region src/commands/card/verify.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as createClient } from "./client-
|
|
2
|
-
import {
|
|
3
|
-
import { I as probeServer, T as USER_AGENT } from "./runtime-
|
|
1
|
+
import { n as createClient } from "./client-BBwYPXDW.mjs";
|
|
2
|
+
import { Ct as NetworkError, Et as TimeoutError, St as MetabaseError, W as HttpError, kt as errorMessage } from "./cli.mjs";
|
|
3
|
+
import { I as probeServer, T as USER_AGENT } from "./runtime-Ckns6TKK.mjs";
|
|
4
4
|
//#region src/core/auth/verify.ts
|
|
5
5
|
const VERIFY_TIMEOUT_MS = 15e3;
|
|
6
6
|
async function verifyAndProbe(url, credential, options = {}) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { c as renderSummary, ct as
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { n as DEFAULT_TIMEOUT_MS, t as DEFAULT_INTERVAL_MS } from "./poll-
|
|
4
|
-
import { r as parseWaitSchedule } from "./wait-flags-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { n as DEFAULT_TIMEOUT_MS, t as DEFAULT_INTERVAL_MS } from "./poll-CX3jPtXb.mjs";
|
|
4
|
+
import { r as parseWaitSchedule } from "./wait-flags-DjyK03cm.mjs";
|
|
5
5
|
import { u as syncTaskView } from "./git-sync-Ch1V1fEK.mjs";
|
|
6
|
-
import { a as throwIfFailedTask, i as taskPollOptions, n as formatSyncTask, r as syncTaskIdleView, t as SyncTaskOrIdle } from "./sync-task-
|
|
6
|
+
import { a as throwIfFailedTask, i as taskPollOptions, n as formatSyncTask, r as syncTaskIdleView, t as SyncTaskOrIdle } from "./sync-task-DEzhiaU9.mjs";
|
|
7
7
|
//#region src/commands/git-sync/wait.ts
|
|
8
8
|
const WaitResult = SyncTaskOrIdle;
|
|
9
9
|
var wait_default = defineMetabaseCommand({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as interruptSignal } from "./cli.mjs";
|
|
2
|
-
import { t as parseId } from "./parse-id-
|
|
3
|
-
import { n as DEFAULT_TIMEOUT_MS, t as DEFAULT_INTERVAL_MS } from "./poll-
|
|
2
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
3
|
+
import { n as DEFAULT_TIMEOUT_MS, t as DEFAULT_INTERVAL_MS } from "./poll-CX3jPtXb.mjs";
|
|
4
4
|
//#region src/commands/wait-flags.ts
|
|
5
5
|
const waitScheduleFlags = {
|
|
6
6
|
timeout: {
|
package/package.json
CHANGED
package/skill-data/core/SKILL.md
CHANGED
|
@@ -12,8 +12,8 @@ Top-level command groups (run `mb <group> --help` to discover verbs):
|
|
|
12
12
|
|
|
13
13
|
```
|
|
14
14
|
auth | db | table | field | upload | content-translation | query | card | dashboard | snippet | segment | measure | collection | library
|
|
15
|
-
document | glossary | timeline | timeline-event | transform | transform-job | transform-tag | alert | subscription | setting
|
|
16
|
-
search | dependency | git-sync | setup | eid | uuid | upgrade | skills
|
|
15
|
+
document | glossary | timeline | timeline-event | transform | transform-job | transform-tag | transform-test | alert | subscription | setting
|
|
16
|
+
search | dependency | git-sync | data-action | setup | eid | uuid | upgrade | skills
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
The conventions below — auth, flags, output, body input — hold across **every** group. Per-command flags and examples live in each command's `--help`; add `--json` for the machine-readable form with the output JSON Schema. A few flows have their own skills (see "Specialized skills"). When a card needs a query, prefer MBQL over native SQL (portable, pre-flight-validated — load `mbql`); fall back to native SQL when MBQL can't express it.
|
|
@@ -124,7 +124,7 @@ mb transform --help --json | jq -r '.commands[].command' # verbs under "transfo
|
|
|
124
124
|
|
|
125
125
|
## Resource quirks worth memorizing
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
What `--help` doesn't say: footguns and non-obvious behaviors.
|
|
128
128
|
|
|
129
129
|
- **db traversal: the hydration ladder.** Start with `database get <db-id> --include tables` — the compact table map (id, name, schema, description per table), one call that fits most databases. Pick the relevant tables, then `table fields <table-id>` per table (bounded: fields are per-table). `--include tables.fields` is the full rollup — small databases only. Hundreds of tables? Traverse by schema (`database schemas <db-id>` → `database schema-tables <db-id> <schema>`) or look tables up by name (`search <term> --models table --db-id <db-id> --limit 10`). `db sync-schema` / `rescan-values` queue async work and return `{status:"ok"}` at once; `sync-schema --wait` blocks until `initial_sync_status: complete`.
|
|
130
130
|
- **table fields.** `table get` never returns fields on its own — pass `--include fields` (compact; the underlying query_metadata response also carries FK targets and dimensions, visible under `--full`) or use `table fields <id>` (list envelope). `table update` patches table-level metadata only; physical columns aren't editable.
|
|
@@ -134,7 +134,7 @@ Routine verb shapes (list / get / create / update), every flag, and output schem
|
|
|
134
134
|
- **content-translation.** Admin-only, and separate from Remote Sync. `content-translation download > translations.csv` streams the complete active dictionary; `content-translation upload --file translations.csv` replaces every active translation with the file's contents. Always upload the canonical complete CSV, never a partial patch. An empty dictionary downloads as Metabase's four-row sample dictionary — don't re-upload it as real translations. Metabase limits dictionaries to 1.5 MiB.
|
|
135
135
|
<!-- /requires -->
|
|
136
136
|
- **card.** `dataset_query` is the `mbql/query` object itself (→ `mbql`). `--export-format csv|xlsx` streams the raw export (pipe to a file), bypassing the JSON envelope. `archive` is the only delete; unarchive with `update --body '{"archived":false}'`. `visualization_settings` keys are scoped by `display` and aren't pre-flighted — see `visualization`.
|
|
137
|
-
- **dashboard.** Dashcards round-trip through `PUT /api/dashboard/:id` (no per-dashcard endpoint): `update-dashcard <dash-id> <dashcard-id>` patches one safely; `update --body '{"dashcards":[…]}'` replaces the whole set (omitted ids are deleted server-side; negative ids for new cards). Every dashcard
|
|
137
|
+
- **dashboard.** Dashcards round-trip through `PUT /api/dashboard/:id` (no per-dashcard endpoint): `update-dashcard <dash-id> <dashcard-id>` patches one safely; `update --body '{"dashcards":[…]}'` replaces the whole set (omitted ids are deleted server-side; negative ids for new cards). Every dashcard, existing ones included, needs `card_id`; use `card_id:null` plus a `visualization_settings.virtual_card` block (`{display:"text"|"heading"|"link"|…}`) for non-question cards. `create` takes the **same** `dashcards` array, so lay out the whole dashboard in one call. `create`/`update` pre-flight every positive `card_id` and exit **2** with `{ok:false,errors:[…]}` on a bad ref (non-bypassable). `dashboard get <id>` (or `--full`) hydrates dashcards/tabs; `list` omits them. **The grid is 24 columns wide:** each dashcard's `{col, row, size_x, size_y}` is in grid units — **full-width is `size_x: 24`**. Keep `col + size_x ≤ 24`, start a full-width stack's `col` at 0, and don't overlap (the server stores collisions as sent). Load the `dashboard` skill (layout patterns, per-chart default sizes) before composing any `dashcards` array.
|
|
138
138
|
- **dashboard parameters (filters).** A dashboard's `parameters` array holds its filter widgets; they're part of the dashboard record, so read them with `dashboard get <id> --fields parameters --json` (no separate verb). **Editing replaces the _whole_ array** (like dashcards), so it's a read-modify-write loop and omitting a parameter deletes it. A parameter only filters a card once it is **mapped** onto that dashcard's `parameter_mappings` — an unmapped parameter is an inert widget. `type` is a **closed enum**; an unlisted value is a hard parse error that echoes the full allowed set back to you. `dashboard parameter-values <id> <parameter-id> [--query <substr>]` fetches a widget's selectable values (`{values, has_more_values}`; `--query` is a case-insensitive substring search). Parameter types, ids, mapping targets, and value sources → the `dashboard` skill; load it before authoring a `parameters` array.
|
|
139
139
|
<!-- requires: contentVerification -->
|
|
140
140
|
- **verify.** `card verify <id>` / `dashboard verify <id>` (admins only) mark it verified (rank boost, `search --verified`). `--remove` (or a card query edit) withdraws it; `--text` adds a note; `get <id> --fields moderation_reviews` reads it. Verify only what you checked and the user approved.
|
|
@@ -174,9 +174,15 @@ This file is enough for any single-command task. For anything deeper, load the r
|
|
|
174
174
|
- **`notification`** — scheduled delivery: question alerts (`mb alert`) and dashboard subscriptions (`mb subscription`). Choosing between them, the two schedule/recipient contracts, channel prerequisites, testing a send.
|
|
175
175
|
<!-- requires: transforms -->
|
|
176
176
|
- **`transform`** — transform body JSON, create + run-with-wait, run inspection, tags, jobs.
|
|
177
|
+
<!-- /requires -->
|
|
178
|
+
<!-- requires: transformTests -->
|
|
179
|
+
- **`transform-test-plan`** — planning transform tests.
|
|
177
180
|
<!-- /requires -->
|
|
178
181
|
- **`document`** — Metabase documents (TipTap body, embedding cards).
|
|
179
|
-
<!-- requires:
|
|
182
|
+
<!-- requires: dataActionsWithoutModel -->
|
|
183
|
+
- **`data-action`** — saved SQL writes: enabling, body, parameters, running.
|
|
184
|
+
<!-- /requires -->
|
|
185
|
+
<!-- requires: remoteSync -->
|
|
180
186
|
- **`git-sync`** — round-tripping content to/from a git remote.
|
|
181
187
|
<!-- /requires -->
|
|
182
188
|
- **`data-workflow`** — the guided, end-to-end data workflow: investigate raw data, build clean analysis-ready tables, define reusable segments/measures/metrics, answer questions, build dashboards. **Start here when the user states a goal rather than a single verb** — "make sense of my data", "build a data model", "be my data analyst". It detects where the data is and routes to the right stage.
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: data-action
|
|
3
|
+
description: Author and run Metabase data actions with the `mb` CLI — saved, parameterized native SQL writes (INSERT, UPDATE, DELETE) filed in a collection and run with values. Covers enabling them on a database, the body, mapping template tags to parameters, running, and the lifecycle. Triggers — "add a data action", "let users update a row", "a button that inserts a record", "run a write query", "a form that saves to the database", "delete rows from Metabase".
|
|
4
|
+
allowed-tools: Read, Write, Edit, Bash, AskUserQuestion
|
|
5
|
+
requires: [dataActionsWithoutModel]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Data actions
|
|
9
|
+
|
|
10
|
+
A **data action** is one native SQL statement that writes — `INSERT`, `UPDATE` or `DELETE` — with named inputs. It lives in a collection, and dashboards, apps and `mb data-action execute` run it with values.
|
|
11
|
+
|
|
12
|
+
Flag conventions and `./.scratch` are in `core`; the native query and its template tags follow `native-sql`. This skill covers what a data action adds.
|
|
13
|
+
|
|
14
|
+
## Check the database first
|
|
15
|
+
|
|
16
|
+
Data actions are off on every database until an admin turns on **Model actions** for it (Admin → Databases → the database). `mb` cannot change that setting.
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
mb db get <id> --full --json
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
- `features` must contain `"actions"` — otherwise the driver cannot run writes; pick another database.
|
|
23
|
+
- `settings["database-enable-actions"]` must be `true`. If it is not, ask the user to have an admin enable it. Create and execute fail with `Actions are not enabled.` until then.
|
|
24
|
+
|
|
25
|
+
## The body
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"name": "Set order note",
|
|
30
|
+
"type": "query",
|
|
31
|
+
"database_id": 1,
|
|
32
|
+
"collection_id": 12,
|
|
33
|
+
"dataset_query": {
|
|
34
|
+
"lib/type": "mbql/query",
|
|
35
|
+
"database": 1,
|
|
36
|
+
"stages": [
|
|
37
|
+
{
|
|
38
|
+
"lib/type": "mbql.stage/native",
|
|
39
|
+
"native": "UPDATE orders SET note = {{note}} WHERE id = {{order_id}}",
|
|
40
|
+
"template-tags": {
|
|
41
|
+
"order_id": {
|
|
42
|
+
"id": "order_id",
|
|
43
|
+
"name": "order_id",
|
|
44
|
+
"display-name": "Order ID",
|
|
45
|
+
"type": "number",
|
|
46
|
+
"required": true
|
|
47
|
+
},
|
|
48
|
+
"note": {
|
|
49
|
+
"id": "note",
|
|
50
|
+
"name": "note",
|
|
51
|
+
"display-name": "Note",
|
|
52
|
+
"type": "text",
|
|
53
|
+
"required": true
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
"parameters": [
|
|
60
|
+
{
|
|
61
|
+
"id": "order_id",
|
|
62
|
+
"slug": "order_id",
|
|
63
|
+
"name": "Order ID",
|
|
64
|
+
"type": "number/=",
|
|
65
|
+
"target": ["variable", ["template-tag", "order_id"]],
|
|
66
|
+
"required": true
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": "note",
|
|
70
|
+
"slug": "note",
|
|
71
|
+
"name": "Note",
|
|
72
|
+
"type": "string/=",
|
|
73
|
+
"target": ["variable", ["template-tag", "note"]],
|
|
74
|
+
"required": true
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
- `type` is always `"query"`. Never set `model_id` or `type: "implicit"`; `mb data-action create` refuses both.
|
|
81
|
+
- `database_id` and `dataset_query.database` are the same id (`mb db list`). Omit `collection_id` for the root collection (`mb collection list`).
|
|
82
|
+
- One statement, no `;`. `create` and `update` validate `dataset_query` as `native-sql` does.
|
|
83
|
+
|
|
84
|
+
## Parameters: one per template tag
|
|
85
|
+
|
|
86
|
+
Each `{{name}}` needs a `template-tags` entry and a `parameters` entry, all using the same name:
|
|
87
|
+
|
|
88
|
+
| Tag `type` | Parameter `type` |
|
|
89
|
+
| ---------- | ---------------- |
|
|
90
|
+
| `number` | `number/=` |
|
|
91
|
+
| `text` | `string/=` |
|
|
92
|
+
| `date` | `date/single` |
|
|
93
|
+
| `boolean` | `boolean/=` |
|
|
94
|
+
|
|
95
|
+
- Parameter `id` and `slug` are the tag name; `target` is `["variable", ["template-tag", "<name>"]]`.
|
|
96
|
+
- Use raw variables only. A field filter (`type: "dimension"`), snippet or card reference does not work in a write — write the comparison yourself (`WHERE id = {{order_id}}`).
|
|
97
|
+
- Set `required: true` on every input the statement cannot run without (`WHERE` keys, `NOT NULL` columns).
|
|
98
|
+
- Wrap an optional input in `[[ … ]]` with `required: false`; the clause drops out when no value is given. This makes one action do partial updates: `UPDATE orders SET updated_at = now() [[, note = {{note}}]] [[, status = {{status}}]] WHERE id = {{order_id}}`.
|
|
99
|
+
|
|
100
|
+
## Run it
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
mb data-action execute <id> --body '{"parameters":{"order_id":1042,"note":"rush delivery"}}'
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
`parameters` is keyed by parameter `id`. The result is `{"rows-affected": <n>}`. A missing required value is refused. A run cannot be undone, so confirm with the user before running against data that matters, and test a new action on a row created for the purpose.
|
|
107
|
+
|
|
108
|
+
## Lifecycle
|
|
109
|
+
|
|
110
|
+
| Task | Command |
|
|
111
|
+
| ------------------------ | ---------------------------------------------------------------------------------------- |
|
|
112
|
+
| Find | `mb data-action list` (unarchived only), `mb search --models action <text>` |
|
|
113
|
+
| Inspect | `mb data-action get <id> --full --json` |
|
|
114
|
+
| Change SQL, inputs, name | `mb data-action update <id> --file patch.json` (changed fields only) |
|
|
115
|
+
| Move | `mb data-action update <id> --body '{"collection_id":<id>}'` |
|
|
116
|
+
| Archive / restore | `mb data-action archive <id>` / `mb data-action update <id> --body '{"archived":false}'` |
|
|
117
|
+
| Delete | `mb data-action delete <id> --yes` (also removes the dashboard buttons that run it) |
|
|
118
|
+
|
|
119
|
+
Archiving or deleting a collection archives or deletes its data actions. Existing model-bound or implicit data actions still list, run and archive; leave them as they are.
|
|
120
|
+
|
|
121
|
+
## Don't
|
|
122
|
+
|
|
123
|
+
- Don't create a model for a data action.
|
|
124
|
+
- Don't concatenate values into the SQL; every value goes through a template tag.
|
|
125
|
+
- Don't run a data action on production data without the user's go-ahead.
|
|
@@ -112,6 +112,6 @@ mb card query 12 --parameters '[{"type":"string/=","target":["dimension",["templ
|
|
|
112
112
|
|
|
113
113
|
- Don't wrap a field filter in an operator (`WHERE col = {{ff}}`) — write it bare (`WHERE {{ff}}`).
|
|
114
114
|
- Don't author the flat `{type:"native", …}` form — send the native stage above.
|
|
115
|
-
- Don't use native SQL for DDL or multiple statements — the editor is read-only, single-statement; `CREATE`/`UPDATE`/`;`-chained SQL is unsupported. To materialize a table, use a `transform
|
|
115
|
+
- Don't use native SQL for DDL or multiple statements — the editor is read-only, single-statement; `CREATE`/`UPDATE`/`;`-chained SQL is unsupported. To materialize a table, use a `transform`; to write rows (`INSERT`/`UPDATE`/`DELETE`), use a data action (`data-action`).
|
|
116
116
|
- Don't expect `[[ ]]` to save you from a case/type mismatch — `WHERE plan = {{p}}` returns zero rows on a case-sensitive engine if the value's case is off; that's a value problem, not syntax.
|
|
117
117
|
- Don't reach for native when a structured query fits — you lose the engine-independence and readability of an `mbql.stage/mbql` stage.
|