Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
166
Src/nde/android/Table.h
Normal file
166
Src/nde/android/Table.h
Normal file
|
@ -0,0 +1,166 @@
|
|||
/* ---------------------------------------------------------------------------
|
||||
Nullsoft Database Engine
|
||||
--------------------
|
||||
codename: Near Death Experience
|
||||
--------------------------------------------------------------------------- */
|
||||
|
||||
/* ---------------------------------------------------------------------------
|
||||
|
||||
Table Class Prototypes
|
||||
Android (linux) implementation
|
||||
--------------------------------------------------------------------------- */
|
||||
|
||||
#ifndef __TABLE_H
|
||||
#define __TABLE_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include "Scanner.h"
|
||||
#include <map>
|
||||
#include "IndexRecord.h"
|
||||
|
||||
class Table : private Scanner
|
||||
{
|
||||
public:
|
||||
// TODO: move these back to protected
|
||||
VFILE *Handle;
|
||||
using Scanner::index;
|
||||
bool use_row_cache;
|
||||
bool GLocateUpToDate;
|
||||
private:
|
||||
void Init();
|
||||
void Reset();
|
||||
|
||||
private:
|
||||
LinkedList *Scanners;
|
||||
|
||||
protected:
|
||||
char *Name;
|
||||
char *IdxName;
|
||||
|
||||
VFILE *IdxHandle;
|
||||
int AutoCreate;
|
||||
Record *FieldsRecord;
|
||||
IndexRecord *IndexList;
|
||||
Database *db;
|
||||
int Cached;
|
||||
int numErrors;
|
||||
using Scanner::Edition;
|
||||
bool columns_cached;
|
||||
unsigned char column_ids[256];
|
||||
typedef std::map<int, Record*> RowCache;
|
||||
RowCache rowCache;
|
||||
|
||||
// Tables
|
||||
static bool Compact_ColumnWalk(Record *record, Field *entry, void *context_in);
|
||||
static bool Compact_ColumnWalk2(Record *record, Field *entry, void *context_in);
|
||||
static bool Compact_IndexWalk(Table *table, IndexField *entry, void *context);
|
||||
static bool IndexWriteWalker(IndexRecord *record, Field *entry, void *context);
|
||||
static bool IndexWalkerThunk(IndexRecord *record, Field *entry, void *context);
|
||||
static bool IndexNewWalker(IndexRecord *record, Field *entry, void *context);
|
||||
static bool BuildColumnCache(Record *record, Field *entry, void *context);
|
||||
public:
|
||||
typedef bool (*IndexWalker)(Table *table, IndexField *entry, void *context);
|
||||
Table(const char *TableName, const char *IdxName, int Create, Database *db, int Cached);
|
||||
~Table();
|
||||
bool Open();
|
||||
void Close();
|
||||
|
||||
// Columns
|
||||
ColumnField *NewColumn(unsigned char Id, const char *name, unsigned char type, bool indexUniques);
|
||||
|
||||
void DeleteColumn(ColumnField *field); // todo
|
||||
void DeleteColumnByName(const char *name); // todo
|
||||
void DeleteColumnById(unsigned char Id); // todo
|
||||
void PostColumns(void);
|
||||
NDE_API Record *GetColumns(void);
|
||||
ColumnField *GetColumnByName(const char *FieldName);
|
||||
ColumnField *GetColumnById(unsigned char Idx);
|
||||
unsigned char GetColumnType(unsigned char Id);
|
||||
|
||||
// Fields
|
||||
using Scanner::NewFieldByName;
|
||||
using Scanner::NewFieldById;
|
||||
using Scanner::GetFieldByName;
|
||||
using Scanner::GetFieldById;
|
||||
using Scanner::DeleteField;
|
||||
using Scanner::DeleteFieldByName;
|
||||
using Scanner::DeleteFieldById;
|
||||
|
||||
// Records
|
||||
using Scanner::First;
|
||||
using Scanner::Last;
|
||||
using Scanner::Next;
|
||||
using Scanner::Previous;
|
||||
using Scanner::Eof;
|
||||
using Scanner::Bof;
|
||||
using Scanner::New;
|
||||
using Scanner::Insert;
|
||||
using Scanner::Edit;
|
||||
using Scanner::Cancel;
|
||||
using Scanner::Post;
|
||||
using Scanner::Delete;
|
||||
using Scanner::GetRecordsCount;
|
||||
using Scanner::GetRecordById;
|
||||
using Scanner::GetRecordId;
|
||||
void Sync(void);
|
||||
using Scanner::LocateByName;
|
||||
using Scanner::LocateById;
|
||||
bool LocateByIdEx(int Id, int From, Field *field, int comp_mode);
|
||||
|
||||
// Indexes
|
||||
void AddIndexByName(const char *FieldName, const char *KeyName);
|
||||
void AddIndexById(unsigned char Id, const char *KeyName);
|
||||
|
||||
void WalkIndices(IndexWalker callback, void *context);
|
||||
|
||||
IndexField *GetIndexByName(const char *name);
|
||||
IndexField *GetIndexById(unsigned char Id);
|
||||
using Scanner::SetWorkingIndexByName;
|
||||
using Scanner::SetWorkingIndexById;
|
||||
bool CheckIndexing(void);
|
||||
void DropIndexByName(const char *desc);
|
||||
void DropIndexById(unsigned char Id);
|
||||
void DropIndex(IndexField *Ptr);
|
||||
void IndexModified(void);
|
||||
|
||||
// Filters
|
||||
using Scanner::AddFilterByName;
|
||||
using Scanner::AddFilterById;
|
||||
using Scanner::AddFilterOp;
|
||||
using Scanner::RemoveFilters;
|
||||
|
||||
// Scanners
|
||||
Scanner *NewScanner();
|
||||
Scanner *GetDefaultScanner();
|
||||
void DeleteScanner(Scanner *scan);
|
||||
|
||||
// Misc
|
||||
using Scanner::FragmentationLevel;
|
||||
void Compact(int *progress = NULL);
|
||||
void SetGlobalLocateUpToDate(bool is);
|
||||
|
||||
// Row Cache
|
||||
void RowCache_Delete(int position);
|
||||
void RowCache_Remove(int position);
|
||||
void RowCache_Add(Record *record, int position);
|
||||
Record *RowCache_Get(int position);
|
||||
NDE_API void EnableRowCache();
|
||||
|
||||
// Searching
|
||||
void SetFieldSearchableById(unsigned char field_id, bool searchable);
|
||||
|
||||
int HasErrors()
|
||||
{
|
||||
return numErrors > 0;
|
||||
}
|
||||
int NumErrors()
|
||||
{
|
||||
return numErrors;
|
||||
}
|
||||
void IncErrorCount()
|
||||
{
|
||||
numErrors++;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue