Ejemplo n.º 1
0
exp_t *
exp_list(exp_t *list, exp_t *exp)
{
	ll_t *ll;

	if (list->ex_type != EX_LIST)
	{
		ll = ll_create();
		if (ll == NULL)
		{
			log_die(EX_SOFTWARE, "exp_list: ll_create failed");
		}

		if (LL_INSERT(ll, list) == -1)
		{
			log_die(EX_SOFTWARE, "exp_list: LL_INSERT failed");
		}

		list = exp_create(EX_LIST, ll);
	}
	else
	{
		ll = list->ex_data;
	}

	if (LL_INSERT(ll, exp) == -1)
	{
		log_die(EX_SOFTWARE, "exp_list: LL_INSERT failed");
	}

	return list;
}
Ejemplo n.º 2
0
exp_t *
exp_symbol(char *symbol)
{
	exp_t *exp;

	/*
	 * Check definitions
	 */
	exp = sht_lookup(exp_defs, symbol);
	if (exp)
	{
		free(symbol);

		return exp;
	}

	/*
	 * Check symbols
	 */
	if (acl_symbol_lookup(symbol) == NULL)
	{
		acl_parser_error("unknown symbol \"%s\"", symbol);
	}
		
	return exp_create(EX_SYMBOL, symbol);
}
Ejemplo n.º 3
0
sql_exp * 
exp_values(sql_allocator *sa, list *exps) 
{
	sql_exp *e = exp_create(sa, e_atom);
	e->card = CARD_MULTI;
	e->f = exps;
	return e;
}
Ejemplo n.º 4
0
sql_exp * 
exp_atom(sql_allocator *sa, atom *a) 
{
	sql_exp *e = exp_create(sa, e_atom);
	e->card = CARD_ATOM;
	e->l = a;
	return e;
}
Ejemplo n.º 5
0
sql_exp * 
exp_rel(sql_allocator *sa, sql_rel *rel)
{
	sql_exp *e = exp_create(sa, e_psm);

	e->l = rel;
	e->flag = PSM_REL;
	return e;
}
Ejemplo n.º 6
0
sql_exp *
exp_return(sql_allocator *sa, sql_exp *val, int level)
{
	sql_exp *e = exp_create(sa, e_psm);

	e->l = val;
	e->flag = PSM_RETURN + SET_PSM_LEVEL(level);
	return e;
}
Ejemplo n.º 7
0
sql_exp * 
exp_var(sql_allocator *sa, char *name, sql_subtype *type, int level)
{
	sql_exp *e = exp_create(sa, e_psm);

	e->name = name;
	e->tpe = *type;
	e->flag = PSM_VAR + SET_PSM_LEVEL(level);
	return e;
}
Ejemplo n.º 8
0
sql_exp *
exp_set(sql_allocator *sa, char *name, sql_exp *val, int level)
{
	sql_exp *e = exp_create(sa, e_psm);

	e->name = name;
	e->l = val;
	e->flag = PSM_SET + SET_PSM_LEVEL(level);
	return e;
}
Ejemplo n.º 9
0
sql_exp * 
exp_compare(sql_allocator *sa, sql_exp *l, sql_exp *r, int cmptype) 
{
	sql_exp *e = exp_create(sa, e_cmp);
	e->card = l->card;
	e->l = l;
	e->r = r;
	e->flag = cmptype;
	return e;
}
Ejemplo n.º 10
0
sql_exp * 
exp_atom_ref(sql_allocator *sa, int i, sql_subtype *tpe) 
{
	sql_exp *e = exp_create(sa, e_atom);
	e->card = CARD_ATOM;
	e->flag = i;
	if (tpe)
		e->tpe = *tpe;
	return e;
}
Ejemplo n.º 11
0
sql_exp * 
exp_while(sql_allocator *sa, sql_exp *cond, list *stmts)
{
	sql_exp *e = exp_create(sa, e_psm);

	e->l = cond;
	e->r = stmts;
	e->flag = PSM_WHILE;
	return e;
}
Ejemplo n.º 12
0
sql_exp * 
exp_param(sql_allocator *sa, char *name, sql_subtype *tpe, int frame) 
{
	sql_exp *e = exp_create(sa, e_atom);
	e->r = sa_strdup(sa, name);
	e->card = CARD_ATOM;
	e->flag = frame;
	if (tpe)
		e->tpe = *tpe;
	return e;
}
Ejemplo n.º 13
0
sql_exp * 
exp_op( sql_allocator *sa, list *l, sql_subfunc *f )
{
	sql_exp *e = exp_create(sa, e_func);
	e->card = exps_card(l);
	if (!l || list_length(l) == 0)
		e->card = CARD_ATOM; /* unop returns a single atom */
	e->l = l;
	e->f = f; 
	return e;
}
Ejemplo n.º 14
0
sql_exp * 
exp_if(sql_allocator *sa, sql_exp *cond, list *if_stmts, list *else_stmts)
{
	sql_exp *e = exp_create(sa, e_psm);

	e->l = cond;
	e->r = if_stmts;
	e->f = else_stmts;
	e->flag = PSM_IF;
	return e;
}
Ejemplo n.º 15
0
sql_exp *
exp_in(sql_allocator *sa, sql_exp *l, list *r, int cmptype)
{
	sql_exp *e = exp_create(sa, e_cmp);
	
	e->card = l->card;
	e->l = l;
	e->r = r;
	assert( cmptype == cmp_in || cmptype == cmp_notin);
	e->flag = cmptype;
	return e;
}
Ejemplo n.º 16
0
exp_t *
exp_constant(var_type_t type, void *data, int flags)
{
	var_t *v = NULL;

	v = var_create(type, NULL, data, flags);
	if (v == NULL)
	{
		log_die(EX_SOFTWARE, "exp_constant: var_create failed");
	}

	return exp_create(EX_CONSTANT, v);
}
Ejemplo n.º 17
0
exp_t *
exp_parentheses(exp_t *exp)
{
	exp_t *p;

	p = exp_create(EX_PARENTHESES, exp);
	if (p == NULL)
	{
		log_die(EX_SOFTWARE, "exp_parentheses: exp_create failed");
	}

	return p;
}
Ejemplo n.º 18
0
sql_exp *
exp_filter(sql_allocator *sa, sql_exp *l, list *r, sql_subfunc *f, int anti) 
{
	sql_exp *e = exp_create(sa, e_cmp);

	e->card = l->card;
	e->l = l;
	e->r = r;
	e->f = f;
	e->flag = cmp_filter;
	if (anti)
		set_anti(e);
	return e;
}
Ejemplo n.º 19
0
sql_exp * 
exp_aggr( sql_allocator *sa, list *l, sql_subaggr *a, int distinct, int no_nils, int card, int has_nils )
{
	sql_exp *e = exp_create(sa, e_aggr);
	e->card = card;
	e->l = l;
	e->f = a; 
	if (distinct)
		set_distinct(e);
	if (no_nils)
		set_no_nil(e);
	if (!has_nils)
		set_has_no_nil(e);
	return e;
}
Ejemplo n.º 20
0
sql_exp *
exp_or(sql_allocator *sa, list *l, list *r)
{
	sql_exp *f = NULL;
	sql_exp *e = exp_create(sa, e_cmp);
	
	f = l->h?l->h->data:r->h?r->h->data:NULL;
	e->card = l->h?exps_card(l):exps_card(r);
	e->l = l;
	e->r = r;
	assert(f);
	e->f = f;
	e->flag = cmp_or;
	return e;
}
Ejemplo n.º 21
0
sql_exp * 
exp_convert(sql_allocator *sa, sql_exp *exp, sql_subtype *fromtype, sql_subtype *totype )
{
	sql_exp *e = exp_create(sa, e_convert);
	e->card = exp->card;
	e->l = exp;
	totype = dup_subtype(sa, totype);
	e->r = append(append(sa_list(sa), dup_subtype(sa, fromtype)),totype);
	e->tpe = *totype; 
	if (exp->name)
		e->name = sa_strdup(sa, exp->name);
	if (exp->rname)
		e->rname = sa_strdup(sa, exp->rname);
	return e;
}
Ejemplo n.º 22
0
exp_t *
exp_ternary_cond(exp_t *condition, exp_t *cond_true, exp_t *cond_false)
{
	exp_ternary_condition_t *etc;

	etc = (exp_ternary_condition_t *)
	    malloc(sizeof (exp_ternary_condition_t));
	if (etc == NULL)
	{
		log_sys_die(EX_OSERR, "exp_ternary_cond: malloc");
	}

	etc->etc_condition = condition;
	etc->etc_true = cond_true;
	etc->etc_false = cond_false;

	return exp_create(EX_TERNARY_COND, etc);
}
Ejemplo n.º 23
0
sql_exp * 
exp_column(sql_allocator *sa, char *rname, char *cname, sql_subtype *t, int card, int has_nils, int intern) 
{
	sql_exp *e = exp_create(sa, e_column);

	assert(cname);
	e->card = card;
	e->name = sa_strdup(sa, cname);
	e->l = (rname)?sa_strdup(sa, rname):NULL;
	e->r = sa_strdup(sa, cname);
	if (t)
		e->tpe = *t;
	if (!has_nils)
		set_has_no_nil(e);
	if (intern)
		set_intern(e);
	return e;
}
Ejemplo n.º 24
0
sql_exp * 
exp_alias(sql_allocator *sa, char *arname, char *acname, char *org_rname, char *org_cname, sql_subtype *t, int card, int has_nils, int intern) 
{
	sql_exp *e = exp_create(sa, e_column);

	assert(acname && org_cname);
	e->card = card;
	e->rname = (arname)?sa_strdup(sa, arname):(org_rname)?sa_strdup(sa, org_rname):NULL;
	e->name = sa_strdup(sa, acname);
	e->l = (org_rname)?sa_strdup(sa, org_rname):NULL;
	e->r = sa_strdup(sa, org_cname);
	if (t)
		e->tpe = *t;
	if (!has_nils)
		set_has_no_nil(e);
	if (intern)
		set_intern(e);
	return e;
}
Ejemplo n.º 25
0
exp_t *
exp_function(char *id, exp_t *args)
{
	exp_function_t *ef;

	if (acl_function_lookup(id) == NULL)
	{
		acl_parser_error("unknown function \"%s\"", id);
	}
		
	ef = (exp_function_t *) malloc(sizeof (exp_function_t));
	if (ef == NULL)
	{
		log_sys_die(EX_OSERR, "exp_function: malloc");
	}

	ef->ef_name = id;
	ef->ef_args = args;

	return exp_create(EX_FUNCTION, ef);
}
Ejemplo n.º 26
0
exp_t *
exp_operation(int operator, exp_t *op1, exp_t *op2)
{
	exp_operation_t *eo;

	eo = (exp_operation_t *) malloc(sizeof (exp_operation_t));
	if (eo == NULL)
	{
		log_sys_die(EX_OSERR, "exp_operation: malloc");
	}

	eo->eo_operator = operator;
	eo->eo_operand[0] = op1;
	eo->eo_operand[1] = op2;

	if (operator == '=' && op1->ex_type != EX_VARIABLE)
	{
		acl_parser_error("bad use of '=' operator");
	}

	return exp_create(EX_OPERATION, eo);
}