unsigned long long exec_insert_stmt(MYSQL_STMT **stmt, MYSQL_BIND *parameters) {
	
	int state;
	int connection;
	MYSQL_STMT *local;
	unsigned long long result;
	
	connection = db_get_conn();
	if (connection < 0) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("Unable to get an available connection for the query.");
		#endif
		return 0;
	}
		
	local = *(stmt + connection);
	if (local == NULL) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("Unable to get a valid prepared statement pointer.");
		#endif
		db_free_conn(connection);
		return 0;
	}
	
	if (reset_stmt(local) != 1) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("Unable to get a reset the prepared statement.");
		#endif
		db_free_conn(connection);
		return 0;
	}
	
	if (bind_param_stmt(local, parameters) != 1) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("Unable to bind the parameters to the prepared statement.");
		#endif
		db_free_conn(connection);
		return 0;
	}
	
	state = mysql_stmt_execute_d(local);
	
	if (state != 0) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("An error occurred while executing a prepared statement. %s", mysql_stmt_error_d(local));
		#endif
		db_free_conn(connection);
		return 0;
	}
	
	result = mysql_stmt_insert_id_d(local);
	#ifdef DEBUG_FRAMEWORK
	if (result == 0) {
		lavalog("We did not get back a valid insert id. %s", mysql_stmt_error_d(local));
	}
	#endif
	
	db_free_conn(connection);
	return result;
}
sql_result_t * exec_query_res_stmt(MYSQL_STMT **stmt, MYSQL_BIND *parameters) {
	
	int connection;
	MYSQL_STMT *local;
	sql_result_t *result;
	
	connection = db_get_conn();
	if (connection < 0) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("Unable to get an available connection for the query.");
		#endif
		return NULL;
	}
	
	local = *(stmt + connection);
	if (local == NULL) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("Unable to get a valid prepared statement pointer.");
		#endif
		db_free_conn(connection);
		return NULL;
	}
	
	if (reset_stmt(local) != 1) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("Unable to get a reset the prepared statement.");
		#endif
		db_free_conn(connection);
		return NULL;
	}
	
	if (bind_param_stmt(local, parameters) != 1) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("Unable to bind the parameters to the prepared statement.");
		#endif
		db_free_conn(connection);
		return NULL;
	}
	
	if (mysql_stmt_execute_d(local) != 0) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("An error occurred while executing a prepared statement. %s", mysql_stmt_error_d(local));
		#endif
		db_free_conn(connection);
		return NULL;
	}
	
	result = store_db_result(local);
	if (result == NULL) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("Unable to store the database result.");
		#endif
		db_free_conn(connection);
		return NULL;
	}
	
	db_free_conn(connection);
	return result;
}
Beispiel #3
0
static int
delete_plugin(const char *user,
            int argc, const char **argv, int *intv,
            void (*msg)(void *opaque, const char *fmt, ...),
            void *opaque)
{
  db_stmt_t *s;
  db_conn_t *c = db_get_conn();
  if(c == NULL) {
    msg(opaque, "Database connection problems");
    return 0;
  }

  s = db_stmt_get(c, "DELETE FROM version WHERE plugin_id=? AND version=?");
  if(db_stmt_exec(s, "ss", argv[0], argv[1])) {
    msg(opaque, "Database query problems");
    return 0;
  }
  if(db_stmt_affected_rows(s))
    trace(LOG_NOTICE, "User '%s' deleted %s %s", user, argv[0], argv[1]);
  msg(opaque, "OK, %d rows deleted", db_stmt_affected_rows(s));
  return 0;
}
Beispiel #4
0
static int
show_plugin(const char *user,
            int argc, const char **argv, int *intv,
            void (*msg)(void *opaque, const char *fmt, ...),
            void *opaque)
{
  db_stmt_t *s;
  char tstr[64];
  struct tm tm;
  db_conn_t *c = db_get_conn();
  if(c == NULL) {
    msg(opaque, "Database connection problems");
    return 0;
  }

  s = db_stmt_get(c, SQL_GET_PLUGIN_BY_ID);
  if(db_stmt_exec(s, "s", argv[0])) {
    msg(opaque, "Database query problems");
    return 0;
  }

  time_t created;
  int userid;
  char betasecret[128];
  char downloadurl[1024];

  int r = db_stream_row(0, s,
                        DB_RESULT_TIME(created),
                        DB_RESULT_INT(userid),
                        DB_RESULT_STRING(betasecret),
                        DB_RESULT_STRING(downloadurl));

  db_stmt_reset(s);

  if(r < 0) {
    msg(opaque, "Database query problems");
    return 0;
  }

  if(r) {
    msg(opaque, "No such plugin");
    return 0;
  }

  msg(opaque, "'%s' owned by user #%d", argv[0], userid);
  gmtime_r(&created, &tm);
  strftime(tstr, sizeof(tstr), "%d-%b-%Y %T UTC", &tm);
  msg(opaque, "  Created %s   Betasecret: %s", tstr, betasecret);
  msg(opaque, "  Download URL: %s", downloadurl);


  msg(opaque, "");
  msg(opaque, "Versions:");

  s = db_stmt_get(c, SQL_GET_PLUGIN_VERSIONS);

  if(db_stmt_exec(s, "s", argv[0])) {
    msg(opaque, "Database query problems");
    return 0;
  }

  while(1) {

    char version[64];
    char type[64];
    char author[128];
    char showtime_min_version[64];
    int downloads;
    char title[256];
    char category[64];
    char synopsis[256];
    char description[4096];
    char homepage[256];
    char pkg_digest[64];
    char icon_digest[64];
    int published;
    char comment[4096];
    char status[8];

    r = db_stream_row(0, s,
                      DB_RESULT_TIME(created),
                      DB_RESULT_STRING(version),
                      DB_RESULT_STRING(type),
                      DB_RESULT_STRING(author),
                      DB_RESULT_INT(downloads),
                      DB_RESULT_STRING(showtime_min_version),
                      DB_RESULT_STRING(title),
                      DB_RESULT_STRING(category),
                      DB_RESULT_STRING(synopsis),
                      DB_RESULT_STRING(description),
                      DB_RESULT_STRING(homepage),
                      DB_RESULT_STRING(pkg_digest),
                      DB_RESULT_STRING(icon_digest),
                      DB_RESULT_INT(published),
                      DB_RESULT_STRING(comment),
                      DB_RESULT_STRING(status)
                      );
    if(r)
      break;

    gmtime_r(&created, &tm);
    strftime(tstr, sizeof(tstr), "%d-%b-%Y %T UTC", &tm);

    msg(opaque, "%-9s %-25s %s    %-9s    %-9s", version, title, tstr,
        published ? "Published" : "",
        *status == 'a' ? "Approved" :
        *status == 'r' ? "Rejected" :
        *status == 'p' ? "Pending" : "Unknown");
    msg(opaque, "          '%s' - %s", *category ? category : "<no category>", synopsis);
    msg(opaque, "          '%s' requierd Showtime ver. %s", type, showtime_min_version);
    msg(opaque, "          %d downloads", downloads);

    msg(opaque, "");
  }

  return 0;
}
unsigned long long exec_query_rows_stmt(MYSQL_STMT **stmt, MYSQL_BIND *parameters) {

	int connection;
	MYSQL_STMT *local;
	unsigned long long rows;
	
	connection = db_get_conn();
	if (connection < 0) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("Unable to get an available connection for the query.");
		#endif
		return 0;
	}
	
	local = *(stmt + connection);
	if (local == NULL) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("Unable to get a valid prepared statement pointer.");
		#endif
		db_free_conn(connection);
		return 0;
	}
	
	if (reset_stmt(local) != 1) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("Unable to get a reset the prepared statement.");
		#endif
		db_free_conn(connection);
		return 0;
	}
	
	if (bind_param_stmt(local, parameters) != 1) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("Unable to bind the parameters to the prepared statement.");
		#endif
		db_free_conn(connection);
		return 0;
	}
	
	if (mysql_stmt_execute_d(local) != 0) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("An error occurred while executing a prepared statement. %s", mysql_stmt_error_d(local));
		#endif
		db_free_conn(connection);
		return 0;
	}
	
	if (mysql_stmt_store_result_d(local) != 0) {
		#ifdef DEBUG_FRAMEWORK
		lavalog("An error occurred while attempting to buffer a prepared statement result set. %s", mysql_stmt_error_d(local));
		#endif
		db_free_conn(connection);
		return 0;
	}
	
	// Store the number of rows.
	rows = mysql_stmt_num_rows_d(local);
	
	#ifdef DEBUG_FRAMEWORK
	if (mysql_stmt_free_result_d(local) != 0) {
		lavalog("An error occurred while attempting to free a prepared statment result buffer. %s", mysql_stmt_error_d(local));
	}
	#else
	mysql_stmt_free_result_d(local);
	#endif
	
	db_free_conn(connection);
	
	return rows;
}