Пример #1
0
GError *
meta0_backend_reset(struct meta0_backend_s *m0, gboolean flag_local)
{
	EXTRA_ASSERT(m0 != NULL);

	GError *err = NULL;
	struct sqlx_sqlite3_s *sq3 = NULL;
	struct sqlx_repctx_s *repctx = NULL;

	err = _open_and_lock(m0, flag_local ? M0V2_OPENBASE_LOCAL : M0V2_OPENBASE_MASTERONLY, &sq3);
	if (err) return err;

	if (!(err = sqlx_transaction_begin (sq3, &repctx))) {
		gint rc;
		sqlite3_stmt *stmt = NULL;
		sqlite3_prepare_debug (rc, sq3->db, "DELETE FROM meta1", -1, &stmt, NULL);
		if (rc != SQLITE_OK && rc != SQLITE_DONE)
			err = SQLITE_GERROR(sq3->db, rc);
		else {
			sqlite3_step_debug_until_end (rc, stmt);
			if (rc != SQLITE_OK && rc != SQLITE_DONE)
				err = SQLITE_GERROR(sq3->db, rc);
			else
				sqlx_transaction_notify_huge_changes (repctx);
			sqlite3_finalize_debug (rc, stmt);
		}
		err = sqlx_transaction_end (repctx, err);
	}

	_unlock_and_close (sq3);
	return NULL;
}
Пример #2
0
static GError *
__save_service(struct sqlx_sqlite3_s *sq3, struct oio_url_s *url,
               struct meta1_service_url_s *m1url, gboolean force)
{
    gint rc;
    GError *err = NULL;
    sqlite3_stmt *stmt = NULL;

    sqlite3_prepare_debug(rc, sq3->db, force
                          ? "INSERT OR REPLACE INTO services (cid,srvtype,seq,url,args) VALUES (?,?,?,?,?)"
                          : "INSERT            INTO services (cid,srvtype,seq,url,args) VALUES (?,?,?,?,?)",
                          -1, &stmt, NULL);
    if (rc != SQLITE_OK)
        return M1_SQLITE_GERROR(sq3->db, rc);

    (void) sqlite3_bind_blob(stmt, 1, oio_url_get_id(url), oio_url_get_id_size(url), NULL);
    (void) sqlite3_bind_text(stmt, 2, m1url->srvtype, -1, NULL);
    (void) sqlite3_bind_int(stmt,  3, m1url->seq);
    (void) sqlite3_bind_text(stmt, 4, m1url->host, -1, NULL);
    (void) sqlite3_bind_text(stmt, 5, m1url->args, -1, NULL);
    sqlite3_step_debug_until_end(rc, stmt);
    if (rc != SQLITE_DONE && rc != SQLITE_OK)
        err = M1_SQLITE_GERROR(sq3->db, rc);
    sqlite3_finalize_debug(rc, stmt);

    return err;
}
Пример #3
0
static GError *
__configure_service(struct sqlx_sqlite3_s *sq3, struct oio_url_s *url,
                    struct meta1_service_url_s *m1url)
{
    static const char *sql = "UPDATE services SET args = ? "
                             "WHERE cid = ? AND seq = ? AND srvtype = ?";
    gint rc;
    GError *err = NULL;
    sqlite3_stmt *stmt = NULL;

    sqlite3_prepare_debug(rc, sq3->db, sql, -1, &stmt, NULL);
    if (rc != SQLITE_OK)
        err = M1_SQLITE_GERROR(sq3->db, rc);
    else {
        (void) sqlite3_bind_text(stmt, 1, m1url->args, -1, NULL);
        (void) sqlite3_bind_blob(stmt, 2, oio_url_get_id(url), oio_url_get_id_size(url), NULL);
        (void) sqlite3_bind_int64(stmt, 3, m1url->seq);
        (void) sqlite3_bind_text(stmt, 4, m1url->srvtype, -1, NULL);
        sqlite3_step_debug_until_end (rc, stmt);
        if (rc != SQLITE_OK && rc != SQLITE_DONE)
            err = M1_SQLITE_GERROR(sq3->db, rc);
        sqlite3_finalize_debug(rc, stmt);
        if (!err && !sqlite3_changes(sq3->db))
            err = NEWERROR(CODE_SRV_NOLINK, "Service not found");
    }

    return err;
}
Пример #4
0
static GError *
__del_container_srvtype_properties(struct sqlx_sqlite3_s *sq3,
                                   struct oio_url_s *url, const char *srvtype)
{
    GError *err = NULL;
    gint rc;
    sqlite3_stmt *stmt = NULL;

    sqlite3_prepare_debug(rc, sq3->db,
                          "DELETE FROM properties WHERE cid = ? AND name LIKE ?", -1, &stmt, NULL);
    if (rc != SQLITE_OK && rc != SQLITE_DONE)
        err = M1_SQLITE_GERROR(sq3->db, rc);
    else {
        int len = strlen(srvtype)+10;
        gchar *tmp_name = g_malloc0(sizeof(gchar)*len);
        if (tmp_name) {
            g_snprintf(tmp_name, len, "%s.%%", srvtype);
            (void) sqlite3_bind_blob(stmt, 1, oio_url_get_id(url), oio_url_get_id_size(url), NULL);
            (void) sqlite3_bind_text(stmt, 2, tmp_name, -1, NULL);
            sqlite3_step_debug_until_end (rc, stmt);
            if (rc != SQLITE_OK && rc != SQLITE_DONE)
                err = M1_SQLITE_GERROR(sq3->db, rc);
            sqlite3_finalize_debug(rc, stmt);
            g_free (tmp_name);
        }
    }

