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
;
28 List
SqlStatement::getTableNameList()
30 return pData
.getTableNameList();
32 SqlStatement::SqlStatement()
38 void SqlStatement::setConnection(AbsSqlConnection
*conn
)
40 sqlCon
= (SqlConnection
*)conn
;
44 void SqlStatement::setSqlConnection(SqlConnection
*conn
)
49 DbRetVal
SqlStatement::prepare(char *stmtstr
)
52 if (! sqlCon
->isConnectionOpen()) {
53 printError(ErrNotOpen
, "Connection not open");
56 if(isPrepared()) free();
59 yy_scan_string( stmtstr
);
66 return ErrSyntaxError
;
68 stmt
= StatementFactory::getStatement(parsedData
);
69 stmt
->setDbMgr(sqlCon
->getConnObject().getDatabaseManager());
84 char* SqlStatement::getTableName()
86 return pData
.getTableName();
89 bool SqlStatement::isSelect()
91 if (pData
.getStmtType() == SelectStatement
) return true;
95 bool SqlStatement::isPrepared() { return isPrepd
; }
97 DbRetVal
SqlStatement::execute(int &rowsAffected
)
100 if (! sqlCon
->isConnectionOpen()) {
101 printError(ErrNotOpen
, "Connection not open");
104 if (! isPrepared()) {
105 printError(ErrNotPrepared
, "Statement Not Prepared");
106 return ErrNotPrepared
;
108 rv
= stmt
->execute(rowsAffected
);
112 void* SqlStatement::fetch()
114 if (! sqlCon
->isConnectionOpen()) {
115 printError(ErrNotOpen
, "Connection not open");
118 if (! isPrepared()) {
119 printError(ErrNotPrepared
, "Statement Not Prepared");
122 if (pData
.getStmtType() != SelectStatement
) return NULL
;
123 SelStatement
*selStmt
= (SelStatement
*) stmt
;
124 return selStmt
->fetch();
127 void* SqlStatement::fetch(DbRetVal
&rv
)
129 if (! sqlCon
->isConnectionOpen()) {
130 printError(ErrNotOpen
, "Connection not open");
133 if (! isPrepared()) {
134 printError(ErrNotPrepared
, "Statement Not Prepared");
137 if (pData
.getStmtType() != SelectStatement
) return NULL
;
138 SelStatement
*selStmt
= (SelStatement
*) stmt
;
139 return selStmt
->fetch(rv
);
142 void* SqlStatement::fetchAndPrint(bool SQL
)
144 if (! sqlCon
->isConnectionOpen()) {
145 printError(ErrNotOpen
, "Connection not open");
148 if (! isPrepared()) {
149 printError(ErrNotPrepared
, "Statement Not Prepared");
152 if (pData
.getStmtType() != SelectStatement
) return NULL
;
153 SelStatement
*selStmt
= (SelStatement
*) stmt
;
154 return selStmt
->fetchAndPrint(SQL
);
157 DbRetVal
SqlStatement::bindParam(int pos
, void* value
)
160 rv
= stmt
->setParam(pos
, value
);
164 DbRetVal
SqlStatement::bindField(int pos
, void* value
)
167 if (pData
.getStmtType() != SelectStatement
) return ErrBadCall
;
168 SelStatement
*selStmt
= (SelStatement
*) stmt
;
169 rv
= selStmt
->setBindField(pos
, value
);
172 void* SqlStatement::next()
174 if (pData
.getStmtType() != SelectStatement
) return 0;
175 SelStatement
*selStmt
= (SelStatement
*) stmt
;
176 return( (void*) selStmt
->next() );
179 bool SqlStatement::isFldNull(int pos
)
181 if (pData
.getStmtType() != SelectStatement
) return 0;
182 SelStatement
*selStmt
= (SelStatement
*) stmt
;
183 return (selStmt
->isFldNull(pos
));
186 bool SqlStatement::isFldNull(char *name
)
188 if (pData
.getStmtType() != SelectStatement
) return 0;
189 SelStatement
*selStmt
= (SelStatement
*) stmt
;
190 return (selStmt
->isFldNull(name
));
193 DbRetVal
SqlStatement::close()
195 if (pData
.getStmtType() != SelectStatement
) return OK
;
196 SelStatement
*selStmt
= (SelStatement
*) stmt
;
197 return selStmt
->close();
200 void* SqlStatement::getParamValuePtr( int pos
)
202 //if (pData.getStmtType() != SelectStatement) return 0;
203 DmlStatement
*dmlStmt
= (DmlStatement
*) stmt
;
204 return( (void*) dmlStmt
->getParamValuePtr( pos
) );
207 char* SqlStatement::getFieldName( int pos
)
209 if (pData
.getStmtType() != SelectStatement
) return 0;
210 SelStatement
*selStmt
= (SelStatement
*) stmt
;
211 return( (char*) selStmt
->getFieldName( pos
) );
214 DataType
SqlStatement::getFieldType( int pos
)
216 if (pData
.getStmtType() != SelectStatement
) return typeUnknown
;
217 SelStatement
*selStmt
= (SelStatement
*) stmt
;
218 return( (DataType
) selStmt
->getFieldType( pos
) );
220 int SqlStatement::getFieldLength( int pos
)
222 if (pData
.getStmtType() != SelectStatement
) return 0;
223 SelStatement
*selStmt
= (SelStatement
*) stmt
;
224 return( (int) selStmt
->getFieldLength( pos
) );
227 void* SqlStatement::getFieldValuePtr( int pos
)
229 if (pData
.getStmtType() != SelectStatement
) return 0;
230 SelStatement
*selStmt
= (SelStatement
*) stmt
;
231 return( (void*) selStmt
->getFieldValuePtr( pos
) );
234 int SqlStatement::noOfProjFields()
236 if (pData
.getStmtType() != SelectStatement
) return 0;
237 SelStatement
*selStmt
= (SelStatement
*) stmt
;
238 return selStmt
->noOfProjFields();
241 int SqlStatement::noOfParamFields()
243 return stmt
->noOfParamFields();
246 DbRetVal
SqlStatement::getProjFldInfo (int projpos
, FieldInfo
*&fInfo
)
249 if (pData
.getStmtType() != SelectStatement
) return ErrBadCall
;
250 SelStatement
*selStmt
= (SelStatement
*) stmt
;
251 rv
= selStmt
->getProjFldInfo(projpos
, fInfo
);
255 DbRetVal
SqlStatement::getParamFldInfo (int parampos
, FieldInfo
*&fInfo
)
258 if (pData
.getStmtType() ==SelectStatement
||
259 pData
.getStmtType() ==InsertStatement
||
260 pData
.getStmtType() ==UpdateStatement
||
261 pData
.getStmtType() ==DeleteStatement
)
264 DmlStatement
*dmlStmt
= (DmlStatement
*) stmt
;
265 rv
= dmlStmt
->getParamFldInfo(parampos
, fInfo
);
270 DbRetVal
SqlStatement::free()
279 void SqlStatement::setNull(int pos
)
283 void SqlStatement::setShortParam(int paramPos
, short value
)
285 stmt
->setShortParam(paramPos
, value
);
287 void SqlStatement::setIntParam(int paramPos
, int value
)
289 stmt
->setIntParam(paramPos
, value
);
291 void SqlStatement::setLongParam(int paramPos
, long value
)
293 stmt
->setLongParam(paramPos
, value
);
295 void SqlStatement::setLongLongParam(int paramPos
, long long value
)
297 stmt
->setLongLongParam(paramPos
, value
);
299 void SqlStatement::setByteIntParam(int paramPos
, ByteInt value
)
301 stmt
->setByteIntParam(paramPos
, value
);
303 void SqlStatement::setFloatParam(int paramPos
, float value
)
305 stmt
->setFloatParam(paramPos
, value
);
307 void SqlStatement::setDoubleParam(int paramPos
, double value
)
309 stmt
->setDoubleParam(paramPos
, value
);
311 void SqlStatement::setStringParam(int paramPos
, char *value
)
313 stmt
->setStringParam(paramPos
, value
);
315 void SqlStatement::setDateParam(int paramPos
, Date value
)
317 stmt
->setDateParam(paramPos
, value
);
319 void SqlStatement::setTimeParam(int paramPos
, Time value
)
321 stmt
->setTimeParam(paramPos
, value
);
323 void SqlStatement::setTimeStampParam(int paramPos
, TimeStamp value
)
325 stmt
->setTimeStampParam(paramPos
, value
);
327 void SqlStatement::setBinaryParam(int paramPos
, void *value
, int length
)
329 stmt
->setBinaryParam(paramPos
, value
, length
);
331 int SqlStatement::getFldPos(char *name
)
333 return stmt
->getFldPos(name
);
335 List
SqlStatement::getAllTableNames(DbRetVal
&ret
)
337 DatabaseManager
*dbMgr
= sqlCon
->getConnObject().getDatabaseManager();
338 return dbMgr
->getAllTableNames();
341 void SqlStatement::setLoading(bool flag
)
343 if (pData
.getStmtType() == InsertStatement
||
344 pData
.getStmtType() == UpdateStatement
||
345 pData
.getStmtType() == DeleteStatement
)
347 DmlStatement
*dmlStmt
= (DmlStatement
*) stmt
;
348 dmlStmt
->setLoading(flag
);