diff --git a/solidity/Table.sol b/solidity/Table.sol index 51d037252..a590dabe7 100644 --- a/solidity/Table.sol +++ b/solidity/Table.sol @@ -2,57 +2,67 @@ pragma solidity ^0.4.24; contract TableFactory { function openTable(string) public constant returns (Table); //open table - function createTable(string,string,string) public returns(int); //create table + function createTable(string, string, string) public returns (int256); //create table } //select condition contract Condition { - function EQ(string, int) public; + function EQ(string, int256) public; function EQ(string, string) public; - - function NE(string, int) public; - function NE(string, string) public; - - function GT(string, int) public; - function GE(string, int) public; - - function LT(string, int) public; - function LE(string, int) public; - - function limit(int) public; - function limit(int, int) public; + + function NE(string, int256) public; + function NE(string, string) public; + + function GT(string, int256) public; + function GE(string, int256) public; + + function LT(string, int256) public; + function LE(string, int256) public; + + function limit(int256) public; + function limit(int256, int256) public; } -//one record +//one record contract Entry { - function getInt(string) public constant returns(int); - function getAddress(string) public constant returns(address); - function getBytes64(string) public constant returns(byte[64]); - function getBytes32(string) public constant returns(bytes32); - function getString(string) public constant returns(string); - - function set(string, int) public; + function getInt(string) public constant returns (int256); + function getUInt(string) public constant returns (int256); + function getAddress(string) public constant returns (address); + function getBytes64(string) public constant returns (bytes1[64]); + function getBytes32(string) public constant returns (bytes32); + function getString(string) public constant returns (string); + + function set(string, int256) public; + function set(string, uint256) public; function set(string, string) public; function set(string, address) public; } //record sets contract Entries { - function get(int) public constant returns(Entry); - function size() public constant returns(int); + function get(int256) public constant returns (Entry); + function size() public constant returns (int256); } //Table main contract contract Table { - //select api - function select(string, Condition) public constant returns(Entries); - //insert api - function insert(string, Entry) public returns(int); - //update api - function update(string, Entry, Condition) public returns(int); - //remove api - function remove(string, Condition) public returns(int); - - function newEntry() public constant returns(Entry); - function newCondition() public constant returns(Condition); + function select(string, Condition) public constant returns (Entries); + function insert(string, Entry) public returns (int256); + function update(string, Entry, Condition) public returns (int256); + function remove(string, Condition) public returns (int256); + + function newEntry() public constant returns (Entry); + function newCondition() public constant returns (Condition); +} + +contract KVTableFactory { + function openTable(string) public constant returns (KVTable); + function createTable(string, string, string) public returns (int256); +} + +//KVTable per permiary key has only one Entry +contract KVTable { + function get(string) public constant returns (bool, Entry); + function set(string, Entry) public returns (int256); + function newEntry() public constant returns (Entry); } diff --git a/solidity/TableTest.sol b/solidity/TableTest.sol index 041e3bd94..ab5677b30 100644 --- a/solidity/TableTest.sol +++ b/solidity/TableTest.sol @@ -1,89 +1,97 @@ pragma solidity ^0.4.24; pragma experimental ABIEncoderV2; - import "./Table.sol"; contract TableTest { - event CreateResult(int count); - event InsertResult(int count); - event UpdateResult(int count); - event RemoveResult(int count); - - //create table - function create() public returns(int){ - TableFactory tf = TableFactory(0x1001); //The fixed address is 0x1001 for TableFactory - - int count = tf.createTable("t_test", "name", "item_id,item_name"); - emit CreateResult(count); - return count; + event CreateResult(int256 count); + event InsertResult(int256 count); + event UpdateResult(int256 count); + event RemoveResult(int256 count); + + TableFactory tableFactory; + string constant TABLE_NAME = "t_test"; + constructor() public { + tableFactory = TableFactory(0x1001); //The fixed address is 0x1001 for TableFactory + // the parameters of createTable are tableName,keyField,"vlaueFiled1,vlaueFiled2,vlaueFiled3,..." + tableFactory.createTable(TABLE_NAME, "name", "item_id,item_name"); } //select records - function select(string name) public constant returns(string[], int[], string[]){ - TableFactory tf = TableFactory(0x1001); - Table table = tf.openTable("t_test"); - + function select(string name) + public + view + returns (string[], int256[], string[]) + { + Table table = tableFactory.openTable(TABLE_NAME); + Condition condition = table.newCondition(); - + Entries entries = table.select(name, condition); - string[] memory user_name_bytes_list = new string[](uint256(entries.size())); - int[] memory item_id_list = new int[](uint256(entries.size())); - string[] memory item_name_bytes_list = new string[](uint256(entries.size())); - - for(int i=0; i