Annotation of win32/apache22/srclib/apr-util/include/private/apr_dbd_internal.h, revision 1.1

1.1     ! moko        1: /* Licensed to the Apache Software Foundation (ASF) under one or more
        !             2:  * contributor license agreements.  See the NOTICE file distributed with
        !             3:  * this work for additional information regarding copyright ownership.
        !             4:  * The ASF licenses this file to You under the Apache License, Version 2.0
        !             5:  * (the "License"); you may not use this file except in compliance with
        !             6:  * the License.  You may obtain a copy of the License at
        !             7:  *
        !             8:  *     http://www.apache.org/licenses/LICENSE-2.0
        !             9:  *
        !            10:  * Unless required by applicable law or agreed to in writing, software
        !            11:  * distributed under the License is distributed on an "AS IS" BASIS,
        !            12:  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        !            13:  * See the License for the specific language governing permissions and
        !            14:  * limitations under the License.
        !            15:  */
        !            16: 
        !            17: /* Overview of what this is and does:
        !            18:  * http://www.apache.org/~niq/dbd.html
        !            19:  */
        !            20: 
        !            21: #ifndef APR_DBD_INTERNAL_H
        !            22: #define APR_DBD_INTERNAL_H
        !            23: 
        !            24: #include <stdarg.h>
        !            25: 
        !            26: #include "apr_dbd.h"
        !            27: 
        !            28: #ifdef __cplusplus
        !            29: extern "C" {
        !            30: #endif
        !            31: 
        !            32: #define TXN_IGNORE_ERRORS(t) \
        !            33:   ((t) && ((t)->mode & APR_DBD_TRANSACTION_IGNORE_ERRORS))
        !            34: #define TXN_NOTICE_ERRORS(t) \
        !            35:   ((t) && !((t)->mode & APR_DBD_TRANSACTION_IGNORE_ERRORS))
        !            36: 
        !            37: #define TXN_DO_COMMIT(t)   (!((t)->mode & APR_DBD_TRANSACTION_ROLLBACK))
        !            38: #define TXN_DO_ROLLBACK(t) ((t)->mode & APR_DBD_TRANSACTION_ROLLBACK)
        !            39: 
        !            40: #define TXN_MODE_BITS \
        !            41:   (APR_DBD_TRANSACTION_ROLLBACK|APR_DBD_TRANSACTION_IGNORE_ERRORS)
        !            42: 
        !            43: struct apr_dbd_driver_t {
        !            44:     /** name */
        !            45:     const char *name;
        !            46: 
        !            47:     /** init: allow driver to perform once-only initialisation.
        !            48:      *  Called once only.  May be NULL
        !            49:      */
        !            50:     void (*init)(apr_pool_t *pool);
        !            51: 
        !            52:     /** native_handle: return the native database handle of the underlying db
        !            53:      *
        !            54:      * @param handle - apr_dbd handle
        !            55:      * @return - native handle
        !            56:      */
        !            57:     void *(*native_handle)(apr_dbd_t *handle);
        !            58: 
        !            59:     /** open: obtain a database connection from the server rec.
        !            60:      *  Must be explicitly closed when you're finished with it.
        !            61:      *  WARNING: only use this when you need a connection with
        !            62:      *  a lifetime other than a request
        !            63:      *
        !            64:      *  @param pool - a pool to use for error messages (if any).
        !            65:      *  @param params - connection parameters.
        !            66:      *  @param error - descriptive error.
        !            67:      *  @return database handle, or NULL on error.
        !            68:      */
        !            69:     apr_dbd_t *(*open)(apr_pool_t *pool, const char *params,
        !            70:                        const char **error);
        !            71: 
        !            72:     /** check_conn: check status of a database connection
        !            73:      *
        !            74:      *  @param pool - a pool to use for error messages (if any).
        !            75:      *  @param handle - the connection to check
        !            76:      *  @return APR_SUCCESS or error
        !            77:      */
        !            78:     apr_status_t (*check_conn)(apr_pool_t *pool, apr_dbd_t *handle);
        !            79: 
        !            80:     /** close: close/release a connection obtained from open()
        !            81:      *
        !            82:      *  @param handle - the connection to release
        !            83:      *  @return APR_SUCCESS or error
        !            84:      */
        !            85:     apr_status_t (*close)(apr_dbd_t *handle);
        !            86: 
        !            87:     /** set_dbname: select database name.  May be a no-op if not supported.
        !            88:      *
        !            89:      *  @param pool - working pool
        !            90:      *  @param handle - the connection
        !            91:      *  @param name - the database to select
        !            92:      *  @return 0 for success or error code
        !            93:      */
        !            94:     int (*set_dbname)(apr_pool_t* pool, apr_dbd_t *handle, const char *name);
        !            95: 
        !            96:     /** transaction: start a transaction.  May be a no-op.
        !            97:      *
        !            98:      *  @param pool   - a pool to use for error messages (if any).
        !            99:      *  @param handle - the connection
        !           100:      *  @param trans  - ptr to a transaction.  May be null on entry
        !           101:      *  @return 0 for success or error code
        !           102:      */
        !           103:     int (*start_transaction)(apr_pool_t *pool, apr_dbd_t *handle,
        !           104:                              apr_dbd_transaction_t **trans);
        !           105: 
        !           106:     /** end_transaction: end a transaction
        !           107:      *  (commit on success, rollback on error).
        !           108:      *  May be a no-op.
        !           109:      *
        !           110:      *  @param trans - the transaction.
        !           111:      *  @return 0 for success or error code
        !           112:      */
        !           113:     int (*end_transaction)(apr_dbd_transaction_t *trans);
        !           114: 
        !           115:     /** query: execute an SQL query that doesn't return a result set
        !           116:      *
        !           117:      *  @param handle - the connection
        !           118:      *  @param nrows - number of rows affected.
        !           119:      *  @param statement - the SQL statement to execute
        !           120:      *  @return 0 for success or error code
        !           121:      */
        !           122:     int (*query)(apr_dbd_t *handle, int *nrows, const char *statement);
        !           123: 
        !           124:     /** select: execute an SQL query that returns a result set
        !           125:      *
        !           126:      *  @param pool - pool to allocate the result set
        !           127:      *  @param handle - the connection
        !           128:      *  @param res - pointer to result set pointer.  May point to NULL on entry
        !           129:      *  @param statement - the SQL statement to execute
        !           130:      *  @param random - 1 to support random access to results (seek any row);
        !           131:      *                  0 to support only looping through results in order
        !           132:      *                    (async access - faster)
        !           133:      *  @return 0 for success or error code
        !           134:      */
        !           135:     int (*select)(apr_pool_t *pool, apr_dbd_t *handle, apr_dbd_results_t **res,
        !           136:                   const char *statement, int random);
        !           137: 
        !           138:     /** num_cols: get the number of columns in a results set
        !           139:      *
        !           140:      *  @param res - result set.
        !           141:      *  @return number of columns
        !           142:      */
        !           143:     int (*num_cols)(apr_dbd_results_t *res);
        !           144: 
        !           145:     /** num_tuples: get the number of rows in a results set
        !           146:      *  of a synchronous select
        !           147:      *
        !           148:      *  @param res - result set.
        !           149:      *  @return number of rows, or -1 if the results are asynchronous
        !           150:      */
        !           151:     int (*num_tuples)(apr_dbd_results_t *res);
        !           152: 
        !           153:     /** get_row: get a row from a result set
        !           154:      *
        !           155:      *  @param pool - pool to allocate the row
        !           156:      *  @param res - result set pointer
        !           157:      *  @param row - pointer to row pointer.  May point to NULL on entry
        !           158:      *  @param rownum - row number, or -1 for "next row".  Ignored if random
        !           159:      *                  access is not supported.
        !           160:      *  @return 0 for success, -1 for rownum out of range or data finished
        !           161:      */
        !           162:     int (*get_row)(apr_pool_t *pool, apr_dbd_results_t *res,
        !           163:                    apr_dbd_row_t **row, int rownum);
        !           164:   
        !           165:     /** get_entry: get an entry from a row
        !           166:      *
        !           167:      *  @param row - row pointer
        !           168:      *  @param col - entry number
        !           169:      *  @param val - entry to fill
        !           170:      *  @return 0 for success, -1 for no data, +1 for general error
        !           171:      */
        !           172:     const char* (*get_entry)(const apr_dbd_row_t *row, int col);
        !           173:   
        !           174:     /** error: get current error message (if any)
        !           175:      *
        !           176:      *  @param handle - the connection
        !           177:      *  @param errnum - error code from operation that returned an error
        !           178:      *  @return the database current error message, or message for errnum
        !           179:      *          (implementation-dependent whether errnum is ignored)
        !           180:      */
        !           181:     const char *(*error)(apr_dbd_t *handle, int errnum);
        !           182:   
        !           183:     /** escape: escape a string so it is safe for use in query/select
        !           184:      *
        !           185:      *  @param pool - pool to alloc the result from
        !           186:      *  @param string - the string to escape
        !           187:      *  @param handle - the connection
        !           188:      *  @return the escaped, safe string
        !           189:      */
        !           190:     const char *(*escape)(apr_pool_t *pool, const char *string,
        !           191:                           apr_dbd_t *handle);
        !           192:   
        !           193:     /** prepare: prepare a statement
        !           194:      *
        !           195:      *  @param pool - pool to alloc the result from
        !           196:      *  @param handle - the connection
        !           197:      *  @param query - the SQL query
        !           198:      *  @param label - A label for the prepared statement.
        !           199:      *                 use NULL for temporary prepared statements
        !           200:      *                 (eg within a Request in httpd)
        !           201:      *  @param nargs - number of parameters in the query
        !           202:      *  @param nvals - number of values passed in p[b]query/select
        !           203:      *  @param types - pointer to an array with types of parameters
        !           204:      *  @param statement - statement to prepare.  May point to null on entry.
        !           205:      *  @return 0 for success or error code
        !           206:      */
        !           207:     int (*prepare)(apr_pool_t *pool, apr_dbd_t *handle, const char *query,
        !           208:                    const char *label, int nargs, int nvals,
        !           209:                    apr_dbd_type_e *types, apr_dbd_prepared_t **statement);
        !           210: 
        !           211:     /** pvquery: query using a prepared statement + args
        !           212:      *
        !           213:      *  @param pool - working pool
        !           214:      *  @param handle - the connection
        !           215:      *  @param nrows - number of rows affected.
        !           216:      *  @param statement - the prepared statement to execute
        !           217:      *  @param args - args to prepared statement
        !           218:      *  @return 0 for success or error code
        !           219:      */
        !           220:     int (*pvquery)(apr_pool_t *pool, apr_dbd_t *handle, int *nrows,
        !           221:                    apr_dbd_prepared_t *statement, va_list args);
        !           222: 
        !           223:     /** pvselect: select using a prepared statement + args
        !           224:      *
        !           225:      *  @param pool - working pool
        !           226:      *  @param handle - the connection
        !           227:      *  @param res - pointer to query results.  May point to NULL on entry
        !           228:      *  @param statement - the prepared statement to execute
        !           229:      *  @param random - Whether to support random-access to results
        !           230:      *  @param args - args to prepared statement
        !           231:      *  @return 0 for success or error code
        !           232:      */
        !           233:     int (*pvselect)(apr_pool_t *pool, apr_dbd_t *handle,
        !           234:                     apr_dbd_results_t **res,
        !           235:                     apr_dbd_prepared_t *statement, int random, va_list args);
        !           236: 
        !           237:     /** pquery: query using a prepared statement + args
        !           238:      *
        !           239:      *  @param pool - working pool
        !           240:      *  @param handle - the connection
        !           241:      *  @param nrows - number of rows affected.
        !           242:      *  @param statement - the prepared statement to execute
        !           243:      *  @param args - args to prepared statement
        !           244:      *  @return 0 for success or error code
        !           245:      */
        !           246:     int (*pquery)(apr_pool_t *pool, apr_dbd_t *handle, int *nrows,
        !           247:                   apr_dbd_prepared_t *statement, const char **args);
        !           248: 
        !           249:     /** pselect: select using a prepared statement + args
        !           250:      *
        !           251:      *  @param pool - working pool
        !           252:      *  @param handle - the connection
        !           253:      *  @param res - pointer to query results.  May point to NULL on entry
        !           254:      *  @param statement - the prepared statement to execute
        !           255:      *  @param random - Whether to support random-access to results
        !           256:      *  @param args - args to prepared statement
        !           257:      *  @return 0 for success or error code
        !           258:      */
        !           259:     int (*pselect)(apr_pool_t *pool, apr_dbd_t *handle,
        !           260:                    apr_dbd_results_t **res, apr_dbd_prepared_t *statement,
        !           261:                    int random, const char **args);
        !           262: 
        !           263:   
        !           264:     /** get_name: get a column title from a result set
        !           265:      *
        !           266:      *  @param res - result set pointer
        !           267:      *  @param col - entry number
        !           268:      *  @return param name, or NULL if col is out of bounds.
        !           269:      */
        !           270:     const char* (*get_name)(const apr_dbd_results_t *res, int col);
        !           271: 
        !           272:     /** transaction_mode_get: get the mode of transaction
        !           273:      *
        !           274:      *  @param trans - the transaction.
        !           275:      *  @return mode of transaction
        !           276:      */
        !           277:     int (*transaction_mode_get)(apr_dbd_transaction_t *trans);
        !           278: 
        !           279:     /** transaction_mode_set: get the mode of transaction
        !           280:      *
        !           281:      *  @param trans - the transaction.
        !           282:      *  @param mode  - new mode of the transaction
        !           283:      *  @return the mode of transaction in force after the call
        !           284:      */
        !           285:     int (*transaction_mode_set)(apr_dbd_transaction_t *trans, int mode);
        !           286: 
        !           287:     /** format of prepared statement parameters */
        !           288:     const char *pformat;
        !           289: 
        !           290:     /** pvbquery: query using a prepared statement + binary args
        !           291:      *
        !           292:      *  @param pool - working pool
        !           293:      *  @param handle - the connection
        !           294:      *  @param nrows - number of rows affected.
        !           295:      *  @param statement - the prepared statement to execute
        !           296:      *  @param args - binary args to prepared statement
        !           297:      *  @return 0 for success or error code
        !           298:      */
        !           299:     int (*pvbquery)(apr_pool_t *pool, apr_dbd_t *handle, int *nrows,
        !           300:                     apr_dbd_prepared_t *statement, va_list args);
        !           301: 
        !           302:     /** pvbselect: select using a prepared statement + binary args
        !           303:      *
        !           304:      *  @param pool - working pool
        !           305:      *  @param handle - the connection
        !           306:      *  @param res - pointer to query results.  May point to NULL on entry
        !           307:      *  @param statement - the prepared statement to execute
        !           308:      *  @param random - Whether to support random-access to results
        !           309:      *  @param args - binary args to prepared statement
        !           310:      *  @return 0 for success or error code
        !           311:      */
        !           312:     int (*pvbselect)(apr_pool_t *pool, apr_dbd_t *handle,
        !           313:                      apr_dbd_results_t **res,
        !           314:                      apr_dbd_prepared_t *statement, int random, va_list args);
        !           315: 
        !           316:     /** pbquery: query using a prepared statement + binary args
        !           317:      *
        !           318:      *  @param pool - working pool
        !           319:      *  @param handle - the connection
        !           320:      *  @param nrows - number of rows affected.
        !           321:      *  @param statement - the prepared statement to execute
        !           322:      *  @param args - binary args to prepared statement
        !           323:      *  @return 0 for success or error code
        !           324:      */
        !           325:     int (*pbquery)(apr_pool_t *pool, apr_dbd_t *handle, int *nrows,
        !           326:                    apr_dbd_prepared_t *statement,const void **args);
        !           327: 
        !           328:     /** pbselect: select using a prepared statement + binary args
        !           329:      *
        !           330:      *  @param pool - working pool
        !           331:      *  @param handle - the connection
        !           332:      *  @param res - pointer to query results.  May point to NULL on entry
        !           333:      *  @param statement - the prepared statement to execute
        !           334:      *  @param random - Whether to support random-access to results
        !           335:      *  @param args - binary args to prepared statement
        !           336:      *  @return 0 for success or error code
        !           337:      */
        !           338:     int (*pbselect)(apr_pool_t *pool, apr_dbd_t *handle,
        !           339:                     apr_dbd_results_t **res, apr_dbd_prepared_t *statement,
        !           340:                     int random, const void **args);
        !           341:   
        !           342:     /** datum_get: get a binary entry from a row
        !           343:      *
        !           344:      *  @param row - row pointer
        !           345:      *  @param col - entry number
        !           346:      *  @param type - type of data to get
        !           347:      *  @param data - pointer to data, allocated by the caller
        !           348:      *  @return APR_SUCCESS, an error code on error or if col is out of bounds
        !           349:      */
        !           350:     apr_status_t (*datum_get)(const apr_dbd_row_t *row, int col,
        !           351:                               apr_dbd_type_e type, void *data);
        !           352: };
        !           353: 
        !           354: /* Export mutex lock/unlock for drivers that need it 
        !           355:  * deprecated; create a per-dbd mutex within the (*init) function
        !           356:  * to avoid blocking other providers running on other threads
        !           357:  */
        !           358: APU_DECLARE(apr_status_t) apr_dbd_mutex_lock(void);
        !           359: APU_DECLARE(apr_status_t) apr_dbd_mutex_unlock(void);
        !           360: 
        !           361: #ifdef __cplusplus
        !           362: }
        !           363: #endif
        !           364: 
        !           365: #endif

E-mail: