int lodbc_environment_create(lua_State *L, SQLHENV henv, uchar own){ lodbc_env *env; uchar is_new = 0; if(henv == SQL_NULL_HANDLE){ SQLRETURN ret = SQLAllocHandle(hENV, SQL_NULL_HANDLE, &henv); if (lodbc_iserror(ret)) return lodbc_faildirect(L, "error creating environment."); own = 1; is_new = 1; } env = lutil_newudatap(L, lodbc_env, LODBC_ENV); memset(env, 0, sizeof(lodbc_env)); if(!own)env->flags |= LODBC_FLAG_DONT_DESTROY; env->handle = henv; if(is_new){ int top = lua_gettop(L); SQLRETURN ret = env_set_uint_attr_(L, env, SQL_ATTR_ODBC_VERSION, LODBC_ODBC3_C(SQL_OV_ODBC3, SQL_OV_ODBC2) ); if(lodbc_is_fail(L,ret)){ SQLFreeHandle (hENV, henv); env->flags &= ~LODBC_FLAG_DESTROYED; return ret; } lua_settop(L, top); } return 1; }
int lodbc_environment_create(lua_State *L, SQLHENV henv, uchar own) { lodbc_env *env; uchar is_new = 0; if(henv == SQL_NULL_HANDLE) { SQLRETURN ret = SQLAllocHandle(hENV, SQL_NULL_HANDLE, &henv); if (lodbc_iserror(ret)) return lodbc_faildirect(L, "error creating environment."); own = 1; is_new = 1; } env = lutil_newudatap(L, lodbc_env, LODBC_ENV); memset(env, 0, sizeof(lodbc_env)); if(!own)env->flags |= LODBC_FLAG_DONT_DESTROY; env->handle = henv; env->conn_list_ref = LUA_NOREF; if(LODBC_OPT_INT(ENV_AUTOCLOSECNN)) { int top = lua_gettop(L); lua_pushvalue(L, -1); lua_pushboolean(L, 1); lodbc_pcall_method(L, "setautoclosecnn", 1, 0, 0); lua_settop(L, top); } if(is_new) { int top = lua_gettop(L); SQLRETURN ret = env_set_uint_attr_(L, env, SQL_ATTR_ODBC_VERSION, LODBC_ODBC3_C(SQL_OV_ODBC3, SQL_OV_ODBC2) ); if(lodbc_is_fail(L,ret)) { SQLFreeHandle (hENV, henv); env->flags &= ~LODBC_FLAG_DESTROYED; return ret; } lua_settop(L, top); } return 1; }