ripple-sql 0.1.8__tar.gz → 0.1.9__tar.gz
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.
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/CHANGELOG.md +7 -1
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/PKG-INFO +3 -3
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/README.md +2 -2
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/pyproject.toml +1 -1
- ripple_sql-0.1.9/src/ripple/check_file.py +627 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/cli.py +27 -23
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/loaders/dbt_config.py +17 -8
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/loaders/identity.py +41 -10
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/loaders/types.py +3 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/project.py +9 -1
- ripple_sql-0.1.8/src/ripple/check_file.py +0 -336
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/.gitignore +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/LICENSE +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/__init__.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/answer.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/answer_page.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/cache.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/ci.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/ci_signature.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/doctor.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/__init__.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/budget.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/column_lineage.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/column_ref.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/cte_tracing.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/dependencies.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/dialect.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/dispatch.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/extraction.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/generators.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/jinja.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/json_sources.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/macro_source.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/pipeline.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/preprocess.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/safe_gen.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/schema_qualification.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/scope.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/select_sources.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/sql_script.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/statement.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/tech_debt.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/tsql_catalog.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/tsql_scalar_vars.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/tsql_tvf.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/tsql_xml.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/types.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/unused_deps.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/engine/validation.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/graph.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/home.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/loaders/__init__.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/loaders/dbt.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/loaders/sidecar.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/loaders/sqldir.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/lookml.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/mcp_server.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/names.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/py.typed +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/render.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/render_shims.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/schemas.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/semantic.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/server.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/sourcefiles.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/star_resolution.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/static/answer.css +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/static/answer.html +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/static/answer_twin.js +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/static/explore.js +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/static/find.js +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/static/focus.js +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/usage/__init__.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/usage/cli.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/usage/collect.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/usage/discover.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/usage/ingest.py +0 -0
- {ripple_sql-0.1.8 → ripple_sql-0.1.9}/src/ripple/usage/report.py +0 -0
|
@@ -6,6 +6,11 @@ Notable changes to Ripple. The format follows
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.1.9] - 2026-09-15
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- `ripple check-file` no longer needs the table's name in the common case. A file binds to the table its own columns name when they say it clearly: at least two of them are one table's, they are most of the file's columns, and no other table matches as many ("matched by 4 of 5 column names"). `--source` takes the bare table name when one schema has it (`--source vendor_feed`); a name two schemas share is refused with both spellings. When two tables fit a file equally, or none does, the command lists the tables with declared columns and stops with exit 2, never picking one. `--source` and a declared `files:` pattern still come first. A review of the command's edge cases also fixed: a column read only in a where clause or a join now counts as read; a reader the graph only sees through select star counts instead of vanishing; long chains are counted whole; an xlsx is read by the workbook's own sheet order, streamed no further than its first row, with rich text joined and empty cells kept as positions; tab-separated `.txt` and semicolon `.csv` files are read by their delimiter; a file that is not UTF-8 asks for `--encoding`; an unclosed quote, a duplicated header name, a DOCTYPE in the XML, a broken xlsx part, a pyarrow older than 14.0.1 and a broken `ripple.yml` are each a plain message with exit 2; a folder pattern (`incoming/*.csv`) matches the file's path; two patterns that name two tables are refused; `--source` never reads the pattern map; a missing file, a folder, and a project that cannot load give the same JSON shape as any other failure.
|
|
13
|
+
|
|
9
14
|
## [0.1.8] - 2026-09-15
|
|
10
15
|
|
|
11
16
|
### Added
|
|
@@ -270,7 +275,8 @@ First public release.
|
|
|
270
275
|
### Removed
|
|
271
276
|
- The dark whole-graph canvas that `ripple serve` used to open (`static/index.html`). Every surface now draws one answer.
|
|
272
277
|
|
|
273
|
-
[Unreleased]: https://github.com/bteh/ripple/compare/v0.1.
|
|
278
|
+
[Unreleased]: https://github.com/bteh/ripple/compare/v0.1.9...HEAD
|
|
279
|
+
[0.1.9]: https://github.com/bteh/ripple/releases/tag/v0.1.9
|
|
274
280
|
[0.1.8]: https://github.com/bteh/ripple/releases/tag/v0.1.8
|
|
275
281
|
[0.1.7]: https://github.com/bteh/ripple/releases/tag/v0.1.7
|
|
276
282
|
[0.1.6]: https://github.com/bteh/ripple/releases/tag/v0.1.6
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: ripple-sql
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.9
|
|
4
4
|
Summary: Offline column-level SQL lineage. See what breaks before you merge.
|
|
5
5
|
Project-URL: Homepage, https://github.com/bteh/ripple
|
|
6
6
|
Project-URL: Repository, https://github.com/bteh/ripple
|
|
@@ -240,7 +240,7 @@ Stop: 2 columns that 4 models read are missing from this file. (exit 1)
|
|
|
240
240
|
|
|
241
241
|
The first line and the last are the same sentence, so the vendor's screenshot and the engineer's scrolled terminal both end on the verdict. Exit 0 means nothing downstream changes (a new column nobody reads is fine), 1 means something breaks, 2 means the check could not run. Header only: no data row is read and nothing leaves the machine.
|
|
242
242
|
|
|
243
|
-
The file finds its table
|
|
243
|
+
The file finds its table by its own columns when they say it clearly (most of them belong to one table and no other table comes close: "matched by 4 of 5 column names"), by `--source vendor_feed` (the bare table name is enough when one schema has it), or by a pattern the project declares once:
|
|
244
244
|
|
|
245
245
|
```yaml
|
|
246
246
|
sources:
|
|
@@ -255,7 +255,7 @@ sources:
|
|
|
255
255
|
- name: customer_name
|
|
256
256
|
```
|
|
257
257
|
|
|
258
|
-
A plain SQL folder keeps the same map in `ripple.yml` (`files: {"vendor_feed_*.csv": raw.vendor_feed}`). The table's declared columns are the contract: `columns:` in sources.yml, a seed, or a list from `ripple ingest-schema`. Reads csv, tsv, xlsx and parquet (parquet needs pyarrow
|
|
258
|
+
A plain SQL folder keeps the same map in `ripple.yml` (`files: {"vendor_feed_*.csv": raw.vendor_feed}`). When two tables fit the file equally, or none does, the command lists the tables it can check and stops with exit 2 rather than pick one. The table's declared columns are the contract: `columns:` in sources.yml, a seed, or a list from `ripple ingest-schema`. Reads csv, tsv, xlsx and parquet (parquet needs pyarrow 14.0.1 or newer). A file that is not UTF-8 takes `--encoding cp1252`. `--json` carries the same facts for an ingest job, in the same shape whether the check ran or could not.
|
|
259
259
|
|
|
260
260
|
## Bring your query history (optional)
|
|
261
261
|
|
|
@@ -200,7 +200,7 @@ Stop: 2 columns that 4 models read are missing from this file. (exit 1)
|
|
|
200
200
|
|
|
201
201
|
The first line and the last are the same sentence, so the vendor's screenshot and the engineer's scrolled terminal both end on the verdict. Exit 0 means nothing downstream changes (a new column nobody reads is fine), 1 means something breaks, 2 means the check could not run. Header only: no data row is read and nothing leaves the machine.
|
|
202
202
|
|
|
203
|
-
The file finds its table
|
|
203
|
+
The file finds its table by its own columns when they say it clearly (most of them belong to one table and no other table comes close: "matched by 4 of 5 column names"), by `--source vendor_feed` (the bare table name is enough when one schema has it), or by a pattern the project declares once:
|
|
204
204
|
|
|
205
205
|
```yaml
|
|
206
206
|
sources:
|
|
@@ -215,7 +215,7 @@ sources:
|
|
|
215
215
|
- name: customer_name
|
|
216
216
|
```
|
|
217
217
|
|
|
218
|
-
A plain SQL folder keeps the same map in `ripple.yml` (`files: {"vendor_feed_*.csv": raw.vendor_feed}`). The table's declared columns are the contract: `columns:` in sources.yml, a seed, or a list from `ripple ingest-schema`. Reads csv, tsv, xlsx and parquet (parquet needs pyarrow
|
|
218
|
+
A plain SQL folder keeps the same map in `ripple.yml` (`files: {"vendor_feed_*.csv": raw.vendor_feed}`). When two tables fit the file equally, or none does, the command lists the tables it can check and stops with exit 2 rather than pick one. The table's declared columns are the contract: `columns:` in sources.yml, a seed, or a list from `ripple ingest-schema`. Reads csv, tsv, xlsx and parquet (parquet needs pyarrow 14.0.1 or newer). A file that is not UTF-8 takes `--encoding cp1252`. `--json` carries the same facts for an ingest job, in the same shape whether the check ran or could not.
|
|
219
219
|
|
|
220
220
|
## Bring your query history (optional)
|
|
221
221
|
|