1
-----------------------------------------------------------------------------
2
Kexi Development TODO Document
3
From jstaniek's Point of View
5
Also includes: win32 porting and multiplatform
6
features, planning, improving ideas, details
8
Copyright (C) 2003-2007 Jaroslaw Staniek staniek at kde.org / OpenOffice Software
9
Kexi home page: http://www.kexi-project.org/
10
-----------------------------------------------------------------------------
12
TODO: Kexi can use database as only medium for storing _all_ project's data
13
and then can treat .kexi files as:
14
-just export/import format for Kexi projects
15
-medium for storing projects that use sqlite driver
16
-simply: shortcut to project stored in database
18
HINT: DO NOT USE signals/slots for lowlevel data manipulation (e.g. loading data for tableviews)!
20
TODO: after kexi main window is activated again (from minimized state),
21
always 1st opened subwindow is activated
22
TODO: when editor in table cell is active: after click outside of it, editor should be closed (accepted)
24
TODO: FIX: QMetaObject::findSignal:KexiQueryPart: Conflict
25
with KexiProjectHandler::itemListChanged(KexiProjectHandler*) in KexiView
27
TODO: FIX vertical alignment in table view's cells based on corrent QFontMetrics (make tests for
28
different font sizes and names)
30
TODO: change texts in projectwizard to more descriptive:
31
"Authentication" --> "Database server's user authentication"
32
"Database Location" --> "Database Server Location"
34
TODO: [complexity=big] add command line kexi tools
36
TODO: install kexi-specific icons in apps/kexi/icons not as global
39
-add "Change data source" button in project wizard
40
-after pressing this button, show "connections selection dialog"
41
-create "connections selection dialog" instead of project wizard:
42
--add "Always show me this advanced dialog" checkbox to connections selection dialog
43
--add "Set selected connection as default" checkbox to connections selection dialog
44
-old project wizard is now "connection wizard" (for creating new connection);
45
"connection" created by user stores full info needed to get databases list
46
-connection data is a mime type of local xml file, so it can be used to create shortcuts
47
-kexi project is just connection extended with providing database name and user (local)
48
settings for this given database
49
-on startup: by default offer:
50
--creating empty temporary db on startup with name "New database"
51
--creating new database using database wizard
52
--opening existing Kexi projects
53
--importing existing non-kexi databases
55
FIX: corrupted database can be created sometimes (eg. for tests/newapi sqlite dbcreation)
56
--reason: maybe file was not flushed and app too early exited?
59
from: http://web.utk.edu/~jplyon/sqlite/SQLite_optimization_FAQ.html
62
"Although SQLite parses named transactions, the names are ignored.
63
SQLite does not support nested transactions. If you split the SQL statements in a transaction
64
over several sqlite_exec() calls, you must be prepared to handle failure in each of these calls.
65
If a failure occurs SQLite will return a non-zero value. After that, SQLite will revert to the
66
default behavior of giving each SQL statement its own transaction until a new transaction is started."
67
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
68
---so: check if any sqlite_exec() failed and if so - update connection state as if rollback has been done.
70
TODO: use callbacks for fetching data (to avoid data copying)
71
TODO: "The SQLite library includes functions sqlite_encode_binary() and sqlite_decode_binary()
72
in "encode.c". They can be used to safely encode binary data in a string form suitable for storing
73
in SQLite, and safe for use in SQL queries. These functions are an "addition" to the SQLite library.
74
They are not compiled into the library by default, and are not present in the precompiled binaries
75
distributed on the download page."
77
TODO: add possibility in cursor: "Operating in-place on data returned by sqlite_get_table()"
79
TODO: add custom collation using sqlite3_create_collation() for:
80
- non-latin1 characters
81
- non-latin1 characters with NOCASE option
82
TODO: add option for use ":memory:" special file.
83
- Allow to use it also e.g. for migration, etc.
84
- Allow to attach it as special portion of db
86
TODO: Use hints coming from "Understanding The Architecture Of SQLite" slides
87
(optimization, etc.), http://www.sqlite.org/php2004/slides-all.html
89
TODO: table merge automaton:
90
Imagine you have a simple database with two tables, and a third to join them as a
91
many-to-many relationship. Someone sends me an SQLite database as a file which has the
92
same structure, but the data is different. I want to merge these two databases
93
together keeping all of the relationships intact, without duplicating data.
95
For example, if the tables were "customers" and "products" and the one in between
96
"orders", there is the possibility that some customers and/or products might be the
97
same, but with different primary keys. The problem is that since the databases were
98
independently created, a simple union will break the relationships since the primary
101
I can think of brute force ways to do this, but I was wondering if anyone might have a
102
good algorithm or technique to accomplish this efficiently.
104
TODO: add support for PRAGMA page_size on new db creation,
105
and e.g. propose default values for win32
106
http://www.sqlite.org/cvstrac/wiki?p=PerformanceTuningWindows
107
(see also other optimization mentioned here)
108
TODO: consider using legacy_file_format (http://sqlite.org/pragma.html#pragma_legacy_file_format)
110
TODO: In Memory database/tables: how to load an sqlite file to be entirely fit in the memory?
111
clever solution: "You could set the cache size as big as your database file (via pragma).
112
This should load all (used) data into memory. This is probably not a good solution
113
if your application does not run for a longer time. "
114
TODO: add autovacuum support on SQLite db creation?
116
TODO: use sqlite3_set_authorizer() to get fine-grained access control support
117
TODO: use SQLite's > 3.3.6 ability to load new SQL functions and collating sequences from shared libraries and DLLs
118
http://www.sqlite.org/cvstrac/wiki?p=LoadableExtensions
119
TODO: use Virtual Tables to get external virtual data like CSV live queries
120
http://www.sqlite.org/cvstrac/wiki?p=VirtualTables
121
TODO: use triggers to get undo/redo: http://www.sqlite.org/cvstrac/wiki?p=UndoRedo
123
TODO: implement autoincrement for any field (also multiple fields) using the triggers; example:
124
CREATE TABLE test (a integer, b integer, txt text);
125
CREATE TRIGGER test_a_seq_trigger AFTER INSERT ON test FOR EACH ROW BEGIN update test set a=(ifnull((select max(a)+1 from test), 1)) where rowid=new.rowid and new.a isnull; END;
126
CREATE TRIGGER test_b_seq_trigger AFTER INSERT ON test FOR EACH ROW BEGIN update test set b=(ifnull((select max(b)+1 from test), 1)) where rowid=new.rowid and new.b isnull; END;
127
insert into test values (null, null, 'foo');
128
insert into test values (null, 7, 'bar');
129
insert into test values (null, null, 'text');
134
Then, support the following grammar in KEXISQL:
135
CREATE TABLE test (a integer autoincrement, b integer autoincrement, txt text);
136
^^^^^^^^^^^^^ ^^^^^^^^^^^^^
141
ALSO TODO: move all simple widget classes (e.g. KexiSettings, KexiTabBrowser)
142
from core, to more detailed dirs,
143
and projectWizard/ to wizards/ (there will be more wizards soon)
148
- add kexi__parts (p_id integer, p_type) table and appropriate part objects in kexi__objects
153
- reuse recent project tab as separate window for "More projects..." menu action [difficulty: 1]
154
- implement contents update for "recentprojects" menu action [difficulty: 2]
155
- implement: drag-and-drop of the project file to the outside of Kexi, [difficulty: 2]
156
- saveas== saving another shortcut to a project if it is server-based [difficulty: 2]
158
TODO: improve security for password information in .kexis files
159
TODO: for .kexis files' connection data - if password attr. is not present - ask for password
160
IDEA: integrate password information in .kexis files with KWallet
163
TODO: Put Connection::dropTable() and Conenction::dropQuery() INSIDE TRANSACTION!!!!!!!
165
TOP REQUESTED FEATURES LIST @ PL EXPO 2004:
166
- ODBC driver (hello mattr!)
167
- Access -> Kexi migration tool (done)
171
- avoid using veryvery long names for objects
172
- IDEA: Learning module. A special optional pane which shows what commands are sent to server
173
for learning purposes.
174
- IDEA: Server-side wrapper for db connections (very simple) that allows anonymous [1]
175
(or any predefined group of users [2])
176
-- wrapper handles connections by validating *virtual* usernames and passwords for [1] case,
177
or providing unique virtual user names and passwords for [2] case
178
-- on the server side, wrapper connects to database server (it can be available locally or remotely)
179
using it's private user name and password. Thus, we only need one *physical* user name and password
180
for multiple users. Virtual names/passwords are mapped to physical one.
181
This is a solution for hosted database servers where it's hard to create as many users
183
-- Priviledges are mapped as well, and translated. By default, user A could be able to create his/her
184
own database and drop it. He/she couldn't be able to do the same with user's B databases,
185
until user B allow this. The same for creating tables, and writing data.
186
-- wrapper secures server from too large data sets being sent to server
187
(parameters need to be configurable)
188
-- it's all dedicated for Kexi; so it's NOT a generic wrapper for any database client.
189
- add "ADVANCED" find dialog: like in Mozilla Advanced Address Book Search window
191
=== USABILITY TODO ===
192
-add "Simple/Advanced Usage" global option
194
--use captions everywhere possible, instead of names (tables, fiels, etc.); names should be autogenerated
197
- plugins/forms/kexiformpart.cpp "Best Fit" instead of "To Fit" (pl=Najlepsze dopasowanie)
198
- KexiQueryDesignerGuiEditor::initTableColumns(): i18n("Visible") --> i18n("Column visible", "Visible")
199
- add comment for translators: i18n("'empty' is an adjective here", "Empty database")
200
-"Could rename table \"%1\" using the same name."
201
--> "Could NOT rename table \"%1\" using the same name."
203
I am using update_kexi_po to recreate kexi.po file. THis will run cd calligra/ && make -f admin/Makefile.common package-messages
206
=== Import/Export Framework TODO ===
207
-KEXIDB: add lower level functions like: "getting table names list", "getting table schema",
208
"getting index schema"
210
=== Combo box editor TODO ====
211
-new layout: a lineedit + dropdown button + popup tableview, when needed
212
-use (and add few) methods for tableview to enable adjusting it for use it as dropdown tv
213
--add scrolling for mouse dragging
214
-dropdown tv has to contain:
215
--QSizeGrip at the bottom corner
216
-in kexidb: implement combobox settings for the foreign field:
217
--ordered set of fields that are visible in popup tableview (ie. just query that is bound with the column)
218
-use multi-key relations from kexidb
219
- copy should handle "displayed" value, not the real one
220
(maybe let's use a custom clipboard mimetype? (containing a bound value) -- otherwise
221
it will be not posible to paste the copied value)
222
- fix support for query as the row source
223
- (forms combo) repaint (remove focus rectangle) when other widget is focused using a mouse click
225
=== Table View TODO ====
226
- do not accept when entering "-" for unsigned numeric types
227
- add a functions for moving/cutting/copying/pasting rows
228
- extended support for enums (combo boxes)
229
- add top-left button that allow select all rows
230
- enable clicked vheader button to select given row
231
- enable column dragging
232
- add action "restore original column order"
233
- add possibility of renaming column by 1) dbl-clicking header 2) "rename column" action
234
- more actions (as in Format and Insert menus of MSA2k3)
235
- add own impl. (based on Qt) for date/time editor because:
236
-- no focusSection(), etc. is available in current impl.
237
-- frames cannot be easily removed
238
-store last sorting column (and type) and load it on KexiTableView::setData()
239
(not it's only cleared)
240
- replace KexiDB::RowData usage in KexiTableItem with something faster
241
- TODO RELATED TO CELL EDITORS:
242
- signal on situation when user e.g. pressed alpha key when only numeric chars is allowed
243
- signal when null/empty value forcell isn't permitted
244
- signal when repeated value isn't permitted
245
- add support for cut, copy & paste of cell's contents (get shortcuts from KStdAccel)
246
HINT: removing Qt::WStaticContents from KexiTableView ctor fixed repaint problem
247
the problem was with repainting when hscrollbar disapperars....
248
- KexiTableView loads all data from the table: very slow and consumes a lot of memory:
249
(e.g. for each record with 3 fields: 1 integer, 1 text and 1 float consumed ~350B)
250
- ctors and dtors are WAY TOO SLOW!
251
- add an option: for bigger tables load only part of the table data
252
- optimize MySQL record size
253
- add focus rectangles for cells:
254
http://mfc.dundas.com/mfc/grid/index.aspx?section=Grid&body=focusrectangles.htm
255
- add more cell types & options:
256
http://mfc.dundas.com/mfc/grid/index.aspx?section=Grid&body=celltypes.htm
257
--including: red corner with a note; sliders; radio buttons
258
- highlight sorted column's cells slightly darker, like in current KListView's impl.
259
- clicking on a header section (to sort), it ensures current cell is visible, but
260
only y-position should be changed, not x
261
- add support for crossed out rows - that can be used for results of DELETE queries
262
(see http://www.gnome-db.org/images/screenshots/mergeant_table_data.png)
263
- add combo boxes for fields filtering in column headers,
264
as in http://www.sqlmanager.net/i/scr/mysql/manager/Main%20100.gif
265
- display autonumber indicator in autonumbered column(s)
266
- reimplement header widget to better show sorting indicators
267
- display tooltip over cells that are to small to display entire contents
268
- Add icons for conditional formatting: http://blogs.msdn.com/excel/archive/2006/05/09/594200.aspx
269
(displaying icons is already possible using custom properties, BTW)
270
- display [null] values in boolean fields, e.g. as [?]
271
- allow to select entire rows, columns and grids as in a spreadsheet;
272
offer copy/cut/paste/copy-to-file/clear for such selections
274
-- implement tooltip manager (this will allow to create custom tooltips)
275
-- use if ( QApplication::isEffectEnabled( UI_AnimateTooltip ) == FALSE ||....
276
as in qtooltip.cpp:564
277
-- implement custom tooltip for large texts and BLOB, add "zoom" option at the bottom of the tooltip
278
(zooming should not show a modal dialog but rather a widget inside the TV)
279
-- add the same zoom option to the context menu
280
-- also show tooltips when the content is only partially visible
281
- fix horizontal scrollbar's width updating: large tables like 'tabkodypocztowe1' hide the 'last' and 'new' buttons
282
- display default values for BLOB types
284
- add "None" option for editors supporting 3rdState, e.g. int, string (needed for "default"
285
property of the Table Designer)
286
- fix repainting cells when moving down/up arrow at the window boundaries
287
(weird, win32 is not affected)
289
- (e.g. in table designer): in an empty row 1. drop down a type combo. 2. do not select enything an click outside
291
- do not autoscroll vertically the contents if the current column is wider than the view
292
(my example: 'microsoft_terminology' table's 1st column) because the text us unreadable
293
valid even when we use arow keys only
295
- KexiComboBoxTableEdit::createInternalEditor():
296
set d->internalEditor visible and use it to enable data entering by hand
297
(for now only types based that use KexiInputTableEdit (Text, Integer..) allows data entry using keyboard
299
- display error message on top of table view if data fetching failed
300
- add a vertical [A B ... Z] shortcut list for text-based sorting, like on "My Connections" page of linkedin.com
302
==== ALTER TABLE TODO: =============
303
-add a function for editing indices (including multi-field indices)
304
2 methods: 1) in additional dock 2) in property editor
305
-add all missing properties (even when most are not working)
306
-add "index" information icon @ the left hand of line with key(s) that is/are indexed
307
-in propeditor: auto-sync pkey, unique, required & indexed properties on changing;
308
add message boxes if needed
309
-for 'column width' property: add 'default' value at the beginning
310
-propose index key (ask for name) on saving tables without index (allow to bypass this message)
311
- re-add "tablepart_toggle_pkey" action after shared toggle actions fix:
312
--when propeditor is focused, there's a problem with syncing on/off state of toolbar button
313
of "tablepart_toggle_pkey" action
314
--> altertable view doesn't receive the signal about toggling (because it's not focused)
317
-add "datasheet view" to db-aware forms
318
-add [NewFormDefaults] option group and:
319
--add "autoTabStop" (bool)
320
^^^ implement above so Form::autoAssignTabStops() will be called before form saving
321
and before switching to data mode (this is already performed in FormIO::saveFormToDom().
322
- add setting expressions for data-aware widget's dataSource
323
- add setting anonymous (not stored) queries as form's dataSource
324
- display "Autonumber" string for data-aware widgets
325
- implement shared action categories to filter out them in 'assigning actions to push buttons'
326
- implement "restore default properties" action for widgets
327
- allow form's surface resizing when there's global layout defined
328
- fix repainting form's surface boundaries repainting when its size is changed by entering
329
value in the propeditor
330
- fix spring behaviour: it cannot be shrinked if its inside a layout
331
- KTextEdit doesn't allow to set custom cursor (also in Qt Designer)
332
- support for multiple widgets selection in the property editor (requires changes to kexiproperty)
333
- handle older and newer formats in FormIO::loadFormFromDom()
334
- KAcceleratorManager::setNoAccel(QWidget*) - use it in data mode,
335
define "auto accels" form's property and if it's false
336
- find a way to create more meaningfull default names for widgets than button1, button2.
337
Maybe convert widget text (if available) using string2Identifier()?
338
Maybe ask user to enter meaningfull name (+"do not ask this question again" checkbox)?
339
See also http://charlespetzold.com/etc/DoesVisualStudioRotTheMind.html
340
- For newer widget types, add information for compatible widgets that
341
can be used instead of them. For best flexibility save this information in a form XML.
342
Example use: We have Kexi version N and N+1. In N+1 there's KexiFrame widget introduced that
343
extends QFrame with more features. Kexi N has no KexiFrame implemented but only QFrame.
344
When KexiFrame witget type has been encountered in the form's XML string,
345
Kexi N it is able to insert QFrame instead of KexiFrame (unsupported properties will be just ignored).
346
The result of substitution may be not accurate, so thing twice before adding such information
347
for a given widget type.
348
- add "buttonStyle" property for pushbutton widget with following values:
349
-- Button - the deafult
350
-- Hiperlink - clickable hiperlink will be displayed instead of button itself
351
-- Image - an clickable image will be displayed instead of button itself
352
For this value, aditional properties will make sense:
353
--- image, mouseOverImage, mouseDownImage
354
-- Thus, we'll have more consistent solution than MSA, which allows to
355
mess the form by setting hiperlinks directly also in Image box and Label widgets
356
- add "icon" property for pushbutton
357
- For "OnCLick" property:
358
-- allow to set hiperlink (and anchor) as value (i.e. so called "target location")
359
(see MSA's hiperlinkaddress, hiperlinksubaddress properties)
361
-- add such fancy frame: http://www.themaninblue.com/writing/perspective/2004/08/05/
362
- tab widget: add color property for setting particular tab
363
- add a Scratchpad as in QtDesigner4, allows to drag&drop widgets between forms...
364
- Use RESET clause for Q_PROPERTY, eg. RESET unsetPalette for paletteBackgroundColor.
365
Then, use bool QMetaProperty::reset ( QObject * o ) const to reset property value in the propeditor.
366
- Autoforms: allow to define groups of fields so the fileds can be displayed with nice groupo boxes.
367
(e.g. http://www.glom.org/screenshots/glom_data_details.png)
368
This definition shgould be made during table design, so we can reuse groupping information also in
369
autoreports and auto web forms. Especially usable for tables with lots of fields.
370
We could even define the groupping levels so top-level groups can be splitted using Tab Wigget.
371
- fix support for blob visible values for the combo box widget
372
- unhide "widgetType" property for Auto Field
374
==== Property Editor TODO: =========
375
- text does not fit well inside combobox editor
376
- double editor should be klineedit with doublevalidator, not spinbox
377
- add a hint for propertybuffer to allow properties to be displayed side-by-side
378
e.g. width, height properties ca be displayed this way. See also property editor
379
at http://freshmeat.net/screenshots/41728/
380
-KexiProperty: make it really shared (using QShared?)
381
-for each row (property) allow to define double-click-action dependent on property type,
382
* e.g. bool editor: toggle true/false,
383
* enum editor: select next value (circularly),
384
* fire selection dialog for filename editor, color editor, pixmap editor, etc.
385
* expand children for cells of type like "Rect"
386
* other types- by default: just move cursor to editor
387
- add support for "set" types (e.g. AlignTop|AlignBottom) and port form's objpropertybuffer to this
388
- add "description" label on the bottom of the property editor;
389
it should reuse Property::description() text
390
- support Variant type (needs update in Editor) so Property::setValue() won't show a "INCOMPATIBLE TYPES!" warning
391
(needed e.g. by KexiTableDesignerView for "defaultValue" property)
393
==== Query Designer TODO: ======
394
- add tables dropping from the browser
395
- add a dialog for inserting multiple tables at a time
396
- fix connections drawing
397
- make "1" and "inf" signs a bit larger (scalable)
398
- 'totals' are unused yet
399
- update query after change in Connection cache
400
- for queries like 'select * from a, b, c' allow to enter * in 'table' column
401
--this should also work when we're recreating field rows on switching from SQL view to design view
402
- query part: react on KexiProject::aboutItemDelete() and KexiProject::aboutItemRename() signals
404
-- use a special dialog with validators compatible with the field type for getting query parameters
405
(currently KInputDialog is used)
406
-- use dialog like KInputDialog::getItemList() for supporting multiple values as query parameters
407
- support add "PARAMETERS [prompt1] datatype1, [prompt2] datatype2;" syntax to the parser,
408
and add query "Query parameters" dialog/pane, allowing to order parameters that user should
409
provide (Ks. eksp., p. 73)
410
- ADDINs: a tree dialog showing query dependencies, and query templates like these http://www.4tops.com/query_tree.htm
412
==== SQL Editor TODO: =====
413
- intergrate editor's (KPart) actions with KexiMainWindow's Actions
414
- win32: katepart on win32: void KateSyntaxDocument::setupModeList (bool force)
415
Works slowly for the 1st time because there is no cache.
416
Workaround: removed most of apps/katepart/syntax/*.xml files
417
- win32: fix freeze on 1st char entering
418
- win32: fix mmap for win9x (InterlockedCompareExchange() replacement is needed
419
-> see kdelibs/win/mmap.c)
420
- call qApp->processEvents() on highlighting schema loading,
421
so 'wait' cursor can be visible on 1st loading.
422
- allow saving invalid queries (KexiQueryDesignerSQLView::storeNewData())
423
(for invelid queries, after opening SQL view should be shown automatically)
424
- allow to copy error message (e.g. using a copy button)
425
+ allow to select message text (use active label?)
427
==== Main window TODO ====
428
- propeditor dock window is hidden when a window in data view mode is active
429
(or no window is present). This feature is partially disabled
430
(using PROPEDITOR_VISIBILITY_CHANGES), though,
431
--REENABLE when blinking and dock width changes will be removed in KMDI
432
- add sorting projects information using KexiProjectData::lastOpened
433
- also add this info as "Database>Open Recent" menu subentry
434
- display errors when plugin library could not be instantiated due to a broken lib
435
- Project Navigator: display multiline item names is needed
436
- display progress bar (in the statusbar?) to indicate there're pending jobs
437
- enlarge the default main window size, currently it's ~50% ofthe desktop size
438
- not convenient as user is forced to enlarge the window by hand (settings are stored though)
439
- add "File->Save All" action
440
- add settings dialog, KConfigXT based simple version
441
+ about:config-like using kconfigeditor http://extragear.kde.org/apps/kconfigeditor/
442
(possible reuse of koproperty)
444
TODO: add SharedAction::setVisible() and use QMenuData::setItemVisible() where needed
447
-perhaps we'd reuse KDE Menu editor GUI?
450
- add to field's properties list: input mask, validation rule, column width
451
- improve Expression class, add code for generating expression
452
strings in Connection::queryStatement()
453
- add dynamic resize for dict members like Connection::m_tables
454
- make KexiDB really ASYNC, multithreaded!
455
- implement relationships (foreign key information) between tables + storage
456
-- Support three standard types of integrity rules as described at http://allenbrowne.com/ser-64.html
457
plus: Cascade to Null Relations
458
-- SQLite now supports it: http://sqlite.org/foreignkeys.html
459
-- support composite foreign keys (SQLite now supports them too)
460
- implement GROUP BY clause + storage
461
- add schema to kexi__* tables on createTable()
462
- add support for creation temporary databases
463
- look at Connection::isReadOnly() to see if we can perform certain operations
464
requiring write access (create db, update db props, etc.)
465
- reuse ConnectionData::useLocalSocketFile for connections using socket file
466
- Connection::alterTableName():
467
--alter table name for server DB backends!
468
--what about objects (queries/forms) that use old name?
469
- PGSQL: use setval(sequence) to allow setting autonumber values by hand
470
http://www.postgresql.org/docs/7.4/interactive/functions-sequence.html
471
- optionally, introduce EDITABLE_AUTONUMBER_FIELDS driver flag
472
PiggZ_ js: and to ensure you always have id 1 and 2, well.....they would be anyway at db creation time as sequence = 0
473
js PiggZ_: but users ofter want to enter it anyway
474
js eg. sqlite increments its autonumber to 1001 if you enter 1000
475
js we want nothing more that that
477
PiggZ_ personally, i never want to enter a value into autonumber.....autonumber usually = pkey, so its best to let the db handle it
478
js If use want strict sequences to be used, he can:
479
js 1) hide autonumber column at all
480
js 2) set it not-editable
481
js 3) or just do not touch this column
482
PiggZ_ well then, its probably best to set the value of the sequence if a value is manually entered...if possible
484
- add an QAsciiDict of (reserved) SQL keywords and use it in Driver::escapeIdentifier()
485
- add FieldType and move things like typeGroupString() there
486
- CRASH: removing tables when a query still uses it.
487
HOW TO FIX: Add TableSchema::Ptr, QuerySchema::Ptr, etc.
488
-- related to above: add a possibility to return all objects (and optionally all opened objects)
489
thad depend on a given table
490
-- we could also add a GUI tree to show these dependencies
491
- add permissions information to connection : and - for sqlite - check if file is RO
493
- add kexi__toremove table, and use it to remove objects on begin connection
494
- [Kexi 0.2?] sometimes a user has got only one database availaliable on a server
495
(eg. when server is commercially hosted). Somethime user isn't just able
496
to create database because of insuffficient privileges.
497
Solutions --> add a possibility of sharing multiple projects within the same database
498
* kexi__* tables will be shared
499
* prefixes can be needed for table names (add option to set or unset this)
500
* prefixes will be hidden (stripped out) by KexiDB from real names, eg. 'mydb_mytable' -> 'mytable'
501
* let's set default prefix equal to database name
502
* within a group of "projects sharing the same databse" it will be easier to:
503
** mount (attach) external projects to an opened Kexi project
504
** run queries using tables from many projects
506
** decreased modularity and data encapsulation
507
** possible problems with transactions and user access rights
508
** custom table names can look weird outside Kexi
509
** the feature adds another level of complexity to KexiDB
510
-define "login timeout" setting (in seconds) so connecting can rely on this value.
511
The setting could be assigned to a given connection data,
512
but could be also defined globally for the application.
513
(note: db:login-timeout is defined by opendocument spec.)
514
- take a look at agrep: http://www.tgries.de/agrep/ -- looks loke it manages to convert
515
non latin1 characters to latin1, eg. '' to 'a':
516
"* option -ia searches case-insensitive
517
ISO characters are mapped to the nearest lower ASCII equivalent."
518
- support for COMPOUND KEYS, ie. keys with 2+ fields; http://en.wikipedia.org/wiki/Compound_key
519
- OPTIMIZATION: use PREPARE and EXECUTE statements for some backends, eg. for pgsql:
520
(excerpt from http://www.postgresql.org/docs/8.0/interactive/sql-prepare.html)
521
1. Create a prepared query for an INSERT statement, and then execute it:
522
PREPARE fooplan (int, text, bool, numeric) AS
523
INSERT INTO foo VALUES($1, $2, $3, $4);
524
EXECUTE fooplan(1, 'Hunter Valley', 't', 200.00);
525
2. Create a prepared query for a SELECT statement, and then execute it:
526
PREPARE usrrptplan (int, date) AS
527
SELECT * FROM users u, logs l WHERE u.usrid=$1 AND u.usrid=l.usrid
529
EXECUTE usrrptplan(1, current_date);
530
3. For completnedd, provide KexiDB API for "DEALLOCATE" as well
531
- Implement "copy table" feature.
532
To copy table t1 as t2 with data use: "create table t2 as select * from t1"
533
To copy table t1 as t2 without data use: "create table t2 as select * from t1 limit 0"
534
NOTE: pkeys, triggers, default values are not copied?
536
- BLOBs in MySQL: max_allowed_packet is 1MiB; read http://dev.mysql.com/doc/mysql/en/blob.html
537
and http://dev.mysql.com/doc/mysql/en/server-parameters.html
538
-- http://bugs.mysql.com/bug.php?id=1605 "MySQL protocol (it does not send 'chunked streams'
539
for blobs...The client has to read the _entire_ blob into memory."; use:
540
"select substring(document, 1, 10240) from documents where docid='3'" this to get chunks:
541
"select substring(document, 10241, 10240) from documents where docid='3'"
543
-- Other approach: store binary data using two tables 1st for metainfo about the data,
544
2nd for data chunks (e.g. 64KiB each): http://php.dreamwerx.net/forums/viewtopic.php?t=6
546
????? is it possible to just use a database and store the kexi stuff in a .kexi file?
547
jstaniek ruurd: you just dont want to create kexi__* tables on your database?
548
ruurd yes, and use an existing database.
549
jstaniek ruurd: that's planned but note:
550
jstaniek this option doesn't offer you atomic changes to database schema, by definition, because two database conenctions are started concurrently.
551
jstaniek So we'll need to behave with care...
552
jstaniek ruurd: of course this is easier to do with read only databases or even databases where you don't plan to change schema (but just process db records)
553
- add Connection::ping() or so, using http://dev.mysql.com/doc/mysql/en/mysql-ping.html
554
and use it after being idle for a while (eg. call it every minute; also add an option for the delay)
555
- Move ObjectStatus to kexidb. Merge with Object.
556
- Support for opening .sql files: just import it on opening to in-memory database and dump it back into
557
.sql text on exisitng. Add optional compressing.
558
- Add support for compressed kexi files (better keep the same .kexi extension instead of .kexiz)
559
- Implement tree structures using idea #5 described here http://www.depesz.com/various-sqltrees.php
560
(does pgsql require this hack?)
561
- double values are still rounded: consider storing them in memory as a decimal type
562
(e.g. using a special Q_LLONG+decimalplace class); needed e.g. in KexiQueryParameters::getParameters()
563
- handle input mask using a special KexiDB::FieldInputMask class
564
--needed in forms (KexiDBLineEdit::setColumnInfo()) and table views
565
- add setValue() to cursors: this will REQUIRE a buffered cursor, since we cannot run sql
566
before fetching is done... See http://kexi-project.org/cgi-bin/irclogger_log/kexi?date=2006-08-03,Thu&sel=229#l225
567
- use ThreadWeaver library for threaded KexiDB version
568
- tables can use queries as a row source for lookup fields, what can lead to infinite recursion;
569
FIX this by either: 1) not allowing to use such table in a query (see kexi/to_fix/Ksiazka_adresowa2_recursive_query_deadlock.kexi)
570
or 2) delayed loading of query column
571
- parse server-specific messages like "column t is not unique" in sqlite with and use this
573
=== KexiDB Parser TODO ===
574
- add a method for replacing a single given table name in the statement (useful on table renames)
575
- add clever query relatins parsing
576
(needed for switching back to GUI editor from text mode)
577
- add flexible support for date/time constants
578
- store text position information (line, column) for every token so it can be used
579
in SQL editor to place cursor in case of errors
580
- add translation method for SQL operators to driver,
581
so SQLite can return "CONCAT" and mysql return "||" for concatenation oeprator, and so on
582
- improvement in terms of data recovery:
583
assume you're entering a long record and db connection is dead before saving...
584
the record could be buffered locally before closing Kexi application... and on next startup, re-sent.
585
This can work in simple cases (when complex transactions are not involved).
586
- report "ambiguous field name 'id'" error for ambiguous queries like "SELECT a.id, b.id FROM a, b ORDER BY id"
587
- add types checking to **Expr::validate()
588
- consider switching from bison/flex to http://www.antlr.org/
589
- make parser reentrant (for now we've used a workaround)
591
=== KexiDB MySQL Driver TODO ===
592
- use InnoDB instead of MyISAM tables because of transactions support
593
http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-transactions.html
594
Kexi's MySQL driver uses MyISAM engine, but transaction support needs InnoDB
595
(there should be also an option available to set on CREATE TABLE, and on an default for CREATE DATABASE)
597
=== KexiDB PostgreSQL Driver TODO ===
599
- set version information in drv_useDatabase()
600
There's connection_base::server_version() in libpqxx trunk -
601
http://thaiopensource.org/development/libpqxx/file/trunk/include/pqxx/connection_base.hxx
604
- add tests for DatabaseProperties
605
- add tests for PreparedStatement
606
- add tests for migration
609
- reuse KexiNameWidget in KexiNewProjectWizard!
610
- use KPasswordDialog::disableCoreDumps() for security reasons
611
- IDEA for connection shortcuts:
612
Mysql Query Browser has a simple xml file defined:
613
http://dev.mysql.com/doc/query-browser/en/mysql-gui-appendix-store-connections.html
614
- allow to choose if the file should be locked (opened in EXCLUSIVE mode) or not
615
(THIS SHOULD BE DEFAULT BEHAVIOUR)
616
- (linux) remove stupid message 'Please select the file to open'
617
when opening exisiting server project and clicking 'OK'
618
- database files accessed remotely: make it work without copying a file to temp. dir.
619
(maybe even without copying entire file? - patching sqlite required)
620
- add "Open read only" checkbox to the file browser
621
(Driver::ReadOnlyConnection option already allows to open in read only mode)
624
- add kexicmd as a symlink to kexi binary, for totally non-gui usage
625
- just drop all tables when database already exist
626
(so recreating database will be available even
627
if you have only access to one database).
628
- GRANT privileges for non-root (current?) user for newly created db
630
=== Mimetypes/icons TODO ===
632
application/x-vnd.kexi.project.sqlite2
633
application/x-vnd.kexi.project.sqlite3
634
application/x-vnd.kexi.project.shortcut
636
application/x-vnd.kexi.connections.shortcut
637
application/x-vnd.kexi.table.shortcut
638
application/x-vnd.kexi.query.shortcut
639
- remove x-vnd.kexi.desktop in kdelibs
640
- copy mimetypes and magic def. to kdelibs (keep it within Kexi for compat.)
641
- remake kexi mime type svg icons
642
- copy kexi mime icons to kdelibs, remove old one
643
** Ask SQLite devs for a possibility for adding a field to indicate kexi-sqlite
644
format without opening database
649
-translate the current content from polish to english
650
-?? migrate english content to wiki format
651
-move polish content to .po translation file
652
-Add this to the preface http://encyklopedia.helion.pl/index.php/Kartotekowa_baza_danych
653
-www: mention what features are already available and what is planned in terms of:
654
-- general features, example: http://www.e-cen.pl/index.php?co=wiecej&id=26&dzial=8
655
-- scripting, example: http://www.e-cen.pl/index.php?co=wiecej&id=22&dzial=6
658
-- "assign action" to a button
659
-- CSV import/export/copy/paste (csv import is explained on kexi@kde.org ML; 2007-03-23)
661
=== 2005 PRO TODO ===
662
-greatly improve sql parser
663
-greatly improve sql gui designer
666
-more widgets for db-aware forms
667
-add simple reporting
668
-finish server support
670
--fix permission problems
673
=== after-0.9 TODO ===
674
TODO: add time zones support: 1994-11-05T08:15:30-05:00
675
TODO: update to sqlite3.1 and use it's features http://www.sqlite.org/releasenotes310.html
676
TODO: 0.2: reuse http://segfault.is-a-geek.net:8001/feedback-kinitiator/
677
gfx can be found here: http://cvs.sourceforge.net/viewcvs.py/kinitiator/
679
TODO: look at recent Martin's stuff: http://homepages.cs.ncl.ac.uk/m.a.ellis/kexi/
683
- update shared actons availability ONLY AFTER we've switched to other kexidialog base,
684
not just on LOST FOCUS
685
- for now: clicking on empty menu bar's item (eg. "Format") causes to losing shared actions state
686
- make core/ non-gui lib. Move data creation code out of KexiDialogBase.
689
- reuse most of KexiFormPart code in KexiReportPart (eg. creating shared actions)
690
- line widget should use special resize handle set -- with only two rectangles (Forms too)
693
- do not execute KMdiMainFrm::switchOffMaximizeModeForMenu() when true==QApplication::closingDown()
697
-change form's object caption to "caption" property, when changed and conversely!
700
1. test dipesh.kexi - ID column is not used on row updating!!!
702
2. dipesh np, I also found a crasher witch is maybe related.
703
dipesh just change a value, go to design mode and switch back to dataview...
704
dipesh [KCrash handler]
705
dipesh #3 0xb59b156f in KexiFormScrollView::createEditor ()
706
dipesh from /usr/lib/kde3/kexihandler_form.so
707
dipesh #4 0xb7e5f502 in KexiDataAwareObjectInterface::startEditCurrentCell ()
708
dipesh from /usr/lib/libkexidatatable.so.0
709
dipesh #5 0xb59b276a in KexiFormScrollView::valueChanged ()
710
dipesh from /usr/lib/kde3/kexihandler_form.so
711
dipesh I look where the crasher is coming from.
712
dipesh oh, in KexiFormScrollView::createEditor
713
dipesh column( col ) returns NULL
714
jstaniek dipesh: it's only within your example project...
715
dipesh therefore column( col )->readOnly() crashes...
717
reuse KWallet http://events.kde.org/info/kastle/presentations/kwallet-kastle-2003.ps
719
=== Interesting features ===
720
- Add random names/surnames generator: http://www.ruf.rice.edu/~pound/
721
Good for generating good-looking random data for a given table.
722
-- Autodetect 'name' columns or ask user to describe what he wants.
723
Comply with data validation rules.
724
-- use famous 'Lorem ipsum dolor sit amet...' test text for longtext types
729
TODO: in KexiMainWindowImpl::slotProjectOpen() add support for starting new kexi instance for selected conn data
730
(we need to remember from what filename has been a conndata loaded)
731
TODO: move ConnectionData::savePassword to QMap<ConnectionData*,bool> KexiDBConnectionSet::savePasswordMap or so
732
TODO: Forms: fix label width resizing when entering text within inline editor
733
TODO: Forms copy more properties (like palette) to inline editor from e.g. text label
734
TODO: Forms: fix: double clicking unselected widget doesn't switch us to inline editing mode
735
TODO: Forms: object tree: enable sorting by name after clicking "name" header;
736
enable sorting by class,name by clicking "class" header
739
- when using a startup item, touch the file for better sorting:
740
http://www.koders.com/c/fid97791600CA5D0A2EA559490BD9444B0775B2370A.aspx
742
- add "Save Special->Shortcut file for this project" action
743
- add "Save Shortcut file for this connection" action
744
- FOR SLOW CONNECTIONS: show progress bar on:
745
-- retrieving a list of projects (in KexiProjectSelectorDialog)
746
-- opening a project (in status bar?)
747
- Also, add "cancel" button near the progress bar (reuse the one from KMail?)
750
TODO: If a form has no focus, FormManager::windowChanged() and KexiFormView::setFocusInternal()
751
don't work properly (setFocus() is not available...)
755
--pasting large images makes chooser button invisible; maybe place it on top of the widget?
756
--set better default for focusPolicy, implement setFocus()
757
--add filter property (using KImageEffect)
758
--make image-related actions undoable/redoable in design time
760
--add for movies/animations support using QMovie to KexiDBImageBox
761
or (most probably) inherit KexiDBImageBox as KexiDBMovieBox
762
---KexiBLOBBuffer::pixmap() shouldn't be used but data() should be used to create QMovie object
763
in each movie widget itself because even if the same QMovie was used in many movie widgets:
764
a) speeds can vary between movie widgets, b) different forms can be opended in different moments
765
so playing starts in different moments, c) one or more movies can be stopped while others not
766
---add following related properties: int playbackSpeed (in frames per second, 0==default),
767
bool autoStart (true==default), playbackControls (false==default), bool loopPlayback (true==default)
768
bool pauseAfterEnd (0==nothing==default)
769
-property pane: shrink widget name displayed at the top by adding "..." to avoid problems
770
with pane's size when selected widget has very long name
771
- resize handles are always black: this is bad on black background!
772
- use KURLLabel as an option for push button widget
776
- ADD "restrict to list" OPTION: don't copy 1st row's value if there's no value in the combo
777
--> needed for 1st column of Query Designer
780
- ConnectionData: make local sockets default for unix, instead of tcp/ip
783
- removed conflict between standalone and Calligra version by:
784
-- inserting "standalone" word into module names,
785
eg. kexidb_mysqldriver.so -> kexidb_mysqldriver_standalone.so
786
-- renaming kexi to kexi-standalone
787
- rename "data view mode" to "browse view mode" (as in Filemaker)
788
- add "File->Mail..." action (requires closing and copying of the sqlite file, if locked)
791
- add "Created With Kexi" page and a link to it from k-p.org and kexi.pl
792
- when releasing new Kexi version publish: A first look at Kexi x.y" page, like this:
793
http://software.newsforge.com/article.pl?sid=05/09/28/1345228
794
- short reasoning for using db abstraction layers:
795
http://developers.slashdot.org/comments.pl?sid=164824&cid=13755151
798
ACCESIBILITY - Mouseless Operation Problems (Calligra 1.4.1):
799
- MORE: http://accessibility.kde.org/reports/calligra-1.4.1-accessibility-assessment.pdf
800
- It is not possible to select the data type of a
801
field in the table editor. Alt+DownArrow does not work.
802
- When editing the fields of a table, it is not
803
obvious how to flag a field as a primary key.
804
WORKAROUND: Use Popup Context Menu (Menu key) and select Primary Key, OR use Edit | Primary
805
Key on the main menu, OR use Property Editor.
806
- In the Property Editor, is not obvious how to
807
change a boolean property. Alt+DownArrow does not work.
808
- It is not possible to change the value of a
809
property in the property editor that has a picklist of possible values, for example,
810
SubType. Alt+DownArrow does not work.
811
- When creating a query, it is not possible to add a table to the query.
812
- Not possible to select a column, table,
813
totals in Query Columns panel. Alt+DownArrow does not work.
814
- It is not possible to add a widget to a form.
815
- Pressing Tab key while focus is in the Form
816
Editor window, but not on any widgets on the form, crashes Kexi.
817
- It is not possible to change the size of a
818
widget in the form editor without the mouse.
821
- update conn dialog gui
822
example: http://www.ntpb.co.uk/kexi/msn.png
825
Migration (Import Project Wizard) TODO:
826
- change drivers comboboxes to KexiDBDriverList
827
(impl. this one with drv name and description columns)
828
- close currently opened file-based project if it's the same as imported one
829
(do not save anything)
830
- 'select source db type' page: change "sqlite/msa/mysql/pg" to "sqlite/msa/server database"
831
because type of server db is in fact selected on the next page (source conn selection)
832
- set the same path for "destination" file browser as for "source" one
833
- add "do not create system tables" option to the wizard
834
- reuse the migration framework to support "offline mode" - for instance usable while moving with
835
out of network with a laptop, by copying the relevant remote tables to a local temp db;
836
this is already implemnted e.g. in MSA 2k7:
837
http://blogs.msdn.com/access/archive/2006/10/13/sharepoint-apps-offline-and-intro-to-sharepoint-designer.aspx
838
coming back online requeres data merges what is not easy as resolving potential conflict may be needed
839
(example: http://clintc.officeisp.net/Blogs/2006/40%20-%20SharePoint%20Offline/10%20-%20Conflict%20Resolution%20UI.JPG)
842
- add checks for "no space left on device" error (otherwise Kexi will crash)
843
- fix currency converting
844
- use MSysRelationdhips table to read MSA db relationships (easy, it's not encoded)
846
=== Kexi Web Site TODO ===
847
- move to mediawiki (JJ?)
848
- Add "Features" page like this http://www.agata.org.br/us/index.php?file=features.php
849
- Extend "Credits" page with Gold Users/Translators, etc. like here:
850
http://www.agata.org.br/us/index.php?file=thanks.php
853
- copy/paste doesn't preserve caption text (maybe caption should be copied
854
to from QueryColumnInfo to a property)
857
- fix highlight for data mode! (very old bug)
860
- fix: server as destination is broken
863
- switch from dialog to wizard; add filedlg widget as the 1st page
864
- add better detection for CSV data with \t delimiters (needed for pasting from spreadsheets)
865
- add option for storing import settings
866
- always test using e.g. this file: http://cvs.sourceforge.net/viewcvs.py/*checkout*/wcuniverse/priv/units/units.csv
867
- change boolean "First row contains column names" to 3-value combo:
868
"Get column names:" ["None", "From the first row", "From the first imported row"]
869
- add "skip empty columns" and "skip empty rows" option
870
- (advanced) there can be a column that is a result of exporting combo box visible values;
871
in this case add option for normalizing the table using existing (or new) lookup table
872
- add clear message when :
873
-- primary key cannot be set because of non-unique values
874
-- number cannot be set because non-number values
876
- add "fix non-unique valuesID /add missing ID values" option for PK column
877
- add option for skipping particular columns
878
- add option for filtering import results afterwards:
879
-- to limit number of rows stored in db and
880
-- to process columns using expressions
883
- add progress bar and wizard
884
- add "Include row count as first column - include row number in the first
885
column of each row" option
886
- add "Include column types on top" option
887
- add "Fixed columns width" option (can be extended to support "fixed width text" format)
888
- add "Set text to (null) on NULL value - use the string "(null)" to represent
889
a NULL value in the document" option
890
- add "Replace empty/Null fields with..." option
891
- add "Lines terminated with.." option (\n or \r\n or \r)
892
- add option for compression (gzip, zip, bzip2...)
893
- MORE TODOs here: http://www.aquafold.com/docs-qw-save-results.html
894
- by default, use delimiter=\t and quote=none for clipboard (needed for copying to spreadsheets)
895
- add "Strip leading and trailing blanks off of text values" option
896
- deal with lookup fields: for every such field
897
-- add option for exporting lookup tables as separate files
898
-- add option for exporting a) both visible values and indices b) indices only c) visible values only
899
-for now c) is supported
902
- consider export to at least these three formats: http://csv2xml.sourceforge.net/xmlmodes.html
903
(templates/XSLT could be also supported)
906
- handle KApplication::shutDown()
909
- on opening detect whether a table exists (empty table view should not be displayed)
910
- Another Kexi instance started from KexiMainWindow using QProcess freezes after opening
911
3rd table or so. Move to KProcess on Linux.
914
- if you place e.g. a label in a container like a tabwidget and doubleclick it to edit the content,
915
the label jumps around. ccpasteur said he fixed it last year ;)
916
- only change bg color of tab widget, not its outer area; fix changing tabs bg color
919
- error "BLOB/TEXT column 'isbn' used in key specification without a key length"
920
when importing books.mdb into a mysql db
923
- after setting "auto" tab order, we need to close and open the form to get tab stops to work properly
926
- use KLineEdit::displayText() to get partially filled date or time values like 20__-__-__;
927
then use this for checking data validity (?)
929
TODOs from Jeff Denman:
930
- add command line option for performing a complete database import, especially for MSA files
931
- instead of always displaying "object names" in the project navigator:
932
display "captions" but offer an option to display "names" instead;
933
AND, optionally: offer a full-width window with the list of database objects
934
- import bug for MSA: no values for this field after import:
942
MS Access: Currency values and numeric data used in mathematical calculations involving data
943
with one to four decimal places. Accurate to 15 digits on the left side of the decimal separator
944
and to 4 digits on the right side.
945
-Decimal Number (NUMERIC?)
946
MS Access: Decimal Stores numbers from -10^381 through 10^381 (.adp),
947
from -10^281 through 10^281 (.mdb); decimal precision: 28 B, storage size: 12 B
950
TODO Migration from Native SQLite3
951
- use sqlite3_column_decltype() http://sqlite.org/capi3ref.html#sqlite3_column_decltype
952
and sqlite3_column_name() to know column names and types.
953
Add reasonable case-insensitive mappings like "INTEGER|integer|INT|int" -> [integer]
954
- or: for import data from native-sqlite databases: use "pragma table_info(tablename)"
955
-- maybe also use "pragma table_info" for sanity checking, or more in kexidb driver??
956
- use "pragma user_version={32bit int}" (http://www.sqlite.org/pragma.html) to set, say, kexidb version.
957
This information is stored in a fixed place in the sqlite3 header, so it's possible to read it using
958
KDE Mime Type system (a magic data defined in share/mimelnk/magic).
961
- FIXME sometimes order of imported fields is invalid: PKEY field jumps to end.. (books2.mdb)
964
- for FP numbers: allow to start entering value from "." or ","
967
- add "navigationCaption" property to table and form, so "Records:" Label in the record nav. becomes e.g. "Bananas:"
968
see: http://blogs.msdn.com/thirdoffive/archive/2006/04/06/560454.aspx
971
- Checkbox widget with focus policy set to Tab has problems with KexiDataAwareObjectInterface::acceptEditor()
972
because m_editor is set to _currently focused_ widget (problem where there are e.g. >1 checkboxes)
973
Partially fixed by setting StrongFocus policy as default;
974
FIX THIS for other focus policies too...
979
- do not require .la in libltdl
982
- decrease # of shared libs, see Clarification at the bottom
983
of http://people.redhat.com/drepper/no_static_linking.html
985
== April 1 2007 TODO ==
986
- show the screenshot of kexi displaying yes/no/maybe-dialogs, as for the "Woman edition"
989
Kexi >2.0 (probably late 2007): Add SQLite >3.3 driver. Offer exporting similar to the one between 2.8->3.0.
990
Think about backporting the >3.3 driver to Kexi 1.1.
994
- for table t1(a,b,c) delete column t1.c:
996
CREATE TABLE t1_new(a,b);
997
INSERT INTO t1_new SELECT a,b FROM t1;
999
ALTER TABLE t1_new RENAME TO t1;
1001
- for table t1(a,b,c) rename column t1.c to t1.d:
1003
CREATE TABLE t1_new(a,b,d);
1004
INSERT INTO t1_new SELECT a,b,c FROM t1;
1006
ALTER TABLE t1_new RENAME TO t1;
1010
- enable edit->copy, actions, etc. for Data View
1011
- ImageBox: show a tootip with large image and its name if the image was cropped
1012
or only its name if the image is not cropped
1013
- AutoField: highlighting the label when the buddy is focused
1014
- AutoField: handle label editing after double clicking
1015
- AutoField: draw required field in bold (or optionally add (*))
1016
- display default values in other widgets showing text
1017
- new action for button widgets: open table/query
1018
+with query parameters taken from a line edit
1019
- provide "Edit->Clear Table Contents" action in forms too
1020
- autofield: after setting form's data source to a valid value,
1021
"unbound" mark should disappear in design time
1022
- rename "Source field" to "Widget's data source" in the data source pane
1023
- Designer bug: "Click a container widget (or a form surface itself),
1024
where widgets are inserted and select one of the layout
1025
types from the context menu item Layout Widgets. "
1026
"I tried this with the Frame, the Group box and the Tab
1027
widget, the menu item Layout Widgets is not available. You
1028
have to select the widgets inserted in the contrainer widget
1029
to make the menu item available. "
1030
- unhide "Editor type" property for auto fields (it's hidden in 1.1 due to a crash)
1033
- inform Raphael about calligra.org/1.5/ url, give him the php code
1036
- i18n("Lookup") == Odnosnik (Ks. eksperta, s. 53)
1037
- add setting for default length of the text type
1038
- allow to set default values for BLOB types (requires a change in KoProperty as well)
1039
- 2.0: Add drag-and-drop-to-create-lookup-column to the "lookup column" tab of the property pane.
1040
This should be implemented by displaying a list of fields and allowing to drop one into the
1041
table view. Then, lookup column properties should be autoconfigured.
1042
- lookup column: support these properties of LookupFieldSchema:
1043
columnWidths(), columnHeadersVisible(), maximumListRows(), limitToList(), displayWidget()
1044
- show warning if there are no bound and visible columns defined (for now, this is just ignored
1045
and user cannot select a value from the list in the data view)
1047
=== Simple Printouts TODO ===
1048
- cell contents can be too large for a single page - split it to man pages if needed (true for large texts, blobs..)
1049
- add support for BLOBs
1050
- fix printing and previewing for horizontal arragement
1055
+To move to the record number box (record number box: A small box that displays the current record number
1056
in the lower-left corner in Datasheet view and Form view. To move to a specific record, you can type
1057
the record number in the box, and press ENTER.); then type the record number and press ENTER
1059
+ Add moving to next record when Tab is pressed at the last field
1060
+ Add moving to prev record when BackTab is pressed at the 1st field
1063
== TODOs for 1.1.2 ==
1064
- support combo box within the autofield widget
1065
(done?): notify and update data source after schema changes
1066
- todo: fix things like SELECT *, cars.owner AS ab, 1.3 AS wyr1, persons.surname FROM cars LEFT OUTER JOIN persons ON cars.owner=persons.id WHERE cars.owner > 3
1067
(crash - see Simple_Database.kexi - persons_and_cars query has lookup fields and OUTER JOIN is NOT PARSED
1068
-- we should generate the SQL in a different way for the Query Designer)
1069
- fix horizontal scrollbar hiding in the "Available fields" list box (a problem with layouts?)
1070
- display a message when connection is lost...
1074
- fix crashes when table schema referenced by a combo box changes
1075
- replace QDate{Time}Edit in koproperty with KLineEdit, similar to the one in KexiTableView
1077
TODO: "Database "z3" created but could not be closed after creation." err. on win32 after creating a pgsql db
1078
TODO: PqxxMigrate::drv_copyTable(): we've switched from BLOBs to LongText
1079
==KexiDB::Field::LongText part shoud be removed; add other backward-copatibility code (how?)
1080
if (fieldsExpanded.at(index)->field->type()==KexiDB::Field::BLOB || fieldsExpanded.at(index)->field->type()==KexiDB::Field::LongText)
1084
- TODO: : use main/startup/TemplateItem.ui and main/startup/TemplateWidget.h
1085
http://lxr.kde.org/source/KDE/kdebase/kicker/kicker/ui/addapplet.cpp?v=3.5-branch#188
1086
- TODO look at schemas at http://www.databaseanswers.org/data_models/index.htm
1088
Find/Replace REPLACE
1089
- use this for replace: virtual bool columnEditable(int col);
1092
- compare KexiUtils' tristate class with http://boost.org/doc/html/tribool.html
1095
- implement more mimetypes for blob fields
1099
- fix selecting table items with mouse click
1100
- fix painting for sql history
1102
- update state of "PK" button when user moves cursor between table rows
1104
- set inital scroll to (0,0)
1105
- fix displaying cells when scrolled vertically
1110
TODO: fix displaying default values in comboboxes (form and tableview)
1111
TODO: use KCompletionBox in (editable/noneditable) comboboxes
1114
- fix KMenu::addTitle():
1115
http://api.kde.org/4.0-api/kdelibs-apidocs/kdeui/html/kmenu_8cpp-source.html#l00144
1117
TODO: check reports at scan.coverity.com
1118
TODO: shared actions are not so usable now as we move actions down to KexiWindow
1120
NOTE (put into wiki): use QWidget::setAutoFillBackground(true) on widgets that should have their own backgrounds
1122
TODO: report crash in QDockWidgetPrivate::nonClientAreaMouseEvent() when dragging and dropping dock widget
1123
(state=0, crash when accesing state->ctrlDrag):
1124
QtGuid4.dll!QDockWidgetPrivate::nonClientAreaMouseEvent(QMouseEvent * event=0x00d9c474) Line 863 C++
1125
QtGuid4.dll!QDockWidget::event(QEvent * event=0x00d9c474) Line 1353 C++
1126
QtGuid4.dll!QApplicationPrivate::notify_helper(QObject * receiver=0x049d1cb0, QEvent * e=0x00d9c474) Line 3558 C++
1127
QtGuid4.dll!QApplication::notify(QObject * receiver=0x049d1cb0, QEvent * e=0x00d9c474) Line 3499 C++
1128
kdeui.dll!KApplication::notify(QObject * receiver=0x049d1cb0, QEvent * event=0x00d9c474) Line 300 C++
1129
QtCored4.dll!QCoreApplication::notifyInternal(QObject * receiver=0x049d1cb0, QEvent * event=0x00d9c474) Line 533 C++
1130
QtCored4.dll!QCoreApplication::sendSpontaneousEvent(QObject * receiver=0x049d1cb0, QEvent * event=0x00d9c474) Line 205 C++
1131
QtGuid4.dll!QETWidget::translateMouseEvent(const tagMSG & msg={...}) Line 2774 C++
1132
QtGuid4.dll!QtWndProc(HWND__ * hwnd=0x00041540, unsigned int message=161, unsigned int wParam=2, long lParam=9307228) Line 1407 C++
1133
USER32.DLL!GetSysColor()
1134
USER32.DLL!GetSysColor()
1135
USER32.DLL!DispatchMessageW()
1136
QtGuid4.dll!QGuiEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags={...}) Line 992 C++
1137
QtCored4.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags={...}) Line 142 C++
1138
QtCored4.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags={...}) Line 187 C++
1139
QtCored4.dll!QCoreApplication::exec() Line 752 C++
1140
QtGuid4.dll!QApplication::exec() Line 3056 C++
1142
HINT: QWidget::setFocus() is not virtual, use event()
1144
-QVector::insert(i) inserts a value, not sets value at i as in QPtrVector::insert()! use vector[ i ] = value.
1145
-QVector::remove() entirely removes a value, not clears the value as in QPtrVector::remove()! use vector[ i ] = 0
1146
-QVector::take(), like above
1147
-QVector::count() == QVector::size() - counts null and not null values, unlike QPtrVector::count()!
1148
to count nonnull values use vectore.size()-vector.count(0)
1149
- KexiDataAwarePropertySet: remove() is now called eraseAt(); insert() is now called set();
1150
removeCurrentPropertySet() is now called eraseCurrentPropertySet()