Browse Source

ckdb/sql - db v0.9.1 changes

master
kanoi 10 years ago
parent
commit
ac509aa98d
  1. 19
      sql/ckdb.sql
  2. 1
      sql/tables.sql
  3. 42
      sql/v0.9-v0.9.1.sql
  4. 68
      src/ckdb.c

19
sql/ckdb.sql

@ -19,6 +19,7 @@ CREATE TABLE users (
joineddate timestamp with time zone NOT NULL, joineddate timestamp with time zone NOT NULL,
passwordhash character varying(256) NOT NULL, passwordhash character varying(256) NOT NULL,
secondaryuserid character varying(64) NOT NULL, secondaryuserid character varying(64) NOT NULL,
salt character varying(256) DEFAULT ''::character varying NOT NULL,
createdate timestamp with time zone NOT NULL, createdate timestamp with time zone NOT NULL,
createby character varying(64) DEFAULT ''::character varying NOT NULL, createby character varying(64) DEFAULT ''::character varying NOT NULL,
createcode character varying(128) DEFAULT ''::character varying NOT NULL, createcode character varying(128) DEFAULT ''::character varying NOT NULL,
@ -29,6 +30,24 @@ CREATE TABLE users (
CREATE UNIQUE INDEX usersusername ON users USING btree (username, expirydate); CREATE UNIQUE INDEX usersusername ON users USING btree (username, expirydate);
CREATE TABLE useratts (
userid bigint NOT NULL,
attname character varying(64) NOT NULL,
attstr character varying(256) DEFAULT ''::character varying NOT NULL,
attstr2 character varying(256) DEFAULT ''::character varying NOT NULL,
attnum bigint DEFAULT 0 NOT NULL,
attnum2 bigint DEFAULT 0 NOT NULL,
attdate timestamp with time zone DEFAULT '1970-01-01 00:00:00+00',
attdate2 timestamp with time zone DEFAULT '1970-01-01 00:00:00+00',
createdate timestamp with time zone NOT NULL,
createby character varying(64) DEFAULT ''::character varying NOT NULL,
createcode character varying(128) DEFAULT ''::character varying NOT NULL,
createinet character varying(128) DEFAULT ''::character varying NOT NULL,
expirydate timestamp with time zone DEFAULT '6666-06-06 06:06:06+00',
PRIMARY KEY (userid, attname, expirydate)
);
CREATE TABLE workers ( CREATE TABLE workers (
workerid bigint NOT NULL, -- unique per record workerid bigint NOT NULL, -- unique per record
userid bigint NOT NULL, userid bigint NOT NULL,

1
sql/tables.sql

@ -15,6 +15,7 @@ select 'shareerrors' as "shareerrors",count(*) from shareerrors;
select 'shares' as "shares",count(*) from shares; select 'shares' as "shares",count(*) from shares;
select 'sharesummary' as "sharesummary",count(*) from sharesummary; select 'sharesummary' as "sharesummary",count(*) from sharesummary;
select 'users' as "users",count(*) from users; select 'users' as "users",count(*) from users;
select 'useratts' as "useratts",count(*) from useratts;
select 'userstats' as "userstats",count(*) from userstats; select 'userstats' as "userstats",count(*) from userstats;
select 'version' as "version",count(*) from version; select 'version' as "version",count(*) from version;
select 'workers' as "workers",count(*) from workers; select 'workers' as "workers",count(*) from workers;

42
sql/v0.9-v0.9.1.sql

@ -0,0 +1,42 @@
SET SESSION AUTHORIZATION 'postgres';
BEGIN transaction;
DO $$
DECLARE ver TEXT;
BEGIN
UPDATE version set version='0.9.1' where vlock=1 and version='0.9';
IF found THEN
RETURN;
END IF;
SELECT version into ver from version
WHERE vlock=1;
RAISE EXCEPTION 'Wrong DB version - expect "0.9" - found "%"', ver;
END $$;
CREATE TABLE useratts (
userid bigint NOT NULL,
attname character varying(64) NOT NULL,
attstr character varying(256) DEFAULT ''::character varying NOT NULL,
attstr2 character varying(256) DEFAULT ''::character varying NOT NULL,
attnum bigint DEFAULT 0 NOT NULL,
attnum2 bigint DEFAULT 0 NOT NULL,
attdate timestamp with time zone DEFAULT '1970-01-01 00:00:00+00',
attdate2 timestamp with time zone DEFAULT '1970-01-01 00:00:00+00',
createdate timestamp with time zone NOT NULL,
createby character varying(64) DEFAULT ''::character varying NOT NULL,
createcode character varying(128) DEFAULT ''::character varying NOT NULL,
createinet character varying(128) DEFAULT ''::character varying NOT NULL,
expirydate timestamp with time zone DEFAULT '6666-06-06 06:06:06+00',
PRIMARY KEY (userid, attname, expirydate)
);
ALTER TABLE ONLY users
ADD COLUMN salt character varying(256) DEFAULT ''::character varying NOT NULL;
END transaction;

68
src/ckdb.c

@ -46,8 +46,8 @@
*/ */
#define DB_VLOCK "1" #define DB_VLOCK "1"
#define DB_VERSION "0.9" #define DB_VERSION "0.9.1"
#define CKDB_VERSION DB_VERSION"-0.276" #define CKDB_VERSION DB_VERSION"-0.280"
#define WHERE_FFL " - from %s %s() line %d" #define WHERE_FFL " - from %s %s() line %d"
#define WHERE_FFL_HERE __FILE__, __func__, __LINE__ #define WHERE_FFL_HERE __FILE__, __func__, __LINE__
@ -838,8 +838,6 @@ typedef struct logqueue {
static K_LIST *logqueue_free; static K_LIST *logqueue_free;
static K_STORE *logqueue_store; static K_STORE *logqueue_store;
static pthread_mutex_t wq_waitlock;
static pthread_cond_t wq_waitcond;
// WORKQUEUE // WORKQUEUE
typedef struct workqueue { typedef struct workqueue {
@ -865,6 +863,8 @@ typedef struct workqueue {
static K_LIST *workqueue_free; static K_LIST *workqueue_free;
static K_STORE *workqueue_store; static K_STORE *workqueue_store;
static pthread_mutex_t wq_waitlock;
static pthread_cond_t wq_waitcond;
// TRANSFER // TRANSFER
#define NAME_SIZE 63 #define NAME_SIZE 63
@ -954,6 +954,7 @@ typedef struct users {
tv_t joineddate; tv_t joineddate;
char passwordhash[TXT_BIG+1]; char passwordhash[TXT_BIG+1];
char secondaryuserid[TXT_SML+1]; char secondaryuserid[TXT_SML+1];
char salt[TXT_BIG+1];
HISTORYDATECONTROLFIELDS; HISTORYDATECONTROLFIELDS;
} USERS; } USERS;
@ -968,23 +969,28 @@ static K_TREE *userid_root;
static K_LIST *users_free; static K_LIST *users_free;
static K_STORE *users_store; static K_STORE *users_store;
/* TODO: for account settings - but do we want manual/auto payouts? /* TODO:
// USERACCOUNTS // USERATTS
typedef struct useraccounts { typedef struct useratts {
int64_t userid; int64_t userid;
int64_t payoutlimit; char attstr[TXT_BIG+1];
char autopayout[TXT_FLG+1]; char attstr2[TXT_BIG+1];
int64_t attnum;
int64_t attnum2;
tv_t attdate;
tv_t attdate2;
HISTORYDATECONTROLFIELDS; HISTORYDATECONTROLFIELDS;
} USERACCOUNTS; } USERATTS;
#define ALLOC_USERACCOUNTS 1024 #define ALLOC_USERATTS 1024
#define LIMIT_USERACCOUNTS 0 #define LIMIT_USERATTS 0
#define INIT_USERACCOUNTS(_item) INIT_GENERIC(_item, useraccounts) #define INIT_USERATTS(_item) INIT_GENERIC(_item, useratts)
#define DATA_USERACCOUNTS(_var, _item) DATA_GENERIC(_var, _item, useraccounts, true) #define DATA_USERATTS(_var, _item) DATA_GENERIC(_var, _item, useratts, true)
#define DATA_USERATTS_NULL(_var, _item) DATA_GENERIC(_var, _item, useratts, true)
static K_TREE *useraccounts_root; static K_TREE *useratts_root;
static K_LIST *useraccounts_free; static K_LIST *useratts_free;
static K_STORE *useraccounts_store; static K_STORE *useratts_store;
*/ */
// WORKERS // WORKERS
@ -2202,8 +2208,8 @@ static PGconn *dbconnect()
snprintf(conninfo, sizeof(conninfo), snprintf(conninfo, sizeof(conninfo),
"host=127.0.0.1 dbname=%s user=%s%s%s", "host=127.0.0.1 dbname=%s user=%s%s%s",
db_name, db_name, db_user,
db_user, db_pass ? " password=" : "", db_pass ? " password=" : "",
db_pass ? db_pass : ""); db_pass ? db_pass : "");
conn = PQconnectdb(conninfo); conn = PQconnectdb(conninfo);
@ -2730,9 +2736,9 @@ static bool users_pass_email(PGconn *conn, K_ITEM *u_item, char *oldhash,
ins = "insert into users " ins = "insert into users "
"(userid,username,emailaddress,joineddate,passwordhash," "(userid,username,emailaddress,joineddate,passwordhash,"
"secondaryuserid" "secondaryuserid,salt"
HISTORYDATECONTROL ") select " HISTORYDATECONTROL ") select "
"userid,username,$3,joineddate,$4,secondaryuserid," "userid,username,$3,joineddate,$4,secondaryuserid,salt,"
"$5,$6,$7,$8,$9 from users where " "$5,$6,$7,$8,$9 from users where "
"userid=$1 and expirydate=$2"; "userid=$1 and expirydate=$2";
@ -2788,7 +2794,7 @@ static K_ITEM *users_add(PGconn *conn, char *username, char *emailaddress,
uint64_t hash; uint64_t hash;
__maybe_unused uint64_t tmp; __maybe_unused uint64_t tmp;
bool ok = false; bool ok = false;
char *params[6 + HISTORYDATECOUNT]; char *params[7 + HISTORYDATECOUNT];
int par; int par;
LOGDEBUG("%s(): add", __func__); LOGDEBUG("%s(): add", __func__);
@ -2814,6 +2820,8 @@ static K_ITEM *users_add(PGconn *conn, char *username, char *emailaddress,
HASH_BER(tohash, strlen(tohash), 1, hash, tmp); HASH_BER(tohash, strlen(tohash), 1, hash, tmp);
__bin2hex(row->secondaryuserid, (void *)(&hash), sizeof(hash)); __bin2hex(row->secondaryuserid, (void *)(&hash), sizeof(hash));
row->salt[0] = '\0';
HISTORYDATEINIT(row, cd, by, code, inet); HISTORYDATEINIT(row, cd, by, code, inet);
HISTORYDATETRANSFER(trf_root, row); HISTORYDATETRANSFER(trf_root, row);
@ -2828,13 +2836,14 @@ static K_ITEM *users_add(PGconn *conn, char *username, char *emailaddress,
params[par++] = tv_to_buf(&(row->joineddate), NULL, 0); params[par++] = tv_to_buf(&(row->joineddate), NULL, 0);
params[par++] = str_to_buf(row->passwordhash, NULL, 0); params[par++] = str_to_buf(row->passwordhash, NULL, 0);
params[par++] = str_to_buf(row->secondaryuserid, NULL, 0); params[par++] = str_to_buf(row->secondaryuserid, NULL, 0);
params[par++] = str_to_buf(row->salt, NULL, 0);
HISTORYDATEPARAMS(params, par, row); HISTORYDATEPARAMS(params, par, row);
PARCHK(par, params); PARCHK(par, params);
ins = "insert into users " ins = "insert into users "
"(userid,username,emailaddress,joineddate,passwordhash," "(userid,username,emailaddress,joineddate,passwordhash,"
"secondaryuserid" "secondaryuserid,salt"
HISTORYDATECONTROL ") values (" PQPARAM11 ")"; HISTORYDATECONTROL ") values (" PQPARAM12 ")";
if (!conn) { if (!conn) {
conn = dbconnect(); conn = dbconnect();
@ -2881,14 +2890,14 @@ static bool users_fill(PGconn *conn)
USERS *row; USERS *row;
char *field; char *field;
char *sel; char *sel;
int fields = 6; int fields = 7;
bool ok; bool ok;
LOGDEBUG("%s(): select", __func__); LOGDEBUG("%s(): select", __func__);
sel = "select " sel = "select "
"userid,username,emailaddress,joineddate,passwordhash," "userid,username,emailaddress,joineddate,passwordhash,"
"secondaryuserid" "secondaryuserid,salt"
HISTORYDATECONTROL HISTORYDATECONTROL
" from users"; " from users";
res = PQexec(conn, sel, CKPQ_READ); res = PQexec(conn, sel, CKPQ_READ);
@ -2950,6 +2959,11 @@ static bool users_fill(PGconn *conn)
break; break;
TXT_TO_STR("secondaryuserid", field, row->secondaryuserid); TXT_TO_STR("secondaryuserid", field, row->secondaryuserid);
PQ_GET_FLD(res, i, "salt", field, ok);
if (!ok)
break;
TXT_TO_STR("salt", field, row->salt);
HISTORYDATEFLDS(res, i, row, ok); HISTORYDATEFLDS(res, i, row, ok);
if (!ok) if (!ok)
break; break;
@ -3585,7 +3599,7 @@ unitem:
if (!ok) if (!ok)
k_add_head(paymentaddresses_free, item); k_add_head(paymentaddresses_free, item);
else { else {
// Remove old (unneeded) records // Remove from ram, old (unneeded) records
pa.userid = userid; pa.userid = userid;
pa.expirydate.tv_sec = 0L; pa.expirydate.tv_sec = 0L;
pa.payaddress[0] = '\0'; pa.payaddress[0] = '\0';

Loading…
Cancel
Save