1 /***************************************************************************
2 * Copyright (C) 2007 by Prabakaran Thirumalai *
3 * praba_tuty@yahoo.com *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
20 #include "Statement.h"
21 #include <SqlStatement.h>
25 extern ParsedData
*parsedData
;
29 SqlStatement::SqlStatement()
35 void SqlStatement::setConnection(AbsSqlConnection
*conn
)
37 sqlCon
= (SqlConnection
*)conn
;
41 void SqlStatement::setSqlConnection(SqlConnection
*conn
)
46 DbRetVal
SqlStatement::prepare(char *stmtstr
)
49 if (! sqlCon
->isConnectionOpen()) {
50 printError(ErrNotOpen
, "Connection not open");
53 if(isPrepared()) free();
56 yy_scan_string( stmtstr
);
63 return ErrSyntaxError
;
65 stmt
= StatementFactory::getStatement(parsedData
);
66 stmt
->setDbMgr(sqlCon
->getConnObject().getDatabaseManager());
81 char* SqlStatement::getTableName()
83 return pData
.getTableName();
86 bool SqlStatement::isSelect()
88 if (pData
.getStmtType() == SelectStatement
) return true;
92 bool SqlStatement::isPrepared() { return isPrepd
; }
94 DbRetVal
SqlStatement::execute(int &rowsAffected
)
97 if (! sqlCon
->isConnectionOpen()) {
98 printError(ErrNotOpen
, "Connection not open");
101 if (! isPrepared()) {
102 printError(ErrNotPrepared
, "Statement Not Prepared");
103 return ErrNotPrepared
;
105 rv
= stmt
->execute(rowsAffected
);
109 void* SqlStatement::fetch()
111 if (! sqlCon
->isConnectionOpen()) {
112 printError(ErrNotOpen
, "Connection not open");
115 if (! isPrepared()) {
116 printError(ErrNotPrepared
, "Statement Not Prepared");
119 if (pData
.getStmtType() != SelectStatement
) return NULL
;
120 SelStatement
*selStmt
= (SelStatement
*) stmt
;
121 return selStmt
->fetch();
124 void* SqlStatement::fetch(DbRetVal
&rv
)
126 if (! sqlCon
->isConnectionOpen()) {
127 printError(ErrNotOpen
, "Connection not open");
130 if (! isPrepared()) {
131 printError(ErrNotPrepared
, "Statement Not Prepared");
134 if (pData
.getStmtType() != SelectStatement
) return NULL
;
135 SelStatement
*selStmt
= (SelStatement
*) stmt
;
136 return selStmt
->fetch(rv
);
139 void* SqlStatement::fetchAndPrint(bool SQL
)
141 if (! sqlCon
->isConnectionOpen()) {
142 printError(ErrNotOpen
, "Connection not open");
145 if (! isPrepared()) {
146 printError(ErrNotPrepared
, "Statement Not Prepared");
149 if (pData
.getStmtType() != SelectStatement
) return NULL
;
150 SelStatement
*selStmt
= (SelStatement
*) stmt
;
151 return selStmt
->fetchAndPrint(SQL
);
154 DbRetVal
SqlStatement::bindParam(int pos
, void* value
)
157 rv
= stmt
->setParam(pos
, value
);
161 DbRetVal
SqlStatement::bindField(int pos
, void* value
)
164 if (pData
.getStmtType() != SelectStatement
) return ErrBadCall
;
165 SelStatement
*selStmt
= (SelStatement
*) stmt
;
166 rv
= selStmt
->setBindField(pos
, value
);
169 void* SqlStatement::next()
171 if (pData
.getStmtType() != SelectStatement
) return 0;
172 SelStatement
*selStmt
= (SelStatement
*) stmt
;
173 return( (void*) selStmt
->next() );
176 bool SqlStatement::isFldNull(int pos
)
178 if (pData
.getStmtType() != SelectStatement
) return 0;
179 SelStatement
*selStmt
= (SelStatement
*) stmt
;
180 return (selStmt
->isFldNull(pos
));
182 DbRetVal
SqlStatement::close()
184 if (pData
.getStmtType() != SelectStatement
) return OK
;
185 SelStatement
*selStmt
= (SelStatement
*) stmt
;
186 return selStmt
->close();
189 void* SqlStatement::getParamValuePtr( int pos
)
191 //if (pData.getStmtType() != SelectStatement) return 0;
192 DmlStatement
*dmlStmt
= (DmlStatement
*) stmt
;
193 return( (void*) dmlStmt
->getParamValuePtr( pos
) );
196 char* SqlStatement::getFieldName( int pos
)
198 if (pData
.getStmtType() != SelectStatement
) return 0;
199 SelStatement
*selStmt
= (SelStatement
*) stmt
;
200 return( (char*) selStmt
->getFieldName( pos
) );
203 DataType
SqlStatement::getFieldType( int pos
)
205 if (pData
.getStmtType() != SelectStatement
) return typeUnknown
;
206 SelStatement
*selStmt
= (SelStatement
*) stmt
;
207 return( (DataType
) selStmt
->getFieldType( pos
) );
209 int SqlStatement::getFieldLength( int pos
)
211 if (pData
.getStmtType() != SelectStatement
) return 0;
212 SelStatement
*selStmt
= (SelStatement
*) stmt
;
213 return( (int) selStmt
->getFieldLength( pos
) );
216 void* SqlStatement::getFieldValuePtr( int pos
)
218 if (pData
.getStmtType() != SelectStatement
) return 0;
219 SelStatement
*selStmt
= (SelStatement
*) stmt
;
220 return( (void*) selStmt
->getFieldValuePtr( pos
) );
223 int SqlStatement::noOfProjFields()
225 if (pData
.getStmtType() != SelectStatement
) return 0;
226 SelStatement
*selStmt
= (SelStatement
*) stmt
;
227 return selStmt
->noOfProjFields();
230 int SqlStatement::noOfParamFields()
232 return stmt
->noOfParamFields();
235 DbRetVal
SqlStatement::getProjFldInfo (int projpos
, FieldInfo
*&fInfo
)
238 if (pData
.getStmtType() != SelectStatement
) return ErrBadCall
;
239 SelStatement
*selStmt
= (SelStatement
*) stmt
;
240 rv
= selStmt
->getProjFldInfo(projpos
, fInfo
);
244 DbRetVal
SqlStatement::getParamFldInfo (int parampos
, FieldInfo
*&fInfo
)
247 if (pData
.getStmtType() ==SelectStatement
||
248 pData
.getStmtType() ==InsertStatement
||
249 pData
.getStmtType() ==UpdateStatement
||
250 pData
.getStmtType() ==DeleteStatement
)
253 DmlStatement
*dmlStmt
= (DmlStatement
*) stmt
;
254 rv
= dmlStmt
->getParamFldInfo(parampos
, fInfo
);
259 DbRetVal
SqlStatement::free()
268 void SqlStatement::setNull(int pos
)
272 void SqlStatement::setShortParam(int paramPos
, short value
)
274 stmt
->setShortParam(paramPos
, value
);
276 void SqlStatement::setIntParam(int paramPos
, int value
)
278 stmt
->setIntParam(paramPos
, value
);
280 void SqlStatement::setLongParam(int paramPos
, long value
)
282 stmt
->setLongParam(paramPos
, value
);
284 void SqlStatement::setLongLongParam(int paramPos
, long long value
)
286 stmt
->setLongLongParam(paramPos
, value
);
288 void SqlStatement::setByteIntParam(int paramPos
, ByteInt value
)
290 stmt
->setByteIntParam(paramPos
, value
);
292 void SqlStatement::setFloatParam(int paramPos
, float value
)
294 stmt
->setFloatParam(paramPos
, value
);
296 void SqlStatement::setDoubleParam(int paramPos
, double value
)
298 stmt
->setDoubleParam(paramPos
, value
);
300 void SqlStatement::setStringParam(int paramPos
, char *value
)
302 stmt
->setStringParam(paramPos
, value
);
304 void SqlStatement::setDateParam(int paramPos
, Date value
)
306 stmt
->setDateParam(paramPos
, value
);
308 void SqlStatement::setTimeParam(int paramPos
, Time value
)
310 stmt
->setTimeParam(paramPos
, value
);
312 void SqlStatement::setTimeStampParam(int paramPos
, TimeStamp value
)
314 stmt
->setTimeStampParam(paramPos
, value
);
316 void SqlStatement::setBinaryParam(int paramPos
, void *value
)
318 stmt
->setBinaryParam(paramPos
, value
);
320 int SqlStatement::getFldPos(char *name
)
322 return stmt
->getFldPos(name
);