enh: add table_prefix and table_suffix options to database
This commit is contained in:
parent
d32b8fa0f1
commit
adff7af9dd
|
@ -69,7 +69,18 @@ static FORCE_INLINE void taosEncryptPass_c(uint8_t *inBuf, size_t len, char *tar
|
||||||
memcpy(target, buf, TSDB_PASSWORD_LEN);
|
memcpy(target, buf, TSDB_PASSWORD_LEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define taosGetTbHashVal(tbname, tblen, method, prefix, suffix) MurmurHash3_32((tbname), (tblen))
|
FORCE_INLINE int32_t taosGetTbHashVal(const char *tbname, int32_t tblen, int32_t method, int32_t prefix,
|
||||||
|
int32_t suffix) {
|
||||||
|
if (prefix == 0 && suffix == 0) {
|
||||||
|
return MurmurHash3_32(tbname, tblen);
|
||||||
|
} else {
|
||||||
|
if (tblen <= (prefix + suffix)) {
|
||||||
|
return MurmurHash3_32(tbname, tblen);
|
||||||
|
} else {
|
||||||
|
return MurmurHash3_32(tbname + prefix, tblen - prefix - suffix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,6 +103,8 @@ static const SSysDbTableSchema userDBSchema[] = {
|
||||||
{.name = "wal_roll_period", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = true},
|
{.name = "wal_roll_period", .bytes = 4, .type = TSDB_DATA_TYPE_INT, .sysInfo = true},
|
||||||
{.name = "wal_segment_size", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = true},
|
{.name = "wal_segment_size", .bytes = 8, .type = TSDB_DATA_TYPE_BIGINT, .sysInfo = true},
|
||||||
{.name = "sst_trigger", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT, .sysInfo = true},
|
{.name = "sst_trigger", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT, .sysInfo = true},
|
||||||
|
{.name = "table_prefix", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT, .sysInfo = true},
|
||||||
|
{.name = "table_suffix", .bytes = 2, .type = TSDB_DATA_TYPE_SMALLINT, .sysInfo = true},
|
||||||
};
|
};
|
||||||
|
|
||||||
static const SSysDbTableSchema userFuncSchema[] = {
|
static const SSysDbTableSchema userFuncSchema[] = {
|
||||||
|
|
|
@ -513,6 +513,12 @@ static int32_t mndCreateDb(SMnode *pMnode, SRpcMsg *pReq, SCreateDbReq *pCreate,
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dbObj.cfg.hashPrefix > 0) {
|
||||||
|
int32_t dbLen = strlen(dbObj.name) + 1;
|
||||||
|
mInfo("db:%s, hashPrefix adjust from %d to %d", dbObj.name, dbObj.cfg.hashPrefix, dbObj.cfg.hashPrefix + dbLen);
|
||||||
|
dbObj.cfg.hashPrefix += dbLen;
|
||||||
|
}
|
||||||
|
|
||||||
SVgObj *pVgroups = NULL;
|
SVgObj *pVgroups = NULL;
|
||||||
if (mndAllocVgroup(pMnode, &dbObj, &pVgroups) != 0) {
|
if (mndAllocVgroup(pMnode, &dbObj, &pVgroups) != 0) {
|
||||||
mError("db:%s, failed to create since %s", pCreate->db, terrstr());
|
mError("db:%s, failed to create since %s", pCreate->db, terrstr());
|
||||||
|
@ -1710,6 +1716,16 @@ static void mndDumpDbInfoData(SMnode *pMnode, SSDataBlock *pBlock, SDbObj *pDb,
|
||||||
|
|
||||||
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
colDataAppend(pColInfo, rows, (const char *)&pDb->cfg.sstTrigger, false);
|
colDataAppend(pColInfo, rows, (const char *)&pDb->cfg.sstTrigger, false);
|
||||||
|
|
||||||
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
|
int16_t hashPrefix = pDb->cfg.hashPrefix;
|
||||||
|
if (hashPrefix > 0) {
|
||||||
|
hashPrefix = pDb->cfg.hashPrefix - strlen(pDb->name) - 1;
|
||||||
|
}
|
||||||
|
colDataAppend(pColInfo, rows, (const char *)&hashPrefix, false);
|
||||||
|
|
||||||
|
pColInfo = taosArrayGet(pBlock->pDataBlock, cols++);
|
||||||
|
colDataAppend(pColInfo, rows, (const char *)&pDb->cfg.hashSuffix, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
taosMemoryFree(buf);
|
taosMemoryFree(buf);
|
||||||
|
|
|
@ -221,6 +221,7 @@
|
||||||
./test.sh -f tsim/table/describe.sim
|
./test.sh -f tsim/table/describe.sim
|
||||||
./test.sh -f tsim/table/double.sim
|
./test.sh -f tsim/table/double.sim
|
||||||
./test.sh -f tsim/table/float.sim
|
./test.sh -f tsim/table/float.sim
|
||||||
|
./test.sh -f tsim/table/hash.sim
|
||||||
./test.sh -f tsim/table/int.sim
|
./test.sh -f tsim/table/int.sim
|
||||||
./test.sh -f tsim/table/limit.sim
|
./test.sh -f tsim/table/limit.sim
|
||||||
./test.sh -f tsim/table/smallint.sim
|
./test.sh -f tsim/table/smallint.sim
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
system sh/stop_dnodes.sh
|
||||||
|
system sh/deploy.sh -n dnode1 -i 1
|
||||||
|
system sh/exec.sh -n dnode1 -s start
|
||||||
|
sql connect
|
||||||
|
|
||||||
|
#=========== prepare
|
||||||
|
#sql create database d1 vgroups 2
|
||||||
|
sql create database d1 vgroups 2 table_prefix 3 table_suffix 2
|
||||||
|
sql select * from information_schema.ins_databases
|
||||||
|
print $data(d1)[27] $data(d1)[28]
|
||||||
|
if $data(d1)[27] != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data(d1)[28] != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
sql use d1;
|
||||||
|
sql create table st (ts timestamp, i int) tags (j int);
|
||||||
|
sql create table st_ct_1 using st tags(3) st_ct_2 using st tags(4) st_ct_3 using st tags(5) st_ct_4 using st tags(6) st_ct_5 using st tags(7)
|
||||||
|
sql insert into st_ct_1 values(now+1s, 1)
|
||||||
|
sql insert into st_ct_1 values(now+2s, 2)
|
||||||
|
sql insert into st_ct_1 values(now+3s, 3)
|
||||||
|
sql insert into st_ct_2 values(now+1s, 1)
|
||||||
|
sql insert into st_ct_2 values(now+2s, 2)
|
||||||
|
sql insert into st_ct_2 values(now+3s, 3)
|
||||||
|
sql insert into st_ct_3 values(now+1s, 1)
|
||||||
|
sql insert into st_ct_3 values(now+2s, 2)
|
||||||
|
sql insert into st_ct_3 values(now+3s, 2)
|
||||||
|
sql insert into st_ct_4 values(now+1s, 1)
|
||||||
|
sql insert into st_ct_4 values(now+2s, 2)
|
||||||
|
sql insert into st_ct_4 values(now+3s, 2)
|
||||||
|
sql insert into st_ct_5 values(now+1s, 1)
|
||||||
|
sql insert into st_ct_5 values(now+2s, 2)
|
||||||
|
sql insert into st_ct_5 values(now+3s, 2)
|
||||||
|
|
||||||
|
# check query
|
||||||
|
sql select * from st
|
||||||
|
if $rows != 15 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
# check table vgroup
|
||||||
|
sql select * from information_schema.ins_tables where db_name = 'd1'
|
||||||
|
if $data(st_ct_1)[6] != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data(st_ct_2)[6] != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data(st_ct_3)[6] != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data(st_ct_4)[6] != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data(st_ct_5)[6] != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
# check invalid table name
|
||||||
|
sql create table c1 using st tags(3)
|
||||||
|
sql create table c12 using st tags(3)
|
||||||
|
sql create table c123 using st tags(3)
|
||||||
|
sql create table c1234 using st tags(3)
|
||||||
|
sql create table c12345 using st tags(3)
|
||||||
|
sql select * from information_schema.ins_tables where db_name = 'd1'
|
||||||
|
if $data(c1)[6] != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data(c12)[6] != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data(c123)[6] != 2 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data(c1234)[6] != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
if $data(c12345)[6] != 3 then
|
||||||
|
return -1
|
||||||
|
endi
|
||||||
|
|
||||||
|
system sh/exec.sh -n dnode1 -s stop -x SIGINT
|
Loading…
Reference in New Issue