core reorg
[csql.git] / include / DatabaseManagerImpl.h
blob1b2af8a76f09843c19681155941016dea1531bdf
1 /***************************************************************************
2 * Copyright (C) 2007 by www.databasecache.com *
3 * Contact: praba_tuty@databasecache.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 ***************************************************************************/
16 #ifndef DATABASE_MANAGER_IMPL_H
17 #define DATABASE_MANAGER_IMPL_H
18 #include<os.h>
19 #include<CatalogTables.h>
20 #include<Lock.h>
21 #include<DatabaseManager.h>
22 #include<Process.h>
23 #include<Util.h>
24 //Note::DatabaseManagerImpl is used to hide functionalites from normal database user.
25 //User is exposed to DatabaseManagerImpl, for our tools we shall type cast DatabaseManager
26 //to DatabaseManagerImpl to retreive internal information such as db statistics, etc
27 class Database;
28 class SessionImpl;
29 class TableDef;
30 class Table;
31 class FieldNameList;
32 class ChunkIterator;
33 class Chunk;
34 class TransactionManager;
35 class CSqlProcInfo
37 public:
38 CSqlProcInfo() { sysDbAttachAddr = userDbAttachAddr = NULL;}
39 void *sysDbAttachAddr;
40 void *userDbAttachAddr;
43 //Global object
44 static CSqlProcInfo csqlProcInfo;
46 class DllExport DatabaseManagerImpl : public DatabaseManager
48 private:
49 Database* systemDatabase_;
50 //pointer to system Database
52 Database* db_;
53 //pointer to database
55 LockManager *lMgr_;
57 TransactionManager *tMgr_;
60 ProcessManager *pMgr_;
61 int procSlot;
63 //only SessionImpl creates object of this class
64 DatabaseManagerImpl() { systemDatabase_ = NULL; tMgr_ = NULL; lMgr_ = NULL;
65 pMgr_ = NULL; db_ = NULL; }
66 ~DatabaseManagerImpl();
68 DbRetVal openSystemDatabase();
69 DbRetVal closeSystemDatabase();
70 ChunkIterator getSystemTableIterator(CatalogTableID id);
71 Chunk* getSystemTableChunk(CatalogTableID id);
73 void createLockManager();
74 void createTransactionManager();
76 Chunk* createUserChunk(size_t size = 0);
77 DbRetVal deleteUserChunk(Chunk *chunk);
80 DbRetVal createHashIndex(const char *indName, const char *tableName,
81 FieldNameList &fldList, int bucketSize, bool isUnique, bool isPrimary = false);
82 DbRetVal createTreeIndex(const char *indName, const char *tableName,
83 FieldNameList &fldList, int bucketSize, bool isUnique, bool isPrimary = false);
84 DbRetVal createTrieIndex(const char *indName, const char *tableName,
85 FieldNameList &fldList, bool isUnique, bool isPrimary = false);
86 void initHashBuckets(Bucket *buck, int bucketSize);
88 DbRetVal dropIndexInt(const char *name, bool takeLock);
89 DbRetVal writeSchemaFile();
90 DbRetVal updateIndexCatalogTables(const char *indName,void *tptr,
91 char **fptr, FieldNameList &fldList, bool isUnique,
92 Chunk* chunkInfo, Chunk* hChunk, void *&tupleptr);
93 DbRetVal validateIndex(const char *tblName, FieldNameList &fldList,
94 void **tptr, char ***fptr, bool isPrimary);
95 DbRetVal removeIndexCatalogTables(const char *name, void *&chunk, void *&hchunk, void *&tptr);
96 DbRetVal removeIndexChunks(void* chunk, void* hchunk, IndexType iType);
97 DbRetVal createIndexNodeForRecords(const char* tblName, void* tupleptr,
98 void *chunk);
100 public:
102 Database* db() { return db_; }
103 Database* sysDb() { return systemDatabase_; }
104 void setSysDb(Database *db) { systemDatabase_ = db; }
105 void setDb(Database *db) { db_ = db; }
107 void setProcSlot();
108 TransactionManager* txnMgr() { return tMgr_; }
109 LockManager* lockMgr() { return lMgr_; }
111 //for user database file there is no limit for the number
112 //of tables or chunks
113 DbRetVal createDatabase(const char *name, size_t size);
114 DbRetVal deleteDatabase(const char *name);
116 DbRetVal openDatabase(const char *name);
117 DbRetVal closeDatabase();
119 void setCanTakeCheckPoint(bool ctcp);
120 bool getCanTakeCheckPoint();
122 DbRetVal createTable(const char *name, TableDef &def);
123 DbRetVal dropTable(const char *name);
124 DbRetVal renameTable(const char *oldName,const char *newName);
125 DbRetVal renameIndex(const char *oldName,const char *newName);
126 DbRetVal renameField(const char *tableName,const char *oldName,const char *newName);
127 Table* openTable(const char *name, bool checkpkfk=true);
128 void closeTable(Table *table);
129 DbRetVal createIndex(const char *indName, IndexInitInfo *info);
130 DbRetVal dropIndex(const char *name);
131 DbRetVal createForeignKey(char *kfName,ForeignKeyInfo *info);
132 DbRetVal dropForeignKey(void *ctptr,bool trylock);
133 List getAllTableNames(int *rv=NULL);
134 void sendSignal(int signal);
136 DbRetVal registerThread();
137 DbRetVal deregisterThread();
138 bool isAnyOneRegistered();
139 void printUsageStatistics();
140 void printDebugLockInfo();
141 void printDebugTransInfo();
142 void printDebugChunkInfo();
143 void printDebugProcInfo();
144 void printDebugMutexInfo();
145 int getNoOfPagesForTable(char *tblName);
146 DbRetVal loadRecords(char *tblName, char *buffer);
147 DbRetVal pasteRecords(char *tblName, void *buffer);
148 DbRetVal checkPoint();
149 DbRetVal recover();
150 DbRetVal printIndexInfo(char *name);
151 DbRetVal printIndexDebugInfo(char *name);
152 void printTreeIndexNodeInfo(char *name,bool flag);
153 friend class SessionImpl;
155 #endif