Enterprise to opensource. 40 files including Makefil.am and .in from storage, sqllog...
[csql.git] / src / sql / SqlStatement.cxx
blobf008c0a57a3b0f0a936187acfe9801862c0149af
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 ();
28 List SqlStatement::getTableNameList()
30 return pData.getTableNameList();
32 SqlStatement::SqlStatement()
34 sqlCon = NULL;
35 stmt = NULL;
36 isPrepd = false;
38 void SqlStatement::setConnection(AbsSqlConnection *conn)
40 sqlCon = (SqlConnection*)conn;
41 con = conn;
44 void SqlStatement::setSqlConnection(SqlConnection *conn)
46 sqlCon = conn;
49 DbRetVal SqlStatement::prepare(char *stmtstr)
51 DbRetVal rv = OK;
52 if (! sqlCon->isConnectionOpen()) {
53 printError(ErrNotOpen, "Connection not open");
54 return ErrNotOpen;
56 if(isPrepared()) free();
57 lexInput = stmtstr;
58 parsedData = &pData;
59 yy_scan_string( stmtstr );
60 int rc = yyparse();
61 if (rc != 0)
63 free();
64 parsedData = NULL;
65 yyrestart(yyin);
66 return ErrSyntaxError;
68 stmt = StatementFactory::getStatement(parsedData);
69 stmt->setDbMgr(sqlCon->getConnObject().getDatabaseManager());
70 rv = stmt->resolve();
71 if (rv != OK)
73 free();
74 parsedData = NULL;
75 yyrestart(yyin);
76 return rv;
78 parsedData = NULL;
79 yyrestart(yyin);
80 isPrepd = true;
81 return OK;
84 char* SqlStatement::getTableName()
86 return pData.getTableName();
89 bool SqlStatement::isSelect()
91 if (pData.getStmtType() == SelectStatement) return true;
92 return false;
95 bool SqlStatement::isPrepared() { return isPrepd; }
97 DbRetVal SqlStatement::execute(int &rowsAffected)
99 DbRetVal rv = OK;
100 if (! sqlCon->isConnectionOpen()) {
101 printError(ErrNotOpen, "Connection not open");
102 return ErrNotOpen;
104 if (! isPrepared()) {
105 printError(ErrNotPrepared, "Statement Not Prepared");
106 return ErrNotPrepared;
108 rv = stmt->execute(rowsAffected);
109 return rv;
112 void* SqlStatement::fetch()
114 if (! sqlCon->isConnectionOpen()) {
115 printError(ErrNotOpen, "Connection not open");
116 return NULL;
118 if (! isPrepared()) {
119 printError(ErrNotPrepared, "Statement Not Prepared");
120 return NULL;
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");
131 return NULL;
133 if (! isPrepared()) {
134 printError(ErrNotPrepared, "Statement Not Prepared");
135 return NULL;
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");
146 return NULL;
148 if (! isPrepared()) {
149 printError(ErrNotPrepared, "Statement Not Prepared");
150 return NULL;
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)
159 DbRetVal rv = OK;
160 rv = stmt->setParam(pos, value);
161 return rv;
164 DbRetVal SqlStatement::bindField(int pos, void* value)
166 DbRetVal rv = OK;
167 if (pData.getStmtType() != SelectStatement) return ErrBadCall;
168 SelStatement *selStmt = (SelStatement*) stmt;
169 rv = selStmt->setBindField(pos, value);
170 return rv;
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)
248 DbRetVal rv = OK;
249 if (pData.getStmtType() != SelectStatement) return ErrBadCall;
250 SelStatement *selStmt = (SelStatement*) stmt;
251 rv = selStmt->getProjFldInfo(projpos, fInfo);
252 return rv;
255 DbRetVal SqlStatement::getParamFldInfo (int parampos, FieldInfo *&fInfo)
257 DbRetVal rv = OK;
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);
267 return rv;
270 DbRetVal SqlStatement::free()
272 delete stmt;
273 stmt = NULL;
274 pData.reset();
275 isPrepd = false;
276 return OK;
279 void SqlStatement::setNull(int pos)
281 stmt->setNull(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);
350 return;