⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bat5.mx

📁 一个内存数据库的源代码这是服务器端还有客户端
💻 MX
📖 第 1 页 / 共 5 页
字号:
static voidunlock_desc(bat bid){	BBPunfix(bid);}intCMDcapacity(lng *res, int *bid){	if (BBPcheck((bat) *bid, "CMDcapacity")) {		BAT *b = lock_desc((bat) *bid);		if (b == NULL) {			*res = lng_nil;		} else {			*res = (lng) BATcapacity(b);		}		unlock_desc(*bid);	}	return GDK_SUCCEED;}intCMDhead(str *res, int *bid){	if (BBPcheck((bat) *bid, "CMDhead")) {		str ret = (str)str_nil;		BAT *b = lock_desc((bat) *bid);		if (b) {			ret = *bid > 0 ? ATOMname(b->htype) : ATOMname(b->ttype);		}		*res = GDKstrdup(ret);		unlock_desc(*bid);	} else {		*res = GDKstrdup(str_nil);	}	return GDK_SUCCEED;}intCMDtail(str *res, int *bid){	if (BBPcheck((bat) *bid, "CMDtail")) {		str ret = (str)str_nil;		BAT *b = lock_desc((bat) *bid);		if (b) {			ret = *bid > 0 ? ATOMname(b->ttype) : ATOMname(b->htype);		}		*res = GDKstrdup(ret);		unlock_desc(*bid);	} else {		*res = GDKstrdup(str_nil);	}	return GDK_SUCCEED;}intCMDsetkey(BAT **result, BAT *input, bit *param){	BATkey(*result = input, *param ? BOUND2BTRUE : FALSE);	BBPfix(input->batCacheid);	return GDK_SUCCEED;}intCMDsetset(BAT **result, BAT *input, bit *param){	BATset(*result = input, *param ? BOUND2BTRUE : FALSE);	BBPfix(input->batCacheid);	return GDK_SUCCEED;}intCMDordered(bit *result, BAT *input){	*result = BATordered(input) ? 1 : 0;	return GDK_SUCCEED;}intCMDordered_rev(bit *result, BAT *input){	*result = BATordered_rev(input) ? 1 : 0;	return GDK_SUCCEED;}intCMDgetkey(bit *ret, BAT *b){	/* we must take care of the special case of a nil column (TYPE_void,seqbase=nil)	 * such nil columns never set hkey (and BUNins will never invalidate it if set) yet	 * a nil column of a BAT with <= 1 entries does not contain doubles => return TRUE.	 */	if (BATcount(b) <= 1) {		*ret = TRUE;	} else {		if (!b->hkey) {			BATpropcheck(b, BATPROPS_ALL);		}		*ret = b->hkey ? TRUE : FALSE;	}	return GDK_SUCCEED;}intCMDpersists(BAT **r, BAT *input, bit *param){	BATmode(*r = input, (*param == TRUE) ? PERSISTENT : (*param == FALSE) ? TRANSIENT : SESSION);	BBPfix(input->batCacheid);	return GDK_SUCCEED;}intCMDdestroy(bit *res, str input ){	int bid = BBPindex(input);	*res = FALSE;	if (bid) {		BBPfix(bid);		if (BBPindex(input) == bid) {			BAT *b = (BAT*)BBPgetdesc(ABS(bid));			BATmode(b, TRANSIENT);			*res = TRUE;		}		BBPunfix(bid);	}	return GDK_SUCCEED;}intCMDsetaccess(BAT **r, BAT *input, int *param){	bat oldCacheid = input->batCacheid;	*r = BATsetaccess(input, *param);	if ((*r)->batCacheid == oldCacheid) {		BBPfix(oldCacheid);	}	return GDK_SUCCEED;}intCMDgetaccess(int *r, BAT *input){	*r = BATgetaccess(input);	return GDK_SUCCEED;}static char *pre(str s1, str s2){	static char buf[64]="";	snprintf(buf, 64, "%s%s", s1, s2);	return buf;}static char *local_itoa(ssize_t i){	static char buf[32]="";	snprintf(buf, 32, SSZFMT, i);	return buf;}static char *local_utoa(size_t i){	static char buf[32]="";	snprintf(buf, 32, SZFMT, i);	return buf;}#define COLLISION 6voidHASHinfo(BAT *bn, Hash *h, str s){	hash_t i;	hash_t j;	size_t cnt[COLLISION + 2];	size_t largebuckets = 0;	size_t largetot = 0;	char buf[32];	BUNins(bn, pre(s, "type"), ATOMname(h->type),FALSE);	BUNins(bn, pre(s, "mask"), local_utoa(h->mask),FALSE);	BUNins(bn, pre(s, "lim"), local_utoa(h->lim),FALSE);	for (i = 0; i <= COLLISION + 1; i++) {		cnt[i] = 0;	}	for (i = 0; i <= h->mask; i++) {		if (h->hash[i] == HASH_MAX) {			cnt[0]++;		} else if (h->hash[i] > h->lim) {			GDKerror("HASHinfo: hash consistency problem %d\n", i);		} else if ((j = HASHlist(h, h->hash[i])) <= COLLISION + 1) {			cnt[j]++;		} else {			largebuckets++;			largetot += j;		}	}	for (i = 0; i <= COLLISION + 1; i++)		if (cnt[i]) {			BUNins(bn, pre(s, local_utoa(i)), local_utoa(cnt[i]),FALSE);		}	snprintf(buf, 32, SZFMT " on " SZFMT, largetot, largebuckets);	BUNins(bn, pre(s, "collision"), buf,FALSE);}static voidinfoHeap(BAT *bn, Heap *hp, str nme){	char buf[1024], *p = buf;	if (!hp)		return;	while (*nme)		*p++ = *nme++;	strcpy(p, "free");	BUNins(bn, buf, local_utoa(hp->free),FALSE);	strcpy(p, "size");	BUNins(bn, buf, local_utoa(hp->size),FALSE);	strcpy(p, "maxsize");	BUNins(bn, buf, local_utoa(hp->maxsize),FALSE);	strcpy(p, "storage");	BUNins(bn, buf, (hp->base == NULL || hp->base == (char*)1) ? "absent" : (hp->storage == STORE_MMAP) ? (hp->filename ? "memory mapped" : "anonymous vm") : (hp->storage & STORE_PRIV) ? "private map" : "malloced",FALSE);	strcpy(p, "filename");	BUNins(bn, buf, hp->filename ? hp->filename : "no file",FALSE);}static char *oidtostr(oid i){	int len = 48;	static char bf[48];	char *p = bf;	(void) OIDtoStr(&p, &len, &i);	return bf;}intCMDinfo(BAT **retval, BAT *b){	BAT *bn;	char mode[1024], *access;	if (!(bn = BATnew(TYPE_str, TYPE_str, 128)))		return GDK_FAIL;	*retval = bn;	if (b->batPersistence == PERSISTENT) {		strcpy(mode, "persistent");	} else if (b->batPersistence == SESSION) {		strcpy(mode, "session");	} else if (b->batPersistence == TRANSIENT) {		strcpy(mode, "transient");	} else {		strcpy(mode, "unknown");	}	switch (b->batRestricted) {	case BAT_READ:		access = "read-only";		break;	case BAT_WRITE:		access = "updatable";		break;	case BAT_APPEND:		access = "append-only";		break;	default:		access = "unknown";	}	BUNins(bn, "version", local_itoa(b->GDKversion),FALSE);	BUNins(bn, "batId", BATgetId(b),FALSE);	BUNins(bn, "batCacheid", local_itoa(b->batCacheid),FALSE);	BUNins(bn, "batParentid", local_itoa(b->batParentid),FALSE);	BUNins(bn, "batSharecnt", local_itoa(b->batSharecnt),FALSE);	BUNins(bn, "head", ATOMname(b->htype),FALSE);	BUNins(bn, "tail", ATOMname(b->ttype),FALSE);	BUNins(bn, "batPersistence", mode,FALSE);	BUNins(bn, "batRestricted", access,FALSE);	BUNins(bn, "batRefcnt", local_itoa(BBP_refs(b->batCacheid)),FALSE);	BUNins(bn, "batLRefcnt", local_itoa(BBP_lrefs(b->batCacheid)),FALSE);	BUNins(bn, "batDirty", BATdirty(b) ? "dirty" : "clean",FALSE);	BUNins(bn, "batSet", local_itoa(b->batSet),FALSE);	BUNins(bn, "void_tid", local_itoa(b->void_tid),FALSE);	BUNins(bn, "void_cnt", local_itoa(b->void_cnt),FALSE);	BUNins(bn, "hsorted", local_itoa(BAThordered(b)),FALSE);	BUNins(bn, "hident", b->hident,FALSE);	BUNins(bn, "hdense", local_itoa(BAThdense(b)),FALSE);	BUNins(bn, "hseqbase", oidtostr(b->hseqbase),FALSE);	BUNins(bn, "hkey", local_itoa(b->hkey),FALSE);	BUNins(bn, "hloc", local_itoa(b->hloc),FALSE);	BUNins(bn, "hvarsized", local_itoa(b->hvarsized),FALSE);	BUNins(bn, "halign", local_utoa(b->halign),FALSE);	BUNins(bn, "hnosorted", local_utoa(b->H->nosorted),FALSE);	BUNins(bn, "hnosorted_rev", local_utoa(b->H->nosorted_rev),FALSE);	BUNins(bn, "hnodense", local_utoa(b->H->nodense),FALSE);	BUNins(bn, "hnokey[0]", local_utoa(b->H->nokey[0]),FALSE);	BUNins(bn, "hnokey[1]", local_utoa(b->H->nokey[1]),FALSE);	BUNins(bn, "tident", b->tident,FALSE);	BUNins(bn, "tdense", local_itoa(BATtdense(b)),FALSE);	BUNins(bn, "tseqbase", oidtostr(b->tseqbase),FALSE);	BUNins(bn, "tsorted", local_itoa(BATtordered(b)),FALSE);	BUNins(bn, "tkey", local_itoa(b->tkey),FALSE);	BUNins(bn, "tloc", local_itoa(b->tloc),FALSE);	BUNins(bn, "tvarsized", local_itoa(b->tvarsized),FALSE);	BUNins(bn, "talign", local_utoa(b->talign),FALSE);	BUNins(bn, "tnosorted", local_utoa(b->T->nosorted),FALSE);	BUNins(bn, "tnosorted_rev", local_utoa(b->T->nosorted_rev),FALSE);	BUNins(bn, "tnodense", local_utoa(b->T->nodense),FALSE);	BUNins(bn, "tnokey[0]", local_utoa(b->T->nokey[0]),FALSE);	BUNins(bn, "tnokey[1]", local_utoa(b->T->nokey[1]),FALSE);	BUNins(bn, "batInserted", local_utoa(BUNindex(b, b->batInserted)),FALSE);	BUNins(bn, "batDeleted", local_utoa(BUNindex(b, b->batDeleted)),FALSE);	BUNins(bn, "batFirst", local_utoa(BUNindex(b, b->batFirst)),FALSE);	BUNins(bn, "top", local_utoa(BUNindex(b, (BUN) ((char *) Bunbase(b) + b->batBuns->free))),FALSE);	BUNins(bn, "batStamp", local_itoa(b->batStamp),FALSE);	BUNins(bn, "lastUsed", local_itoa(BBP_lastused(b->batCacheid)),FALSE);	BUNins(bn, "curStamp", local_itoa(BBPcurstamp()),FALSE);	BUNins(bn, "batCopiedtodisk", local_itoa(b->batCopiedtodisk),FALSE);	BUNins(bn, "batDirtydesc", b->batDirtydesc ? "dirty" : "clean",FALSE);	BUNins(bn, "batDirtybuns", b->batDirtybuns ? "dirty" : "clean",FALSE);	infoHeap(bn, b->batBuns, "batBuns.");	BUNins(bn, "hheapdirty", b->hheapdirty ? "dirty" : "clean",FALSE);	infoHeap(bn, b->hheap, "hheap.");	BUNins(bn, "theapdirty", b->theapdirty ? "dirty" : "clean",FALSE);	infoHeap(bn, b->theap, "theap.");	/* dump index information */	if (b->hhash) {		HASHinfo(bn, b->hhash, "hhash->");	}	if (b->thash) {		HASHinfo(bn, b->thash, "thash->");	}	return GDK_SUCCEED;}#define ROUND_UP(x,y) ((y)*(((x)+(y)-1)/(y)))intCMDbatsize(lng *tot, BAT *b){	size_t blksize = MT_pagesize();	size_t size = ROUND_UP(sizeof(BATstore), blksize);	if (!VIEWparent(b)) {		size_t cnt = BATcapacity(b);		size += ROUND_UP(b->batBuns->size, blksize);		if (b->hheap)			size += ROUND_UP(b->hheap->size, blksize);		if (b->theap)			size += ROUND_UP(b->theap->size, blksize);		if (b->hhash)			size += ROUND_UP(sizeof(hash_t) * cnt, blksize);		if (b->thash)			size += ROUND_UP(sizeof(hash_t) * cnt, blksize);	}	*tot = size;	return GDK_SUCCEED;}intCMDbatsize_str(lng *tot, str batname){	bat bid = BBPindex(batname);	BAT *b = bid ? (BAT *) BBPgetdesc(bid) : NULL;	if (b == NULL) {		GDKerror("CMDbatsize_str: %s no such bat.\n", batname);		return GDK_FAIL;	}	return CMDbatsize(tot, b);}@+ Synced BATs@cintCMDsynced(bit *ret, BAT *b1, BAT *b2){	*ret = ALIGNsynced(b1, b2) ? 1 : 0;	return GDK_SUCCEED;}@+ BBP Management, IO@cintCMDroles(BAT **r, BAT *b, str hname, str tname){	BATroles(*r = b, hname, tname);	BBPfix(b->batCacheid);	return GDK_SUCCEED;}intCMDcol_name(BAT **r, BAT *b, str tname){	BATcol_name(*r = b, tname);	BBPfix(b->batCacheid);	return GDK_SUCCEED;}intCMDrename(bit *retval, BAT *b, str s){	int ret;	int c;	char *t = s;	for ( ; (c = *t) != 0; t++) {		if (c != '_' && !GDKisalnum(c)) {			GDKerror("CMDrename: identifier expected: %s\n", s);			return GDK_FAIL;		}	}	ret = BATname(b, s);	*retval = FALSE;	if (ret == 1) {		GDKerror("CMDrename: identifier expected: %s\n", s);		return GDK_FAIL;	} else if (ret == BBPRENAME_ILLEGAL) {		GDKerror("CMDrename: illegal temporary name: '%s'\n", s);		return GDK_FAIL;	} else if (ret == BBPRENAME_LONG) {		GDKerror("CMDrename: name too long: '%s'\n", s);		return GDK_FAIL;	} else if (ret != BBPRENAME_ALREADY) {		*retval = TRUE;	}	return GDK_SUCCEED;}intCMDname(str *retval, BAT *b){	*retval = GDKstrdup(BBPname(b->batCacheid));	return GDK_SUCCEED;}intCMDunload(bit *res, str input){	bat bid = ABS(BBPindex(input));	*res = FALSE;	if (bid > 0) {		BAT *b;		BBPfix(bid);		b = BBP_cache(bid);		if (b) {			if (b->batPersistence == SESSION)				BATmode(b, TRANSIENT);			BBPcold(bid);	/* will trigger unload of also persistent bats */		}		*res = BBPunfix(bid) == 0;	}	return GDK_SUCCEED;}intCMDhot(str input){	BBPhot(BBPindex(input));	return GDK_SUCCEED;}intCMDcold(str input){	BBPcold(BBPindex(input));	return GDK_SUCCEED;}intCMDheat(int *res, str input){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -