Exemplo n.º 1
0
sql_exp *
exps_bind_column( list *exps, char *cname, int *ambiguous ) 
{
	sql_exp *e = NULL;

	if (exps && cname) {
		node *en;

		if (exps && !exps->ht && list_length(exps) > HASH_MIN_SIZE) {
			exps->ht = hash_new(exps->sa, list_length(exps), (fkeyvalue)&exp_key);

			for (en = exps->h; en; en = en->next ) {
				sql_exp *e = en->data;
				if (e->name) {
					int key = exp_key(e);

					hash_add(exps->ht, key, e);
				}
			}
		}
		if (exps && exps->ht) {
			int key = hash_key(cname);
			sql_hash_e *he = exps->ht->buckets[key&(exps->ht->size-1)]; 

			for (; he; he = he->chain) {
				sql_exp *ce = he->value;

				if (ce->name && strcmp(ce->name, cname) == 0) {
					if (e) {
						if (ambiguous)
							*ambiguous = 1;
						return NULL;
					}
					e = ce;
				}
			}
			return e;
		}
		for (en = exps->h; en; en = en->next ) {
			sql_exp *ce = en->data;
			if (ce->name && strcmp(ce->name, cname) == 0) {
				if (e) {
					if (ambiguous)
						*ambiguous = 1;
					return NULL;
				}
				e = ce;
			}
		}
	}
	return e;
}
Exemplo n.º 2
0
sql_exp *
exps_bind_column2( list *exps, char *rname, char *cname ) 
{
	if (exps) {
		node *en;

		if (exps && !exps->ht && list_length(exps) > HASH_MIN_SIZE) {
			exps->ht = hash_new(exps->sa, list_length(exps), (fkeyvalue)&exp_key);

			for (en = exps->h; en; en = en->next ) {
				sql_exp *e = en->data;
				if (e->name) {
					int key = exp_key(e);

					hash_add(exps->ht, key, e);
				}
			}
		}
		if (exps && exps->ht) {
			int key = hash_key(cname);
			sql_hash_e *he = exps->ht->buckets[key&(exps->ht->size-1)]; 

			for (; he; he = he->chain) {
				sql_exp *e = he->value;

				if (e && is_column(e->type) && e->name && e->rname && strcmp(e->name, cname) == 0 && strcmp(e->rname, rname) == 0)
					return e;
				if (e && e->type == e_column && e->name && !e->rname && e->l && strcmp(e->name, cname) == 0 && strcmp(e->l, rname) == 0)
					return e;
			}
			return NULL;
		}
		for (en = exps->h; en; en = en->next ) {
			sql_exp *e = en->data;
		
			if (e && is_column(e->type) && e->name && e->rname && strcmp(e->name, cname) == 0 && strcmp(e->rname, rname) == 0)
				return e;
			if (e && e->type == e_column && e->name && !e->rname && e->l && strcmp(e->name, cname) == 0 && strcmp(e->l, rname) == 0)
				return e;
			if (e && e->type == e_column && !e->name && !e->rname && e->l && e->r && strcmp(e->r, cname) == 0 && strcmp(e->l, rname) == 0) {
				assert(0);
				return e;
			}
		}
	}
	return NULL;
}
Exemplo n.º 3
0
 bool operator()(const CScriptID &id) const
 {
     uint160 exp_key(exp_payload);
     return exp_key == id;
 }
 bool operator()(const ckeyid &id) const
 {
     uint160 exp_key(exp_payload);
     return exp_key == id;
 }