📄 sfldbio.c
字号:
}
#endif
#if defined (DBIO_XML)
else
if (streq (val-> value, DB_TYPE_NAME_XML))
{
}
#endif
}
sym_delete_table (connect_cache);
}
}
/* ---------------------------------------------------------------------[<]-
Function: dbio_commit
Synopsis:
---------------------------------------------------------------------[>]-*/
int
dbio_commit (void)
{
SYMBOL
*val;
int
feedback = TRUE;
if (connect_cache)
{
for (val = connect_cache-> symbols; val; val = val-> next)
{
#if defined (DBIO_NONE)
if (streq (val-> value, DB_TYPE_NAME_NONE))
{
}
#else
if (FALSE) {}
#endif
#if defined (DBIO_ODBC)
else
if (streq (val-> value, DB_TYPE_NAME_ODBC))
dbio_odbc_commit (val-> data);
#endif
#if defined (DBIO_ORACLE)
else
if (streq (val-> value, DB_TYPE_NAME_ORACLE))
{
}
#endif
#if defined (DBIO_DB2)
else
if (streq (val-> value, DB_TYPE_NAME_DB2))
dbio_db2_commit ();
#endif
#if defined (DBIO_INFORMIX)
else
if (streq (val-> value, DB_TYPE_NAME_INFORMIX))
{
}
#endif
#if defined (DBIO_SYBASE)
else
if (streq (val-> value, DB_TYPE_NAME_SYBASE))
{
}
#endif
#if defined (DBIO_SQLSERV)
else
if (streq (val-> value, DB_TYPE_NAME_SQLSERV))
{
}
#endif
#if defined (DBIO_MYSQL)
else
if (streq (val-> value, DB_TYPE_NAME_MYSQL))
dbio_mysql_commit (val-> data);
#endif
#if defined (DBIO_POSTGRESS)
else
if (streq (val-> value, DB_TYPE_NAME_POSTGRESS))
{
}
#endif
#if defined (DBIO_XML)
else
if (streq (val-> value, DB_TYPE_NAME_XML))
{
}
#endif
}
}
#if !defined (DBIO_NONE)
free_table_context (0);
#endif
return (feedback);
}
/* ---------------------------------------------------------------------[<]-
Function: dbio_rollback
Synopsis:
---------------------------------------------------------------------[>]-*/
int
dbio_rollback (void)
{
SYMBOL
*val;
int
feedback = TRUE;
if (connect_cache)
{
for (val = connect_cache-> symbols; val; val = val-> next)
{
#if defined (DBIO_NONE)
if (streq (val-> value, DB_TYPE_NAME_NONE))
{
}
#else
if (FALSE) {}
#endif
#if defined (DBIO_ODBC)
else
if (streq (val-> value, DB_TYPE_NAME_ODBC))
dbio_odbc_rollback (val-> data);
#endif
#if defined (DBIO_ORACLE)
else
if (streq (val-> value, DB_TYPE_NAME_ORACLE))
{
}
#endif
#if defined (DBIO_DB2)
else
if (streq (val-> value, DB_TYPE_NAME_DB2))
dbio_db2_rollback ();
#endif
#if defined (DBIO_INFORMIX)
else
if (streq (val-> value, DB_TYPE_NAME_INFORMIX))
{
}
#endif
#if defined (DBIO_SYBASE)
else
if (streq (val-> value, DB_TYPE_NAME_SYBASE))
{
}
#endif
#if defined (DBIO_SQLSERV)
else
if (streq (val-> value, DB_TYPE_NAME_SQLSERV))
{
}
#endif
#if defined (DBIO_MYSQL)
else
if (streq (val-> value, DB_TYPE_NAME_MYSQL))
dbio_mysql_rollback (val-> data);
#endif
#if defined (DBIO_POSTGRESS)
else
if (streq (val-> value, DB_TYPE_NAME_POSTGRESS))
{
}
#endif
#if defined (DBIO_XML)
else
if (streq (val-> value, DB_TYPE_NAME_XML))
{
}
#endif
}
}
#if !defined (DBIO_NONE)
free_table_context (0);
#endif
return (feedback);
}
/* ---------------------------------------------------------------------[<]-
Function: dbio_get_error
Synopsis:
---------------------------------------------------------------------[>]-*/
DBIO_ERR *
dbio_get_error (void)
{
return (&dbio_error);
}
/* ---------------------------------------------------------------------[<]-
Function: dbio_error_code
Synopsis:
---------------------------------------------------------------------[>]-*/
int
dbio_error_code (void)
{
return (dbio_error.code);
}
/* ---------------------------------------------------------------------[<]-
Function: dbio_error_message
Synopsis:
---------------------------------------------------------------------[>]-*/
char *
dbio_error_message (void)
{
return (dbio_error.message);
}
#if !defined (DBIO_NONE)
/* -------------------------------------------------------------------------
Function: add_connect_context
Synopsis:
-------------------------------------------------------------------------*/
static Bool
add_connect_context (void *context, char *db_name, dbyte db_type, Bool def)
{
Bool
feedback = FALSE; /* Feedback value */
SYMBOL
*cache_value; /* Cache value */
DBIO_CTX
*ctx;
/* Allocate connect cache if empty */
if (connect_cache == NULL)
{
connect_cache = sym_create_table ();
if (connect_cache == NULL)
return (FALSE);
}
/* Add connection context to cache */
sprintf (buffer, "%s_%s", db_type_name [db_type], db_name);
cache_value = sym_assume_symbol (connect_cache, buffer,
db_type_name [db_type]);
if (cache_value)
{
ctx = (DBIO_CTX *)context;
ctx-> connect_id = ++max_connect_id [db_type];
cache_value-> data = context;
current_connect_id [db_type] = ctx-> connect_id;
if (def == TRUE)
{
if (default_connect_id [db_type] != 0)
coprintf ("Warning: Multiple default connection for %s\n",
db_type_name [db_type]);
default_connect_id [db_type] = ctx-> connect_id;
default_connect_ctx [db_type] = context;
}
feedback = TRUE;
}
return (feedback);
}
/* ---------------------------------------------------------------------[<]-
Function: get_connect_context
Synopsis:
---------------------------------------------------------------------[>]-*/
static void *
get_connect_context (char *db_name, dbyte db_type)
{
void
*context = NULL; /* Database context structure */
SYMBOL
*cache_value; /* Cache value */
if (connect_cache == NULL)
return (NULL);
if (db_name == NULL || strnull (db_name))
context = default_connect_ctx [db_type];
else
{
sprintf (buffer, "%s_%s", db_type_name [db_type], db_name);
cache_value = sym_lookup_symbol (connect_cache, buffer);
if (cache_value)
context = (void *)cache_value-> data;
}
return (context);
}
static Bool
add_table_context (void *context)
{
DBIO_TABLE_HANDLE
*handle = NULL;
Bool
feedback = FALSE;
list_create (handle, sizeof (DBIO_TABLE_HANDLE));
if (handle)
{
handle-> handle = context;
list_relink_before (&table_cache, handle);
feedback = TRUE;
}
return (feedback);
}
static void
free_table_context (long connect_id)
{
DBIO_TABLE_HANDLE
*next = NULL,
*handle = NULL;
DBIO_CTX
*ctx = NULL;
for (handle = table_cache.next; (void *)handle != &table_cache; )
{
ctx = (DBIO_CTX *)handle-> handle;
if ((connect_id == 0
|| connect_id == ctx-> connect_id)
&& ctx-> free_handle != NULL)
{
ctx-> free_handle (ctx);
next = handle-> next;
list_unlink (handle);
mem_free (handle-> handle);
mem_free (handle);
handle = next;
}
else
handle = handle-> next;
}
}
#endif
dbyte
get_db_type (char *db_type_name)
{
dbyte
type = DB_TYPE_NONE;
if (db_type_name == NULL)
return (type);
if (lexcmp (db_type_name, DB_TYPE_NAME_ODBC) == 0)
type = DB_TYPE_ODBC;
else
if (lexcmp (db_type_name, DB_TYPE_NAME_ORACLE) == 0)
type = DB_TYPE_ORACLE;
else
if (lexcmp (db_type_name, DB_TYPE_NAME_DB2) == 0)
type = DB_TYPE_DB2;
else
if (lexcmp (db_type_name, DB_TYPE_NAME_INFORMIX) == 0)
type = DB_TYPE_INFORMIX;
else
if (lexcmp (db_type_name, DB_TYPE_NAME_SYBASE) == 0)
type = DB_TYPE_SYBASE;
else
if (lexcmp (db_type_name, DB_TYPE_NAME_SQLSERV) == 0)
type = DB_TYPE_SQLSERV;
else
if (lexcmp (db_type_name, DB_TYPE_NAME_MYSQL) == 0)
type = DB_TYPE_MYSQL;
else
if (lexcmp (db_type_name, DB_TYPE_NAME_POSTGRESS) == 0)
type = DB_TYPE_POSTGRES;
else
if (lexcmp (db_type_name, DB_TYPE_NAME_XML) == 0)
type = DB_TYPE_XML;
return (type);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -