Esempio n. 1
0
static int
fetch_login(
        struct uldb_mysql_state *state,
        int user_id,
        struct userlist_user **p_user)
{
  unsigned char cmdbuf[1024];
  int cmdlen;
  struct userlist_user *u = 0;
  struct common_mysql_iface *mi = state->mi;
  struct common_mysql_state *md = state->md;

  *p_user = 0;
  if (user_id <= 0) goto fail;

  if (state->cache_queries && (u = get_login_from_pool(state, user_id))) {
    *p_user = u;
    return 1;
  }

  snprintf(cmdbuf, sizeof(cmdbuf),
           "SELECT * FROM %slogins WHERE user_id = %d ;",
           md->table_prefix, user_id);
  cmdlen = strlen(cmdbuf);
  if (mi->simple_query(md, cmdbuf, cmdlen) < 0) goto fail;
  md->field_count = mysql_field_count(md->conn);
  if (md->field_count != LOGIN_WIDTH)
    db_error_field_count_fail(md, LOGIN_WIDTH);
  if (!(md->res = mysql_store_result(md->conn)))
    db_error_fail(md);
  md->row_count = mysql_num_rows(md->res);
  if (md->row_count < 0) db_error_fail(md);
  if (!md->row_count) {
    mi->free_res(md);
    return 0;
  }
  if (md->row_count > 1) goto fail;
  if (!(md->row = mysql_fetch_row(md->res)))
    db_error_no_data_fail(md);
  md->lengths = mysql_fetch_lengths(md->res);
  if (!(u = allocate_login_on_pool(state, user_id))) goto fail;
  if (parse_login(state, md->field_count, md->row, md->lengths, u) < 0)
    goto fail;
  mi->free_res(md);
  *p_user = u;
  return 1;

 fail:
  mi->free_res(md);
  remove_login_from_pool(state, user_id);
  return -1;
}
Esempio n. 2
0
static int
do_create(struct rldb_mysql_state *state)
{
  struct common_mysql_iface *mi = state->mi;
  struct common_mysql_state *md = state->md;

  mi->free_res(md);
  if (mi->simple_fquery(md, create_runheaders_query, md->table_prefix) < 0)
    db_error_fail(md);
  if (mi->simple_fquery(md, create_runs_query, md->table_prefix) < 0)
    db_error_fail(md);
  if (mi->simple_fquery(md,
                        "INSERT INTO %sconfig VALUES ('run_version', '7') ;",
                        md->table_prefix) < 0)
    db_error_fail(md);
  return 0;

 fail:
  return -1;
}
Esempio n. 3
0
static int
do_open(struct rldb_mysql_state *state)
{
  int run_version = 0;
  struct common_mysql_iface *mi = state->mi;
  struct common_mysql_state *md = state->md;

  if (mi->connect(md) < 0) return -1;

  if (mi->fquery(md, 1, "SELECT config_val FROM %sconfig WHERE config_key = 'run_version' ;", md->table_prefix) < 0) {
    err("probably the database is not created, please, create it");
    return -1;
  }
  if (md->row_count > 1) {
    err("run_version key is not unique");
    return -1;
  }
  if (!md->row_count) return do_create(state);
  if (mi->next_row(state->md) < 0) db_error_fail(md);
  if (!md->row[0] || mi->parse_int(md, md->row[0], &run_version) < 0)
    db_error_inv_value_fail(md, "config_val");
  mi->free_res(md);
  if (run_version == 1) {
    if (mi->simple_fquery(md, "ALTER TABLE %sruns ADD COLUMN is_marked TINYINT NOT NULL DEFAULT 0 AFTER last_change_nsec",
                          md->table_prefix) < 0)
      return -1;
    if (mi->simple_fquery(md, "ALTER TABLE %sruns ADD COLUMN is_saved TINYINT NOT NULL DEFAULT 0 AFTER is_marked",
                          md->table_prefix) < 0)
      return -1;
    if (mi->simple_fquery(md, "ALTER TABLE %sruns ADD COLUMN saved_status INT NOT NULL DEFAULT 0 AFTER is_saved",
                          md->table_prefix) < 0)
      return -1;
    if (mi->simple_fquery(md, "ALTER TABLE %sruns ADD COLUMN saved_score INT NOT NULL DEFAULT 0 AFTER saved_status",
                          md->table_prefix) < 0)
      return -1;
    if (mi->simple_fquery(md, "ALTER TABLE %sruns ADD COLUMN saved_test INT NOT NULL DEFAULT 0 AFTER saved_score",
                          md->table_prefix) < 0)
      return -1;
    if (mi->simple_fquery(md, "UPDATE %sconfig SET config_val = '2' WHERE config_key = 'run_version' ;", md->table_prefix) < 0)
      return -1;
    run_version = 2;
  }
  if (run_version == 2) {
    if (mi->simple_fquery(md, "ALTER TABLE %sruns ADD COLUMN run_uuid CHAR(40) DEFAULT NULL AFTER hash", md->table_prefix) < 0)
      return -1;
    if (mi->simple_fquery(md, "UPDATE %sconfig SET config_val = '3' WHERE config_key = 'run_version' ;", md->table_prefix) < 0)
      return -1;
    run_version = 3;
  }
  if (run_version == 3) {
    if (mi->simple_fquery(md, "ALTER TABLE %sruns ADD COLUMN passed_mode TINYINT NOT NULL DEFAULT 0 AFTER saved_test", md->table_prefix) < 0)
      return -1;
    if (mi->simple_fquery(md, "UPDATE %sconfig SET config_val = '4' WHERE config_key = 'run_version' ;", md->table_prefix) < 0)
      return -1;
    run_version = 4;
  }
  if (run_version == 4) {
    if (mi->simple_fquery(md, "ALTER TABLE %sruns ADD COLUMN eoln_type TINYINT NOT NULL DEFAULT 0 AFTER passed_mode", md->table_prefix) < 0)
      return -1;
    if (mi->simple_fquery(md, "UPDATE %sconfig SET config_val = '5' WHERE config_key = 'run_version' ;", md->table_prefix) < 0)
      return -1;
    run_version = 5;
  }
  if (run_version == 5) {
    if (mi->simple_fquery(md, "ALTER TABLE %sruns ADD COLUMN store_flags TINYINT NOT NULL DEFAULT 0 AFTER eoln_type", md->table_prefix) < 0)
      return -1;
    if (mi->simple_fquery(md, "UPDATE %sconfig SET config_val = '6' WHERE config_key = 'run_version' ;", md->table_prefix) < 0)
      return -1;
    run_version = 6;
  }
  if (run_version == 6) {
    if (mi->simple_fquery(md, "ALTER TABLE %sruns ADD COLUMN token_flags TINYINT NOT NULL DEFAULT 0 AFTER store_flags", md->table_prefix) < 0)
      return -1;
    if (mi->simple_fquery(md, "ALTER TABLE %sruns ADD COLUMN token_count TINYINT NOT NULL DEFAULT 0 AFTER token_flags", md->table_prefix) < 0)
      return -1;
    if (mi->simple_fquery(md, "UPDATE %sconfig SET config_val = '7' WHERE config_key = 'run_version' ;", md->table_prefix) < 0)
      return -1;
    run_version = 7;
  }
  if (run_version != 7) {
    err("run_version == %d is not supported", run_version);
    return -1;
  }
  return 0;

 fail:
  mi->free_res(md);
  return -1;
}