Skip to content

Commit f8d647a

Browse files
committed
add modify table related functions
1 parent 674048f commit f8d647a

5 files changed

Lines changed: 164 additions & 56 deletions

File tree

lib/config.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,13 @@ const opType = {
2020
r_delete: 9,
2121
t_assert:10,
2222
t_grant: 11,
23-
t_recreate:12
23+
t_recreate:12,
24+
t_report:13,
25+
t_add_fields:14,
26+
t_delete_fields:15,
27+
t_modify_fields:16,
28+
t_create_index:17,
29+
t_delete_index:18
2430
}
2531
exports.permission = permission;
2632
exports.opType = opType;

lib/util.js

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,46 @@ function getCryptAlgTypeFromAccout(account){
435435
return cryptoAlg;
436436
}
437437

438+
function tryEncryptRaw(ChainSQL, payment) {
439+
440+
var that = ChainSQL;
441+
var raw = payment.raw;
442+
return new Promise(function (resolve, reject) {
443+
444+
if(! that.confidential){
445+
resolve( convertStringToHex(raw) );
446+
return ;
447+
}
448+
449+
// confidential table
450+
451+
var connect = that.connect;
452+
getUserToken(connect.api.connection, connect.scope, connect.address, that.tab).then(function (token) {
453+
token = token[that.connect.scope + that.tab];
454+
455+
var ciperRaw;
456+
if (token && token != '') {
457+
var secret = decodeToken(that, token);
458+
var regSoftGMSeed = /^[a-zA-Z1-9]{51,51}/
459+
460+
let algType = "aes";
461+
if(that.connect.secret === "gmAlg"){
462+
algType = "gmAlg";
463+
}else if(regSoftGMSeed.test(that.connect.secret)){
464+
algType = "softGMAlg";
465+
}
466+
ciperRaw = crypto.symEncrypt(secret, raw, algType).toUpperCase();
467+
} else {
468+
ciperRaw = convertStringToHex(raw);
469+
}
470+
471+
resolve(ciperRaw);
472+
}).catch(function(error) {
473+
reject(error);
474+
});
475+
476+
});
477+
}
438478

439479
module.exports = {
440480
convertStringToHex: convertStringToHex,
@@ -461,5 +501,6 @@ module.exports = {
461501
parseCb: parseCb,
462502
checkCbOpt:checkCbOpt,
463503
checkExpect:checkExpect,
464-
checkSubError:checkSubError
504+
checkSubError:checkSubError,
505+
tryEncryptRaw:tryEncryptRaw
465506
}

src/index.js

Lines changed: 55 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,45 @@ ChainsqlAPI.prototype.dropTable = function (name) {
390390
return this;
391391
}
392392
}
393+
394+
ChainsqlAPI.prototype.addTableFields = function (name, raw){
395+
validate.create(name,raw);
396+
return modifyTable(this,opType.t_add_fields,name, raw);
397+
}
398+
399+
ChainsqlAPI.prototype.deleteTableFields = function (name, raw){
400+
return modifyTable(this,opType.t_delete_fields,name, raw);
401+
}
402+
403+
ChainsqlAPI.prototype.modifyTableFields = function (name, raw){
404+
validate.create(name,raw);
405+
return modifyTable(this,opType.t_modify_fields,name, raw);
406+
}
407+
408+
ChainsqlAPI.prototype.createIndex = function (name, raw){
409+
return modifyTable(this,opType.t_create_index,name, raw);
410+
}
411+
412+
ChainsqlAPI.prototype.deleteIndex = function (name, raw){
413+
return modifyTable(this,opType.t_delete_index,name, raw);
414+
}
415+
416+
function modifyTable(ChainSQL,optype,name,raw){
417+
ChainSQL.payment = {
418+
address: ChainSQL.connect.address,
419+
opType: optype,
420+
tables: [{
421+
Table: {
422+
TableName: convertStringToHex(name)
423+
}
424+
}],
425+
raw: JSON.stringify(raw),
426+
tsType: 'TableListSet',
427+
};
428+
429+
return ChainSQL;
430+
}
431+
393432
ChainsqlAPI.prototype.renameTable = function (oldName, newName) {
394433
if (newName == '' || !newName) {
395434
throw chainsqlError("Table new name can not be empty")
@@ -1068,15 +1107,23 @@ ChainsqlAPI.prototype.prepareJson = function(){
10681107
reject(error)
10691108
});
10701109

1071-
}
1072-
else if (that.payment.opType === opType['t_grant']) {
1073-
handleGrantPayment(that).then(() => {
1110+
}else{
1111+
if (that.payment.opType === opType['t_grant']) {
1112+
handleGrantPayment(that).then(() => {
1113+
that.api.prepareTable(that, that.payment, resolve, reject);
1114+
}).catch(error => {
1115+
reject(error);
1116+
});
1117+
} else if(that.payment.opType >= opType.t_add_fields && that.payment.opType <= opType.t_delete_index){
1118+
util.tryEncryptRaw(that,that.payment).then(function (raw) {
1119+
that.payment.raw = raw;
1120+
that.api.prepareTable(that, that.payment, resolve, reject);
1121+
}).catch(function(error) {
1122+
reject(error);
1123+
});
1124+
}else {
10741125
that.api.prepareTable(that, that.payment, resolve, reject);
1075-
}).catch(error => {
1076-
reject(error);
1077-
});
1078-
} else {
1079-
that.api.prepareTable(that, that.payment, resolve, reject);
1126+
}
10801127
}
10811128
})
10821129
}

