@zio.dev/zio-blocks 0.0.33 → 0.0.51
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/guides/compile-time-resource-safety-with-scope.md +16 -17
- package/guides/getting-started-with-mux.md +1507 -0
- package/guides/query-dsl-extending.md +161 -102
- package/guides/query-dsl-fluent-builder.md +217 -157
- package/guides/query-dsl-reified-optics.md +12 -10
- package/guides/query-dsl-sql.md +246 -165
- package/guides/telemetry-guide.md +1069 -0
- package/guides/zio-schema-migration.md +29 -22
- package/index.md +292 -50
- package/package.json +1 -1
- package/plans/config-follow-up-prs.md +188 -0
- package/plans/config-pr-assessment-roadmap.md +310 -0
- package/reference/MuxDataFlow.jsx +250 -0
- package/reference/async.md +651 -0
- package/reference/chunk.md +3533 -308
- package/reference/codegen/case-class.md +436 -0
- package/reference/codegen/emitter-config.md +383 -0
- package/reference/codegen/examples.md +664 -0
- package/reference/codegen/field.md +316 -0
- package/reference/codegen/index.md +317 -0
- package/reference/codegen/scala-emitter.md +392 -0
- package/reference/codegen/scala-file.md +276 -0
- package/reference/codegen/sealed-trait.md +408 -0
- package/reference/codegen/type-definition.md +340 -0
- package/reference/codegen/type-ref.md +201 -0
- package/reference/combinators.md +347 -117
- package/reference/config.md +158 -0
- package/reference/context.md +4 -4
- package/reference/datastar.md +346 -0
- package/reference/docs.md +1461 -345
- package/reference/endpoint/auth-type.md +146 -0
- package/reference/endpoint/endpoint.md +297 -0
- package/reference/endpoint/http-codec.md +249 -0
- package/reference/endpoint/index.md +825 -0
- package/reference/endpoint/path-codec.md +237 -0
- package/reference/endpoint/route-pattern.md +196 -0
- package/reference/endpoint/route-tree.md +111 -0
- package/reference/endpoint/segment-codec.md +212 -0
- package/reference/html.md +1120 -0
- package/reference/htmx/attribute-values.md +359 -0
- package/reference/htmx/hx-encoding.md +111 -0
- package/reference/htmx/hx-params.md +204 -0
- package/reference/htmx/hx-swap.md +276 -0
- package/reference/htmx/hx-sync.md +251 -0
- package/reference/htmx/hx-target.md +314 -0
- package/reference/htmx/hx-trigger.md +457 -0
- package/reference/htmx/hx-url-update.md +239 -0
- package/reference/htmx/index.md +855 -0
- package/reference/http-model/index.md +47 -0
- package/reference/http-model/model.md +1481 -0
- package/reference/http-model/schema.md +747 -0
- package/reference/maybe.md +826 -0
- package/reference/media-type.md +2 -2
- package/reference/mux.mdx +823 -0
- package/reference/openapi.md +1351 -0
- package/reference/resource-management/defer-handle.md +1 -1
- package/reference/resource-management/resource.md +31 -2
- package/reference/resource-management/scope.md +28 -12
- package/reference/resource-management/wire.md +3 -7
- package/reference/ringbuffer/MpmcDiagram.jsx +717 -0
- package/reference/ringbuffer/MpscDiagram.jsx +618 -0
- package/reference/ringbuffer/SpmcDiagram.jsx +680 -0
- package/reference/ringbuffer/SpscDiagram.jsx +677 -0
- package/reference/ringbuffer/advanced.mdx +109 -0
- package/reference/ringbuffer/index.mdx +145 -0
- package/reference/ringbuffer/mpmc.mdx +151 -0
- package/reference/ringbuffer/mpsc.mdx +132 -0
- package/reference/ringbuffer/spmc.mdx +108 -0
- package/reference/ringbuffer/spsc.mdx +344 -0
- package/reference/{allows.md → schema/allows.md} +4 -4
- package/reference/{binding-resolver.md → schema/binding-resolver.md} +1 -1
- package/reference/{binding.md → schema/binding.md} +2 -3
- package/reference/schema/built-in-codecs/avro.md +451 -0
- package/reference/schema/built-in-codecs/bson.md +480 -0
- package/reference/schema/built-in-codecs/csv.md +564 -0
- package/reference/schema/built-in-codecs/index.md +77 -0
- package/reference/schema/built-in-codecs/json/index.md +295 -0
- package/reference/schema/built-in-codecs/json/json-config.md +217 -0
- package/reference/{json-patch.md → schema/built-in-codecs/json/json-patch.md} +5 -5
- package/reference/{json-schema.md → schema/built-in-codecs/json/json-schema.md} +14 -47
- package/reference/schema/built-in-codecs/json/json-selection.md +322 -0
- package/reference/{json.md → schema/built-in-codecs/json/json.md} +32 -64
- package/reference/schema/built-in-codecs/messagepack.md +508 -0
- package/reference/schema/built-in-codecs/thrift.md +433 -0
- package/reference/schema/built-in-codecs/toon.md +1078 -0
- package/reference/{xml.md → schema/built-in-codecs/xml.md} +13 -9
- package/reference/schema/built-in-codecs/yaml.md +552 -0
- package/reference/{codec.md → schema/codec.md} +10 -10
- package/reference/{dynamic-optic.md → schema/dynamic-optic.md} +151 -5
- package/reference/{dynamic-schema.md → schema/dynamic-schema.md} +8 -8
- package/reference/schema/format.md +92 -0
- package/reference/schema/index.md +50 -0
- package/reference/schema/migration.md +297 -0
- package/reference/{modifier.md → schema/modifier.md} +58 -7
- package/reference/{optics.md → schema/optics.md} +2 -2
- package/reference/{patch.md → schema/patch.md} +1 -1
- package/{path-interpolator.md → reference/schema/path-interpolator.md} +165 -72
- package/reference/{schema-evolution → schema/schema-evolution}/as.md +8 -8
- package/reference/{schema-evolution → schema/schema-evolution}/index.md +2 -2
- package/reference/{schema-evolution → schema/schema-evolution}/into.md +8 -8
- package/reference/{schema-expr.md → schema/schema-expr.md} +110 -175
- package/reference/{schema.md → schema/schema.md} +12 -0
- package/reference/{structural-types.md → schema/structural-types.md} +1 -1
- package/reference/{type-class-derivation.md → schema/type-class-derivation.md} +63 -1
- package/reference/smithy.md +533 -0
- package/reference/sql/db-codec-deriver.md +71 -0
- package/reference/sql/db-codec.md +687 -0
- package/reference/sql/db-con.md +271 -0
- package/reference/sql/db-connection.md +153 -0
- package/reference/sql/db-param-writer.md +77 -0
- package/reference/sql/db-param.md +66 -0
- package/reference/sql/db-result-reader.md +146 -0
- package/reference/sql/db-tx.md +82 -0
- package/reference/sql/db-value.md +41 -0
- package/reference/sql/ddl.md +85 -0
- package/reference/sql/frag.md +254 -0
- package/reference/sql/index.md +341 -0
- package/reference/sql/repo.md +600 -0
- package/reference/sql/sql-dialect.md +73 -0
- package/reference/sql/sql-logger.md +62 -0
- package/reference/sql/sql-name-mapper.md +70 -0
- package/reference/sql/table-metadata.md +134 -0
- package/reference/sql/table.md +448 -0
- package/reference/sql/transactor-zio.md +399 -0
- package/reference/sql/transactor.md +353 -0
- package/reference/sql-zio.md +112 -0
- package/reference/streams/concurrent-operators.md +106 -0
- package/reference/streams/index.md +653 -0
- package/reference/streams/pipeline.md +718 -0
- package/reference/streams/reader.md +1284 -0
- package/reference/streams/scala-2-compatibility.md +55 -0
- package/reference/streams/sink.md +1426 -0
- package/reference/streams/stream.md +2526 -0
- package/reference/streams/writer.md +1045 -0
- package/reference/streams/zero-boxing.md +275 -0
- package/reference/telemetry.md +693 -0
- package/reference/typeid.md +5 -19
- package/sidebars.js +238 -43
- package/reference/formats.md +0 -694
- package/reference/http-model.md +0 -1716
- package/reference/streams.md +0 -989
- package/ringbuffer.md +0 -249
- /package/reference/{json-differ.md → schema/built-in-codecs/json/json-differ.md} +0 -0
- /package/reference/{dynamic-value.md → schema/dynamic-value.md} +0 -0
- /package/reference/{lazy.md → schema/lazy.md} +0 -0
- /package/reference/{reflect.md → schema/reflect.md} +0 -0
- /package/reference/{registers.md → schema/registers.md} +0 -0
- /package/reference/{schema-error.md → schema/schema-error.md} +0 -0
- /package/reference/{syntax.md → schema/syntax.md} +0 -0
- /package/reference/{validation.md → schema/validation.md} +0 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: sql-logger
|
|
3
|
+
title: "SqlLogger"
|
|
4
|
+
description: "Reference for SqlLogger, the callback interface for observing SQL execution."
|
|
5
|
+
keywords:
|
|
6
|
+
- "SqlLogger observability"
|
|
7
|
+
- "SQL execution logging"
|
|
8
|
+
- "SuccessEvent ErrorEvent"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
`SqlLogger` is a callback interface that reports SQL execution events. Every statement calls either `onSuccess` or `onError` with details about the execution: rendered SQL, bound parameters, duration, and row count.
|
|
12
|
+
|
|
13
|
+
Key points:
|
|
14
|
+
|
|
15
|
+
- **Synchronous** — Callbacks run on the JDBC thread immediately after statement completion. Keep implementations fast; use a background thread for heavy I/O.
|
|
16
|
+
- **SqlLogger.noop** — Pre-built no-op instance that discards all events. Default when no custom logger is configured.
|
|
17
|
+
|
|
18
|
+
## Core API
|
|
19
|
+
|
|
20
|
+
```scala
|
|
21
|
+
trait SqlLogger {
|
|
22
|
+
def onSuccess(event: SqlLogger.SuccessEvent): Unit
|
|
23
|
+
def onError(event: SqlLogger.ErrorEvent): Unit
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Usage
|
|
28
|
+
|
|
29
|
+
Implement the trait to observe SQL execution:
|
|
30
|
+
|
|
31
|
+
```scala
|
|
32
|
+
import zio.blocks.sql.SqlLogger
|
|
33
|
+
|
|
34
|
+
val myLogger: SqlLogger = new SqlLogger {
|
|
35
|
+
def onSuccess(event: SqlLogger.SuccessEvent): Unit =
|
|
36
|
+
println(s"OK (${event.duration.toMillis}ms, ${event.rowCount} rows): ${event.sql}")
|
|
37
|
+
|
|
38
|
+
def onError(event: SqlLogger.ErrorEvent): Unit =
|
|
39
|
+
println(s"FAIL: ${event.error.getMessage}")
|
|
40
|
+
}
|
|
41
|
+
// myLogger: SqlLogger = repl.MdocSession$MdocApp0$$anon$1@1b9203b8
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Pass the logger when creating a `JdbcTransactor`:
|
|
45
|
+
|
|
46
|
+
```scala
|
|
47
|
+
import zio.blocks.sql._
|
|
48
|
+
|
|
49
|
+
val dataSource: javax.sql.DataSource = ???
|
|
50
|
+
val myLogger: SqlLogger = SqlLogger.noop
|
|
51
|
+
|
|
52
|
+
val tx = new JdbcTransactor(() => dataSource.getConnection(), SqlDialect.PostgreSQL, myLogger)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Use the predefined no-op logger when you don't need logging:
|
|
56
|
+
|
|
57
|
+
```scala
|
|
58
|
+
import zio.blocks.sql._
|
|
59
|
+
|
|
60
|
+
val dataSource: javax.sql.DataSource = ???
|
|
61
|
+
val tx: JdbcTransactor = JdbcTransactor.fromDataSource(dataSource, SqlDialect.PostgreSQL)
|
|
62
|
+
```
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: sql-name-mapper
|
|
3
|
+
title: "SqlNameMapper"
|
|
4
|
+
description: "Reference for SqlNameMapper, the interface for mapping Scala field names to SQL column names."
|
|
5
|
+
keywords:
|
|
6
|
+
- "SqlNameMapper Column Naming"
|
|
7
|
+
- "SnakeCase Conversion"
|
|
8
|
+
- "Identity Passthrough"
|
|
9
|
+
- "Custom Column Naming"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
`SqlNameMapper` converts Scala field names to SQL column names. Three implementations are built in: `SnakeCase` (default, converts `firstName` to `first_name`), `Identity` (no change), and `Custom` (arbitrary function).
|
|
13
|
+
|
|
14
|
+
## Core API
|
|
15
|
+
|
|
16
|
+
The simplified structural shape of `SqlNameMapper` is:
|
|
17
|
+
|
|
18
|
+
```scala
|
|
19
|
+
sealed trait SqlNameMapper extends (String => String)
|
|
20
|
+
|
|
21
|
+
object SqlNameMapper {
|
|
22
|
+
case object SnakeCase extends SqlNameMapper
|
|
23
|
+
case object Identity extends SqlNameMapper
|
|
24
|
+
final case class Custom(f: String => String) extends SqlNameMapper
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Usage
|
|
29
|
+
|
|
30
|
+
Call a mapper like a function:
|
|
31
|
+
|
|
32
|
+
```scala
|
|
33
|
+
import zio.blocks.sql.SqlNameMapper
|
|
34
|
+
|
|
35
|
+
SqlNameMapper.SnakeCase("firstName")
|
|
36
|
+
// res1: String = "first_name"
|
|
37
|
+
SqlNameMapper.SnakeCase("userID")
|
|
38
|
+
// res2: String = "user_id"
|
|
39
|
+
SqlNameMapper.Identity("firstName")
|
|
40
|
+
// res3: String = "firstName"
|
|
41
|
+
|
|
42
|
+
val upper = SqlNameMapper.Custom(_.toUpperCase)
|
|
43
|
+
// upper: Custom = Custom(
|
|
44
|
+
// repl.MdocSession$MdocApp0$$Lambda$20339/0x00007f2996f5b000@1850c853
|
|
45
|
+
// )
|
|
46
|
+
upper("firstName")
|
|
47
|
+
// res4: String = "FIRSTNAME"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Use a custom mapper when deriving codecs:
|
|
51
|
+
|
|
52
|
+
```scala
|
|
53
|
+
import zio.blocks.sql.{DbCodec, DbCodecDeriver, SqlNameMapper}
|
|
54
|
+
import zio.blocks.schema.Schema
|
|
55
|
+
|
|
56
|
+
case class Order(orderId: Int, totalAmount: BigDecimal)
|
|
57
|
+
object Order { given schema: Schema[Order] = Schema.derived }
|
|
58
|
+
|
|
59
|
+
// Use UPPERCASE column names instead of snake_case
|
|
60
|
+
val upperDeriver = DbCodecDeriver.withColumnNameMapper(SqlNameMapper.Custom(_.toUpperCase))
|
|
61
|
+
// upperDeriver: DbCodecDeriver = zio.blocks.sql.DbCodecDeriver@646cca72
|
|
62
|
+
val codec: DbCodec[Order] = Order.schema.deriving(upperDeriver).derive
|
|
63
|
+
// codec: DbCodec[Order] = zio.blocks.sql.DbCodecDeriver$$anon$20@596dacd
|
|
64
|
+
codec.columns
|
|
65
|
+
// res6: IndexedSeq[String] = Vector("ORDERID", "TOTALAMOUNT")
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Key Points
|
|
69
|
+
|
|
70
|
+
For full control over individual field names, use `@Modifier.rename("column_name")` on specific fields without changing the global mapper. It takes precedence over any `SqlNameMapper` in use.
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: table-metadata
|
|
3
|
+
title: "TableMetadata"
|
|
4
|
+
description: "Reference for TableMetadata, the utility for deriving column metadata from a Schema."
|
|
5
|
+
keywords:
|
|
6
|
+
- "Table Metadata"
|
|
7
|
+
- "Column Metadata"
|
|
8
|
+
- "Table Naming Policy"
|
|
9
|
+
- "Schema DDL Column Derivation"
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
`TableMetadata` derives column metadata from a `Schema`. It returns a list of `ColumnMeta` instances, each describing a column's name, type, and nullability. `TableNamingPolicy` controls how Scala type names become table names.
|
|
13
|
+
|
|
14
|
+
## Core API
|
|
15
|
+
|
|
16
|
+
```scala
|
|
17
|
+
object TableMetadata {
|
|
18
|
+
def columnsFor[A](
|
|
19
|
+
schema: Schema[A],
|
|
20
|
+
columnNameMapper: SqlNameMapper = SqlNameMapper.SnakeCase
|
|
21
|
+
): IndexedSeq[ColumnMeta]
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
final case class ColumnMeta(name: String, dbValue: DbValue, nullable: Boolean)
|
|
25
|
+
|
|
26
|
+
sealed trait TableNamingPolicy {
|
|
27
|
+
def defaultName(typeName: String): String
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
object TableNamingPolicy {
|
|
31
|
+
case object Singular extends TableNamingPolicy
|
|
32
|
+
case object Plural extends TableNamingPolicy
|
|
33
|
+
final case class Custom(f: String => String) extends TableNamingPolicy
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Usage
|
|
38
|
+
|
|
39
|
+
Derive column metadata from a schema:
|
|
40
|
+
|
|
41
|
+
```scala
|
|
42
|
+
import zio.blocks.sql.{TableMetadata, SqlDialect}
|
|
43
|
+
import zio.blocks.schema.Schema
|
|
44
|
+
|
|
45
|
+
case class Product(id: Int, name: String, price: Option[BigDecimal])
|
|
46
|
+
object Product { given schema: Schema[Product] = Schema.derived }
|
|
47
|
+
|
|
48
|
+
val cols = TableMetadata.columnsFor(Product.schema)
|
|
49
|
+
// cols: IndexedSeq[ColumnMeta] = Vector(
|
|
50
|
+
// ColumnMeta(name = "id", dbValue = DbInt(0), nullable = false),
|
|
51
|
+
// ColumnMeta(name = "name", dbValue = DbString(""), nullable = false),
|
|
52
|
+
// ColumnMeta(name = "price", dbValue = DbBigDecimal(0), nullable = true)
|
|
53
|
+
// )
|
|
54
|
+
cols
|
|
55
|
+
// res1: IndexedSeq[ColumnMeta] = Vector(
|
|
56
|
+
// ColumnMeta(name = "id", dbValue = DbInt(0), nullable = false),
|
|
57
|
+
// ColumnMeta(name = "name", dbValue = DbString(""), nullable = false),
|
|
58
|
+
// ColumnMeta(name = "price", dbValue = DbBigDecimal(0), nullable = true)
|
|
59
|
+
// )
|
|
60
|
+
|
|
61
|
+
cols.map(_.name)
|
|
62
|
+
// res2: IndexedSeq[String] = Vector("id", "name", "price")
|
|
63
|
+
cols.map(_.nullable)
|
|
64
|
+
// res3: IndexedSeq[Boolean] = Vector(false, false, true)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Use the column metadata to get DDL types:
|
|
68
|
+
|
|
69
|
+
```scala
|
|
70
|
+
cols.map(col => SqlDialect.PostgreSQL.typeName(col.dbValue))
|
|
71
|
+
// res4: IndexedSeq[String] = Vector("INTEGER", "TEXT", "NUMERIC")
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Control table naming when deriving a Table:
|
|
75
|
+
|
|
76
|
+
```scala
|
|
77
|
+
import zio.blocks.sql.{Table, TableNamingPolicy}
|
|
78
|
+
|
|
79
|
+
// Singular table name (default)
|
|
80
|
+
val table1 = Table.derived[Product]
|
|
81
|
+
// table1: Table[Product] = Table(
|
|
82
|
+
// name = "product",
|
|
83
|
+
// codec = zio.blocks.sql.DbCodecDeriver$$anon$20@40f5588b,
|
|
84
|
+
// columnsMeta = Vector(
|
|
85
|
+
// ColumnMeta(name = "id", dbValue = DbInt(0), nullable = false),
|
|
86
|
+
// ColumnMeta(name = "name", dbValue = DbString(""), nullable = false),
|
|
87
|
+
// ColumnMeta(name = "price", dbValue = DbBigDecimal(0), nullable = true)
|
|
88
|
+
// )
|
|
89
|
+
// )
|
|
90
|
+
table1.name
|
|
91
|
+
// res5: String = "product"
|
|
92
|
+
|
|
93
|
+
// Plural table name
|
|
94
|
+
val table2 = Table.derived[Product](TableNamingPolicy.Plural)
|
|
95
|
+
// table2: Table[Product] = Table(
|
|
96
|
+
// name = "products",
|
|
97
|
+
// codec = zio.blocks.sql.DbCodecDeriver$$anon$20@13590a4,
|
|
98
|
+
// columnsMeta = Vector(
|
|
99
|
+
// ColumnMeta(name = "id", dbValue = DbInt(0), nullable = false),
|
|
100
|
+
// ColumnMeta(name = "name", dbValue = DbString(""), nullable = false),
|
|
101
|
+
// ColumnMeta(name = "price", dbValue = DbBigDecimal(0), nullable = true)
|
|
102
|
+
// )
|
|
103
|
+
// )
|
|
104
|
+
table2.name
|
|
105
|
+
// res6: String = "products"
|
|
106
|
+
|
|
107
|
+
// Custom naming
|
|
108
|
+
val table3 = Table.derived[Product](TableNamingPolicy.Custom("t_" + _))
|
|
109
|
+
// table3: Table[Product] = Table(
|
|
110
|
+
// name = "t_Product",
|
|
111
|
+
// codec = zio.blocks.sql.DbCodecDeriver$$anon$20@2fa45824,
|
|
112
|
+
// columnsMeta = Vector(
|
|
113
|
+
// ColumnMeta(name = "id", dbValue = DbInt(0), nullable = false),
|
|
114
|
+
// ColumnMeta(name = "name", dbValue = DbString(""), nullable = false),
|
|
115
|
+
// ColumnMeta(name = "price", dbValue = DbBigDecimal(0), nullable = true)
|
|
116
|
+
// )
|
|
117
|
+
// )
|
|
118
|
+
table3.name
|
|
119
|
+
// res7: String = "t_Product"
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Key Points
|
|
123
|
+
|
|
124
|
+
**`columnsFor`** — Walks a schema's structure and returns metadata for each column, respecting `@Modifier.transient` (skip field), `@Modifier.rename` (override name), and `Option[A]` / `Maybe[A]` (mark nullable).
|
|
125
|
+
|
|
126
|
+
**ColumnMeta** — Holds the column name, a representative `DbValue` for type inference, and a nullable flag. The actual value in `dbValue` doesn't matter—only its variant is used by `SqlDialect#typeName`.
|
|
127
|
+
|
|
128
|
+
**TableNamingPolicy** — Controls default table naming: `Singular` converts `"UserAccount"` to `"user_account"`, `Plural` to `"user_accounts"`, `Custom(f)` applies function `f` directly.
|
|
129
|
+
|
|
130
|
+
## How It Works
|
|
131
|
+
|
|
132
|
+
`Table.derived` calls `columnsFor` to extract column metadata from the schema. For each `ColumnMeta`, the dialect's `typeName` method is called to get the SQL type string. The metadata tracks which columns are nullable based on `Option[A]` or `Maybe[A]` types. Fields annotated with `@Modifier.rename` use their explicit name instead of the mapper.
|
|
133
|
+
|
|
134
|
+
For how Table uses this metadata, see [Table](./table.md). For DDL generation, see [Ddl](./ddl.md).
|