1 /***************************************************************************
2 * Copyright (C) 2007 by www.databasecache.com *
3 * Contact: praba_tuty@databasecache.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 ***************************************************************************/
18 #include<CatalogTables.h>
25 void TableDef::reset()
30 int TableDef::addField(const char *name
, DataType type
, size_t length
,
31 const void *defaultValue
, bool notNull
)
33 if (name
== NULL
) return (int)ErrBadArg
;
34 // The following code checks for duplicates
35 FieldIterator iter
= getFieldIterator();
36 while (iter
.hasElement())
38 FieldDef def
= iter
.nextElement();
39 if (! strcmp(def
.fldName_
, name
)) {
40 printError(ErrAlready
, "Field %s already Exists", name
);
41 return (int) ErrAlready
;
45 strcpy(fldDef
.fldName_
, name
);
46 fldDef
.fldName_
[IDENTIFIER_LENGTH
] = '\0';
48 fldDef
.length_
= length
;
50 if (defaultValue
!= NULL
)
52 fldDef
.isDefault_
= true;
53 if (typeBinary
== type
) {
54 const char *p
= (const char *) defaultValue
;
56 if (! isxdigit((int)(*p
++)) ) {
57 printError(ErrBadArg
, "Invalid hexadecimal value");
58 return (int) ErrBadArg
;
62 os::memcpy(fldDef
.defaultValueBuf_
, defaultValue
, DEFAULT_VALUE_BUF_LENGTH
);
66 fldDef
.isDefault_
= false;
67 os::memset(fldDef
.defaultValueBuf_
,0, DEFAULT_VALUE_BUF_LENGTH
);
69 fldDef
.isNull_
= notNull
;
74 fldDef
.length_
= length
;
77 fldDef
.length_
= AllDataType::size(type
);
80 int ret
= fldList
.append(fldDef
);
81 if (0 == ret
) fldCount
++;
85 int TableDef::dropField(const char *name
)
87 int ret
= fldList
.remove(name
);
88 if (0 == ret
) fldCount
--;
92 int TableDef::getFieldCount()
97 size_t TableDef::getTupleSize()
100 FieldIterator iter
= getFieldIterator();
101 while (iter
.hasElement())
103 FieldDef def
= iter
.nextElement();
104 length
= length
+ os::align(def
.length_
);