@@ -128,12 +128,12 @@ object SimpleTableMacros {
128128 queryable : Table .Metadata .QueryableProxy
129129 )(e : SimpleTable .Record [? , ? ]): IndexedSeq [Expr [? ]] = {
130130 var i = 0
131- val fields = e.productIterator
132131 val buf = IndexedSeq .newBuilder[Seq [Expr [? ]]]
133- while fields.hasNext do
132+ val size = e.productArity
133+ while i < size do
134134 type T
135135 type Field
136- val field = fields.next( ).asInstanceOf [Field ]
136+ val field = e(i ).asInstanceOf [Field ]
137137 val row = queryable[Field , T ](i)
138138 buf += row.walkExprs(field)
139139 i += 1
@@ -159,11 +159,11 @@ object SimpleTableMacros {
159159 )(c : Product ): R = {
160160 var i = 0
161161 val buf = IArray .newBuilder[AnyRef ]
162- val fields = c.productIterator
163- while fields.hasNext do
162+ val size = c.productArity
163+ while i < size do
164164 type T
165165 type Field
166- val field = fields.next( ).asInstanceOf [T ]
166+ val field = c.productElement(i ).asInstanceOf [T ]
167167 val row = queryable[Field , T ](i)
168168 buf += row.deconstruct(field).asInstanceOf [AnyRef ]
169169 i += 1
@@ -187,6 +187,7 @@ trait SimpleTableMacros {
187187 colsRef0 : => Tuple ,
188188 labelsRef0 : => Tuple
189189 ):
190+ private type Impl [T [_]] = SimpleTable .MapOver [C , T ]
190191 private lazy val mirrorPair =
191192 val (names0, mirror0) = mirrorPair0
192193 (
@@ -202,9 +203,40 @@ trait SimpleTableMacros {
202203 lazy val labelsRef : IndexedSeq [String ] =
203204 SimpleTableMacros .unwrapLabels(labelsRef0, labels)
204205
206+ private def queryables (mappers : DialectTypeMappers , idx : Int ): Queryable .Row [? , ? ] =
207+ rowsRef(idx)(mappers)
208+
209+ private def walkLabels0 (): Seq [String ] = labelsRef
210+
211+ private def queryable (
212+ walkLabels0 : () => Seq [String ],
213+ @ nowarn(" msg=unused" ) mappers : DialectTypeMappers ,
214+ queryable : Table .Metadata .QueryableProxy
215+ ): Queryable [Impl [Expr ], Impl [Sc ]] = Table .Internal .TableQueryable (
216+ walkLabels0,
217+ walkExprs0 = SimpleTableMacros .walkAllExprs(queryable),
218+ construct0 = args =>
219+ SimpleTableMacros .construct(queryable)(
220+ size = labels.size,
221+ args = args,
222+ factory = SimpleTableMacros .make(mirror, _)
223+ ),
224+ deconstruct0 = SimpleTableMacros .deconstruct[Impl [Expr ]](queryable)
225+ )
226+
227+ private def vExpr0 (
228+ tableRef : TableRef ,
229+ mappers : DialectTypeMappers ,
230+ @ nowarn(" msg=unused" ) queryable : Table .Metadata .QueryableProxy
231+ ): Impl [Column ] =
232+ val columns = colsRef.map(_(mappers, tableRef))
233+ SimpleTable .Record .fromIArray(columns).asInstanceOf [Impl [Column ]]
234+
235+ def metadata : Table .Metadata [Impl ] =
236+ Table .Metadata [Impl ](queryables, walkLabels0, queryable, vExpr0)
237+
205238 inline given initTableMetadata [C <: Product ]
206239 : Table .Metadata [[T [_]] =>> SimpleTable .MapOver [C , T ]] =
207- type Impl [T [_]] = SimpleTable .MapOver [C , T ]
208240 type Labels = NamedTuple .Names [NamedTuple .From [C ]]
209241 type Values = NamedTuple .DropNames [NamedTuple .From [C ]]
210242 type Pairs [F [_, _]] = Tuple .Map [
@@ -221,41 +253,11 @@ trait SimpleTableMacros {
221253 [T ] =>> SimpleTableMacros .ContraMapper [SimpleTableMacros .BaseRowExpr [T ]]
222254 ]
223255
224- val state = new SimpleTableState [C ](
256+ val state = SimpleTableState [C ](
225257 mirrorPair0 = SimpleTableMacros .getMirror[C ],
226258 rowsRef0 = compiletime.summonAll[Rows ],
227259 colsRef0 = compiletime.summonAll[Columns ],
228260 labelsRef0 = compiletime.summonAll[FlatLabels ]
229261 )
230-
231- def queryables (mappers : DialectTypeMappers , idx : Int ): Queryable .Row [? , ? ] =
232- state.rowsRef(idx)(mappers)
233-
234- def walkLabels0 (): Seq [String ] = state.labelsRef
235-
236- def queryable (
237- walkLabels0 : () => Seq [String ],
238- @ nowarn(" msg=unused" ) mappers : DialectTypeMappers ,
239- queryable : Table .Metadata .QueryableProxy
240- ): Queryable [Impl [Expr ], Impl [Sc ]] = Table .Internal .TableQueryable (
241- walkLabels0,
242- walkExprs0 = SimpleTableMacros .walkAllExprs(queryable),
243- construct0 = args =>
244- SimpleTableMacros .construct(queryable)(
245- size = state.labels.size,
246- args = args,
247- factory = SimpleTableMacros .make(state.mirror, _)
248- ),
249- deconstruct0 = values => SimpleTableMacros .deconstruct[Impl [Expr ]](queryable)(values)
250- )
251-
252- def vExpr0 (
253- tableRef : TableRef ,
254- mappers : DialectTypeMappers ,
255- @ nowarn(" msg=unused" ) queryable : Table .Metadata .QueryableProxy
256- ): Impl [Column ] =
257- val columns = state.colsRef.map(_(mappers, tableRef))
258- SimpleTable .Record .fromIArray(columns).asInstanceOf [Impl [Column ]]
259-
260- Table .Metadata [Impl ](queryables, walkLabels0, queryable, vExpr0)
262+ state.metadata
261263}
0 commit comments