Exemplo n.º 1
0
void CMUSHclientApp::SaveGlobalsToDatabase (void)
  {

  // close and re-open database, in case they somehow lost connection to it

  if (db)
    sqlite3_close(db);

  int db_rc = sqlite3_open(m_PreferencesDatabaseName.c_str (), &db);

  if( db_rc )
    {
    ::AfxMessageBox ((LPCTSTR) CFormat ("Can't open global preferences database at: %s"
         "\r\n(Error was: \"%s\")"
         "\r\nCheck you have write-access to that file.", 
        m_PreferencesDatabaseName.c_str (), 
        sqlite3_errmsg(db)));
    sqlite3_close(db);
    db = NULL;
		return;
    }

  db_rc = db_execute ("BEGIN TRANSACTION", true);

  int i;

  for (i = 0; GlobalOptionsTable [i].pName; i++)
    {
    const char * p = (const char *) this +  GlobalOptionsTable [i].iOffset;
    const int Value = * (const long *) p;


    db_rc = db_execute ((LPCTSTR) CFormat ("UPDATE prefs SET value = %i WHERE name = '%s'",
                        Value, GlobalOptionsTable [i].pName), true);

    if (db_rc != SQLITE_OK)
      break;

    };

  if (db_rc == SQLITE_OK)
    for (i = 0; AlphaGlobalOptionsTable [i].pName; i++)
      {
      const char * p = (const char *) this +  AlphaGlobalOptionsTable [i].iOffset;
      CString strValue = * (CString *) p;
    
      strValue.Replace ("'", "''");  // fix up quotes

      db_rc = db_execute ((LPCTSTR) CFormat ("UPDATE prefs SET value = '%s' WHERE name = '%s'",
                          (LPCTSTR) strValue, AlphaGlobalOptionsTable [i].pName), true);

      if (db_rc != SQLITE_OK)
        break;

      };

  db_execute ("COMMIT", true);

  } // end of CMUSHclientApp::SaveGlobalsToDatabase
Exemplo n.º 2
0
static void *worker_bee(void *pArg){
  const char *zFilename = (char*)pArg;
  char *azErr;
  int i, cnt;
  int t = atoi(zFilename);
  char **az;
  sqlite *db;

  pthread_mutex_lock(&lock);
  thread_cnt++;
  pthread_mutex_unlock(&lock);
  printf("%s: START\n", zFilename);
  fflush(stdout);
  for(cnt=0; cnt<10; cnt++){
    db = sqlite_open(&zFilename[2], 0, &azErr);
    if( db==0 ){
      fprintf(stdout,"%s: can't open\n", zFilename);
      Exit(1);
    }
    sqlite_busy_handler(db, db_is_locked, zFilename);
    db_execute(db, zFilename, "CREATE TABLE t%d(a,b,c);", t);
    for(i=1; i<=100; i++){
      db_execute(db, zFilename, "INSERT INTO t%d VALUES(%d,%d,%d);",
         t, i, i*2, i*i);
    }
    az = db_query(db, zFilename, "SELECT count(*) FROM t%d", t);
    db_check(zFilename, "tX size", az, "100", 0);  
    az = db_query(db, zFilename, "SELECT avg(b) FROM t%d", t);
    db_check(zFilename, "tX avg", az, "101", 0);  
    db_execute(db, zFilename, "DELETE FROM t%d WHERE a>50", t);
    az = db_query(db, zFilename, "SELECT avg(b) FROM t%d", t);
    db_check(zFilename, "tX avg2", az, "51", 0);
    for(i=1; i<=50; i++){
      char z1[30], z2[30];
      az = db_query(db, zFilename, "SELECT b, c FROM t%d WHERE a=%d", t, i);
      sprintf(z1, "%d", i*2);
      sprintf(z2, "%d", i*i);
      db_check(zFilename, "readback", az, z1, z2, 0);
    }
    db_execute(db, zFilename, "DROP TABLE t%d;", t);
    sqlite_close(db);
  }
  printf("%s: END\n", zFilename);
  /* unlink(zFilename); */
  fflush(stdout);
  pthread_mutex_lock(&lock);
  thread_cnt--;
  if( thread_cnt<=0 ){
    pthread_cond_signal(&sig);
  }
  pthread_mutex_unlock(&lock);
  return 0;
}
Exemplo n.º 3
0
// copy the registry prefs into the SQLite database into table 'prefs'
int CMUSHclientApp::PopulateDatabase (void)
  {

  SetRegistryKey ("Gammon Software Solutions");

  int i;
  int db_rc = SQLITE_OK;

  for (i = 0; GlobalOptionsTable [i].pName; i++)
    {
    const char * p = (const char *) this +  GlobalOptionsTable [i].iOffset;
    const int Value = GetProfileInt ("Global prefs",  
                                GlobalOptionsTable [i].pName, 
                                GlobalOptionsTable [i].iDefault);

    db_rc = db_execute ((LPCTSTR) CFormat ("INSERT INTO prefs (name, value) VALUES ('%s', %i)",
                        GlobalOptionsTable [i].pName, Value), true);

    if (db_rc != SQLITE_OK)
      return db_rc;
    };

  for (i = 0; AlphaGlobalOptionsTable [i].pName; i++)
    {
    const char * p = (const char *) this +  AlphaGlobalOptionsTable [i].iOffset;

    // fix up the fixed-pitch font
    if (strcmp (AlphaGlobalOptionsTable [i].pName, "DefaultInputFont") == 0 ||
        strcmp (AlphaGlobalOptionsTable [i].pName, "DefaultOutputFont") == 0 ||
        strcmp (AlphaGlobalOptionsTable [i].pName, "FixedPitchFont") == 0)
       AlphaGlobalOptionsTable [i].sDefault = (LPCTSTR) m_strFixedPitchFont;
    
    CString strValue = GetProfileString ("Global prefs",  
                                AlphaGlobalOptionsTable [i].pName, 
                                AlphaGlobalOptionsTable [i].sDefault);

    strValue.Replace ("'", "''");  // fix up quotes

    db_rc = db_execute ((LPCTSTR) CFormat ("INSERT INTO prefs (name, value) VALUES ('%s', '%s')",
                        AlphaGlobalOptionsTable [i].pName, (LPCTSTR) strValue), true);

    if (db_rc != SQLITE_OK)
      return db_rc;

    };

   return SQLITE_OK;

  }  // end of CMUSHclientApp::PopulateDatabase 
