/* ** Connects to a data source. */ static int env_connect(lua_State *L) { const char *sourcename; sqlite3 *conn; const char *errmsg; int res; getenvironment(L); /* validate environment */ sourcename = luaL_checkstring(L, 2); res = sqlite3_open(sourcename, &conn); if (res != SQLITE_OK) { errmsg = sqlite3_errmsg(conn); luasql_faildirect(L, errmsg); sqlite3_close(conn); return 2; } if (lua_isnumber(L, 3)) { sqlite3_busy_timeout(conn, lua_tonumber(L,3)); // TODO: remove this } return create_connection(L, 1, conn); }
/* ** Creates and returns a connection object ** Lua Input: source [, user [, pass]] ** source: data source ** user, pass: data source authentication information ** Lua Returns: ** connection object if successfull ** nil and error message otherwise. */ static int env_connect (lua_State *L) { env_data *env = (env_data *) getenvironment (L); const char *sourcename = luaL_checkstring (L, 2); const char *username = luaL_optstring (L, 3, NULL); const char *password = luaL_optstring (L, 4, NULL); SQLHDBC hdbc; SQLRETURN ret; /* tries to allocate connection handle */ ret = SQLAllocHandle (hDBC, env->henv, &hdbc); if (error(ret)) return luasql_faildirect (L, "connection allocation error."); /* tries to connect handle */ ret = SQLConnect (hdbc, (char *) sourcename, SQL_NTS, (char *) username, SQL_NTS, (char *) password, SQL_NTS); if (error(ret)) { ret = fail(L, hDBC, hdbc); SQLFreeHandle(hDBC, hdbc); return ret; } /* success, return connection object */ return create_connection (L, 1, env, hdbc); }
/* ** Connects to a data source. */ static int env_connect (lua_State *L) { const char *sourcename = luaL_checkstring(L, 2); const char *username = luaL_optstring(L, 3, NULL); const char *password = luaL_optstring(L, 4, NULL); const char *pghost = luaL_optstring(L, 5, NULL); const char *pgport = luaL_optstring(L, 6, NULL); PGconn *conn; getenvironment (L); /* validate environment */ conn = PQsetdbLogin(pghost, pgport, NULL, NULL, sourcename, username, password); if (PQstatus(conn) == CONNECTION_BAD) { int rc = luasql_failmsg(L, "error connecting to database. PostgreSQL: ", PQerrorMessage(conn)); PQfinish(conn); return rc; } PQsetNoticeProcessor(conn, notice_processor, NULL); return create_connection(L, 1, conn); }
/* ** Connects to a data source. */ static int env_connect (lua_State *L) { env_data *env = getenvironment (L); const char *sourcename = luaL_checkstring(L, 2); const char *username = luaL_optstring(L, 3, NULL); const char *password = luaL_optstring(L, 4, NULL); /* Sizes of strings */ size_t snlen = strlen(sourcename); size_t userlen = (username) ? strlen(username) : 0; size_t passlen = (password) ? strlen(password) : 0; /* Alloc connection object */ conn_data *conn = (conn_data *)lua_newuserdata(L, sizeof(conn_data)); /* fill in structure */ luasql_setmeta (L, LUASQL_CONNECTION_OCI8); conn->env = LUA_NOREF; conn->closed = 1; conn->auto_commit = 1; conn->cur_counter = 0; conn->loggedon = 0; conn->svchp = NULL; conn->errhp = NULL; lua_pushvalue (L, 1); conn->env = luaL_ref (L, LUA_REGISTRYINDEX); /* error handler */ ASSERT (L, OCIHandleAlloc((dvoid *) env->envhp, (dvoid **) &(conn->errhp), /* !!! */ (ub4) OCI_HTYPE_ERROR, (size_t) 0, (dvoid **) 0), env->errhp); /* service handler */ /*ASSERT (L, OCIHandleAlloc((dvoid *) env->envhp, (dvoid **) &(conn->svchp), (ub4) OCI_HTYPE_SVCCTX, (size_t) 0, (dvoid **) 0), conn->errhp); */ /* login */ ASSERT (L, OCILogon(env->envhp, conn->errhp, &(conn->svchp), (CONST text*)username, userlen, (CONST text*)password, passlen, (CONST text*)sourcename, snlen), conn->errhp); conn->closed = 0; env->conn_counter++; conn->loggedon = 1; return 1; }
/* ** Connects to a data source. */ static int env_connect(lua_State *L) { const char *sourcename; sqlite *conn; char *errmsg; getenvironment(L); /* validate environment */ sourcename = luaL_checkstring(L, 2); conn = sqlite_open(sourcename, 0, &errmsg); if (conn == NULL) { lua_pushnil(L); lua_pushliteral(L, LUASQL_PREFIX); lua_pushstring(L, errmsg); sqlite_freemem(errmsg); lua_concat(L, 2); return 2; } return create_connection(L, 1, conn); }
/* ** Connects to a data source. */ static int env_connect(lua_State *L) { const char *sourcename; sqlite3 *conn; const char *errmsg; int res; getenvironment(L); /* validate environment */ sourcename = luaL_checkstring(L, 2); res = sqlite3_open(sourcename, &conn); if (res != SQLITE_OK) { errmsg = sqlite3_errmsg(conn); lua_pushnil(L); lua_pushliteral(L, LUASQL_PREFIX); lua_pushstring(L, errmsg); lua_concat(L, 2); sqlite3_close(conn); return 2; } return create_connection(L, 1, conn); }
/* ** Connects to a data source. ** param: one string for each connection parameter, said ** datasource, username, password, host and port. */ static int env_connect (lua_State *L) { const char *sourcename = luaL_checkstring(L, 2); const char *username = luaL_optstring(L, 3, NULL); const char *password = luaL_optstring(L, 4, NULL); const char *host = luaL_optstring(L, 5, NULL); const int port = luaL_optint(L, 6, 0); MYSQL *conn; getenvironment(L); /* validade environment */ /* Try to init the connection object. */ conn = mysql_init(NULL); if (conn == NULL) return luasql_faildirect(L, LUASQL_PREFIX"Error connecting: Out of memory."); if (!mysql_real_connect(conn, host, username, password, sourcename, port, NULL, 0)) { char error_msg[100]; strncpy (error_msg, mysql_error(conn), 99); mysql_close (conn); /* Close conn if connect failed */ return luasql_failmessage (L, "Error connecting to database. MySQL: ", error_msg); } return create_connection(L, 1, conn); }
static PyObject * sp_CreateProcess(PyObject* self, PyObject* args) { BOOL result; PROCESS_INFORMATION pi; STARTUPINFO si; PyObject* environment; char* application_name; char* command_line; PyObject* process_attributes; /* ignored */ PyObject* thread_attributes; /* ignored */ int inherit_handles; int creation_flags; PyObject* env_mapping; char* current_directory; PyObject* startup_info; if (! PyArg_ParseTuple(args, "zzOOiiOzO:CreateProcess", &application_name, &command_line, &process_attributes, &thread_attributes, &inherit_handles, &creation_flags, &env_mapping, ¤t_directory, &startup_info)) return NULL; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); /* note: we only support a small subset of all SI attributes */ si.dwFlags = getint(startup_info, "dwFlags"); si.wShowWindow = getint(startup_info, "wShowWindow"); si.hStdInput = gethandle(startup_info, "hStdInput"); si.hStdOutput = gethandle(startup_info, "hStdOutput"); si.hStdError = gethandle(startup_info, "hStdError"); if (PyErr_Occurred()) return NULL; if (env_mapping == Py_None) environment = NULL; else { environment = getenvironment(env_mapping); if (! environment) return NULL; } Py_BEGIN_ALLOW_THREADS result = CreateProcess(application_name, command_line, NULL, NULL, inherit_handles, creation_flags, environment ? PyString_AS_STRING(environment) : NULL, current_directory, &si, &pi); Py_END_ALLOW_THREADS Py_XDECREF(environment); if (! result) return PyErr_SetFromWindowsErr(GetLastError()); return Py_BuildValue("NNii", sp_handle_new(pi.hProcess), sp_handle_new(pi.hThread), pi.dwProcessId, pi.dwThreadId); }
/* ** Creates and returns a connection object ** Lua Input: source, user, pass ** source: data source ** user, pass: data source authentication information ** Lua Returns: ** connection object if successfull ** nil and error message otherwise. */ static int env_connect (lua_State *L) { char *dpb; int i; static char isc_tpb[] = { isc_tpb_version3, isc_tpb_write }; conn_data conn; conn_data* res_conn; env_data *env = (env_data *) getenvironment (L, 1); const char *sourcename = luaL_checkstring (L, 2); const char *username = luaL_optstring (L, 3, ""); const char *password = luaL_optstring (L, 4, ""); conn.env = env; conn.db = 0L; conn.transaction = 0L; conn.lock = 0; conn.autocommit = 0; /* Construct a database parameter buffer. */ dpb = conn.dpb_buffer; *dpb++ = isc_dpb_version1; *dpb++ = isc_dpb_num_buffers; *dpb++ = 1; *dpb++ = 90; /* add the user name and password */ *dpb++ = isc_dpb_user_name; *dpb++ = (char)strlen(username); for(i=0; i<(int)strlen(username); i++) *dpb++ = username[i]; *dpb++ = isc_dpb_password; *dpb++ = (char)strlen(password); for(i=0; i<(int)strlen(password); i++) *dpb++ = password[i]; /* the length of the dpb */ conn.dpb_length = (short)(dpb - conn.dpb_buffer); /* do the job */ isc_attach_database(env->status_vector, (short)strlen(sourcename), (char*)sourcename, &conn.db, conn.dpb_length, conn.dpb_buffer); /* an error? */ if ( CHECK_DB_ERROR(conn.env->status_vector) ) return return_db_error(L, conn.env->status_vector); /* open up the transaction handle */ isc_start_transaction( env->status_vector, &conn.transaction, 1, &conn.db, (unsigned short)sizeof(isc_tpb), isc_tpb ); /* return NULL on error */ if ( CHECK_DB_ERROR(conn.env->status_vector) ) return return_db_error(L, conn.env->status_vector); /* create the lua object and add the connection to the lock */ res_conn = (conn_data*)lua_newuserdata(L, sizeof(conn_data)); luasql_setmeta (L, LUASQL_CONNECTION_FIREBIRD); memcpy(res_conn, &conn, sizeof(conn_data)); res_conn->closed = 0; /* connect now officially open */ /* register the connection */ lua_registerobj(L, 1, env); ++env->lock; return 1; }