jade-sql 0.7.0 → 0.9.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.
- checksums.yaml +4 -4
- data/README.md +16 -10
- data/docs/building.md +411 -113
- data/docs/running.md +103 -18
- data/exe/jade-sql +37 -9
- data/lib/jade-sql/bin/generate_schema.rb +702 -44
- data/lib/jade-sql/compiler/assignable.rb +146 -0
- data/lib/jade-sql/compiler/columns.rb +220 -0
- data/lib/jade-sql/compiler/errors.rb +82 -0
- data/lib/jade-sql/compiler.rb +32 -0
- data/lib/jade-sql/runtime.rb +74 -23
- data/lib/jade-sql/schema_drift.rb +115 -0
- data/lib/jade-sql/sql/expr.jd +65 -0
- data/lib/jade-sql/sql/json.jd +154 -0
- data/lib/jade-sql/sql/query.jd +309 -93
- data/lib/jade-sql/sql/write.jd +618 -0
- data/lib/jade-sql/sql.jd +389 -103
- data/lib/jade-sql/tasks.rake +41 -8
- data/lib/jade-sql/version.rb +1 -1
- data/lib/jade-sql.rb +92 -14
- metadata +15 -8
- data/lib/jade-sql/sql/mutation.jd +0 -464
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8a1a8c1496c50e9d5ddc41779759904608bd05c8b92a19e2c7a4be8434d0c0af
|
|
4
|
+
data.tar.gz: 4dae8fec72bcf27bf3f0dca7de137173e0edc96cdeefe4423be258f04862ea4a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b82de8f2b0d3b8286235a6387aed031c32df9303ea7adc7ae1413f402d328fa7da8a6bd9262ba188c3920b6a79409c4fd597cc4250ed356f5304cc4a19ca0b11
|
|
7
|
+
data.tar.gz: d65bea1279860d61c7c1d321fdaf3c352797bf0470a124ade49769fc697c745053d417d535ee394329f6fea003857d391bcf98df9d199a01269d095a21bac219
|
data/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/agustinrhcp/jade-sql/actions/workflows/ci.yml)
|
|
4
4
|
|
|
5
|
-
Type-safe SQL for Jade. Builds queries and
|
|
5
|
+
Type-safe SQL for Jade. Builds queries and writes from a generated
|
|
6
6
|
schema, renders them to `(String, List(Value))`, and runs them against
|
|
7
7
|
ActiveRecord via a Task port that auto-decodes rows into typed Jade
|
|
8
8
|
structs.
|
|
@@ -24,22 +24,28 @@ To execute queries at runtime, opt into the AR-backed task port:
|
|
|
24
24
|
require 'jade-sql/runtime'
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
To get the rake
|
|
27
|
+
To get the rake tasks for schema generation:
|
|
28
28
|
|
|
29
29
|
```ruby
|
|
30
30
|
# Rakefile (or lib/tasks/jade.rake)
|
|
31
31
|
load Gem.find_files('jade-sql/tasks.rake').first
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
+
`rake jade:schema` writes the schema; `rake jade:schema:check` fails when the
|
|
35
|
+
checked-in one no longer matches `db/structure.sql`, which is what a migration
|
|
36
|
+
merged without regenerating looks like. Both are also `jade-sql schema` and
|
|
37
|
+
`jade-sql schema --check`.
|
|
38
|
+
|
|
34
39
|
## At a glance
|
|
35
40
|
|
|
36
41
|
Generate a typed schema from `db/structure.sql`, then build a query against
|
|
37
|
-
it. The result is a `
|
|
42
|
+
it. The result is a `Query` you render with `to_sql` or run with `fetch_*`; rows
|
|
38
43
|
decode straight into your struct.
|
|
39
44
|
|
|
40
45
|
```jade
|
|
41
|
-
import Sql exposing (Selector, eq
|
|
42
|
-
import Sql.
|
|
46
|
+
import Sql exposing (Selector, eq)
|
|
47
|
+
import Sql.Expr as Expr
|
|
48
|
+
import Sql.Query exposing (Query, field, from, join, select, where)
|
|
43
49
|
import Schema exposing (patients, appointments)
|
|
44
50
|
|
|
45
51
|
struct Visit = {
|
|
@@ -47,14 +53,14 @@ struct Visit = {
|
|
|
47
53
|
reason: String
|
|
48
54
|
}
|
|
49
55
|
|
|
50
|
-
def scheduled_visits ->
|
|
56
|
+
def scheduled_visits -> Select(Visit)
|
|
51
57
|
p <- from(patients)
|
|
52
|
-
a <- join(appointments, (a) -> { p.id |> eq(a.patient_id) })
|
|
58
|
+
a <- join(appointments, (a) -> { p.id |> Expr.eq(a.patient_id) })
|
|
53
59
|
|
|
54
60
|
select(Visit(_, _))
|
|
55
61
|
|> field(p.name)
|
|
56
62
|
|> field(a.reason)
|
|
57
|
-
|> where(a.status |> eq(
|
|
63
|
+
|> where(a.status |> eq("scheduled"))
|
|
58
64
|
end
|
|
59
65
|
```
|
|
60
66
|
|
|
@@ -65,6 +71,6 @@ that decodes each row into `Visit`.
|
|
|
65
71
|
|
|
66
72
|
- [Building SQL](docs/building.md) — generate a schema, build queries
|
|
67
73
|
(joins, sorting/grouping, pagination, aggregates, arrays, JSONB) and
|
|
68
|
-
|
|
69
|
-
- [Running queries and
|
|
74
|
+
writes (insert/update/delete, RETURNING, timestamps, UUIDs).
|
|
75
|
+
- [Running queries and writes](docs/running.md) — `fetch_*` / `execute`,
|
|
70
76
|
transactions, and testing without a database.
|