Esempio n. 1
0
void operator*=(ValueMap& map, SqlSelect select)
{
	map.Clear();
	Sql sql;
	sql * select;
	while(sql.Fetch())
		map.Add(sql[0], sql[1]);
}
Esempio n. 2
0
Value SqlStatement::Fetch(Sql& cursor) const {
    ASSERT(text.GetCount());
    if(!Execute(cursor))
        return ErrorValue(SqlExc(cursor.GetSession()));
    if(!cursor.Fetch())
        return Null;
    return cursor[0];
}
Esempio n. 3
0
String ForceInsertRowid(const String& insert, Sql& cursor)
{
    if(!cursor.Execute(insert + " returning ROWID into ?%s"))
        throw SqlExc(cursor.GetSession());
    if(!cursor.Fetch())
        throw Exc(t_("FETCH internal error (ForceInsertRowid)"));
    ASSERT(!IsNull(cursor[0]));
    return cursor[0];
}
Esempio n. 4
0
VectorMap<String, SqlColumnInfo> Describe(const SqlVal& table, Sql& cursor)
{
    VectorMap<String, SqlColumnInfo> map;
    if(cursor * SelectAll().From(table).Where(SqlBool::False()))
        for(int i = 0, n = cursor.GetColumns(); i < n; i++)
        {
            const SqlColumnInfo& sci = cursor.GetColumnInfo(i);
            map.Add(sci.name, sci);
        }
    return map;
}
Esempio n. 5
0
	virtual void Field(const char *name, Ref f) {
		if(i) {
			clist += ", ";
			qlist += ", ";
		}
		clist += name;
		qlist += "? ";
		sql->SetParam(i++, f);
	}
Esempio n. 6
0
int SqlError(
#ifdef PLATFORM_WIN32
	HWND parent,
#endif
	const char *text, const Sql& sql, bool retry) {
	return SqlError(
#ifdef PLATFORM_WIN32
		parent,
#endif
		text, sql.GetSession(), retry);
}
Esempio n. 7
0
	virtual void Field(const char *name, Ref f) {
		if(!f.IsNull()) {
			if(clist.GetCount()) {
				clist += ", ";
				qlist += ", ";
			}
			clist << name;
			qlist << "? ";
			sql->SetParam(i++, f);
		}
	}
Esempio n. 8
0
	virtual void Field(const char *name, Ref f) {
		if(clist.GetCount()) {
			clist += ", ";
			qlist += ", ";
		}
		if(i) {
			clist += name;
			qlist += "? ";
			sql->SetParam(i - 1, f);
		}
		i++;
	}
Esempio n. 9
0
	virtual void Field(const char *name, Ref f) {
		if(i == 0) {
			key = name;
			keyval = f;
		}
		else {
			if(i > 1)
				list += ", ";
			list << name << " = ?";
			sql->SetParam(i - 1, f);
		}
		i++;
	}
