/* * rasqal_expression_evaluate_abs: * @e: The expression to evaluate. * @eval_context: Evaluation context * * INTERNAL - Evaluate SPARQL 1.1 RASQAL_EXPR_ABS (numeric) expression. * * Return value: A #rasqal_literal value or NULL on failure. */ rasqal_literal* rasqal_expression_evaluate_abs(rasqal_expression *e, rasqal_evaluation_context *eval_context, int *error_p) { rasqal_literal* l1; rasqal_literal* result = NULL; l1 = rasqal_expression_evaluate2(e->arg1, eval_context, error_p); if(*error_p || !l1) goto failed; if(!rasqal_literal_is_numeric(l1)) goto failed; result = rasqal_literal_abs(l1, error_p); rasqal_free_literal(l1); l1 = NULL; if(*error_p) goto failed; return result; failed: if(error_p) *error_p = 1; if(l1) rasqal_free_literal(l1); return NULL; }
/* * rasqal_expression_evaluate_istype: * @e: The expression to evaluate. * @eval_context: Evaluation context * * INTERNAL - Evaluate RASQAL_EXPR_ISBLANK, RASQAL_EXPR_ISURI, * RASQAL_EXPR_ISLITERAL and RASQAL_EXPR_ISNUMERIC (expr) * expressions. * * Return value: A #rasqal_literal boolean value or NULL on failure. */ static rasqal_literal* rasqal_expression_evaluate_istype(rasqal_expression *e, rasqal_evaluation_context *eval_context, int *error_p) { rasqal_world* world = eval_context->world; rasqal_literal* l1; int free_literal = 1; rasqal_variable *v; int b; l1 = rasqal_expression_evaluate2(e->arg1, eval_context, error_p); if(*error_p || !l1) goto failed; v = rasqal_literal_as_variable(l1); if(v) { rasqal_free_literal(l1); l1 = v->value; /* don't need v after this */ free_literal = 0; if(!l1) goto failed; } if(e->op == RASQAL_EXPR_ISBLANK) b = (l1->type == RASQAL_LITERAL_BLANK); else if(e->op == RASQAL_EXPR_ISLITERAL) b = (rasqal_literal_get_rdf_term_type(l1) == RASQAL_LITERAL_STRING); else if(e->op == RASQAL_EXPR_ISURI) b =(l1->type == RASQAL_LITERAL_URI); else b = (rasqal_literal_is_numeric(l1)); if(free_literal) rasqal_free_literal(l1); return rasqal_new_boolean_literal(world, b); failed: if(error_p) *error_p = 1; if(free_literal && l1) rasqal_free_literal(l1); return NULL; }