plugins/include/dbi.inc
author Scott Ehlert <ds@alliedmods.net>
Wed Aug 15 06:19:30 2007 +0000 (2007-08-15)
changeset 1330 ab94316bb52b
parent 1324 9d1983bf06c7
child 1449 247975f09abc
permissions -rw-r--r--
Updated license headers on virtually all files with extremely minor changes in the name of some sort of strange consistency.
All plugin and include file headers also have been changed to say about GPL3 instead of GPL2.

(This day shall henceforth be known as the Eighty Column Massacre of '07)
dvander@868
     1
/**
dvander@868
     2
 * vim: set ts=4 :
ds@1330
     3
 * =============================================================================
dvander@868
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
ds@1330
     5
 * =============================================================================
ds@1330
     6
 *
ds@1330
     7
 * This file is part of the SourceMod/SourcePawn SDK.
dvander@868
     8
 *
ds@1330
     9
 * This program is free software; you can redistribute it and/or modify it under
ds@1330
    10
 * the terms of the GNU General Public License, version 3.0, as published by the
ds@1330
    11
 * Free Software Foundation.
ds@1330
    12
 * 
ds@1330
    13
 * This program is distributed in the hope that it will be useful, but WITHOUT
ds@1330
    14
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
ds@1330
    15
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
ds@1330
    16
 * details.
ds@1330
    17
 *
ds@1330
    18
 * You should have received a copy of the GNU General Public License along with
ds@1330
    19
 * this program.  If not, see <http://www.gnu.org/licenses/>.
ds@1330
    20
 *
ds@1330
    21
 * As a special exception, AlliedModders LLC gives you permission to link the
ds@1330
    22
 * code of this program (as well as its derivative works) to "Half-Life 2," the
ds@1330
    23
 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
ds@1330
    24
 * by the Valve Corporation.  You must obey the GNU General Public License in
ds@1330
    25
 * all respects for all other code used.  Additionally, AlliedModders LLC grants
ds@1330
    26
 * this exception to all derivative works.  AlliedModders LLC defines further
ds@1330
    27
 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
ds@1330
    28
 * or <http://www.sourcemod.net/license.php>.
dvander@868
    29
 *
dvander@868
    30
 * Version: $Id$
dvander@868
    31
 */
dvander@868
    32
 
dvander@868
    33
#if defined _dbi_included
dvander@868
    34
 #endinput
dvander@868
    35
#endif
dvander@868
    36
#define _dbi_included
dvander@868
    37
dvander@868
    38
/**
dvander@868
    39
 * @handle Driver
dvander@868
    40
 *
dvander@868
    41
 * Contains information about an SQL driver.
dvander@868
    42
 */
dvander@868
    43
 
dvander@868
    44
/**
dvander@868
    45
 * @handle Database
dvander@868
    46
 *
dvander@868
    47
 * Contains information about a database connection.
dvander@868
    48
 */
dvander@868
    49
 
dvander@868
    50
/**
dvander@868
    51
 * @handle Query
dvander@868
    52
 *
dvander@868
    53
 * Contains information about an active query and its 
dvander@868
    54
 * result sets.
dvander@868
    55
 */
dvander@868
    56
 
dvander@868
    57
/**
dvander@868
    58
 * @handle Statement : Query
dvander@868
    59
 *
dvander@868
    60
 * Extends a Query Handle and can be used as a Query Handle.
dvander@868
    61
 * Statement Handles are for prepared queries and contain
dvander@868
    62
 * their own function for binding parameters.  Statement
dvander@868
    63
 * Handles can be used instead of database Handles in a few
dvander@868
    64
 * select functions.
dvander@868
    65
 */
dvander@868
    66
dvander@868
    67
/**
dvander@868
    68
 * Describes a database field fetch status.
dvander@868
    69
 */
dvander@868
    70
enum DBResult
dvander@868
    71
{
dvander@868
    72
	DBVal_Error = 0,		/**< Column number/field is invalid. */
dvander@868
    73
	DBVal_TypeMismatch = 1,	/**< You cannot retrieve this data with this type. */
dvander@868
    74
	DBVal_Null = 2,			/**< Field has no data (NULL) */
dvander@868
    75
	DBVal_Data = 3,			/**< Field has data */
dvander@1096
    76
};
dvander@1096
    77
dvander@1096
    78
/**
dvander@1096
    79
 * Describes binding types.
dvander@1096
    80
 */
dvander@1096
    81
enum DBBindType
dvander@1096
    82
{
dvander@1096
    83
	DBBind_Int = 0,			/**< Bind an integer. */
dvander@1096
    84
	DBBind_Float = 1,		/**< Bind a float. */
dvander@1096
    85
	DBBind_String = 2,		/**< Bind a string. */
dvander@1096
    86
};
dvander@1096
    87
dvander@1096
    88
/**
dvander@1096
    89
 * Threading priority level.
dvander@1096
    90
 */
dvander@1096
    91
enum DBPriority
dvander@1096
    92
{
dvander@1096
    93
	DBPrio_High = 0,		/**< High priority. */
dvander@1096
    94
	DBPrio_Normal = 1,		/**< Normal priority. */
dvander@1096
    95
	DBPrio_Low = 2,			/**< Low priority. */
dvander@1096
    96
};
dvander@868
    97
dvander@868
    98
/**
dvander@868
    99
 * Creates an SQL connection from a named configuration.
dvander@868
   100
 *
dvander@868
   101
 * @param confname		Named configuration.
dvander@868
   102
 * @param persistent	True to re-use a previous persistent connection if
dvander@868
   103
 *						possible, false otherwise.
dvander@868
   104
 * @param error			Error buffer.
dvander@868
   105
 * @param maxlength		Maximum length of the error buffer.
dvander@868
   106
 * @return				A database connection Handle, or INVALID_HANDLE on failure.
dvander@868
   107
 */
dvander@868
   108
native Handle:SQL_Connect(const String:confname[], bool:persistent, String:error[], maxlength);
dvander@868
   109
dvander@868
   110
/**
dvander@868
   111
 * Creates a default SQL connection.
dvander@868
   112
 *
dvander@868
   113
 * @param error			Error buffer.
dvander@868
   114
 * @param maxlength		Maximum length of the error buffer.
dvander@868
   115
 * @param persistent	True to re-use a previous persistent connection
dvander@868
   116
 *						if possible, false otherwise.
dvander@868
   117
 * @return				A database connection Handle, or INVALID_HANDLE on failure.
dvander@868
   118
 */
dvander@868
   119
stock Handle:SQL_DefConnect(String:error[], maxlength, bool:persistent=true)
dvander@868
   120
{
dvander@868
   121
	return SQL_Connect("default", persistent, error, maxlength);
dvander@868
   122
}
dvander@868
   123
dvander@868
   124
/**
dvander@868
   125
 * Creates an SQL connection from specific parameters.
dvander@868
   126
 *
dvander@868
   127
 * @param driver		Driver Handle, or INVALID_HANDLE for default.
dvander@868
   128
 * @param host			Host name.
dvander@868
   129
 * @param user			User name.
dvander@868
   130
 * @param pass			User password.
dvander@868
   131
 * @param database		Database name.
dvander@868
   132
 * @param error			Error buffer.
dvander@868
   133
 * @param maxlength		Maximum length of the error buffer.
dvander@868
   134
 * @param persistent	True to re-use a previous persistent connection 
dvander@868
   135
 *						if possible, false otherwise.
dvander@868
   136
 * @param port			Optional port to specify.
dvander@868
   137
 * @param maxTimeout	Maximum timeout in seconds if applicable.
dvander@868
   138
 * @return				A database connection Handle, or INVALID_HANDLE on failure.
dvander@868
   139
 * @error				Invalid driver Handle other than INVALID_HANDLE.
dvander@868
   140
 */
dvander@868
   141
native Handle:SQL_ConnectEx(Handle:driver, 
dvander@868
   142
							const String:host[],
dvander@868
   143
							const String:user[], 
dvander@868
   144
							const String:pass[],
dvander@868
   145
							const String:database[],
dvander@868
   146
							String:error[],
dvander@868
   147
							maxlength,
dvander@868
   148
							bool:persistent=true,
dvander@868
   149
							port=0,
dvander@868
   150
							maxTimeout=0);
dvander@1324
   151
							
dvander@1324
   152
/**
dvander@1324
   153
 * Returns if a named configuration is present in databases.cfg.
dvander@1324
   154
 *
dvander@1324
   155
 * @param name			Configuration name.
dvander@1324
   156
 * @return				True if it exists, false otherwise.
dvander@1324
   157
 */
dvander@1324
   158
native bool:SQL_CheckConfig(const String:name[]);
dvander@868
   159
dvander@868
   160
/**
dvander@868
   161
 * Returns a driver Handle from a name string.
dvander@868
   162
 *
dvander@868
   163
 * If the driver is not found, SourceMod will attempt
dvander@868
   164
 * to load an extension named dbi.<name>.ext.[dll|so].
dvander@868
   165
 *
dvander@868
   166
 * @param name			Driver identification string, or an empty
dvander@868
   167
 *						string to return the default driver.
dvander@868
   168
 * @return				Driver Handle, or INVALID_HANDLE on failure.
dvander@868
   169
 */
dvander@868
   170
native Handle:SQL_GetDriver(const String:name[]="");
dvander@868
   171
dvander@868
   172
/**
dvander@1294
   173
 * Reads the driver of an opened database.
dvander@1294
   174
 *
dvander@1294
   175
 * @param database		Database Handle.
dvander@1294
   176
 * @param ident			Option buffer to store the identification string.
dvander@1294
   177
 * @param ident_length	Maximum length of the buffer.
dvander@1294
   178
 * @return				Driver Handle.
dvander@1294
   179
 */
dvander@1294
   180
native Handle:SQL_ReadDriver(Handle:database, String:ident[]="", ident_length=0);
dvander@1294
   181
dvander@1294
   182
/**
dvander@868
   183
 * Retrieves a driver's identification string.
dvander@868
   184
 *
dvander@1294
   185
 * Example: "mysql", "sqlite"
dvander@1294
   186
 *
dvander@868
   187
 * @param driver		Driver Handle, or INVALID_HANDLE for the default driver.
dvander@868
   188
 * @param ident			Identification string buffer.
dvander@868
   189
 * @param maxlength		Maximum length of the buffer.
dvander@868
   190
 * @noreturn
dvander@868
   191
 * @error				Invalid Handle other than INVALID_HANDLE.
dvander@868
   192
 */
dvander@868
   193
native SQL_GetDriverIdent(Handle:driver, String:ident[], maxlength);
dvander@868
   194
dvander@868
   195
/**
dvander@868
   196
 * Retrieves a driver's product string.
dvander@868
   197
 *
dvander@1294
   198
 * Example: "MySQL", "SQLite"
dvander@1294
   199
 *
dvander@868
   200
 * @param driver		Driver Handle, or INVALID_HANDLE for the default driver.
dvander@868
   201
 * @param product		Product string buffer.
dvander@868
   202
 * @param maxlength		Maximum length of the buffer.
dvander@868
   203
 * @noreturn
dvander@868
   204
 * @error				Invalid Handle other than INVALID_HANDLE.
dvander@868
   205
 */
dvander@868
   206
native SQL_GetDriverProduct(Handle:driver, String:product[], maxlength);
dvander@868
   207
dvander@868
   208
/**
dvander@868
   209
 * Returns the number of affected rows from the last query.
dvander@868
   210
 *
dvander@868
   211
 * @param hndl			A database OR statement Handle.
dvander@868
   212
 * @return				Number of rows affected by the last query.
dvander@868
   213
 * @error				Invalid database or statement Handle.
dvander@868
   214
 */
dvander@868
   215
native SQL_GetAffectedRows(Handle:hndl);
dvander@868
   216
dvander@868
   217
/**
dvander@868
   218
 * Returns the last query's insertion id.
dvander@868
   219
 *
dvander@868
   220
 * @param hndl			A database OR statement Handle.
dvander@868
   221
 * @return				Last query's insertion id.
dvander@868
   222
 * @error				Invalid database or statement Handle.
dvander@868
   223
 */
dvander@868
   224
native SQL_GetInsertId(Handle:hndl);
dvander@868
   225
dvander@868
   226
/**
dvander@868
   227
 * Returns the error reported by the last query.
dvander@868
   228
 *
dvander@868
   229
 * @param hndl			A database OR statement Handle.
dvander@868
   230
 * @param error			Error buffer.
dvander@868
   231
 * @param maxlength		Maximum length of the buffer.
dvander@868
   232
 * @return				True if there was an error, false otherwise.
dvander@868
   233
 * @error				Invalid database or statement Handle.
dvander@868
   234
 */
dvander@868
   235
native bool:SQL_GetError(Handle:hndl, String:error[], maxlength);
dvander@868
   236
dvander@868
   237
/**
dvander@868
   238
 * Quotes a database string for literal insertion.  This is not needed
dvander@868
   239
 * for binding strings in prepared statements.
dvander@868
   240
 *
dvander@868
   241
 * @param hndl			A database Handle.
dvander@868
   242
 * @param string		String to quote.
dvander@868
   243
 * @param buffer		Buffer to store quoted string in.
dvander@868
   244
 * @param maxlength		Maximum length of the buffer.
dvander@868
   245
 * @param written		Optionally returns the number of bytes written.
dvander@868
   246
 * @return				True on success, false if buffer is not big enough.
dvander@868
   247
 *						The buffer must be at least 2*strlen(string)+1.
dvander@868
   248
 * @error				Invalid database or statement Handle.
dvander@868
   249
 */
dvander@868
   250
native bool:SQL_QuoteString(Handle:database, const String:string[], String:buffer[], maxlength, &written=0);
dvander@868
   251
dvander@868
   252
/**
dvander@868
   253
 * Executes a query and ignores the result set.
dvander@868
   254
 *
dvander@868
   255
 * @param database		A database Handle.
dvander@868
   256
 * @param query			Query string.
dvander@868
   257
 * @return				True if query succeeded, false otherwise.  Use
dvander@868
   258
 *						SQL_GetError to find the last error.
dvander@868
   259
 * @error				Invalid database Handle.
dvander@868
   260
 */
dvander@868
   261
native bool:SQL_FastQuery(Handle:database, const String:query[]);
dvander@868
   262
dvander@868
   263
/**
dvander@868
   264
 * Executes a simple query and returns a new query Handle for
dvander@868
   265
 * receiving the results.
dvander@868
   266
 *
dvander@868
   267
 * @param database		A database Handle.
dvander@868
   268
 * @param query			Query string.
dvander@868
   269
 * @return				A new Query Handle on success, INVALID_HANDLE
dvander@868
   270
 *						otherwise.  The Handle must be freed with CloseHandle().
dvander@868
   271
 * @error				Invalid database Handle.
dvander@868
   272
 */
dvander@868
   273
native Handle:SQL_Query(Handle:database, const String:query[]);
dvander@868
   274
dvander@868
   275
/**
dvander@868
   276
 * Creates a new prepared statement query.  Prepared statements can
dvander@868
   277
 * be executed any number of times.  They can also have placeholder
dvander@868
   278
 * parameters, similar to variables, which can be bound safely and
dvander@868
   279
 * securely (for example, you do not need to quote bound strings).
dvander@868
   280
 *
dvander@868
   281
 * Statement handles will work in any function that accepts a Query handle.
dvander@868
   282
 *
dvander@868
   283
 * @param database		A database Handle.
dvander@868
   284
 * @param query			Query string.
dvander@868
   285
 * @param error			Error buffer.
dvander@868
   286
 * @param maxlength		Maximum size of the error buffer.
dvander@868
   287
 * @return				A new statement Handle on success, INVALID_HANDLE
dvander@868
   288
 *						otherwise.  The Handle must be freed with CloseHandle().
dvander@868
   289
 * @error				Invalid database Handle.
dvander@868
   290
 */
dvander@868
   291
native Handle:SQL_PrepareQuery(Handle:database, const String:query[], String:error[], maxlength);
dvander@868
   292
dvander@868
   293
/**
dvander@868
   294
 * Advances to the next set of results.
dvander@868
   295
 *
dvander@868
   296
 * In some SQL implementations, multiple result sets can exist on one query.  
dvander@868
   297
 * This is possible in MySQL with simple queries when executing a CALL 
dvander@868
   298
 * query.  If this is the case, all result sets must be processed before
dvander@868
   299
 * another query is made.
dvander@868
   300
 *
dvander@868
   301
 * @param query			A query Handle.
dvander@868
   302
 * @return				True if there was another result set, false otherwise.
dvander@868
   303
 * @error				Invalid query Handle.
dvander@868
   304
 */
dvander@868
   305
native bool:SQL_FetchMoreResults(Handle:query);
dvander@868
   306
dvander@868
   307
/**
dvander@868
   308
 * Returns whether or not a result set exists.  This will
dvander@868
   309
 * return true even if 0 results were returned, but false
dvander@868
   310
 * on queries like UPDATE, INSERT, or DELETE.
dvander@868
   311
 *
dvander@868
   312
 * @param query			A query (or statement) Handle.
dvander@868
   313
 * @return				True if there is a result set, false otherwise.
dvander@868
   314
 * @error				Invalid query Handle.
dvander@868
   315
 */
dvander@868
   316
native bool:SQL_HasResultSet(Handle:query);
dvander@868
   317
dvander@868
   318
/**
dvander@868
   319
 * Retrieves the number of rows in the last result set.
dvander@868
   320
 * 
dvander@868
   321
 * @param query			A query (or statement) Handle.
dvander@869
   322
 * @return				Number of rows in the current result set.
dvander@868
   323
 * @error				Invalid query Handle.
dvander@868
   324
 */
dvander@868
   325
native SQL_GetRowCount(Handle:query);
dvander@868
   326
dvander@868
   327
/**
dvander@869
   328
 * Retrieves the number of fields in the last result set.
dvander@869
   329
 * 
dvander@869
   330
 * @param query			A query (or statement) Handle.
dvander@869
   331
 * @return				Number of fields in the current result set.
dvander@869
   332
 * @error				Invalid query Handle.
dvander@869
   333
 */
dvander@869
   334
native SQL_GetFieldCount(Handle:query);
dvander@869
   335
dvander@869
   336
/**
dvander@868
   337
 * Retrieves the name of a field by index.
dvander@868
   338
 * 
dvander@868
   339
 * @param query			A query (or statement) Handle.
dvander@868
   340
 * @param field			Field number (starting from 0).
dvander@868
   341
 * @param name			Name buffer.
dvander@868
   342
 * @param maxlength		Maximum length of the name buffer.
dvander@868
   343
 * @noreturn
dvander@868
   344
 * @error				Invalid query Handle, invalid field index, or
dvander@868
   345
 *						no current result set.
dvander@868
   346
 */
dvander@868
   347
native SQL_FieldNumToName(Handle:query, field, String:name[], maxlength);
dvander@868
   348
dvander@868
   349
/**
dvander@868
   350
 * Retrieves a field index by name.
dvander@868
   351
 * 
dvander@868
   352
 * @param query			A query (or statement) Handle.
dvander@868
   353
 * @param name			Name of the field (case sensitive).
dvander@868
   354
 * @param field			Variable to store field index in.
dvander@868
   355
 * @return				True if found, false if not found.
dvander@868
   356
 * @error				Invalid query Handle or no current result set.
dvander@868
   357
 */
dvander@868
   358
native bool:SQL_FieldNameToNum(Handle:query, const String:name[], &field);
dvander@868
   359
dvander@868
   360
/**
dvander@868
   361
 * Fetches a row from the current result set.  This must be 
dvander@868
   362
 * successfully called before any results are fetched.
dvander@868
   363
 *
dvander@868
   364
 * If this function fails, SQL_MoreResults() can be used to
dvander@868
   365
 * tell if there was an error or the result set is finished.
dvander@868
   366
 * 
dvander@868
   367
 * @param query			A query (or statement) Handle.
dvander@868
   368
 * @return				True if a row was fetched, false otherwise.
dvander@868
   369
 * @error				Invalid query Handle.
dvander@868
   370
 */
dvander@868
   371
native bool:SQL_FetchRow(Handle:query);
dvander@868
   372
dvander@868
   373
/**
dvander@868
   374
 * Returns if there are more rows.
dvander@868
   375
 * 
dvander@868
   376
 * @param query			A query (or statement) Handle.
dvander@868
   377
 * @return				True if there are more rows, false otherwise.
dvander@868
   378
 * @error				Invalid query Handle.
dvander@868
   379
 */
dvander@868
   380
native bool:SQL_MoreRows(Handle:query);
dvander@868
   381
dvander@868
   382
/**
dvander@868
   383
 * Rewinds a result set back to the first result.
dvander@868
   384
 * 
dvander@868
   385
 * @param query			A query (or statement) Handle.
dvander@868
   386
 * @return				True on success, false otherwise.
dvander@868
   387
 * @error				Invalid query Handle or no current result set.
dvander@868
   388
 */
dvander@868
   389
native bool:SQL_Rewind(Handle:query);
dvander@868
   390
dvander@868
   391
/**
dvander@868
   392
 * Fetches a string from a field in the current row of a result set.  
dvander@868
   393
 * If the result is NULL, an empty string will be returned.  A NULL 
dvander@868
   394
 * check can be done with the result parameter, or SQL_IsFieldNull().
dvander@868
   395
 * 
dvander@868
   396
 * @param query			A query (or statement) Handle.
dvander@868
   397
 * @param field			The field index (starting from 0).
dvander@868
   398
 * @param buffer		String buffer.
dvander@868
   399
 * @param maxlength		Maximum size of the string buffer.
dvander@868
   400
 * @param result		Optional variable to store the status of the return value.
dvander@868
   401
 * @return				Number of bytes written.
dvander@868
   402
 * @error				Invalid query Handle or field index, invalid
dvander@868
   403
 *						type conversion requested from the database,
dvander@868
   404
 *						or no current result set.
dvander@868
   405
 */
dvander@868
   406
native SQL_FetchString(Handle:query, field, String:buffer[], maxlength, &DBResult:result=DBVal_Error);
dvander@868
   407
dvander@868
   408
/**
dvander@868
   409
 * Fetches a float from a field in the current row of a result set.  
dvander@868
   410
 * If the result is NULL, a value of 0.0 will be returned.  A NULL 
dvander@868
   411
 * check can be done with the result parameter, or SQL_IsFieldNull().
dvander@868
   412
 * 
dvander@868
   413
 * @param query			A query (or statement) Handle.
dvander@868
   414
 * @param field			The field index (starting from 0).
dvander@868
   415
 * @param result		Optional variable to store the status of the return value.
dvander@868
   416
 * @return				A float value.
dvander@868
   417
 * @error				Invalid query Handle or field index, invalid
dvander@868
   418
 *						type conversion requested from the database,
dvander@868
   419
 *						or no current result set.
dvander@868
   420
 */
dvander@868
   421
native Float:SQL_FetchFloat(Handle:query, field, &DBResult:result=DBVal_Error);
dvander@868
   422
dvander@868
   423
/**
dvander@868
   424
 * Fetches an integer from a field in the current row of a result set.  
dvander@868
   425
 * If the result is NULL, a value of 0 will be returned.  A NULL 
dvander@868
   426
 * check can be done with the result parameter, or SQL_IsFieldNull().
dvander@868
   427
 * 
dvander@868
   428
 * @param query			A query (or statement) Handle.
dvander@868
   429
 * @param field			The field index (starting from 0).
dvander@868
   430
 * @param result		Optional variable to store the status of the return value.
dvander@868
   431
 * @return				An integer value.
dvander@868
   432
 * @error				Invalid query Handle or field index, invalid
dvander@868
   433
 *						type conversion requested from the database,
dvander@868
   434
 *						or no current result set.
dvander@868
   435
 */
dvander@868
   436
native SQL_FetchInt(Handle:query, field, &DBResult:result=DBVal_Error);
dvander@868
   437
dvander@868
   438
/**
dvander@868
   439
 * Returns whether a field's data in the current row of a result set is 
dvander@868
   440
 * NULL or not.  NULL is an SQL type which means "no data."
dvander@868
   441
 * 
dvander@868
   442
 * @param query			A query (or statement) Handle.
dvander@868
   443
 * @param field			The field index (starting from 0).
dvander@868
   444
 * @return				True if data is NULL, false otherwise.
dvander@868
   445
 * @error				Invalid query Handle or field index, or no
dvander@868
   446
 *						current result set.
dvander@868
   447
 */
dvander@868
   448
native bool:SQL_IsFieldNull(Handle:query, field);
dvander@868
   449
dvander@868
   450
/**
dvander@868
   451
 * Returns the length of a field's data in the current row of a result
dvander@868
   452
 * set.  This only needs to be called for strings to determine how many
dvander@868
   453
 * bytes to use.  Note that the return value does not include the null
dvander@868
   454
 * terminator.
dvander@868
   455
 * 
dvander@868
   456
 * @param query			A query (or statement) Handle.
dvander@868
   457
 * @param field			The field index (starting from 0).
dvander@868
   458
 * @return				Number of bytes for the field's data size.
dvander@868
   459
 * @error				Invalid query Handle or field index or no
dvander@868
   460
 *						current result set.
dvander@868
   461
 */
dvander@868
   462
native SQL_FetchSize(Handle:query, field);
dvander@868
   463
dvander@868
   464
/**
dvander@868
   465
 * Binds a parameter in a prepared statement to a given integer value.
dvander@868
   466
 * 
dvander@868
   467
 * @param statement		A statement (prepared query) Handle.
dvander@868
   468
 * @param param			The parameter index (starting from 0).
dvander@868
   469
 * @param number		The number to bind.
dvander@868
   470
 * @param signed		True to bind the number as signed, false to 
dvander@868
   471
 *						bind it as unsigned.
dvander@868
   472
 * @noreturn
dvander@868
   473
 * @error				Invalid statement Handle or parameter index, or
dvander@868
   474
 *						SQL error.
dvander@868
   475
 */
dvander@868
   476
native SQL_BindParamInt(Handle:statement, param, number, bool:signed=true);
dvander@868
   477
dvander@868
   478
/**
dvander@868
   479
 * Binds a parameter in a prepared statement to a given float value.
dvander@868
   480
 * 
dvander@868
   481
 * @param statement		A statement (prepared query) Handle.
dvander@868
   482
 * @param param			The parameter index (starting from 0).
dvander@868
   483
 * @param float			The float number to bind.
dvander@868
   484
 * @noreturn
dvander@868
   485
 * @error				Invalid statement Handle or parameter index, or
dvander@868
   486
 *						SQL error.
dvander@868
   487
 */
dvander@868
   488
native SQL_BindParamFloat(Handle:statement, param, Float:value);
dvander@868
   489
dvander@868
   490
/**
dvander@868
   491
 * Binds a parameter in a prepared statement to a given string value.
dvander@868
   492
 * 
dvander@868
   493
 * @param statement		A statement (prepared query) Handle.
dvander@868
   494
 * @param param			The parameter index (starting from 0).
dvander@868
   495
 * @param value			The string to bind.
dvander@868
   496
 * @param copy			Whether or not SourceMod should copy the value
dvander@868
   497
 *						locally if necessary.  If the string contents
dvander@868
   498
 *						won't change before calling SQL_Execute(), this
dvander@868
   499
 *						can be set to false for optimization.
dvander@868
   500
 * @noreturn
dvander@868
   501
 * @error				Invalid statement Handle or parameter index, or
dvander@868
   502
 *						SQL error.
dvander@868
   503
 */
dvander@868
   504
native SQL_BindParamString(Handle:statement, param, const String:value[], bool:copy);
dvander@868
   505
dvander@868
   506
/**
dvander@868
   507
 * Executes a prepared statement.  All parameters must be bound beforehand.
dvander@868
   508
 *
dvander@868
   509
 * @param statement		A statement (prepared query) Handle.
dvander@868
   510
 * @return				True on success, false on failure.
dvander@868
   511
 * @error				Invalid statement Handle.
dvander@868
   512
 */
dvander@868
   513
native bool:SQL_Execute(Handle:statement);
dvander@1096
   514
dvander@1096
   515
/**
dvander@1096
   516
 * Locks a database so threading operations will not interrupt.
dvander@1096
   517
 * 
dvander@1096
   518
 * If you are using a database Handle for both threading and non-threading,
dvander@1096
   519
 * this MUST be called before doing any set of non-threading DB operations.
dvander@1096
   520
 * Otherwise you risk corrupting the database driver's memory or network
dvander@1096
   521
 * connection.
dvander@1096
   522
 * 
dvander@1096
   523
 * Leaving a lock on a database and then executing a threaded query results
dvander@1096
   524
 * in a dead lock! Make sure to call SQL_UnlockDatabase()!
dvander@1096
   525
 *
dvander@1096
   526
 * If the lock cannot be acquired, the main thread will pause until the 
dvander@1096
   527
 * threaded operation has concluded.
dvander@1096
   528
 *
dvander@1096
   529
 * @param database		A database Handle.
dvander@1096
   530
 * @noreturn
dvander@1096
   531
 * @error				Invalid database Handle.
dvander@1096
   532
 */
dvander@1096
   533
native SQL_LockDatabase(Handle:database);
dvander@1096
   534
dvander@1096
   535
/**
dvander@1096
   536
 * Unlocks a database so threading operations may continue.
dvander@1096
   537
 *
dvander@1096
   538
 * @param database		A database Handle.
dvander@1096
   539
 * @noreturn
dvander@1096
   540
 * @error				Invalid database Handle.
dvander@1096
   541
 */
dvander@1096
   542
native SQL_UnlockDatabase(Handle:database);
dvander@1096
   543
dvander@1096
   544
/**
dvander@1096
   545
 * General callback for threaded SQL stuff.
dvander@1096
   546
 *
dvander@1096
   547
 * @param db			Parent object of the Handle (or INVALID_HANDLE if none).
dvander@1096
   548
 * @param hndl			Handle to the child object (or INVALID_HANDLE if none).
dvander@1096
   549
 * @param error			Error string, if any.
dvander@1096
   550
 * @param 
dvander@1096
   551
 */
dvander@1096
   552
functag SQLTCallback public(Handle:owner, Handle:hndl, const String:error[], any:data);
dvander@1096
   553
dvander@1096
   554
/**
dvander@1096
   555
 * Tells whether two database handles both point to the same database 
dvander@1096
   556
 * connection.
dvander@1096
   557
 *
dvander@1096
   558
 * @param hndl1			First database Handle.
dvander@1096
   559
 * @param hndl2			Second database Handle.
dvander@1096
   560
 * @return				True if the Handles point to the same 
dvander@1096
   561
 *						connection, false otherwise.
dvander@1096
   562
 * @error				Invalid Handle.
dvander@1096
   563
 */
dvander@1096
   564
native bool:SQL_IsSameConnection(Handle:hndl1, Handle:hndl2);
dvander@1096
   565
dvander@1096
   566
/**
dvander@1096
   567
 * Connects to a database via a thread.  This can be used instead of
dvander@1096
   568
 * SQL_Connect() if you wish for non-blocking functionality.
dvander@1096
   569
 *
dvander@1096
   570
 * It is not necessary to use this to use threaded queries.  However, if you 
dvander@1096
   571
 * don't (or you mix threaded/non-threaded queries), you should see 
dvander@1096
   572
 * SQL_LockDatabase().
dvander@1096
   573
 *
dvander@1096
   574
 * @param callback		Callback; new Handle will be in hndl, owner is the driver.
dvander@1096
   575
 *						If no driver was found, the owner is INVALID_HANDLE.
dvander@1096
   576
 * @param name			Database name.
dvander@1096
   577
 * @noreturn
dvander@1096
   578
 */
dvander@1317
   579
native SQL_TConnect(SQLTCallback:callback, const String:name[]="default", any:data=0);
dvander@1096
   580
dvander@1096
   581
/**
dvander@1096
   582
 * Executes a simple query via a thread.  The query Handle is passed through
dvander@1096
   583
 * the callback.
dvander@1096
   584
 *
dvander@1096
   585
 * The database Handle returned through the callback is always a new Handle,
dvander@1096
   586
 * and if necessary, SQL_IsSameConnection() should be used to test against
dvander@1096
   587
 * other conenctions.
dvander@1096
   588
 *
dvander@1096
   589
 * The query Handle returned through the callback is temporary and destroyed 
dvander@1096
   590
 * at the end of the callback.  If you need to hold onto it, use CloneHandle().
dvander@1096
   591
 *
dvander@1096
   592
 * @param database		A database Handle.
dvander@1096
   593
 * @param callback		Callback; database is in "owner" and the query Handle
dvander@1096
   594
 *						is passed in "hndl".
dvander@1096
   595
 * @param query			Query string.
dvander@1096
   596
 * @param data			Extra data value to pass to the callback.
dvander@1096
   597
 * @param prio			Priority queue to use.
dvander@1096
   598
 * @noreturn
dvander@1096
   599
 * @error				Invalid database Handle.
dvander@1096
   600
 */
dvander@1096
   601
native SQL_TQuery(Handle:database, SQLTCallback:callback, const String:query[], any:data=0, DBPriority:prio=DBPrio_Normal);