/
vm_bridge_sql.go
115 lines (100 loc) · 3.65 KB
/
vm_bridge_sql.go
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
/*
Copyright (C) BABEC. All rights reserved.
Copyright (C) THL A29 Limited, a Tencent company. All rights reserved.
SPDX-License-Identifier: Apache-2.0
*/
package wasmer
import (
"chainmaker.org/chainmaker/protocol/v2"
)
//var rowIndex int32 = 0
//var verifySql = &types.StandardSqlVerify{}
// ExecuteQuery execute query sql, return result set index
func (s *WaciInstance) ExecuteQuery() int32 {
err := wacsi.ExecuteQuery(s.RequestBody, s.Sc.Contract.Name, s.Sc.TxSimContext, s.Memory, s.ChainId)
if err != nil {
s.recordMsg(err.Error())
return protocol.ContractSdkSignalResultFail
}
return protocol.ContractSdkSignalResultSuccess
}
// ExecuteQuery execute query sql, return result set index
func (s *WaciInstance) ExecuteQueryOneLen() int32 {
return s.executeQueryOneCore(true)
}
// ExecuteQuery execute query sql, return result set index
func (s *WaciInstance) ExecuteQueryOne() int32 {
return s.executeQueryOneCore(false)
}
func (s *WaciInstance) executeQueryOneCore(isLen bool) int32 {
data, err := wacsi.ExecuteQueryOne(s.RequestBody, s.Sc.Contract.Name,
s.Sc.TxSimContext, s.Memory, s.Sc.GetStateCache, s.ChainId, isLen)
s.Sc.GetStateCache = data // reset _data
if err != nil {
s.recordMsg(err.Error())
return protocol.ContractSdkSignalResultFail
}
return protocol.ContractSdkSignalResultSuccess
}
// RSHasNext return is there a next line, 1 is has next row, 0 is no next row
func (s *WaciInstance) RSHasNext() int32 {
err := wacsi.RSHasNext(s.RequestBody, s.Sc.TxSimContext, s.Memory)
if err != nil {
s.recordMsg(err.Error())
return protocol.ContractSdkSignalResultFail
}
return protocol.ContractSdkSignalResultSuccess
}
// RSNextLen get result set length from chain
func (s *WaciInstance) RSNextLen() int32 {
return s.rsNextCore(true)
}
// RSNextLen get one row from result set
func (s *WaciInstance) RSNext() int32 {
return s.rsNextCore(false)
}
func (s *WaciInstance) rsNextCore(isLen bool) int32 {
data, err := wacsi.RSNext(s.RequestBody, s.Sc.TxSimContext, s.Memory, s.Sc.GetStateCache, isLen)
s.Sc.GetStateCache = data // reset _data
if err != nil {
s.recordMsg(err.Error())
return protocol.ContractSdkSignalResultFail
}
return protocol.ContractSdkSignalResultSuccess
}
// RSClose close sql statement
func (s *WaciInstance) RSClose() int32 {
err := wacsi.RSClose(s.RequestBody, s.Sc.TxSimContext, s.Memory)
if err != nil {
s.recordMsg(err.Error())
return protocol.ContractSdkSignalResultFail
}
return protocol.ContractSdkSignalResultSuccess
}
// ExecuteUpdate execute update and insert sql, allow single row change
// as: update table set name = 'Tom' where uniqueKey='xxx'
func (s *WaciInstance) ExecuteUpdate() int32 {
err := wacsi.ExecuteUpdate(s.RequestBody, s.Sc.Contract.Name, s.Sc.method, s.Sc.TxSimContext, s.Memory, s.ChainId)
if err != nil {
s.recordMsg(err.Error())
return protocol.ContractSdkSignalResultFail
}
return protocol.ContractSdkSignalResultSuccess
}
// ExecuteDDL execute DDL sql, for init_contract or upgrade method. allow table create/alter/drop/truncate
//
// allow: [CREATE TABLE tableName] [ALTER TABLE tableName]
// [DROP TABLE tableName] [TRUNCATE TABLE tableName]
//
// not allow: [CREATE DATABASE dbName] [CREATE TABLE dbName.tableName] [ALTER TABLE dbName.tableName]
// [DROP DATABASE dbName] [DROP TABLE dbName.tableName] [TRUNCATE TABLE dbName.tableName]
//
// You must have a primary key to create a table
func (s *WaciInstance) ExecuteDDL() int32 {
err := wacsi.ExecuteDDL(s.RequestBody, s.Sc.Contract.Name, s.Sc.TxSimContext, s.Memory, s.Sc.method)
if err != nil {
s.recordMsg(err.Error())
return protocol.ContractSdkSignalResultFail
}
return protocol.ContractSdkSignalResultSuccess
}