@@ -303,6 +303,7 @@ extension TableMacro: ExtensionMacro {
303303 )
304304 )
305305 }
306+ isPrimaryKey = true
306307 primaryKey = (
307308 identifier: identifier,
308309 label: label,
@@ -372,51 +373,35 @@ extension TableMacro: ExtensionMacro {
372373 binding. initializer? . value. rewritten ( selfRewriter)
373374 ?? ( columnQueryValueType? . isOptionalType == true
374375 ? ExprSyntax ( NilLiteralExprSyntax ( ) ) : nil )
375- if isColumnGroup {
376+ let tableColumnType =
377+ isGenerated
378+ ? " GeneratedColumn "
379+ : isColumnGroup
380+ ? " ColumnGroup "
381+ : isExplicitColumn
382+ ? " TableColumn "
383+ : " _TableColumn "
384+ let tableColumnInitializer = tableColumnType == " _TableColumn " ? " .for " : " "
385+ func appendColumnProperty( primaryKey: Bool = false ) {
376386 columnsProperties. append (
377387 """
378- public let \( identifier) = \( moduleName) .ColumnGroup< \
388+ public let \( primaryKey ? " primaryKey " : identifier) = \
389+ \( moduleName) . \( raw: tableColumnType) < \
379390 QueryValue, \
380391 \( raw: columnQueryValueType? . trimmedDescription ?? " _ " ) \
381- >( \
382- keyPath: \\ QueryValue. \( identifier) \
383- )
384- """
385- )
386- allColumns. append ( identifier)
387- } else if isGenerated {
388- columnsProperties. append (
389- """
390- public var \( identifier) : \( moduleName) .GeneratedColumn< \
391- QueryValue, \
392- \( raw: columnQueryValueType? . trimmedDescription ?? " _ " ) \
393- > {
394- \( moduleName) .GeneratedColumn< \
395- QueryValue, \
396- \( columnQueryValueType? . rewritten ( selfRewriter) ?? " _ " ) \
397- >( \
398- \( columnName) , \
399- keyPath: \\ QueryValue. \( identifier) )
400- }
401- """
402- )
403- allColumns. append ( identifier)
404- } else {
405- let tableColumnInitializer = isExplicitColumn ? " " : " .for "
406- let tableColumnType = isExplicitColumn ? " TableColumn " : " _TableColumn "
407- columnsProperties. append (
408- """
409- public let \( identifier) = \( moduleName) . \( raw: tableColumnType) < \
410- QueryValue, \
411- \( columnQueryValueType? . rewritten ( selfRewriter) ?? " _ " ) \
412392 > \( raw: tableColumnInitializer) ( \
413- \( columnName) , \
414- keyPath: \\ QueryValue. \( identifier) \( defaultValue. map { " , default: \( $0) " } ?? " " ) \
393+ \( raw: isColumnGroup ? " " : " \( columnName) , " ) \
394+ keyPath: \\ QueryValue. \( identifier) \
395+ \( isColumnGroup ? " " : defaultValue. map { " , default: \( $0) " } ?? " " ) \
415396 )
416397 """
417398 )
418- allColumns. append ( identifier)
419399 }
400+ appendColumnProperty ( )
401+ if isPrimaryKey {
402+ appendColumnProperty ( primaryKey: true )
403+ }
404+ allColumns. append ( identifier)
420405 let decodedType = columnQueryValueType? . asNonOptionalType ( )
421406 if let defaultValue {
422407 decodings. append (
@@ -506,13 +491,6 @@ extension TableMacro: ExtensionMacro {
506491 property. attributes [ attributeIndex] = . attribute( attribute)
507492 }
508493 }
509- if !hasColumnAttribute {
510- let attribute = " @Column(primaryKey: false) \n "
511- property. attributes. insert (
512- AttributeListSyntax . Element ( " \( raw: attribute) " ) ,
513- at: property. attributes. startIndex
514- )
515- }
516494 var binding = binding
517495 if let type = binding. typeAnnotation? . type. asOptionalType ( ) {
518496 binding. typeAnnotation? . type = type
@@ -673,34 +651,30 @@ extension TableMacro: ExtensionMacro {
673651 columnWidths. append ( " \( columnQueryValueType) .columnWidth " )
674652
675653 let defaultValue = parameter. defaultValue? . value. rewritten ( selfRewriter)
676- if isColumnGroup {
654+ let tableColumnType =
655+ isColumnGroup
656+ ? " ColumnGroup "
657+ : isExplicitColumn
658+ ? " TableColumn "
659+ : " _TableColumn "
660+ let tableColumnInitializer = tableColumnType == " _TableColumn " ? " .for " : " "
661+ func appendColumnProperty( primaryKey: Bool = false ) {
677662 columnsProperties. append (
678663 """
679- public let \( identifier) = \( moduleName) .ColumnGroup< \
664+ public let \( primaryKey ? " primaryKey " : identifier) = \
665+ \( moduleName) . \( raw: tableColumnType) < \
680666 QueryValue, \
681667 \( raw: columnQueryValueType. trimmedDescription) ? \
682- >( \
683- keyPath: \\ QueryValue. \( identifier) \
684- )
685- """
686- )
687- allColumns. append ( identifier)
688- } else {
689- let tableColumnInitializer = isExplicitColumn ? " " : " .for "
690- let tableColumnType = isExplicitColumn ? " TableColumn " : " _TableColumn "
691- columnsProperties. append (
692- """
693- public let \( identifier) = \( moduleName) . \( raw: tableColumnType) < \
694- QueryValue, \
695- \( columnQueryValueType. rewritten ( selfRewriter) ) ? \
696668 > \( raw: tableColumnInitializer) ( \
697- \( columnName) , \
698- keyPath: \\ QueryValue. \( identifier) \( defaultValue. map { " , default: \( $0) " } ?? " " ) \
669+ \( raw: isColumnGroup ? " " : " \( columnName) , " ) \
670+ keyPath: \\ QueryValue. \( identifier) \
671+ \( isColumnGroup ? " " : defaultValue. map { " , default: \( $0) " } ?? " " ) \
699672 )
700673 """
701674 )
702- allColumns. append ( identifier)
703675 }
676+ appendColumnProperty ( )
677+ allColumns. append ( identifier)
704678 let decodedType = columnQueryValueType. asNonOptionalType ( )
705679 decodings. append (
706680 """
@@ -729,14 +703,7 @@ extension TableMacro: ExtensionMacro {
729703 \( allColumns. map { " self. \( $0) = other. \( $0) " as ExprSyntax } , separator: " \n " )
730704 }
731705 """
732- } else if let primaryKey {
733- columnsProperties. append (
734- """
735- public var primaryKey: \( moduleName) . \
736- \( raw: primaryKey. isColumnGroup ? " ColumnGroup " : " TableColumn " ) \
737- <QueryValue, \( primaryKey. queryValueType) > { self. \( primaryKey. identifier) }
738- """
739- )
706+ } else if primaryKey != nil {
740707 draft = """
741708
742709 @_Draft( \( type) .self)
@@ -974,7 +941,9 @@ extension TableMacro: MemberMacro {
974941 ?? binding. initializer? . value. literalType)
975942 . map { $0. rewritten ( selfRewriter) }
976943 var columnQueryOutputType = columnQueryValueType
977- var isPrimaryKey = primaryKey == nil && identifier. text == " id "
944+ var isPrimaryKey = primaryKey == nil
945+ && identifier. text == " id "
946+ && node. attributeName. identifier != " _Draft "
978947 var isColumnGroup = false
979948 var isEphemeral = false
980949 var isExplicitColumn = false
@@ -1024,6 +993,7 @@ extension TableMacro: MemberMacro {
1024993 isPrimaryKey = false
1025994 break
1026995 }
996+ isPrimaryKey = true
1027997 if primaryKey != nil {
1028998 var newArguments = arguments
1029999 newArguments. remove ( at: argumentIndex)
@@ -1077,59 +1047,38 @@ extension TableMacro: MemberMacro {
10771047 binding. initializer? . value. rewritten ( selfRewriter)
10781048 ?? ( columnQueryValueType? . isOptionalType == true
10791049 ? ExprSyntax ( NilLiteralExprSyntax ( ) ) : nil )
1080- if isColumnGroup {
1050+ let tableColumnType =
1051+ isGenerated
1052+ ? " GeneratedColumn "
1053+ : isColumnGroup
1054+ ? " ColumnGroup "
1055+ : isExplicitColumn
1056+ ? " TableColumn "
1057+ : " _TableColumn "
1058+ let tableColumnInitializer = tableColumnType == " _TableColumn " ? " .for " : " "
1059+ func appendColumnProperty( primaryKey: Bool = false ) {
10811060 columnsProperties. append (
10821061 """
1083- public let \( identifier) = \( moduleName) .ColumnGroup< \
1062+ public let \( primaryKey ? " primaryKey " : identifier) = \
1063+ \( moduleName) . \( raw: tableColumnType) < \
10841064 QueryValue, \
10851065 \( raw: columnQueryValueType? . trimmedDescription ?? " _ " ) \
1086- >( \
1087- keyPath: \\ QueryValue. \( identifier) \
1088- )
1089- """
1090- )
1091- allColumns. append ( ( identifier, " _ " , columnQueryValueType, defaultValue) )
1092- allColumnNames. append ( identifier)
1093- writableColumns. append ( identifier)
1094- } else if isGenerated {
1095- columnsProperties. append (
1096- """
1097- public var \( identifier) : \( moduleName) .GeneratedColumn< \
1098- QueryValue, \
1099- \( raw: columnQueryValueType? . trimmedDescription ?? " _ " ) \
1100- > { \
1101- \( moduleName) .GeneratedColumn< \
1102- QueryValue, \
1103- \( columnQueryValueType? . rewritten ( selfRewriter) ?? " _ " ) \
1104- >( \
1105- \( columnName) , \
1106- keyPath: \\ QueryValue. \( identifier) \
1107- )
1108- }
1109- """
1110- )
1111- allColumns. append ( ( identifier, " _ " , columnQueryValueType, defaultValue) )
1112- allColumnNames. append ( identifier)
1113- } else {
1114- let tableColumnInitializer = isExplicitColumn ? " " : " .for "
1115- let tableColumnType = isExplicitColumn ? " TableColumn " : " _TableColumn "
1116- columnsProperties. append (
1117- """
1118- public let \( identifier) = \( moduleName) . \( raw: tableColumnType) < \
1119- QueryValue, \
1120- \( columnQueryValueType? . rewritten ( selfRewriter) ?? " _ " ) \
11211066 > \( raw: tableColumnInitializer) ( \
1122- \( columnName) , \
1123- keyPath: \\ QueryValue. \( identifier) \( defaultValue. map { " , default: \( $0) " } ?? " " ) \
1067+ \( raw: isColumnGroup ? " " : " \( columnName) , " ) \
1068+ keyPath: \\ QueryValue. \( identifier) \
1069+ \( isColumnGroup ? " " : defaultValue. map { " , default: \( $0) " } ?? " " ) \
11241070 )
11251071 """
11261072 )
1127- allColumns. append ( ( identifier, " _ " , columnQueryValueType, defaultValue) )
1128- allColumnNames. append ( identifier)
1129- writableColumns. append ( identifier)
11301073 }
1131-
1074+ appendColumnProperty ( )
1075+ if isPrimaryKey {
1076+ appendColumnProperty ( primaryKey: true )
1077+ }
1078+ allColumns. append ( ( identifier, " _ " , columnQueryValueType, defaultValue) )
1079+ allColumnNames. append ( identifier)
11321080 if !isGenerated {
1081+ writableColumns. append ( identifier)
11331082 if let primaryKey, primaryKey. identifier == identifier {
11341083 var hasColumnAttribute = false
11351084 var property = property
@@ -1185,13 +1134,6 @@ extension TableMacro: MemberMacro {
11851134 }
11861135 }
11871136 property = property. trimmed
1188- if !hasColumnAttribute {
1189- let attribute = " @Column(primaryKey: false) \n "
1190- property. attributes. insert (
1191- AttributeListSyntax . Element ( " \( raw: attribute) " ) ,
1192- at: property. attributes. startIndex
1193- )
1194- }
11951137 var binding = binding
11961138 if let type = binding. typeAnnotation? . type. asOptionalType ( ) {
11971139 binding. typeAnnotation? . type = type
@@ -1315,42 +1257,34 @@ extension TableMacro: MemberMacro {
13151257 selectedColumns. append ( identifier)
13161258
13171259 let defaultValue = parameter. defaultValue? . value. rewritten ( selfRewriter)
1318- if isColumnGroup {
1260+ let tableColumnType =
1261+ isColumnGroup
1262+ ? " ColumnGroup "
1263+ : isExplicitColumn
1264+ ? " TableColumn "
1265+ : " _TableColumn "
1266+ let tableColumnInitializer = tableColumnType == " _TableColumn " ? " .for " : " "
1267+ func appendColumnProperty( primaryKey: Bool = false ) {
13191268 columnsProperties. append (
13201269 """
1321- public let \( identifier) = \( moduleName) .ColumnGroup< \
1270+ public let \( primaryKey ? " primaryKey " : identifier) = \
1271+ \( moduleName) . \( raw: tableColumnType) < \
13221272 QueryValue, \
1323- \( raw: columnQueryValueType) ? \
1324- >( \
1325- keyPath: \\ QueryValue. \( identifier) \
1326- )
1327- """
1328- )
1329- allColumns. append (
1330- ( identifier, parameter. firstName ?? " _ " , columnQueryValueType, defaultValue)
1331- )
1332- allColumnNames. append ( identifier)
1333- writableColumns. append ( identifier)
1334- } else {
1335- let tableColumnInitializer = isExplicitColumn ? " " : " .for "
1336- let tableColumnType = isExplicitColumn ? " TableColumn " : " _TableColumn "
1337- columnsProperties. append (
1338- """
1339- public let \( identifier) = \( moduleName) . \( raw: tableColumnType) < \
1340- QueryValue, \
1341- \( columnQueryValueType. rewritten ( selfRewriter) ) ? \
1273+ \( raw: columnQueryValueType. trimmedDescription) ? \
13421274 > \( raw: tableColumnInitializer) ( \
1343- \( columnName) , \
1344- keyPath: \\ QueryValue. \( identifier) \( defaultValue. map { " , default: \( $0) " } ?? " " ) \
1275+ \( raw: isColumnGroup ? " " : " \( columnName) , " ) \
1276+ keyPath: \\ QueryValue. \( identifier) \
1277+ \( isColumnGroup ? " " : defaultValue. map { " , default: \( $0) " } ?? " " ) \
13451278 )
13461279 """
13471280 )
1348- allColumns. append (
1349- ( identifier, parameter. firstName ?? " _ " , columnQueryValueType, defaultValue)
1350- )
1351- allColumnNames. append ( identifier)
1352- writableColumns. append ( identifier)
13531281 }
1282+ appendColumnProperty ( )
1283+ allColumns. append (
1284+ ( identifier, parameter. firstName ?? " _ " , columnQueryValueType, defaultValue)
1285+ )
1286+ allColumnNames. append ( identifier)
1287+ writableColumns. append ( identifier)
13541288 }
13551289 for (identifier, firstName, valueType, defaultValue) in allColumns {
13561290 var argument = """
@@ -1381,14 +1315,7 @@ extension TableMacro: MemberMacro {
13811315 }
13821316
13831317 var draft : DeclSyntax ?
1384- if let primaryKey {
1385- columnsProperties. append (
1386- """
1387- public var primaryKey: \( moduleName) . \
1388- \( raw: primaryKey. isColumnGroup ? " ColumnGroup " : " TableColumn " ) \
1389- <QueryValue, \( primaryKey. queryValueType) > { self. \( primaryKey. identifier) }
1390- """
1391- )
1318+ if primaryKey != nil {
13921319 draft = """
13931320
13941321 @_Draft( \( type) .self)
0 commit comments