コード例 #1
0
ファイル: player.c プロジェクト: ryjen/muddled
Character *load_player_by_name(Connection *conn, const char *name)
{
    char buf[400];
    sql_stmt *stmt;
    db_begin_transaction();
    int len = sprintf(buf,
                      "select * from character natural join player where name='%s'",
                      escape_sql_str(name));

    if (sql_query(buf, len, &stmt) != SQL_OK)
    {
        log_data("could not prepare sql statement");
        return 0;
    }
    Character *ch = new_char();
    ch->pc = new_player(conn);

    if (sql_step(stmt) != SQL_DONE)
    {
        load_player_columns(conn->account, ch, stmt);
    }

    if (sql_finalize(stmt) != SQL_OK)
    {
        log_data("unable to finalize statement");
    }
    load_char_objs(ch);
    load_char_affects(ch);
    db_end_transaction();
    return ch;

}
コード例 #2
0
ファイル: character.c プロジェクト: ryjen/muddled
int load_char_affects(Character *ch)
{
    char buf[400];
    sql_stmt *stmt;
    int total = 0;
    int len = sprintf(buf,
                      "select * from char_affect where characterId=%"
                      PRId64,
                      ch->id);

    if (sql_query(buf, len, &stmt) != SQL_OK)
    {
        log_data("could not prepare statement");
        return 0;
    }

    while (sql_step(stmt) != SQL_DONE)
    {
        int affId = sql_col_int(stmt, "affectId");
        Affect *aff = load_affect_by_id(affId);

        if (aff != 0)
        {
            aff->duration = sql_col_int(stmt, "duration");
            affect_to_char(ch, aff);
        }
        total++;
    }

    if (sql_finalize(stmt) != SQL_OK)
    {
        log_data("could not finalize statement");
    }
    return total;
}
コード例 #3
0
ファイル: player.c プロジェクト: ryjen/muddled
Character *load_player_by_id(Connection *conn, identifier_t charId)
{
    char buf[400];
    sql_stmt *stmt;
    db_begin_transaction();
    int len = sprintf(buf,
                      "select * from character join player on playerId=characterId where characterId=%"
                      PRId64,
                      charId);

    if (sql_query(buf, len, &stmt) != SQL_OK)
    {
        log_data("could not prepare sql statement");
        return 0;
    }
    Character *ch = new_char();
    ch->pc = new_player(conn);

    if (sql_step(stmt) != SQL_DONE)
    {
        load_player_columns(conn->account, ch, stmt);
    }

    if (sql_finalize(stmt) != SQL_OK)
    {
        log_data("unable to finalize statement");
    }
    load_char_objs(ch);
    load_char_affects(ch);
    db_end_transaction();
    return ch;

}
コード例 #4
0
ファイル: prepare.c プロジェクト: tarantool/tarantool
static int
sqlLockAndPrepare(sql * db,		/* Database handle. */
		      const char *zSql,		/* UTF-8 encoded SQL statement. */
		      int nBytes,		/* Length of zSql in bytes. */
		      int saveSqlFlag,		/* True to copy SQL text into the sql_stmt */
		      Vdbe * pOld,		/* VM being reprepared */
		      sql_stmt ** ppStmt,	/* OUT: A pointer to the prepared statement */
		      const char **pzTail)	/* OUT: End of parsed string */
{
	int rc;

	*ppStmt = 0;
	if (!sqlSafetyCheckOk(db) || zSql == 0) {
		return SQL_MISUSE;
	}
	rc = sqlPrepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt,
			    pzTail);
	if (rc == SQL_SCHEMA) {
		sql_finalize(*ppStmt);
		rc = sqlPrepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt,
				    pzTail);
	}
	assert(rc == SQL_OK || *ppStmt == 0);
	return rc;
}
コード例 #5
0
ファイル: nonplayer.c プロジェクト: ryjen/muddled
int load_npcs(Area *area)
{
    char buf[400];
    sql_stmt *stmt;
    int total = 0;
    int len = sprintf(buf,
                      "select * from character natural join nonplayer where areaId=%"
                      PRId64,
                      area->id);

    if (sql_query(buf, len, &stmt) != SQL_OK)
    {
        log_data("could not prepare statement");
        return 0;
    }

    while (sql_step(stmt) != SQL_DONE)
    {
        Character *ch = new_char();
        ch->npc = new_npc();
        ch->npc->area = area;
        load_npc_columns(ch, stmt);
        LINK(area->npcs, ch, next_in_area);
        LINK(first_character, ch, next);
        total++;
    }

    if (sql_finalize(stmt) != SQL_OK)
    {
        log_data("could not finalize statement");
    }
    return total;
}
コード例 #6
0
ファイル: nonplayer.c プロジェクト: ryjen/muddled
Character *load_npc(identifier_t id)
{
    char buf[400];
    sql_stmt *stmt;
    Character *ch = 0;
    int len = sprintf(buf,
                      "select * from character join nonplayer on nonplayerId=characterId where charId=%"
                      PRId64,
                      id);

    if (sql_query(buf, len, &stmt) != SQL_OK)
    {
        log_data("could not prepare statement");
        return 0;
    }

    if (sql_step(stmt) != SQL_DONE)
    {
        ch = new_char();
        ch->npc = new_npc();
        load_npc_columns(ch, stmt);
        LINK(ch->npc->area->npcs, ch, next_in_area);
        LINK(first_character, ch, next);
    }

    if (sql_finalize(stmt) != SQL_OK)
    {
        log_data("could not finalize statement");
    }
    return ch;
}
コード例 #7
0
ファイル: dbintf.cpp プロジェクト: tweimer/miranda-ng
CDbxSQLite::~CDbxSQLite()
{
	sql_close(m_sqlite);

	for (int i = 0; i < sql_prepare_len; i++)
		sql_finalize(*sql_prepare_stmt[i]);
	mir_free(sql_prepare_text);
	mir_free(sql_prepare_stmt);
	DestroyWindow(m_hAPCWindow);
}
コード例 #8
0
ファイル: utils.c プロジェクト: raoergsls/miranda
static time_t utils_private_setting_get_time(const char *setting, time_t defval) {
    sqlite3_stmt *stmt;
    time_t rc = defval;
    
    if (setting==NULL) 
        return rc;
    sql_prepare(g_sqlite, "SELECT val FROM dbrw_core where setting = ?;", &stmt);
    sqlite3_bind_text(stmt, 1, setting, -1, SQLITE_STATIC);
    if (sql_step(stmt)==SQLITE_ROW) {
        rc = (time_t)sqlite3_column_int(stmt, 0);
    }
    sql_finalize(stmt);
    return rc;
}
コード例 #9
0
ファイル: utils.c プロジェクト: raoergsls/miranda
static int utils_private_setting_set_time(const char *setting, time_t val) {
    sqlite3_stmt *stmt;
    int rc = 0;
    
    if (setting==NULL)
        return rc;
    sql_prepare(g_sqlite, "REPLACE INTO dbrw_core VALUES(?,?);", &stmt);
    sqlite3_bind_text(stmt, 1, setting, -1, SQLITE_STATIC);
    sqlite3_bind_int(stmt, 2, val);
    if (sql_step(stmt)==SQLITE_DONE) {
        rc = 1;
    }
    sql_finalize(stmt);
    return rc;
}
コード例 #10
0
ファイル: character.c プロジェクト: ryjen/muddled
int load_char_objs(Character *ch)
{
    char buf[400];
    sql_stmt *stmt;
    int total = 0;
    int len = sprintf(buf,
                      "select * from char_objects where carriedById=%"
                      PRId64,
                      ch->id);

    if (sql_query(buf, len, &stmt) != SQL_OK)
    {
        log_data("could not prepare statement");
        return 0;
    }

    while (sql_step(stmt) != SQL_DONE)
    {
        Object *obj = new_object();
        obj->carriedBy = ch;
        load_obj_columns(obj, stmt);
        LINK(obj->area->objects, obj, next_in_area);
        LINK(first_object, obj, next);

        if (!obj->inObj)
        {
            LINK(ch->carrying, obj, next_content);

            if (obj->wearLoc != WEAR_NONE)
            {
                equip_char(ch, obj, obj->wearLoc);
            }
        }

        else
        {
            LINK(obj->inObj->contains, obj, next_content);
        }
        total++;
    }

    if (sql_finalize(stmt) != SQL_OK)
    {
        log_data("could not finalize statement");
    }
    return total;
}
コード例 #11
0
ファイル: character.c プロジェクト: ryjen/muddled
int save_char_affects(Character *ch)
{
    char buf[400];
    sql_stmt *stmt;
    int len;
    Affect *aff;

    for (aff = ch->affects; aff; aff = aff->next)
    {
        len =
            sprintf(buf,
                    "select charAffectId from char_affect where characterId=%"
                    PRId64 " and affectId=%" PRId64, ch->id, aff->id);

        if (sql_query(buf, len, &stmt) != SQL_OK)
        {
            log_data("could not prepare statement");
            return 0;
        }
        bool update = sql_step(stmt) != SQL_DONE;
        sql_int64 id = sql_column_int64(stmt, 1);

        if (sql_finalize(stmt) != SQL_OK)
        {
            log_data("unable to finalize sql statement");
            return 0;
        }

        if (!save_affect(aff)) {
            return 0;
        }
        field_map char_affect[] =
        {
            {"characterId", &ch->id, SQL_INT}
            ,
            {"affectId", &aff->id, SQL_INT}
            ,
            {0}
        };

        if (!update)
        {

            if (sql_insert_query(char_affect, "char_affect") !=
                    SQL_OK)
            {
                log_data("could not insert affect");
                return 0;
            }
        }

        else
        {

            if (sql_update_query(char_affect, "char_affect", id) !=
                    SQL_OK)
            {
                log_data("could not update character");
                return 0;
            }
        }
    }
    // try and cleanup old objects
    len =
        sprintf(buf,
                "select charAffectId from char_affect where characterId=%"
                PRId64, ch->id);

    if (sql_query(buf, len, &stmt) != SQL_OK)
    {
        log_data("could not prepare statement");
        return 0;
    }

    while (sql_step(stmt) != SQL_DONE)
    {
        identifier_t id = sql_column_int64(stmt, 1);

        for (aff = ch->affects; aff; aff = aff->next)
        {

            if (aff->id == id) {
                break;
            }
        }

        if (!aff)
        {
            sprintf(buf,
                    "delete from char_affect where characterId=%"
                    PRId64 " and affectId=%" PRId64, ch->id, id);

            if (sql_exec(buf) != SQL_OK)
            {
                log_data("could not delete character affect %"
                         PRId64, id);
                return 0;
            }
        }
    }

    if (sql_finalize(stmt) != SQL_OK)
    {
        log_data("could not finalize statement");
        return 0;
    }
    return 1;
}
コード例 #12
0
ファイル: character.c プロジェクト: ryjen/muddled
int save_char_objs(Character *ch)
{
    char buf[400];
    sql_stmt *stmt;
    int len;
    Object *obj;

    for (obj = ch->carrying; obj; obj = obj->next_content)
    {
        len =
            sprintf(buf,
                    "select objectId from char_objects where carriedById=%"
                    PRId64 " and objectId=%" PRId64, ch->id, obj->id);

        if (sql_query(buf, len, &stmt) != SQL_OK)
        {
            log_data("could not prepare statement");
            return 0;
        }
        bool update = sql_step(stmt) != SQL_DONE;

        if (sql_finalize(stmt) != SQL_OK)
        {
            log_data("unable to finalize sql statement");
            return 0;
        }

        if (!update)
        {
            obj->id = 0;
        }

        if (!save_object(obj)) {
            return 0;
        }
    }
    // try and cleanup old objects
    len =
        sprintf(buf,
                "select * from char_objects where carriedById=%" PRId64,
                ch->id);

    if (sql_query(buf, len, &stmt) != SQL_OK)
    {
        log_data("could not prepare statement");
        return 0;
    }

    while (sql_step(stmt) != SQL_DONE)
    {
        obj = ch->carrying;
        identifier_t id = sql_column_int64(stmt, 0);

        while (obj)
        {

            if (obj->id == id) {
                break;
            }
            obj = obj->next;
        }

        if (!obj)
        {
            sprintf(buf,
                    "delete from object where carriedById=%" PRId64
                    " and objectId=%" PRId64, ch->id, id);

            if (sql_exec(buf) != SQL_OK)
            {
                log_data("could not delete character object %"
                         PRId64, id);
                return 0;
            }
        }
    }

    if (sql_finalize(stmt) != SQL_OK)
    {
        log_data("could not finalize statement");
        return 0;
    }
    return 1;
}