LagomarsinoDamageModel * LagomarsinoDamageModel::clone() const
{
  LagomarsinoDamageModel * out = new LagomarsinoDamageModel();
  std::vector <Parameter> params_all = parameters();
  std::vector <double> params_values;
  for (unsigned int i = 0; i < ParameterCount(); i++)
    {
      params_values.push_back(params_all[i].value);
    }
  out->set_parameters(params_values);
  return out;
}
Exemple #2
0
void Statement::Execute() {
	if (! _db.IsConnected()) {
		throw DatabaseException("Error in Statement::Execute", 0, "----", "Database is not connected");
	}

	_numberAffectedRows = 0;
	_eof = true;
	_currentColumn = 0;

	if (ParameterCount() != _params.size()) {
		throw DatabaseException("Error in Statement::Execute", 0, "----", "Have not yet assigned all parameters");
	}

	if (mysql_stmt_bind_param(_stmt, _bind) != 0) {
		throw DatabaseException(_stmt, "Error in Statement::Execute while binding parameters");
	}

	if (mysql_stmt_execute(_stmt) != 0) {
		throw DatabaseException(_stmt, "Error in Statement::Execute while executing statement");
	}

	if (_numberResultColumns > 0) {
		if (mysql_stmt_store_result(_stmt) != 0) { 
			throw DatabaseException(_stmt, "Error in Statement::Execute while storing results");
		}
		_eof = false;
	}
	else {
		_numberAffectedRows = mysql_stmt_affected_rows(_stmt);
	}

	_resultWasStored = true;

	if (_hasBlobField && _resultBind != NULL) {
		MYSQL_RES *res = mysql_stmt_result_metadata(_stmt);
		if (res != NULL) {
			for (unsigned int i = 0; i < _resultParams.size(); i++) {
				MYSQL_FIELD *column = mysql_fetch_field_direct(res, i);
				if (_resultBind[i].buffer_type == MYSQL_TYPE_BLOB) {
					_resultParams[i]->ResizeBlob(column->max_length);
					_resultBind[i].buffer = _resultParams[i]->Buffer();
					_resultBind[i].buffer_length = _resultParams[i]->BufferSize();
					_resultBind[i].length = _resultParams[i]->BufferLength();
				}
			}
			mysql_free_result(res);
		}
	}
}
Exemple #3
0
void Statement::AssignNextParameter(ParamBuffer *buffer) {
	if (buffer == NULL) { 
		throw DatabaseException("Error in Statement::AssignNextParameter", 0, "----", "Buffer cannot be null");
	}

	unsigned int pos = _params.size();
	if (pos >= ParameterCount()) {
		delete buffer;
		throw DatabaseException("Error in Statement::AssignNextParameter", 0, "----", "Have already assigned all possible input parameters");
	}

	_params.push_back(buffer);

	_bind[pos].buffer_type = buffer->BufferType();
        _bind[pos].buffer = buffer->Buffer();
        _bind[pos].buffer_length = buffer->BufferSize();
        _bind[pos].is_null = buffer->IsNull();
        _bind[pos].length = buffer->BufferLength();
	_bind[pos].is_unsigned = buffer->IsUnsigned();
}
std::vector <Parameter> LagomarsinoDamageModel::parameters() const
{
  std::vector <Parameter> out;
  out.resize(ParameterCount());
  out[0].name = "n_0";
  out[0].value = _n_0;
  out[0].units = "";
  out[1].name = "kappa_0";
  out[1].value = _kappa_0;
  out[1].units = "";
  out[2].name = "p12_0";
  out[2].value = _p12_0;
  out[2].units = "";
  out[3].name = "A";
  out[3].value = _A;
  out[3].units = "cm^3";
  out[4].name = "B";
  out[4].value = _B;
  out[4].units = "cm^3";
  return out;
}
Exemple #5
0
void Statement::Prepare() {
	if (! _db.IsConnected()) {
		throw DatabaseException("Error in Statement::Prepare", 0, "----", "Database is not connected");
	}

	_numberAffectedRows = 0;

	if ((_stmt = mysql_stmt_init(_db._db)) == NULL) {
		throw DatabaseException(_db._db, "Error in Statement::Prepare during initialize");
	}

	if (mysql_stmt_prepare(_stmt, _sqlStatement.c_str(), _sqlStatement.length()) != 0) {
		mysql_stmt_close(_stmt);
		throw DatabaseException(_stmt, "Error in Statement::Prepare during prepare");
	}

	_bind = NULL;
	unsigned long parameterCount = ParameterCount();
	if (parameterCount > 0) {
		_bind = (MYSQL_BIND *) malloc(sizeof(MYSQL_BIND) * parameterCount);
		memset(_bind, 0, sizeof(MYSQL_BIND) * parameterCount);
	}

	_numberResultColumns = 0;
	_hasBlobField = false;

	MYSQL_RES *metaData;
	if ((metaData = mysql_stmt_result_metadata(_stmt)) == NULL) {
		return;
	}

	_resultBind = NULL;
	_numberResultColumns = mysql_num_fields(metaData);
	if (_numberResultColumns > 0) {
		_resultBind = (MYSQL_BIND *) malloc(sizeof(MYSQL_BIND) * _numberResultColumns);
		memset(_resultBind, 0, sizeof(MYSQL_BIND) * _numberResultColumns);
	}

	int fieldPos = 0;
	MYSQL_FIELD *field;
	while ((field = mysql_fetch_field(metaData)) != NULL) {
		ParamBuffer *buffer = NULL;

		if ((field->type == MYSQL_TYPE_VAR_STRING) || 
		    (field->type == MYSQL_TYPE_STRING) ||
		    (field->type == MYSQL_TYPE_DECIMAL) ||
		    (field->type == MYSQL_TYPE_BIT) ||
		    (field->type == MYSQL_TYPE_VARCHAR)) {
			std::string str;
			buffer = new ParamBuffer(str, field->length);
			_resultBind[fieldPos].buffer_type = field->type;
			_resultBind[fieldPos].buffer = buffer->Buffer();
			_resultBind[fieldPos].buffer_length = buffer->BufferSize();
			_resultBind[fieldPos].length = buffer->BufferLength();
			_resultBind[fieldPos].is_null = buffer->IsNull();
			_resultBind[fieldPos].error = buffer->Error();
		}
		else if (field->type == MYSQL_TYPE_TINY) {
			if ((field->flags & UNSIGNED_FLAG) != 0) {
				buffer = new ParamBuffer((const unsigned char) 0);
			} else {
				buffer = new ParamBuffer((const char) 0);
			}
			_resultBind[fieldPos].buffer_type = MYSQL_TYPE_TINY;
			_resultBind[fieldPos].buffer = buffer->Buffer();
			_resultBind[fieldPos].buffer_length = buffer->BufferSize();
			_resultBind[fieldPos].length = buffer->BufferLength();
			_resultBind[fieldPos].is_null = buffer->IsNull();
			_resultBind[fieldPos].error = buffer->Error();
			_resultBind[fieldPos].is_unsigned = buffer->IsUnsigned();
		}
		else if ((field->type == MYSQL_TYPE_SHORT) ||
			 (field->type == MYSQL_TYPE_YEAR)) {
			if ((field->flags & UNSIGNED_FLAG) != 0) {
				buffer = new ParamBuffer((const unsigned short int) 0);
			} else {
				buffer = new ParamBuffer((const short int) 0);
			}
			_resultBind[fieldPos].buffer_type = MYSQL_TYPE_SHORT;
			_resultBind[fieldPos].buffer = buffer->Buffer();
			_resultBind[fieldPos].buffer_length = buffer->BufferSize();
			_resultBind[fieldPos].length = buffer->BufferLength();
			_resultBind[fieldPos].is_null = buffer->IsNull();
			_resultBind[fieldPos].error = buffer->Error();
			_resultBind[fieldPos].is_unsigned = buffer->IsUnsigned();
		}
		else if ((field->type == MYSQL_TYPE_LONG) ||
			 (field->type == MYSQL_TYPE_INT24)) {
			if ((field->flags & UNSIGNED_FLAG) != 0) {
				buffer = new ParamBuffer((const unsigned int) 0);
			} else {
				buffer = new ParamBuffer((const int) 0);
			}
			_resultBind[fieldPos].buffer_type = field->type;
			_resultBind[fieldPos].buffer = buffer->Buffer();
			_resultBind[fieldPos].buffer_length = buffer->BufferSize();
			_resultBind[fieldPos].length = buffer->BufferLength();
			_resultBind[fieldPos].is_null = buffer->IsNull();
			_resultBind[fieldPos].error = buffer->Error();
			_resultBind[fieldPos].is_unsigned = buffer->IsUnsigned();
		}
		else if (field->type == MYSQL_TYPE_FLOAT) {
			_resultBind[fieldPos].buffer_type = field->type;
			_resultBind[fieldPos].buffer = buffer->Buffer();
			_resultBind[fieldPos].buffer_length = buffer->BufferSize();
			_resultBind[fieldPos].length = buffer->BufferLength();
			_resultBind[fieldPos].is_null = buffer->IsNull();
			_resultBind[fieldPos].error = buffer->Error();
			_resultBind[fieldPos].is_unsigned = buffer->IsUnsigned();
		}
		else if (field->type == MYSQL_TYPE_DOUBLE) {
			_resultBind[fieldPos].buffer_type = field->type;
			_resultBind[fieldPos].buffer = buffer->Buffer();
			_resultBind[fieldPos].buffer_length = buffer->BufferSize();
			_resultBind[fieldPos].length = buffer->BufferLength();
			_resultBind[fieldPos].is_null = buffer->IsNull();
			_resultBind[fieldPos].error = buffer->Error();
			_resultBind[fieldPos].is_unsigned = buffer->IsUnsigned();
		}
		else if ((field->type == MYSQL_TYPE_TIMESTAMP) ||
			 (field->type == MYSQL_TYPE_DATE) ||
			 (field->type == MYSQL_TYPE_TIME) ||
			 (field->type == MYSQL_TYPE_DATETIME)) {
			Julian time;
			buffer = new ParamBuffer(time);
			_resultBind[fieldPos].buffer_type = field->type;
			_resultBind[fieldPos].buffer = buffer->Buffer();
			_resultBind[fieldPos].buffer_length = buffer->BufferSize();
			_resultBind[fieldPos].length = buffer->BufferLength();
			_resultBind[fieldPos].is_null = buffer->IsNull();
			_resultBind[fieldPos].error = buffer->Error();
		}
		else if ((field->type == MYSQL_TYPE_BLOB) ||
			 (field->type == MYSQL_TYPE_TINY_BLOB) ||
			 (field->type == MYSQL_TYPE_MEDIUM_BLOB) ||
			 (field->type == MYSQL_TYPE_LONG_BLOB)) {
			_hasBlobField = true;
			Binary data(field->length);
			buffer = new ParamBuffer(data);
			_resultBind[fieldPos].buffer_type = field->type;
			_resultBind[fieldPos].buffer = buffer->Buffer();
			_resultBind[fieldPos].buffer_length = buffer->BufferSize();
			_resultBind[fieldPos].length = buffer->BufferLength();
			_resultBind[fieldPos].is_null = buffer->IsNull();
			_resultBind[fieldPos].error = buffer->Error();
		}

		if (buffer != NULL) {
			_resultParams.push_back(buffer);	
		}
		fieldPos++;
	}

	if (_resultParams.size() != _numberResultColumns) {
		mysql_free_result(metaData);
		mysql_stmt_close(_stmt);
		throw DatabaseException("Error in Statement::Prepare", 0, "----", "was not able to bind all parameters");
	}

	if (_hasBlobField) {
		my_bool setMax = 1;
		mysql_stmt_attr_set(_stmt, STMT_ATTR_UPDATE_MAX_LENGTH, &setMax);
	}

	if (_numberResultColumns > 0) {
		if (mysql_stmt_bind_result(_stmt, _resultBind) != 0) {
			mysql_free_result(metaData);
			mysql_stmt_close(_stmt);
			throw DatabaseException(_stmt, "Error in Statement::Prepare while binding results");
		}
	}

	mysql_free_result(metaData);
}
Exemple #6
0
unsigned long Statement::RemainingParameters() {
	return ParameterCount() - _params.size();
}