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

📄 radix.c

📁 一个内存数据库的源代码这是服务器端还有客户端
💻 C
📖 第 1 页 / 共 5 页
字号:
intM4_RDX_phash_join_h(BAT **res, BAT *l, BAT *r, int *radix, bit *cutoff){	if (l && r) {		int hitrate = 1;		return M4_RDX_phash_join(res, l, r, radix, &hitrate, cutoff);	} else {		return GDK_FAIL;	}}intM4_RDX_phash_join_hc(BAT **res, BAT *l, BAT *r, int *radix){	if (l && r) {		int hitrate = 1;		bit cutoff = r->hkey;		return M4_RDX_phash_join(res, l, r, radix, &hitrate, &cutoff);	} else {		return GDK_FAIL;	}}intM4_RDX_phash_join_xh(BAT **res, BAT *l, BAT *r, bit *cutoff){	int rblt, rbrh;	if (l && r &&	    M4_RDX_radix_bits(&rblt, BATmirror(l)) == GDK_SUCCEED &&	    M4_RDX_radix_bits(&rbrh, r) == GDK_SUCCEED) {		int radix = MIN(rblt, rbrh);		int hitrate = 1;		return M4_RDX_phash_join(res, l, r, &radix, &hitrate, cutoff);	} else {		return GDK_FAIL;	}}intM4_RDX_phash_join_xhc(BAT **res, BAT *l, BAT *r){	int rblt, rbrh;	if (l && r &&	    M4_RDX_radix_bits(&rblt, BATmirror(l)) == GDK_SUCCEED &&	    M4_RDX_radix_bits(&rbrh, r) == GDK_SUCCEED) {		int radix = MIN(rblt, rbrh);		int hitrate = 1;		bit cutoff = r->hkey;		return M4_RDX_phash_join(res, l, r, &radix, &hitrate, &cutoff);	} else {		return GDK_FAIL;	}}#line 2842 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"intM4_RDX_radix_join(BAT **res, BAT *l, BAT *r, int *radix, int *hitrate){	size_t estimate = MIN(BATcount(r), BATcount(l)) * (*hitrate);	BUN r_end, l_cur = BUNfirst(l), l_last = BUNlast(l);	BUN l_end, r_cur = BUNfirst(r), r_last = BUNlast(r);	int xx = BUNsize(l), yy = BUNsize(r);	size_t rd = (1 << *radix) - 1;	int any = ATOMstorage(l->ttype);	ptr nil = ATOMnilptr(any);	BAT *bn;	if (*radix != (BATtordered(l) >> 1)) {		GDKerror("radix_join: tail of %s is radix clustered on %d bits.\n", 			BATgetId(l), BATtordered(l) >> 1);		return GDK_FAIL;	}	if (*radix != (BAThordered(r) >> 1)) {		GDKerror("radix_join: head of %s is radix clustered on %d bits.\n", 			BATgetId(r), BAThordered(r) >> 1);		return GDK_FAIL;	}	/* set properties on result bat; so we can return in any moment */	bn = *res = BATnew(HTYPE(l), TTYPE(r), estimate);	if (bn == NULL)		return GDK_FAIL;	bn->hsorted = BAThordered(l);	bn->tsorted = 0;	if (l->hkey && r->hkey)		BATkey(bn, TRUE);	if (r->tkey && l->tkey)		BATkey(BATmirror(bn), TRUE);	if (BATcount(r) == 0)		return GDK_SUCCEED;#line 2894 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"	if (ATOMstorage(l->htype) == TYPE_int && ATOMstorage(r->ttype) == TYPE_int) {		int *_dst = (int *) (bn->batBuns->base + bn->batBuns->free);		int *_end = (int *) (bn->batBuns->base + bn->batBuns->size);		if (l->ttype == TYPE_oid) {			#line 2949 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"	hash_t y = oid_RADIX(BUNhloc(r,r_cur),rd);	/* merge join on radix number */	while(l_cur < l_last) {		/* find l range */		hash_t x = oid_RADIX(BUNtloc(l,l_cur),rd);		for(l_end=l_cur+xx; l_end < l_last; l_end += xx) {			if (oid_RADIX(BUNtloc(l,l_end),rd) != x)				break;		}		/* find matching r */		while (y < x) {			if ((r_cur += yy) >= r_last)				return GDK_SUCCEED;			y = oid_RADIX(BUNhloc(r,r_cur),rd);		}		if (x == y) {		 /* radix hits found */			/* find r range */			for (r_end=r_cur+yy; r_end < r_last; r_end += yy) {				y = oid_RADIX(BUNhloc(r,r_end),rd);				if (y != x)					break;			}			/* filter the radix hits; L1 gushes with oil */			while (l_cur < l_end) {				BUN r_var = r_cur;				ptr p = BUNtloc(l,l_cur);				if (!simple_EQ(p, nil, oid))					while (r_var < r_end) {						if (simple_EQ(p, BUNhloc(r,r_var), oid)) {							intfastINSERT(bn, BUNhloc(l,l_cur), BUNtloc(r,r_var), l, l_cur, r, r_var);						}						r_var += yy;					}				l_cur += xx;			}			r_cur = r_end;		}		l_cur = l_end;	}#line 2901 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"		} else if (any == TYPE_int || any == TYPE_flt) {			#line 2949 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"	hash_t y = int_RADIX(BUNhloc(r,r_cur),rd);	/* merge join on radix number */	while(l_cur < l_last) {		/* find l range */		hash_t x = int_RADIX(BUNtloc(l,l_cur),rd);		for(l_end=l_cur+xx; l_end < l_last; l_end += xx) {			if (int_RADIX(BUNtloc(l,l_end),rd) != x)				break;		}		/* find matching r */		while (y < x) {			if ((r_cur += yy) >= r_last)				return GDK_SUCCEED;			y = int_RADIX(BUNhloc(r,r_cur),rd);		}		if (x == y) {		 /* radix hits found */			/* find r range */			for (r_end=r_cur+yy; r_end < r_last; r_end += yy) {				y = int_RADIX(BUNhloc(r,r_end),rd);				if (y != x)					break;			}			/* filter the radix hits; L1 gushes with oil */			while (l_cur < l_end) {				BUN r_var = r_cur;				ptr p = BUNtloc(l,l_cur);				if (!simple_EQ(p, nil, int))					while (r_var < r_end) {						if (simple_EQ(p, BUNhloc(r,r_var), int)) {							intfastINSERT(bn, BUNhloc(l,l_cur), BUNtloc(r,r_var), l, l_cur, r, r_var);						}						r_var += yy;					}				l_cur += xx;			}			r_cur = r_end;		}		l_cur = l_end;	}#line 2903 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"		} else if (any == TYPE_lng || any == TYPE_dbl) {			#line 2949 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"	hash_t y = lng_RADIX(BUNhloc(r,r_cur),rd);	/* merge join on radix number */	while(l_cur < l_last) {		/* find l range */		hash_t x = lng_RADIX(BUNtloc(l,l_cur),rd);		for(l_end=l_cur+xx; l_end < l_last; l_end += xx) {			if (lng_RADIX(BUNtloc(l,l_end),rd) != x)				break;		}		/* find matching r */		while (y < x) {			if ((r_cur += yy) >= r_last)				return GDK_SUCCEED;			y = lng_RADIX(BUNhloc(r,r_cur),rd);		}		if (x == y) {		 /* radix hits found */			/* find r range */			for (r_end=r_cur+yy; r_end < r_last; r_end += yy) {				y = lng_RADIX(BUNhloc(r,r_end),rd);				if (y != x)					break;			}			/* filter the radix hits; L1 gushes with oil */			while (l_cur < l_end) {				BUN r_var = r_cur;				ptr p = BUNtloc(l,l_cur);				if (!simple_EQ(p, nil, lng))					while (r_var < r_end) {						if (simple_EQ(p, BUNhloc(r,r_var), lng)) {							intfastINSERT(bn, BUNhloc(l,l_cur), BUNtloc(r,r_var), l, l_cur, r, r_var);						}						r_var += yy;					}				l_cur += xx;			}			r_cur = r_end;		}		l_cur = l_end;	}#line 2905 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"		} else {			#line 2949 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"	hash_t y = any_RADIX(BUNhead(r,r_cur),rd);	/* merge join on radix number */	while(l_cur < l_last) {		/* find l range */		hash_t x = any_RADIX(BUNtail(l,l_cur),rd);		for(l_end=l_cur+xx; l_end < l_last; l_end += xx) {			if (any_RADIX(BUNtail(l,l_end),rd) != x)				break;		}		/* find matching r */		while (y < x) {			if ((r_cur += yy) >= r_last)				return GDK_SUCCEED;			y = any_RADIX(BUNhead(r,r_cur),rd);		}		if (x == y) {		 /* radix hits found */			/* find r range */			for (r_end=r_cur+yy; r_end < r_last; r_end += yy) {				y = any_RADIX(BUNhead(r,r_end),rd);				if (y != x)					break;			}			/* filter the radix hits; L1 gushes with oil */			while (l_cur < l_end) {				BUN r_var = r_cur;				ptr p = BUNtail(l,l_cur);				if (!atom_EQ(p, nil, any))					while (r_var < r_end) {						if (atom_EQ(p, BUNhead(r,r_var), any)) {							intfastINSERT(bn, BUNhloc(l,l_cur), BUNtloc(r,r_var), l, l_cur, r, r_var);						}						r_var += yy;					}				l_cur += xx;			}			r_cur = r_end;		}		l_cur = l_end;	}#line 2907 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"		}		bn->batBuns->free = ((BUN) _dst) - bn->batBuns->base;		BATsetcount(bn, bn->batBuns->free/BUNsize(bn));	} else {		if (l->ttype == TYPE_oid) {			#line 2949 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"	hash_t y = oid_RADIX(BUNhloc(r,r_cur),rd);	/* merge join on radix number */	while(l_cur < l_last) {		/* find l range */		hash_t x = oid_RADIX(BUNtloc(l,l_cur),rd);		for(l_end=l_cur+xx; l_end < l_last; l_end += xx) {			if (oid_RADIX(BUNtloc(l,l_end),rd) != x)				break;		}		/* find matching r */		while (y < x) {			if ((r_cur += yy) >= r_last)				return GDK_SUCCEED;			y = oid_RADIX(BUNhloc(r,r_cur),rd);		}		if (x == y) {		 /* radix hits found */			/* find r range */			for (r_end=r_cur+yy; r_end < r_last; r_end += yy) {				y = oid_RADIX(BUNhloc(r,r_end),rd);				if (y != x)					break;			}			/* filter the radix hits; L1 gushes with oil */			while (l_cur < l_end) {				BUN r_var = r_cur;				ptr p = BUNtloc(l,l_cur);				if (!simple_EQ(p, nil, oid))					while (r_var < r_end) {						if (simple_EQ(p, BUNhloc(r,r_var), oid)) {							bunfastINSERT(bn, BUNhead(l,l_cur), BUNtail(r,r_var), l, l_cur, r, r_var);						}						r_var += yy;					}				l_cur += xx;			}			r_cur = r_end;		}		l_cur = l_end;	}#line 2913 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"		} else if (any == TYPE_int || any == TYPE_flt) {			#line 2949 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"	hash_t y = int_RADIX(BUNhloc(r,r_cur),rd);	/* merge join on radix number */	while(l_cur < l_last) {		/* find l range */		hash_t x = int_RADIX(BUNtloc(l,l_cur),rd);		for(l_end=l_cur+xx; l_end < l_last; l_end += xx) {			if (int_RADIX(BUNtloc(l,l_end),rd) != x)				break;		}		/* find matching r */		while (y < x) {			if ((r_cur += yy) >= r_last)				return GDK_SUCCEED;			y = int_RADIX(BUNhloc(r,r_cur),rd);		}		if (x == y) {		 /* radix hits found */			/* find r range */			for (r_end=r_cur+yy; r_end < r_last; r_end += yy) {				y = int_RADIX(BUNhloc(r,r_end),rd);				if (y != x)					break;			}			/* filter the radix hits; L1 gushes with oil */			while (l_cur < l_end) {				BUN r_var = r_cur;				ptr p = BUNtloc(l,l_cur);				if (!simple_EQ(p, nil, int))					while (r_var < r_end) {						if (simple_EQ(p, BUNhloc(r,r_var), int)) {							bunfastINSERT(bn, BUNhead(l,l_cur), BUNtail(r,r_var), l, l_cur, r, r_var);						}						r_var += yy;					}				l_cur += xx;			}			r_cur = r_end;		}		l_cur = l_end;	}#line 2915 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"		} else if (any == TYPE_lng || any == TYPE_dbl) {			#line 2949 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"	hash_t y = lng_RADIX(BUNhloc(r,r_cur),rd);	/* merge join on radix number */	while(l_cur < l_last) {		/* find l range */		hash_t x = lng_RADIX(BUNtloc(l,l_cur),rd);		for(l_end=l_cur+xx; l_end < l_last; l_end += xx) {			if (lng_RADIX(BUNtloc(l,l_end),rd) != x)				break;		}		/* find matching r */		while (y < x) {			if ((r_cur += yy) >= r_last)				return GDK_SUCCEED;			y = lng_RADIX(BUNhloc(r,r_cur),rd);		}		if (x == y) {		 /* radix hits found */			/* find r range */			for (r_end=r_cur+yy; r_end < r_last; r_end += yy) {				y = lng_RADIX(BUNhloc(r,r_end),rd);				if (y != x)					break;			}			/* filter the radix hits; L1 gushes with oil */			while (l_cur < l_end) {				BUN r_var = r_cur;				ptr p = BUNtloc(l,l_cur);				if (!simple_EQ(p, nil, lng))					while (r_var < r_end) {						if (simple_EQ(p, BUNhloc(r,r_var), lng)) {							bunfastINSERT(bn, BUNhead(l,l_cur), BUNtail(r,r_var), l, l_cur, r, r_var);						}						r_var += yy;					}				l_cur += xx;			}			r_cur = r_end;		}		l_cur = l_end;	}#line 2917 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"		} else {			#line 2949 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/modules/mal/radix.mx"	hash_t y = any_RADIX(BUNhead(r,r_cur),rd);	/* merge join on radix number */	while(l_cur < l_last) {		/* find l range */		hash_t x = any_RADIX(BUNtail(l,l_cur),rd);		for(l_end=l_cur+xx; l_end

⌨️ 快捷键说明

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