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 ***************************************************************************/
16 #include "Statement.h"
18 CreateTblStatement::CreateTblStatement()
24 CreateTblStatement::~CreateTblStatement()
28 DbRetVal
CreateTblStatement::execute(int &rowsAffected
)
31 rv
= dbMgr
->createTable(tblName
, tblDef
);
32 if (rv
!= OK
) return rv
;
33 if (parsedData
->getFieldNameList().size() > 0)
35 HashIndexInitInfo
*idxInfo
= new HashIndexInitInfo();
36 strcpy(idxInfo
->tableName
, tblName
);
37 ListIterator iter
= parsedData
->getFieldNameList().getIterator();
38 FieldName
*name
= NULL
;
39 while (iter
.hasElement())
41 name
= (FieldName
*)iter
.nextElement();
42 idxInfo
->list
.append(name
->fldName
);
44 idxInfo
->indType
= hashIndex
;
45 idxInfo
->isPrimary
= true;
46 idxInfo
->isUnique
= true;
48 char indName
[IDENTIFIER_LENGTH
];
49 sprintf(indName
, "%s_idx1_Primary", tblName
);
50 rv
= dbMgr
->createIndex(indName
, idxInfo
);
55 DbRetVal
CreateTblStatement::checkForDot(char *name
)
58 while ( name
[i
] != '\0')
60 if (name
[i
++] == '.') { return ErrSyntaxError
; }
65 DbRetVal
CreateTblStatement::resolve()
68 strcpy(tblName
, parsedData
->getTableName());
69 rv
= checkForDot(tblName
);
72 printf("Check SQL Syntax: .\n");
75 FieldIterator iter
= parsedData
->getCreFldList().getIterator();
78 FieldName
*name
= NULL
;
79 ListIterator nIter
= parsedData
->getFieldNameList().getIterator();
80 while (iter
.hasElement())
82 FieldDef
*fDef
= iter
.nextElement();
84 while (nIter
.hasElement())
86 name
= (FieldName
*)nIter
.nextElement();
87 if (strcmp(name
->fldName
, fDef
->fldName_
) == 0) fDef
->isNull_
= true;
89 rv
= checkForDot(fDef
->fldName_
);
92 printf("Check SQL Syntax: .\n");
96 //TODO : need a new addField function which can take FieldDef as parameter.
97 if (!fDef
->isDefault_
) {
98 i
= tblDef
.addField(fDef
->fldName_
, fDef
->type_
, fDef
->length_
,
101 i
= tblDef
.addField(fDef
->fldName_
, fDef
->type_
, fDef
->length_
,
102 fDef
->defaultValueBuf_
,fDef
->isNull_
);
106 printError(ErrUnknown
, "Error while adding field");
114 ///////////////////////////////////////
115 CreateIdxStatement::CreateIdxStatement()
121 CreateIdxStatement::~CreateIdxStatement()
126 DbRetVal
CreateIdxStatement::execute(int &rowsAffected
)
129 if (parsedData
->getFieldNameList().size() > 0)
131 HashIndexInitInfo
*idxInfo
= new HashIndexInitInfo();
132 strcpy(idxInfo
->tableName
, parsedData
->getTableName());
133 ListIterator iter
= parsedData
->getFieldNameList().getIterator();
134 FieldName
*name
= NULL
;
135 while (iter
.hasElement())
137 name
= (FieldName
*)iter
.nextElement();
138 idxInfo
->list
.append(name
->fldName
);
140 idxInfo
->indType
= parsedData
->getIndexType();
141 idxInfo
->isPrimary
= parsedData
->getPrimary();
142 idxInfo
->isUnique
= parsedData
->getUnique();
143 rv
= dbMgr
->createIndex(parsedData
->getIndexName(), idxInfo
);
149 // function for not to drop cached table
150 DbRetVal
isTableCached(char *tabName
) // function added by :Jitendra
155 if (!Conf::config
.useCache()) return OK
;
156 fp
= fopen(Conf::config
.getTableConfigFile(),"r");
157 if(fp
==NULL
) return OK
;
158 char tablename
[IDENTIFIER_LENGTH
];
160 char condition
[IDENTIFIER_LENGTH
];
162 char fieldname
[IDENTIFIER_LENGTH
];
164 char field
[IDENTIFIER_LENGTH
]; field
[0]='\0';
168 fscanf(fp
,"%d:%s %s %s %s\n",&mode
,tablename
,fieldname
,condition
,field
);
169 if(strcmp(tablename
,tabName
) ==0){
171 return ErrNoPrivilege
;}
177 DbRetVal
DropTblStatement::execute(int &rowsAffected
)
179 DbRetVal rv
= OK
; // newly added
181 tab
= parsedData
->getTableName();
183 rv
= isTableCached(tab
);
186 printf("cached table can't be dropped,Table can be unloaded by \"cachetable -t <tableName> -u\"\n");
187 return ErrNoPrivilege
;
189 rv
= dbMgr
->dropTable(parsedData
->getTableName());
193 DbRetVal
DropIdxStatement::execute(int &rowsAffected
)
196 rv
= dbMgr
->dropIndex(parsedData
->getIndexName());