summaryrefslogtreecommitdiffstats
path: root/kexi/doc/dev/kexidb_issues.txt
diff options
context:
space:
mode:
Diffstat (limited to 'kexi/doc/dev/kexidb_issues.txt')
-rw-r--r--kexi/doc/dev/kexidb_issues.txt211
1 files changed, 211 insertions, 0 deletions
diff --git a/kexi/doc/dev/kexidb_issues.txt b/kexi/doc/dev/kexidb_issues.txt
new file mode 100644
index 00000000..0dd945c6
--- /dev/null
+++ b/kexi/doc/dev/kexidb_issues.txt
@@ -0,0 +1,211 @@
+---------------------------------------------------------
+ KexiDB module IDEAS, ISSUES, PROPOSALS
+ Copyright (C) 2003 Jaroslaw Staniek js at iidea dot pl
+ Started: 2003-08-01
+ Kexi home page: Users: http://www.koffice.org/kexi/ Developers: http://kexi-project.org
+
+ Changes:
+ 2005-09-16 Global BLOBs Storage
+---------------------------------------------------------
+
+|
+| This document is expected to be independent of given KexiDB dirver implementation,
+| but proposals are described here are after certain decisions has been made:
+| -drivers are (by current importance): SQLite (embedded),
+| ODBC (universality reasons ), Mysql (historical reasons), PostgreSQL
+|
+
+-----------------------------------------------------------------
+
+1. EXTENSION: Option for setting user-defined error messages on selected error types.
+
+Since new KexiDB has fully i18n'd user-visible messages, it outperforms other products as MSA
+(that often shows confusing message coming directly from the engine). There is possibility
+to provide users with table of error messages that they can personalize. These settings can
+be properties of table (query, form, etc.) and thus can be inherited (eg. by form from a table).
+By default, i18n'd messages from KexiDB can be presented.
+
+<EXAMPLE>
+Before we set our message for UNIQUE KEY conflict for table Cars (name varchar UNIQUE, price integer),
+we have got this message when try to violate 'unique' restionction:
+"There is already added one record with field 'name' set to 'Dodge' in table 'Cars'.
+This field must be unique."
+Now, we want more descriptive message: "There should be only one car named 'Dodge'!".
+We write this not as above, but rather: "There should be only one car named %field%!",
+since %field% is automatically substituted by given field value. After this we get message
+that is easier to understand for everyday user. Of course Kexi (and competitors too) never will
+be so clever as a human in building such messages automatically.
+</EXAMPLE>
+
+<NOTE>Inheriting messages: it will be more conventient to set up custom messages (if required)
+for table definition rather than just in form. If we set up given message in for a table, every
+form that uses this table as data source (end every query that do so) can use this message when needed.
+This note is also useful for other types of properties that can be inherited by extended objects from.
+</NOTE>
+
+-----------------------------------------------------------------
+
+2. KexiDB classes inheritance diagram
+
+TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO
+
+Object
+ DriverManager
+ Driver
+ [DRIVER]Driver
+ Connection
+ [DRIVER]Connection
+
+[DRIVER] should be substituted by SQLite, MySQL, etc.
+These are classess to reimplement in the drivers.
+
+ConnectionData
+Field
+Cursor
+ [DRIVER]Cursor
+FieldList
+ TableSchema
+ QuerySchema
+ IndexSchema
+Transaction
+TransactionGuard
+BaseExpr
+ NArgExpr
+ UnaryExpr
+ BinaryExpr
+ ConstExpr
+ VariableExpr
+
+-----------------------------------------------------------------
+
+3. Table schema, query schema, etc. storage
+
+Table or query schemas are extended with additional properties,
+usually not available from most db engines or even related to gui.
+
+//This table contains list of kexi object stored within project (tables, queries, etc.)
+kexi__objects
+ o_id integer unsigned primary key auto_increment,
+ o_type byte, //type id taken from KexiDB::ObjectTypes
+ o_name varchar(200),
+ o_caption varchar(200), //optional, enriched name, can contain non-latin1 characters
+ o_help varchar
+
+//This table contains object's data, such as form's xml def.
+kexi__objectdata
+ o_id integer REFERENCES kexi__objects(o_id),
+ o_data varchar,
+ o_sub_id varchar(200) //sometimes single object can have more than one data
+ //-these can be identified by o_sub_id
+ //if not needed, leave it as NULL
+
+
+//This table contains fields that are members of given kexi object.
+//Not all object types should be allowed, now allowed are tables and queries
+kexi__fields
+ t_id integer REFERENCES kexi__objects(o_id),
+ f_type byte,
+ f_name varchar(200),
+ f_length integer,
+ f_precision integer,
+ f_constraints integer,
+ f_options integer,
+ f_default varchar,
+//these are additional properties:
+ f_order integer,
+ f_caption varchar(200),
+ f_help varchar
+
+//This table contains a list of parts defined for this database
+kexi__parts
+ p_id integer unsigned primary key auto_increment,
+ p_name varchar(200),
+ p_mime varchar(200),
+ p_url varchar
+TODO: add version?
+
+//This table contains global (predefined or not) properties for this database
+kexi__db
+ db_property varchar(32),
+ db_value varchar
+
+//Predefined properties stored in kexi__db:
+property="kexidb_major_ver", value=<major_version>
+ Where: <version> is a string containing integer in textual form that denotes
+ KexiDB implementation major version used to create or update this database.
+ This property is useful for KexiDB library and applications to denote
+ what KexiDB features could be available. This ensures backward compatibility
+ and (at least in some cases) -- forward compatibility.
+property="kexidb_minor_ver", value=<minor_version>
+ like above -- minor KexiDB version
+property="project_caption", value=<string>
+property="project_desc", value=<string>
+
+TODO: put more props. todo - creator, created date, etc. (also to KexiProjectData)
+
+// Global BLOBs Storage (BLOB == BINARY LARGE OBJECT)
+// Designed to store any kind of static images, sound and other binary data
+//Table:
+kexi__blobs
+ o_id integer unsigned primary key auto_increment, //unique project-wide identifier of a BLOB
+ o_data BLOB,
+ o_name varchar(200), //optional, name of the blob,
+ //can be e.g. a name of original file the data comes from,
+ //can contain non-latin1 characters
+ o_caption varchar(200), //optional, enriched name, can contain non-latin1 characters
+ o_mime varchar(200) NOT NULL, //MIME type of a BLOB, e.g. image/jpg
+ o_folder_id integer unsigned //references kexi__gallery_folders.f_id
+ //If null, the BLOB only points to virtual "All" folder
+ //WILL BE USED in Kexi >=1.1
+
+//(not yet implemented, planned for 1.1)
+//User-defined folders for better BLOBs categorizing.
+//For simplification, folders have no lowlevel name but only caption.
+//By default there are no physical folders, but only following virtual:
+//-"All" folder
+//-"Used" folder (computation of this takes some time because design of forms
+// and reports needs to be parsed)
+//-"Unused" folder (the same note as for "Used)
+//-"By type" folder with "jpeg", "png" subfolders, etc. - available by grepping using BLOB's o_mime
+kexi__gallery_folders
+ f_id integer unsigned primary key auto_increment, //unique id of a folder
+ f_parent_id integer unsigned //references f_id, can be null for top level folders
+ f_caption varchar(200), //optional, enriched name, can contain non-latin1 characters
+ f_notes varchar, //optional notes
+
+-----------------------------------------------------------------
+
+4. Extended table schema information:
+
+Docs available online:
+- http://kexi-project.org/wiki/wikiview/index.php?ExtendedTableSchemaInformation
+- Table Column Lookup: http://kexi-project.org/wiki/wikiview/index.php?KexiDBLookupColumns
+
+-----------------------------------------------------------------
+
+5. DEPRECATED TABLES
+
+//This table contains additional information for query schemas
+kexi__querydata
+ q_id integer REFERENCES kexi__objects(o_id),
+ q_sql varchar, //raw sql text - stored in the unchanged form entered by a user (or generated)
+ q_valid boolean, //query schema may be invalid (syntactically or logically,
+ //but still can be stored)
+ q_parent_tab integer REFERENCES kexi__objects(o_id) //parent table of this query
+
+//This table contains information about fields defined in select queries
+kexi__queryfields
+ q_id integer REFERENCES kexi__objects(o_id),
+ f_order integer, //order of this field in query schema
+ f_id integer REFERENCES kexi__objects(f_order), //may be NULL if a field is asterisk
+ f_tab_asterisk integer REFERENCES kexi__objects(o_id), //if this is "single-table" asterisk
+ //this member references to valid tables id, otherwise is NULL
+ f_alltab_asterisk boolean //true if this is "all-tables" asterisk, otherwise false
+
+//This table contains information about tables used by select queries
+kexi__querytables
+ q_id integer REFERENCES kexi__objects(o_id),
+ t_id integer REFERENCES kexi__objects(o_id), //references to table used by given q_id
+ t_order integer //order of t_id table in query schema's tables list
+
+