2 public import static "ecere"
3 public import static "EDA"
11 import "EDASQLiteCommon"
13 static class SQLiteDataSource : DataSourceDriver
15 class_property(name) = "SQLite";
17 OldList listDatabases;
20 String BuildLocator(DataSource ds)
22 return CopyString(ds.host);
25 uint GetDatabasesCount()
27 return databasesCount;
35 bool Connect(const String locator)
38 path = CopyString(locator);
39 // TODO, use user name and password for local security?
40 // TODO, open ds in read or write mode
44 FileListing listing { path, "sqlite" };
53 bool RenameDatabase(const String name, const String rename)
55 if(name && rename && path && FileExists(path))
58 path = MakeDatabasePath(name);
63 repath = MakeDatabasePath(rename);
64 renamed = RenameFile(path, repath);
74 bool DeleteDatabase(const String name)
76 if(path && FileExists(path))
79 String path = MakeDatabasePath(name);
80 deleted = DeleteFile(path); // delete file seems to return true even if the file does not exist
88 String MakeDatabasePath(const String name)
92 char build[MAX_LOCATION];
93 strcpy(build, path ? path : "");
95 ChangeExtension(build, "sqlite", build);
96 return CopyString(build);
101 Database OpenDatabase(const String name, CreateOptions createOptions, DataSource ds)
103 Database result = null;
106 String path = MakeDatabasePath(name);
109 // sqlite3_open(path, &db);
110 // sqlite3_open_v2(path, &db, SQLITE_OPEN_READONLY /*SQLITE_OPEN_READWRITE*/ /*SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE*/, null );
112 if(sqlite3_open_v2(path, &db, (createOptions == readOnly) ? SQLITE_OPEN_READONLY :
113 (SQLITE_OPEN_READWRITE | ((createOptions == create) ? SQLITE_OPEN_CREATE : 0)), null))
115 // fprintf(stderr, "%s\n", s); // interesting
116 printf("EDASQLite: Can't open database (%s): %s\n", path, sqlite3_errmsg(db));
122 sprintf(command, "CREATE TABLE eda_table_fields(Table_Name TEXT, Name TEXT, Type TEXT, Length INT);");
123 sqlite3_exec(db, command, null, null, null);
125 result = SQLiteDatabase { db = db };