Пример #1
0
/*
** 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);
}
Пример #2
0
/*
** 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);
}
Пример #3
0
/*
** 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);
}
Пример #4
0
/*
** 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;
}
Пример #5
0
/*
** 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);
}
Пример #6
0
/*
** 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);
}
Пример #7
0
/*
** 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);
}
Пример #8
0
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,
			       &current_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);
}
Пример #9
0
/*
** 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;
}