Esempio n. 1
0
int oph_odb_create_hp(ophidiadb * oDB, const char *name, const char *parent)
{
	if (!oDB || !name || !parent)
		return OPH_ODB_NULL_PARAM;

	if (oph_odb_check_connection_to_ophidiadb(oDB))
		return OPH_ODB_MYSQL_ERROR;

	char insertQuery[MYSQL_BUFLEN];

	int n = snprintf(insertQuery, MYSQL_BUFLEN, OPHIDIADB_CREATE_PARTITION, name);
	if (n >= MYSQL_BUFLEN)
		return OPH_ODB_STR_BUFF_OVERFLOW;

	if (mysql_query(oDB->conn, insertQuery))
		return OPH_ODB_MYSQL_ERROR;

	if (oph_odb_check_connection_to_ophidiadb(oDB))
		return OPH_ODB_MYSQL_ERROR;

	n = snprintf(insertQuery, MYSQL_BUFLEN, OPHIDIADB_FILL_PARTITION, parent);
	if (n >= MYSQL_BUFLEN)
		return OPH_ODB_STR_BUFF_OVERFLOW;

	if (mysql_query(oDB->conn, insertQuery))
		return OPH_ODB_MYSQL_ERROR;

	return OPH_ODB_SUCCESS;
}
Esempio n. 2
0
int _oph_odb_update_folder_table(ophidiadb * oDB, char *folder_name, int *id_folder, pthread_mutex_t * flag)
{
	if (!oDB || !folder_name || !id_folder) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Null input parameter\n");
		return OPH_ODB_NULL_PARAM;
	}

	if (oph_odb_check_connection_to_ophidiadb(oDB)) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Unable to reconnect to OphidiaDB.\n");
		return OPH_ODB_MYSQL_ERROR;
	}

	char insertQuery[MYSQL_BUFLEN];
	int n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_OPHIDIADB_SESSION_FOLDER, folder_name);

	if (n >= MYSQL_BUFLEN) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Size of query exceed query limit.\n");
		return OPH_ODB_STR_BUFF_OVERFLOW;
	}

	if (mysql_query(oDB->conn, insertQuery)) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "MySQL query error: %s\n", mysql_error(oDB->conn));
		return OPH_ODB_MYSQL_ERROR;
	}

	if (!(*id_folder = mysql_insert_id(oDB->conn))) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Unable to find last inserted folder id\n");
		return OPH_ODB_TOO_MANY_ROWS;
	}

	return OPH_ODB_SUCCESS;
}
Esempio n. 3
0
int _oph_odb_retrieve_job_id(ophidiadb * oDB, char *sessionid, char *markerid, int *id_job, pthread_mutex_t * flag)
{
	if (!oDB || !sessionid || !markerid || !id_job) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Null input parameter\n");
		return OPH_ODB_NULL_PARAM;
	}
	*id_job = 0;

	if (oph_odb_check_connection_to_ophidiadb(oDB)) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Unable to reconnect to OphidiaDB.\n");
		return OPH_ODB_MYSQL_ERROR;
	}

	char query[MYSQL_BUFLEN];

	int n = snprintf(query, MYSQL_BUFLEN, MYSQL_RETRIEVE_JOB_ID, sessionid, markerid);
	if (n >= MYSQL_BUFLEN) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Size of query exceed query limit.\n");
		return OPH_ODB_STR_BUFF_OVERFLOW;
	}
	pmesg_safe(flag, LOG_DEBUG, __FILE__, __LINE__, "Find job with markerid '%s'\n", markerid);

	if (mysql_query(oDB->conn, query)) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "MySQL query error: %s\n", mysql_error(oDB->conn));
		return OPH_ODB_MYSQL_ERROR;
	}

	MYSQL_RES *res;
	MYSQL_ROW row;
	res = mysql_store_result(oDB->conn);

	if (mysql_num_rows(res) < 1) {
		pmesg_safe(flag, LOG_DEBUG, __FILE__, __LINE__, "No row found by query\n");
		mysql_free_result(res);
		return OPH_ODB_NO_ROW_FOUND;
	}

	if (mysql_num_rows(res) > 1) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "More than one row found by query\n");
		mysql_free_result(res);
		return OPH_ODB_TOO_MANY_ROWS;
	}

	if (mysql_field_count(oDB->conn) != 1) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Not enough fields found by query\n");
		mysql_free_result(res);
		return OPH_ODB_TOO_MANY_ROWS;
	}

	if ((row = mysql_fetch_row(res)) != NULL)
		*id_job = (int) strtol(row[0], NULL, 10);

	mysql_free_result(res);

	return OPH_ODB_SUCCESS;
}
int oph_odb_user_retrieve_user_id(ophidiadb *oDB, char* username, int *id_user)
{
	if(!oDB || !username || !id_user){
		pmesg(LOG_ERROR, __FILE__, __LINE__, "Null input parameter\n");
		return OPH_ODB_NULL_PARAM;
	}

	if( oph_odb_check_connection_to_ophidiadb(oDB)){
		pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to reconnect to OphidiaDB.\n");
		return OPH_ODB_MYSQL_ERROR;
	}

	char query[MYSQL_BUFLEN];

	int n = snprintf(query, MYSQL_BUFLEN, MYSQL_QUERY_USER_RETRIEVE_USER_ID, username);
	if(n >= MYSQL_BUFLEN){
		pmesg(LOG_ERROR, __FILE__, __LINE__, "Size of query exceed query limit.\n");
		return OPH_ODB_STR_BUFF_OVERFLOW;
	}

	if (mysql_query(oDB->conn, query)){
		pmesg(LOG_ERROR, __FILE__, __LINE__, "MySQL query error: %s\n", mysql_error(oDB->conn));
		return OPH_ODB_MYSQL_ERROR;
	}

	MYSQL_RES *res;
	MYSQL_ROW row;
	res = mysql_store_result(oDB->conn);

	if (mysql_num_rows(res) < 1)
	{
		pmesg(LOG_DEBUG, __FILE__, __LINE__, "No row found by query\n");
		mysql_free_result(res);
		return OPH_ODB_NO_ROW_FOUND;
	}

	if (mysql_num_rows(res) > 1)
	{
		pmesg(LOG_ERROR, __FILE__, __LINE__, "More than one row found by query\n");
		mysql_free_result(res);
		return OPH_ODB_TOO_MANY_ROWS;
	}

	if (mysql_field_count(oDB->conn) != 1){
		pmesg(LOG_ERROR, __FILE__, __LINE__, "Not enough fields found by query\n");
		mysql_free_result(res);
		return OPH_ODB_TOO_MANY_ROWS;
	}

	if ((row = mysql_fetch_row(res)) != NULL) *id_user=(int)strtol(row[0], NULL, 10);

	mysql_free_result(res);

	return OPH_ODB_SUCCESS;
}
Esempio n. 5
0
int _oph_odb_update_job_table(ophidiadb * oDB, char *markerid, char *task_string, char *status, int id_user, int id_session, int nchildren, int *id_job, char *parentid, char *workflowid,
			      pthread_mutex_t * flag)
{
	if (!oDB || !markerid || !task_string || !status || !id_job) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Null input parameter\n");
		return OPH_ODB_NULL_PARAM;
	}

	if (oph_odb_check_connection_to_ophidiadb(oDB)) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Unable to reconnect to OphidiaDB.\n");
		return OPH_ODB_MYSQL_ERROR;
	}

	char insertQuery[MYSQL_BUFLEN];
	int n, i, j;

	char new_query[OPERATION_QUERY_SIZE];
	j = 0;
	for (i = 0; i < OPERATION_QUERY_SIZE; i++) {
		if (!task_string[i])
			break;
		if (task_string[i] == '\'')
			new_query[j++] = '\\';
		new_query[j] = task_string[i];
		j++;
		if (j >= OPERATION_QUERY_SIZE - 1)
			break;
	}
	new_query[j] = 0;

	if (parentid)
		n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_OPHIDIADB_JOB_CHILD, id_user, id_session, markerid, status, new_query, parentid, workflowid);
	else if (nchildren >= 0)
		n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_OPHIDIADB_JOB_PARENT, id_user, id_session, markerid, status, new_query, nchildren, workflowid);
	else
		n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_OPHIDIADB_JOB, id_user, id_session, markerid, status, new_query);
	pmesg_safe(flag, LOG_DEBUG, __FILE__, __LINE__, "Execute query: %s\n", insertQuery);

	if (n >= MYSQL_BUFLEN) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Size of query exceed query limit.\n");
		return OPH_ODB_STR_BUFF_OVERFLOW;
	}

	if (mysql_query(oDB->conn, insertQuery)) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "MySQL query error: %s\n", mysql_error(oDB->conn));
		return OPH_ODB_MYSQL_ERROR;
	}

	if (!(*id_job = mysql_insert_id(oDB->conn))) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Unable to find last inserted job id\n");
		return OPH_ODB_TOO_MANY_ROWS;
	}

	return OPH_ODB_SUCCESS;
}
Esempio n. 6
0
int oph_odb_retrieve_ids(ophidiadb * oDB, const char *command, int **id, char ***ctime, int *nn)
{
	if (!oDB || !command || !id || !nn) {
		return OPH_ODB_NULL_PARAM;
	}
	*nn = 0;
	*id = NULL;

	if (oph_odb_check_connection_to_ophidiadb(oDB))
		return OPH_ODB_MYSQL_ERROR;

	char query[MYSQL_BUFLEN];

	int n = snprintf(query, MYSQL_BUFLEN, "%s", command);
	if (n >= MYSQL_BUFLEN)
		return OPH_ODB_STR_BUFF_OVERFLOW;

	if (mysql_select_db(oDB->conn, oDB->name))
		return OPH_ODB_MYSQL_ERROR;

	if (mysql_query(oDB->conn, query))
		return OPH_ODB_MYSQL_ERROR;

	MYSQL_RES *res;
	MYSQL_ROW row;
	res = mysql_store_result(oDB->conn);

	if (mysql_field_count(oDB->conn) != 2) {
		mysql_free_result(res);
		return OPH_ODB_TOO_MANY_ROWS;
	}

	*nn = mysql_num_rows(res);
	if (!(*nn)) {
		mysql_free_result(res);
		return OPH_ODB_NO_ROW_FOUND;
	}

	*id = (int *) malloc((*nn) * sizeof(int));
	if (ctime)
		*ctime = (char **) malloc((*nn) * sizeof(char *));

	int j = 0;
	while ((row = mysql_fetch_row(res)) != NULL) {
		(*id)[j] = (int) strtol(row[0], NULL, 10);
		if (ctime)
			(*ctime)[j] = row[1] ? strdup(row[1]) : NULL;
		j++;
	}
	mysql_free_result(res);

	return OPH_ODB_SUCCESS;
}
int oph_odb_fs_is_unique_hidden(int folder_id, char *name, ophidiadb * oDB, int *answer)
{
	if (!name || !folder_id || !answer) {
		return OPH_ODB_NULL_PARAM;
	}
	if (oph_odb_check_connection_to_ophidiadb(oDB)) {
		return OPH_ODB_MYSQL_ERROR;
	}
	*answer = 0;

	return OPH_ODB_SUCCESS;
}
Esempio n. 8
0
int _oph_odb_update_session_table(ophidiadb * oDB, char *sessionid, int id_user, int *id_session, pthread_mutex_t * flag)
{
	if (!oDB || !sessionid || !id_session) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Null input parameter\n");
		return OPH_ODB_NULL_PARAM;
	}

	if (oph_odb_check_connection_to_ophidiadb(oDB)) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Unable to reconnect to OphidiaDB.\n");
		return OPH_ODB_MYSQL_ERROR;
	}

	char session_code[OPH_MAX_STRING_SIZE];
	if (oph_get_session_code(sessionid, session_code)) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Unable to extract session code.\n");
		return OPH_ODB_MYSQL_ERROR;
	}
	int id_folder;
	if (_oph_odb_update_folder_table(oDB, session_code, &id_folder, flag)) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Unable to create folder.\n");
		return OPH_ODB_MYSQL_ERROR;
	}

	char insertQuery[MYSQL_BUFLEN];
	int n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_OPHIDIADB_SESSION, id_user, sessionid, id_folder);

	if (n >= MYSQL_BUFLEN) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Size of query exceed query limit.\n");
		return OPH_ODB_STR_BUFF_OVERFLOW;
	}

	if (mysql_set_server_option(oDB->conn, MYSQL_OPTION_MULTI_STATEMENTS_ON)) {
		pmesg(LOG_ERROR, __FILE__, __LINE__, "MySQL query error: %s\n", mysql_error(oDB->conn));
		return OPH_ODB_MYSQL_ERROR;
	}

	if (mysql_query(oDB->conn, insertQuery)) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "MySQL query error: %s\n", mysql_error(oDB->conn));
		return OPH_ODB_MYSQL_ERROR;
	}

	if (!(*id_session = mysql_insert_id(oDB->conn))) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Unable to find last inserted session id\n");
		return OPH_ODB_TOO_MANY_ROWS;
	}

	return OPH_ODB_SUCCESS;
}
Esempio n. 9
0
int oph_odb_insert_user2(ophidiadb * oDB, const char *username, const char *password, const char *name, const char *surname, const char *email, const char *country)
{
	if (!oDB || !username)
		return OPH_ODB_NULL_PARAM;

	if (oph_odb_check_connection_to_ophidiadb(oDB))
		return OPH_ODB_MYSQL_ERROR;

	char insertQuery[MYSQL_BUFLEN], tmp[MYSQL_BUFLEN];
	int n;
	if (country) {
		int idcountry = 0;

		n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_SELECT_COUNTRY, country);
		if (n >= MYSQL_BUFLEN)
			return OPH_ODB_STR_BUFF_OVERFLOW;

		if (mysql_query(oDB->conn, insertQuery))
			return OPH_ODB_MYSQL_ERROR;

		MYSQL_RES *res;
		MYSQL_ROW row;
		res = mysql_store_result(oDB->conn);

		if ((mysql_field_count(oDB->conn) != 1) || (mysql_num_rows(res) != 1)) {
			mysql_free_result(res);
			return OPH_ODB_TOO_MANY_ROWS;
		}

		while ((row = mysql_fetch_row(res)) != NULL)
			idcountry = (row[0] ? (int) strtol(row[0], NULL, 10) : 0);
		mysql_free_result(res);

		snprintf(tmp, MYSQL_BUFLEN, "%d", idcountry);
	} else
		snprintf(tmp, MYSQL_BUFLEN, "NULL");

	n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_INSERT_USER2, username, password, name ? "'" : "", name ? name : "NULL", name ? "'" : "", surname ? "'" : "", surname ? surname : "NULL",
		     surname ? "'" : "", email ? "'" : "", email ? email : "NULL", email ? "'" : "", tmp);
	if (n >= MYSQL_BUFLEN)
		return OPH_ODB_STR_BUFF_OVERFLOW;

	if (mysql_query(oDB->conn, insertQuery))
		return OPH_ODB_MYSQL_ERROR;

	return OPH_ODB_SUCCESS;
}
Esempio n. 10
0
int oph_odb_delete_user(ophidiadb * oDB, const char *username)
{
	if (!oDB || !username)
		return OPH_ODB_NULL_PARAM;

	if (oph_odb_check_connection_to_ophidiadb(oDB))
		return OPH_ODB_MYSQL_ERROR;

	char insertQuery[MYSQL_BUFLEN];
	int n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_DELETE_USER, username);
	if (n >= MYSQL_BUFLEN)
		return OPH_ODB_STR_BUFF_OVERFLOW;

	if (mysql_query(oDB->conn, insertQuery))
		return OPH_ODB_MYSQL_ERROR;

	return OPH_ODB_SUCCESS;
}
Esempio n. 11
0
int oph_odb_destroy_hp(ophidiadb * oDB, const char *name)
{
	if (!oDB || !name)
		return OPH_ODB_NULL_PARAM;

	if (oph_odb_check_connection_to_ophidiadb(oDB))
		return OPH_ODB_MYSQL_ERROR;

	char updateQuery[MYSQL_BUFLEN];

	int n = snprintf(updateQuery, MYSQL_BUFLEN, OPHIDIADB_DESTROY_PARTITION, name);
	if (n >= MYSQL_BUFLEN)
		return OPH_ODB_STR_BUFF_OVERFLOW;

	if (mysql_query(oDB->conn, updateQuery))
		return OPH_ODB_MYSQL_ERROR;

	return OPH_ODB_SUCCESS;
}
Esempio n. 12
0
int oph_odb_extract_datacube_ids(ophidiadb * oDB, char *query, cube ** datacube, int *counter)
{
	if (!oDB || !query || !datacube || !counter)
		return OPH_ODB_NULL_PARAM;

	if (oph_odb_check_connection_to_ophidiadb(oDB))
		return OPH_ODB_MYSQL_ERROR;

	if (mysql_query(oDB->conn, query))
		return OPH_ODB_MYSQL_ERROR;

	MYSQL_RES *res;
	MYSQL_ROW row;
	res = mysql_store_result(oDB->conn);

	if (mysql_field_count(oDB->conn) != 2) {
		mysql_free_result(res);
		return OPH_ODB_TOO_MANY_ROWS;
	}

	*counter = mysql_num_rows(res);
	if (!(*counter)) {
		mysql_free_result(res);
		return OPH_ODB_SUCCESS;
	}

	if (!(*datacube = (cube *) malloc(*counter * sizeof(cube)))) {
		mysql_free_result(res);
		return OPH_ODB_MEMORY_ERROR;
	}

	int i = 0;
	while ((row = mysql_fetch_row(res)) != NULL) {
		(*datacube)[i].id_datacube = (row[0] ? (int) strtol(row[0], NULL, 10) : 0);
		(*datacube)[i].id_container = (row[1] ? (int) strtol(row[1], NULL, 10) : 0);
		i++;
	}
	mysql_free_result(res);
	return OPH_ODB_SUCCESS;
}
Esempio n. 13
0
int _oph_odb_update_session_label(ophidiadb * oDB, const char *sessionid, char *label, pthread_mutex_t * flag)
{
	if (!oDB || !sessionid) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Null input parameter\n");
		return OPH_ODB_NULL_PARAM;
	}

	if (oph_odb_check_connection_to_ophidiadb(oDB)) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Unable to reconnect to OphidiaDB.\n");
		return OPH_ODB_MYSQL_ERROR;
	}

	int id_session;
	if (_oph_odb_retrieve_session_id(oDB, sessionid, &id_session, flag)) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Unable to retrieve session id\n");
		return OPH_ODB_MYSQL_ERROR;
	}

	char insertQuery[MYSQL_BUFLEN];
	int n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_OPHIDIADB_SESSION_LABEL, label ? label : "", id_session);

	if (n >= MYSQL_BUFLEN) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "Size of query exceed query limit.\n");
		return OPH_ODB_STR_BUFF_OVERFLOW;
	}

	if (mysql_set_server_option(oDB->conn, MYSQL_OPTION_MULTI_STATEMENTS_ON)) {
		pmesg(LOG_ERROR, __FILE__, __LINE__, "MySQL query error: %s\n", mysql_error(oDB->conn));
		return OPH_ODB_MYSQL_ERROR;
	}

	if (mysql_query(oDB->conn, insertQuery)) {
		pmesg_safe(flag, LOG_ERROR, __FILE__, __LINE__, "MySQL query error: %s\n", mysql_error(oDB->conn));
		return OPH_ODB_MYSQL_ERROR;
	}

	return OPH_ODB_SUCCESS;
}
int recursive_search(const char *folder_abs_path, int folderid, const char *filters, ophidiadb * oDB, int *max_lengths, int max_lengths_size, char *query, char *path, int is_start,
		     oph_json * oper_json, int is_objkey_printable)
{
	if (!oDB) {
		pmesg(LOG_ERROR, __FILE__, __LINE__, "Null input parameter\n");
		return OPH_ODB_NULL_PARAM;
	}
	if (oph_odb_check_connection_to_ophidiadb(oDB)) {
		pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to reconnect to OphidiaDB.\n");
		return OPH_ODB_MYSQL_ERROR;
	}

	MYSQL_RES *res;
	MYSQL_FIELD *fields;
	MYSQL_ROW row;
	int i, j, num_fields;
	char *buffer;
	char *buffer2;

	if (is_start) {
		buffer = malloc(MYSQL_BUFLEN);
		if (!buffer) {
			pmesg(LOG_ERROR, __FILE__, __LINE__, "Error allocating memory for query\n");
			return OPH_ANALYTICS_OPERATOR_MEMORY_ERR;
		}
		buffer2 = malloc(MYSQL_BUFLEN);
		if (!buffer2) {
			pmesg(LOG_ERROR, __FILE__, __LINE__, "Error allocating memory for path\n");
			free(buffer);
			return OPH_ANALYTICS_OPERATOR_MEMORY_ERR;
		}
	} else {
		buffer = query;
		buffer2 = path;
	}

	snprintf(buffer, MYSQL_BUFLEN, MYSQL_QUERY_OPH_SEARCH_READ_INSTANCES, folderid, filters);
	if (mysql_query(oDB->conn, buffer)) {
		pmesg(LOG_ERROR, __FILE__, __LINE__, "MySQL query error: %s\n", mysql_error(oDB->conn));
		free(buffer);
		free(buffer2);
		return OPH_ANALYTICS_OPERATOR_MYSQL_ERROR;
	}
	res = mysql_store_result(oDB->conn);
	fields = mysql_fetch_fields(res);
	num_fields = mysql_num_fields(res) - 1;

	if (is_start) {
		//print header
		printf("+");
		for (i = 0; i < max_lengths_size; i++) {
			printf("-");
			for (j = 0; j < max_lengths[i]; j++) {
				printf("-");
			}
			printf("-+");
		}
		printf("\n");
		printf("|");
		for (i = 0; i < max_lengths_size; i++) {
			printf(" ");
			printf("%-*s", max_lengths[i], fields[i].name);
			printf(" |");
		}
		printf("\n");
		printf("+");
		for (i = 0; i < max_lengths_size; i++) {
			printf("-");
			for (j = 0; j < max_lengths[i]; j++) {
				printf("-");
			}
			printf("-+");
		}
		printf("\n");

		if (is_objkey_printable) {
			char **jsonkeys = NULL;
			char **fieldtypes = NULL;
			int iii, jjj;

			jsonkeys = (char **) malloc(sizeof(char *) * num_fields);
			if (!jsonkeys) {
				pmesg(LOG_ERROR, __FILE__, __LINE__, "Error allocating memory\n");
				logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_SEARCH_MEMORY_ERROR_INPUT, "keys");
				mysql_free_result(res);
				return OPH_ANALYTICS_OPERATOR_MEMORY_ERR;
			}
			for (jjj = 0; jjj < num_fields; ++jjj) {
				jsonkeys[jjj] = strdup(fields[jjj + 1].name ? fields[jjj + 1].name : "");
				if (!jsonkeys[jjj]) {
					pmesg(LOG_ERROR, __FILE__, __LINE__, "Error allocating memory\n");
					logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_SEARCH_MEMORY_ERROR_INPUT, "key");
					for (iii = 0; iii < jjj; iii++)
						if (jsonkeys[iii])
							free(jsonkeys[iii]);
					if (jsonkeys)
						free(jsonkeys);
					mysql_free_result(res);
					return OPH_ANALYTICS_OPERATOR_MEMORY_ERR;
				}
			}
			fieldtypes = (char **) malloc(sizeof(char *) * num_fields);
			if (!fieldtypes) {
				pmesg(LOG_ERROR, __FILE__, __LINE__, "Error allocating memory\n");
				logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_SEARCH_MEMORY_ERROR_INPUT, "fieldtypes");
				for (iii = 0; iii < num_fields; iii++)
					if (jsonkeys[iii])
						free(jsonkeys[iii]);
				if (jsonkeys)
					free(jsonkeys);
				mysql_free_result(res);
				return OPH_ANALYTICS_OPERATOR_MEMORY_ERR;
			}
			for (jjj = 0; jjj < num_fields; ++jjj) {
				fieldtypes[jjj] = strdup(OPH_JSON_STRING);
				if (!fieldtypes[jjj]) {
					pmesg(LOG_ERROR, __FILE__, __LINE__, "Error allocating memory\n");
					logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_SEARCH_MEMORY_ERROR_INPUT, "fieldtype");
					for (iii = 0; iii < num_fields; iii++)
						if (jsonkeys[iii])
							free(jsonkeys[iii]);
					if (jsonkeys)
						free(jsonkeys);
					for (iii = 0; iii < jjj; iii++)
						if (fieldtypes[iii])
							free(fieldtypes[iii]);
					if (fieldtypes)
						free(fieldtypes);
					mysql_free_result(res);
					return OPH_ANALYTICS_OPERATOR_MEMORY_ERR;
				}
			}
			if (oph_json_add_grid(oper_json, OPH_JSON_OBJKEY_SEARCH, "Searching results", NULL, jsonkeys, num_fields, fieldtypes, num_fields)) {
				pmesg(LOG_ERROR, __FILE__, __LINE__, "ADD GRID error\n");
				logging(LOG_WARNING, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, "ADD GRID error\n");
				for (iii = 0; iii < num_fields; iii++)
					if (jsonkeys[iii])
						free(jsonkeys[iii]);
				if (jsonkeys)
					free(jsonkeys);
				for (iii = 0; iii < num_fields; iii++)
					if (fieldtypes[iii])
						free(fieldtypes[iii]);
				if (fieldtypes)
					free(fieldtypes);
				mysql_free_result(res);
				return OPH_ANALYTICS_OPERATOR_UTILITY_ERROR;
			}
			for (iii = 0; iii < num_fields; iii++)
				if (jsonkeys[iii])
					free(jsonkeys[iii]);
			if (jsonkeys)
				free(jsonkeys);
			for (iii = 0; iii < num_fields; iii++)
				if (fieldtypes[iii])
					free(fieldtypes[iii]);
			if (fieldtypes)
				free(fieldtypes);
		}
	}
	//print each ROW
	while ((row = mysql_fetch_row(res))) {
		printf("|");
		for (i = 0; i < max_lengths_size; i++) {
			printf(" ");
			if (!strcasecmp(fields[i].name, "Container")) {
				if (folder_abs_path[strlen(folder_abs_path) - 1] == '/') {
					snprintf(buffer2, MYSQL_BUFLEN, "%s%s", folder_abs_path, row[i]);
				} else {
					snprintf(buffer2, MYSQL_BUFLEN, "%s/%s", folder_abs_path, row[i]);
				}
				printf("%-*s", max_lengths[i], buffer2);
			} else {
				printf("%-*s", max_lengths[i], row[i]);
			}
			printf(" |");
		}
		printf("\n");

		if (is_objkey_printable) {
			char **jsonvalues = NULL;
			int iii, jjj;
			jsonvalues = (char **) calloc(num_fields, sizeof(char *));
			if (!jsonvalues) {
				pmesg(LOG_ERROR, __FILE__, __LINE__, "Error allocating memory\n");
				logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_SEARCH_MEMORY_ERROR_INPUT, "values");
				mysql_free_result(res);
				return OPH_ANALYTICS_OPERATOR_MEMORY_ERR;
			}
			for (jjj = 0; jjj < num_fields; ++jjj) {
				if (jjj)
					jsonvalues[jjj] = strdup(row[1 + jjj] ? row[1 + jjj] : "");
				else {
					char *tmp_uri = NULL, *pid = NULL;
					if (oph_pid_get_uri(&tmp_uri)) {
						pmesg(LOG_ERROR, __FILE__, __LINE__, "Error allocating memory\n");
						logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_SEARCH_MEMORY_ERROR_INPUT, "PID");
						mysql_free_result(res);
						return OPH_ANALYTICS_OPERATOR_MEMORY_ERR;
					}
					if (oph_pid_create_pid(tmp_uri, (int) strtol(row[0], NULL, 10), (int) strtol(row[1], NULL, 10), &pid)) {
						pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to create PID string\n");
						logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_SEARCH_MEMORY_ERROR_INPUT, "PID");
						mysql_free_result(res);
						return OPH_ANALYTICS_OPERATOR_MEMORY_ERR;
					}
					if (tmp_uri)
						free(tmp_uri);
					jsonvalues[jjj] = strdup(pid ? pid : "");
				}
				if (!jsonvalues[jjj]) {
					pmesg(LOG_ERROR, __FILE__, __LINE__, "Error allocating memory\n");
					logging(LOG_ERROR, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, OPH_LOG_OPH_SEARCH_MEMORY_ERROR_INPUT, "value");
					for (iii = 0; iii < jjj; iii++)
						if (jsonvalues[iii])
							free(jsonvalues[iii]);
					if (jsonvalues)
						free(jsonvalues);
					mysql_free_result(res);
					return OPH_ANALYTICS_OPERATOR_MEMORY_ERR;
				}
			}
			if (oph_json_add_grid_row(oper_json, OPH_JSON_OBJKEY_SEARCH, jsonvalues)) {
				pmesg(LOG_ERROR, __FILE__, __LINE__, "ADD GRID ROW error\n");
				logging(LOG_WARNING, __FILE__, __LINE__, OPH_GENERIC_CONTAINER_ID, "ADD GRID ROW error\n");
				for (iii = 0; iii < num_fields; iii++)
					if (jsonvalues[iii])
						free(jsonvalues[iii]);
				if (jsonvalues)
					free(jsonvalues);
				mysql_free_result(res);
				return OPH_ANALYTICS_OPERATOR_UTILITY_ERROR;
			}
			for (iii = 0; iii < num_fields; iii++)
				if (jsonvalues[iii])
					free(jsonvalues[iii]);
			if (jsonvalues)
				free(jsonvalues);
		}
	}
	mysql_free_result(res);

	//recursive step
	snprintf(buffer, MYSQL_BUFLEN, MYSQL_QUERY_OPH_SEARCH_READ_SUBFOLDERS, folderid);
	if (mysql_query(oDB->conn, buffer)) {
		pmesg(LOG_ERROR, __FILE__, __LINE__, "MySQL query error: %s\n", mysql_error(oDB->conn));
		free(buffer);
		free(buffer2);
		return OPH_ANALYTICS_OPERATOR_MYSQL_ERROR;
	}
	res = mysql_store_result(oDB->conn);
	while ((row = mysql_fetch_row(res))) {
		if (folder_abs_path[strlen(folder_abs_path) - 1] == '/') {
			snprintf(buffer2, MYSQL_BUFLEN, "%s%s/", folder_abs_path, row[1]);
		} else {
			snprintf(buffer2, MYSQL_BUFLEN, "%s/%s/", folder_abs_path, row[1]);
		}
		char *subfolder_path = strdup(buffer2);
		if (!subfolder_path) {
			pmesg(LOG_ERROR, __FILE__, __LINE__, "Error allocating memory for subfolder path\n");
			free(buffer);
			free(buffer2);
			mysql_free_result(res);
			return OPH_ANALYTICS_OPERATOR_MEMORY_ERR;
		}
		if (recursive_search(subfolder_path, (int) strtol(row[0], NULL, 10), filters, oDB, max_lengths, max_lengths_size, buffer, buffer2, 0, oper_json, is_objkey_printable)) {
			pmesg(LOG_ERROR, __FILE__, __LINE__, "Recursive step error\n");
			free(buffer);
			free(buffer2);
			free(subfolder_path);
			mysql_free_result(res);
			return OPH_ANALYTICS_OPERATOR_UTILITY_ERROR;
		}
		free(subfolder_path);
	}
	mysql_free_result(res);

	if (is_start) {
		//print footer
		printf("+");
		for (i = 0; i < max_lengths_size; i++) {
			printf("-");
			for (j = 0; j < max_lengths[i]; j++) {
				printf("-");
			}
			printf("-+");
		}
		printf("\n");

		if (buffer) {
			free(buffer);
			buffer = NULL;
		}
		if (buffer2) {
			free(buffer2);
			buffer2 = NULL;
		}
	}
	return OPH_ANALYTICS_OPERATOR_SUCCESS;
}
Esempio n. 15
0
int oph_odb_set_job_status_and_nchildrencompleted(int id_job, enum oph__oph_odb_job_status status, int nchildren, int force_nchildren_saving, ophidiadb * oDB)
{
	if (!oDB) {
		pmesg(LOG_ERROR, __FILE__, __LINE__, "Null input parameter\n");
		return OPH_ODB_NULL_PARAM;
	}

	if (oph_odb_check_connection_to_ophidiadb(oDB)) {
		pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to reconnect to OphidiaDB.\n");
		return OPH_ODB_MYSQL_ERROR;
	}

	char insertQuery[MYSQL_BUFLEN];
	int n;

	switch (status) {
		case OPH_ODB_STATUS_UNKNOWN:
			if (nchildren >= 0) {
				pmesg(LOG_DEBUG, __FILE__, __LINE__, "Status is not changed\n");
				return OPH_ODB_SUCCESS;
			}
			n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_DELETE_OPHIDIADB_JOB, id_job);
			break;
		case OPH_ODB_STATUS_CLOSED:
			pmesg(LOG_ERROR, __FILE__, __LINE__, "Status %s is not allowed\n", OPH_ODB_STATUS_UNKNOWN_STR);
			return OPH_ODB_MYSQL_ERROR;
		case OPH_ODB_STATUS_PENDING:
		case OPH_ODB_STATUS_WAIT:
		case OPH_ODB_STATUS_START:
		case OPH_ODB_STATUS_SET_ENV:
		case OPH_ODB_STATUS_INIT:
		case OPH_ODB_STATUS_DISTRIBUTE:
		case OPH_ODB_STATUS_EXECUTE:
		case OPH_ODB_STATUS_REDUCE:
		case OPH_ODB_STATUS_DESTROY:
		case OPH_ODB_STATUS_UNSET_ENV:
			if (nchildren < 0)
				n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_OPHIDIADB_JOB_STATUS_1, oph_odb_convert_status_to_str(status), id_job);
			else
				n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_OPHIDIADB_JOB_STATUS_PARENT_1, oph_odb_convert_status_to_str(status), nchildren, id_job);
			break;
		case OPH_ODB_STATUS_RUNNING:
			if (nchildren < 0)
				n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_OPHIDIADB_JOB_STATUS_2, oph_odb_convert_status_to_str(status), id_job);
			else if (force_nchildren_saving)
				n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_OPHIDIADB_JOB_STATUS_PARENT_1, oph_odb_convert_status_to_str(status), nchildren, id_job);
			else
				n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_OPHIDIADB_JOB_STATUS_PARENT_2, oph_odb_convert_status_to_str(status), nchildren, id_job);
			break;
		case OPH_ODB_STATUS_COMPLETED:
		case OPH_ODB_STATUS_ERROR:
		case OPH_ODB_STATUS_START_ERROR:	// Exception due to errors in operator arguments
		case OPH_ODB_STATUS_ABORTED:
		case OPH_ODB_STATUS_EXPIRED:
			if (nchildren < 0)
				n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_OPHIDIADB_JOB_STATUS_3, oph_odb_convert_status_to_str(status), id_job);
			else
				n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_OPHIDIADB_JOB_STATUS_PARENT_3, oph_odb_convert_status_to_str(status), nchildren, id_job);
			break;
		default:
			if (nchildren < 0)
				n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_OPHIDIADB_JOB_STATUS_4, id_job);
			else
				n = snprintf(insertQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_OPHIDIADB_JOB_STATUS_PARENT_4, nchildren, id_job);
	}
	if (n >= MYSQL_BUFLEN) {
		pmesg(LOG_ERROR, __FILE__, __LINE__, "Size of query exceed query limit.\n");
		return OPH_ODB_STR_BUFF_OVERFLOW;
	}

	if ((nchildren >= 0) && mysql_set_server_option(oDB->conn, MYSQL_OPTION_MULTI_STATEMENTS_ON)) {
		pmesg(LOG_ERROR, __FILE__, __LINE__, "MySQL query error: %s\n", mysql_error(oDB->conn));
		return OPH_ODB_MYSQL_ERROR;
	}

	if (mysql_query(oDB->conn, insertQuery)) {
		pmesg(LOG_ERROR, __FILE__, __LINE__, "MySQL query error: %s\n", mysql_error(oDB->conn));
		return OPH_ODB_MYSQL_ERROR;
	}

	pmesg(LOG_DEBUG, __FILE__, __LINE__, "Job status changed into '%s' using: %s\n", oph_odb_convert_status_to_str(status), insertQuery);

	return OPH_ODB_SUCCESS;
}
Esempio n. 16
0
int oph_odb_update_user(ophidiadb * oDB, const char *username, const char *password, const char *name, const char *surname, const char *email, const char *country)
{
	if (!oDB || !username)
		return OPH_ODB_NULL_PARAM;

	if (oph_odb_check_connection_to_ophidiadb(oDB))
		return OPH_ODB_MYSQL_ERROR;

	char updateQuery[MYSQL_BUFLEN];
	int n;

	if (password) {
		n = snprintf(updateQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_USER2, "password", password, username);
		if (n >= MYSQL_BUFLEN)
			return OPH_ODB_STR_BUFF_OVERFLOW;

		if (mysql_query(oDB->conn, updateQuery))
			return OPH_ODB_MYSQL_ERROR;
	}
	if (name) {
		n = snprintf(updateQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_USER, "name", name, username);
		if (n >= MYSQL_BUFLEN)
			return OPH_ODB_STR_BUFF_OVERFLOW;

		if (mysql_query(oDB->conn, updateQuery))
			return OPH_ODB_MYSQL_ERROR;
	}
	if (surname) {
		n = snprintf(updateQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_USER, "surname", surname, username);
		if (n >= MYSQL_BUFLEN)
			return OPH_ODB_STR_BUFF_OVERFLOW;

		if (mysql_query(oDB->conn, updateQuery))
			return OPH_ODB_MYSQL_ERROR;
	}
	if (email) {
		n = snprintf(updateQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_USER, "mail", email, username);
		if (n >= MYSQL_BUFLEN)
			return OPH_ODB_STR_BUFF_OVERFLOW;

		if (mysql_query(oDB->conn, updateQuery))
			return OPH_ODB_MYSQL_ERROR;
	}
	if (country) {
		int idcountry = 0;

		n = snprintf(updateQuery, MYSQL_BUFLEN, MYSQL_QUERY_SELECT_COUNTRY, country);
		if (n >= MYSQL_BUFLEN)
			return OPH_ODB_STR_BUFF_OVERFLOW;

		if (mysql_query(oDB->conn, updateQuery))
			return OPH_ODB_MYSQL_ERROR;

		MYSQL_RES *res;
		MYSQL_ROW row;
		res = mysql_store_result(oDB->conn);

		if ((mysql_field_count(oDB->conn) != 1) || (mysql_num_rows(res) != 1)) {
			mysql_free_result(res);
			return OPH_ODB_TOO_MANY_ROWS;
		}

		while ((row = mysql_fetch_row(res)) != NULL)
			idcountry = (row[0] ? (int) strtol(row[0], NULL, 10) : 0);
		mysql_free_result(res);

		char tmp[MYSQL_BUFLEN];
		snprintf(tmp, MYSQL_BUFLEN, "%d", idcountry);
		n = snprintf(updateQuery, MYSQL_BUFLEN, MYSQL_QUERY_UPDATE_USER, "idcountry", tmp, username);
		if (n >= MYSQL_BUFLEN)
			return OPH_ODB_STR_BUFF_OVERFLOW;

		if (mysql_query(oDB->conn, updateQuery))
			return OPH_ODB_MYSQL_ERROR;
	}

	return OPH_ODB_SUCCESS;
}
Esempio n. 17
0
int oph_odb_get_uncompleted_job_number(int parent_idjob, int *number, ophidiadb * oDB)
{
	if (!oDB || !number) {
		pmesg_safe(&global_flag, LOG_ERROR, __FILE__, __LINE__, "Null input parameter\n");
		return OPH_ODB_NULL_PARAM;
	}
	*number = 0;

	if (oph_odb_check_connection_to_ophidiadb(oDB)) {
		pmesg_safe(&global_flag, LOG_ERROR, __FILE__, __LINE__, "Unable to reconnect to OphidiaDB.\n");
		return OPH_ODB_MYSQL_ERROR;
	}

	char query[MYSQL_BUFLEN];

	int n = snprintf(query, MYSQL_BUFLEN, MYSQL_RETRIEVE_UNCOMPLETED_JOB_NUMBER, parent_idjob);
	if (n >= MYSQL_BUFLEN) {
		pmesg_safe(&global_flag, LOG_ERROR, __FILE__, __LINE__, "Size of query exceed query limit.\n");
		return OPH_ODB_STR_BUFF_OVERFLOW;
	}

	pmesg_safe(&global_flag, LOG_DEBUG, __FILE__, __LINE__, "Extract number of pending children using: %s.\n", query);
	if (mysql_query(oDB->conn, query)) {
		pmesg_safe(&global_flag, LOG_ERROR, __FILE__, __LINE__, "MySQL query error: %s\n", mysql_error(oDB->conn));
		return OPH_ODB_MYSQL_ERROR;
	}

	MYSQL_RES *res;
	MYSQL_ROW row;
	res = mysql_store_result(oDB->conn);

	if (mysql_num_rows(res) < 1) {
		pmesg_safe(&global_flag, LOG_DEBUG, __FILE__, __LINE__, "No row found by query\n");
		mysql_free_result(res);
		return OPH_ODB_NO_ROW_FOUND;
	}

	if (mysql_num_rows(res) > 1) {
		pmesg_safe(&global_flag, LOG_ERROR, __FILE__, __LINE__, "More than one row found by query\n");
		mysql_free_result(res);
		return OPH_ODB_TOO_MANY_ROWS;
	}

	if (mysql_field_count(oDB->conn) != 1) {
		pmesg_safe(&global_flag, LOG_ERROR, __FILE__, __LINE__, "Not enough fields found by query\n");
		mysql_free_result(res);
		return OPH_ODB_TOO_MANY_ROWS;
	}

	if ((row = mysql_fetch_row(res)) != NULL) {
		if (!row[0]) {
			pmesg_safe(&global_flag, LOG_ERROR, __FILE__, __LINE__, "No parent job found\n");
			mysql_free_result(res);
			return OPH_ODB_ERROR;
		}
		*number = (int) strtol(row[0], NULL, 10);
	}

	mysql_free_result(res);

	return OPH_ODB_SUCCESS;
}
Esempio n. 18
0
int oph_odb_retrieve_list(ophidiadb * oDB, const char *command, ophidiadb_list * list)
{
	if (!oDB || !command || !list)
		return OPH_ODB_NULL_PARAM;

	if (oph_odb_check_connection_to_ophidiadb(oDB))
		return OPH_ODB_MYSQL_ERROR;

	char query[MYSQL_BUFLEN];

	int n = snprintf(query, MYSQL_BUFLEN, "%s", command);
	if (n >= MYSQL_BUFLEN)
		return OPH_ODB_STR_BUFF_OVERFLOW;

	if (mysql_select_db(oDB->conn, oDB->name))
		return OPH_ODB_MYSQL_ERROR;

	if (mysql_query(oDB->conn, query))
		return OPH_ODB_MYSQL_ERROR;

	MYSQL_RES *res;
	MYSQL_ROW row;
	res = mysql_store_result(oDB->conn);

	if ((mysql_field_count(oDB->conn) < 4) || (mysql_field_count(oDB->conn) > 6)) {
		mysql_free_result(res);
		return OPH_ODB_TOO_MANY_ROWS;
	}

	list->size = mysql_num_rows(res);

	list->name = (char **) malloc(list->size * sizeof(char *));
	list->id = (int *) malloc(list->size * sizeof(int));
	list->pid = (int *) malloc(list->size * sizeof(int));
	list->wid = (int *) malloc(list->size * sizeof(int));
	list->ctime = (char **) malloc(list->size * sizeof(char *));
	list->max_status = (char **) malloc(list->size * sizeof(char *));

	if (!list->name || !list->id || !list->wid || !list->pid || !list->ctime || !list->max_status) {
		mysql_free_result(res);
		return OPH_ODB_MEMORY_ERROR;
	}

	int j = 0;
	while ((row = mysql_fetch_row(res)) != NULL) {
		list->id[j] = row[0] ? (int) strtol(row[0], NULL, 10) : 0;
		list->ctime[j] = row[1] ? strndup(row[1], OPH_MAX_STRING_SIZE) : NULL;
		list->name[j] = row[2] ? strndup(row[2], OPH_MAX_STRING_SIZE) : NULL;
		list->wid[j] = row[3] ? (int) strtol(row[3], NULL, 10) : 0;
		if ((mysql_field_count(oDB->conn) > 4) && row[4])
			list->pid[j] = (int) strtol(row[4], NULL, 10);
		else
			list->pid[j] = 0;
		if ((mysql_field_count(oDB->conn) > 5) && row[5])
			list->max_status[j] = strndup(row[5], OPH_MAX_STRING_SIZE);
		else
			list->max_status[j] = NULL;
		j++;
	}
	mysql_free_result(res);

	return OPH_ODB_SUCCESS;
}
int recursive_get_max_lengths(int folder_abs_path_len, int folderid, const char *filters, ophidiadb * oDB, int **max_lengths, int *max_lengths_size, char *query, int is_start)
{
	if (!oDB) {
		pmesg(LOG_ERROR, __FILE__, __LINE__, "Null input parameter\n");
		return OPH_ODB_NULL_PARAM;
	}
	if (oph_odb_check_connection_to_ophidiadb(oDB)) {
		pmesg(LOG_ERROR, __FILE__, __LINE__, "Unable to reconnect to OphidiaDB.\n");
		return OPH_ODB_MYSQL_ERROR;
	}

	MYSQL_RES *res;
	MYSQL_FIELD *fields;
	MYSQL_ROW row;
	int i, tmp;
	char *buffer;

	if (is_start) {
		buffer = malloc(MYSQL_BUFLEN);
		if (!buffer) {
			pmesg(LOG_ERROR, __FILE__, __LINE__, "Error allocating memory for query\n");
			return OPH_ANALYTICS_OPERATOR_MEMORY_ERR;
		}
	} else {
		buffer = query;
	}

	snprintf(buffer, MYSQL_BUFLEN, MYSQL_QUERY_OPH_SEARCH_READ_INSTANCES, folderid, filters);
	if (mysql_query(oDB->conn, buffer)) {
		pmesg(LOG_ERROR, __FILE__, __LINE__, "MySQL query error: %s\n", mysql_error(oDB->conn));
		free(buffer);
		return OPH_ANALYTICS_OPERATOR_MYSQL_ERROR;
	}
	res = mysql_store_result(oDB->conn);
	fields = mysql_fetch_fields(res);
	if (is_start) {
		*max_lengths_size = mysql_num_fields(res);
		*max_lengths = (int *) malloc((*max_lengths_size) * sizeof(int));
		if (!(*max_lengths)) {
			pmesg(LOG_ERROR, __FILE__, __LINE__, "Error allocating memory\n");
			free(buffer);
			mysql_free_result(res);
			return OPH_ANALYTICS_OPERATOR_MEMORY_ERR;
		}
		for (i = 0; i < *max_lengths_size; i++) {
			(*max_lengths)[i] = 0;
		}
	}
	for (i = 0; i < *max_lengths_size; i++) {
		if (!strcasecmp(fields[i].name, "Container")) {
			tmp = ((*max_lengths)[i] > (int) (fields[i].max_length + folder_abs_path_len)) ? (*max_lengths)[i] : (int) (fields[i].max_length + folder_abs_path_len);
		} else {
			tmp = ((*max_lengths)[i] > (int) fields[i].max_length) ? (*max_lengths)[i] : (int) fields[i].max_length;
		}
		(*max_lengths)[i] = (tmp > (int) fields[i].name_length) ? tmp : (int) fields[i].name_length;
	}
	mysql_free_result(res);

	snprintf(buffer, MYSQL_BUFLEN, MYSQL_QUERY_OPH_SEARCH_READ_SUBFOLDERS, folderid);
	if (mysql_query(oDB->conn, buffer)) {
		pmesg(LOG_ERROR, __FILE__, __LINE__, "MySQL query error: %s\n", mysql_error(oDB->conn));
		free(buffer);
		return OPH_ANALYTICS_OPERATOR_MYSQL_ERROR;
	}
	res = mysql_store_result(oDB->conn);
	while ((row = mysql_fetch_row(res))) {
		if (recursive_get_max_lengths(folder_abs_path_len + strlen(row[1]) + 1, (int) strtol(row[0], NULL, 10), filters, oDB, max_lengths, max_lengths_size, buffer, 0)) {
			pmesg(LOG_ERROR, __FILE__, __LINE__, "Recursive step error\n");
			free(buffer);
			mysql_free_result(res);
			return OPH_ANALYTICS_OPERATOR_UTILITY_ERROR;
		}
	}
	mysql_free_result(res);

	if (is_start) {
		if (buffer) {
			free(buffer);
			buffer = NULL;
		}
	}
	return OPH_ANALYTICS_OPERATOR_SUCCESS;
}