aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTing-Wei Lan <tingwei.lan@cobinhood.com>2019-03-13 17:35:40 +0800
committerJhih-Ming Huang <jm.huang@cobinhood.com>2019-03-26 17:48:22 +0800
commit2504595f7a879a193aeb7e938cfde6ea42028911 (patch)
tree8489314b9a6698613eb08268ea24ecd5032d61cc
parenteaa030080d25d4fa0d91fd35daa8892f75f4d51d (diff)
downloaddexon-2504595f7a879a193aeb7e938cfde6ea42028911.tar
dexon-2504595f7a879a193aeb7e938cfde6ea42028911.tar.gz
dexon-2504595f7a879a193aeb7e938cfde6ea42028911.tar.bz2
dexon-2504595f7a879a193aeb7e938cfde6ea42028911.tar.lz
dexon-2504595f7a879a193aeb7e938cfde6ea42028911.tar.xz
dexon-2504595f7a879a193aeb7e938cfde6ea42028911.tar.zst
dexon-2504595f7a879a193aeb7e938cfde6ea42028911.zip
core: vm: sqlvm: schema: mark if an index are referenced by foreign keys
In order to check foreign keys efficiently during deletion, an index should be marked when it is referenced by foreign keys. Since we now have flags which cannot be declared directly from the source code, two helper functions are added to distinguish between two groups of flags.
-rw-r--r--core/vm/sqlvm/schema/schema.go36
1 files changed, 36 insertions, 0 deletions
diff --git a/core/vm/sqlvm/schema/schema.go b/core/vm/sqlvm/schema/schema.go
index 638b85817..7bbe9518e 100644
--- a/core/vm/sqlvm/schema/schema.go
+++ b/core/vm/sqlvm/schema/schema.go
@@ -40,6 +40,25 @@ const (
ColumnAttrHasSequence
)
+// GetDeclaredFlags returns flags which can be mapped to the source code tokens.
+func (a ColumnAttr) GetDeclaredFlags() ColumnAttr {
+ mask := ColumnAttrPrimaryKey |
+ ColumnAttrNotNull |
+ ColumnAttrUnique |
+ ColumnAttrHasDefault |
+ ColumnAttrHasForeignKey |
+ ColumnAttrHasSequence
+ return a & mask
+
+}
+
+// GetDerivedFlags returns flags which are not declared in the source code but
+// can be derived from it.
+func (a ColumnAttr) GetDerivedFlags() ColumnAttr {
+ mask := ColumnAttr(0)
+ return a & mask
+}
+
// TableRef defines the type for table index in Schema.
type TableRef uint8
@@ -58,8 +77,25 @@ type IndexAttr uint16
const (
// IndexAttrUnique indicates whether an index is unique.
IndexAttrUnique IndexAttr = 1 << iota
+ // IndexAttrReferenced indicates whether an index is referenced by columns
+ // with foreign key constraints. This attribute cannot be specified by
+ // users. It is computed automatically during contract creation.
+ IndexAttrReferenced
)
+// GetDeclaredFlags returns flags which can be mapped to the source code tokens.
+func (a IndexAttr) GetDeclaredFlags() IndexAttr {
+ mask := IndexAttrUnique
+ return a & mask
+}
+
+// GetDerivedFlags returns flags which are not declared in the source code but
+// can be derived from it.
+func (a IndexAttr) GetDerivedFlags() IndexAttr {
+ mask := IndexAttrReferenced
+ return a & mask
+}
+
// Schema defines sqlvm schema struct.
type Schema []Table