1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
// Copyright 2021-present The Atlas Authors. All rights reserved.
// This source code is licensed under the Apache 2.0 license found
// in the LICENSE file in the root directory of this source tree.
package sqlspec
import (
"ariga.io/atlas/schemahcl"
)
type (
// Schema holds a specification for a Schema.
Schema struct {
Name string `spec:"name,name"`
schemahcl.DefaultExtension
}
// Table holds a specification for an SQL table.
Table struct {
Name string `spec:",name"`
Qualifier string `spec:",qualifier"`
Schema *schemahcl.Ref `spec:"schema"`
Columns []*Column `spec:"column"`
PrimaryKey *PrimaryKey `spec:"primary_key"`
ForeignKeys []*ForeignKey `spec:"foreign_key"`
Indexes []*Index `spec:"index"`
Checks []*Check `spec:"check"`
schemahcl.DefaultExtension
}
// Column holds a specification for a column in an SQL table.
Column struct {
Name string `spec:",name"`
Null bool `spec:"null"`
Type *schemahcl.Type `spec:"type"`
Default schemahcl.Value `spec:"default"`
schemahcl.DefaultExtension
}
// PrimaryKey holds a specification for the primary key of a table.
PrimaryKey struct {
Columns []*schemahcl.Ref `spec:"columns"`
schemahcl.DefaultExtension
}
// Index holds a specification for the index key of a table.
Index struct {
Name string `spec:",name"`
Unique bool `spec:"unique,omitempty"`
Parts []*IndexPart `spec:"on"`
Columns []*schemahcl.Ref `spec:"columns"`
schemahcl.DefaultExtension
}
// IndexPart holds a specification for the index key part.
IndexPart struct {
Desc bool `spec:"desc,omitempty"`
Column *schemahcl.Ref `spec:"column"`
Expr string `spec:"expr,omitempty"`
schemahcl.DefaultExtension
}
// Check holds a specification for a check constraint on a table.
Check struct {
Name string `spec:",name"`
Expr string `spec:"expr"`
schemahcl.DefaultExtension
}
// ForeignKey holds a specification for the Foreign key of a table.
ForeignKey struct {
Symbol string `spec:",name"`
Columns []*schemahcl.Ref `spec:"columns"`
RefColumns []*schemahcl.Ref `spec:"ref_columns"`
OnUpdate *schemahcl.Ref `spec:"on_update"`
OnDelete *schemahcl.Ref `spec:"on_delete"`
schemahcl.DefaultExtension
}
// Type represents a database agnostic column type.
Type string
)
func init() {
schemahcl.Register("table", &Table{})
schemahcl.Register("schema", &Schema{})
}
|