+++ /dev/null
-// ANNA - Anna is Not Nothingness Anymore //
-// //
-// (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
-// //
-// See project site at http://redmine.teslayout.com/projects/anna-suite //
-// See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
-
-
-#include <time.h>
-
-#include <mysql/mysql.h>
-
-#include <anna/config/defines.hpp>
-#include <anna/core/functions.hpp>
-#include <anna/core/DataBlock.hpp>
-#include <anna/core/tracing/Logger.hpp>
-
-#include <anna/dbms/String.hpp>
-#include <anna/dbms/ShortBlock.hpp>
-#include <anna/dbms/Date.hpp>
-#include <anna/dbms/TimeStamp.hpp>
-#include <anna/dbms/LongBlock.hpp>
-
-#include <anna/dbms.mysql/mysql.hpp>
-
-using namespace std;
-using namespace anna;
-
-InputBind::InputBind(const char* name, dbms::Data& data) :
- dbms::InputBind(name, data),
- BaseBind(data) {
-}
-
-InputBind::~InputBind() {
-}
-
-/*
- * Completa la informacion establececida por el setupBind.
- */
-void InputBind::prepare(anna::dbms::Statement* dbmsStmt, anna::dbms::Connection*, const int pos)
-throw(RuntimeException) {
- st_mysql_bind* bind = static_cast <dbms::mysql::Statement*>(dbmsStmt)->getBindParams() + pos;
- Data& data = anna::dbms::Bind::getData();
- BaseBind::setupBind(*bind, data);
-
- if(data.getType() == Data::Type::LongBlock) {
- DataBlock& dataBlock = static_cast <dbms::LongBlock&>(data).getValue();
- bind->buffer_type = MYSQL_TYPE_BLOB;
- bind->buffer_length = dataBlock.getSize();
- bind->buffer = (char*) dataBlock.getData();
- bind->length = &a_length;
- }
-}
-
-/*
- * Se invoca desde anna::dbms::mysql::Statement::execute.
- * Codificar� la informaci�n C++ de forma que encaje en las estructuras requeridas por el API de MySQL.
- */
-void InputBind::code() const
-throw(RuntimeException) {
- InputBind* _this = const_cast <InputBind*>(this);
- Data& data = _this->getData();
-
- if((_this->a_nullIndicator = data.isNull() ? true : false) == true)
- return;
-
- switch(data.getType()) {
- case Data::Type::String:
- _this->a_length = anna_strlen((char*)(static_cast <dbms::String&>(data).getBuffer()));
- break;
- case Data::Type::Date:
- case Data::Type::TimeStamp:
- _this->codeDate(data);
- break;
- case Data::Type::Integer:
- throw RuntimeException("anna::dbms::mysql::InputBind::code not implemented for Data::Type::Integer", ANNA_FILE_LOCATION);
- break;
- case Data::Type::Float:
- throw RuntimeException("anna::dbms::mysql::InputBind::code not implemented for Data::Type::Float", ANNA_FILE_LOCATION);
- break;
- case Data::Type::ShortBlock:
- throw RuntimeException("anna::dbms::mysql::InputBind::code not implemented for Data::Type::ShortBlock", ANNA_FILE_LOCATION);
- break;
- case Data::Type::LongBlock:
- throw RuntimeException("anna::dbms::mysql::InputBind::code not implemented for Data::Type::LongBlock", ANNA_FILE_LOCATION);
- break;
-
- }
-}
-
-/**
- * El bind.buffer ha sido asociado a una estructura de tipo MYSQL_TIME (a_time), cuyos valores vamos
- * a establecer en �ste m�todo.
- */
-void InputBind::codeDate(dbms::Data& data)
-throw() {
- dbms::Date& date = static_cast <dbms::Date&>(data);
-
- if(data.getType() == Data::Type::TimeStamp) {
- a_time->second_part = static_cast <dbms::TimeStamp&>(data).getFractionalSecond();
- }
-
- a_time->year = date.getYear();
- a_time->month = date.getMonth();
- a_time->day = date.getDay();
- a_time->hour = date.getHour();
- a_time->minute = date.getMinute();
- a_time->second = date.getSecond();
-}
-