@@ -495,6 +495,21 @@ func (e *Executor) execAlterEntity(s *ast.AlterEntityStmt) error {
495495 if a == nil {
496496 return fmt .Errorf ("no attribute definition provided" )
497497 }
498+ // Pseudo-types: set entity flags instead of adding real attributes
499+ switch a .Type .Kind {
500+ case ast .TypeAutoOwner :
501+ entity .HasOwner = true
502+ return e .writer .UpdateEntity (dm .ID , entity )
503+ case ast .TypeAutoChangedBy :
504+ entity .HasChangedBy = true
505+ return e .writer .UpdateEntity (dm .ID , entity )
506+ case ast .TypeAutoCreatedDate :
507+ entity .HasCreatedDate = true
508+ return e .writer .UpdateEntity (dm .ID , entity )
509+ case ast .TypeAutoChangedDate :
510+ entity .HasChangedDate = true
511+ return e .writer .UpdateEntity (dm .ID , entity )
512+ }
498513 // CALCULATED attributes are only supported on persistent entities
499514 if a .Calculated && ! entity .Persistable {
500515 return fmt .Errorf ("attribute '%s': CALCULATED attributes are only supported on persistent entities" , a .Name )
@@ -639,6 +654,30 @@ func (e *Executor) execAlterEntity(s *ast.AlterEntityStmt) error {
639654 fmt .Fprintf (e .output , "Modified attribute '%s' on entity %s\n " , s .AttributeName , s .Name )
640655
641656 case ast .AlterEntityDropAttribute :
657+ // System attribute pseudo-names: drop by clearing entity flags
658+ switch strings .ToLower (s .AttributeName ) {
659+ case "owner" :
660+ if entity .HasOwner {
661+ entity .HasOwner = false
662+ return e .writer .UpdateEntity (dm .ID , entity )
663+ }
664+ case "changedby" :
665+ if entity .HasChangedBy {
666+ entity .HasChangedBy = false
667+ return e .writer .UpdateEntity (dm .ID , entity )
668+ }
669+ case "createddate" :
670+ if entity .HasCreatedDate {
671+ entity .HasCreatedDate = false
672+ return e .writer .UpdateEntity (dm .ID , entity )
673+ }
674+ case "changeddate" :
675+ if entity .HasChangedDate {
676+ entity .HasChangedDate = false
677+ return e .writer .UpdateEntity (dm .ID , entity )
678+ }
679+ }
680+
642681 idx := - 1
643682 for i , attr := range entity .Attributes {
644683 if attr .Name == s .AttributeName {
@@ -746,70 +785,6 @@ func (e *Executor) execAlterEntity(s *ast.AlterEntityStmt) error {
746785 e .invalidateDomainModelsCache ()
747786 fmt .Fprintf (e .output , "Set comment on entity %s\n " , s .Name )
748787
749- case ast .AlterEntitySetStoreOwner :
750- entity .HasOwner = true
751- if err := e .writer .UpdateEntity (dm .ID , entity ); err != nil {
752- return fmt .Errorf ("failed to set store owner: %w" , err )
753- }
754- e .invalidateDomainModelsCache ()
755- fmt .Fprintf (e .output , "Enabled store owner on entity %s\n " , s .Name )
756-
757- case ast .AlterEntitySetStoreChangedBy :
758- entity .HasChangedBy = true
759- if err := e .writer .UpdateEntity (dm .ID , entity ); err != nil {
760- return fmt .Errorf ("failed to set store changed by: %w" , err )
761- }
762- e .invalidateDomainModelsCache ()
763- fmt .Fprintf (e .output , "Enabled store changed by on entity %s\n " , s .Name )
764-
765- case ast .AlterEntitySetStoreCreatedDate :
766- entity .HasCreatedDate = true
767- if err := e .writer .UpdateEntity (dm .ID , entity ); err != nil {
768- return fmt .Errorf ("failed to set store created date: %w" , err )
769- }
770- e .invalidateDomainModelsCache ()
771- fmt .Fprintf (e .output , "Enabled store created date on entity %s\n " , s .Name )
772-
773- case ast .AlterEntitySetStoreChangedDate :
774- entity .HasChangedDate = true
775- if err := e .writer .UpdateEntity (dm .ID , entity ); err != nil {
776- return fmt .Errorf ("failed to set store changed date: %w" , err )
777- }
778- e .invalidateDomainModelsCache ()
779- fmt .Fprintf (e .output , "Enabled store changed date on entity %s\n " , s .Name )
780-
781- case ast .AlterEntityDropStoreOwner :
782- entity .HasOwner = false
783- if err := e .writer .UpdateEntity (dm .ID , entity ); err != nil {
784- return fmt .Errorf ("failed to drop store owner: %w" , err )
785- }
786- e .invalidateDomainModelsCache ()
787- fmt .Fprintf (e .output , "Disabled store owner on entity %s\n " , s .Name )
788-
789- case ast .AlterEntityDropStoreChangedBy :
790- entity .HasChangedBy = false
791- if err := e .writer .UpdateEntity (dm .ID , entity ); err != nil {
792- return fmt .Errorf ("failed to drop store changed by: %w" , err )
793- }
794- e .invalidateDomainModelsCache ()
795- fmt .Fprintf (e .output , "Disabled store changed by on entity %s\n " , s .Name )
796-
797- case ast .AlterEntityDropStoreCreatedDate :
798- entity .HasCreatedDate = false
799- if err := e .writer .UpdateEntity (dm .ID , entity ); err != nil {
800- return fmt .Errorf ("failed to drop store created date: %w" , err )
801- }
802- e .invalidateDomainModelsCache ()
803- fmt .Fprintf (e .output , "Disabled store created date on entity %s\n " , s .Name )
804-
805- case ast .AlterEntityDropStoreChangedDate :
806- entity .HasChangedDate = false
807- if err := e .writer .UpdateEntity (dm .ID , entity ); err != nil {
808- return fmt .Errorf ("failed to drop store changed date: %w" , err )
809- }
810- e .invalidateDomainModelsCache ()
811- fmt .Fprintf (e .output , "Disabled store changed date on entity %s\n " , s .Name )
812-
813788 case ast .AlterEntitySetPosition :
814789 if s .Position == nil {
815790 return fmt .Errorf ("no position provided" )
0 commit comments