@datarecce/ui 0.1.40 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -133
- package/dist/AuthModal-C8LetZNB.js +23 -0
- package/dist/AuthModal-C8LetZNB.js.map +1 -0
- package/dist/LineageCanvas-CR38SDYr.d.ts +41 -0
- package/dist/LineageCanvas-CR38SDYr.d.ts.map +1 -0
- package/dist/ResultErrorFallback-C7c-TN1p.js +3 -0
- package/dist/ResultErrorFallback-C7c-TN1p.js.map +1 -0
- package/dist/RouteConfigContext-z8YNimdP.d.ts +172 -0
- package/dist/RouteConfigContext-z8YNimdP.d.ts.map +1 -0
- package/dist/RunProgress-DyFIALbI.d.ts +429 -0
- package/dist/RunProgress-DyFIALbI.d.ts.map +1 -0
- package/dist/ScreenshotDataGrid-BfxYUThx.d.ts +64 -0
- package/dist/ScreenshotDataGrid-BfxYUThx.d.ts.map +1 -0
- package/dist/SplitPane-B-BLxZaQ.d.ts +1427 -0
- package/dist/SplitPane-B-BLxZaQ.d.ts.map +1 -0
- package/dist/advanced.d.ts +18 -0
- package/dist/advanced.d.ts.map +1 -0
- package/dist/advanced.js +3 -0
- package/dist/advanced.js.map +1 -0
- package/dist/api-ZZ4cc9b9.d.ts +255 -0
- package/dist/api-ZZ4cc9b9.d.ts.map +1 -0
- package/dist/api-_i6BZPkM.js +3 -0
- package/dist/api-_i6BZPkM.js.map +1 -0
- package/dist/api.d.ts +3 -2
- package/dist/api.js +2 -100
- package/dist/colors--47Kkns4.js +3 -0
- package/dist/colors--47Kkns4.js.map +1 -0
- package/dist/colors-vY9Yzui0.d.ts +255 -0
- package/dist/colors-vY9Yzui0.d.ts.map +1 -0
- package/dist/components-run.d.ts +8 -0
- package/dist/components-run.js +2 -0
- package/dist/components.d.ts +22 -2
- package/dist/components.js +2 -86
- package/dist/const-DbXBkrxT.js +3 -0
- package/dist/const-DbXBkrxT.js.map +1 -0
- package/dist/constants-DD5vJv2q.js +3 -0
- package/dist/constants-DD5vJv2q.js.map +1 -0
- package/dist/constants.d.ts +3 -0
- package/dist/constants.js +2 -0
- package/dist/contexts.d.ts +7 -0
- package/dist/contexts.js +2 -0
- package/dist/flag-CiR2E5oz.d.ts +898 -0
- package/dist/flag-CiR2E5oz.d.ts.map +1 -0
- package/dist/flag-koeDAqr3.js +3 -0
- package/dist/flag-koeDAqr3.js.map +1 -0
- package/dist/hooks.d.ts +15 -2
- package/dist/hooks.js +2 -43
- package/dist/index-BFkbe0aF.d.ts +698 -0
- package/dist/index-BFkbe0aF.d.ts.map +1 -0
- package/dist/index-Ba3hp2Ng.d.ts +471 -0
- package/dist/index-Ba3hp2Ng.d.ts.map +1 -0
- package/dist/index-C_kD4ZQ3.d.ts +1079 -0
- package/dist/index-C_kD4ZQ3.d.ts.map +1 -0
- package/dist/index-CiPcALu4.d.ts +146 -0
- package/dist/index-CiPcALu4.d.ts.map +1 -0
- package/dist/index-CkXLPYZY.d.ts +13 -0
- package/dist/index-CkXLPYZY.d.ts.map +1 -0
- package/dist/index-DTCpHvX_.d.ts +211 -0
- package/dist/index-DTCpHvX_.d.ts.map +1 -0
- package/dist/index-DVoQsx5c.d.ts +349 -0
- package/dist/index-DVoQsx5c.d.ts.map +1 -0
- package/dist/index-DmwYRgDR.d.ts +192 -0
- package/dist/index-DmwYRgDR.d.ts.map +1 -0
- package/dist/index-N8N7XmRj.d.ts +130 -0
- package/dist/index-N8N7XmRj.d.ts.map +1 -0
- package/dist/index-h_fw6R9U.d.ts +1501 -0
- package/dist/index-h_fw6R9U.d.ts.map +1 -0
- package/dist/index-o48TPoFN.d.ts +734 -0
- package/dist/index-o48TPoFN.d.ts.map +1 -0
- package/dist/index.d.ts +24 -2
- package/dist/index.js +2 -198
- package/dist/keepAlive-CEzyrDfg.js +3 -0
- package/dist/keepAlive-CEzyrDfg.js.map +1 -0
- package/dist/lib/api/axiosClient.d.ts +8 -0
- package/dist/lib/api/axiosClient.d.ts.map +1 -0
- package/dist/lib/api/axiosClient.js +3 -0
- package/dist/lib/api/axiosClient.js.map +1 -0
- package/dist/lib/api/track.d.ts +137 -0
- package/dist/lib/api/track.d.ts.map +1 -0
- package/dist/lib/api/track.js +2 -0
- package/dist/lib/api/user.d.ts +16 -0
- package/dist/lib/api/user.d.ts.map +1 -0
- package/dist/lib/api/user.js +2 -0
- package/dist/lib/const.d.ts +8 -0
- package/dist/lib/const.d.ts.map +1 -0
- package/dist/lib/const.js +2 -0
- package/dist/lib/result/ResultErrorFallback.d.ts +8 -0
- package/dist/lib/result/ResultErrorFallback.d.ts.map +1 -0
- package/dist/lib/result/ResultErrorFallback.js +2 -0
- package/dist/primitives-CgGUvwHB.d.ts +914 -0
- package/dist/primitives-CgGUvwHB.d.ts.map +1 -0
- package/dist/primitives.d.ts +12 -0
- package/dist/primitives.js +2 -0
- package/dist/result.d.ts +4 -0
- package/dist/result.js +2 -0
- package/dist/src-BgHSbbHk.js +67 -0
- package/dist/src-BgHSbbHk.js.map +1 -0
- package/dist/styles.css +478 -4
- package/dist/theme-CeWzymUn.js +64 -0
- package/dist/theme-CeWzymUn.js.map +1 -0
- package/dist/theme.d.ts +3 -2
- package/dist/theme.js +2 -9
- package/dist/track-9ZQpBlUK.js +3 -0
- package/dist/track-9ZQpBlUK.js.map +1 -0
- package/dist/types-CFbNxrx2.d.ts +171 -0
- package/dist/types-CFbNxrx2.d.ts.map +1 -0
- package/dist/types-CZre3j02.d.ts +231 -0
- package/dist/types-CZre3j02.d.ts.map +1 -0
- package/dist/types.d.ts +14 -2
- package/dist/types.js +3 -9
- package/dist/types.js.map +1 -0
- package/dist/useRecceServerFlag-Bg5R67J4.js +3 -0
- package/dist/useRecceServerFlag-Bg5R67J4.js.map +1 -0
- package/dist/useThemeColors--prVbMmM.js +3 -0
- package/dist/useThemeColors--prVbMmM.js.map +1 -0
- package/dist/useThemeColors-DHEroo8f.d.ts +104 -0
- package/dist/useThemeColors-DHEroo8f.d.ts.map +1 -0
- package/dist/user-DMT7E0fc.js +3 -0
- package/dist/user-DMT7E0fc.js.map +1 -0
- package/dist/utils-CW2skXm_.js +3 -0
- package/dist/utils-CW2skXm_.js.map +1 -0
- package/dist/utils-CXWhfyxC.js +5 -0
- package/dist/utils-CXWhfyxC.js.map +1 -0
- package/dist/utils.d.ts +7 -0
- package/dist/utils.js +2 -0
- package/package.json +115 -107
- package/LICENSE +0 -201
- package/dist/RecceCheckContext-BJprb2xR.js +0 -7968
- package/dist/RecceCheckContext-BJprb2xR.js.map +0 -1
- package/dist/RecceCheckContext-DPnWB_aU.css +0 -215
- package/dist/RecceCheckContext-DPnWB_aU.css.map +0 -1
- package/dist/RecceCheckContext-DbZ7BdRy.mjs +0 -7426
- package/dist/RecceCheckContext-DbZ7BdRy.mjs.map +0 -1
- package/dist/RecceCheckContext-DyxOeUsX.css +0 -215
- package/dist/RecceCheckContext-DyxOeUsX.css.map +0 -1
- package/dist/api.d.mts +0 -3
- package/dist/api.js.map +0 -1
- package/dist/api.mjs +0 -46
- package/dist/api.mjs.map +0 -1
- package/dist/components-B6oaPB5f.mjs +0 -11769
- package/dist/components-B6oaPB5f.mjs.map +0 -1
- package/dist/components-BeAjVBV3.css +0 -70
- package/dist/components-BeAjVBV3.css.map +0 -1
- package/dist/components-DTLQ2djq.js +0 -14110
- package/dist/components-DTLQ2djq.js.map +0 -1
- package/dist/components-iUxcqtUB.css +0 -70
- package/dist/components-iUxcqtUB.css.map +0 -1
- package/dist/components.d.mts +0 -3
- package/dist/components.mjs +0 -9
- package/dist/const-CaIm1Z8g.mjs +0 -12
- package/dist/const-CaIm1Z8g.mjs.map +0 -1
- package/dist/const-CvdZO0FN.js +0 -24
- package/dist/const-CvdZO0FN.js.map +0 -1
- package/dist/hooks-cQsBXBd1.js +0 -40
- package/dist/hooks-cQsBXBd1.js.map +0 -1
- package/dist/hooks-eaHm_yEp.mjs +0 -33
- package/dist/hooks-eaHm_yEp.mjs.map +0 -1
- package/dist/hooks.d.mts +0 -3
- package/dist/hooks.mjs +0 -8
- package/dist/html2canvas-pro.esm-CsuSOHXp.js +0 -7250
- package/dist/html2canvas-pro.esm-CsuSOHXp.js.map +0 -1
- package/dist/html2canvas-pro.esm-E7kpobrC.mjs +0 -7249
- package/dist/html2canvas-pro.esm-E7kpobrC.mjs.map +0 -1
- package/dist/index-B9lSPJTi.d.ts +0 -2170
- package/dist/index-B9lSPJTi.d.ts.map +0 -1
- package/dist/index-CbF0x3kW.d.mts +0 -2172
- package/dist/index-CbF0x3kW.d.mts.map +0 -1
- package/dist/index.d.mts +0 -3
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -20
- package/dist/index.mjs.map +0 -1
- package/dist/mui-theme-CUhybmBq.mjs +0 -696
- package/dist/mui-theme-CUhybmBq.mjs.map +0 -1
- package/dist/mui-theme-iBHkjXJq.js +0 -732
- package/dist/mui-theme-iBHkjXJq.js.map +0 -1
- package/dist/state-CTITyT0R.js +0 -795
- package/dist/state-CTITyT0R.js.map +0 -1
- package/dist/state-Sc2b4jri.mjs +0 -382
- package/dist/state-Sc2b4jri.mjs.map +0 -1
- package/dist/theme.d.mts +0 -3
- package/dist/theme.mjs +0 -4
- package/dist/tooltipMessage-BC5W7H3X.js +0 -13
- package/dist/tooltipMessage-BC5W7H3X.js.map +0 -1
- package/dist/tooltipMessage-B_xMIKWL.mjs +0 -7
- package/dist/tooltipMessage-B_xMIKWL.mjs.map +0 -1
- package/dist/types.d.mts +0 -3
- package/dist/types.mjs +0 -6
- package/dist/urls-BQW5wjg-.js +0 -13
- package/dist/urls-BQW5wjg-.js.map +0 -1
- package/dist/urls-DT7FVEcS.mjs +0 -7
- package/dist/urls-DT7FVEcS.mjs.map +0 -1
- package/dist/version-B9s8yne-.js +0 -300
- package/dist/version-B9s8yne-.js.map +0 -1
- package/dist/version-DP1kU_7v.mjs +0 -162
- package/dist/version-DP1kU_7v.mjs.map +0 -1
- package/recce-source/.editorconfig +0 -26
- package/recce-source/.flake8 +0 -37
- package/recce-source/.github/ISSUE_TEMPLATE/bug_report.yml +0 -67
- package/recce-source/.github/ISSUE_TEMPLATE/custom.md +0 -10
- package/recce-source/.github/ISSUE_TEMPLATE/feature_request.yml +0 -42
- package/recce-source/.github/PULL_REQUEST_TEMPLATE.md +0 -21
- package/recce-source/.github/copilot-instructions.md +0 -331
- package/recce-source/.github/instructions/backend-instructions.md +0 -541
- package/recce-source/.github/instructions/frontend-instructions.md +0 -317
- package/recce-source/.github/workflows/build-statics.yaml +0 -72
- package/recce-source/.github/workflows/bump.yaml +0 -48
- package/recce-source/.github/workflows/integration-tests-cloud.yaml +0 -92
- package/recce-source/.github/workflows/integration-tests-sqlmesh.yaml +0 -33
- package/recce-source/.github/workflows/integration-tests.yaml +0 -52
- package/recce-source/.github/workflows/nightly.yaml +0 -246
- package/recce-source/.github/workflows/release.yaml +0 -196
- package/recce-source/.github/workflows/tests-js.yaml +0 -58
- package/recce-source/.github/workflows/tests-python.yaml +0 -128
- package/recce-source/.pre-commit-config.yaml +0 -26
- package/recce-source/CLAUDE.md +0 -483
- package/recce-source/CODE_OF_CONDUCT.md +0 -128
- package/recce-source/CONTRIBUTING.md +0 -107
- package/recce-source/LICENSE +0 -201
- package/recce-source/Makefile +0 -126
- package/recce-source/README.md +0 -182
- package/recce-source/RECCE_CLOUD.md +0 -81
- package/recce-source/SECURITY.md +0 -25
- package/recce-source/docs/PACKAGING.md +0 -340
- package/recce-source/docs/README.md +0 -1
- package/recce-source/integration_tests/dbt/dbt_project.yml +0 -26
- package/recce-source/integration_tests/dbt/models/customers.sql +0 -69
- package/recce-source/integration_tests/dbt/models/docs.md +0 -14
- package/recce-source/integration_tests/dbt/models/orders.sql +0 -56
- package/recce-source/integration_tests/dbt/models/schema.yml +0 -82
- package/recce-source/integration_tests/dbt/models/staging/schema.yml +0 -31
- package/recce-source/integration_tests/dbt/models/staging/stg_customers.sql +0 -22
- package/recce-source/integration_tests/dbt/models/staging/stg_orders.sql +0 -23
- package/recce-source/integration_tests/dbt/models/staging/stg_payments.sql +0 -25
- package/recce-source/integration_tests/dbt/packages.yml +0 -7
- package/recce-source/integration_tests/dbt/profiles.yml +0 -8
- package/recce-source/integration_tests/dbt/seeds/raw_customers.csv +0 -101
- package/recce-source/integration_tests/dbt/seeds/raw_orders.csv +0 -100
- package/recce-source/integration_tests/dbt/seeds/raw_payments.csv +0 -114
- package/recce-source/integration_tests/dbt/seeds/raw_statuses.csv +0 -5
- package/recce-source/integration_tests/dbt/smoke_test.sh +0 -72
- package/recce-source/integration_tests/dbt/smoke_test_cloud.sh +0 -71
- package/recce-source/integration_tests/sqlmesh/__init__.py +0 -0
- package/recce-source/integration_tests/sqlmesh/audits/assert_item_price_above_zero.sql +0 -9
- package/recce-source/integration_tests/sqlmesh/audits/items.sql +0 -7
- package/recce-source/integration_tests/sqlmesh/audits/order_items.sql +0 -7
- package/recce-source/integration_tests/sqlmesh/config.py +0 -171
- package/recce-source/integration_tests/sqlmesh/helper.py +0 -20
- package/recce-source/integration_tests/sqlmesh/hooks/__init__.py +0 -0
- package/recce-source/integration_tests/sqlmesh/macros/__init__.py +0 -0
- package/recce-source/integration_tests/sqlmesh/macros/macros.py +0 -8
- package/recce-source/integration_tests/sqlmesh/macros/macros.sql +0 -8
- package/recce-source/integration_tests/sqlmesh/macros/utils.py +0 -11
- package/recce-source/integration_tests/sqlmesh/metrics/metrics.sql +0 -25
- package/recce-source/integration_tests/sqlmesh/models/customer_revenue_by_day.sql +0 -41
- package/recce-source/integration_tests/sqlmesh/models/customer_revenue_lifetime.sql +0 -60
- package/recce-source/integration_tests/sqlmesh/models/customers.sql +0 -32
- package/recce-source/integration_tests/sqlmesh/models/items.py +0 -95
- package/recce-source/integration_tests/sqlmesh/models/marketing.sql +0 -15
- package/recce-source/integration_tests/sqlmesh/models/order_items.py +0 -95
- package/recce-source/integration_tests/sqlmesh/models/orders.py +0 -70
- package/recce-source/integration_tests/sqlmesh/models/raw_marketing.py +0 -62
- package/recce-source/integration_tests/sqlmesh/models/top_waiters.sql +0 -23
- package/recce-source/integration_tests/sqlmesh/models/waiter_as_customer_by_day.sql +0 -29
- package/recce-source/integration_tests/sqlmesh/models/waiter_names.sql +0 -10
- package/recce-source/integration_tests/sqlmesh/models/waiter_revenue_by_day.sql +0 -29
- package/recce-source/integration_tests/sqlmesh/models/waiters.py +0 -62
- package/recce-source/integration_tests/sqlmesh/prep_env.sh +0 -16
- package/recce-source/integration_tests/sqlmesh/schema.yaml +0 -5
- package/recce-source/integration_tests/sqlmesh/seeds/waiter_names.csv +0 -11
- package/recce-source/integration_tests/sqlmesh/test_server.sh +0 -29
- package/recce-source/integration_tests/sqlmesh/tests/test_customer_revenue_by_day.yaml +0 -63
- package/recce-source/integration_tests/sqlmesh/tests/test_order_items.yaml +0 -72
- package/recce-source/js/.editorconfig +0 -27
- package/recce-source/js/.env.development +0 -5
- package/recce-source/js/.husky/pre-commit +0 -29
- package/recce-source/js/.nvmrc +0 -1
- package/recce-source/js/README.md +0 -39
- package/recce-source/js/app/(mainComponents)/DisplayModeToggle.tsx +0 -65
- package/recce-source/js/app/(mainComponents)/NavBar.tsx +0 -228
- package/recce-source/js/app/(mainComponents)/RecceVersionBadge.tsx +0 -107
- package/recce-source/js/app/(mainComponents)/TopBar.tsx +0 -252
- package/recce-source/js/app/@lineage/default.tsx +0 -20
- package/recce-source/js/app/@lineage/page.tsx +0 -14
- package/recce-source/js/app/MainLayout.tsx +0 -170
- package/recce-source/js/app/Providers.tsx +0 -49
- package/recce-source/js/app/checks/page.tsx +0 -296
- package/recce-source/js/app/error.tsx +0 -93
- package/recce-source/js/app/favicon.ico +0 -0
- package/recce-source/js/app/global-error.tsx +0 -115
- package/recce-source/js/app/global.css +0 -82
- package/recce-source/js/app/layout.tsx +0 -48
- package/recce-source/js/app/lineage/page.tsx +0 -15
- package/recce-source/js/app/page.tsx +0 -12
- package/recce-source/js/app/query/page.tsx +0 -8
- package/recce-source/js/biome.json +0 -313
- package/recce-source/js/jest.config.js +0 -34
- package/recce-source/js/jest.globals.d.ts +0 -32
- package/recce-source/js/jest.setup.js +0 -91
- package/recce-source/js/next.config.js +0 -16
- package/recce-source/js/package-lock.json +0 -13843
- package/recce-source/js/package.json +0 -123
- package/recce-source/js/pnpm-lock.yaml +0 -9235
- package/recce-source/js/pnpm-workspace.yaml +0 -6
- package/recce-source/js/postcss.config.js +0 -5
- package/recce-source/js/public/auth_callback.html +0 -68
- package/recce-source/js/public/imgs/feedback/thumbs-down.png +0 -0
- package/recce-source/js/public/imgs/feedback/thumbs-up.png +0 -0
- package/recce-source/js/public/imgs/reload-image.svg +0 -4
- package/recce-source/js/public/logo/recce-logo-white.png +0 -0
- package/recce-source/js/src/components/AuthModal/AuthModal.tsx +0 -202
- package/recce-source/js/src/components/app/AvatarDropdown.tsx +0 -159
- package/recce-source/js/src/components/app/EnvInfo.tsx +0 -357
- package/recce-source/js/src/components/app/Filename.tsx +0 -388
- package/recce-source/js/src/components/app/SetupConnectionPopover.tsx +0 -91
- package/recce-source/js/src/components/app/StateExporter.tsx +0 -57
- package/recce-source/js/src/components/app/StateImporter.tsx +0 -198
- package/recce-source/js/src/components/app/StateSharing.tsx +0 -145
- package/recce-source/js/src/components/app/StateSynchronizer.tsx +0 -205
- package/recce-source/js/src/components/charts/HistogramChart.tsx +0 -291
- package/recce-source/js/src/components/charts/SquareIcon.tsx +0 -51
- package/recce-source/js/src/components/charts/TopKSummaryList.tsx +0 -457
- package/recce-source/js/src/components/charts/chartTheme.ts +0 -74
- package/recce-source/js/src/components/check/CheckBreadcrumb.tsx +0 -97
- package/recce-source/js/src/components/check/CheckDescription.tsx +0 -134
- package/recce-source/js/src/components/check/CheckDetail.tsx +0 -797
- package/recce-source/js/src/components/check/CheckEmptyState.tsx +0 -84
- package/recce-source/js/src/components/check/CheckList.tsx +0 -320
- package/recce-source/js/src/components/check/LineageDiffView.tsx +0 -32
- package/recce-source/js/src/components/check/PresetCheckTemplateView.tsx +0 -48
- package/recce-source/js/src/components/check/SchemaDiffView.tsx +0 -290
- package/recce-source/js/src/components/check/check.ts +0 -25
- package/recce-source/js/src/components/check/timeline/CheckTimeline.tsx +0 -163
- package/recce-source/js/src/components/check/timeline/CommentInput.tsx +0 -84
- package/recce-source/js/src/components/check/timeline/TimelineEvent.tsx +0 -468
- package/recce-source/js/src/components/check/timeline/index.ts +0 -12
- package/recce-source/js/src/components/check/utils.ts +0 -12
- package/recce-source/js/src/components/data-grid/ScreenshotDataGrid.tsx +0 -333
- package/recce-source/js/src/components/data-grid/agGridStyles.css +0 -55
- package/recce-source/js/src/components/data-grid/agGridTheme.ts +0 -43
- package/recce-source/js/src/components/editor/CodeEditor.tsx +0 -107
- package/recce-source/js/src/components/editor/DiffEditor.tsx +0 -162
- package/recce-source/js/src/components/editor/index.ts +0 -12
- package/recce-source/js/src/components/errorboundary/ErrorBoundary.tsx +0 -87
- package/recce-source/js/src/components/histogram/HistogramDiffForm.tsx +0 -147
- package/recce-source/js/src/components/histogram/HistogramDiffResultView.tsx +0 -63
- package/recce-source/js/src/components/icons/index.tsx +0 -142
- package/recce-source/js/src/components/lineage/ActionControl.tsx +0 -63
- package/recce-source/js/src/components/lineage/ActionTag.tsx +0 -141
- package/recce-source/js/src/components/lineage/ChangeStatusLegend.tsx +0 -46
- package/recce-source/js/src/components/lineage/ColumnLevelLineageControl.tsx +0 -327
- package/recce-source/js/src/components/lineage/ColumnLevelLineageLegend.tsx +0 -57
- package/recce-source/js/src/components/lineage/GraphColumnNode.tsx +0 -199
- package/recce-source/js/src/components/lineage/GraphEdge.tsx +0 -59
- package/recce-source/js/src/components/lineage/GraphNode.tsx +0 -555
- package/recce-source/js/src/components/lineage/LineagePage.tsx +0 -10
- package/recce-source/js/src/components/lineage/LineageView.tsx +0 -1384
- package/recce-source/js/src/components/lineage/LineageViewContext.tsx +0 -86
- package/recce-source/js/src/components/lineage/LineageViewContextMenu.tsx +0 -637
- package/recce-source/js/src/components/lineage/LineageViewNotification.tsx +0 -64
- package/recce-source/js/src/components/lineage/LineageViewTopBar.tsx +0 -596
- package/recce-source/js/src/components/lineage/NodeSqlView.tsx +0 -136
- package/recce-source/js/src/components/lineage/NodeTag.tsx +0 -278
- package/recce-source/js/src/components/lineage/NodeView.tsx +0 -642
- package/recce-source/js/src/components/lineage/SandboxView.tsx +0 -436
- package/recce-source/js/src/components/lineage/ServerDisconnectedModalContent.tsx +0 -105
- package/recce-source/js/src/components/lineage/SetupConnectionBanner.tsx +0 -52
- package/recce-source/js/src/components/lineage/SingleEnvironmentQueryView.tsx +0 -152
- package/recce-source/js/src/components/lineage/graph.test.ts +0 -31
- package/recce-source/js/src/components/lineage/graph.ts +0 -58
- package/recce-source/js/src/components/lineage/lineage.test.ts +0 -169
- package/recce-source/js/src/components/lineage/lineage.ts +0 -521
- package/recce-source/js/src/components/lineage/styles.css +0 -42
- package/recce-source/js/src/components/lineage/styles.tsx +0 -165
- package/recce-source/js/src/components/lineage/useMultiNodesAction.ts +0 -352
- package/recce-source/js/src/components/lineage/useValueDiffAlertDialog.tsx +0 -108
- package/recce-source/js/src/components/onboarding-guide/Notification.tsx +0 -62
- package/recce-source/js/src/components/profile/ProfileDiffForm.tsx +0 -134
- package/recce-source/js/src/components/profile/ProfileDiffResultView.tsx +0 -243
- package/recce-source/js/src/components/query/ChangedOnlyCheckbox.tsx +0 -29
- package/recce-source/js/src/components/query/DiffText.tsx +0 -120
- package/recce-source/js/src/components/query/QueryDiffResultView.tsx +0 -468
- package/recce-source/js/src/components/query/QueryForm.tsx +0 -80
- package/recce-source/js/src/components/query/QueryPage.tsx +0 -282
- package/recce-source/js/src/components/query/QueryResultView.tsx +0 -180
- package/recce-source/js/src/components/query/SetupConnectionGuide.tsx +0 -57
- package/recce-source/js/src/components/query/SqlEditor.tsx +0 -245
- package/recce-source/js/src/components/query/ToggleSwitch.tsx +0 -84
- package/recce-source/js/src/components/query/styles.css +0 -21
- package/recce-source/js/src/components/routing/DirectUrlAccess.test.tsx +0 -428
- package/recce-source/js/src/components/routing/LineageStatePreservation.test.tsx +0 -311
- package/recce-source/js/src/components/routing/Navigation.test.tsx +0 -256
- package/recce-source/js/src/components/rowcount/RowCountDiffResultView.tsx +0 -108
- package/recce-source/js/src/components/rowcount/delta.test.ts +0 -51
- package/recce-source/js/src/components/rowcount/delta.ts +0 -16
- package/recce-source/js/src/components/run/RunList.tsx +0 -303
- package/recce-source/js/src/components/run/RunModal.tsx +0 -191
- package/recce-source/js/src/components/run/RunPage.tsx +0 -26
- package/recce-source/js/src/components/run/RunResultPane.tsx +0 -454
- package/recce-source/js/src/components/run/RunStatusAndDate.tsx +0 -106
- package/recce-source/js/src/components/run/RunToolbar.tsx +0 -70
- package/recce-source/js/src/components/run/RunView.tsx +0 -196
- package/recce-source/js/src/components/run/registry.ts +0 -214
- package/recce-source/js/src/components/run/types.ts +0 -14
- package/recce-source/js/src/components/schema/ColumnNameCell.test.tsx +0 -169
- package/recce-source/js/src/components/schema/ColumnNameCell.tsx +0 -198
- package/recce-source/js/src/components/schema/SchemaView.tsx +0 -336
- package/recce-source/js/src/components/schema/schemaDiff.ts +0 -32
- package/recce-source/js/src/components/schema/style.css +0 -134
- package/recce-source/js/src/components/screenshot/ScreenshotBox.tsx +0 -39
- package/recce-source/js/src/components/shared/HistoryToggle.tsx +0 -35
- package/recce-source/js/src/components/split/Split.tsx +0 -40
- package/recce-source/js/src/components/split/styles.css +0 -24
- package/recce-source/js/src/components/summary/ChangeSummary.tsx +0 -264
- package/recce-source/js/src/components/summary/SchemaSummary.tsx +0 -123
- package/recce-source/js/src/components/summary/SummaryView.tsx +0 -29
- package/recce-source/js/src/components/timeout/IdleTimeoutBadge.tsx +0 -48
- package/recce-source/js/src/components/top-k/TopKDiffForm.tsx +0 -58
- package/recce-source/js/src/components/top-k/TopKDiffResultView.tsx +0 -73
- package/recce-source/js/src/components/ui/dataGrid/DataFrameColumnGroupHeader.tsx +0 -228
- package/recce-source/js/src/components/ui/dataGrid/DataFrameColumnHeader.tsx +0 -113
- package/recce-source/js/src/components/ui/dataGrid/defaultRenderCell.tsx +0 -72
- package/recce-source/js/src/components/ui/dataGrid/index.ts +0 -23
- package/recce-source/js/src/components/ui/dataGrid/inlineRenderCell.test.tsx +0 -607
- package/recce-source/js/src/components/ui/dataGrid/inlineRenderCell.tsx +0 -211
- package/recce-source/js/src/components/ui/dataGrid/schemaCells.test.tsx +0 -452
- package/recce-source/js/src/components/ui/dataGrid/schemaCells.tsx +0 -142
- package/recce-source/js/src/components/ui/dataGrid/valueDiffCells.test.tsx +0 -178
- package/recce-source/js/src/components/ui/dataGrid/valueDiffCells.tsx +0 -275
- package/recce-source/js/src/components/ui/markdown/ExternalLinkConfirmDialog.tsx +0 -134
- package/recce-source/js/src/components/ui/markdown/MarkdownContent.tsx +0 -364
- package/recce-source/js/src/components/ui/mui/index.ts +0 -13
- package/recce-source/js/src/components/ui/mui-provider.tsx +0 -67
- package/recce-source/js/src/components/ui/mui-theme.ts +0 -1039
- package/recce-source/js/src/components/ui/mui-utils.ts +0 -113
- package/recce-source/js/src/components/ui/toaster.tsx +0 -288
- package/recce-source/js/src/components/valuediff/ValueDiffDetailResultView.tsx +0 -216
- package/recce-source/js/src/components/valuediff/ValueDiffForm.tsx +0 -246
- package/recce-source/js/src/components/valuediff/ValueDiffResultView.tsx +0 -81
- package/recce-source/js/src/components/valuediff/shared.ts +0 -33
- package/recce-source/js/src/constants/tooltipMessage.ts +0 -3
- package/recce-source/js/src/constants/urls.ts +0 -1
- package/recce-source/js/src/lib/UrlHash.ts +0 -12
- package/recce-source/js/src/lib/api/adhocQuery.ts +0 -70
- package/recce-source/js/src/lib/api/axiosClient.ts +0 -9
- package/recce-source/js/src/lib/api/cacheKeys.ts +0 -13
- package/recce-source/js/src/lib/api/checkEvents.ts +0 -252
- package/recce-source/js/src/lib/api/checks.ts +0 -129
- package/recce-source/js/src/lib/api/cll.ts +0 -53
- package/recce-source/js/src/lib/api/connectToCloud.ts +0 -13
- package/recce-source/js/src/lib/api/flag.ts +0 -37
- package/recce-source/js/src/lib/api/info.ts +0 -198
- package/recce-source/js/src/lib/api/instanceInfo.ts +0 -25
- package/recce-source/js/src/lib/api/keepAlive.ts +0 -108
- package/recce-source/js/src/lib/api/lineagecheck.ts +0 -35
- package/recce-source/js/src/lib/api/localStorageKeys.ts +0 -7
- package/recce-source/js/src/lib/api/models.ts +0 -59
- package/recce-source/js/src/lib/api/profile.ts +0 -65
- package/recce-source/js/src/lib/api/rowcount.ts +0 -19
- package/recce-source/js/src/lib/api/runs.ts +0 -174
- package/recce-source/js/src/lib/api/schemacheck.ts +0 -31
- package/recce-source/js/src/lib/api/select.ts +0 -25
- package/recce-source/js/src/lib/api/sessionStorageKeys.ts +0 -8
- package/recce-source/js/src/lib/api/state.ts +0 -117
- package/recce-source/js/src/lib/api/track.ts +0 -281
- package/recce-source/js/src/lib/api/types.ts +0 -284
- package/recce-source/js/src/lib/api/user.ts +0 -42
- package/recce-source/js/src/lib/api/valuediff.ts +0 -46
- package/recce-source/js/src/lib/api/version.ts +0 -40
- package/recce-source/js/src/lib/const.ts +0 -9
- package/recce-source/js/src/lib/dataGrid/crossFunctionConsistency.test.ts +0 -626
- package/recce-source/js/src/lib/dataGrid/dataGridFactory.test.ts +0 -2140
- package/recce-source/js/src/lib/dataGrid/dataGridFactory.ts +0 -397
- package/recce-source/js/src/lib/dataGrid/generators/rowCountUtils.test.ts +0 -132
- package/recce-source/js/src/lib/dataGrid/generators/rowCountUtils.ts +0 -126
- package/recce-source/js/src/lib/dataGrid/generators/toDataDiffGrid.test.ts +0 -1627
- package/recce-source/js/src/lib/dataGrid/generators/toDataDiffGrid.ts +0 -140
- package/recce-source/js/src/lib/dataGrid/generators/toDataGrid.ts +0 -67
- package/recce-source/js/src/lib/dataGrid/generators/toRowCountDataGrid.test.ts +0 -142
- package/recce-source/js/src/lib/dataGrid/generators/toRowCountDataGrid.ts +0 -71
- package/recce-source/js/src/lib/dataGrid/generators/toRowCountDiffDataGrid.test.ts +0 -258
- package/recce-source/js/src/lib/dataGrid/generators/toRowCountDiffDataGrid.ts +0 -153
- package/recce-source/js/src/lib/dataGrid/generators/toSchemaDataGrid.test.ts +0 -951
- package/recce-source/js/src/lib/dataGrid/generators/toSchemaDataGrid.ts +0 -221
- package/recce-source/js/src/lib/dataGrid/generators/toValueDataGrid.test.ts +0 -395
- package/recce-source/js/src/lib/dataGrid/generators/toValueDataGrid.ts +0 -184
- package/recce-source/js/src/lib/dataGrid/generators/toValueDiffGrid.test.ts +0 -884
- package/recce-source/js/src/lib/dataGrid/generators/toValueDiffGrid.ts +0 -113
- package/recce-source/js/src/lib/dataGrid/index.ts +0 -51
- package/recce-source/js/src/lib/dataGrid/propertyBased.test.ts +0 -858
- package/recce-source/js/src/lib/dataGrid/shared/columnBuilders.test.ts +0 -482
- package/recce-source/js/src/lib/dataGrid/shared/columnBuilders.ts +0 -345
- package/recce-source/js/src/lib/dataGrid/shared/dataTypeEdgeCases.test.ts +0 -698
- package/recce-source/js/src/lib/dataGrid/shared/diffColumnBuilder.test.tsx +0 -820
- package/recce-source/js/src/lib/dataGrid/shared/diffColumnBuilder.tsx +0 -277
- package/recce-source/js/src/lib/dataGrid/shared/gridUtils.test.ts +0 -785
- package/recce-source/js/src/lib/dataGrid/shared/gridUtils.ts +0 -370
- package/recce-source/js/src/lib/dataGrid/shared/index.ts +0 -81
- package/recce-source/js/src/lib/dataGrid/shared/rowBuilders.test.ts +0 -909
- package/recce-source/js/src/lib/dataGrid/shared/rowBuilders.ts +0 -325
- package/recce-source/js/src/lib/dataGrid/shared/simpleColumnBuilder.tsx +0 -240
- package/recce-source/js/src/lib/dataGrid/shared/toDiffColumn.test.tsx +0 -719
- package/recce-source/js/src/lib/dataGrid/shared/toDiffColumn.tsx +0 -231
- package/recce-source/js/src/lib/dataGrid/shared/validation.test.ts +0 -559
- package/recce-source/js/src/lib/dataGrid/shared/validation.ts +0 -367
- package/recce-source/js/src/lib/dataGrid/warehouseNamingConventions.test.ts +0 -1117
- package/recce-source/js/src/lib/formatSelect.ts +0 -50
- package/recce-source/js/src/lib/hooks/ApiConfigContext.tsx +0 -181
- package/recce-source/js/src/lib/hooks/IdleTimeoutContext.tsx +0 -177
- package/recce-source/js/src/lib/hooks/LineageGraphContext.tsx +0 -512
- package/recce-source/js/src/lib/hooks/RecceActionContext.tsx +0 -269
- package/recce-source/js/src/lib/hooks/RecceCheckContext.tsx +0 -33
- package/recce-source/js/src/lib/hooks/RecceContextProvider.tsx +0 -54
- package/recce-source/js/src/lib/hooks/RecceInstanceContext.tsx +0 -129
- package/recce-source/js/src/lib/hooks/RecceQueryContext.tsx +0 -98
- package/recce-source/js/src/lib/hooks/RecceShareStateContext.tsx +0 -59
- package/recce-source/js/src/lib/hooks/ScreenShot.tsx +0 -399
- package/recce-source/js/src/lib/hooks/useAppRouter.test.ts +0 -211
- package/recce-source/js/src/lib/hooks/useAppRouter.ts +0 -200
- package/recce-source/js/src/lib/hooks/useCheckEvents.ts +0 -99
- package/recce-source/js/src/lib/hooks/useCheckToast.tsx +0 -14
- package/recce-source/js/src/lib/hooks/useClipBoardToast.tsx +0 -27
- package/recce-source/js/src/lib/hooks/useCountdownToast.tsx +0 -102
- package/recce-source/js/src/lib/hooks/useFeedbackCollectionToast.tsx +0 -130
- package/recce-source/js/src/lib/hooks/useGuideToast.tsx +0 -45
- package/recce-source/js/src/lib/hooks/useIdleDetection.tsx +0 -185
- package/recce-source/js/src/lib/hooks/useModelColumns.tsx +0 -113
- package/recce-source/js/src/lib/hooks/useRecceInstanceInfo.tsx +0 -13
- package/recce-source/js/src/lib/hooks/useRecceServerFlag.tsx +0 -13
- package/recce-source/js/src/lib/hooks/useRun.tsx +0 -89
- package/recce-source/js/src/lib/hooks/useThemeColors.ts +0 -115
- package/recce-source/js/src/lib/mergeKeys.test.ts +0 -89
- package/recce-source/js/src/lib/mergeKeys.ts +0 -86
- package/recce-source/js/src/lib/result/ResultErrorFallback.tsx +0 -9
- package/recce-source/js/src/lib/utils/formatTime.ts +0 -84
- package/recce-source/js/src/lib/utils/urls.ts +0 -16
- package/recce-source/js/src/utils/DropdownValuesInput.tsx +0 -297
- package/recce-source/js/src/utils/formatters.tsx +0 -237
- package/recce-source/js/src/utils/transforms.ts +0 -81
- package/recce-source/js/tsconfig.json +0 -47
- package/recce-source/macros/README.md +0 -8
- package/recce-source/macros/recce_athena.sql +0 -73
- package/recce-source/pyproject.toml +0 -109
- package/recce-source/recce/VERSION +0 -1
- package/recce-source/recce/__init__.py +0 -84
- package/recce-source/recce/adapter/__init__.py +0 -0
- package/recce-source/recce/adapter/base.py +0 -109
- package/recce-source/recce/adapter/dbt_adapter/__init__.py +0 -1699
- package/recce-source/recce/adapter/dbt_adapter/dbt_version.py +0 -42
- package/recce-source/recce/adapter/sqlmesh_adapter.py +0 -141
- package/recce-source/recce/apis/__init__.py +0 -0
- package/recce-source/recce/apis/check_api.py +0 -203
- package/recce-source/recce/apis/check_events_api.py +0 -353
- package/recce-source/recce/apis/check_func.py +0 -130
- package/recce-source/recce/apis/run_api.py +0 -130
- package/recce-source/recce/apis/run_func.py +0 -258
- package/recce-source/recce/artifact.py +0 -266
- package/recce-source/recce/cli.py +0 -1846
- package/recce-source/recce/config.py +0 -127
- package/recce-source/recce/connect_to_cloud.py +0 -138
- package/recce-source/recce/core.py +0 -334
- package/recce-source/recce/diff.py +0 -26
- package/recce-source/recce/event/CONFIG +0 -1
- package/recce-source/recce/event/SENTRY_DNS +0 -1
- package/recce-source/recce/event/__init__.py +0 -304
- package/recce-source/recce/event/collector.py +0 -184
- package/recce-source/recce/event/track.py +0 -158
- package/recce-source/recce/exceptions.py +0 -21
- package/recce-source/recce/git.py +0 -77
- package/recce-source/recce/github.py +0 -222
- package/recce-source/recce/mcp_server.py +0 -861
- package/recce-source/recce/models/__init__.py +0 -6
- package/recce-source/recce/models/check.py +0 -473
- package/recce-source/recce/models/run.py +0 -46
- package/recce-source/recce/models/types.py +0 -218
- package/recce-source/recce/pull_request.py +0 -124
- package/recce-source/recce/run.py +0 -390
- package/recce-source/recce/server.py +0 -877
- package/recce-source/recce/state/__init__.py +0 -31
- package/recce-source/recce/state/cloud.py +0 -644
- package/recce-source/recce/state/const.py +0 -26
- package/recce-source/recce/state/local.py +0 -56
- package/recce-source/recce/state/state.py +0 -119
- package/recce-source/recce/state/state_loader.py +0 -174
- package/recce-source/recce/summary.py +0 -575
- package/recce-source/recce/tasks/__init__.py +0 -23
- package/recce-source/recce/tasks/core.py +0 -134
- package/recce-source/recce/tasks/dataframe.py +0 -170
- package/recce-source/recce/tasks/histogram.py +0 -433
- package/recce-source/recce/tasks/lineage.py +0 -19
- package/recce-source/recce/tasks/profile.py +0 -298
- package/recce-source/recce/tasks/query.py +0 -450
- package/recce-source/recce/tasks/rowcount.py +0 -277
- package/recce-source/recce/tasks/schema.py +0 -65
- package/recce-source/recce/tasks/top_k.py +0 -172
- package/recce-source/recce/tasks/utils.py +0 -147
- package/recce-source/recce/tasks/valuediff.py +0 -497
- package/recce-source/recce/util/__init__.py +0 -4
- package/recce-source/recce/util/api_token.py +0 -80
- package/recce-source/recce/util/breaking.py +0 -330
- package/recce-source/recce/util/cache.py +0 -25
- package/recce-source/recce/util/cll.py +0 -355
- package/recce-source/recce/util/cloud/__init__.py +0 -15
- package/recce-source/recce/util/cloud/base.py +0 -115
- package/recce-source/recce/util/cloud/check_events.py +0 -190
- package/recce-source/recce/util/cloud/checks.py +0 -242
- package/recce-source/recce/util/io.py +0 -120
- package/recce-source/recce/util/lineage.py +0 -83
- package/recce-source/recce/util/logger.py +0 -25
- package/recce-source/recce/util/onboarding_state.py +0 -45
- package/recce-source/recce/util/perf_tracking.py +0 -85
- package/recce-source/recce/util/pydantic_model.py +0 -22
- package/recce-source/recce/util/recce_cloud.py +0 -454
- package/recce-source/recce/util/singleton.py +0 -18
- package/recce-source/recce/util/startup_perf.py +0 -121
- package/recce-source/recce/yaml/__init__.py +0 -58
- package/recce-source/recce_cloud/README.md +0 -780
- package/recce-source/recce_cloud/VERSION +0 -1
- package/recce-source/recce_cloud/__init__.py +0 -24
- package/recce-source/recce_cloud/api/__init__.py +0 -17
- package/recce-source/recce_cloud/api/base.py +0 -132
- package/recce-source/recce_cloud/api/client.py +0 -186
- package/recce-source/recce_cloud/api/exceptions.py +0 -26
- package/recce-source/recce_cloud/api/factory.py +0 -63
- package/recce-source/recce_cloud/api/github.py +0 -106
- package/recce-source/recce_cloud/api/gitlab.py +0 -111
- package/recce-source/recce_cloud/artifact.py +0 -57
- package/recce-source/recce_cloud/ci_providers/__init__.py +0 -9
- package/recce-source/recce_cloud/ci_providers/base.py +0 -82
- package/recce-source/recce_cloud/ci_providers/detector.py +0 -147
- package/recce-source/recce_cloud/ci_providers/github_actions.py +0 -136
- package/recce-source/recce_cloud/ci_providers/gitlab_ci.py +0 -130
- package/recce-source/recce_cloud/cli.py +0 -434
- package/recce-source/recce_cloud/download.py +0 -230
- package/recce-source/recce_cloud/hatch_build.py +0 -20
- package/recce-source/recce_cloud/pyproject.toml +0 -49
- package/recce-source/recce_cloud/upload.py +0 -214
- package/recce-source/test.py +0 -0
- package/recce-source/tests/__init__.py +0 -0
- package/recce-source/tests/adapter/__init__.py +0 -0
- package/recce-source/tests/adapter/dbt_adapter/__init__.py +0 -0
- package/recce-source/tests/adapter/dbt_adapter/conftest.py +0 -17
- package/recce-source/tests/adapter/dbt_adapter/dbt_test_helper.py +0 -298
- package/recce-source/tests/adapter/dbt_adapter/test_dbt_adapter.py +0 -25
- package/recce-source/tests/adapter/dbt_adapter/test_dbt_cll.py +0 -717
- package/recce-source/tests/adapter/dbt_adapter/test_proj/dbt_project.yml +0 -4
- package/recce-source/tests/adapter/dbt_adapter/test_proj/manifest.json +0 -1
- package/recce-source/tests/adapter/dbt_adapter/test_proj/package-lock.yml +0 -8
- package/recce-source/tests/adapter/dbt_adapter/test_proj/packages.yml +0 -7
- package/recce-source/tests/adapter/dbt_adapter/test_proj/profiles.yml +0 -6
- package/recce-source/tests/adapter/dbt_adapter/test_selector.py +0 -205
- package/recce-source/tests/apis/__init__.py +0 -0
- package/recce-source/tests/apis/row_count_diff.json +0 -59
- package/recce-source/tests/apis/test_check_events_api.py +0 -615
- package/recce-source/tests/apis/test_run_func.py +0 -433
- package/recce-source/tests/catalog.json +0 -527
- package/recce-source/tests/data/manifest/base/catalog.json +0 -1
- package/recce-source/tests/data/manifest/base/manifest.json +0 -1
- package/recce-source/tests/data/manifest/pr2/catalog.json +0 -1
- package/recce-source/tests/data/manifest/pr2/manifest.json +0 -1
- package/recce-source/tests/manifest.json +0 -10655
- package/recce-source/tests/models/__init__.py +0 -0
- package/recce-source/tests/models/test_check.py +0 -731
- package/recce-source/tests/models/test_run_models.py +0 -295
- package/recce-source/tests/recce_cloud/__init__.py +0 -0
- package/recce-source/tests/recce_cloud/test_ci_providers.py +0 -351
- package/recce-source/tests/recce_cloud/test_cli.py +0 -735
- package/recce-source/tests/recce_cloud/test_client.py +0 -379
- package/recce-source/tests/recce_cloud/test_platform_clients.py +0 -483
- package/recce-source/tests/recce_state.json +0 -1
- package/recce-source/tests/state/test_cloud.py +0 -719
- package/recce-source/tests/state/test_local.py +0 -164
- package/recce-source/tests/state/test_state_loader.py +0 -211
- package/recce-source/tests/tasks/__init__.py +0 -0
- package/recce-source/tests/tasks/conftest.py +0 -4
- package/recce-source/tests/tasks/test_histogram.py +0 -129
- package/recce-source/tests/tasks/test_lineage.py +0 -55
- package/recce-source/tests/tasks/test_preset_checks.py +0 -64
- package/recce-source/tests/tasks/test_profile.py +0 -397
- package/recce-source/tests/tasks/test_query.py +0 -528
- package/recce-source/tests/tasks/test_row_count.py +0 -133
- package/recce-source/tests/tasks/test_schema.py +0 -122
- package/recce-source/tests/tasks/test_top_k.py +0 -77
- package/recce-source/tests/tasks/test_utils.py +0 -439
- package/recce-source/tests/tasks/test_valuediff.py +0 -361
- package/recce-source/tests/test_cli.py +0 -236
- package/recce-source/tests/test_cli_mcp_optional.py +0 -45
- package/recce-source/tests/test_cloud_listing_cli.py +0 -324
- package/recce-source/tests/test_config.py +0 -43
- package/recce-source/tests/test_connect_to_cloud.py +0 -82
- package/recce-source/tests/test_core.py +0 -174
- package/recce-source/tests/test_dbt.py +0 -36
- package/recce-source/tests/test_mcp_server.py +0 -505
- package/recce-source/tests/test_pull_request.py +0 -130
- package/recce-source/tests/test_server.py +0 -202
- package/recce-source/tests/test_server_lifespan.py +0 -138
- package/recce-source/tests/test_summary.py +0 -73
- package/recce-source/tests/util/__init__.py +0 -0
- package/recce-source/tests/util/cloud/__init__.py +0 -0
- package/recce-source/tests/util/cloud/test_check_events.py +0 -255
- package/recce-source/tests/util/cloud/test_checks.py +0 -204
- package/recce-source/tests/util/test_api_token.py +0 -119
- package/recce-source/tests/util/test_breaking.py +0 -1427
- package/recce-source/tests/util/test_cll.py +0 -706
- package/recce-source/tests/util/test_lineage.py +0 -122
- package/recce-source/tests/util/test_onboarding_state.py +0 -84
- package/recce-source/tests/util/test_recce_cloud.py +0 -231
- package/recce-source/tox.ini +0 -40
- package/recce-source/uv.lock +0 -3928
- package/src/api/index.ts +0 -32
- package/src/components/index.ts +0 -154
- package/src/global.d.ts +0 -14
- package/src/hooks/index.ts +0 -56
- package/src/index.ts +0 -17
- package/src/lib/hooks/RouteConfigContext.ts +0 -139
- package/src/lib/hooks/useAppRouter.ts +0 -240
- package/src/mui-augmentation.d.ts +0 -139
- package/src/theme/index.ts +0 -13
- package/src/theme.ts +0 -23
- package/src/types/index.ts +0 -23
|
@@ -1,1427 +0,0 @@
|
|
|
1
|
-
import textwrap
|
|
2
|
-
import unittest
|
|
3
|
-
|
|
4
|
-
from deepdiff import DeepDiff
|
|
5
|
-
|
|
6
|
-
from recce.models.types import ChangeStatus
|
|
7
|
-
from recce.util.breaking import parse_change_category
|
|
8
|
-
|
|
9
|
-
SOURCE_SCHEMA = {
|
|
10
|
-
"Customers": {"customer_id": "int", "a": "int", "b": "int", "c": "int", "d": "int"},
|
|
11
|
-
"Orders": {"order_id": "int", "customer_id": "int", "w": "int", "x": "int", "y": "int", "z": "int"},
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
def _parse_change_catgory(
|
|
16
|
-
original_sql,
|
|
17
|
-
modified_sql,
|
|
18
|
-
dialect=None,
|
|
19
|
-
):
|
|
20
|
-
return parse_change_category(
|
|
21
|
-
original_sql,
|
|
22
|
-
modified_sql,
|
|
23
|
-
old_schema=SOURCE_SCHEMA,
|
|
24
|
-
new_schema=SOURCE_SCHEMA,
|
|
25
|
-
dialect=dialect,
|
|
26
|
-
)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
def is_breaking_change(
|
|
30
|
-
original_sql,
|
|
31
|
-
modified_sql,
|
|
32
|
-
expected_changed_columns: dict[str, ChangeStatus] = None,
|
|
33
|
-
dialect=None,
|
|
34
|
-
):
|
|
35
|
-
result = _parse_change_catgory(
|
|
36
|
-
original_sql,
|
|
37
|
-
modified_sql,
|
|
38
|
-
dialect=dialect,
|
|
39
|
-
)
|
|
40
|
-
if result.category != "breaking":
|
|
41
|
-
return False
|
|
42
|
-
|
|
43
|
-
if expected_changed_columns is not None:
|
|
44
|
-
diff = DeepDiff(expected_changed_columns, result.columns, ignore_order=True)
|
|
45
|
-
if len(diff) > 0:
|
|
46
|
-
return False
|
|
47
|
-
|
|
48
|
-
return True
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
def is_partial_breaking_change(
|
|
52
|
-
original_sql,
|
|
53
|
-
modified_sql,
|
|
54
|
-
expected_changed_columns: dict[str, ChangeStatus] = None,
|
|
55
|
-
dialect=None,
|
|
56
|
-
):
|
|
57
|
-
result = _parse_change_catgory(
|
|
58
|
-
original_sql,
|
|
59
|
-
modified_sql,
|
|
60
|
-
dialect=dialect,
|
|
61
|
-
)
|
|
62
|
-
if result.category != "partial_breaking":
|
|
63
|
-
return False
|
|
64
|
-
|
|
65
|
-
if expected_changed_columns is not None:
|
|
66
|
-
diff = DeepDiff(expected_changed_columns, result.columns, ignore_order=True)
|
|
67
|
-
if len(diff) > 0:
|
|
68
|
-
return False
|
|
69
|
-
|
|
70
|
-
return True
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
def is_non_breaking_change(
|
|
74
|
-
original_sql,
|
|
75
|
-
modified_sql,
|
|
76
|
-
expected_changed_columns: dict[str, ChangeStatus] = None,
|
|
77
|
-
dialect=None,
|
|
78
|
-
):
|
|
79
|
-
result = _parse_change_catgory(
|
|
80
|
-
original_sql,
|
|
81
|
-
modified_sql,
|
|
82
|
-
dialect=dialect,
|
|
83
|
-
)
|
|
84
|
-
if result.category != "non_breaking":
|
|
85
|
-
return False
|
|
86
|
-
|
|
87
|
-
if expected_changed_columns is not None:
|
|
88
|
-
diff = DeepDiff(expected_changed_columns, result.columns, ignore_order=True)
|
|
89
|
-
if len(diff) > 0:
|
|
90
|
-
return False
|
|
91
|
-
|
|
92
|
-
return True
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
class BreakingChangeTest(unittest.TestCase):
|
|
96
|
-
def test_identical(self):
|
|
97
|
-
original_sql = """
|
|
98
|
-
select
|
|
99
|
-
a, b
|
|
100
|
-
from Customers
|
|
101
|
-
"""
|
|
102
|
-
modified_sql = """
|
|
103
|
-
select
|
|
104
|
-
a,
|
|
105
|
-
b
|
|
106
|
-
from Customers
|
|
107
|
-
"""
|
|
108
|
-
modified_sql2 = """
|
|
109
|
-
--- this is comment
|
|
110
|
-
select
|
|
111
|
-
a, --- this is comment
|
|
112
|
-
b --- this is comment
|
|
113
|
-
from Customers
|
|
114
|
-
"""
|
|
115
|
-
assert is_non_breaking_change(original_sql, modified_sql, {})
|
|
116
|
-
assert is_non_breaking_change(original_sql, modified_sql2, {})
|
|
117
|
-
assert is_non_breaking_change(original_sql, textwrap.dedent(modified_sql), {})
|
|
118
|
-
|
|
119
|
-
def test_table_diff(self):
|
|
120
|
-
original_sql = """
|
|
121
|
-
select
|
|
122
|
-
a, b
|
|
123
|
-
from Customers
|
|
124
|
-
"""
|
|
125
|
-
modified_sql = """
|
|
126
|
-
select
|
|
127
|
-
a,
|
|
128
|
-
b
|
|
129
|
-
from Orders
|
|
130
|
-
"""
|
|
131
|
-
assert is_breaking_change(original_sql, modified_sql, {"a": "modified", "b": "modified"})
|
|
132
|
-
|
|
133
|
-
def test_add_column(self):
|
|
134
|
-
original_sql = """
|
|
135
|
-
select
|
|
136
|
-
a
|
|
137
|
-
from Customers
|
|
138
|
-
"""
|
|
139
|
-
modified_sql = """
|
|
140
|
-
select
|
|
141
|
-
a, b
|
|
142
|
-
from Customers
|
|
143
|
-
"""
|
|
144
|
-
modified_sql2 = """
|
|
145
|
-
select
|
|
146
|
-
a, b as a2
|
|
147
|
-
from Customers
|
|
148
|
-
"""
|
|
149
|
-
modified_sql3 = """
|
|
150
|
-
select
|
|
151
|
-
a,
|
|
152
|
-
case when a > 100 then 1 else 0 end as a2
|
|
153
|
-
from Customers
|
|
154
|
-
"""
|
|
155
|
-
assert is_non_breaking_change(original_sql, modified_sql, {"b": "added"})
|
|
156
|
-
assert is_non_breaking_change(original_sql, modified_sql2, {"a2": "added"})
|
|
157
|
-
assert is_non_breaking_change(original_sql, modified_sql3, {"a2": "added"})
|
|
158
|
-
|
|
159
|
-
# by cte
|
|
160
|
-
original_sql = """
|
|
161
|
-
with cte as (
|
|
162
|
-
select
|
|
163
|
-
a
|
|
164
|
-
from Customers
|
|
165
|
-
)
|
|
166
|
-
select
|
|
167
|
-
a
|
|
168
|
-
from cte
|
|
169
|
-
"""
|
|
170
|
-
modified_sql = """
|
|
171
|
-
with cte as (
|
|
172
|
-
select
|
|
173
|
-
a, b
|
|
174
|
-
from Customers
|
|
175
|
-
)
|
|
176
|
-
select
|
|
177
|
-
a, b
|
|
178
|
-
from cte
|
|
179
|
-
"""
|
|
180
|
-
assert is_non_breaking_change(original_sql, modified_sql, {"b": "added"})
|
|
181
|
-
|
|
182
|
-
def test_rename_column(self):
|
|
183
|
-
original_sql = """
|
|
184
|
-
select
|
|
185
|
-
a
|
|
186
|
-
from Customers
|
|
187
|
-
"""
|
|
188
|
-
modified_sql = """
|
|
189
|
-
select
|
|
190
|
-
a as a1
|
|
191
|
-
from Customers
|
|
192
|
-
"""
|
|
193
|
-
assert is_partial_breaking_change(
|
|
194
|
-
original_sql,
|
|
195
|
-
modified_sql,
|
|
196
|
-
{
|
|
197
|
-
"a": "removed",
|
|
198
|
-
"a1": "added",
|
|
199
|
-
},
|
|
200
|
-
)
|
|
201
|
-
|
|
202
|
-
# by cte
|
|
203
|
-
original_sql = """
|
|
204
|
-
with cte as (
|
|
205
|
-
select
|
|
206
|
-
a,
|
|
207
|
-
b
|
|
208
|
-
from Customers
|
|
209
|
-
)
|
|
210
|
-
select
|
|
211
|
-
a
|
|
212
|
-
from cte
|
|
213
|
-
"""
|
|
214
|
-
modified_sql = """
|
|
215
|
-
with cte as (
|
|
216
|
-
select
|
|
217
|
-
a as a1,
|
|
218
|
-
b as b1
|
|
219
|
-
from Customers
|
|
220
|
-
)
|
|
221
|
-
select
|
|
222
|
-
a1
|
|
223
|
-
from cte
|
|
224
|
-
"""
|
|
225
|
-
assert is_partial_breaking_change(
|
|
226
|
-
original_sql,
|
|
227
|
-
modified_sql,
|
|
228
|
-
{
|
|
229
|
-
"a": "removed",
|
|
230
|
-
"a1": "added",
|
|
231
|
-
},
|
|
232
|
-
)
|
|
233
|
-
|
|
234
|
-
def test_remove_column(self):
|
|
235
|
-
original_sql = """
|
|
236
|
-
select
|
|
237
|
-
a,
|
|
238
|
-
b
|
|
239
|
-
from Customers
|
|
240
|
-
"""
|
|
241
|
-
modified_sql = """
|
|
242
|
-
select
|
|
243
|
-
b
|
|
244
|
-
from Customers
|
|
245
|
-
"""
|
|
246
|
-
assert is_partial_breaking_change(original_sql, modified_sql, {"a": "removed"})
|
|
247
|
-
|
|
248
|
-
def test_reorder_column(self):
|
|
249
|
-
original_sql = """
|
|
250
|
-
select
|
|
251
|
-
a,
|
|
252
|
-
b
|
|
253
|
-
from Customers
|
|
254
|
-
"""
|
|
255
|
-
modified_sql = """
|
|
256
|
-
select
|
|
257
|
-
b,
|
|
258
|
-
a
|
|
259
|
-
from Customers
|
|
260
|
-
"""
|
|
261
|
-
assert is_non_breaking_change(original_sql, modified_sql)
|
|
262
|
-
|
|
263
|
-
def test_modify_column(self):
|
|
264
|
-
alias = """
|
|
265
|
-
select
|
|
266
|
-
a as a2,
|
|
267
|
-
from Customers
|
|
268
|
-
"""
|
|
269
|
-
derived = """
|
|
270
|
-
select
|
|
271
|
-
a + 1 as a2,
|
|
272
|
-
from Customers
|
|
273
|
-
"""
|
|
274
|
-
derived2 = """
|
|
275
|
-
select
|
|
276
|
-
(a * b + c * d) as a2,
|
|
277
|
-
from Customers
|
|
278
|
-
"""
|
|
279
|
-
aggregate = """
|
|
280
|
-
select
|
|
281
|
-
count(a) as a2,
|
|
282
|
-
from Customers
|
|
283
|
-
"""
|
|
284
|
-
assert is_partial_breaking_change(alias, derived, {"a2": "modified"})
|
|
285
|
-
assert is_partial_breaking_change(derived, alias, {"a2": "modified"})
|
|
286
|
-
assert is_partial_breaking_change(derived, derived2, {"a2": "modified"})
|
|
287
|
-
assert is_breaking_change(alias, aggregate)
|
|
288
|
-
|
|
289
|
-
def test_aggrgation_function(self):
|
|
290
|
-
no_agg = """
|
|
291
|
-
select
|
|
292
|
-
a as a2,
|
|
293
|
-
from Customers
|
|
294
|
-
"""
|
|
295
|
-
|
|
296
|
-
agg = """
|
|
297
|
-
select
|
|
298
|
-
count(*) as a2,
|
|
299
|
-
from Customers
|
|
300
|
-
"""
|
|
301
|
-
|
|
302
|
-
agg2 = """
|
|
303
|
-
select
|
|
304
|
-
count(a) as a2,
|
|
305
|
-
from Customers
|
|
306
|
-
"""
|
|
307
|
-
|
|
308
|
-
agg3 = """
|
|
309
|
-
select
|
|
310
|
-
sum(a) as a2,
|
|
311
|
-
from Customers
|
|
312
|
-
"""
|
|
313
|
-
|
|
314
|
-
agg4 = """
|
|
315
|
-
select
|
|
316
|
-
sum(a+1) as a2,
|
|
317
|
-
from Customers
|
|
318
|
-
"""
|
|
319
|
-
|
|
320
|
-
# Because changes from non-aggregation to aggregation would affect the row count.
|
|
321
|
-
assert is_breaking_change(no_agg, agg)
|
|
322
|
-
assert is_breaking_change(agg, no_agg)
|
|
323
|
-
|
|
324
|
-
assert is_partial_breaking_change(agg, agg2, {"a2": "modified"})
|
|
325
|
-
assert is_partial_breaking_change(agg2, agg3, {"a2": "modified"})
|
|
326
|
-
assert is_partial_breaking_change(agg3, agg4, {"a2": "modified"})
|
|
327
|
-
|
|
328
|
-
def test_window_function(self):
|
|
329
|
-
no_win = """
|
|
330
|
-
SELECT
|
|
331
|
-
order_id,
|
|
332
|
-
customer_id,
|
|
333
|
-
x AS amount
|
|
334
|
-
FROM Orders;
|
|
335
|
-
"""
|
|
336
|
-
|
|
337
|
-
with_win = """
|
|
338
|
-
SELECT
|
|
339
|
-
order_id,
|
|
340
|
-
customer_id,
|
|
341
|
-
x AS amount,
|
|
342
|
-
SUM(x) OVER (PARTITION BY customer_id) AS customer_total
|
|
343
|
-
FROM Orders;
|
|
344
|
-
"""
|
|
345
|
-
|
|
346
|
-
with_win2 = """
|
|
347
|
-
SELECT
|
|
348
|
-
order_id,
|
|
349
|
-
customer_id,
|
|
350
|
-
x AS amount,
|
|
351
|
-
SUM(x+1) OVER (PARTITION BY customer_id) AS customer_total
|
|
352
|
-
FROM Orders;
|
|
353
|
-
"""
|
|
354
|
-
|
|
355
|
-
assert is_non_breaking_change(no_win, with_win, {"customer_total": "added"})
|
|
356
|
-
assert is_partial_breaking_change(with_win, no_win, {"customer_total": "removed"})
|
|
357
|
-
assert is_partial_breaking_change(with_win, with_win2, {"customer_total": "modified"})
|
|
358
|
-
|
|
359
|
-
def test_joins(self):
|
|
360
|
-
no_join = """
|
|
361
|
-
select
|
|
362
|
-
a,
|
|
363
|
-
b
|
|
364
|
-
from Customers as C
|
|
365
|
-
"""
|
|
366
|
-
|
|
367
|
-
with_join = """
|
|
368
|
-
select
|
|
369
|
-
a,
|
|
370
|
-
b
|
|
371
|
-
from Customers as C
|
|
372
|
-
join Orders as O on C.customer_id = O.customer_id
|
|
373
|
-
"""
|
|
374
|
-
with_join2 = """
|
|
375
|
-
select
|
|
376
|
-
a,
|
|
377
|
-
b,
|
|
378
|
-
x,
|
|
379
|
-
y
|
|
380
|
-
from Customers as C
|
|
381
|
-
join Orders as O on C.customer_id = O.customer_id
|
|
382
|
-
"""
|
|
383
|
-
with_join3 = """
|
|
384
|
-
select
|
|
385
|
-
a,
|
|
386
|
-
b,
|
|
387
|
-
x,
|
|
388
|
-
y
|
|
389
|
-
from Customers as C
|
|
390
|
-
join Orders as O on C.customer_id = O.customer_id and O.x > 1000
|
|
391
|
-
"""
|
|
392
|
-
|
|
393
|
-
assert is_breaking_change(no_join, with_join)
|
|
394
|
-
assert is_non_breaking_change(with_join, with_join2, {"x": "added", "y": "added"})
|
|
395
|
-
assert is_breaking_change(with_join, with_join3)
|
|
396
|
-
|
|
397
|
-
def test_outer_joins(self):
|
|
398
|
-
no_join = """
|
|
399
|
-
select
|
|
400
|
-
a,
|
|
401
|
-
b
|
|
402
|
-
from Customers as C
|
|
403
|
-
"""
|
|
404
|
-
|
|
405
|
-
with_inner_join = """
|
|
406
|
-
select
|
|
407
|
-
a,
|
|
408
|
-
b,
|
|
409
|
-
x,
|
|
410
|
-
y
|
|
411
|
-
from Customers as C
|
|
412
|
-
join Orders as O on C.customer_id = O.customer_id
|
|
413
|
-
"""
|
|
414
|
-
|
|
415
|
-
with_left_join = """
|
|
416
|
-
select
|
|
417
|
-
a,
|
|
418
|
-
b,
|
|
419
|
-
x,
|
|
420
|
-
y
|
|
421
|
-
from Customers as C
|
|
422
|
-
left join Orders as O on C.customer_id = O.customer_id
|
|
423
|
-
"""
|
|
424
|
-
|
|
425
|
-
with_right_join = """
|
|
426
|
-
select
|
|
427
|
-
a,
|
|
428
|
-
b,
|
|
429
|
-
x,
|
|
430
|
-
y
|
|
431
|
-
from Customers as C
|
|
432
|
-
right join Orders as O on C.customer_id = O.customer_id
|
|
433
|
-
"""
|
|
434
|
-
|
|
435
|
-
with_full_outer_join = """
|
|
436
|
-
select
|
|
437
|
-
a,
|
|
438
|
-
b,
|
|
439
|
-
x,
|
|
440
|
-
y
|
|
441
|
-
from Customers as C
|
|
442
|
-
full outer join Orders as O on C.customer_id = O.customer_id
|
|
443
|
-
"""
|
|
444
|
-
|
|
445
|
-
with_cross_join = """
|
|
446
|
-
select
|
|
447
|
-
a,
|
|
448
|
-
b,
|
|
449
|
-
x,
|
|
450
|
-
y
|
|
451
|
-
from Customers as C
|
|
452
|
-
cross join Orders as O
|
|
453
|
-
"""
|
|
454
|
-
|
|
455
|
-
assert is_breaking_change(with_inner_join, with_left_join)
|
|
456
|
-
assert is_breaking_change(with_inner_join, with_right_join)
|
|
457
|
-
assert is_breaking_change(with_inner_join, with_full_outer_join)
|
|
458
|
-
assert is_breaking_change(with_inner_join, with_cross_join)
|
|
459
|
-
|
|
460
|
-
# Currently, we don't support left join as partial breaking change.
|
|
461
|
-
assert is_breaking_change(no_join, with_left_join)
|
|
462
|
-
# assert is_non_breaking_change(no_join, with_left_join, {'x': 'added', 'y': 'added'})
|
|
463
|
-
|
|
464
|
-
def test_cte(self):
|
|
465
|
-
original = """
|
|
466
|
-
with A as (
|
|
467
|
-
select
|
|
468
|
-
customer_id,
|
|
469
|
-
a
|
|
470
|
-
from Customers
|
|
471
|
-
),
|
|
472
|
-
B as (
|
|
473
|
-
select
|
|
474
|
-
customer_id,
|
|
475
|
-
count(*) as order_count
|
|
476
|
-
from Orders
|
|
477
|
-
group by 1
|
|
478
|
-
)
|
|
479
|
-
select * from A join B on A.customer_id = B.customer_id
|
|
480
|
-
"""
|
|
481
|
-
modified1 = """
|
|
482
|
-
with A as (
|
|
483
|
-
select
|
|
484
|
-
customer_id,
|
|
485
|
-
a
|
|
486
|
-
from Customers
|
|
487
|
-
),
|
|
488
|
-
B as (
|
|
489
|
-
select
|
|
490
|
-
customer_id,
|
|
491
|
-
count(*) as order_count,
|
|
492
|
-
sum(w) as order_amount,
|
|
493
|
-
from Orders
|
|
494
|
-
group by 1
|
|
495
|
-
)
|
|
496
|
-
select * from A join B on A.customer_id = B.customer_id
|
|
497
|
-
"""
|
|
498
|
-
modified2 = """
|
|
499
|
-
with A as (
|
|
500
|
-
select
|
|
501
|
-
customer_id,
|
|
502
|
-
a
|
|
503
|
-
from Customers
|
|
504
|
-
),
|
|
505
|
-
B as (
|
|
506
|
-
select
|
|
507
|
-
customer_id
|
|
508
|
-
from Orders
|
|
509
|
-
group by 1
|
|
510
|
-
)
|
|
511
|
-
select * from A join B on A.customer_id = B.customer_id
|
|
512
|
-
"""
|
|
513
|
-
modified3 = """
|
|
514
|
-
with A as (
|
|
515
|
-
select
|
|
516
|
-
customer_id,
|
|
517
|
-
a
|
|
518
|
-
from Customers
|
|
519
|
-
),
|
|
520
|
-
B as (
|
|
521
|
-
select
|
|
522
|
-
customer_id,
|
|
523
|
-
count(w) as order_count,
|
|
524
|
-
from Orders
|
|
525
|
-
group by 1
|
|
526
|
-
)
|
|
527
|
-
select * from A join B on A.customer_id = B.customer_id
|
|
528
|
-
"""
|
|
529
|
-
assert is_non_breaking_change(original, modified1, {"order_amount": "added"})
|
|
530
|
-
assert is_partial_breaking_change(original, modified2, {"order_count": "removed"})
|
|
531
|
-
assert is_partial_breaking_change(original, modified3, {"order_count": "modified"})
|
|
532
|
-
|
|
533
|
-
def test_cte_rename(self):
|
|
534
|
-
original = """
|
|
535
|
-
with cte as (
|
|
536
|
-
select * from Customers
|
|
537
|
-
)
|
|
538
|
-
select * from cte
|
|
539
|
-
"""
|
|
540
|
-
modified = """
|
|
541
|
-
with cte2 as (
|
|
542
|
-
select * from Customers
|
|
543
|
-
)
|
|
544
|
-
select * from cte2
|
|
545
|
-
"""
|
|
546
|
-
|
|
547
|
-
# This would be treated as non breaking change after the optimizer.
|
|
548
|
-
assert is_partial_breaking_change(
|
|
549
|
-
original,
|
|
550
|
-
modified,
|
|
551
|
-
{"customer_id": "modified", "a": "modified", "b": "modified", "c": "modified", "d": "modified"},
|
|
552
|
-
)
|
|
553
|
-
|
|
554
|
-
def test_cte_with_select_star(self):
|
|
555
|
-
original_sql = """
|
|
556
|
-
with cte as (
|
|
557
|
-
select
|
|
558
|
-
a, b
|
|
559
|
-
from Customers
|
|
560
|
-
)
|
|
561
|
-
select
|
|
562
|
-
*
|
|
563
|
-
from cte
|
|
564
|
-
"""
|
|
565
|
-
modified_sql = """
|
|
566
|
-
with cte as (
|
|
567
|
-
select
|
|
568
|
-
a
|
|
569
|
-
from Customers
|
|
570
|
-
)
|
|
571
|
-
select
|
|
572
|
-
*
|
|
573
|
-
from cte
|
|
574
|
-
"""
|
|
575
|
-
assert is_partial_breaking_change(original_sql, modified_sql, {"b": "removed"})
|
|
576
|
-
modified_sql = """
|
|
577
|
-
with cte as (
|
|
578
|
-
select
|
|
579
|
-
a,b,c
|
|
580
|
-
from Customers
|
|
581
|
-
)
|
|
582
|
-
select
|
|
583
|
-
*
|
|
584
|
-
from cte
|
|
585
|
-
"""
|
|
586
|
-
assert not is_breaking_change(original_sql, modified_sql)
|
|
587
|
-
|
|
588
|
-
def test_cte_alias(self):
|
|
589
|
-
original = """
|
|
590
|
-
with O as (
|
|
591
|
-
select
|
|
592
|
-
customer_id,
|
|
593
|
-
count(*) as order_count
|
|
594
|
-
from Orders
|
|
595
|
-
group by 1
|
|
596
|
-
)
|
|
597
|
-
select
|
|
598
|
-
C.a,
|
|
599
|
-
C.a as a2,
|
|
600
|
-
C.c,
|
|
601
|
-
O.*
|
|
602
|
-
from Customers as C join O on C.customer_id = O.customer_id
|
|
603
|
-
"""
|
|
604
|
-
modified = """
|
|
605
|
-
with O as (
|
|
606
|
-
select
|
|
607
|
-
customer_id,
|
|
608
|
-
count(*) as order_count,
|
|
609
|
-
sum(w) as order_amount,
|
|
610
|
-
from Orders
|
|
611
|
-
group by 1
|
|
612
|
-
)
|
|
613
|
-
select
|
|
614
|
-
C.a,
|
|
615
|
-
C.a + 1 as a2,
|
|
616
|
-
C.b,
|
|
617
|
-
O.*
|
|
618
|
-
from Customers as C join O on C.customer_id = O.customer_id
|
|
619
|
-
"""
|
|
620
|
-
assert is_partial_breaking_change(
|
|
621
|
-
original, modified, {"a2": "modified", "b": "added", "c": "removed", "order_amount": "added"}
|
|
622
|
-
)
|
|
623
|
-
|
|
624
|
-
def test_where_change(self):
|
|
625
|
-
no_where = """
|
|
626
|
-
select
|
|
627
|
-
a
|
|
628
|
-
from Customers
|
|
629
|
-
"""
|
|
630
|
-
with_where = """
|
|
631
|
-
select
|
|
632
|
-
a
|
|
633
|
-
from Customers
|
|
634
|
-
where a > 100
|
|
635
|
-
"""
|
|
636
|
-
with_where2 = """
|
|
637
|
-
select
|
|
638
|
-
a
|
|
639
|
-
from Customers
|
|
640
|
-
where a > 101
|
|
641
|
-
"""
|
|
642
|
-
assert is_breaking_change(no_where, with_where)
|
|
643
|
-
assert is_breaking_change(with_where, with_where2)
|
|
644
|
-
|
|
645
|
-
def test_where_change_with_column_changes(self):
|
|
646
|
-
no_where = """
|
|
647
|
-
select
|
|
648
|
-
a,
|
|
649
|
-
b
|
|
650
|
-
from Customers
|
|
651
|
-
"""
|
|
652
|
-
with_where = """
|
|
653
|
-
select
|
|
654
|
-
a + 1 as a,
|
|
655
|
-
b as b2,
|
|
656
|
-
from Customers
|
|
657
|
-
where a > 100
|
|
658
|
-
"""
|
|
659
|
-
assert is_breaking_change(no_where, with_where, {"a": "modified", "b": "removed", "b2": "added"})
|
|
660
|
-
|
|
661
|
-
def test_where_source_column_change(self):
|
|
662
|
-
original_sql = """
|
|
663
|
-
with cte as (
|
|
664
|
-
select
|
|
665
|
-
a as a1
|
|
666
|
-
from Customers
|
|
667
|
-
)
|
|
668
|
-
select a1 from cte where a1 > 100
|
|
669
|
-
"""
|
|
670
|
-
modified_sql = """
|
|
671
|
-
with cte as (
|
|
672
|
-
select
|
|
673
|
-
a + 1 as a1
|
|
674
|
-
from Customers
|
|
675
|
-
)
|
|
676
|
-
select a1 from cte where a1 > 100
|
|
677
|
-
"""
|
|
678
|
-
assert is_breaking_change(original_sql, modified_sql)
|
|
679
|
-
|
|
680
|
-
def test_group_change(self):
|
|
681
|
-
original = """
|
|
682
|
-
select
|
|
683
|
-
a as k
|
|
684
|
-
from Customers
|
|
685
|
-
group by a
|
|
686
|
-
"""
|
|
687
|
-
modified = """
|
|
688
|
-
select
|
|
689
|
-
a + 1 as k
|
|
690
|
-
from Customers
|
|
691
|
-
group by a + 1
|
|
692
|
-
"""
|
|
693
|
-
assert is_breaking_change(original, modified)
|
|
694
|
-
|
|
695
|
-
def test_group_change_index(self):
|
|
696
|
-
original = """
|
|
697
|
-
select
|
|
698
|
-
a as k,
|
|
699
|
-
count(*) as c
|
|
700
|
-
from Customers
|
|
701
|
-
group by 1
|
|
702
|
-
"""
|
|
703
|
-
modified = """
|
|
704
|
-
select
|
|
705
|
-
a + 1 as k,
|
|
706
|
-
count(*) as c
|
|
707
|
-
from Customers
|
|
708
|
-
group by 1
|
|
709
|
-
"""
|
|
710
|
-
assert is_breaking_change(original, modified)
|
|
711
|
-
|
|
712
|
-
def test_group_source_column_change(self):
|
|
713
|
-
original_sql = """
|
|
714
|
-
with cte as (
|
|
715
|
-
select
|
|
716
|
-
a as a1
|
|
717
|
-
from Customers
|
|
718
|
-
)
|
|
719
|
-
select a1 from cte group by a1
|
|
720
|
-
"""
|
|
721
|
-
modified_sql = """
|
|
722
|
-
with cte as (
|
|
723
|
-
select
|
|
724
|
-
a + 1 as a1
|
|
725
|
-
from Customers
|
|
726
|
-
)
|
|
727
|
-
select a1 from cte group by a1
|
|
728
|
-
"""
|
|
729
|
-
assert is_breaking_change(original_sql, modified_sql)
|
|
730
|
-
|
|
731
|
-
def test_group_source_index_change(self):
|
|
732
|
-
original_sql = """
|
|
733
|
-
with cte as (
|
|
734
|
-
select
|
|
735
|
-
a as a1
|
|
736
|
-
from Customers
|
|
737
|
-
)
|
|
738
|
-
select a1 from cte group by 1
|
|
739
|
-
"""
|
|
740
|
-
modified_sql = """
|
|
741
|
-
with cte as (
|
|
742
|
-
select
|
|
743
|
-
a + 1 as a1
|
|
744
|
-
from Customers
|
|
745
|
-
)
|
|
746
|
-
select a1 from cte group by 1
|
|
747
|
-
"""
|
|
748
|
-
assert is_breaking_change(original_sql, modified_sql)
|
|
749
|
-
|
|
750
|
-
def test_having_change(self):
|
|
751
|
-
original = """
|
|
752
|
-
select
|
|
753
|
-
customer_id,
|
|
754
|
-
sum(x) as total_spent
|
|
755
|
-
from Orders
|
|
756
|
-
group by customer_id
|
|
757
|
-
having sum(x) > 1000;
|
|
758
|
-
"""
|
|
759
|
-
modified = """
|
|
760
|
-
select
|
|
761
|
-
customer_id,
|
|
762
|
-
sum(x) as total_spent
|
|
763
|
-
from Orders
|
|
764
|
-
group by customer_id
|
|
765
|
-
having sum(x) > 2000;
|
|
766
|
-
"""
|
|
767
|
-
assert is_breaking_change(original, modified)
|
|
768
|
-
|
|
769
|
-
def test_having_source_change(self):
|
|
770
|
-
original = """
|
|
771
|
-
with cte as (
|
|
772
|
-
select
|
|
773
|
-
customer_id,
|
|
774
|
-
x as amount
|
|
775
|
-
from Orders
|
|
776
|
-
)
|
|
777
|
-
select
|
|
778
|
-
customer_id,
|
|
779
|
-
sum(amount) as total_spent
|
|
780
|
-
from cte
|
|
781
|
-
group by customer_id
|
|
782
|
-
having sum(amount) > 1000
|
|
783
|
-
"""
|
|
784
|
-
modified = """
|
|
785
|
-
with cte as (
|
|
786
|
-
select
|
|
787
|
-
customer_id,
|
|
788
|
-
(x+1) as amount
|
|
789
|
-
from Orders
|
|
790
|
-
)
|
|
791
|
-
select
|
|
792
|
-
customer_id,
|
|
793
|
-
sum(amount) as total_spent
|
|
794
|
-
from cte
|
|
795
|
-
group by customer_id
|
|
796
|
-
having sum(amount) > 1000
|
|
797
|
-
"""
|
|
798
|
-
assert is_breaking_change(original, modified)
|
|
799
|
-
|
|
800
|
-
def test_having_select_change(self):
|
|
801
|
-
original = """
|
|
802
|
-
select
|
|
803
|
-
customer_id,
|
|
804
|
-
count(amount) as total_spent
|
|
805
|
-
from Orders
|
|
806
|
-
group by customer_id
|
|
807
|
-
having total_spent > 1000
|
|
808
|
-
"""
|
|
809
|
-
modified = """
|
|
810
|
-
select
|
|
811
|
-
customer_id,
|
|
812
|
-
sum(amount) as total_spent
|
|
813
|
-
from Orders
|
|
814
|
-
group by customer_id
|
|
815
|
-
having total_spent > 1000
|
|
816
|
-
"""
|
|
817
|
-
assert is_breaking_change(original, modified)
|
|
818
|
-
|
|
819
|
-
def test_order_change(self):
|
|
820
|
-
no_order = """
|
|
821
|
-
select
|
|
822
|
-
customer_id,
|
|
823
|
-
a
|
|
824
|
-
from Orders
|
|
825
|
-
"""
|
|
826
|
-
order1 = """
|
|
827
|
-
select
|
|
828
|
-
customer_id,
|
|
829
|
-
a
|
|
830
|
-
from Orders
|
|
831
|
-
order by customer_id;
|
|
832
|
-
"""
|
|
833
|
-
order2 = """
|
|
834
|
-
select
|
|
835
|
-
customer_id,
|
|
836
|
-
a
|
|
837
|
-
from Orders
|
|
838
|
-
order by customer_id desc
|
|
839
|
-
"""
|
|
840
|
-
order3 = """
|
|
841
|
-
select
|
|
842
|
-
customer_id,
|
|
843
|
-
a
|
|
844
|
-
from Orders
|
|
845
|
-
order by a
|
|
846
|
-
"""
|
|
847
|
-
assert is_breaking_change(no_order, order1)
|
|
848
|
-
assert is_breaking_change(order1, order2)
|
|
849
|
-
assert is_breaking_change(order1, order3)
|
|
850
|
-
|
|
851
|
-
def test_order_source_change(self):
|
|
852
|
-
original = """
|
|
853
|
-
with cte as (
|
|
854
|
-
select
|
|
855
|
-
customer_id,
|
|
856
|
-
x as amount
|
|
857
|
-
from Orders
|
|
858
|
-
)
|
|
859
|
-
select
|
|
860
|
-
customer_id,
|
|
861
|
-
amount
|
|
862
|
-
from cte
|
|
863
|
-
order by amount
|
|
864
|
-
"""
|
|
865
|
-
modified = """
|
|
866
|
-
with cte as (
|
|
867
|
-
select
|
|
868
|
-
customer_id,
|
|
869
|
-
(x+1) as amount
|
|
870
|
-
from Orders
|
|
871
|
-
)
|
|
872
|
-
select
|
|
873
|
-
customer_id,
|
|
874
|
-
amount
|
|
875
|
-
from cte
|
|
876
|
-
order by amount
|
|
877
|
-
"""
|
|
878
|
-
assert is_breaking_change(original, modified)
|
|
879
|
-
|
|
880
|
-
def test_order_select_change(self):
|
|
881
|
-
original = """
|
|
882
|
-
select
|
|
883
|
-
customer_id,
|
|
884
|
-
x as amount,
|
|
885
|
-
from Orders
|
|
886
|
-
order by amount
|
|
887
|
-
"""
|
|
888
|
-
modified = """
|
|
889
|
-
select
|
|
890
|
-
customer_id,
|
|
891
|
-
x + 1 as amount,
|
|
892
|
-
from Orders
|
|
893
|
-
order by amount
|
|
894
|
-
"""
|
|
895
|
-
assert is_breaking_change(original, modified)
|
|
896
|
-
|
|
897
|
-
def test_order_index_change(self):
|
|
898
|
-
original = """
|
|
899
|
-
select
|
|
900
|
-
customer_id,
|
|
901
|
-
x as amount,
|
|
902
|
-
from Orders
|
|
903
|
-
order by 2
|
|
904
|
-
"""
|
|
905
|
-
modified = """
|
|
906
|
-
select
|
|
907
|
-
customer_id,
|
|
908
|
-
x + 1 as amount,
|
|
909
|
-
from Orders
|
|
910
|
-
order by 2
|
|
911
|
-
"""
|
|
912
|
-
assert is_breaking_change(original, modified)
|
|
913
|
-
|
|
914
|
-
original = """
|
|
915
|
-
select
|
|
916
|
-
customer_id,
|
|
917
|
-
x as amount,
|
|
918
|
-
from Orders
|
|
919
|
-
order by 1
|
|
920
|
-
"""
|
|
921
|
-
modified = """
|
|
922
|
-
select
|
|
923
|
-
customer_id,
|
|
924
|
-
x + 1 as amount,
|
|
925
|
-
from Orders
|
|
926
|
-
order by 1
|
|
927
|
-
"""
|
|
928
|
-
assert is_partial_breaking_change(original, modified, {"amount": "modified"})
|
|
929
|
-
|
|
930
|
-
def test_limit(self):
|
|
931
|
-
no_limit = """
|
|
932
|
-
select
|
|
933
|
-
a
|
|
934
|
-
from Customers
|
|
935
|
-
"""
|
|
936
|
-
with_limit = """
|
|
937
|
-
select
|
|
938
|
-
a
|
|
939
|
-
from Customers
|
|
940
|
-
limit 100
|
|
941
|
-
"""
|
|
942
|
-
with_limit2 = """
|
|
943
|
-
select
|
|
944
|
-
a
|
|
945
|
-
from Customers
|
|
946
|
-
limit 101
|
|
947
|
-
"""
|
|
948
|
-
assert is_breaking_change(no_limit, with_limit)
|
|
949
|
-
assert is_breaking_change(with_limit, with_limit2)
|
|
950
|
-
|
|
951
|
-
def test_offset(self):
|
|
952
|
-
no_offset = """
|
|
953
|
-
select
|
|
954
|
-
a
|
|
955
|
-
from Customers
|
|
956
|
-
"""
|
|
957
|
-
with_offset = """
|
|
958
|
-
select
|
|
959
|
-
a
|
|
960
|
-
from Customers
|
|
961
|
-
offset 1
|
|
962
|
-
"""
|
|
963
|
-
with_offset2 = """
|
|
964
|
-
select
|
|
965
|
-
a
|
|
966
|
-
from Customers
|
|
967
|
-
offset 10
|
|
968
|
-
"""
|
|
969
|
-
assert is_breaking_change(no_offset, with_offset)
|
|
970
|
-
assert is_breaking_change(with_offset, with_offset2)
|
|
971
|
-
|
|
972
|
-
def test_count_function(self):
|
|
973
|
-
original = """
|
|
974
|
-
with cte as (
|
|
975
|
-
select a from Customers
|
|
976
|
-
)
|
|
977
|
-
select count(*) from cte
|
|
978
|
-
"""
|
|
979
|
-
modified = """
|
|
980
|
-
with cte as (
|
|
981
|
-
select a from Customers where a > 100
|
|
982
|
-
)
|
|
983
|
-
select count(*) as c from cte
|
|
984
|
-
"""
|
|
985
|
-
assert is_breaking_change(original, modified)
|
|
986
|
-
|
|
987
|
-
original = """
|
|
988
|
-
with cte as (
|
|
989
|
-
select a from Customers
|
|
990
|
-
)
|
|
991
|
-
select count(a) as c from cte
|
|
992
|
-
"""
|
|
993
|
-
modified = """
|
|
994
|
-
with cte as (
|
|
995
|
-
select a from Customers where a > 100
|
|
996
|
-
)
|
|
997
|
-
select count(a) as c from cte
|
|
998
|
-
"""
|
|
999
|
-
modified2 = """
|
|
1000
|
-
with cte as (
|
|
1001
|
-
select a+1 as a from Customers
|
|
1002
|
-
)
|
|
1003
|
-
select count(a) as c from cte
|
|
1004
|
-
"""
|
|
1005
|
-
|
|
1006
|
-
# Although we can mark it as partial breaking. However, in current implementation, we mark it as breaking
|
|
1007
|
-
# if any downstream is breaking.
|
|
1008
|
-
assert is_breaking_change(original, modified)
|
|
1009
|
-
|
|
1010
|
-
assert is_partial_breaking_change(original, modified2, {"c": "modified"})
|
|
1011
|
-
|
|
1012
|
-
def test_distinct_count_function(self):
|
|
1013
|
-
original = """
|
|
1014
|
-
select count(distinct a) as unique from cte
|
|
1015
|
-
"""
|
|
1016
|
-
modified = """
|
|
1017
|
-
select count(distinct (a+1)) as unique from cte
|
|
1018
|
-
"""
|
|
1019
|
-
assert is_partial_breaking_change(original, modified, {"unique": "modified"})
|
|
1020
|
-
|
|
1021
|
-
original = """
|
|
1022
|
-
with cte as (
|
|
1023
|
-
select a from Customers
|
|
1024
|
-
)
|
|
1025
|
-
select count(distinct a) as unique from cte
|
|
1026
|
-
"""
|
|
1027
|
-
modified = """
|
|
1028
|
-
with cte as (
|
|
1029
|
-
select a + 1 as a from Customers
|
|
1030
|
-
)
|
|
1031
|
-
select count(distinct a) as unique from cte
|
|
1032
|
-
"""
|
|
1033
|
-
assert is_partial_breaking_change(original, modified, {"unique": "modified"})
|
|
1034
|
-
|
|
1035
|
-
def test_disctinct_function(self):
|
|
1036
|
-
original = """
|
|
1037
|
-
with cte as (
|
|
1038
|
-
select a, b from Customers
|
|
1039
|
-
)
|
|
1040
|
-
select distinct a, b from cte
|
|
1041
|
-
"""
|
|
1042
|
-
modified1 = """
|
|
1043
|
-
with cte as (
|
|
1044
|
-
select a, b from Customers where a > 100
|
|
1045
|
-
)
|
|
1046
|
-
select distinct a, b from cte
|
|
1047
|
-
"""
|
|
1048
|
-
modified2 = """
|
|
1049
|
-
with cte as (
|
|
1050
|
-
select a+1 as a, b from Customers
|
|
1051
|
-
)
|
|
1052
|
-
select distinct a, b from cte
|
|
1053
|
-
"""
|
|
1054
|
-
modified_removed = """
|
|
1055
|
-
with cte as (
|
|
1056
|
-
select a, b from Customers
|
|
1057
|
-
)
|
|
1058
|
-
select distinct a from cte
|
|
1059
|
-
"""
|
|
1060
|
-
assert is_breaking_change(original, modified1)
|
|
1061
|
-
assert is_breaking_change(original, modified2)
|
|
1062
|
-
assert is_breaking_change(original, modified_removed)
|
|
1063
|
-
assert is_breaking_change(modified_removed, original)
|
|
1064
|
-
|
|
1065
|
-
def test_udtf_function(self):
|
|
1066
|
-
no_udtf = """
|
|
1067
|
-
select
|
|
1068
|
-
a
|
|
1069
|
-
from Customers
|
|
1070
|
-
"""
|
|
1071
|
-
with_udtf = """
|
|
1072
|
-
select
|
|
1073
|
-
a,
|
|
1074
|
-
unnest(a) as b
|
|
1075
|
-
from Customers
|
|
1076
|
-
"""
|
|
1077
|
-
with_udtf2 = """
|
|
1078
|
-
select
|
|
1079
|
-
a,
|
|
1080
|
-
unnest(a+1) as b
|
|
1081
|
-
from Customers
|
|
1082
|
-
"""
|
|
1083
|
-
assert is_breaking_change(no_udtf, with_udtf)
|
|
1084
|
-
assert is_breaking_change(with_udtf, no_udtf)
|
|
1085
|
-
assert is_breaking_change(with_udtf, with_udtf2)
|
|
1086
|
-
|
|
1087
|
-
original = """
|
|
1088
|
-
with cte as (
|
|
1089
|
-
select
|
|
1090
|
-
a
|
|
1091
|
-
from Customers
|
|
1092
|
-
)
|
|
1093
|
-
select unnest(a) as a2 from cte
|
|
1094
|
-
"""
|
|
1095
|
-
modified = """
|
|
1096
|
-
with cte as (
|
|
1097
|
-
select
|
|
1098
|
-
a + 1 as a
|
|
1099
|
-
from Customers
|
|
1100
|
-
)
|
|
1101
|
-
select unnest(a) as a2 from cte
|
|
1102
|
-
"""
|
|
1103
|
-
assert is_breaking_change(original, modified)
|
|
1104
|
-
|
|
1105
|
-
def test_set_operations(self):
|
|
1106
|
-
union1 = """
|
|
1107
|
-
select a from Customers
|
|
1108
|
-
union
|
|
1109
|
-
select a from Customers
|
|
1110
|
-
"""
|
|
1111
|
-
union2 = """
|
|
1112
|
-
select a + 1 as a from Customers
|
|
1113
|
-
union
|
|
1114
|
-
select a from Customers
|
|
1115
|
-
"""
|
|
1116
|
-
union3 = """
|
|
1117
|
-
select a,b from Customers
|
|
1118
|
-
union
|
|
1119
|
-
select a,b from Customers
|
|
1120
|
-
"""
|
|
1121
|
-
assert is_partial_breaking_change(union1, union2, {"a": "modified"})
|
|
1122
|
-
assert is_partial_breaking_change(union2, union1, {"a": "modified"})
|
|
1123
|
-
assert is_non_breaking_change(union1, union3, {"b": "added"})
|
|
1124
|
-
assert is_partial_breaking_change(union3, union1, {"b": "removed"})
|
|
1125
|
-
|
|
1126
|
-
union1 = """
|
|
1127
|
-
select a from Customers
|
|
1128
|
-
union
|
|
1129
|
-
select a from Customers
|
|
1130
|
-
union
|
|
1131
|
-
select a from Customers
|
|
1132
|
-
"""
|
|
1133
|
-
union2 = """
|
|
1134
|
-
select a from Customers
|
|
1135
|
-
union
|
|
1136
|
-
select a + 1 as a from Customers
|
|
1137
|
-
union
|
|
1138
|
-
select a + 2 as a from Customers
|
|
1139
|
-
"""
|
|
1140
|
-
union3 = """
|
|
1141
|
-
select a,b from Customers
|
|
1142
|
-
union
|
|
1143
|
-
select a,b from Customers
|
|
1144
|
-
union
|
|
1145
|
-
select a,b from Customers
|
|
1146
|
-
"""
|
|
1147
|
-
assert is_partial_breaking_change(union1, union2, {"a": "modified"})
|
|
1148
|
-
assert is_partial_breaking_change(union2, union1, {"a": "modified"})
|
|
1149
|
-
assert is_non_breaking_change(union1, union3, {"b": "added"})
|
|
1150
|
-
assert is_partial_breaking_change(union3, union1, {"b": "removed"})
|
|
1151
|
-
|
|
1152
|
-
def test_union_all(self):
|
|
1153
|
-
union1 = """
|
|
1154
|
-
select a from Customers
|
|
1155
|
-
union all
|
|
1156
|
-
select a from Customers
|
|
1157
|
-
"""
|
|
1158
|
-
union2 = """
|
|
1159
|
-
select a + 1 as a from Customers
|
|
1160
|
-
union all
|
|
1161
|
-
select a from Customers
|
|
1162
|
-
"""
|
|
1163
|
-
union3 = """
|
|
1164
|
-
select a,b from Customers
|
|
1165
|
-
union all
|
|
1166
|
-
select a,b from Customers
|
|
1167
|
-
"""
|
|
1168
|
-
assert is_partial_breaking_change(union1, union2, {"a": "modified"})
|
|
1169
|
-
assert is_partial_breaking_change(union2, union1, {"a": "modified"})
|
|
1170
|
-
assert is_non_breaking_change(union1, union3, {"b": "added"})
|
|
1171
|
-
assert is_partial_breaking_change(union3, union1, {"b": "removed"})
|
|
1172
|
-
|
|
1173
|
-
def test_cte_recursive(self):
|
|
1174
|
-
original = """
|
|
1175
|
-
with recursive cte as (
|
|
1176
|
-
select a, b from Customers
|
|
1177
|
-
union all
|
|
1178
|
-
select a, b from Customers
|
|
1179
|
-
where a < 100
|
|
1180
|
-
)
|
|
1181
|
-
select * from cte
|
|
1182
|
-
"""
|
|
1183
|
-
modified = """
|
|
1184
|
-
with recursive cte as (
|
|
1185
|
-
select a + 1 as a, b from Customers
|
|
1186
|
-
union all
|
|
1187
|
-
select a, b from Customers
|
|
1188
|
-
where a < 100
|
|
1189
|
-
)
|
|
1190
|
-
select * from cte
|
|
1191
|
-
"""
|
|
1192
|
-
modified2 = """
|
|
1193
|
-
with recursive cte as (
|
|
1194
|
-
select a + 1 as a, b from Customers
|
|
1195
|
-
union all
|
|
1196
|
-
select a, b from Customers
|
|
1197
|
-
where a < 200
|
|
1198
|
-
)
|
|
1199
|
-
select * from cte
|
|
1200
|
-
"""
|
|
1201
|
-
assert is_partial_breaking_change(original, modified, {"a": "modified"})
|
|
1202
|
-
assert is_breaking_change(original, modified2)
|
|
1203
|
-
|
|
1204
|
-
def test_subquery(self):
|
|
1205
|
-
original = """
|
|
1206
|
-
select * from (
|
|
1207
|
-
select a from Customers
|
|
1208
|
-
) as t
|
|
1209
|
-
"""
|
|
1210
|
-
modified1 = """
|
|
1211
|
-
select * as a from (
|
|
1212
|
-
select a + 1 as a from Customers
|
|
1213
|
-
) as t
|
|
1214
|
-
"""
|
|
1215
|
-
modified2 = """
|
|
1216
|
-
select * as a from (
|
|
1217
|
-
select a from Customers where b > 100
|
|
1218
|
-
) as t
|
|
1219
|
-
"""
|
|
1220
|
-
modified3 = """
|
|
1221
|
-
select * from (
|
|
1222
|
-
select a from Customers
|
|
1223
|
-
) as q
|
|
1224
|
-
"""
|
|
1225
|
-
added = """
|
|
1226
|
-
select * from (
|
|
1227
|
-
select a,b from Customers
|
|
1228
|
-
) as t
|
|
1229
|
-
"""
|
|
1230
|
-
assert is_partial_breaking_change(original, modified1, {"a": "modified"})
|
|
1231
|
-
assert is_breaking_change(original, modified2)
|
|
1232
|
-
assert is_partial_breaking_change(original, modified3, {"a": "modified"})
|
|
1233
|
-
assert is_non_breaking_change(original, added, {"b": "added"})
|
|
1234
|
-
assert is_partial_breaking_change(added, original, {"b": "removed"})
|
|
1235
|
-
|
|
1236
|
-
def test_subquery_rename(self):
|
|
1237
|
-
original = """
|
|
1238
|
-
select * from (
|
|
1239
|
-
select a from Customers
|
|
1240
|
-
) as t
|
|
1241
|
-
"""
|
|
1242
|
-
modified = """
|
|
1243
|
-
select * from (
|
|
1244
|
-
select a from Customers
|
|
1245
|
-
) as t2
|
|
1246
|
-
"""
|
|
1247
|
-
|
|
1248
|
-
# This would be treated as non breaking change after the optimizer.
|
|
1249
|
-
assert is_partial_breaking_change(original, modified, {"a": "modified"})
|
|
1250
|
-
|
|
1251
|
-
def test_subquery_in_filter(self):
|
|
1252
|
-
original = """
|
|
1253
|
-
select
|
|
1254
|
-
customer_id,
|
|
1255
|
-
a
|
|
1256
|
-
from Customers
|
|
1257
|
-
where a > (
|
|
1258
|
-
select avg(a) from Customers
|
|
1259
|
-
)
|
|
1260
|
-
"""
|
|
1261
|
-
modified = """
|
|
1262
|
-
select
|
|
1263
|
-
customer_id,
|
|
1264
|
-
a
|
|
1265
|
-
from Customers
|
|
1266
|
-
where a > (
|
|
1267
|
-
select avg(a) + 1 from Customers
|
|
1268
|
-
)
|
|
1269
|
-
"""
|
|
1270
|
-
assert is_breaking_change(original, modified)
|
|
1271
|
-
|
|
1272
|
-
def test_no_schema(self):
|
|
1273
|
-
original = """
|
|
1274
|
-
with source (
|
|
1275
|
-
select * from Payments
|
|
1276
|
-
),
|
|
1277
|
-
renamed (
|
|
1278
|
-
select
|
|
1279
|
-
*
|
|
1280
|
-
from source
|
|
1281
|
-
)
|
|
1282
|
-
select * from renamed
|
|
1283
|
-
"""
|
|
1284
|
-
|
|
1285
|
-
added = """
|
|
1286
|
-
with source (
|
|
1287
|
-
select * from Payments
|
|
1288
|
-
),
|
|
1289
|
-
renamed (
|
|
1290
|
-
select
|
|
1291
|
-
*,
|
|
1292
|
-
a as a1
|
|
1293
|
-
from source
|
|
1294
|
-
)
|
|
1295
|
-
select * from renamed
|
|
1296
|
-
"""
|
|
1297
|
-
assert is_non_breaking_change(original, added, {"a1": "added"})
|
|
1298
|
-
assert is_partial_breaking_change(added, original, {"a1": "removed"})
|
|
1299
|
-
|
|
1300
|
-
original = """
|
|
1301
|
-
with source (
|
|
1302
|
-
select * from Payments
|
|
1303
|
-
),
|
|
1304
|
-
renamed (
|
|
1305
|
-
select
|
|
1306
|
-
*
|
|
1307
|
-
from source
|
|
1308
|
-
)
|
|
1309
|
-
select * from source
|
|
1310
|
-
"""
|
|
1311
|
-
|
|
1312
|
-
added_no_use = """
|
|
1313
|
-
with source (
|
|
1314
|
-
select * from Payments
|
|
1315
|
-
),
|
|
1316
|
-
renamed (
|
|
1317
|
-
select
|
|
1318
|
-
*,
|
|
1319
|
-
a as a1
|
|
1320
|
-
from source
|
|
1321
|
-
)
|
|
1322
|
-
select * from source
|
|
1323
|
-
"""
|
|
1324
|
-
assert is_non_breaking_change(original, added_no_use, {})
|
|
1325
|
-
|
|
1326
|
-
def test_non_sql(self):
|
|
1327
|
-
malformed1 = """
|
|
1328
|
-
select
|
|
1329
|
-
a
|
|
1330
|
-
from
|
|
1331
|
-
"""
|
|
1332
|
-
|
|
1333
|
-
malformed2 = """
|
|
1334
|
-
selects
|
|
1335
|
-
a
|
|
1336
|
-
from Customers
|
|
1337
|
-
"""
|
|
1338
|
-
assert parse_change_category(malformed1, malformed2).category == "unknown"
|
|
1339
|
-
|
|
1340
|
-
def test_dialect(self):
|
|
1341
|
-
original_sql = """
|
|
1342
|
-
SELECT
|
|
1343
|
-
a
|
|
1344
|
-
FROM Customers
|
|
1345
|
-
"""
|
|
1346
|
-
modified_sql = """
|
|
1347
|
-
SELECT
|
|
1348
|
-
a,
|
|
1349
|
-
b,
|
|
1350
|
-
FROM Customers
|
|
1351
|
-
"""
|
|
1352
|
-
|
|
1353
|
-
assert is_non_breaking_change(original_sql, modified_sql, dialect=None)
|
|
1354
|
-
assert is_non_breaking_change(original_sql, modified_sql, dialect="xyz")
|
|
1355
|
-
for dialect in ["snowflake", "bigquery", "redshift", "duckdb"]:
|
|
1356
|
-
assert is_non_breaking_change(original_sql, modified_sql, dialect=dialect)
|
|
1357
|
-
|
|
1358
|
-
def test_pr42(self):
|
|
1359
|
-
original_sql = """
|
|
1360
|
-
with source as (
|
|
1361
|
-
select * from Customers
|
|
1362
|
-
),
|
|
1363
|
-
renamed as (
|
|
1364
|
-
select
|
|
1365
|
-
id as order_id,
|
|
1366
|
-
user_id as customer_id,
|
|
1367
|
-
order_date,
|
|
1368
|
-
status,
|
|
1369
|
-
from source
|
|
1370
|
-
)
|
|
1371
|
-
|
|
1372
|
-
select * from renamed
|
|
1373
|
-
"""
|
|
1374
|
-
modified_sql = """
|
|
1375
|
-
with source as (
|
|
1376
|
-
select * from Customers
|
|
1377
|
-
),
|
|
1378
|
-
renamed as (
|
|
1379
|
-
select
|
|
1380
|
-
id as order_id,
|
|
1381
|
-
user_id as customer_id,
|
|
1382
|
-
order_date,
|
|
1383
|
-
status,
|
|
1384
|
-
status = 'completed' as is_closed
|
|
1385
|
-
from source
|
|
1386
|
-
)
|
|
1387
|
-
select *,
|
|
1388
|
-
|
|
1389
|
-
from renamed
|
|
1390
|
-
"""
|
|
1391
|
-
assert is_non_breaking_change(original_sql, modified_sql)
|
|
1392
|
-
|
|
1393
|
-
def test_pr44(self):
|
|
1394
|
-
original_sql = """
|
|
1395
|
-
with source as (
|
|
1396
|
-
select * from raw_payments
|
|
1397
|
-
),
|
|
1398
|
-
renamed as (
|
|
1399
|
-
|
|
1400
|
-
select
|
|
1401
|
-
id as payment_id,
|
|
1402
|
-
order_id,
|
|
1403
|
-
payment_method,
|
|
1404
|
-
-- `amount` is currently stored in cents, so we convert it to dollars
|
|
1405
|
-
amount / 100 as amount
|
|
1406
|
-
from source
|
|
1407
|
-
)
|
|
1408
|
-
|
|
1409
|
-
select * from renamed
|
|
1410
|
-
"""
|
|
1411
|
-
modified_sql = """
|
|
1412
|
-
with source as (
|
|
1413
|
-
select * from raw_payments
|
|
1414
|
-
),
|
|
1415
|
-
renamed as (
|
|
1416
|
-
select
|
|
1417
|
-
id as payment_id,
|
|
1418
|
-
order_id,
|
|
1419
|
-
payment_method,
|
|
1420
|
-
-- `amount` is currently stored in cents, so we convert it to dollars
|
|
1421
|
-
amount / 100 as amount,
|
|
1422
|
-
payment_method == 'coupon' as is_promotion
|
|
1423
|
-
from source
|
|
1424
|
-
)
|
|
1425
|
-
select * from renamed
|
|
1426
|
-
"""
|
|
1427
|
-
assert is_non_breaking_change(original_sql, modified_sql, {"is_promotion": "added"})
|