Esempio n. 10
0
bool OkCommit(Sql& sql, const char *emsg) {
	return OkCommit(sql.GetSession(), emsg);
}
Esempio n. 11
0
bool ErrorRollback(Sql& sql, const char *emsg) {
	return ErrorRollback(sql.GetSession(), emsg);
}
Esempio n. 12
0
bool IsNotEmpty(const SqlSelect& select, Sql& cursor)
{
    return cursor * select && cursor.Fetch();
}
Esempio n. 13
0
void SqlStatement::Force(Sql& cursor) const {
    ASSERT(text.GetCount());
    if(!cursor.Execute(*this))
        throw SqlExc(cursor.GetSession());
}
Esempio n. 14
0
void threadHandler(char driveLtr)
{
    /* Lock the mutex so we don't try and access the database at the same time */
    gMutex.lock();

    bool authorized = false;

    /* Lock the USB drive */
    UsbOps ops;
    ops.lockUSB(driveLtr);

    /* Query authorized devices */
    Sql sql;
    if (!sql.dbConnect((char*)Paths::getDatabasePath().c_str(), false))
    {
        ErrorLog::logErrorToFile("*CRITICAL*", "Unable to open authorized drives database!");
        ops.ejectUSB();
        gMutex.unlock();
        return;
    }
    std::vector<authedDrive> drvs;
    sql.queryAuthedDrives(&drvs);

    /* Get the serial key of the device */
    UsbKey usbKey;
    UsbKeyhdr hdr;

    ops.unlockUSB();
    usbKey.getUsbKeyHdr(&hdr, driveLtr);
    ops.lockUSB(driveLtr);

    /* Check if the serial exists in the database */
    for (std::vector<authedDrive>::iterator it = drvs.begin(); it != drvs.end(); it++)
    {
        std::cout << it->serial.c_str() << " " << hdr.serialkey.c_str() << std::endl;
        if (it->serial.compare(hdr.serialkey) == 0)
        {
            authorized = true;
            break;
        }
    }

    ops.unlockUSB();

    /* Log media insertion event */

    AccessLog *log = new AccessLog();
    log->createLogStruct(&log->logUSBStruct, driveLtr, (char*)hdr.serialkey.c_str());
    log->logUSBStruct.accepted = authorized;


    /* Get config settings, check if remote SQL is enabled */
    ConfigParser configParser((char*)Paths::getConfigPath().c_str());
    if (configParser.getValue("SQLenabled") == "1")
    {
        /* SQL enabled = true */
        log->logUsbDrive(log->logUSBStruct, true);
    }
    else
        log->logUsbDrive(log->logUSBStruct, false);

    /* If not authorized, eject it! */
    if (!authorized)
    {
        ops.lockUSB(driveLtr);
        ops.ejectUSB();
    }

    /* Check for viruses here... */

    gMutex.unlock();
    delete log;
}
Esempio n. 15
0
bool DisplayError(const Sql& sql, const char *msg) {
	return DisplayError(sql.GetSession(), msg);
}
Esempio n. 16
0
void DlgSqlExport::Run(Sql& cursor, String command, String tablename)
{
	Title(Nvl(tablename, t_("SQL query")) + t_(" export"));
	object_name <<= tablename;
	if(!cursor.Execute(command)) {
		Exclamation(NFormat(t_("Error executing [* \1%s\1]: \1%s"), command, cursor.GetLastError()));
		return;
	}
	for(int i = 0; i < cursor.GetColumns(); i++) {
		const SqlColumnInfo& sci = cursor.GetColumnInfo(i);
		String type;
		switch(sci.valuetype) {
			case BOOL_V:
			case INT_V: type = t_("integer"); break;
			case DOUBLE_V: type = t_("real number"); break;
			case STRING_V:
			case WSTRING_V: type = t_("string"); break;
			case DATE_V: type = t_("date"); break;
			case TIME_V: type = t_("date/time"); break;
			case /*ORA_BLOB_V*/-1: type = t_("BLOB"); break;
			case /*ORA_CLOB_V*/-2: type = t_("CLOB"); break;
			default: type = FormatInt(sci.valuetype); break;
		}
		columns.Add(sci.name, sci.valuetype, sci.width, 1);
	}
	static String cfg;
	LoadFromString(*this, cfg);
	SyncUI();
	while(TopWindow::Run() == IDOK)
		try {
			String out_table = ~object_name;
			String delim;
			switch((int)~delimiters) {
				case DELIM_TAB: delim = "\t"; break;
				case DELIM_SEMICOLON: delim = ";"; break;
			}
			Vector<int> out;
			String colstr;
			String title;
			for(int i = 0; i < columns.GetCount(); i++)
				if(columns.Get(i, 3)) {
					out.Add(i);
					String cname = cursor.GetColumnInfo(i).name;
					colstr << (i ? ", " : "") << cname;
					if(i) title << delim;
					title << cname;
				}
			if(out.IsEmpty()) {
				throw Exc(t_("No columns selected!"));
				continue;
			}
			String rowbegin, rowend;
			int fmt = ~format;
			FileSel fsel;
			String ext;
			switch(fmt) {
				case FMT_TEXT: {
					rowend = "";
					ext = ".txt";
					fsel.Type(t_("Text files (*.txt)"), "*.txt");
					break;
				}
				case FMT_SQL: {
					if(identity_insert)
						rowbegin << "set identity_insert " << out_table << " on ";
					rowbegin << "insert into " << out_table << "(" << colstr << ") values (";
					rowend = ");";
					ext = ".sql";
					fsel.Type(t_("SQL scripts (*.sql)"), "*.sql");
					break;
				}
			}
			fsel.AllFilesType().DefaultExt(ext.Mid(1));
			if(!IsNull(recent_file))
				fsel <<= ForceExt(recent_file, ext);
			if(!fsel.ExecuteSaveAs(t_("Save export as")))
				continue;
			recent_file = ~fsel;
			FileOut fo;
			if(!fo.Open(recent_file)) {
				Exclamation(NFormat(t_("Error creating file [* \1%s\1]."), recent_file));
				continue;
			}
			if(fmt == FMT_TEXT)
				fo.PutLine(title);
			Progress progress(t_("Exporting row %d"));
			while(cursor.Fetch()) {
				String script = rowbegin;
				for(int i = 0; i < out.GetCount(); i++) {
					Value v = cursor[out[i]];
					switch(fmt) {
						case FMT_TEXT: {
							if(i)
								script.Cat(delim);
							if(IsString(v) && quote) {
								String s = v;
								script << '\"';
								for(const char *p = s, *e = s.End(); p < e; p++)
									if(*p == '\"')
										script.Cat("\"\"");
									else
										script.Cat(*p);
								script << '\"';
							}
							else
								script << StdFormat(v);
							break;
						}
						case FMT_SQL: {
							if(i) script.Cat(", ");
//							script << SqlCompile(SQLD_ORACLE, SqlFormat(v));
							break;
						}
					}
				}
				script << rowend;
				fo.PutLine(script);
/*
				if(autocommit && --left <= 0) {
					fo.PutLine("commit;");
					left = autocommit;
				}
*/
				if(progress.StepCanceled()) {
					Exclamation(t_("Export aborted!"));
					return;
				}
			}
			fo.Close();
			if(fo.IsError())
				throw Exc(NFormat(t_("Error writing file %s."), recent_file));
			break;
		}
		catch(Exc e) {
			ShowExc(e);
		}

	cfg = StoreAsString(*this);
}
Esempio n. 17
0
void SqlConnection::Attach(Sql& sql, SqlConnection *con)
{
	sql.Attach(con); // Duck tape to fix Oci8
}
Esempio n. 18
0
SqlExc::SqlExc(const Sql& sql) : Exc(sql_error) {
	SetSessionError(sql.GetSession());
}
Esempio n. 19
0
bool ShowError(Sql& sql, const char *msg) {
	return ShowError(sql.GetSession(), msg);
}
Esempio n. 20
0
String ForceInsertRowid(const SqlInsert& insert, Sql& cursor)
{
    return ForceInsertRowid(SqlStatement(insert).Get(cursor.GetDialect()), cursor);
}
Esempio n. 21
0
bool SqlStatement::Execute(Sql& cursor) const {
    ASSERT(text.GetCount());
    return cursor.Execute(*this);
}
Esempio n. 22
0
void ForceDelete(SqlId table, SqlId key, const Value& keyval, Sql& cursor)
{
    if(!cursor.Delete(table, key, keyval))
        throw SqlExc(cursor);
}
Esempio n. 23
0
void ForceExecute(const String& s, Sql& cursor)
{
    if(!cursor.Execute(s))
        throw SqlExc(cursor);
}
Esempio n. 24
0
	void Field(const char *name, Ref f) {
		sql->GetColumn(SqlId(name), f);
	}