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-04-11 10:39:59 +0800
commitf0f86cc530b6a31b076dc71657951eb8167426b0 (patch)
treeed975e2772f8778e53fa0591eab68375936d6731
parent5fb0651683c9d188170e8bb93b6d24a183526d07 (diff)
downloaddexon-f0f86cc530b6a31b076dc71657951eb8167426b0.tar
dexon-f0f86cc530b6a31b076dc71657951eb8167426b0.tar.gz
dexon-f0f86cc530b6a31b076dc71657951eb8167426b0.tar.bz2
dexon-f0f86cc530b6a31b076dc71657951eb8167426b0.tar.lz
dexon-f0f86cc530b6a31b076dc71657951eb8167426b0.tar.xz
dexon-f0f86cc530b6a31b076dc71657951eb8167426b0.tar.zst
dexon-f0f86cc530b6a31b076dc71657951eb8167426b0.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