Exemplo n.º 4
0
static void *download_entry(void *arg)
{
	d_task_t *d_task = (d_task_t *)arg;
	file_info_t file;
	char sql_buf[1024];
	char real_url[MAX_URL_LEN];
	char tmp_file_name_fmt[PATH_MAX];


	int ret, i;
	char *ptr;

	if (d_task->request_file_info(d_task->url, &file, real_url) == 0)
	{
		int i = 0;
		int parts = 0, per_part_len = 0, last_part_len = 0;
		if (MIN_PART_SIZE * MAX_PART_NUMBER >= file.length)
		{
			per_part_len = MIN_PART_SIZE;
			parts = file.length / MIN_PART_SIZE;
			last_part_len = file.length - parts * MIN_PART_SIZE;
			if (last_part_len > 0)
				parts++;
		}
		else
		{
			parts = MAX_PART_NUMBER;
			per_part_len = file.length / parts;
			last_part_len = file.length - parts * per_part_len;
			if (last_part_len > 0)
				last_part_len += per_part_len;
		}
		DEBUG_OUTPUT("parts is %d\n", parts);

		// create unique downloading file
		if (_create_unique_file(d_task, &file) != 0)
		{
			fprintf(stderr, "error when create download file\n");
			return ERR_RET_VAL;
		}
		// create unique tmp file dir
		strcpy(tmp_file_name_fmt, file.filename);
		ptr = tmp_file_name_fmt + strlen(tmp_file_name_fmt);
		i = 0;
		while (1)
		{
			ret = mkdir(tmp_file_name_fmt, S_IRWXU);
			if (ret != 0 && errno == EEXIST)
				sprintf(ptr, "(%d)", ++i);
			else if (ret != 0)
				return ERR_RET_VAL;
			else
				break;
		}
		snprintf(d_task->tmp_file_name_fmt, PATH_MAX, "%s/%s", tmp_file_name_fmt, TMP_FILE_SUFFIX_FMT); // filename.ext(n)/._tmp_%d

		// save this task to db file
		snprintf(sql_buf, sizeof(sql_buf), SQL_INSERT_VALUES, file.filename, 
				real_url, d_task->file_saved_path, file.length, d_task->tmp_file_name_fmt, parts,
				per_part_len, last_part_len);

		db_execute(d_task->dm->db_key, sql_buf, NULL);

		dispatch_part_download(d_task, &file, per_part_len, last_part_len, parts);
	}

}
Exemplo n.º 5
0
static void *dispatch_part_download(d_task_t *d_task, file_info_t *file, 
		int per_part_len, int last_part_len, int parts)
{
	int i;
	int offset = 0;
	// allocate on stack
	task_desc descs[MAX_PART_NUMBER];
	part_info_t parts_info[MAX_PART_NUMBER];
	char tmp_files_name[MAX_PART_NUMBER][PATH_MAX];
	int part_lens[MAX_PART_NUMBER];
	int part_downloaded_len = 0;
	struct stat sb;
	int ret;
	char sql_buf[256];

	for (i = 0; i < parts; i++)
	{
		descs[i].arg = &parts_info[i];
		descs[i].fire_task_over = NULL;
		parts_info[i].beg_pos = offset;
		if (i == parts - 1 && last_part_len > 0)
			offset += last_part_len;
		else
			offset += per_part_len;
		parts_info[i].end_pos = offset - 1;
		parts_info[i].d_task  = d_task;
		parts_info[i].file    = file;
		parts_info[i].id      = i;
		part_lens[i]          = parts_info[i].end_pos - parts_info[i].beg_pos + 1;

		snprintf(tmp_files_name[i], PATH_MAX, d_task->tmp_file_name_fmt, i);
		ret = stat(tmp_files_name[i], &sb);
		if (ret != 0 && errno != ENOENT)
		{
			perror("stat file size failed:");
			return;
		}
		if (ret == 0)
		{
			parts_info[i].beg_pos += sb.st_size;
			d_task->len_downloaded += sb.st_size;
		}
		if (parts_info[i].end_pos - parts_info[i].beg_pos + 1 > 0)
			easy_thread_pool_add_task(d_task->dm->tp, download_part_entry, &descs[i]);
	}

	pthread_mutex_lock(d_task->part_mutex);
	while (d_task->parts_exit < parts)
		pthread_cond_wait(d_task->part_cond, d_task->part_mutex);
	pthread_mutex_unlock(d_task->part_mutex);

	if (d_task->len_downloaded < file->length)
	{
		for (i = 0; i < parts; i++)
		{
			if (!parts_info[i].finished)
				d_task->request_part_file(&parts_info[i]);
		}
	}

	if (d_task->len_downloaded < file->length)
		fprintf(stderr, "download failed\n");
	else // save downloaded file
	{
		char file_full_path[PATH_MAX];
		char *p;
		snprintf(file_full_path, PATH_MAX, "%s/%s", d_task->file_saved_path, file->filename);
		if(merge_files(file_full_path, file->length, tmp_files_name, part_lens, parts) < 0)
		{
			fprintf(stderr, "merge files failed\n");
			unlink(file_full_path);
		}
		if(p = strrchr(tmp_files_name[0], '/'))
		{
			*++p = 0;
			rmdir(tmp_files_name[0]);
		}
		// delete file record from db
		snprintf(sql_buf, sizeof(sql_buf), SQL_DEL_FILE, file->filename, d_task->file_saved_path);
		db_execute(d_task->dm->db_key, sql_buf, NULL);
	}
}
Exemplo n.º 6
0
int sb_lua_db_execute(lua_State *L)
{
  sb_lua_ctxt_t    *ctxt;
  sb_lua_db_stmt_t *stmt;
  db_result_set_t  *ptr;
  sb_lua_db_rs_t   *rs;
  unsigned int     i;
  char             needs_rebind = 0;
  db_bind_t        *binds;
  size_t           length;
  const char       *str;
  sb_lua_bind_t    *param;

  ctxt = sb_lua_get_context(L);

  CHECK_CONNECTION(L, ctxt);

  stmt = (sb_lua_db_stmt_t *)luaL_checkudata(L, 1, "sysbench.stmt");
  luaL_argcheck(L, stmt != NULL, 1, "prepared statement expected");

  /* Get params table */
  lua_rawgeti(L, LUA_REGISTRYINDEX, stmt->param_ref);
  if (!lua_isnil(L, -1) && !lua_istable(L, -1))
    luaL_error(L, "table expected");

  for (i = 0; i < stmt->nparams; lua_pop(L, 1), i++)
  {
    param = stmt->params + i;
    lua_pushnumber(L, param->id);
    lua_gettable(L, -2);
    if (lua_isnil(L, -1))
    {
      param->is_null = 1;
      continue;
    }
    param->is_null = 0;
    switch (param->type)
    {
      case DB_TYPE_INT:
        *((int *)param->buf) = luaL_checknumber(L, -1);
        break;
      case DB_TYPE_CHAR:
        str = luaL_checkstring(L, -1);
        length = lua_objlen(L, -1);
        if (length > param->buflen)
        {
          param->buf = realloc(param->buf, length);
          needs_rebind = 1;
        }
        strncpy(param->buf, str, length);
        param->buflen = length;
        break;
      default:
        luaL_error(L, "Unsupported variable type: %s",
                   lua_typename(L, lua_type(L, -1)));
    }
  }
  
  /* Rebind if needed */
  if (needs_rebind)
  {
    binds = (db_bind_t *)calloc(stmt->nparams, sizeof(db_bind_t));
    if (binds == NULL)
      luaL_error(L, "Memory allocation failure");
    
    for (i = 0; i < stmt->nparams; i++)
    {
      param = stmt->params + i;
      binds[i].type = param->type;
      binds[i].is_null = &param->is_null;
      if (*binds[i].is_null != 0)
        continue;
      switch (param->type)
      {
        case DB_TYPE_INT:
          binds[i].buffer = param->buf;
          break;
        case DB_TYPE_CHAR:
          binds[i].buffer = param->buf;
          binds[i].data_len = &stmt->params[i].buflen;
          binds[i].is_null = 0;
          break;
        default:
          luaL_error(L, "Unsupported variable type");
      }
    }
    
    if (db_bind_param(stmt->ptr, binds, stmt->nparams))
      luaL_error(L, "db_bind_param() failed");
    free(binds);
  }

  ptr = db_execute(stmt->ptr);
  if (ptr == NULL)
  {
    stmt->rs = NULL;
    lua_pushnumber(L, ctxt->con->db_errno);
    lua_error(L);
  }
  else
  {
    rs = (sb_lua_db_rs_t *)lua_newuserdata(L, sizeof(sb_lua_db_rs_t));
    rs->ptr = ptr;
    luaL_getmetatable(L, "sysbench.rs");
    lua_setmetatable(L, -2);
    stmt->rs = rs;
  }

  return 1;
}
Exemplo n.º 7
0
int
main (int argc, char *argv[])
{
  float disk_compat_level = 0.0f;
  char *prog_name;
  const char *qp1 = "select db_user, password.password from db_user";
  DB_VALUE user_val, password_val;
  MOP user_class;
  MOP user;
  char *db_name;
  char *password;
  char *decoded_str;
  char *encoded_str;
  int retval, error;
  DB_QUERY_RESULT *query_result;
  DB_QUERY_ERROR query_error;
  char out_buf[128];

  if (argc < 2)
    {
      printf ("usage : %s databasename\n", argv[0]);
      return 1;
    }

  prog_name = argv[0];
  db_name = argv[1];

  AU_DISABLE_PASSWORDS ();
  db_set_client_type (DB_CLIENT_TYPE_ADMIN_UTILITY);

  db_login ("dba", NULL);
  db_restart (prog_name, 0, db_name);

  error = db_execute (qp1, &query_result, &query_error);
  if (error > 0)
    {
      error = db_query_first_tuple (query_result);
      while (error == NO_ERROR)
	{
	  retval = db_query_get_tuple_value (query_result, 0, &user_val);
	  if (retval != NO_ERROR)
	    {
	      printf ("%s\n", db_error_string (1));
	      return 1;
	    }

	  retval = db_query_get_tuple_value (query_result, 1, &password_val);
	  if (retval != NO_ERROR)
	    {
	      printf ("%s\n", db_error_string (1));
	      return 1;
	    }

	  if (DB_IS_NULL (&user_val) || DB_IS_NULL (&password_val))
	    {
	      error = db_query_next_tuple (query_result);
	      continue;
	    }

	  user = db_get_object (&user_val);
	  password = db_get_string (&password_val);

	  retval = io_relseek_old (password, 1, out_buf);
	  if (retval != NO_ERROR)
	    {
	      printf ("%s\n", db_error_string (1));
	      return 1;
	    }

	  retval = au_set_password (user, out_buf);
	  if (retval != NO_ERROR)
	    {
	      printf ("%s\n", db_error_string (1));
	      return 1;
	    }

	  error = db_query_next_tuple (query_result);
	}
      db_query_end (query_result);
    }

  db_commit_transaction ();
  db_shutdown ();

  return 0;
}