Skip to content

Commit

Permalink
update Table.sol (#502)
Browse files Browse the repository at this point in the history
  • Loading branch information
bxq2011hust authored Feb 11, 2020
1 parent 9d07564 commit 2bad426
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 83 deletions.
80 changes: 45 additions & 35 deletions solidity/Table.sol
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
104 changes: 56 additions & 48 deletions solidity/TableTest.sol
Original file line number Diff line number Diff line change
@@ -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<entries.size(); ++i) {
string[] memory user_name_bytes_list = new string[](
uint256(entries.size())
);
int256[] memory item_id_list = new int256[](uint256(entries.size()));
string[] memory item_name_bytes_list = new string[](
uint256(entries.size())
);

for (int256 i = 0; i < entries.size(); ++i) {
Entry entry = entries.get(i);

user_name_bytes_list[uint256(i)] = entry.getString("name");
item_id_list[uint256(i)] = entry.getInt("item_id");
item_name_bytes_list[uint256(i)] = entry.getString("item_name");
item_name_bytes_list[uint256(i)] = entry.getString("item_name");
}

return (user_name_bytes_list, item_id_list, item_name_bytes_list);
}
//insert records
function insert(string name, int item_id, string item_name) public returns(int) {
TableFactory tf = TableFactory(0x1001);
Table table = tf.openTable("t_test");

function insert(string name, int256 item_id, string item_name)
public
returns (int256)
{
Table table = tableFactory.openTable(TABLE_NAME);

Entry entry = table.newEntry();
entry.set("name", name);
entry.set("item_id", item_id);
entry.set("item_name", item_name);
int count = table.insert(name, entry);

int256 count = table.insert(name, entry);
emit InsertResult(count);

return count;
}
//update records
function update(string name, int item_id, string item_name) public returns(int) {
TableFactory tf = TableFactory(0x1001);
Table table = tf.openTable("t_test");

function update(string name, int256 item_id, string item_name)
public
returns (int256)
{
Table table = tableFactory.openTable(TABLE_NAME);

Entry entry = table.newEntry();
entry.set("item_name", item_name);

Condition condition = table.newCondition();
condition.EQ("name", name);
condition.EQ("item_id", item_id);
int count = table.update(name, entry, condition);

int256 count = table.update(name, entry, condition);
emit UpdateResult(count);

return count;
}
//remove records
function remove(string name, int item_id) public returns(int){
TableFactory tf = TableFactory(0x1001);
Table table = tf.openTable("t_test");

function remove(string name, int256 item_id) public returns (int256) {
Table table = tableFactory.openTable(TABLE_NAME);

Condition condition = table.newCondition();
condition.EQ("name", name);
condition.EQ("item_id", item_id);
int count = table.remove(name, condition);

int256 count = table.remove(name, condition);
emit RemoveResult(count);

return count;
}
}

0 comments on commit 2bad426

Please sign in to comment.