table->closeScan is called instead of close
[csql.git] / src / sql / SqlStatement.cxx
blobf0e60f6f830c6426c155df42aa88f8baa19298c3
1 /***************************************************************************
2 * Copyright (C) 2007 by Prabakaran Thirumalai *
3 * praba_tuty@yahoo.com *
4 * *
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. *
9 * *
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. *
14 * *
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>
22 #include <dmllex.h>
24 char *lexInput;
25 extern ParsedData *parsedData;
27 int yyparse ();
29 SqlStatement::SqlStatement()
31 sqlCon = NULL;
32 stmt = NULL;
33 isPrepd = false;
35 void SqlStatement::setConnection(AbsSqlConnection *conn)
37 sqlCon = (SqlConnection*)conn;
38 con = conn;
41 void SqlStatement::setSqlConnection(SqlConnection *conn)
43 sqlCon = conn;
46 DbRetVal SqlStatement::prepare(char *stmtstr)
48 DbRetVal rv = OK;
49 if (! sqlCon->isConnectionOpen()) {
50 printError(ErrNotOpen, "Connection not open");
51 return ErrNotOpen;
53 if(isPrepared()) free();
54 lexInput = stmtstr;
55 parsedData = &pData;
56 yy_scan_string( stmtstr );
57 int rc = yyparse();
58 if (rc != 0)
60 free();
61 parsedData = NULL;
62 yyrestart(yyin);
63 return ErrSyntaxError;
65 stmt = StatementFactory::getStatement(parsedData);
66 stmt->setDbMgr(sqlCon->getConnObject().getDatabaseManager());
67 rv = stmt->resolve();
68 if (rv != OK)
70 free();
71 parsedData = NULL;
72 yyrestart(yyin);
73 return rv;
75 parsedData = NULL;
76 yyrestart(yyin);
77 isPrepd = true;
78 return OK;
81 char* SqlStatement::getTableName()
83 return pData.getTableName();
86 bool SqlStatement::isSelect()
88 if (pData.getStmtType() == SelectStatement) return true;
89 return false;
92 bool SqlStatement::isPrepared() { return isPrepd; }
94 DbRetVal SqlStatement::execute(int &rowsAffected)
96 DbRetVal rv = OK;
97 if (! sqlCon->isConnectionOpen()) {
98 printError(ErrNotOpen, "Connection not open");
99 return ErrNotOpen;
101 if (! isPrepared()) {
102 printError(ErrNotPrepared, "Statement Not Prepared");
103 return ErrNotPrepared;
105 rv = stmt->execute(rowsAffected);
106 return rv;
109 void* SqlStatement::fetch()
111 if (! sqlCon->isConnectionOpen()) {
112 printError(ErrNotOpen, "Connection not open");
113 return NULL;
115 if (! isPrepared()) {
116 printError(ErrNotPrepared, "Statement Not Prepared");
117 return NULL;
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");
128 return NULL;
130 if (! isPrepared()) {
131 printError(ErrNotPrepared, "Statement Not Prepared");
132 return NULL;
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");
143 return NULL;
145 if (! isPrepared()) {
146 printError(ErrNotPrepared, "Statement Not Prepared");
147 return NULL;
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)
156 DbRetVal rv = OK;
157 rv = stmt->setParam(pos, value);
158 return rv;
161 DbRetVal SqlStatement::bindField(int pos, void* value)
163 DbRetVal rv = OK;
164 if (pData.getStmtType() != SelectStatement) return ErrBadCall;
165 SelStatement *selStmt = (SelStatement*) stmt;
166 rv = selStmt->setBindField(pos, value);
167 return rv;
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();
188 DbRetVal SqlStatement::freeScan()
190 if (pData.getStmtType() != SelectStatement) return OK;
191 SelStatement *selStmt = (SelStatement*) stmt;
192 if (stmt) return selStmt->freeScan();
193 return OK;
196 void* SqlStatement::getParamValuePtr( int pos )
198 //if (pData.getStmtType() != SelectStatement) return 0;
199 DmlStatement *dmlStmt = (DmlStatement*) stmt;
200 return( (void*) dmlStmt->getParamValuePtr( pos ) );
203 char* SqlStatement::getFieldName( int pos )
205 if (pData.getStmtType() != SelectStatement) return 0;
206 SelStatement *selStmt = (SelStatement*) stmt;
207 return( (char*) selStmt->getFieldName( pos ) );
210 DataType SqlStatement::getFieldType( int pos )
212 if (pData.getStmtType() != SelectStatement) return typeUnknown;
213 SelStatement *selStmt = (SelStatement*) stmt;
214 return( (DataType) selStmt->getFieldType( pos ) );
216 int SqlStatement::getFieldLength( int pos )
218 if (pData.getStmtType() != SelectStatement) return 0;
219 SelStatement *selStmt = (SelStatement*) stmt;
220 return( (int) selStmt->getFieldLength( pos ) );
223 void* SqlStatement::getFieldValuePtr( int pos )
225 if (pData.getStmtType() != SelectStatement) return 0;
226 SelStatement *selStmt = (SelStatement*) stmt;
227 return( (void*) selStmt->getFieldValuePtr( pos ) );
230 int SqlStatement::noOfProjFields()
232 if (pData.getStmtType() != SelectStatement) return 0;
233 SelStatement *selStmt = (SelStatement*) stmt;
234 return selStmt->noOfProjFields();
237 int SqlStatement::noOfParamFields()
239 return stmt->noOfParamFields();
242 DbRetVal SqlStatement::getProjFldInfo (int projpos, FieldInfo *&fInfo)
244 DbRetVal rv = OK;
245 if (pData.getStmtType() != SelectStatement) return ErrBadCall;
246 SelStatement *selStmt = (SelStatement*) stmt;
247 rv = selStmt->getProjFldInfo(projpos, fInfo);
248 return rv;
251 DbRetVal SqlStatement::getParamFldInfo (int parampos, FieldInfo *&fInfo)
253 DbRetVal rv = OK;
254 if (pData.getStmtType() ==SelectStatement ||
255 pData.getStmtType() ==InsertStatement ||
256 pData.getStmtType() ==UpdateStatement ||
257 pData.getStmtType() ==DeleteStatement)
260 DmlStatement *dmlStmt = (DmlStatement*) stmt;
261 rv = dmlStmt->getParamFldInfo(parampos, fInfo);
263 return rv;
266 DbRetVal SqlStatement::free()
268 freeScan();
269 delete stmt;
270 stmt = NULL;
271 pData.reset();
272 isPrepd = false;
273 return OK;
276 void SqlStatement::setNull(int pos)
278 stmt->setNull(pos);
280 void SqlStatement::setShortParam(int paramPos, short value)
282 stmt->setShortParam(paramPos, value);
284 void SqlStatement::setIntParam(int paramPos, int value)
286 stmt->setIntParam(paramPos, value);
288 void SqlStatement::setLongParam(int paramPos, long value)
290 stmt->setLongParam(paramPos, value);
292 void SqlStatement::setLongLongParam(int paramPos, long long value)
294 stmt->setLongLongParam(paramPos, value);
296 void SqlStatement::setByteIntParam(int paramPos, ByteInt value)
298 stmt->setByteIntParam(paramPos, value);
300 void SqlStatement::setFloatParam(int paramPos, float value)
302 stmt->setFloatParam(paramPos, value);
304 void SqlStatement::setDoubleParam(int paramPos, double value)
306 stmt->setDoubleParam(paramPos, value);
308 void SqlStatement::setStringParam(int paramPos, char *value)
310 stmt->setStringParam(paramPos, value);
312 void SqlStatement::setDateParam(int paramPos, Date value)
314 stmt->setDateParam(paramPos, value);
316 void SqlStatement::setTimeParam(int paramPos, Time value)
318 stmt->setTimeParam(paramPos, value);
320 void SqlStatement::setTimeStampParam(int paramPos, TimeStamp value)
322 stmt->setTimeStampParam(paramPos, value);
324 void SqlStatement::setBinaryParam(int paramPos, void *value)
326 stmt->setBinaryParam(paramPos, value);
328 int SqlStatement::getFldPos(char *name)
330 return stmt->getFldPos(name);