⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sfldbio.c

📁 短小精悍的C语言标准函数库。提供450个以上的可移植的算法和工具代码。
💻 C
📖 第 1 页 / 共 2 页
字号:
              }
#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 + -