示例#1
0
文件: lenv.c 项目: zhanglei/lua-odbc
static int env_destroy (lua_State *L) {
  lodbc_env *env = (lodbc_env *)lutil_checkudatap (L, 1, LODBC_ENV);
  luaL_argcheck (L, env != NULL, 1, LODBC_PREFIX "environment expected");

  if(!(env->flags & LODBC_FLAG_DESTROYED)){
    //! @todo autoclose connections

    if (env->conn_counter > 0)
      return luaL_error (L, LODBC_PREFIX"there are open connections");

    if(!(env->flags & LODBC_FLAG_DONT_DESTROY)){
#ifdef LODBC_CHECK_ERROR_ON_DESTROY
      SQLRETURN ret =
#endif
      SQLFreeHandle (hENV, env->handle);

#ifdef LODBC_CHECK_ERROR_ON_DESTROY
      if (lodbc_iserror(ret)) return lodbc_fail(L, hENV, env->handle);
#endif

      env->handle = SQL_NULL_HANDLE;
    }
    env->flags |= LODBC_FLAG_DESTROYED;
  }

  lua_pushnil(L);
  lodbc_set_user_value(L, 1);
  return lodbc_pass(L);
}
示例#2
0
文件: lenv.c 项目: ld-test/odbc
static int env_destroy (lua_State *L) {
    lodbc_env *env = (lodbc_env *)lutil_checkudatap (L, 1, LODBC_ENV);
    luaL_argcheck (L, env != NULL, 1, LODBC_PREFIX "environment expected");

    if(!(env->flags & LODBC_FLAG_DESTROYED)) {

        if(LUA_NOREF != env->conn_list_ref) {
            lua_rawgeti(L, LODBC_LUA_REGISTRY, env->conn_list_ref);
            assert(lua_istable(L, -1));
            lua_pushnil(L);
            while(lua_next(L, -2)) {
                lua_pop(L, 1); // we do not need value
                call_cnn_destroy(L);
            }
        }

        if (env->conn_counter > 0)
            return luaL_error (L, LODBC_PREFIX"there are open connections");

        if(!(env->flags & LODBC_FLAG_DONT_DESTROY)) {
#ifdef LODBC_CHECK_ERROR_ON_DESTROY
            SQLRETURN ret =
#endif
                SQLFreeHandle (hENV, env->handle);

#ifdef LODBC_CHECK_ERROR_ON_DESTROY
            if (lodbc_iserror(ret)) return lodbc_fail(L, hENV, env->handle);
#endif

            env->handle = SQL_NULL_HANDLE;
        }

        luaL_unref(L, LODBC_LUA_REGISTRY, env->conn_list_ref);
        env->conn_list_ref = LUA_NOREF;

        env->flags |= LODBC_FLAG_DESTROYED;
    }

    lua_pushnil(L);
    lodbc_set_user_value(L, 1);
    return lodbc_pass(L);
}
示例#3
0
文件: lenv.c 项目: ld-test/odbc
static int env_setuservalue(lua_State *L) {
    lodbc_getenv(L);
    lua_settop(L, 2);
    lodbc_set_user_value(L, 1);
    return 1;
}