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 ***************************************************************************/
17 #include <Statement.h>
18 #include <TableImpl.h>
19 #include <OrderTableImpl.h>
21 CopyTblStatement::CopyTblStatement()
25 bindFieldValues
= NULL
;
34 CopyTblStatement::~CopyTblStatement()
36 if (table
) { table
->close(); table
= NULL
; }
37 SelStatement
*stmt
= (SelStatement
*)innerSelStmt
;
40 for(int i
=0;i
<totalFields
;i
++)
42 free(bindFieldValues
[i
]);
44 free(bindFieldValues
); bindFieldValues
= NULL
;
50 DbRetVal
CopyTblStatement::resolve()
53 strcpy(tblName
,parsedData
->getPKTableName());
54 SelStatement
*sStmt
= new SelStatement();
55 innerSelStmt
= ( Statement
*) sStmt
;
56 innerSelStmt
->setDbMgr(dbMgr
);
57 innerSelStmt
->setParsedData(parsedData
);
58 innerSelStmt
->resolve();
59 if(parsedData
->getCreateTbl())
60 rv
= resolveForCreate();
62 rv
= resolveForInsert();
66 DbRetVal
CopyTblStatement::resolveForInsert()
68 table
= dbMgr
->openTable(tblName
);
71 printError(ErrNotExists
, "Unable to open the table:Table not exists");
74 table
->setLoading(true);
76 List fNameList
= table
->getFieldNameList();
77 ListIterator fNameIter
= fNameList
.getIterator();
78 FieldInfo
*info
= new FieldInfo();
79 int fcount
= 1; void *valBuf
; int fieldsize
=0;
80 Identifier
*elem
= NULL
;
81 totalFields
= fNameList
.size();
82 bindFieldValues
= (void**) malloc( totalFields
* sizeof(char*));
83 memset(bindFieldValues
, 0, totalFields
* sizeof(char*));
84 SelStatement
*selStmt
= (SelStatement
*) innerSelStmt
;
85 while (fNameIter
.hasElement())
87 elem
= (Identifier
*) fNameIter
.nextElement();
88 table
->getFieldInfo((const char*)elem
->name
, info
);
90 valBuf
= AllDataType::alloc(info
->type
, info
->length
);
91 table
->bindFld(elem
->name
, valBuf
);
93 selStmt
->setBindField(fcount
, valBuf
);
94 bindFieldValues
[fcount
-1] = valBuf
;
99 while (fNameIter
.hasElement())
101 delete (Identifier
*) fNameIter
.nextElement();
107 DbRetVal
CopyTblStatement::resolveForCreate()
111 SelStatement
*stmt
= (SelStatement
*) innerSelStmt
;
112 nop
= stmt
->noOfProjFields();
113 FieldInfo
*field
= new FieldInfo();
115 char name
[IDENTIFIER_LENGTH
];
116 for(int i
=0; i
<nop
; i
++)
118 rv
= stmt
->getProjFldInfo(i
+1,field
);
119 Table::getFieldNameAlone(field
->fldName
, name
);
120 tabDef
.addField(name
,field
->type
, field
->length
, field
->defaultValueBuf
, field
->isNull
);
123 rv
= dbMgr
->createTable(tblName
, tabDef
);
127 rv
= resolveForInsert();
131 DbRetVal
CopyTblStatement::execute(int &rowsAffected
)
134 SelStatement
*selStmt
= (SelStatement
*) innerSelStmt
;
135 selStmt
->execute(rowsAffected
);
136 while(selStmt
->fetch())
138 rv
= table
->insertTuple();
141 if( (rv
!=OK
) && ( !parsedData
->getCreateTbl()))
143 dbMgr
->dropTable(tblName
);
148 DbRetVal
CopyTblStatement::setShortParam(int paramNo
, short value
)
150 SelStatement
*stmt
= (SelStatement
*) innerSelStmt
;
151 return stmt
->setShortParam(paramNo
,value
);
154 DbRetVal
CopyTblStatement::setIntParam(int paramNo
, int value
)
156 SelStatement
*stmt
= (SelStatement
*) innerSelStmt
;
157 return stmt
->setIntParam(paramNo
,value
);
160 DbRetVal
CopyTblStatement::setLongParam(int paramNo
, long value
)
162 SelStatement
*stmt
= (SelStatement
*) innerSelStmt
;
163 return stmt
->setLongParam(paramNo
,value
);
166 DbRetVal
CopyTblStatement::setLongLongParam(int paramNo
, long long value
)
168 SelStatement
*stmt
= (SelStatement
*) innerSelStmt
;
169 return stmt
->setLongLongParam(paramNo
,value
);
172 DbRetVal
CopyTblStatement::setByteIntParam(int paramNo
, ByteInt value
)
174 SelStatement
*stmt
= (SelStatement
*) innerSelStmt
;
175 return stmt
->setByteIntParam(paramNo
,value
);
178 DbRetVal
CopyTblStatement::setFloatParam(int paramNo
, float value
)
180 SelStatement
*stmt
= (SelStatement
*) innerSelStmt
;
181 return stmt
->setFloatParam(paramNo
,value
);
184 DbRetVal
CopyTblStatement::setDoubleParam(int paramNo
, double value
)
186 SelStatement
*stmt
= (SelStatement
*) innerSelStmt
;
187 return stmt
->setDoubleParam(paramNo
,value
);
190 DbRetVal
CopyTblStatement::setStringParam(int paramNo
, char *value
)
192 SelStatement
*stmt
= (SelStatement
*) innerSelStmt
;
193 return stmt
->setStringParam(paramNo
,value
);
196 DbRetVal
CopyTblStatement::setDateParam(int paramNo
, Date value
)
198 SelStatement
*stmt
= (SelStatement
*) innerSelStmt
;
199 return stmt
->setDateParam(paramNo
,value
);
202 DbRetVal
CopyTblStatement::setTimeParam(int paramNo
, Time value
)
204 SelStatement
*stmt
= (SelStatement
*) innerSelStmt
;
205 return stmt
->setTimeParam(paramNo
,value
);
208 DbRetVal
CopyTblStatement::setTimeStampParam(int paramNo
, TimeStamp value
)
210 SelStatement
*stmt
= (SelStatement
*) innerSelStmt
;
211 return stmt
->setTimeStampParam(paramNo
,value
);
214 DbRetVal
CopyTblStatement::setBinaryParam(int paramNo
, void *value
, int length
)
216 SelStatement
*stmt
= (SelStatement
*) innerSelStmt
;
217 return stmt
->setBinaryParam(paramNo
,value
,length
);
220 void* CopyTblStatement::getParamValuePtr(int pos
)
222 SelStatement
*stmt
= (SelStatement
*) innerSelStmt
;
223 return stmt
->getParamValuePtr(pos
);
226 int CopyTblStatement::getFldPos(char *name
)
231 DbRetVal
CopyTblStatement::getParamFldInfo(int paramPos
, FieldInfo
*&info
)
234 SelStatement
*stmt
= (SelStatement
*) innerSelStmt
;
235 rv
= stmt
->getParamFldInfo(paramPos
, info
);
238 DbRetVal
CopyTblStatement::setParam(int paramNo
, void *value
)
241 SelStatement
*stmt
= (SelStatement
*) innerSelStmt
;
242 rv
= stmt
->setParam(paramNo
,value
);