KDb
- Member KDb::cstringToVariant (const char *data, KDbField::Type type, bool *ok, int length=-1, KDb::Signedness signedness=KDb::Signed)
use KDbDriverBehavior::TEXT_TYPE_MAX_LENGTH for Text type?
- Member KDb::getFieldProperties (const KDbField &field, QMap< QByteArray, QVariant > *values)
- IMPORTANT: values->insert("defaultWidth", field.defaultWidth());
- Member KDb::getLimitsForFieldType (KDbField::Type type, qlonglong *minValue, qlonglong *maxValue, KDb::Signedness signedness=KDb::Signed)
- Member KDb::isKDbSqlKeyword (const QByteArray &word)
- add function returning list of keywords.
- Member KDb::loadPropertyValueFromDom (const QDomNode &node, bool *ok)
- add more QVariant types
- Member KDb::setFieldProperties (KDbField *field, const QMap< QByteArray, QVariant > &values)
- IMPORTANT: defaultWidth
- Member KDb::setFieldProperty (KDbField *field, const QByteArray &propertyName, const QVariant &value)
- IMPORTANT: defaultWidth
- Member KDb::simplifiedFieldTypeName (KDbField::Type type)
- Member KDb::supportsVisibleDecimalPlacesProperty (KDbField::Type type)
- add check for decimal type as well
- Member KDbAlterTableHandler::ActionBase::debug (const DebugOptions &debugOptions=DebugOptions())
- add QDebug operator <<
- Member KDbAlterTableHandler::ChangeFieldPropertyAction::execute (KDbConnection *conn, KDbTableSchema *table) override
- Member KDbAlterTableHandler::execute (const QString &tableName, ExecutionArguments *args)
For some cases, table schema can completely change, so it will be needed to refresh all objects depending on it. Implement this!
support expressions (eg. TODAY()) as a default value
this field can be notNull or notEmpty - check whether the default is ok (or do this checking also in the Table Designer?)
support unique, validatationRule, unsigned flags...
- Member KDbAlterTableHandler::InsertFieldAction::execute (KDbConnection *conn, KDbTableSchema *table) override
- Member KDbAlterTableHandler::InsertFieldAction::simplifyActions (ActionDictDict *fieldActions) override
- not checked
- Member KDbAlterTableHandler::InsertFieldAction::updateAlteringRequirements () override
sometimes add DataConversionRequired (e.g. when relationships require removing orphaned records) ?
- Member KDbAlterTableHandler::InsertFieldAction::updateTableSchema (KDbTableSchema *table, KDbField *field, QHash< QString, QString > *fieldHash) override
- add it only when there should be fixed value (e.g. default) set for this new field...
- Member KDbAlterTableHandler::MoveFieldPositionAction::execute (KDbConnection *conn, KDbTableSchema *table) override
- Member KDbAlterTableHandler::MoveFieldPositionAction::simplifyActions (ActionDictDict *fieldActions) override
- Member KDbAlterTableHandler::MoveFieldPositionAction::updateAlteringRequirements () override
- Member KDbAlterTableHandler::RemoveFieldAction::execute (KDbConnection *conn, KDbTableSchema *table) override
- Member KDbAlterTableHandler::RemoveFieldAction::simplifyActions (ActionDictDict *fieldActions) override
- not checked
- Member KDbAlterTableHandler::RemoveFieldAction::updateAlteringRequirements () override
sometimes add DataConversionRequired (e.g. when relationships require removing orphaned records) ?
- Member KDbBinaryExpressionData::typeInternal (KDb::ExpressionCallStack *callStack) const override
add general support, e.g. for "NULL AND (1 == 1)"; for now we only support constants because there's no evaluation and operations with NULL depend on whether we have TRUE or FALSE See https://www.postgresql.org/docs/9.4/static/functions-logical.html https://dev.mysql.com/doc/refman/5.0/en/logical-operators.html
Any OR NULL may be also TRUE – but this needs support of fuzzy/multivalue types
NULL OR Any may be also TRUE – but this needs support of fuzzy/multivalue types
Any AND NULL may be also FALSE – but this needs support of fuzzy/multivalue types
NULL AND Any may be also FALSE – but this needs support of fuzzy/multivalue types
- Member KDbBinaryExpressionData::validateInternal (KDbParseInfo *parseInfo, KDb::ExpressionCallStack *callStack) override
- IMPORTANT: update type for query parameters
- Member KDbConnection::alterTable (KDbTableSchema *tableSchema, KDbTableSchema *newTableSchema)
-
(js): update any structure (e.g.
(js) update any structure (e.g. query) that depend on this table!
- Member KDbConnection::alterTableName (KDbTableSchema *tableSchema, const QString &newName, AlterTableNameOptions options=AlterTableNameOption::Default)
alter table name for server DB backends!
- Member KDbConnection::closeDatabase ()
- (js) add CLEVER algorithm here for nested transactions
- Member KDbConnection::createTable (KDbTableSchema *tableSchema, CreateTableOptions options=CreateTableOption::Default)
- (js) update any structure (e.g. queries) that depend on this table!
- Member KDbConnection::deleteRecord (KDbQuerySchema *query, KDbRecordData *data, bool useRecordId=false)
- allow to delete from a table without pkey
- Member KDbConnection::dropQuery (KDbQuerySchema *querySchema)
- update any structure that depend on this table!
- Member KDbConnection::dropTable (KDbTableSchema *tableSchema)
Check that a database is currently in use? (c.f. createTable)
Update any structure (e.g. query) that depends on this table
- Member KDbConnection::dropTableInternal (KDbTableSchema *tableSchema, bool alsoRemoveSchema)
- js: update any structure (e.g. queries) that depend on this table!
- Member KDbConnection::drv_beginTransaction ()
- Add support for nested transactions, e.g. KDbTransactionData* beginTransaction(KDbTransactionData *parent)
- Member KDbConnection::insertRecord (KDbQuerySchema *query, KDbRecordData *data, KDbRecordEditBuffer *buf, bool getRecordId=false)
now only if PKEY is present, this should also work when there's no PKEY
- Member KDbConnection::kdbSystemTableNames ()
- this will depend on KDb lib version
- Member KDbConnection::loadExtendedTableSchemaData (KDbTableSchema *tableSchema)
look at the current format version (KDB_EXTENDED_TABLE_SCHEMA_VERSION)
- Member KDbConnection::prepareStatement (KDbPreparedStatement::Type type, KDbFieldList *fields, const QStringList &whereFieldNames=QStringList())
- move to ConnectionInterface just like we moved execute() and prepare() to KDbPreparedStatementInterface...
- Member KDbConnection::querySingleRecordInternal (KDbRecordData *data, const KDbEscapedString *sql, KDbQuerySchema *query, const QList< QVariant > *params, QueryRecordOptions options)
- does not work with non-SQL data sources
- Member KDbConnection::querySingleStringInternal (const KDbEscapedString *sql, QString *value, KDbQuerySchema *query, const QList< QVariant > *params, int column, QueryRecordOptions options)
- does not work with non-SQL data sources
- Member KDbConnection::recordCount (const KDbEscapedString &sql)
- perhaps use quint64 here?
- Member KDbConnection::recordCount (const KDbTableSchema &tableSchema)
-
does not work with non-SQL data sources
- Member KDbConnection::recordCount (KDbQuerySchema *querySchema, const QList< QVariant > ¶ms=QList< QVariant >())
- Member KDbConnection::recordCount (KDbTableOrQuerySchema *tableOrQuery, const QList< QVariant > ¶ms=QList< QVariant >())
- perhaps use quint64 here?
- Member KDbConnection::setupField (const KDbRecordData &data)
- load maxLengthStrategy info to see if the maxLength is the default
- Member KDbConnection::setupObjectData (const KDbRecordData &data, KDbObject *object)
- IMPORTANT: fix KDbConnection::setupObjectData() after refactoring
- Member KDbConnection::storeExtendedTableSchemaData (KDbTableSchema *tableSchema)
- future: save in older versions if neeed
- Member KDbConnection::updateRecord (KDbQuerySchema *query, KDbRecordData *data, KDbRecordEditBuffer *buf, bool useRecordId=false)
- perhaps we can try to update without using PKEY?
- Member KDbConnectionData::isPasswordNeeded () const
- temp.: change this if there are file-based drivers requiring a password
- Member KDbConstExpressionData::toStringInternal (const KDbDriver *driver, KDbQuerySchemaParameterValueListIterator *params, KDb::ExpressionCallStack *callStack) const override
- better escaping!
- Member KDbConstExpressionData::typeInternal (KDb::ExpressionCallStack *callStack) const override
- Member KDbCursor::deleteAllRecords ()
- doesn't update cursor's buffer YET!
- Member KDbCursor::deleteRecord (KDbRecordData *data, bool useRecordId=false)
- doesn't update cursor's buffer YET!
- Member KDbCursor::insertRecord (KDbRecordData *data, KDbRecordEditBuffer *buf, bool getRecrordId=false)
- doesn't update cursor's buffer YET!
- Member KDbCursor::setOrderByColumnList (const QStringList &columnNames)
-
implement this: all field names should be found, exit otherwise
- Member KDbCursor::setOrderByColumnList (const QString &column1, const QString &column2=QString(), const QString &column3=QString(), const QString &column4=QString(), const QString &column5=QString())
- Member KDbCursor::updateRecord (KDbRecordData *data, KDbRecordEditBuffer *buf, bool useRecordId=false)
- doesn't update cursor's buffer YET!
- Member KDbDriver::concatenateFunctionToString (const KDbBinaryExpression &args, KDbQuerySchemaParameterValueListIterator *params, KDb::ExpressionCallStack *callStack) const
- API supporting KDbNArgExpression would be useful so instead of a||b||c can be expressed as CONCAT(a,b,c) instead of CONCAT(CONCAT(a,b),c). This requires changes to the KDbSQL parser.
- Member KDbDriver::createConnection (const KDbConnectionData &connData, const KDbConnectionOptions &options)
- needed? connData->setDriverId(id());
- Member KDbDriver::features () const
- change int to Features
- Member KDbDriverManager::possibleProblemsMessage () const
- make it just QStringList
- Member KDbExpression::classForToken (KDbToken token)
- support more tokens
- Member KDbField::convertToType (const QVariant &value, Type type)
- use an array of functions?
- Member KDbField::setDefaultValue (const QByteArray &def)
if (!ok || (!(d->options & Unsigned) && (-v > 0x080000000 || v > (0x080000000-1))) || ((d->options & Unsigned) && (v < 0 || v > 0x100000000)))
- Member KDbField::setPrimaryKey (bool p)
- is this ok for all engines?
- Member KDbField::visibleDecimalPlaces () const
- should we keep extended properties here or move them to a QVariant dictionary?
- Member KDbFieldList::KDbFieldList (const KDbFieldList &fl, bool deepCopyFields=true)
- IMPORTANT: (API) improve deepCopyFields
- Class KDbFieldValidator
-
add validation of the maximum length and other field's properties
- Member KDbFieldValidator::KDbFieldValidator (const KDbField &field, QWidget *parent=nullptr)
merge this code with KexiTableEdit code!
handle input mask (via QLineEdit::setInputMask()
- Member KDbFunctionExpressionData::typeInternal (KDb::ExpressionCallStack *callStack) const override
- Member KDbIndexSchema::KDbIndexSchema (const KDbIndexSchema &index, KDbTableSchema *parentTable)
- copy relationships!
- Member KDbLookupFieldSchema::boundColumn () const
- in later implementation there can be more columns
- Member KDbLookupFieldSchema::loadFromDom (const QDomElement &lookupEl)
- handle fieldlist (retrieve from external table or so?), use KDbLookupFieldSchemaRecordSource::setValues()
- Member KDbNativeStatementBuilder::generateCreateTableStatement (KDbEscapedString *target, const KDbTableSchema &tableSchema) const
warning: ^^^^^ this allows only one autonumber per table when AUTO_INCREMENT_REQUIRES_PK==true!
here is automatically a single-field key created
IS this ok for all engines?: if (!autoinc && !field->isPrimaryKey() && field->isNotNull())
- Member KDbObjectNameValidator::KDbObjectNameValidator (const KDbDriver *drv, QObject *parent=nullptr)
- IMPORTANT: replace QPointer<KDbDriver> m_drv;
- Class KDbParser
-
Support more types than the SELECT
- Member KDbParser::table ()
- Implement this
- Class KDbParserError
Make it explicitly shared using SDC
change type to enum
- Member KDbPreparedStatement::execute (const KDbPreparedStatementParameters ¶meters)
- error message?
- Class KDbProperties
- implement KConfigBase interface here?
- Member KDbProperties::KDbProperties (KDbConnection *conn)
- IMPORTANT: replace QPointer<KDbConnection> m_conn;
- Member KDbQuerySchema::addToWhereExpression (KDbField *field, const QVariant &value, KDbToken relation='=', QString *errorMessage=nullptr, QString *errorDescription=nullptr)
- date, time
- Member KDbQuerySchema::computeFieldsExpanded (KDbConnection *conn) const
(js): perhaps not all fields should be appended here
KDbQuerySchema itself will also support lookup fields...
- Member KDbQuerySchema::fieldsExpanded (KDbConnection *conn, FieldsExpandedMode mode=FieldsExpandedMode::Default) const
- js: UPDATE CACHE!
- Member KDbQuerySchema::pkeyFieldsOrder (KDbConnection *conn) const
- js: UPDATE CACHE!
- Member KDbQuerySchema::removeField (KDbField *field) override
- should we also remove table for this field or asterisk?
- Member KDbQuerySchema::removeTable (KDbTableSchema *table)
- remove fields!
- Member KDbQuerySchema::table (const QString &tableName) const
- maybe use tables_byname?
- Member KDbQuerySchema::validate (QString *errorMessage=nullptr, QString *errorDescription=nullptr)
- add tests
- Class KDbRecordData
consider forking QVariant to a non-shared Variant class, with type information stored elsewhere.
Variant should have toQVariant() method
look if we can have zero-copy strategy for SQLite and other backends
look if we can use memory allocator for strings, etc.
- Member KDbResult::init (int code, const QString &message)
- Member KDbResult::prependMessage (int code, const QString &message)
- IMPORTANT: ERRMSG(this);
- Member KDbServerVersionInfo::isNull () const
- add this to SDC: bool operator==(const Data& other) const { return false; }
- Member KDbSimpleCommandLineApp::KDbSimpleCommandLineApp (int argc, char **argv, const KCmdLineOptions &options, const char *programName, const char *version, const char *shortDescription=0, KAboutData::LicenseKey licenseType=KAboutData::License_Unknown, const char *copyrightStatement=0, const char *text=0, const char *homePageAddress=0, const char *bugsEmailAddress="[email protected]@bugs.kde.org")
- make use of pty/tty here! (and care about portability)
- Member KDbTableSchema::copyIndexFrom (const KDbIndexSchema &index)
- All relationships should be also copied
- Member KDbTableSchema::setPrimaryKey (KDbIndexSchema *pkey)
- Class KDbTableViewColumn
- improve API
- Member KDbTableViewColumn::KDbTableViewColumn (const KDbQuerySchema &query, KDbQueryColumnInfo *aColumnInfo, KDbQueryColumnInfo *aVisibleLookupColumnInfo=nullptr)
- Member KDbTableViewColumn::setReadOnly (bool ro)
- synchronize this with table view:
- Member KDbTableViewColumn::setVisible (bool v)
- react on changes of KDbQueryColumnInfo::visible too
- Class KDbTableViewData
- improve API
- Member KDbTableViewData::autoIncrementedColumn () const
add this as well? void insertRecord(KDbRecordData *record, KDbRecordData *aboveRecord)
what about changing column order?
- Member KDbTableViewData::clearInternal (bool processEvents=true)
- this is time consuming: find better data model
- Member KDbTableViewData::deleteRecord (KDbRecordData *record, bool repaint=false)
- use KDberrorMessage() for description as in KDbTableViewData::saveRecord() */
- Member KDbTableViewData::isDBAware () const
- virtual?
- Member KDbTableViewData::KDbTableViewData (const QList< QVariant > &keys, const QList< QVariant > &values, KDbField::Type keyType=KDbField::Text, KDbField::Type valueType=KDbField::Text)
- make this more generic: allow to add more columns!
- Member KDbToken::KDbToken ()
- add KDbToken(const QByteArray &name)
- Member KDbUnaryExpressionData::typeInternal (KDb::ExpressionCallStack *callStack) const override
- queryParameterExpressionData->m_type still is Text but can be any type
- Member KDbUnaryExpressionData::validateInternal (KDbParseInfo *parseInfo, KDb::ExpressionCallStack *callStack) override
- Member KDbVariableExpressionData::validateInternal (KDbParseInfo *parseInfo, KDb::ExpressionCallStack *callStack) override
- shall we also support db name?
- Member MysqlConnection::drv_closeDatabase () override
- free resources, as far as I know, mysql doesn't support that
- Member MysqlConnection::drv_containsTable (const QString &tableName) override
- move this somewhere to low level class (MIGRATION?)
- Member MysqlConnection::drv_dropDatabase (const QString &dbName=QString()) override
- is here escaping needed?
- Member MysqlConnection::drv_getServerVersion (KDbServerVersionInfo *version) override
- this is hardcoded for now; define api for retrieving variables and use this API...
- Member MysqlConnection::drv_prepareSql (const KDbEscapedString &sql) override
- use mysql_error()
- Member MysqlConnection::drv_useDatabase (const QString &dbName=QString(), bool *cancelled=nullptr, KDbMessageHandler *msgHandler=nullptr) override
- is here escaping needed?
- Member MysqlDriver::escapeString (const QString &str) const override
- Member MysqlDriver::escapeString (const QByteArray &str) const override
- optimize using mysql_real_escape_string()? see https://dev.mysql.com/doc/refman/5.0/en/string-syntax.html
- Member MysqlDriver::MysqlDriver (QObject *parent, const QVariantList &args)
Implement buffered/unbuffered cursor, rather than buffer everything. Each MYSQL connection can only handle at most one unbuffered cursor, so MysqlConnection should keep count?
- Class MysqlPreparedStatement
- 3.1 - unfinished: #define KDB_USE_MYSQL_STMT; for 3.0 we're using unoptimized version
- Member PostgresqlDriver::isSystemObjectName (const QString &name) const override
- implement
- Member PostgresqlDriver::PostgresqlDriver (QObject *parent, const QVariantList &args)
enable this when KDb supports multiple: beh->features = MultipleTransactions | CursorForward | CursorBackward;
use QLibrary to resolve PQlibVersion
pgsql default_server_encoding: should be a property of connection
- Member PostgresqlDriver::typeForSize (KDbField::Type t, int pqfmod, int *maxTextLength)
-
more types such as decimal
- Member SqliteConnection::drv_changeFieldProperty (KDbTableSchema *table, KDbField *field, const QString &propertyName, const QVariant &value) override
- msg
- Member SqliteConnection::drv_containsTable (const QString &tableName) override
- move this somewhere to low level class (MIGRATION?)
- Member SqlitePreparedStatement::bindValue (KDbField *field, const QVariant &value, int arg)
optimize: make a static copy so SQLITE_STATIC can be used
- Member SqlitePreparedStatement::execute (KDbPreparedStatement::Type type, const KDbField::List &selectFieldList, KDbFieldList *insertFieldList, const KDbPreparedStatementParameters ¶meters) override
- fetch result
- Member SqliteVacuum::readFromStdErr ()
- IMPORTANT: m_dlg->setAllowCancel(false);
- Member SybaseConnection::drv_containsTable (const QString &tableName)
- move this somewhere to low level class (MIGRATION?)
- Member SybaseConnection::drv_getTablesList (QStringList *list)
- move this somewhere to low level class (MIGRATION?)
- Member SybaseConnection::drv_useDatabase (const QString &dbName=QString(), bool *cancelled=0, KDbMessageHandler *msgHandler=0)
- is here escaping needed?
- Member SybaseDriver::drv_escapeIdentifier (const QString &str) const
- verify
- Member SybaseDriver::escapeString (const QByteArray &str) const
- needs any modification ?
- Member SybaseDriver::SybaseDriver (QObject *parent, const QVariantList &args)
- Member xBaseConnection::drv_connect (KDbServerVersionInfo *version)
- xBase version here
- Member xBaseConnection::drv_containsTable (const QString &tableName)
- move this somewhere to low level class (MIGRATION?)
- Member xBaseConnection::drv_createDatabase (const QString &dbName=QString())
- Check whether this function has any use.
- Member xBaseConnection::drv_dropDatabase (const QString &dbName=QString())
- is here escaping needed
- Member xBaseConnection::drv_getDatabasesList (QStringList *list)
- Check whether this is the right thing to do
- Member xBaseConnection::drv_getTablesList (QStringList *list)
- move this somewhere to low level class (MIGRATION?)
- Member xBaseConnection::drv_lastInsertRecordId ()
- Member xBaseConnection::drv_useDatabase (const QString &dbName=QString(), bool *cancelled=0, KDbMessageHandler *msgHandler=0)
- is here escaping needed?
- Member xBaseConnection::prepareStatementInternal () override
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon May 8 2023 04:07:56 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006
KDE's Doxygen guidelines are available online.