Exemplo n.º 1
0
int dbd_oracle_statement_create(lua_State *L, connection_t *conn, const char *sql_query) { 
    int rc;
    statement_t *statement = NULL;
    OCIStmt *stmt;
    char *new_sql;

    /*
     * convert SQL string into a Oracle API compatible SQL statement
     */
    new_sql = replace_placeholders(L, ':', sql_query);

    rc = OCIHandleAlloc((dvoid *)conn->oracle, (dvoid **)&stmt, OCI_HTYPE_STMT, 0, (dvoid **)0);
    rc = OCIStmtPrepare(stmt, conn->err, new_sql, strlen(new_sql), (ub4)OCI_NTV_SYNTAX, (ub4)OCI_DEFAULT);

    free(new_sql);

    statement = (statement_t *)lua_newuserdata(L, sizeof(statement_t));
    statement->conn = conn;
    statement->stmt = stmt;
    statement->num_columns = 0;
    statement->bind = NULL;
    statement->metadata = 0;

    luaL_getmetatable(L, DBD_ORACLE_STATEMENT);
    lua_setmetatable(L, -2);

    return 1;
} 
Exemplo n.º 2
0
void handle_signal(signal_notifier_t signal_notifier,
                   name_t widget_name,
                   name_t signal_name,
                   name_t widget_id,
                   sheet_t& sheet,
                   name_t bind,
                   array_t expression,
                   const any_regular_t& _1,
                   name_t _1_name/* = name_t()*/,
                   const any_regular_t& _2/* = any_regular_t()*/,
                   name_t _2_name/* = name_t()*/,
                   const any_regular_t& _3/* = any_regular_t()*/,
                   name_t _3_name/* = name_t()*/,
                   const any_regular_t& _4/* = any_regular_t()*/,
                   name_t _4_name/* = name_t()*/)
{
    if (!bind && !signal_notifier)
        return;

    any_regular_t _;
    {
        dictionary_t dict;

        std::size_t count = 0;
        if (_1_name) {
            dict[_1_name] = _1;
            ++count;
        }
        if (_2_name) {
            dict[_2_name] = _2;
            ++count;
        }
        if (_3_name) {
            dict[_3_name] = _3;
            ++count;
        }
        if (_4_name) {
            dict[_4_name] = _4;
            ++count;
        }

        if (count <= 1) {
            _ = _1;
        } else {
            assert(_1_name);
            _ = any_regular_t(dict);
        }
    }

    any_regular_t value;
    if (expression.empty()) {
        value = _;
    } else {
        replace_placeholders(expression, _, _1, _1_name, _2, _2_name, _3, _3_name, _4, _4_name);
        value = sheet.inspect(expression);
    }

    if (bind) {
        sheet.set(bind, value);
        sheet.update();
    } else if (signal_notifier) {
        signal_notifier(widget_name, signal_name, widget_id, value);
    }
}