    return err;
}
static GError *
__replace_property(struct sqlx_sqlite3_s *sq3, struct oio_url_s *url,
		const gchar *name, const gchar *value)
{
	GError *err = NULL;
	gint rc;
	sqlite3_stmt *stmt = NULL;

	EXTRA_ASSERT(name != NULL && *name != '\0');
	EXTRA_ASSERT(value != NULL && *value != '\0');
	GRID_TRACE("%s(n=%s,v=%s)", __FUNCTION__, name, value);

	sqlite3_prepare_debug(rc, sq3->db,
			"REPLACE INTO properties (name,value,cid) VALUES (?,?,?)", -1, &stmt, NULL);
	if (rc != SQLITE_OK && rc != SQLITE_DONE)
		err = M1_SQLITE_GERROR(sq3->db, rc);
	else {
		(void) sqlite3_bind_text(stmt, 1, name, -1, NULL);
		(void) sqlite3_bind_text(stmt, 2, value, -1, NULL);
		(void) sqlite3_bind_blob(stmt, 3, oio_url_get_id(url), oio_url_get_id_size(url), NULL);
		sqlite3_step_debug_until_end (rc, stmt);
		if (rc != SQLITE_DONE && rc != SQLITE_OK)
			err = M1_SQLITE_GERROR(sq3->db, rc);
		sqlite3_finalize_debug(rc, stmt);
	}

	return err;
}
static GError *
__del_container_properties(struct sqlx_sqlite3_s *sq3, struct oio_url_s *url,
		gchar **names)
{
	GError *err = NULL;
	gchar **p_name;

	if (!names || !*names)
		__exec_cid(sq3->db, "DELETE FROM properties WHERE cid = ?", oio_url_get_id(url));
	else {
		for (p_name=names; !err && p_name && *p_name ;p_name++) {
			sqlite3_stmt *stmt = NULL;
			gint rc;

			sqlite3_prepare_debug(rc, sq3->db, "DELETE FROM properties WHERE cid = ? AND name = ?", -1, &stmt, NULL);
			if (rc != SQLITE_OK && rc != SQLITE_DONE)
				err = M1_SQLITE_GERROR(sq3->db, rc);
			else {
				(void) sqlite3_bind_blob(stmt, 1, oio_url_get_id(url), oio_url_get_id_size(url), NULL);
				(void) sqlite3_bind_text(stmt, 2, *p_name, strlen(*p_name), NULL);
				sqlite3_step_debug_until_end (rc, stmt);
				if (rc != SQLITE_DONE)
					GRID_WARN("SQLite error rc=%d", rc);
				sqlite3_finalize_debug(rc, stmt);
			}
		}
	}

	return err;
}
Пример #7
0
static GError *
__delete_service(struct sqlx_sqlite3_s *sq3, struct oio_url_s *url,
                 const char *srvtype)
{
    gint rc;
    GError *err = NULL;
    sqlite3_stmt *stmt = NULL;

    sqlite3_prepare_debug(rc, sq3->db,
                          "DELETE FROM services WHERE cid = ? AND srvtype = ?",
                          -1, &stmt, NULL);
    if (rc != SQLITE_OK)
        return M1_SQLITE_GERROR(sq3->db, rc);

    (void) sqlite3_bind_blob(stmt, 1, oio_url_get_id(url), oio_url_get_id_size(url), NULL);
    (void) sqlite3_bind_text(stmt, 2, srvtype, -1, NULL);
    sqlite3_step_debug_until_end (rc, stmt);
    if (rc != SQLITE_DONE && rc != SQLITE_OK)
        err = M1_SQLITE_GERROR(sq3->db, rc);
    sqlite3_finalize_debug(rc, stmt);

    return err;
}
Пример #8
0
static GError *
__del_container_one_service(struct sqlx_sqlite3_s *sq3,
                            struct oio_url_s *url, const char *srvtype, gint64 seq)
{
    static const char *sql = "DELETE FROM services WHERE cid = ? AND srvtype = ? AND seq = ?";
    sqlite3_stmt *stmt = NULL;
    GError *err = NULL;
    int rc;

    sqlite3_prepare_debug(rc, sq3->db, sql, -1, &stmt, NULL);
    if (rc != SQLITE_OK)
        err = M1_SQLITE_GERROR(sq3->db, rc);
    else {
        (void) sqlite3_bind_blob(stmt, 1, oio_url_get_id(url), oio_url_get_id_size(url), NULL);
        (void) sqlite3_bind_text(stmt, 2, srvtype, -1, NULL);
        (void) sqlite3_bind_int64(stmt, 3, seq);
        sqlite3_step_debug_until_end (rc, stmt);
        if (rc != SQLITE_OK && rc != SQLITE_DONE)
            err = M1_SQLITE_GERROR(sq3->db, rc);
        sqlite3_finalize_debug(rc, stmt);
    }

    return err;
}