3
0

Cleanup compose module fields configs

This commit is contained in:
Denis Arh
2022-07-31 16:05:06 +02:00
parent 0ae4311003
commit 04e93ede90
18 changed files with 216 additions and 141 deletions
+1 -4
View File
@@ -19,11 +19,8 @@ moduleField: schema.#Resource & {
name: {sortable: true}
label: {sortable: true}
options: { goType: "types.ModuleFieldOptions" }
encoding_strategy: { goType: "types.EncodingStrategy" }
privacy: { goType: "types.ModuleFieldConfigDataPrivacy" }
private: { goType: "bool", storeIdent: "is_private" }
config: { goType: "types.ModuleFieldConfig" }
required: { goType: "bool", storeIdent: "is_required" }
visible: { goType: "bool", storeIdent: "is_visible" }
multi: { goType: "bool", storeIdent: "is_multi" }
default_value: { goType: "types.RecordValueSet" }
expressions: { goType: "types.ModuleFieldExpr" }
+31 -16
View File
@@ -1270,42 +1270,57 @@ func moduleSystemFieldsToAttributes(ctx context.Context, cm dal.ConnectionMeta,
// partitionedModuleSystemFieldsToAttributes converts all system-defined module fields to attributes
// keeping user-defined codec in mind
func partitionedModuleSystemFieldsToAttributes(cm dal.ConnectionMeta, mod *types.Module) (out dal.AttributeSet) {
sysEnc := mod.Config.DAL.SystemFieldEncoding
var (
sysEnc = mod.Config.DAL.SystemFieldEncoding
mf = func(name string, es *types.EncodingStrategy) *types.ModuleField {
return &types.ModuleField{
Name: name,
Config: types.ModuleFieldConfig{
DAL: types.ModuleFieldConfigDAL{EncodingStrategy: *es},
},
}
}
)
if sysEnc.ID != nil {
out = append(out, dal.PrimaryAttribute(sysID, modelFieldCodec(cm, mod, &types.ModuleField{Name: sysID, EncodingStrategy: *sysEnc.ID})))
out = append(out, dal.PrimaryAttribute(sysID, modelFieldCodec(cm, mod, mf(sysID, sysEnc.ID))))
}
if sysEnc.ModuleID != nil {
out = append(out, dal.FullAttribute(sysModuleID, &dal.TypeID{}, modelFieldCodec(cm, mod, &types.ModuleField{Name: sysModuleID, EncodingStrategy: *sysEnc.ModuleID})))
out = append(out, dal.FullAttribute(sysModuleID, &dal.TypeID{}, modelFieldCodec(cm, mod, mf(sysModuleID, sysEnc.ModuleID))))
}
if sysEnc.NamespaceID != nil {
out = append(out, dal.FullAttribute(sysNamespaceID, &dal.TypeID{}, modelFieldCodec(cm, mod, &types.ModuleField{Name: sysNamespaceID, EncodingStrategy: *sysEnc.NamespaceID})))
out = append(out, dal.FullAttribute(sysNamespaceID, &dal.TypeID{}, modelFieldCodec(cm, mod, mf(sysNamespaceID, sysEnc.NamespaceID))))
}
if sysEnc.OwnedBy != nil {
out = append(out, dal.FullAttribute(sysOwnedBy, &dal.TypeID{}, modelFieldCodec(cm, mod, &types.ModuleField{Name: sysOwnedBy, EncodingStrategy: *sysEnc.OwnedBy})))
out = append(out, dal.FullAttribute(sysOwnedBy, &dal.TypeID{}, modelFieldCodec(cm, mod, mf(sysOwnedBy, sysEnc.OwnedBy))))
}
if sysEnc.CreatedAt != nil {
out = append(out, dal.FullAttribute(sysCreatedAt, &dal.TypeTimestamp{}, modelFieldCodec(cm, mod, &types.ModuleField{Name: sysCreatedAt, EncodingStrategy: *sysEnc.CreatedAt})))
out = append(out, dal.FullAttribute(sysCreatedAt, &dal.TypeTimestamp{}, modelFieldCodec(cm, mod, mf(sysCreatedAt, sysEnc.CreatedAt))))
}
if sysEnc.CreatedBy != nil {
out = append(out, dal.FullAttribute(sysCreatedBy, &dal.TypeID{}, modelFieldCodec(cm, mod, &types.ModuleField{Name: sysCreatedBy, EncodingStrategy: *sysEnc.CreatedBy})))
out = append(out, dal.FullAttribute(sysCreatedBy, &dal.TypeID{}, modelFieldCodec(cm, mod, mf(sysCreatedBy, sysEnc.CreatedBy))))
}
if sysEnc.UpdatedAt != nil {
out = append(out, dal.FullAttribute(sysUpdatedAt, &dal.TypeTimestamp{Nullable: true}, modelFieldCodec(cm, mod, &types.ModuleField{Name: sysUpdatedAt, EncodingStrategy: *sysEnc.UpdatedAt})))
out = append(out, dal.FullAttribute(sysUpdatedAt, &dal.TypeTimestamp{Nullable: true}, modelFieldCodec(cm, mod, mf(sysUpdatedAt, sysEnc.UpdatedAt))))
}
if sysEnc.UpdatedBy != nil {
out = append(out, dal.FullAttribute(sysUpdatedBy, &dal.TypeID{Nullable: true}, modelFieldCodec(cm, mod, &types.ModuleField{Name: sysUpdatedBy, EncodingStrategy: *sysEnc.UpdatedBy})))
out = append(out, dal.FullAttribute(sysUpdatedBy, &dal.TypeID{Nullable: true}, modelFieldCodec(cm, mod, mf(sysUpdatedBy, sysEnc.UpdatedBy))))
}
if sysEnc.DeletedAt != nil {
out = append(out, dal.FullAttribute(sysDeletedAt, &dal.TypeTimestamp{Nullable: true}, modelFieldCodec(cm, mod, &types.ModuleField{Name: sysDeletedAt, EncodingStrategy: *sysEnc.DeletedAt})))
out = append(out, dal.FullAttribute(sysDeletedAt, &dal.TypeTimestamp{Nullable: true}, modelFieldCodec(cm, mod, mf(sysDeletedAt, sysEnc.DeletedAt))))
}
if sysEnc.DeletedBy != nil {
out = append(out, dal.FullAttribute(sysDeletedBy, &dal.TypeID{Nullable: true}, modelFieldCodec(cm, mod, &types.ModuleField{Name: sysDeletedBy, EncodingStrategy: *sysEnc.DeletedBy})))
out = append(out, dal.FullAttribute(sysDeletedBy, &dal.TypeID{Nullable: true}, modelFieldCodec(cm, mod, mf(sysDeletedBy, sysEnc.DeletedBy))))
}
return
@@ -1411,7 +1426,7 @@ func moduleFieldToAttribute(ctx context.Context, cm dal.ConnectionMeta, mod *typ
return nil, fmt.Errorf("invalid field %s: kind %s not supported", f.Name, f.Kind)
}
out.SensitivityLevel = f.Privacy.SensitivityLevel
out.SensitivityLevel = f.Config.Privacy.SensitivityLevel
out.Label = f.Name
out.MultiValue = f.Multi
@@ -1449,13 +1464,13 @@ func modelFieldCodec(cm dal.ConnectionMeta, mod *types.Module, f *types.ModuleFi
c = baseModelFieldCodec(cm, mod, f)
switch {
case f.EncodingStrategy.EncodingStrategyAlias != nil:
case f.Config.DAL.EncodingStrategy.EncodingStrategyAlias != nil:
c = &dal.CodecAlias{
Ident: f.EncodingStrategy.EncodingStrategyAlias.Ident,
Ident: f.Config.DAL.EncodingStrategy.EncodingStrategyAlias.Ident,
}
case f.EncodingStrategy.EncodingStrategyJSON != nil:
case f.Config.DAL.EncodingStrategy.EncodingStrategyJSON != nil:
c = &dal.CodecRecordValueSetJSON{
Ident: f.EncodingStrategy.EncodingStrategyJSON.Ident,
Ident: f.Config.DAL.EncodingStrategy.EncodingStrategyJSON.Ident,
}
}
-5
View File
@@ -96,8 +96,6 @@ type (
UsageDisclosure string `json:"usageDisclosure"`
}
ModelMeta map[string]any
ModuleFilter struct {
ModuleID []uint64 `json:"moduleID"`
NamespaceID uint64 `json:"namespaceID,string"`
@@ -168,9 +166,6 @@ func (set ModuleSet) FindByHandle(handle string) *Module {
func (c *ModuleConfig) Scan(src any) error { return sql.ParseJSON(src, c) }
func (c ModuleConfig) Value() (driver.Value, error) { return json.Marshal(c) }
func (m *ModelMeta) Scan(src any) error { return sql.ParseJSON(src, m) }
func (m ModelMeta) Value() (driver.Value, error) { return json.Marshal(m) }
func ParseModuleConfig(ss []string) (m ModuleConfig, err error) {
if len(ss) == 0 {
return
+16 -11
View File
@@ -25,15 +25,14 @@ type (
Kind string `json:"kind"`
Name string `json:"name"`
// Options relevant to field type
Options ModuleFieldOptions `json:"options"`
EncodingStrategy EncodingStrategy `json:"encodingStrategy"`
// Configuration - how sub-services and sub-systems like DAL and record revisions
// are configured to work with this field
Config ModuleFieldConfig `json:"config"`
Privacy ModuleFieldConfigDataPrivacy `json:"privacy"`
Private bool `json:"isPrivate"`
Required bool `json:"isRequired"`
Visible bool `json:"isVisible"`
Multi bool `json:"isMulti"`
DefaultValue RecordValueSet `json:"defaultValue"`
@@ -51,6 +50,15 @@ type (
Label string `json:"label"`
}
ModuleFieldConfig struct {
DAL ModuleFieldConfigDAL `json:"dal"`
Privacy ModuleFieldConfigDataPrivacy `json:"privacy"`
}
ModuleFieldConfigDAL struct {
EncodingStrategy EncodingStrategy `json:"encodingStrategy"`
}
ModuleFieldConfigDataPrivacy struct {
// Define the highest sensitivity level which
// can be configured on the module fields
@@ -429,9 +437,6 @@ func (set ModuleFieldSet) Clone() (out ModuleFieldSet) {
func (set *ModuleFieldSet) Scan(src any) error { return sql.ParseJSON(src, set) }
func (set ModuleFieldSet) Value() (driver.Value, error) { return json.Marshal(set) }
func (set *EncodingStrategy) Scan(src any) error { return sql.ParseJSON(src, set) }
func (set EncodingStrategy) Value() (driver.Value, error) { return json.Marshal(set) }
func (set ModuleFieldSet) Names() (names []string) {
names = make([]string, len(set))
@@ -511,8 +516,8 @@ func (f ModuleField) IsRef() bool {
}
func (f ModuleField) IsSensitive() bool {
return f.Privacy.SensitivityLevel > 0
return f.Config.Privacy.SensitivityLevel > 0
}
func (p *ModuleFieldConfigDataPrivacy) Scan(src any) error { return sql.ParseJSON(src, p) }
func (p ModuleFieldConfigDataPrivacy) Value() (driver.Value, error) { return json.Marshal(p) }
func (p *ModuleFieldConfig) Scan(src any) error { return sql.ParseJSON(src, p) }
func (p ModuleFieldConfig) Value() (driver.Value, error) { return json.Marshal(p) }
-2
View File
@@ -594,8 +594,6 @@ paths:
type: integer
isRequired:
type: boolean
isPrivate:
type: boolean
isMulti:
type: boolean
isSystem:
-2
View File
@@ -319,8 +319,6 @@ paths:
type: integer
isRequired:
type: boolean
isPrivate:
type: boolean
isMulti:
type: boolean
isSystem:
+1 -2
View File
@@ -194,10 +194,9 @@ func (c *composeModuleField) MarshalYAML() (interface{}, error) {
"label", c.res.Label,
"options", nopt,
"config", c.res.Config,
"private", c.res.Private,
"required", c.res.Required,
"visible", c.res.Visible,
"multi", c.res.Multi,
"defaultValue", c.res.DefaultValue,
+5 -6
View File
@@ -314,15 +314,9 @@ func (wrap *composeModuleField) UnmarshalYAML(n *yaml.Node) (err error) {
case "label":
return y7s.DecodeScalar(v, "module label", &wrap.res.Label)
case "private":
return y7s.DecodeScalar(v, "module private", &wrap.res.Private)
case "required":
return y7s.DecodeScalar(v, "module required", &wrap.res.Required)
case "visible":
return y7s.DecodeScalar(v, "module visible", &wrap.res.Visible)
case "multi":
return y7s.DecodeScalar(v, "module multi", &wrap.res.Multi)
@@ -331,6 +325,11 @@ func (wrap *composeModuleField) UnmarshalYAML(n *yaml.Node) (err error) {
return err
}
case "config":
if err = v.Decode(&wrap.res.Config); err != nil {
return err
}
case "expressions":
ea := composeModuleFieldExpr{}
if err = v.Decode(&ea); err != nil {
+18 -30
View File
@@ -257,24 +257,21 @@ type (
// auxComposeModuleField is an auxiliary structure used for transporting to/from RDBMS store
auxComposeModuleField struct {
ID uint64 `db:"id"`
ModuleID uint64 `db:"module_id"`
Place int `db:"place"`
Kind string `db:"kind"`
Name string `db:"name"`
Label string `db:"label"`
Options composeType.ModuleFieldOptions `db:"options"`
EncodingStrategy composeType.EncodingStrategy `db:"encoding_strategy"`
Privacy composeType.ModuleFieldConfigDataPrivacy `db:"privacy"`
Private bool `db:"private"`
Required bool `db:"required"`
Visible bool `db:"visible"`
Multi bool `db:"multi"`
DefaultValue composeType.RecordValueSet `db:"default_value"`
Expressions composeType.ModuleFieldExpr `db:"expressions"`
CreatedAt time.Time `db:"created_at"`
UpdatedAt *time.Time `db:"updated_at"`
DeletedAt *time.Time `db:"deleted_at"`
ID uint64 `db:"id"`
ModuleID uint64 `db:"module_id"`
Place int `db:"place"`
Kind string `db:"kind"`
Name string `db:"name"`
Label string `db:"label"`
Options composeType.ModuleFieldOptions `db:"options"`
Config composeType.ModuleFieldConfig `db:"config"`
Required bool `db:"required"`
Multi bool `db:"multi"`
DefaultValue composeType.RecordValueSet `db:"default_value"`
Expressions composeType.ModuleFieldExpr `db:"expressions"`
CreatedAt time.Time `db:"created_at"`
UpdatedAt *time.Time `db:"updated_at"`
DeletedAt *time.Time `db:"deleted_at"`
}
// auxComposeNamespace is an auxiliary structure used for transporting to/from RDBMS store
@@ -1495,11 +1492,8 @@ func (aux *auxComposeModuleField) encode(res *composeType.ModuleField) (_ error)
aux.Name = res.Name
aux.Label = res.Label
aux.Options = res.Options
aux.EncodingStrategy = res.EncodingStrategy
aux.Privacy = res.Privacy
aux.Private = res.Private
aux.Config = res.Config
aux.Required = res.Required
aux.Visible = res.Visible
aux.Multi = res.Multi
aux.DefaultValue = res.DefaultValue
aux.Expressions = res.Expressions
@@ -1521,11 +1515,8 @@ func (aux auxComposeModuleField) decode() (res *composeType.ModuleField, _ error
res.Name = aux.Name
res.Label = aux.Label
res.Options = aux.Options
res.EncodingStrategy = aux.EncodingStrategy
res.Privacy = aux.Privacy
res.Private = aux.Private
res.Config = aux.Config
res.Required = aux.Required
res.Visible = aux.Visible
res.Multi = aux.Multi
res.DefaultValue = aux.DefaultValue
res.Expressions = aux.Expressions
@@ -1547,11 +1538,8 @@ func (aux *auxComposeModuleField) scan(row scanner) error {
&aux.Name,
&aux.Label,
&aux.Options,
&aux.EncodingStrategy,
&aux.Privacy,
&aux.Private,
&aux.Config,
&aux.Required,
&aux.Visible,
&aux.Multi,
&aux.DefaultValue,
&aux.Expressions,
+10
View File
@@ -40,6 +40,12 @@ type (
Table *Table
Column *Column
}
DropColumn struct {
Dialect dialect
Table *Table
Column string
}
)
func CreateIndexTemplates(base *CreateIndex, ii ...*Index) []any {
@@ -283,6 +289,10 @@ func (c *AddColumn) String() string {
return sql
}
func (c *DropColumn) String() string {
return "ALTER TABLE" + " " + c.Table.Name + " DROP COLUMN " + c.Column
}
func GetBool(ctx context.Context, db sqlx.QueryerContext, query exp.SQLExpression) (bool, error) {
var (
exists bool
@@ -98,6 +98,31 @@ func (s *schema) AddColumn(ctx context.Context, db sqlx.ExtContext, t *ddl.Table
return ddl.Exec(ctx, db, aux...)
}
func (s *schema) DropColumn(ctx context.Context, db sqlx.ExtContext, t *ddl.Table, cc ...string) (err error) {
var (
aux []any
exists bool
)
for _, c := range cc {
// check column existence
if exists, err = s.ColumnExists(ctx, db, c, t.Name); err != nil {
return
} else if !exists {
// column exists
continue
}
aux = append(aux, &ddl.DropColumn{
Dialect: dialect,
Table: t,
Column: c,
})
}
return ddl.Exec(ctx, db, aux...)
}
func columnTypeTranslator(ct ddl.ColumnType) string {
switch ct.Type {
case ddl.ColumnTypeIdentifier:
@@ -66,3 +66,28 @@ func (s *schema) AddColumn(ctx context.Context, db sqlx.ExtContext, t *ddl.Table
return ddl.Exec(ctx, db, aux...)
}
func (s *schema) DropColumn(ctx context.Context, db sqlx.ExtContext, t *ddl.Table, cc ...string) (err error) {
var (
aux []any
exists bool
)
for _, c := range cc {
// check column existence
if exists, err = s.ColumnExists(ctx, db, c, t.Name); err != nil {
return
} else if !exists {
// column exists
continue
}
aux = append(aux, &ddl.DropColumn{
Dialect: dialect,
Table: t,
Column: c,
})
}
return ddl.Exec(ctx, db, aux...)
}
@@ -75,6 +75,31 @@ func (s *schema) AddColumn(ctx context.Context, db sqlx.ExtContext, t *ddl.Table
return ddl.Exec(ctx, db, aux...)
}
func (s *schema) DropColumn(ctx context.Context, db sqlx.ExtContext, t *ddl.Table, cc ...string) (err error) {
var (
aux []any
exists bool
)
for _, c := range cc {
// check column existence
if exists, err = s.ColumnExists(ctx, db, c, t.Name); err != nil {
return
} else if !exists {
// column exists
continue
}
aux = append(aux, &ddl.DropColumn{
Dialect: dialect,
Table: t,
Column: c,
})
}
return ddl.Exec(ctx, db, aux...)
}
func columnTypeTranslator(ct ddl.ColumnType) string {
switch ct.Type {
case ddl.ColumnTypeTimestamp:
+44 -56
View File
@@ -1744,11 +1744,8 @@ var (
"name",
"label",
"options",
"encoding_strategy",
"privacy",
"is_private",
"config",
"is_required",
"is_visible",
"is_multi",
"default_value",
"expressions",
@@ -1764,24 +1761,21 @@ var (
composeModuleFieldInsertQuery = func(d goqu.DialectWrapper, res *composeType.ModuleField) *goqu.InsertDataset {
return d.Insert(composeModuleFieldTable).
Rows(goqu.Record{
"id": res.ID,
"rel_module": res.ModuleID,
"place": res.Place,
"kind": res.Kind,
"name": res.Name,
"label": res.Label,
"options": res.Options,
"encoding_strategy": res.EncodingStrategy,
"privacy": res.Privacy,
"is_private": res.Private,
"is_required": res.Required,
"is_visible": res.Visible,
"is_multi": res.Multi,
"default_value": res.DefaultValue,
"expressions": res.Expressions,
"created_at": res.CreatedAt,
"updated_at": res.UpdatedAt,
"deleted_at": res.DeletedAt,
"id": res.ID,
"rel_module": res.ModuleID,
"place": res.Place,
"kind": res.Kind,
"name": res.Name,
"label": res.Label,
"options": res.Options,
"config": res.Config,
"is_required": res.Required,
"is_multi": res.Multi,
"default_value": res.DefaultValue,
"expressions": res.Expressions,
"created_at": res.CreatedAt,
"updated_at": res.UpdatedAt,
"deleted_at": res.DeletedAt,
})
}
@@ -1795,23 +1789,20 @@ var (
OnConflict(
goqu.DoUpdate(target[1:],
goqu.Record{
"rel_module": res.ModuleID,
"place": res.Place,
"kind": res.Kind,
"name": res.Name,
"label": res.Label,
"options": res.Options,
"encoding_strategy": res.EncodingStrategy,
"privacy": res.Privacy,
"is_private": res.Private,
"is_required": res.Required,
"is_visible": res.Visible,
"is_multi": res.Multi,
"default_value": res.DefaultValue,
"expressions": res.Expressions,
"created_at": res.CreatedAt,
"updated_at": res.UpdatedAt,
"deleted_at": res.DeletedAt,
"rel_module": res.ModuleID,
"place": res.Place,
"kind": res.Kind,
"name": res.Name,
"label": res.Label,
"options": res.Options,
"config": res.Config,
"is_required": res.Required,
"is_multi": res.Multi,
"default_value": res.DefaultValue,
"expressions": res.Expressions,
"created_at": res.CreatedAt,
"updated_at": res.UpdatedAt,
"deleted_at": res.DeletedAt,
},
),
)
@@ -1823,23 +1814,20 @@ var (
composeModuleFieldUpdateQuery = func(d goqu.DialectWrapper, res *composeType.ModuleField) *goqu.UpdateDataset {
return d.Update(composeModuleFieldTable).
Set(goqu.Record{
"rel_module": res.ModuleID,
"place": res.Place,
"kind": res.Kind,
"name": res.Name,
"label": res.Label,
"options": res.Options,
"encoding_strategy": res.EncodingStrategy,
"privacy": res.Privacy,
"is_private": res.Private,
"is_required": res.Required,
"is_visible": res.Visible,
"is_multi": res.Multi,
"default_value": res.DefaultValue,
"expressions": res.Expressions,
"created_at": res.CreatedAt,
"updated_at": res.UpdatedAt,
"deleted_at": res.DeletedAt,
"rel_module": res.ModuleID,
"place": res.Place,
"kind": res.Kind,
"name": res.Name,
"label": res.Label,
"options": res.Options,
"config": res.Config,
"is_required": res.Required,
"is_multi": res.Multi,
"default_value": res.DefaultValue,
"expressions": res.Expressions,
"created_at": res.CreatedAt,
"updated_at": res.UpdatedAt,
"deleted_at": res.DeletedAt,
}).
Where(composeModuleFieldPrimaryKeys(res))
}
+1
View File
@@ -37,6 +37,7 @@ type (
TableExists(context.Context, sqlx.QueryerContext, string) (bool, error)
CreateTable(context.Context, sqlx.ExtContext, *ddl.Table) error
AddColumn(context.Context, sqlx.ExtContext, *ddl.Table, ...*ddl.Column) error
DropColumn(context.Context, sqlx.ExtContext, *ddl.Table, ...string) error
}
Store struct {
+1
View File
@@ -29,6 +29,7 @@ func (s *Store) Upgrade(ctx context.Context) (err error) {
fixes := []func(context.Context, *Store) error{
fix202209_extendComposeModuleForPrivacyAndDAL,
fix202209_extendComposeModuleFieldsForPrivacyAndDAL,
fix202209_dropObsoleteComposeModuleFields,
}
for _, fix := range fixes {
+12 -3
View File
@@ -15,11 +15,20 @@ func fix202209_extendComposeModuleForPrivacyAndDAL(ctx context.Context, s *Store
}
func fix202209_extendComposeModuleFieldsForPrivacyAndDAL(ctx context.Context, s *Store) (err error) {
s.log(ctx).Info("extending compose_module_field table with privacy and encoding_strategy columns")
s.log(ctx).Info("extending compose_module_field table with config column")
return s.SchemaAPI.AddColumn(
ctx, s.DB,
&Table{Name: "compose_module_field"},
&Column{Type: ColumnType{Type: ColumnTypeJson}, DefaultValue: "'{}'", Name: "privacy"},
&Column{Type: ColumnType{Type: ColumnTypeJson}, DefaultValue: "'{}'", Name: "encoding_strategy"},
&Column{Type: ColumnType{Type: ColumnTypeJson}, DefaultValue: "'{}'", Name: "config"},
)
}
func fix202209_dropObsoleteComposeModuleFields(ctx context.Context, s *Store) (err error) {
s.log(ctx).Info("extending compose_module_field table with config column")
return s.SchemaAPI.DropColumn(
ctx, s.DB,
&Table{Name: "compose_module_field"},
"is_private",
"is_visible",
)
}
+1 -4
View File
@@ -464,15 +464,12 @@ func tableComposeModuleField() *Table {
ColumnDef("place", ColumnTypeInteger),
ColumnDef("kind", ColumnTypeText),
ColumnDef("options", ColumnTypeJson),
ColumnDef("privacy", ColumnTypeJson),
ColumnDef("encoding_strategy", ColumnTypeJson),
ColumnDef("config", ColumnTypeJson),
ColumnDef("default_value", ColumnTypeJson),
ColumnDef("expressions", ColumnTypeJson),
ColumnDef("name", ColumnTypeVarchar, ColumnTypeLength(handleLength)),
ColumnDef("label", ColumnTypeText),
ColumnDef("is_private", ColumnTypeBoolean),
ColumnDef("is_required", ColumnTypeBoolean),
ColumnDef("is_visible", ColumnTypeBoolean),
ColumnDef("is_multi", ColumnTypeBoolean),
CUDTimestamps,