diff -r 3769ba002fd1 -r f04ab0420512 libidav/davqlexec.h --- a/libidav/davqlexec.h Thu Feb 01 16:31:24 2018 +0100 +++ b/libidav/davqlexec.h Thu Feb 01 18:25:23 2018 +0100 @@ -1,7 +1,7 @@ /* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * - * Copyright 2016 Olaf Wintermann. All rights reserved. + * Copyright 2018 Olaf Wintermann. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -42,8 +42,27 @@ typedef struct DavQLStackObj DavQLStackObj; typedef struct DavQLRes DavQLRes; +typedef struct DavQLArg DavQLArg; +typedef struct DavQLArgList DavQLArgList; + typedef void*(*davql_func)(); // TODO: interface? +struct DavQLArg { + int type; + union DavQLArgValue{ + int d; + unsigned int u; + char *s; + time_t t; + } value; + DavQLArg *next; +}; + +struct DavQLArgList { + DavQLArg *first; + DavQLArg *current; +}; + typedef enum { DAVQL_OK = 0, DAVQL_UNSUPPORTED_FORMATCHAR, @@ -134,18 +153,26 @@ } column; _Bool descending; } DavOrderCriterion; - + +DavQLArgList* dav_ql_get_args(DavQLStatement *st, va_list ap); +void dav_ql_free_arglist(DavQLArgList *args); + +int dav_ql_getarg_int(DavQLArgList *args); +unsigned int dav_ql_getarg_uint(DavQLArgList *args); +char* dav_ql_getarg_str(DavQLArgList *args); +time_t dav_ql_getarg_time(DavQLArgList *args); + DavResult dav_statement_exec(DavSession *sn, DavQLStatement *st, ...); DavResult dav_statement_execv(DavSession *sn, DavQLStatement *st, va_list ap); -UcxBuffer* dav_path_string(sstr_t src, va_list ap, davqlerror_t *error); -sstr_t dav_format_string(UcxAllocator *a, sstr_t fstr, va_list ap, davqlerror_t *error); +UcxBuffer* dav_path_string(sstr_t src, DavQLArgList *args, davqlerror_t *error); +sstr_t dav_format_string(UcxAllocator *a, sstr_t fstr, DavQLArgList *ap, davqlerror_t *error); DavResult dav_exec_select(DavSession *sn, DavQLStatement *st, va_list ap); int dav_identifier2resprop(sstr_t src, davqlresprop_t *prop); -UcxBuffer* dav_compile_expr(DavContext *ctx, UcxAllocator *a, DavQLExpression *lexpr, va_list ap); +UcxBuffer* dav_compile_expr(DavContext *ctx, UcxAllocator *a, DavQLExpression *lexpr, DavQLArgList *ap); int dav_exec_expr(UcxBuffer *bcode, DavResource *res, DavQLStackObj *result);