Jump to content

Kexi/Releases/3.1.0 Changes

From KDE Community Wiki

General highlight: focus of the 3.1 release has been put on overall stability and preparing the KEXI frameworks, KDb, KProperty, KReport, for general use other (non-KEXI) software projects. API of these frameworks since the final 3.1.0 release is guaranteed to be stable until the 4.0.0 release.

Since the 3.0.2 release KEXI and the frameworks received over 220 improvements and bug fixes.

Documentation of the frameworks has also improved and is available at api.kde.org, although tutorials and reference have to be added in coming releases. KEXI user's manual is outdated as it covers older versions 2.x. We're sorry for the inconvenience.

Together with stabilization of the KEXI frameworks, improvement of translations for messages is also expected.

Changes in KEXI

Highlight: Integration of KEXI with non-KDE Plasma desktops has been further improved. On such desktops (e.g. XFCE, MS Windows) KEXI now displays simplified file requester. It is also possible to use this feature on Plasma desktops. Moreover settings of a single-click mode is better detected on non-KDE Plasma desktops.


KEXI app 3.1 uses all the three KEXI frameworks and the version 3.1 is a minimal version required by to run the app.


  • 3.1.0 Beta 1 (3.0.94)
    • 72d5368a3 New: Add support for setting character encoding for source database to Import Table Assistant
    • Bug fixes
      • 4457b59d9 CSV import assistant: switch back to checkboxes from command link buttons
      • 87b9be923 CSV import assistant: fix layout of delimiter widget
      • 1afb7fbf6 CSV import assistant: Improve getting filename selection from the new file requester
      • c4103f731 CSV import assistant: Single click on file requester's item moves to next page
      • 10a3e4d85 Fix broken CSV import (Bug #386102)
      • 17fcaf440 Rework the KexiFileRequester to use a simple and light QTreeView
      • c7385a4af Update mime types info when needed
      • 608d6b4db Fix "wait" cursors
      • 7e783f1bc Fix crash when deleting or renaming a table (Bug #379078)
      • 28f684a4d Table Designer: don't warn about non-existing table or query when lookup fields are cleared
      • 97472ba5d Table view's combo box editor: delete the combo button when needed, this fixes possible crash when user clicks the non-deleted button
      • d98f53f12 Fix possible crash when table view containing combo boxes is re-used (Bug #389029)
      • b0eddb7aa Fix recent dirs handling for file widgets (bug from Kexi 3.0.x), move recent start/recent dirs handling to KexiUtils
      • f69ac59ad Forms: Fix double moving forward/backward on tab/backtab key press
      • 1400c0fbc Before physical altering or deleting table ask the user to close depending table/query/report/form (Bug #371896, Task #7704, Review #8118)
      • 6cc93c7c2 Queries: Synchronize the "dirty" flag between Design and Text views
      • 619f967f1 SQL designer: remove possible memory leak if the parsed query object is still present on destruction
      • ab0373aec Queries: fix possible crash in data view when the query design changes in a design view
      • 6da3188a6 Queries: after parsing the SQL only assume the query changed if the SQL differs from the previous SQL
      • 80363610d Fix memory leak in Project data object (list of auto-open objects)
      • cbb7e9a9c Fix detection of single-click mode for XFCE
      • 12c56e660 Reports: Make jumping to specific page possible
      • 9f7e374b2 Reports: Keep information about type of data source (table or query). Detects if needed. (Bug #385071)
    • Optimizations
    • Improvements
      • acec3e586 Set Cancel as default for critical question message boxes
      • e6d0010d1 Use Delete verb rather than Remove for consistency
      • 16da909e5 Don't use empty space by object tabs (like in web browsers)
      • 4adbe1bd3 Backport experimental scripting in Kexi. (Task #4649, Review #6037)
      • c220b122c Add config file setting to force the use of KFileWidgets or simple file requesters independently of the desktop (Task #5791)
      • e246e138c Detect whether native operating system's dialogs should be used
      • ec71dc00c Query Designer: Improve "The query you entered is incorrect. Do you want to cancel any changes made to this SQL text?" question
      • b141d08d6 Query Designer: Improve "Do you want to save invalid query?" question
      • ec3ed6fd9 Import Table assistant: improve appearance of the "Finish" page and logic for buttons
      • ef638949c Project Import assistant: support single-click accepting of source databases if needed
      • 9d113c82f Translations and typo fixes
      • ae73eabbc Add option to build without KFileWidget, default on Windows
      • 1b9febfe5 Connection selector widget: select Next step on double click, don't select on highlighting
      • 12d1adf10 Add location edit and file filter combo work in KexiFileRequester, add filename completion
      • 9d63a4f52 Reports: Remove traces of "external data" support, this is not supported since Kexi 2.3
      • ae0116bb2 Reports: Remove no longer necessary "Set Data" button from the data source tab
    • Docs and examples
  • 3.1.0

Changes in KDb

KDb is a database connectivity and creation framework for various database vendors.

Highlight: Query schema cache is now created in context of database connections, so there is one cache per connection, not one global. That said, table and query schema objects themselves are now independent of connection objects.

There are multiple renames in the API of KDb to make it easier to use. Private APIs have been moved out of the public header files. More enums have been added to replace harder to read boolean arguments.

Generation of native SQL statements that is performed in the background by KDb has been improved to cover more use cases, e.g. COLLATION and ORDER BY keywords are now more carefully used as do table aliases and lookup fields features. SQL parser of user-defined statements written in a KDbSQL dialect now reports more errors when needed and accepts more statements that were previously not recognized as valid.

New debug functions added in 3.1 can be helpful while developing with KDb.


  • 3.1.0 Beta 1 (3.0.94)
    • API changes
      • c9724af4 Add optimized overload KDb::isIdentifier(const QByteArray&)
      • ad942b0c KDbUtils::Property/Set: add operators ==, !=, setCaption(), setValue(), allow Property to be not null even is there is no caption
      • da0ee94a KDbConnectionOptions: add operators ==, !=, add setValue(), make insert() work for valid identifiers only
      • a133a6d4 Add some more const correctness to KDbField and KDbQueryAsterisk
      • 8324d4b0 Add d-pointer to KDbIndexSchema, improve API and docs
      • 52c0091a Add d-pointer to KDbInternalTableSchema for future extensions
      • a004dbe7 Add d-pointer to KDbLongLongValidator
      • 2c8d47d3 Add d-pointer to KDbQueryColumnInfo for future extensions
      • e1bbd778 KDbConnection::TableSchemaChangeListenerInterface -> KDbTableSchemaChangeListener
      • bf289538 Remove abbreviations from KDbResultInfo
      • 95e6ba91 Make KDbTableViewData::autoIncrementedColumn() const
      • 9ba04128 Add more QDebug operators
      • 7c25225f Move KDbLookupFieldSchema::RecordSource to KDbLookupFieldSchemaRecordSource
      • cb098025 Add and clean up operators ==, !=, = for KDbLookupFieldSchemaRecordSource, KDbLookupFieldSchema, PropertySet
      • 47e6a5e0 Add d-pointer to KDbOrderByColumn, use enum class for SortOrder
      • 86706b3a Add many overloads to KDbQuerySchema, remove use of bool args, update docs
      • 61473975 KDbField, KDbFieldList, KDbQUerySchema, KDbQueryAsterisk: clean up virtuals
      • 3556a61f Move KDbQueryAsterisk to separate files
      • 3b2db65b Add d-pointer to KDbQueryAsterisk
      • 8d196081 Fix constructors of KDbQueryAsterisk and KDbField and improve constness
      • 0da02ad6 Replace KDbCursor options with enum (Task #4736, Review #4957)
      • 8647bf71 Make KDbQuerySchemaParameter implicitly shared
      • de724068 Remove operator== from Resultable
      • d7e1200a Improve memory management of raw SQL execution and preparing (Task #5992, Review #5771)
      • 3c662e74 Pass the KDbSqlResult by value to KDb::lastInsertedAutoIncValue
      • 422c62c8 Global API change: SQL -> Sql
      • 013848ab Remove unnecessary inline code from headers
      • 06d49115 KDbTransaction::active -> KDbTransaction::isActive
      • 24da8061 Remove redundant const KDbTableSchema* KDbQueryAsterisk::table()
      • 094b7290 Add operators ==, != for KDbQueryAsterisk
      • 282a5608 Add operator != for KDbTransaction
      • 7394ee0f Replace boolean parameter 'table' with enum in KDbTableOrQuerySchema
      • 91081ea7 Replace boolean parameter 'owner' with enum in KDbTableViewColumn
      • 5492b72c Use enums for KDbConnection::commitTransaction and KDbConnection::rollbackTransaction
      • 499ba8a7 Add and use KDbConnection::QueryRecordOptions
      • ad1e4880 Add and use KDbConnection::AlterTableNameOptions
      • d7397ec6 Add and use KDbConnection::CreateTableOptions
      • b8fad114 KDbConnection::dropTable -> KDbConnection::dropTableInternal
      • a5d50f94 Make KDbSelectStatementOptions implicitly shared
      • 9cddfb10 Move KDbDriverBehavior pointer to driver's d-pointer, add protected KDbDriver::behavior()
      • df0a5eab Add d-pointer to KDbRelationship, assignment and comparison operators, simplify header
      • 22082b9b Add d-pointer to transaction classes, split their headers, move KDbConnection::TransactionOptions to KDbTransaction, improve docs
      • 3962069c Improve constness of KDbTableViewColumn and related classes
      • bccf9296 Add d-pointer to KDbField
      • 0d701f0e Add d-pointer to KDbFieldList
      • c0c0dc1c Add two KDb::escapeString() helpers
      • 70fb2d24 Reduce number of assertions, make many parameters optional
      • ec8ea1af Make KDbConnection::loadObjectData(id) require object type, allow to pass existing query object to parser, use loadObjectData() more
      • 637866b6 Use 'cannot' instead of 'could not' for something that can never work
      • 1d6ce3b6 KDbOrderByColumnList: Remove inheritance from template classes (Task #407)
      • f6e1d8fd KDbField: Remove inheritance from template classes (Task #407)
      • 865aaae8 KDbFunctionExpression and KDbToken: Remove inheritance from template classes (Task #407)
      • 3e87811c Make query and table objects independent of connection (decouple) (Review #7027)
      • e755e3af Cache expanded fields of KDbQuerySchema in context of connection
      • aa2a7a43 Make query and table objects independent of connection (decouple) (Task #6695, Review #7027)
      • 28840f34 Use enum class in findExe()
      • 43b52dc1 Use enum classes in KDbLookupFieldSchema and KDbLookupFieldSchemaRecordSource
      • 3145dccd Use enum class for BLOBEscapingType
      • f8d07600 Use enum class for KDbConnectionData::UserVisibleStringOption
      • 6752c58f Make alias-related methods for query schema return boolean result
    • Bug fixes
      • 75ce1082 SQLite driver: don't clear set of paths in extraSqliteExtensionPaths Connection property if exists
      • 564a9237 Add safer debug for large values
      • 46c6f293 Fix issues because of using " quotes for identifiers in SQLite driver (Bug #376052)
      • 7c489ffa Query parsing: try harder to locate positions of table/table aliases
      • ba423b99 Connection dialog: make message handler optional, return result, accept on success
      • 06de0ced Fix KDbNativeStatementBuilder API: connection is always needed
      • 9fb605c7 Add COLLATION keywords when generated statements are native, otherwise KDbSQL string is invalid (Bug #379447)
      • a10c1be7 Fix generating of SQL statements if there are tables used having lookup fields based on queries (Bug #385417)
      • e56318d1 Aesthetics: generate "SELECT FROM ..." statements with exactly one space after SELECT
      • a2c5c9ec Fix crash when generating "SELECT a.* FROM a, b" statements
      • 58acda41 Generate automatic ORDER BY only for native SQL statements
      • 40c07dec Raise SQL parse error when alias is duplicated for columns, e.g. "SELECT foo AS a, bar AS a FROM t"
      • 479333c2 Raise SQL parse error when alias is duplicated for tables, e.g. "SELECT * FROM foo AS a, bar AS a"
      • 3d6032f4 Expand scope of KDbTableSchemaChangeListener to allow registering queries for changes in table schema (Bug #371896, Task #7704, Review #8117)
      • 29bf64b2 Properly unregister table from listeners before dropping (Task #7703, Review #9771)
      • 7eefe215 Setup query in connection: parsing failure can delete the query object so do not try to access it
      • 48f42f04 Query schema: fix possible crashes - explicitly/properly remove query from connection's cache when needed
      • 3028f8ac Query schema: fix memory leaks - remove internal expressions
    • Optimizations
      • 0494d6c0 Don't create temporary table schema object when checking for existence in createTable()
      • 203f29b1 Don't create temporary table or query schema object when checking for existence object with empty name
    • Docs and examples
  • 3.1.0

Changes in KProperty

KProperty is a property editing framework with editor widget similar to what is known from Qt Designer.

Highlight: Property groups are now supported (they were missing in past versions) and their visibility now can be changed. Group for given property can be now found.


"unit" property option has been replaced by two more general options "suffix" and "prefix" that are supported for double, integer and composed types.

Property editor view can be set to display property descriptions as tool tips.


APIs of KProperty received multiple renames to make it easier to use. Private APIs have been moved out of the public header files. More enums have been added to replace harder to read boolean arguments.

There are fixes related to displaying minimal, URL or null values, checking ranges and updating values of sub-properties.


  • 3.1.0 Beta 1 (3.0.94)
    • New features
      • 80e8f6d Added support for property groups, add API to show/hide groups (Task #5020, Review #3957)
      • c6c5914 Replace "unit" property option with "suffix"; add "prefix", support in double/integer/composed types (Task #5872, Review #5419)
      • be46e3f Add toolTipsVisible feature to KPropertyEditorView, if enabled tooltips are visible for property editor items
    • API changes
      • 4e123fa New: Add KPropertySet::clearModifiedFlags() and KPropertySet::isModified()
      • 5a20f08 New: Allow to remove property option by setting the option's value to null
      • 81d317c Make KF a component that can be specified in find_package(KPropertyWidgets)
      • d2cb9e1 Move paintInternal() to KPropertyValuePainterInterface::paint()
      • 6f90a8f Make KProperty::hasOptions() look at parent property too, if possible
      • 4a27e3a Reduce protected API of KProperty, make d-pointers private, not protected
      • 42b1e7b Property groupDescription is now called groupCaption, icon is called iconName
      • 692a02d Reduce protected API of KPropertySet, use KPropertySetPrivate API internally
      • f97ab39 Many enums are now enum classes, and some booleans are now QFlags
      • ad82184 Add missing operators !=
      • afa69a9 Add KPropertySet::groupNameForProperty()
      • c37eb63 Changes from uint to int (Qt convention)
      • 5eb591a Allow to use newline characters for captions in the property view, add KProperty::captionOrName()
      • 4a55b4b Add d-pointers and Q_DISABLE_COPY to composed factory APIs
      • 9b55579 Replace KPropertyEditorCreatorInterface::Options by KPropertyEditorCreatorOptions, add d-pointers
      • f1e24a7 KPropertyBuffer -> KPropertySetBuffer, add d-pointer
      • 959ff43 Improve KPropertyListData API, remove one constructor from KProperty
      • 4f247d7 Move KPropertyListData to separate files
      • ff64dc9 Add d-pointer to KPropertyComboBoxEditor and move nested classess
      • cc03c09 Add d-pointer to KPropertyLabel
      • b85c684 Add d-pointer to KPropertySetIterator, add operators and copy constructor
      • b3f950a Make API of KPropertySetPrivate more protected
      • 08ac635 d075767 Add d-pointers to editor classes
      • af67dc6 Invert logic of KProperty::ValueOption enums to simplify user's code; return result of setValue()
      • 1afd2d2 Return true in KProperty::isModified() also when at least one subproperty is modified
    • Bug fixes
      • 2e82810 Fix painting grid over scroll areas
      • 3ae4b9b Fix background of multiline editor
      • 1f1ebb7 Fix background color for multiline editor when alternate color is needed or is in readonly mode
      • 494a9ab Try to locate icon rcc files in PATH subdirs too, useful for running apps from the build dir, without installing
      • cb98dcd Color editor: display hex color code also when the editor is active
      • 94ff37a Combo box icon provider: fix possible memory issue with assigning KPropertyComboBoxEditorOptions values
      • 65b4c1a Add translations missing in 3.0.x
      • 1b3f4c4 Properly update properties with subproperties in the view when value or the "modify" flag changes
      • 2ad9224 Do not display unclear "None" text when point/size/rect values are null
      • af30f18 Fix displaying minimum values for types having minimum value defined but no minValueText value
      • ff32c68 Translations: split kproperty_qt into kpropertycore_qt & kpropertywidgets_qt (Task #3992, Review #8230)
      • a05c8f4 Int/double spin boxes: do not allow to set values out of range, fix invalid ranges
      • 46b682e List .pot files explicitly, this allows releaseme l10n detection to work, used in KDE neon
      • e34ed54 Fix handling values in the URL editor
      • aaa5e51 Improve commit changes for the URL editor only; fixup paths
    • Docs and examples
      • f1ac05e Enable creation of API docs QCH file during the build (Review #3514)
      • c58d9b1 Resize first column of the property view to contents in KPropertyExample
  • 3.1.0

Changes in KReport

KReport is a framework for the creation and generation of reports in multiple formats.

Highlight: More report page sizes are now supported. Custom sizes can be specified too. Initial display of barcode elements has been fixed. Scripting support (based on JavaScript) is now backward compatible with previous 2.x scripting, old script settings are detected. Asynchronously rendered elements are now properly displayed.

APIs of KReport received multiple renames to make it easier to use. Private APIs have been moved out of the public header files. More enums have been added to replace harder to read boolean arguments. Size and position classes have been replaced by Qt equivalents. Some minor features from 2.x is now ported to 3.1.