src/table.js

Lines changed: 1 addition & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const getUserToken = util.getUserToken;
99
const getTxJson = util.getTxJson;
1010
const generateToken = util.generateToken;
1111
const decodeToken = util.decodeToken;
12+
const tryEncryptRaw = util.tryEncryptRaw;
1213
const crypto = require('../lib/crypto');
1314

1415
class Table extends Submit {
@@ -421,50 +422,6 @@ Table.prototype.prepareJson = function() {
421422
});
422423
}
423424

424-
425-
426-
function tryEncryptRaw(ChainSQL, payment) {
427-
428-
var that = ChainSQL;
429-
var raw = payment.raw;
430-
return new Promise(function (resolve, reject) {
431-
432-
if(! that.confidential){
433-
resolve( convertStringToHex(raw) );
434-
return ;
435-
}
436-
437-
// confidential table
438-
439-
var connect = that.connect;
440-
getUserToken(connect.api.connection, connect.scope, connect.address, that.tab).then(function (token) {
441-
token = token[that.connect.scope + that.tab];
442-
443-
var ciperRaw;
444-
if (token && token != '') {
445-
var secret = decodeToken(that, token);
446-
var regSoftGMSeed = /^[a-zA-Z1-9]{51,51}/
447-
448-
let algType = "aes";
449-
if(that.connect.secret === "gmAlg"){
450-
algType = "gmAlg";
451-
}else if(regSoftGMSeed.test(that.connect.secret)){
452-
algType = "softGMAlg";
453-
}
454-
ciperRaw = crypto.symEncrypt(secret, raw, algType).toUpperCase();
455-
} else {
456-
ciperRaw = convertStringToHex(raw);
457-
}
458-
459-
resolve(ciperRaw);
460-
}).catch(function(error) {
461-
reject(error);
462-
});
463-
464-
});
465-
}
466-
467-
468425
function prepareTable(ChainSQL, payment, resolve, reject) {
469426

470427
var connect = ChainSQL.connect;

test/test.js

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ var issuer = {
2525
address: "znbWk4iuz2HL1e1Ux91TzYfFzJHGeYxBA4"
2626
}
2727

28-
var sTableName = "test666";
28+
var sTableName = "test888";
2929
var sTableName2 = "b1";
3030
var sReName = "boy1234";
3131
var sTableName3 = "hijack12";
@@ -203,7 +203,9 @@ async function testChainsql(){
203203
//现在底层不允许直接删除所有记录这种操作了
204204
// await testDeleteAll();
205205

206-
await testTableSet();
206+
// await testTableSet();
207+
208+
// await testModifyTable();
207209
}
208210

209211
function subTable(tb, owner) {
@@ -358,6 +360,61 @@ var insertAfterGrant = async function(){
358360
c.as(owner);
359361
}
360362

363+
var testModifyTable = async function(){
364+
await testAddFields();
365+
366+
// await testModifyFields();
367+
368+
// await testDeleteFields();
369+
370+
// await testCreateIndex();
371+
372+
// await testDeleteIndex();
373+
}
374+
375+
var testAddFields = async function(){
376+
var raw = [
377+
{'field':'firmname','type':'varchar','length':50,'default':null},
378+
{'field':'height','type':'int'}
379+
]
380+
var rs = await c.addTableFields(sTableName,raw).submit({expect:'db_success'});
381+
console.log("addTableFields",rs);
382+
}
383+
384+
var testModifyFields = async function(){
385+
var raw = [
386+
{'field':'firmname','type':'text'}
387+
]
388+
var rs = await c.modifyTableFields(sTableName,raw).submit({expect:'db_success'});
389+
console.log("modifyTableFields",rs);
390+
}
391+
392+
var testDeleteFields = async function(){
393+
var raw = [
394+
{'field':'firmname'}
395+
]
396+
var rs = await c.deleteTableFields(sTableName,raw).submit({expect:'db_success'});
397+
console.log("deleteTableFields",rs);
398+
}
399+
400+
var testCreateIndex = async function(){
401+
var raw = [
402+
{'index':'NameIndex'},
403+
{'field':'id'},
404+
{'field':'name'}
405+
]
406+
var rs = await c.createIndex(sTableName,raw).submit({expect:'db_success'});
407+
console.log("createIndex",rs);
408+
}
409+
410+
var testDeleteIndex = async function(){
411+
var raw = [
412+
{'index':'NameIndex'}
413+
]
414+
var rs = await c.deleteIndex(sTableName,raw).submit({expect:'db_success'});
415+
console.log("deleteIndex",rs);
416+
}
417+
361418
var testTxs = async function(){
362419
try {
363420
c.beginTran();

0 commit comments

Comments
 (0)