summaryrefslogtreecommitdiff
path: root/connectivity/source/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'connectivity/source/drivers')
-rw-r--r--connectivity/source/drivers/ado/ACallableStatement.cxx19
-rw-r--r--connectivity/source/drivers/ado/AColumn.cxx31
-rw-r--r--connectivity/source/drivers/ado/AColumns.cxx10
-rw-r--r--connectivity/source/drivers/ado/AConnection.cxx123
-rw-r--r--connectivity/source/drivers/ado/ADatabaseMetaData.cxx94
-rw-r--r--connectivity/source/drivers/ado/ADatabaseMetaDataImpl.cxx80
-rw-r--r--connectivity/source/drivers/ado/ADatabaseMetaDataResultSet.cxx79
-rw-r--r--connectivity/source/drivers/ado/ADatabaseMetaDataResultSetMetaData.cxx5
-rw-r--r--connectivity/source/drivers/ado/ADriver.cxx25
-rw-r--r--connectivity/source/drivers/ado/AGroup.cxx31
-rw-r--r--connectivity/source/drivers/ado/AGroups.cxx6
-rw-r--r--connectivity/source/drivers/ado/AIndex.cxx16
-rw-r--r--connectivity/source/drivers/ado/AIndexes.cxx8
-rw-r--r--connectivity/source/drivers/ado/AKey.cxx26
-rw-r--r--connectivity/source/drivers/ado/AKeys.cxx10
-rw-r--r--connectivity/source/drivers/ado/APreparedStatement.cxx58
-rw-r--r--connectivity/source/drivers/ado/AResultSet.cxx89
-rw-r--r--connectivity/source/drivers/ado/AResultSetMetaData.cxx5
-rw-r--r--connectivity/source/drivers/ado/AStatement.cxx125
-rw-r--r--connectivity/source/drivers/ado/ATable.cxx22
-rw-r--r--connectivity/source/drivers/ado/ATables.cxx12
-rw-r--r--connectivity/source/drivers/ado/AUser.cxx25
-rw-r--r--connectivity/source/drivers/ado/AUsers.cxx9
-rw-r--r--connectivity/source/drivers/ado/AView.cxx23
-rw-r--r--connectivity/source/drivers/ado/AViews.cxx14
-rw-r--r--connectivity/source/drivers/ado/Aolevariant.cxx68
-rw-r--r--connectivity/source/drivers/ado/Awrapado.cxx518
-rw-r--r--connectivity/source/drivers/ado/adoimp.cxx10
-rw-r--r--connectivity/source/drivers/calc/CCatalog.cxx3
-rw-r--r--connectivity/source/drivers/calc/CConnection.cxx38
-rw-r--r--connectivity/source/drivers/calc/CDatabaseMetaData.cxx79
-rw-r--r--connectivity/source/drivers/calc/CDriver.cxx6
-rw-r--r--connectivity/source/drivers/calc/CTable.cxx70
-rw-r--r--connectivity/source/drivers/calc/CTables.cxx9
-rw-r--r--connectivity/source/drivers/component/CColumns.cxx10
-rw-r--r--connectivity/source/drivers/component/CDatabaseMetaData.cxx129
-rw-r--r--connectivity/source/drivers/component/CPreparedStatement.cxx3
-rw-r--r--connectivity/source/drivers/component/CResultSet.cxx9
-rw-r--r--connectivity/source/drivers/component/CStatement.cxx5
-rw-r--r--connectivity/source/drivers/component/CTable.cxx6
-rw-r--r--connectivity/source/drivers/dbase/DCatalog.cxx3
-rw-r--r--connectivity/source/drivers/dbase/DColumns.cxx12
-rw-r--r--connectivity/source/drivers/dbase/DConnection.cxx12
-rw-r--r--connectivity/source/drivers/dbase/DDatabaseMetaData.cxx232
-rw-r--r--connectivity/source/drivers/dbase/DDriver.cxx25
-rw-r--r--connectivity/source/drivers/dbase/DIndex.cxx30
-rw-r--r--connectivity/source/drivers/dbase/DIndexColumns.cxx10
-rw-r--r--connectivity/source/drivers/dbase/DIndexIter.cxx5
-rw-r--r--connectivity/source/drivers/dbase/DIndexes.cxx51
-rw-r--r--connectivity/source/drivers/dbase/DPreparedStatement.cxx6
-rw-r--r--connectivity/source/drivers/dbase/DResultSet.cxx11
-rw-r--r--connectivity/source/drivers/dbase/DStatement.cxx3
-rw-r--r--connectivity/source/drivers/dbase/DTable.cxx122
-rw-r--r--connectivity/source/drivers/dbase/DTables.cxx18
-rw-r--r--connectivity/source/drivers/dbase/dindexnode.cxx48
-rw-r--r--connectivity/source/drivers/evoab2/EApi.cxx55
-rw-r--r--connectivity/source/drivers/evoab2/EApi.h4
-rw-r--r--connectivity/source/drivers/evoab2/NCatalog.cxx7
-rw-r--r--connectivity/source/drivers/evoab2/NCatalog.hxx30
-rw-r--r--connectivity/source/drivers/evoab2/NColumns.cxx55
-rw-r--r--connectivity/source/drivers/evoab2/NColumns.hxx26
-rw-r--r--connectivity/source/drivers/evoab2/NConnection.cxx17
-rw-r--r--connectivity/source/drivers/evoab2/NConnection.hxx117
-rw-r--r--connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx182
-rw-r--r--connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx364
-rw-r--r--connectivity/source/drivers/evoab2/NDriver.cxx9
-rw-r--r--connectivity/source/drivers/evoab2/NDriver.hxx61
-rw-r--r--connectivity/source/drivers/evoab2/NPreparedStatement.cxx49
-rw-r--r--connectivity/source/drivers/evoab2/NPreparedStatement.hxx126
-rw-r--r--connectivity/source/drivers/evoab2/NResultSet.cxx193
-rw-r--r--connectivity/source/drivers/evoab2/NResultSet.hxx264
-rw-r--r--connectivity/source/drivers/evoab2/NResultSetMetaData.cxx16
-rw-r--r--connectivity/source/drivers/evoab2/NResultSetMetaData.hxx2
-rw-r--r--connectivity/source/drivers/evoab2/NStatement.cxx27
-rw-r--r--connectivity/source/drivers/evoab2/NStatement.hxx437
-rw-r--r--connectivity/source/drivers/evoab2/NTable.cxx7
-rw-r--r--connectivity/source/drivers/evoab2/NTable.hxx36
-rw-r--r--connectivity/source/drivers/evoab2/NTables.cxx39
-rw-r--r--connectivity/source/drivers/evoab2/NTables.hxx31
-rw-r--r--connectivity/source/drivers/file/FCatalog.cxx4
-rw-r--r--connectivity/source/drivers/file/FColumns.cxx52
-rw-r--r--connectivity/source/drivers/file/FConnection.cxx43
-rw-r--r--connectivity/source/drivers/file/FDatabaseMetaData.cxx34
-rw-r--r--connectivity/source/drivers/file/FDriver.cxx50
-rw-r--r--connectivity/source/drivers/file/FNoException.cxx2
-rw-r--r--connectivity/source/drivers/file/FNumericFunctions.cxx9
-rw-r--r--connectivity/source/drivers/file/FPreparedStatement.cxx24
-rw-r--r--connectivity/source/drivers/file/FResultSet.cxx35
-rw-r--r--connectivity/source/drivers/file/FResultSetMetaData.cxx11
-rw-r--r--connectivity/source/drivers/file/FStatement.cxx45
-rw-r--r--connectivity/source/drivers/file/FStringFunctions.cxx30
-rw-r--r--connectivity/source/drivers/file/FTable.cxx19
-rw-r--r--connectivity/source/drivers/file/FTables.cxx6
-rw-r--r--connectivity/source/drivers/file/fanalyzer.cxx1
-rw-r--r--connectivity/source/drivers/file/fcode.cxx3
-rw-r--r--connectivity/source/drivers/file/fcomp.cxx22
-rw-r--r--connectivity/source/drivers/firebird/Blob.cxx10
-rw-r--r--connectivity/source/drivers/firebird/Blob.hxx148
-rw-r--r--connectivity/source/drivers/firebird/Catalog.cxx25
-rw-r--r--connectivity/source/drivers/firebird/Catalog.hxx31
-rw-r--r--connectivity/source/drivers/firebird/Clob.cxx16
-rw-r--r--connectivity/source/drivers/firebird/Clob.hxx70
-rw-r--r--connectivity/source/drivers/firebird/Column.cxx2
-rw-r--r--connectivity/source/drivers/firebird/Column.hxx28
-rw-r--r--connectivity/source/drivers/firebird/Columns.cxx2
-rw-r--r--connectivity/source/drivers/firebird/Columns.hxx18
-rw-r--r--connectivity/source/drivers/firebird/Connection.cxx165
-rw-r--r--connectivity/source/drivers/firebird/Connection.hxx393
-rw-r--r--connectivity/source/drivers/firebird/DatabaseMetaData.cxx326
-rw-r--r--connectivity/source/drivers/firebird/DatabaseMetaData.hxx367
-rw-r--r--connectivity/source/drivers/firebird/Driver.cxx37
-rw-r--r--connectivity/source/drivers/firebird/Driver.hxx92
-rw-r--r--connectivity/source/drivers/firebird/Indexes.cxx3
-rw-r--r--connectivity/source/drivers/firebird/Indexes.hxx36
-rw-r--r--connectivity/source/drivers/firebird/Keys.cxx2
-rw-r--r--connectivity/source/drivers/firebird/Keys.hxx26
-rw-r--r--connectivity/source/drivers/firebird/PreparedStatement.cxx383
-rw-r--r--connectivity/source/drivers/firebird/PreparedStatement.hxx226
-rw-r--r--connectivity/source/drivers/firebird/ResultSet.cxx84
-rw-r--r--connectivity/source/drivers/firebird/ResultSet.hxx347
-rw-r--r--connectivity/source/drivers/firebird/ResultSetMetaData.cxx139
-rw-r--r--connectivity/source/drivers/firebird/ResultSetMetaData.hxx83
-rw-r--r--connectivity/source/drivers/firebird/Statement.cxx11
-rw-r--r--connectivity/source/drivers/firebird/Statement.hxx104
-rw-r--r--connectivity/source/drivers/firebird/StatementCommonBase.cxx131
-rw-r--r--connectivity/source/drivers/firebird/StatementCommonBase.hxx181
-rw-r--r--connectivity/source/drivers/firebird/SubComponent.hxx133
-rw-r--r--connectivity/source/drivers/firebird/Table.cxx68
-rw-r--r--connectivity/source/drivers/firebird/Table.hxx110
-rw-r--r--connectivity/source/drivers/firebird/Tables.cxx72
-rw-r--r--connectivity/source/drivers/firebird/Tables.hxx73
-rw-r--r--connectivity/source/drivers/firebird/User.hxx46
-rw-r--r--connectivity/source/drivers/firebird/Users.cxx6
-rw-r--r--connectivity/source/drivers/firebird/Users.hxx66
-rw-r--r--connectivity/source/drivers/firebird/Util.cxx94
-rw-r--r--connectivity/source/drivers/firebird/Util.hxx195
-rw-r--r--connectivity/source/drivers/firebird/View.cxx85
-rw-r--r--connectivity/source/drivers/firebird/View.hxx60
-rw-r--r--connectivity/source/drivers/firebird/Views.cxx113
-rw-r--r--connectivity/source/drivers/firebird/Views.hxx43
-rw-r--r--connectivity/source/drivers/flat/ECatalog.cxx3
-rw-r--r--connectivity/source/drivers/flat/EColumns.cxx10
-rw-r--r--connectivity/source/drivers/flat/EConnection.cxx10
-rw-r--r--connectivity/source/drivers/flat/EDatabaseMetaData.cxx28
-rw-r--r--connectivity/source/drivers/flat/EDriver.cxx37
-rw-r--r--connectivity/source/drivers/flat/EPreparedStatement.cxx6
-rw-r--r--connectivity/source/drivers/flat/EResultSet.cxx6
-rw-r--r--connectivity/source/drivers/flat/EStatement.cxx3
-rw-r--r--connectivity/source/drivers/flat/ETable.cxx28
-rw-r--r--connectivity/source/drivers/flat/ETables.cxx11
-rw-r--r--connectivity/source/drivers/hsqldb/HCatalog.cxx13
-rw-r--r--connectivity/source/drivers/hsqldb/HColumns.cxx6
-rw-r--r--connectivity/source/drivers/hsqldb/HConnection.cxx23
-rw-r--r--connectivity/source/drivers/hsqldb/HDriver.cxx193
-rw-r--r--connectivity/source/drivers/hsqldb/HStorageAccess.cxx72
-rw-r--r--connectivity/source/drivers/hsqldb/HStorageMap.cxx10
-rw-r--r--connectivity/source/drivers/hsqldb/HTable.cxx21
-rw-r--r--connectivity/source/drivers/hsqldb/HTables.cxx53
-rw-r--r--connectivity/source/drivers/hsqldb/HTerminateListener.cxx1
-rw-r--r--connectivity/source/drivers/hsqldb/HTerminateListener.hxx28
-rw-r--r--connectivity/source/drivers/hsqldb/HUser.cxx13
-rw-r--r--connectivity/source/drivers/hsqldb/HUsers.cxx13
-rw-r--r--connectivity/source/drivers/hsqldb/HView.cxx6
-rw-r--r--connectivity/source/drivers/hsqldb/HViews.cxx9
-rw-r--r--connectivity/source/drivers/hsqldb/StorageFileAccess.cxx49
-rw-r--r--connectivity/source/drivers/hsqldb/StorageNativeInputStream.cxx11
-rw-r--r--connectivity/source/drivers/hsqldb/StorageNativeOutputStream.cxx4
-rw-r--r--connectivity/source/drivers/jdbc/Blob.cxx3
-rw-r--r--connectivity/source/drivers/jdbc/CallableStatement.cxx9
-rw-r--r--connectivity/source/drivers/jdbc/Clob.cxx9
-rw-r--r--connectivity/source/drivers/jdbc/DatabaseMetaData.cxx9
-rw-r--r--connectivity/source/drivers/jdbc/DriverPropertyInfo.cxx2
-rw-r--r--connectivity/source/drivers/jdbc/JConnection.cxx58
-rw-r--r--connectivity/source/drivers/jdbc/JDriver.cxx82
-rw-r--r--connectivity/source/drivers/jdbc/JStatement.cxx98
-rw-r--r--connectivity/source/drivers/jdbc/Object.cxx4
-rw-r--r--connectivity/source/drivers/jdbc/PreparedStatement.cxx11
-rw-r--r--connectivity/source/drivers/jdbc/ResultSet.cxx69
-rw-r--r--connectivity/source/drivers/jdbc/ResultSetMetaData.cxx3
-rw-r--r--connectivity/source/drivers/jdbc/SQLException.cxx3
-rw-r--r--connectivity/source/drivers/jdbc/tools.cxx3
-rw-r--r--connectivity/source/drivers/macab/MacabAddressBook.cxx11
-rw-r--r--connectivity/source/drivers/macab/MacabAddressBook.hxx44
-rw-r--r--connectivity/source/drivers/macab/MacabCatalog.cxx2
-rw-r--r--connectivity/source/drivers/macab/MacabCatalog.hxx34
-rw-r--r--connectivity/source/drivers/macab/MacabColumns.cxx4
-rw-r--r--connectivity/source/drivers/macab/MacabColumns.hxx22
-rw-r--r--connectivity/source/drivers/macab/MacabConnection.hxx150
-rw-r--r--connectivity/source/drivers/macab/MacabDatabaseMetaData.cxx5
-rw-r--r--connectivity/source/drivers/macab/MacabDatabaseMetaData.hxx320
-rw-r--r--connectivity/source/drivers/macab/MacabDriver.cxx4
-rw-r--r--connectivity/source/drivers/macab/MacabDriver.hxx199
-rw-r--r--connectivity/source/drivers/macab/MacabGroup.hxx8
-rw-r--r--connectivity/source/drivers/macab/MacabHeader.cxx4
-rw-r--r--connectivity/source/drivers/macab/MacabHeader.hxx59
-rw-r--r--connectivity/source/drivers/macab/MacabPreparedStatement.hxx134
-rw-r--r--connectivity/source/drivers/macab/MacabRecord.hxx58
-rw-r--r--connectivity/source/drivers/macab/MacabRecords.cxx7
-rw-r--r--connectivity/source/drivers/macab/MacabRecords.hxx171
-rw-r--r--connectivity/source/drivers/macab/MacabResultSet.cxx71
-rw-r--r--connectivity/source/drivers/macab/MacabResultSet.hxx348
-rw-r--r--connectivity/source/drivers/macab/MacabResultSetMetaData.cxx1
-rw-r--r--connectivity/source/drivers/macab/MacabResultSetMetaData.hxx87
-rw-r--r--connectivity/source/drivers/macab/MacabStatement.cxx92
-rw-r--r--connectivity/source/drivers/macab/MacabStatement.hxx263
-rw-r--r--connectivity/source/drivers/macab/MacabTable.hxx50
-rw-r--r--connectivity/source/drivers/macab/MacabTables.cxx4
-rw-r--r--connectivity/source/drivers/macab/MacabTables.hxx34
-rw-r--r--connectivity/source/drivers/macab/macaborder.hxx46
-rw-r--r--connectivity/source/drivers/macab/macabutilities.hxx168
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.cxx6
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.hxx71
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSFolders.cxx4
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSFolders.hxx2
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSINIParser.cxx9
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx10
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx76
-rw-r--r--connectivity/source/drivers/mysql_jdbc/YCatalog.cxx12
-rw-r--r--connectivity/source/drivers/mysql_jdbc/YColumns.cxx6
-rw-r--r--connectivity/source/drivers/mysql_jdbc/YDriver.cxx106
-rw-r--r--connectivity/source/drivers/mysql_jdbc/YTable.cxx28
-rw-r--r--connectivity/source/drivers/mysql_jdbc/YTables.cxx19
-rw-r--r--connectivity/source/drivers/mysql_jdbc/YUser.cxx11
-rw-r--r--connectivity/source/drivers/mysql_jdbc/YUsers.cxx17
-rw-r--r--connectivity/source/drivers/mysql_jdbc/YViews.cxx13
-rw-r--r--connectivity/source/drivers/mysqlc/DataAccess.xcu35
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_catalog.cxx93
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_catalog.hxx38
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_column.cxx45
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_column.hxx32
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_columns.cxx28
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_columns.hxx29
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_connection.cxx85
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_connection.hxx39
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx290
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.hxx2
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_driver.cxx33
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_driver.hxx25
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_general.cxx147
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_general.hxx2
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_indexes.cxx25
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_indexes.hxx34
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_keys.cxx19
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_keys.hxx25
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.cxx93
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx8
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.cxx18
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx6
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx98
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx10
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.cxx6
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.hxx4
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_statement.cxx58
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_statement.hxx7
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx15
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_table.cxx168
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_table.hxx69
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_tables.cxx165
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_tables.hxx59
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_types.cxx220
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_user.cxx211
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_user.hxx71
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_users.cxx93
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_users.hxx44
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_view.cxx98
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_view.hxx72
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_views.cxx114
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_views.hxx51
-rw-r--r--connectivity/source/drivers/odbc/OConnection.cxx185
-rw-r--r--connectivity/source/drivers/odbc/ODatabaseMetaData.cxx9
-rw-r--r--connectivity/source/drivers/odbc/ODatabaseMetaDataResultSet.cxx867
-rw-r--r--connectivity/source/drivers/odbc/ODriver.cxx808
-rw-r--r--connectivity/source/drivers/odbc/OFunctions.cxx245
-rw-r--r--connectivity/source/drivers/odbc/OPreparedStatement.cxx122
-rw-r--r--connectivity/source/drivers/odbc/ORealDriver.cxx291
-rw-r--r--connectivity/source/drivers/odbc/OResultSet.cxx532
-rw-r--r--connectivity/source/drivers/odbc/OResultSetMetaData.cxx141
-rw-r--r--connectivity/source/drivers/odbc/OStatement.cxx210
-rw-r--r--connectivity/source/drivers/odbc/OTools.cxx272
-rw-r--r--connectivity/source/drivers/postgresql/pq_array.cxx4
-rw-r--r--connectivity/source/drivers/postgresql/pq_array.hxx13
-rw-r--r--connectivity/source/drivers/postgresql/pq_baseresultset.cxx14
-rw-r--r--connectivity/source/drivers/postgresql/pq_connection.cxx38
-rw-r--r--connectivity/source/drivers/postgresql/pq_connection.hxx6
-rw-r--r--connectivity/source/drivers/postgresql/pq_databasemetadata.cxx222
-rw-r--r--connectivity/source/drivers/postgresql/pq_databasemetadata.hxx4
-rw-r--r--connectivity/source/drivers/postgresql/pq_driver.cxx12
-rw-r--r--connectivity/source/drivers/postgresql/pq_driver.hxx7
-rw-r--r--connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.cxx5
-rw-r--r--connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.hxx2
-rw-r--r--connectivity/source/drivers/postgresql/pq_preparedstatement.cxx56
-rw-r--r--connectivity/source/drivers/postgresql/pq_preparedstatement.hxx2
-rw-r--r--connectivity/source/drivers/postgresql/pq_resultset.cxx14
-rw-r--r--connectivity/source/drivers/postgresql/pq_resultset.hxx4
-rw-r--r--connectivity/source/drivers/postgresql/pq_resultsetmetadata.cxx20
-rw-r--r--connectivity/source/drivers/postgresql/pq_resultsetmetadata.hxx8
-rw-r--r--connectivity/source/drivers/postgresql/pq_sequenceresultset.cxx6
-rw-r--r--connectivity/source/drivers/postgresql/pq_statement.cxx51
-rw-r--r--connectivity/source/drivers/postgresql/pq_statement.hxx2
-rw-r--r--connectivity/source/drivers/postgresql/pq_statics.cxx126
-rw-r--r--connectivity/source/drivers/postgresql/pq_statics.hxx20
-rw-r--r--connectivity/source/drivers/postgresql/pq_tools.cxx112
-rw-r--r--connectivity/source/drivers/postgresql/pq_tools.hxx6
-rw-r--r--connectivity/source/drivers/postgresql/pq_updateableresultset.cxx18
-rw-r--r--connectivity/source/drivers/postgresql/pq_updateableresultset.hxx9
-rw-r--r--connectivity/source/drivers/postgresql/pq_xbase.cxx12
-rw-r--r--connectivity/source/drivers/postgresql/pq_xbase.hxx5
-rw-r--r--connectivity/source/drivers/postgresql/pq_xcolumn.cxx1
-rw-r--r--connectivity/source/drivers/postgresql/pq_xcolumns.cxx47
-rw-r--r--connectivity/source/drivers/postgresql/pq_xcolumns.hxx4
-rw-r--r--connectivity/source/drivers/postgresql/pq_xcontainer.cxx34
-rw-r--r--connectivity/source/drivers/postgresql/pq_xcontainer.hxx6
-rw-r--r--connectivity/source/drivers/postgresql/pq_xindex.cxx9
-rw-r--r--connectivity/source/drivers/postgresql/pq_xindex.hxx4
-rw-r--r--connectivity/source/drivers/postgresql/pq_xindexcolumn.cxx1
-rw-r--r--connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx27
-rw-r--r--connectivity/source/drivers/postgresql/pq_xindexcolumns.hxx6
-rw-r--r--connectivity/source/drivers/postgresql/pq_xindexes.cxx24
-rw-r--r--connectivity/source/drivers/postgresql/pq_xindexes.hxx4
-rw-r--r--connectivity/source/drivers/postgresql/pq_xkey.cxx9
-rw-r--r--connectivity/source/drivers/postgresql/pq_xkey.hxx7
-rw-r--r--connectivity/source/drivers/postgresql/pq_xkeycolumn.cxx1
-rw-r--r--connectivity/source/drivers/postgresql/pq_xkeycolumns.cxx23
-rw-r--r--connectivity/source/drivers/postgresql/pq_xkeycolumns.hxx4
-rw-r--r--connectivity/source/drivers/postgresql/pq_xkeys.cxx35
-rw-r--r--connectivity/source/drivers/postgresql/pq_xkeys.hxx4
-rw-r--r--connectivity/source/drivers/postgresql/pq_xtable.cxx10
-rw-r--r--connectivity/source/drivers/postgresql/pq_xtable.hxx11
-rw-r--r--connectivity/source/drivers/postgresql/pq_xtables.cxx19
-rw-r--r--connectivity/source/drivers/postgresql/pq_xuser.cxx4
-rw-r--r--connectivity/source/drivers/postgresql/pq_xuser.hxx5
-rw-r--r--connectivity/source/drivers/postgresql/pq_xusers.cxx12
-rw-r--r--connectivity/source/drivers/postgresql/pq_xview.cxx8
-rw-r--r--connectivity/source/drivers/postgresql/pq_xview.hxx6
-rw-r--r--connectivity/source/drivers/postgresql/pq_xviews.cxx18
-rw-r--r--connectivity/source/drivers/writer/WCatalog.cxx3
-rw-r--r--connectivity/source/drivers/writer/WConnection.cxx24
-rw-r--r--connectivity/source/drivers/writer/WDatabaseMetaData.cxx17
-rw-r--r--connectivity/source/drivers/writer/WDriver.cxx11
-rw-r--r--connectivity/source/drivers/writer/WTable.cxx16
-rw-r--r--connectivity/source/drivers/writer/WTables.cxx4
341 files changed, 11403 insertions, 9789 deletions
diff --git a/connectivity/source/drivers/ado/ACallableStatement.cxx b/connectivity/source/drivers/ado/ACallableStatement.cxx
index 94ad744d0134..fae8b0f5394e 100644
--- a/connectivity/source/drivers/ado/ACallableStatement.cxx
+++ b/connectivity/source/drivers/ado/ACallableStatement.cxx
@@ -117,7 +117,6 @@ sal_Int32 SAL_CALL OCallableStatement::getInt( sal_Int32 columnIndex )
return m_aValue.getInt32();
}
-
sal_Int64 SAL_CALL OCallableStatement::getLong( sal_Int32 columnIndex )
{
ADOParameter* pParam = nullptr;
@@ -127,14 +126,11 @@ sal_Int64 SAL_CALL OCallableStatement::getLong( sal_Int32 columnIndex )
return static_cast<sal_Int64>(m_aValue.getCurrency().int64);
}
-
Any SAL_CALL OCallableStatement::getObject( sal_Int32 /*columnIndex*/, const Reference< css::container::XNameAccess >& /*typeMap*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getObject", *this );
- return Any();
}
-
sal_Int16 SAL_CALL OCallableStatement::getShort( sal_Int32 columnIndex )
{
ADOParameter* pParam = nullptr;
@@ -144,7 +140,6 @@ sal_Int16 SAL_CALL OCallableStatement::getShort( sal_Int32 columnIndex )
return m_aValue.getInt16();
}
-
OUString SAL_CALL OCallableStatement::getString( sal_Int32 columnIndex )
{
ADOParameter* pParam = nullptr;
@@ -154,8 +149,7 @@ OUString SAL_CALL OCallableStatement::getString( sal_Int32 columnIndex )
return m_aValue.getString();
}
-
- css::util::Time SAL_CALL OCallableStatement::getTime( sal_Int32 columnIndex )
+css::util::Time SAL_CALL OCallableStatement::getTime( sal_Int32 columnIndex )
{
ADOParameter* pParam = nullptr;
m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam);
@@ -202,43 +196,33 @@ void SAL_CALL OCallableStatement::registerNumericOutParameter( sal_Int32 paramet
Reference< css::io::XInputStream > SAL_CALL OCallableStatement::getBinaryStream( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getBinaryStream", *this );
- return nullptr;
}
Reference< css::io::XInputStream > SAL_CALL OCallableStatement::getCharacterStream( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getCharacterStream", *this );
- return nullptr;
}
-
Reference< XArray > SAL_CALL OCallableStatement::getArray( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getArray", *this );
- return nullptr;
}
-
Reference< XClob > SAL_CALL OCallableStatement::getClob( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getClob", *this );
- return nullptr;
}
Reference< XBlob > SAL_CALL OCallableStatement::getBlob( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getBlob", *this );
- return nullptr;
}
-
Reference< XRef > SAL_CALL OCallableStatement::getRef( sal_Int32 /*columnIndex*/)
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getRef", *this );
- return nullptr;
}
-
void SAL_CALL OCallableStatement::acquire() noexcept
{
OPreparedStatement::acquire();
@@ -249,5 +233,4 @@ void SAL_CALL OCallableStatement::release() noexcept
OPreparedStatement::release();
}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/ado/AColumn.cxx b/connectivity/source/drivers/ado/AColumn.cxx
index 98b4c899595a..8e4dd370a023 100644
--- a/connectivity/source/drivers/ado/AColumn.cxx
+++ b/connectivity/source/drivers/ado/AColumn.cxx
@@ -40,19 +40,7 @@ using namespace com::sun::star::sdbc;
void WpADOColumn::Create()
{
- _ADOColumn* pColumn = nullptr;
- HRESULT hr = CoCreateInstance(ADOS::CLSID_ADOCOLUMN_25,
- nullptr,
- CLSCTX_INPROC_SERVER,
- ADOS::IID_ADOCOLUMN_25,
- reinterpret_cast<void**>(&pColumn) );
-
-
- if( !FAILED( hr ) )
- {
- operator=( pColumn );
- pColumn->Release( );
- }
+ pInterface.CoCreateInstance(ADOS::CLSID_ADOCOLUMN_25, nullptr, CLSCTX_INPROC_SERVER);
}
OAdoColumn::OAdoColumn(bool _bCase,OConnection* _pConnection,_ADOColumn* _pColumn)
@@ -61,7 +49,7 @@ OAdoColumn::OAdoColumn(bool _bCase,OConnection* _pConnection,_ADOColumn* _pColum
{
construct();
OSL_ENSURE(_pColumn,"Column can not be null!");
- m_aColumn = WpADOColumn(_pColumn);
+ m_aColumn.set(_pColumn);
// m_aColumn.put_ParentCatalog(_pConnection->getAdoCatalog()->getCatalog());
fillPropertyValues();
}
@@ -78,20 +66,6 @@ OAdoColumn::OAdoColumn(bool _bCase,OConnection* _pConnection)
}
-Sequence< sal_Int8 > OAdoColumn::getUnoTunnelId()
-{
- static const comphelper::UnoIdInit implId;
- return implId.getSeq();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OAdoColumn::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return comphelper::getSomethingImpl(rId, this,
- comphelper::FallbackToGetSomethingOf<OColumn_ADO>{});
-}
-
void OAdoColumn::construct()
{
sal_Int32 nAttrib = isNew() ? 0 : PropertyAttribute::READONLY;
@@ -167,7 +141,6 @@ void OAdoColumn::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& r
getBOOL(rValue));
break;
- case PROPERTY_ID_IM001:
case PROPERTY_ID_DESCRIPTION:
sAdoPropertyName = u"Description";
break;
diff --git a/connectivity/source/drivers/ado/AColumns.cxx b/connectivity/source/drivers/ado/AColumns.cxx
index 6297871d5b62..5e8cba1f8ac0 100644
--- a/connectivity/source/drivers/ado/AColumns.cxx
+++ b/connectivity/source/drivers/ado/AColumns.cxx
@@ -43,7 +43,7 @@ using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
using namespace com::sun::star::container;
-sdbcx::ObjectType OColumns::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > OColumns::createObject(const OUString& _rName)
{
return new OAdoColumn(isCaseSensitive(),m_pConnection,m_aCollection.GetItem(_rName));
}
@@ -60,9 +60,9 @@ Reference< XPropertySet > OColumns::createDescriptor()
}
// XAppend
-sdbcx::ObjectType OColumns::appendObject( const OUString&, const Reference< XPropertySet >& descriptor )
+css::uno::Reference< css::beans::XPropertySet > OColumns::appendObject( const OUString&, const Reference< XPropertySet >& descriptor )
{
- rtl::Reference<OAdoColumn> pColumn = getFromUnoTunnel<OAdoColumn>( descriptor );
+ rtl::Reference<OAdoColumn> pColumn = dynamic_cast<OAdoColumn*>( descriptor.get() );
Reference< XPropertySet > xColumn;
if ( !pColumn.is() )
{
@@ -109,7 +109,7 @@ sdbcx::ObjectType OColumns::appendObject( const OUString&, const Reference< XPro
aAddedColumn.put_RelatedColumn(aColumn.get_RelatedColumn());
}
}
- ADOS::ThrowException(*m_pConnection->getConnection(),static_cast<XTypeProvider*>(this));
+ ADOS::ThrowException(m_pConnection->getConnection(),static_cast<XTypeProvider*>(this));
return new OAdoColumn(isCaseSensitive(),m_pConnection,pColumn->getColumnImpl());
}
@@ -118,7 +118,7 @@ sdbcx::ObjectType OColumns::appendObject( const OUString&, const Reference< XPro
void OColumns::dropObject(sal_Int32 /*_nPos*/,const OUString& _sElementName)
{
if(!m_aCollection.Delete(_sElementName))
- ADOS::ThrowException(*m_pConnection->getConnection(),static_cast<XTypeProvider*>(this));
+ ADOS::ThrowException(m_pConnection->getConnection(),static_cast<XTypeProvider*>(this));
}
diff --git a/connectivity/source/drivers/ado/AConnection.cxx b/connectivity/source/drivers/ado/AConnection.cxx
index 19276dfac73c..8fe1f3920c1e 100644
--- a/connectivity/source/drivers/ado/AConnection.cxx
+++ b/connectivity/source/drivers/ado/AConnection.cxx
@@ -19,6 +19,7 @@
#include <sal/config.h>
+#include <cstddef>
#include <string_view>
#include <ado/AConnection.hxx>
@@ -34,7 +35,9 @@
#include <com/sun/star/lang/DisposedException.hpp>
#include <comphelper/servicehelper.hxx>
#include <connectivity/dbexception.hxx>
+#include <o3tl/string_view.hxx>
#include <osl/file.hxx>
+#include <systools/win32/oleauto.hxx>
#include <strings.hrc>
using namespace dbtools;
@@ -51,44 +54,25 @@ IMPLEMENT_SERVICE_INFO(OConnection,"com.sun.star.sdbcx.AConnection","com.sun.sta
OConnection::OConnection(ODriver* _pDriver)
: m_xCatalog(nullptr),
m_pDriver(_pDriver),
- m_pAdoConnection(nullptr),
- m_pCatalog(nullptr),
m_nEngineType(0),
m_bClosed(false),
m_bAutocommit(true)
{
osl_atomic_increment( &m_refCount );
- IClassFactory2* pIUnknown = nullptr;
- HRESULT hr;
- hr = CoGetClassObject( ADOS::CLSID_ADOCONNECTION_21,
- CLSCTX_INPROC_SERVER,
- nullptr,
- IID_IClassFactory2,
- reinterpret_cast<void**>(&pIUnknown) );
-
- if( !FAILED( hr ) )
+ sal::systools::COMReference<IClassFactory2> pIUnknown;
+ if (!FAILED(pIUnknown.CoGetClassObject(ADOS::CLSID_ADOCONNECTION_21, CLSCTX_INPROC_SERVER)))
{
- ADOConnection *pCon = nullptr;
- IUnknown *pOuter = nullptr;
- hr = pIUnknown->CreateInstanceLic( pOuter,
+ HRESULT hr = pIUnknown->CreateInstanceLic(nullptr,
nullptr,
ADOS::IID_ADOCONNECTION_21,
- ADOS::GetKeyStr().asBSTR(),
- reinterpret_cast<void**>(&pCon));
+ ADOS::GetKeyStr(),
+ reinterpret_cast<void**>(&m_aAdoConnection));
if( !FAILED( hr ) )
{
- OSL_ENSURE( pCon, "OConnection::OConnection: invalid ADO object!" );
-
- m_pAdoConnection = new WpADOConnection( pCon );
- // CreateInstanceLic returned an object which was already acquired
- pCon->Release( );
-
+ OSL_ENSURE(m_aAdoConnection, "OConnection::OConnection: invalid ADO object!");
}
-
- // Class Factory is no longer needed
- pIUnknown->Release();
}
osl_atomic_decrement( &m_refCount );
@@ -98,47 +82,45 @@ OConnection::~OConnection()
{
}
-void OConnection::construct(const OUString& url,const Sequence< PropertyValue >& info)
+void OConnection::construct(std::u16string_view url,const Sequence< PropertyValue >& info)
{
osl_atomic_increment( &m_refCount );
setConnectionInfo(info);
- sal_Int32 nLen = url.indexOf(':');
- nLen = url.indexOf(':',nLen+1);
- OUString aDSN(url.copy(nLen+1)),aUID,aPWD;
- if ( aDSN.startsWith("access:") )
- aDSN = aDSN.copy(7);
+ std::size_t nLen = url.find(':');
+ nLen = url.find(':',nLen == std::u16string_view::npos ? 0 : nLen+1);
+ std::u16string_view aDSN(url.substr(nLen == std::u16string_view::npos ? 0 : nLen+1));
+ OUString aUID,aPWD;
+ o3tl::starts_with(aDSN, u"access:", &aDSN);
sal_Int32 nTimeout = 20;
- const PropertyValue *pIter = info.getConstArray();
- const PropertyValue *pEnd = pIter + info.getLength();
- for(;pIter != pEnd;++pIter)
+ for (const auto& propval : info)
{
- if(pIter->Name == "Timeout")
- pIter->Value >>= nTimeout;
- else if(pIter->Name == "user")
- pIter->Value >>= aUID;
- else if(pIter->Name == "password")
- pIter->Value >>= aPWD;
+ if (propval.Name == "Timeout")
+ propval.Value >>= nTimeout;
+ else if (propval.Name == "user")
+ propval.Value >>= aUID;
+ else if (propval.Name == "password")
+ propval.Value >>= aPWD;
}
try
{
- if(m_pAdoConnection)
+ if(m_aAdoConnection)
{
- if(m_pAdoConnection->Open(aDSN,aUID,aPWD,adConnectUnspecified))
- m_pAdoConnection->PutCommandTimeout(nTimeout);
+ if(m_aAdoConnection.Open(aDSN,aUID,aPWD,adConnectUnspecified))
+ m_aAdoConnection.PutCommandTimeout(nTimeout);
else
- ADOS::ThrowException(*m_pAdoConnection,*this);
- if(m_pAdoConnection->get_State() != adStateOpen)
+ ADOS::ThrowException(m_aAdoConnection,*this);
+ if(m_aAdoConnection.get_State() != adStateOpen)
throwGenericSQLException( STR_NO_CONNECTION,*this );
- WpADOProperties aProps = m_pAdoConnection->get_Properties();
+ WpADOProperties aProps = m_aAdoConnection.get_Properties();
if(aProps.IsValid())
{
- OTools::putValue(aProps, std::u16string_view(u"Jet OLEDB:ODBC Parsing"), true);
+ OTools::putValue(aProps, std::u16string_view(u"ACE OLEDB:ODBC Parsing"), true);
OLEVariant aVar(
- OTools::getValue(aProps, std::u16string_view(u"Jet OLEDB:Engine Type")));
+ OTools::getValue(aProps, std::u16string_view(u"ACE OLEDB:Engine Type")));
if(!aVar.isNull() && !aVar.isEmpty())
m_nEngineType = aVar.getInt32();
}
@@ -196,13 +178,13 @@ OUString SAL_CALL OConnection::nativeSQL( const OUString& _sql )
OUString sql = _sql;
- WpADOProperties aProps = m_pAdoConnection->get_Properties();
+ WpADOProperties aProps = m_aAdoConnection.get_Properties();
if(aProps.IsValid())
{
- OTools::putValue(aProps, std::u16string_view(u"Jet OLEDB:ODBC Parsing"), true);
+ OTools::putValue(aProps, std::u16string_view(u"ACE OLEDB:ODBC Parsing"), true);
WpADOCommand aCommand;
aCommand.Create();
- aCommand.put_ActiveConnection(static_cast<IDispatch*>(*m_pAdoConnection));
+ aCommand.put_ActiveConnection(static_cast<IDispatch*>(m_aAdoConnection));
aCommand.put_CommandText(sql);
sql = aCommand.get_CommandText();
}
@@ -218,9 +200,9 @@ void SAL_CALL OConnection::setAutoCommit( sal_Bool autoCommit )
m_bAutocommit = autoCommit;
if(!autoCommit)
- m_pAdoConnection->BeginTrans();
+ m_aAdoConnection.BeginTrans();
else
- m_pAdoConnection->RollbackTrans();
+ m_aAdoConnection.RollbackTrans();
}
sal_Bool SAL_CALL OConnection::getAutoCommit( )
@@ -238,7 +220,7 @@ void SAL_CALL OConnection::commit( )
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- m_pAdoConnection->CommitTrans();
+ m_aAdoConnection.CommitTrans();
}
void SAL_CALL OConnection::rollback( )
@@ -247,14 +229,14 @@ void SAL_CALL OConnection::rollback( )
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- m_pAdoConnection->RollbackTrans();
+ m_aAdoConnection.RollbackTrans();
}
sal_Bool SAL_CALL OConnection::isClosed( )
{
::osl::MutexGuard aGuard( m_aMutex );
- return OConnection_BASE::rBHelper.bDisposed && !m_pAdoConnection->get_State();
+ return OConnection_BASE::rBHelper.bDisposed && !m_aAdoConnection.get_State();
}
Reference< XDatabaseMetaData > SAL_CALL OConnection::getMetaData( )
@@ -279,8 +261,8 @@ void SAL_CALL OConnection::setReadOnly( sal_Bool readOnly )
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- m_pAdoConnection->put_Mode(readOnly ? adModeRead : adModeReadWrite);
- ADOS::ThrowException(*m_pAdoConnection,*this);
+ m_aAdoConnection.put_Mode(readOnly ? adModeRead : adModeReadWrite);
+ ADOS::ThrowException(m_aAdoConnection,*this);
}
sal_Bool SAL_CALL OConnection::isReadOnly( )
@@ -289,7 +271,7 @@ sal_Bool SAL_CALL OConnection::isReadOnly( )
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- return m_pAdoConnection->get_Mode() == adModeRead;
+ return m_aAdoConnection.get_Mode() == adModeRead;
}
void SAL_CALL OConnection::setCatalog( const OUString& catalog )
@@ -297,8 +279,8 @@ void SAL_CALL OConnection::setCatalog( const OUString& catalog )
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- m_pAdoConnection->PutDefaultDatabase(catalog);
- ADOS::ThrowException(*m_pAdoConnection,*this);
+ m_aAdoConnection.PutDefaultDatabase(catalog);
+ ADOS::ThrowException(m_aAdoConnection,*this);
}
OUString SAL_CALL OConnection::getCatalog( )
@@ -306,7 +288,7 @@ OUString SAL_CALL OConnection::getCatalog( )
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- return m_pAdoConnection->GetDefaultDatabase();
+ return m_aAdoConnection.GetDefaultDatabase();
}
void SAL_CALL OConnection::setTransactionIsolation( sal_Int32 level )
@@ -337,8 +319,8 @@ void SAL_CALL OConnection::setTransactionIsolation( sal_Int32 level )
OSL_FAIL("OConnection::setTransactionIsolation invalid level");
return;
}
- m_pAdoConnection->put_IsolationLevel(eIso);
- ADOS::ThrowException(*m_pAdoConnection,*this);
+ m_aAdoConnection.put_IsolationLevel(eIso);
+ ADOS::ThrowException(m_aAdoConnection,*this);
}
sal_Int32 SAL_CALL OConnection::getTransactionIsolation( )
@@ -348,7 +330,7 @@ sal_Int32 SAL_CALL OConnection::getTransactionIsolation( )
sal_Int32 nRet = 0;
- switch(m_pAdoConnection->get_IsolationLevel())
+ switch(m_aAdoConnection.get_IsolationLevel())
{
case adXactUnspecified:
nRet = TransactionIsolation::NONE;
@@ -368,7 +350,7 @@ sal_Int32 SAL_CALL OConnection::getTransactionIsolation( )
default:
OSL_FAIL("OConnection::setTransactionIsolation invalid level");
}
- ADOS::ThrowException(*m_pAdoConnection,*this);
+ ADOS::ThrowException(m_aAdoConnection,*this);
return nRet;
}
@@ -411,7 +393,7 @@ void OConnection::buildTypeInfo()
{
::osl::MutexGuard aGuard( m_aMutex );
- ADORecordset *pRecordset = m_pAdoConnection->getTypeInfo();
+ ADORecordset *pRecordset = m_aAdoConnection.getTypeInfo();
if ( pRecordset )
{
pRecordset->AddRef();
@@ -473,18 +455,17 @@ void OConnection::disposing()
m_bClosed = true;
m_xMetaData = css::uno::WeakReference< css::sdbc::XDatabaseMetaData>();
- m_xCatalog = css::uno::WeakReference< css::sdbcx::XTablesSupplier>();
+ m_xCatalog.clear();
m_pDriver = nullptr;
- m_pAdoConnection->Close();
+ m_aAdoConnection.Close();
for (auto& rEntry : m_aTypeInfo)
delete rEntry.second;
m_aTypeInfo.clear();
- delete m_pAdoConnection;
- m_pAdoConnection = nullptr;
+ m_aAdoConnection.clear();
}
sal_Int64 SAL_CALL OConnection::getSomething( const css::uno::Sequence< sal_Int8 >& rId )
diff --git a/connectivity/source/drivers/ado/ADatabaseMetaData.cxx b/connectivity/source/drivers/ado/ADatabaseMetaData.cxx
index b3f319203834..fc4244e4965b 100644
--- a/connectivity/source/drivers/ado/ADatabaseMetaData.cxx
+++ b/connectivity/source/drivers/ado/ADatabaseMetaData.cxx
@@ -42,15 +42,15 @@ using namespace com::sun::star::sdbc;
ODatabaseMetaData::ODatabaseMetaData(OConnection* _pCon)
: ::connectivity::ODatabaseMetaDataBase(_pCon,_pCon->getConnectionInfo())
- ,m_pADOConnection(_pCon->getConnection())
+ ,m_rADOConnection(_pCon->getConnection())
,m_pConnection(_pCon)
{
}
sal_Int32 ODatabaseMetaData::getInt32Property(const OUString& _aProperty)
{
- connectivity::ado::WpADOProperties aProps(m_pADOConnection->get_Properties());
- // ADOS::ThrowException(*m_pADOConnection,*this);
+ connectivity::ado::WpADOProperties aProps(m_rADOConnection.get_Properties());
+ // ADOS::ThrowException(m_rADOConnection,*this);
OSL_ENSURE(aProps.IsValid(),"There are no properties at the connection");
ADO_PROP(_aProperty);
sal_Int32 nValue(0);
@@ -62,8 +62,8 @@ sal_Int32 ODatabaseMetaData::getInt32Property(const OUString& _aProperty)
bool ODatabaseMetaData::getBoolProperty(const OUString& _aProperty)
{
- connectivity::ado::WpADOProperties aProps(m_pADOConnection->get_Properties());
- ADOS::ThrowException(*m_pADOConnection,*this);
+ connectivity::ado::WpADOProperties aProps(m_rADOConnection.get_Properties());
+ ADOS::ThrowException(m_rADOConnection,*this);
OSL_ENSURE(aProps.IsValid(),"There are no properties at the connection");
ADO_PROP(_aProperty);
return !aVar.isNull() && !aVar.isEmpty() && aVar.getBool();
@@ -71,8 +71,8 @@ bool ODatabaseMetaData::getBoolProperty(const OUString& _aProperty)
OUString ODatabaseMetaData::getStringProperty(const OUString& _aProperty)
{
- connectivity::ado::WpADOProperties aProps(m_pADOConnection->get_Properties());
- ADOS::ThrowException(*m_pADOConnection,*this);
+ connectivity::ado::WpADOProperties aProps(m_rADOConnection.get_Properties());
+ ADOS::ThrowException(m_rADOConnection,*this);
OSL_ENSURE(aProps.IsValid(),"There are no properties at the connection");
ADO_PROP(_aProperty);
@@ -85,7 +85,7 @@ OUString ODatabaseMetaData::getStringProperty(const OUString& _aProperty)
Reference< XResultSet > ODatabaseMetaData::impl_getTypeInfo_throw( )
{
- ADORecordset *pRecordset = m_pADOConnection->getTypeInfo();
+ ADORecordset *pRecordset = m_rADOConnection.getTypeInfo();
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset);
pResult->setTypeInfoMap(ADOS::isJetEngine(m_pConnection->getEngineType()));
@@ -98,8 +98,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCatalogs( )
vtEmpty.setNoArg();
ADORecordset *pRecordset = nullptr;
- m_pADOConnection->OpenSchema(adSchemaCatalogs,vtEmpty,vtEmpty,&pRecordset);
- ADOS::ThrowException(*m_pADOConnection,*this);
+ m_rADOConnection.OpenSchema(adSchemaCatalogs,vtEmpty,vtEmpty,&pRecordset);
+ ADOS::ThrowException(m_rADOConnection,*this);
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset);
pResult->setCatalogsMap();
@@ -118,8 +118,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getSchemas( )
vtEmpty.setNoArg();
ADORecordset *pRecordset = nullptr;
- m_pADOConnection->OpenSchema(adSchemaSchemata,vtEmpty,vtEmpty,&pRecordset);
- ADOS::ThrowException(*m_pADOConnection,*this);
+ m_rADOConnection.OpenSchema(adSchemaSchemata,vtEmpty,vtEmpty,&pRecordset);
+ ADOS::ThrowException(m_rADOConnection,*this);
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset);
pResult->setSchemasMap();
@@ -130,8 +130,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumnPrivileges(
const Any& catalog, const OUString& schema, const OUString& table,
const OUString& columnNamePattern )
{
- ADORecordset *pRecordset = m_pADOConnection->getColumnPrivileges(catalog,schema,table,columnNamePattern);
- ADOS::ThrowException(*m_pADOConnection,*this);
+ ADORecordset *pRecordset = m_rADOConnection.getColumnPrivileges(catalog,schema,table,columnNamePattern);
+ ADOS::ThrowException(m_rADOConnection,*this);
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset);
pResult->setColumnPrivilegesMap();
@@ -142,8 +142,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns(
const Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern,
const OUString& columnNamePattern )
{
- ADORecordset *pRecordset = m_pADOConnection->getColumns(catalog,schemaPattern,tableNamePattern,columnNamePattern);
- ADOS::ThrowException(*m_pADOConnection,*this);
+ ADORecordset *pRecordset = m_rADOConnection.getColumns(catalog,schemaPattern,tableNamePattern,columnNamePattern);
+ ADOS::ThrowException(m_rADOConnection,*this);
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset);
pResult->setColumnsMap();
@@ -155,8 +155,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables(
const Any& catalog, const OUString& schemaPattern,
const OUString& tableNamePattern, const Sequence< OUString >& types )
{
- ADORecordset *pRecordset = m_pADOConnection->getTables(catalog,schemaPattern,tableNamePattern,types);
- ADOS::ThrowException(*m_pADOConnection,*this);
+ ADORecordset *pRecordset = m_rADOConnection.getTables(catalog,schemaPattern,tableNamePattern,types);
+ ADOS::ThrowException(m_rADOConnection,*this);
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset);
pResult->setTablesMap();
@@ -168,8 +168,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getProcedureColumns(
const Any& catalog, const OUString& schemaPattern,
const OUString& procedureNamePattern, const OUString& columnNamePattern )
{
- ADORecordset *pRecordset = m_pADOConnection->getProcedureColumns(catalog,schemaPattern,procedureNamePattern,columnNamePattern);
- ADOS::ThrowException(*m_pADOConnection,*this);
+ ADORecordset *pRecordset = m_rADOConnection.getProcedureColumns(catalog,schemaPattern,procedureNamePattern,columnNamePattern);
+ ADOS::ThrowException(m_rADOConnection,*this);
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset);
pResult->setProcedureColumnsMap();
@@ -182,8 +182,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getProcedures(
const OUString& procedureNamePattern )
{
// Create elements used in the array
- ADORecordset *pRecordset = m_pADOConnection->getProcedures(catalog,schemaPattern,procedureNamePattern);
- ADOS::ThrowException(*m_pADOConnection,*this);
+ ADORecordset *pRecordset = m_rADOConnection.getProcedures(catalog,schemaPattern,procedureNamePattern);
+ ADOS::ThrowException(m_rADOConnection,*this);
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset);
pResult->setProceduresMap();
@@ -254,8 +254,8 @@ sal_Int32 ODatabaseMetaData::impl_getMaxTablesInSelect_throw( )
Reference< XResultSet > SAL_CALL ODatabaseMetaData::getExportedKeys(
const Any& catalog, const OUString& schema, const OUString& table )
{
- ADORecordset *pRecordset = m_pADOConnection->getExportedKeys(catalog,schema,table);
- ADOS::ThrowException(*m_pADOConnection,*this);
+ ADORecordset *pRecordset = m_rADOConnection.getExportedKeys(catalog,schema,table);
+ ADOS::ThrowException(m_rADOConnection,*this);
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset);
pResult->setCrossReferenceMap();
@@ -266,8 +266,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getExportedKeys(
Reference< XResultSet > SAL_CALL ODatabaseMetaData::getImportedKeys(
const Any& catalog, const OUString& schema, const OUString& table )
{
- ADORecordset *pRecordset = m_pADOConnection->getImportedKeys(catalog,schema,table);
- ADOS::ThrowException(*m_pADOConnection,*this);
+ ADORecordset *pRecordset = m_rADOConnection.getImportedKeys(catalog,schema,table);
+ ADOS::ThrowException(m_rADOConnection,*this);
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset);
pResult->setCrossReferenceMap();
@@ -278,8 +278,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getImportedKeys(
Reference< XResultSet > SAL_CALL ODatabaseMetaData::getPrimaryKeys(
const Any& catalog, const OUString& schema, const OUString& table )
{
- ADORecordset *pRecordset = m_pADOConnection->getPrimaryKeys(catalog,schema,table);
- ADOS::ThrowException(*m_pADOConnection,*this);
+ ADORecordset *pRecordset = m_rADOConnection.getPrimaryKeys(catalog,schema,table);
+ ADOS::ThrowException(m_rADOConnection,*this);
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset);
pResult->setPrimaryKeysMap();
@@ -291,8 +291,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getIndexInfo(
const Any& catalog, const OUString& schema, const OUString& table,
sal_Bool unique, sal_Bool approximate )
{
- ADORecordset *pRecordset = m_pADOConnection->getIndexInfo(catalog,schema,table,unique,approximate);
- ADOS::ThrowException(*m_pADOConnection,*this);
+ ADORecordset *pRecordset = m_rADOConnection.getIndexInfo(catalog,schema,table,unique,approximate);
+ ADOS::ThrowException(m_rADOConnection,*this);
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset);
pResult->setIndexInfoMap();
@@ -308,8 +308,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges(
{ // the jet provider doesn't support this method
// Create elements used in the array
- ADORecordset *pRecordset = m_pADOConnection->getTablePrivileges(catalog,schemaPattern,tableNamePattern);
- ADOS::ThrowException(*m_pADOConnection,*this);
+ ADORecordset *pRecordset = m_rADOConnection.getTablePrivileges(catalog,schemaPattern,tableNamePattern);
+ ADOS::ThrowException(m_rADOConnection,*this);
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset);
pResult->setTablePrivilegesMap();
@@ -358,8 +358,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCrossReference(
const OUString& primaryTable, const Any& foreignCatalog,
const OUString& foreignSchema, const OUString& foreignTable )
{
- ADORecordset *pRecordset = m_pADOConnection->getCrossReference(primaryCatalog,primarySchema,primaryTable,foreignCatalog,foreignSchema,foreignTable);
- ADOS::ThrowException(*m_pADOConnection,*this);
+ ADORecordset *pRecordset = m_rADOConnection.getCrossReference(primaryCatalog,primarySchema,primaryTable,foreignCatalog,foreignSchema,foreignTable);
+ ADOS::ThrowException(m_rADOConnection,*this);
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset);
pResult->setCrossReferenceMap();
@@ -790,7 +790,7 @@ sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92IntermediateSQL( )
OUString SAL_CALL ODatabaseMetaData::getURL( )
{
- return "sdbc:ado:"+ m_pADOConnection->GetConnectionString();
+ return "sdbc:ado:"+ m_rADOConnection.GetConnectionString();
}
OUString SAL_CALL ODatabaseMetaData::getUserName( )
@@ -836,7 +836,7 @@ sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMajorVersion( )
sal_Int32 SAL_CALL ODatabaseMetaData::getDefaultTransactionIsolation( )
{
sal_Int32 nRet = TransactionIsolation::NONE;
- switch(m_pADOConnection->get_IsolationLevel())
+ switch(m_rADOConnection.get_IsolationLevel())
{
case adXactReadCommitted:
nRet = TransactionIsolation::READ_COMMITTED;
@@ -863,22 +863,20 @@ sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMinorVersion( )
OUString SAL_CALL ODatabaseMetaData::getSQLKeywords( )
{
- ADORecordset *pRecordset = nullptr;
+ WpADORecordset aRecordset;
OLEVariant vtEmpty;
vtEmpty.setNoArg();
- m_pADOConnection->OpenSchema(adSchemaDBInfoKeywords,vtEmpty,vtEmpty,&pRecordset);
- OSL_ENSURE(pRecordset,"getSQLKeywords: no resultset!");
- ADOS::ThrowException(*m_pADOConnection,*this);
- if ( pRecordset )
+ m_rADOConnection.OpenSchema(adSchemaDBInfoKeywords,vtEmpty,vtEmpty,&aRecordset);
+ OSL_ENSURE(aRecordset,"getSQLKeywords: no resultset!");
+ ADOS::ThrowException(m_rADOConnection,*this);
+ if ( aRecordset )
{
- WpADORecordset aRecordset(pRecordset);
-
aRecordset.MoveFirst();
OLEVariant aValue;
OUString aRet;
while(!aRecordset.IsAtEOF())
{
- WpOLEAppendCollection<ADOFields, ADOField, WpADOField> aFields(aRecordset.GetFields());
+ WpOLEAppendCollection<ADOFields, WpADOField> aFields(aRecordset.GetFields());
WpADOField aField(aFields.GetItem(0));
aField.get_Value(aValue);
aRet += aValue.getString() + ",";
@@ -898,8 +896,7 @@ OUString SAL_CALL ODatabaseMetaData::getSearchStringEscape( )
OUString SAL_CALL ODatabaseMetaData::getStringFunctions( )
{
- OUString aValue;
- return aValue.copy(0,aValue.lastIndexOf(','));
+ return OUString();
}
OUString SAL_CALL ODatabaseMetaData::getTimeDateFunctions( )
@@ -909,8 +906,7 @@ OUString SAL_CALL ODatabaseMetaData::getTimeDateFunctions( )
OUString SAL_CALL ODatabaseMetaData::getSystemFunctions( )
{
- OUString aValue;
- return aValue.copy(0,aValue.lastIndexOf(','));
+ return OUString();
}
OUString SAL_CALL ODatabaseMetaData::getNumericFunctions( )
@@ -1031,8 +1027,6 @@ sal_Bool SAL_CALL ODatabaseMetaData::supportsBatchUpdates( )
Reference< XResultSet > SAL_CALL ODatabaseMetaData::getUDTs( const Any& /*catalog*/, const OUString& /*schemaPattern*/, const OUString& /*typeNamePattern*/, const Sequence< sal_Int32 >& /*types*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XDatabaseMetaData::getUDTs", *this );
- return Reference< XResultSet >();
}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/ado/ADatabaseMetaDataImpl.cxx b/connectivity/source/drivers/ado/ADatabaseMetaDataImpl.cxx
index 8972a4f2dee1..01a07ab96bf6 100644
--- a/connectivity/source/drivers/ado/ADatabaseMetaDataImpl.cxx
+++ b/connectivity/source/drivers/ado/ADatabaseMetaDataImpl.cxx
@@ -29,6 +29,9 @@
#include <ado/AIndex.hxx>
#include <ado/AKey.hxx>
#include <ado/ATable.hxx>
+
+#include <systools/win32/oleauto.hxx>
+
#include <com/sun/star/sdbc/DataType.hpp>
#include <com/sun/star/sdbc/ProcedureResult.hpp>
#include <com/sun/star/sdbc/ColumnValue.hpp>
@@ -48,24 +51,22 @@ using namespace ::com::sun::star::uno;
void ODatabaseMetaData::fillLiterals()
{
- ADORecordset *pRecordset = nullptr;
+ WpADORecordset aRecordset;
OLEVariant vtEmpty;
vtEmpty.setNoArg();
- m_pADOConnection->OpenSchema(adSchemaDBInfoLiterals,vtEmpty,vtEmpty,&pRecordset);
+ m_rADOConnection.OpenSchema(adSchemaDBInfoLiterals,vtEmpty,vtEmpty,&aRecordset);
- ADOS::ThrowException(*m_pADOConnection,*this);
+ ADOS::ThrowException(m_rADOConnection,*this);
- OSL_ENSURE(pRecordset,"fillLiterals: no resultset!");
- if ( pRecordset )
+ OSL_ENSURE(aRecordset,"fillLiterals: no resultset!");
+ if ( aRecordset )
{
- WpADORecordset aRecordset(pRecordset);
-
aRecordset.MoveFirst();
OLEVariant aValue;
LiteralInfo aInfo;
while(!aRecordset.IsAtEOF())
{
- WpOLEAppendCollection<ADOFields, ADOField, WpADOField> aFields(aRecordset.GetFields());
+ WpOLEAppendCollection<ADOFields, WpADOField> aFields(aRecordset.GetFields());
WpADOField aField(aFields.GetItem(1));
aInfo.pwszLiteralValue = aField.get_Value().getString();
aField = aFields.GetItem(5);
@@ -387,19 +388,7 @@ RightsEnum OAdoGroup::Map2Right(sal_Int32 _eNum)
void WpADOIndex::Create()
{
- _ADOIndex* pIndex = nullptr;
- HRESULT hr = CoCreateInstance(ADOS::CLSID_ADOINDEX_25,
- nullptr,
- CLSCTX_INPROC_SERVER,
- ADOS::IID_ADOINDEX_25,
- reinterpret_cast<void**>(&pIndex) );
-
-
- if( !FAILED( hr ) )
- {
- operator=( pIndex );
- pIndex->Release();
- }
+ pInterface.CoCreateInstance(ADOS::CLSID_ADOINDEX_25, nullptr, CLSCTX_INPROC_SERVER);
}
void OAdoIndex::fillPropertyValues()
@@ -415,19 +404,7 @@ void OAdoIndex::fillPropertyValues()
void WpADOKey::Create()
{
- _ADOKey* pKey = nullptr;
- HRESULT hr = CoCreateInstance(ADOS::CLSID_ADOKEY_25,
- nullptr,
- CLSCTX_INPROC_SERVER,
- ADOS::IID_ADOKEY_25,
- reinterpret_cast<void**>(&pKey) );
-
-
- if( !FAILED( hr ) )
- {
- operator=( pKey );
- pKey->Release();
- }
+ pInterface.CoCreateInstance(ADOS::CLSID_ADOKEY_25, nullptr, CLSCTX_INPROC_SERVER);
}
void OAdoKey::fillPropertyValues()
@@ -524,29 +501,16 @@ KeyTypeEnum OAdoKey::Map2KeyRule(sal_Int32 _eNum)
void WpADOTable::Create()
{
- _ADOTable* pTable = nullptr;
- HRESULT hr = CoCreateInstance(ADOS::CLSID_ADOTABLE_25,
- nullptr,
- CLSCTX_INPROC_SERVER,
- ADOS::IID_ADOTABLE_25,
- reinterpret_cast<void**>(&pTable) );
-
-
- if( !FAILED( hr ) )
- {
- operator=( pTable );
- pTable->Release();
- }
+ pInterface.CoCreateInstance(ADOS::CLSID_ADOTABLE_25, nullptr, CLSCTX_INPROC_SERVER);
}
OUString WpADOCatalog::GetObjectOwner(std::u16string_view _rName, ObjectTypeEnum _eNum)
{
OLEVariant _rVar;
_rVar.setNoArg();
- OLEString aBSTR;
- OLEString sStr1(_rName);
- pInterface->GetObjectOwner(sStr1.asBSTR(),_eNum,_rVar,aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->GetObjectOwner(sal::systools::BStr(_rName), _eNum, _rVar, &aBSTR);
+ return OUString(aBSTR);
}
void OAdoTable::fillPropertyValues()
@@ -571,19 +535,7 @@ void OAdoTable::fillPropertyValues()
void WpADOUser::Create()
{
- _ADOUser* pUser = nullptr;
- HRESULT hr = CoCreateInstance(ADOS::CLSID_ADOUSER_25,
- nullptr,
- CLSCTX_INPROC_SERVER,
- ADOS::IID_ADOUSER_25,
- reinterpret_cast<void**>(&pUser) );
-
-
- if( !FAILED( hr ) )
- {
- operator=( pUser );
- pUser->Release();
- }
+ pInterface.CoCreateInstance(ADOS::CLSID_ADOUSER_25, nullptr, CLSCTX_INPROC_SERVER);
}
diff --git a/connectivity/source/drivers/ado/ADatabaseMetaDataResultSet.cxx b/connectivity/source/drivers/ado/ADatabaseMetaDataResultSet.cxx
index 2b94f944656d..4234d15282ff 100644
--- a/connectivity/source/drivers/ado/ADatabaseMetaDataResultSet.cxx
+++ b/connectivity/source/drivers/ado/ADatabaseMetaDataResultSet.cxx
@@ -53,7 +53,6 @@ ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet(ADORecordset* _pRecordSet
:ODatabaseMetaDataResultSet_BASE(m_aMutex)
,OPropertySetHelper(ODatabaseMetaDataResultSet_BASE::rBHelper)
,m_pRecordSet(_pRecordSet)
- ,m_aStatement(nullptr)
,m_nRowPos(0)
,m_bWasNull(false)
,m_bEOF(false)
@@ -88,7 +87,6 @@ void ODatabaseMetaDataResultSet::disposing()
::osl::MutexGuard aGuard(m_aMutex);
if(m_pRecordSet)
m_pRecordSet->Close();
- m_aStatement = nullptr;
m_xMetaData.clear();
}
@@ -100,11 +98,8 @@ Any SAL_CALL ODatabaseMetaDataResultSet::queryInterface( const Type & rType )
css::uno::Sequence< css::uno::Type > SAL_CALL ODatabaseMetaDataResultSet::getTypes( )
{
- ::cppu::OTypeCollection aTypes( cppu::UnoType<css::beans::XMultiPropertySet>::get(),
- cppu::UnoType<css::beans::XFastPropertySet>::get(),
- cppu::UnoType<css::beans::XPropertySet>::get());
-
- return ::comphelper::concatSequences(aTypes.getTypes(),ODatabaseMetaDataResultSet_BASE::getTypes());
+ return comphelper::concatSequences(cppu::OPropertySetHelper::getTypes(),
+ ODatabaseMetaDataResultSet_BASE::getTypes());
}
void ODatabaseMetaDataResultSet::checkRecordSet()
@@ -113,7 +108,6 @@ void ODatabaseMetaDataResultSet::checkRecordSet()
throwFunctionSequenceException(*this);
}
-
sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::findColumn( const OUString& columnName )
{
::osl::MutexGuard aGuard( m_aMutex );
@@ -131,9 +125,8 @@ sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::findColumn( const OUString& colum
}
::dbtools::throwInvalidColumnException( columnName, *this );
- assert(false);
- return 0; // Never reached
}
+
#define BLOCK_SIZE 256
Reference< css::io::XInputStream > SAL_CALL ODatabaseMetaDataResultSet::getBinaryStream( sal_Int32 columnIndex )
@@ -182,10 +175,8 @@ Reference< css::io::XInputStream > SAL_CALL ODatabaseMetaDataResultSet::getBinar
Reference< css::io::XInputStream > SAL_CALL ODatabaseMetaDataResultSet::getCharacterStream( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getCharacterStream", *this );
- return nullptr;
}
-
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::getBoolean( sal_Int32 columnIndex )
{
::osl::MutexGuard aGuard( m_aMutex );
@@ -262,21 +253,16 @@ sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::getInt( sal_Int32 columnIndex )
return m_aValue.getInt32();
}
-
sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::getRow( )
{
::dbtools::throwFeatureNotImplementedSQLException( "XResultSet::getRow", *this );
- return 0;
}
-
sal_Int64 SAL_CALL ODatabaseMetaDataResultSet::getLong( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getLong", *this );
- return sal_Int64(0);
}
-
Reference< XResultSetMetaData > SAL_CALL ODatabaseMetaDataResultSet::getMetaData( )
{
::osl::MutexGuard aGuard( m_aMutex );
@@ -294,30 +280,23 @@ Reference< XResultSetMetaData > SAL_CALL ODatabaseMetaDataResultSet::getMetaData
Reference< XArray > SAL_CALL ODatabaseMetaDataResultSet::getArray( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getRow", *this );
- return nullptr;
}
-
Reference< XClob > SAL_CALL ODatabaseMetaDataResultSet::getClob( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getRow", *this );
- return nullptr;
}
Reference< XBlob > SAL_CALL ODatabaseMetaDataResultSet::getBlob( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getRow", *this );
- return nullptr;
}
-
Reference< XRef > SAL_CALL ODatabaseMetaDataResultSet::getRef( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getRow", *this );
- return nullptr;
}
-
Any SAL_CALL ODatabaseMetaDataResultSet::getObject( sal_Int32 columnIndex, const Reference< css::container::XNameAccess >& /*typeMap*/ )
{
::osl::MutexGuard aGuard( m_aMutex );
@@ -528,7 +507,7 @@ sal_Bool SAL_CALL ODatabaseMetaDataResultSet::previous( )
Reference< XInterface > SAL_CALL ODatabaseMetaDataResultSet::getStatement( )
{
- return m_aStatement.get();
+ return nullptr;
}
@@ -691,21 +670,41 @@ void ODatabaseMetaDataResultSet::setFetchSize(sal_Int32 _par0)
::cppu::IPropertyArrayHelper* ODatabaseMetaDataResultSet::createArrayHelper( ) const
{
- Sequence< css::beans::Property > aProps(5);
- css::beans::Property* pProperties = aProps.getArray();
- sal_Int32 nPos = 0;
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
- PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
- PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
- PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
- PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
- PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0);
-
- return new ::cppu::OPropertyArrayHelper(aProps);
+ return new ::cppu::OPropertyArrayHelper
+ {
+ {
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
+ PROPERTY_ID_CURSORNAME,
+ cppu::UnoType<OUString>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
+ PROPERTY_ID_FETCHDIRECTION,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
+ PROPERTY_ID_FETCHSIZE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
+ PROPERTY_ID_RESULTSETCONCURRENCY,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
+ PROPERTY_ID_RESULTSETTYPE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ }
+ }
+ };
}
::cppu::IPropertyArrayHelper & ODatabaseMetaDataResultSet::getInfoHelper()
diff --git a/connectivity/source/drivers/ado/ADatabaseMetaDataResultSetMetaData.cxx b/connectivity/source/drivers/ado/ADatabaseMetaDataResultSetMetaData.cxx
index 94dbfddb34f9..3fa13d06b84a 100644
--- a/connectivity/source/drivers/ado/ADatabaseMetaDataResultSetMetaData.cxx
+++ b/connectivity/source/drivers/ado/ADatabaseMetaDataResultSetMetaData.cxx
@@ -71,9 +71,8 @@ sal_Int32 SAL_CALL ODatabaseMetaDataResultSetMetaData::getColumnCount()
if (m_vMapping.size())
return m_mColumns.size();
- ADOFields* pFields = nullptr;
- m_pRecordSet->get_Fields(&pFields);
- WpOLEAppendCollection<ADOFields, ADOField, WpADOField> aFields(pFields);
+ WpOLEAppendCollection<ADOFields, WpADOField> aFields;
+ m_pRecordSet->get_Fields(&aFields);
m_nColCount = aFields.GetItemCount();
return m_nColCount;
}
diff --git a/connectivity/source/drivers/ado/ADriver.cxx b/connectivity/source/drivers/ado/ADriver.cxx
index 3cdfeab26888..a998664fdd86 100644
--- a/connectivity/source/drivers/ado/ADriver.cxx
+++ b/connectivity/source/drivers/ado/ADriver.cxx
@@ -63,7 +63,7 @@ void ODriver::disposing()
for (auto& rxConnection : m_xConnections)
{
- Reference< XComponent > xComp(rxConnection.get(), UNO_QUERY);
+ rtl::Reference< OConnection > xComp(rxConnection.get());
if (xComp.is())
xComp->dispose();
}
@@ -96,8 +96,7 @@ Reference< XConnection > SAL_CALL ODriver::connect( const OUString& url, const S
// we need to wrap the connection as the construct call might throw
rtl::Reference<OConnection> pCon(new OConnection(this));
pCon->construct(url,info);
- OConnection* pPtr = pCon.get();
- m_xConnections.push_back(WeakReferenceHelper(*pPtr));
+ m_xConnections.push_back(pCon);
return pCon;
}
@@ -187,10 +186,9 @@ Reference< XTablesSupplier > SAL_CALL ODriver::getDataDefinitionByConnection( co
aCatalog.Create();
if(aCatalog.IsValid())
{
- aCatalog.putref_ActiveConnection(*pConnection->getConnection());
+ aCatalog.putref_ActiveConnection(pConnection->getConnection());
rtl::Reference<OCatalog> pCatalog = new OCatalog(aCatalog,pConnection);
xTab = pCatalog;
- pConnection->setCatalog(xTab);
pConnection->setCatalog(pCatalog.get());
}
}
@@ -206,13 +204,11 @@ Reference< XTablesSupplier > SAL_CALL ODriver::getDataDefinitionByURL( const OUS
void ADOS::ThrowException(ADOConnection* _pAdoCon,const Reference< XInterface >& _xInterface)
{
- ADOErrors *pErrors = nullptr;
+ sal::systools::COMReference<ADOErrors> pErrors;
_pAdoCon->get_Errors(&pErrors);
if(!pErrors)
return; // no error found
- pErrors->AddRef( );
-
// read all noted errors and issue them
sal_Int32 nLen;
pErrors->get_Count(&nLen);
@@ -222,28 +218,25 @@ void ADOS::ThrowException(ADOConnection* _pAdoCon,const Reference< XInterface >&
aException.ErrorCode = 1000;
for (sal_Int32 i = nLen-1; i>=0; --i)
{
- ADOError *pError = nullptr;
- pErrors->get_Item(OLEVariant(i),&pError);
- WpADOError aErr(pError);
- OSL_ENSURE(pError,"No error in collection found! BAD!");
- if(pError)
+ WpADOError aErr;
+ pErrors->get_Item(OLEVariant(i),&aErr);
+ OSL_ENSURE(aErr,"No error in collection found! BAD!");
+ if(aErr)
{
if(i==nLen-1)
aException = SQLException(aErr.GetDescription(),_xInterface,aErr.GetSQLState(),aErr.GetNumber(),Any());
else
{
SQLException aTemp(aErr.GetDescription(),
- _xInterface,aErr.GetSQLState(),aErr.GetNumber(),makeAny(aException));
+ _xInterface,aErr.GetSQLState(),aErr.GetNumber(),Any(aException));
aTemp.NextException <<= aException;
aException = aTemp;
}
}
}
pErrors->Clear();
- pErrors->Release();
throw aException;
}
- pErrors->Release();
}
extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
diff --git a/connectivity/source/drivers/ado/AGroup.cxx b/connectivity/source/drivers/ado/AGroup.cxx
index f4ed2b12adbc..02cd239d7682 100644
--- a/connectivity/source/drivers/ado/AGroup.cxx
+++ b/connectivity/source/drivers/ado/AGroup.cxx
@@ -36,26 +36,14 @@ using namespace com::sun::star::sdbcx;
void WpADOGroup::Create()
{
- ADOGroup* pGroup = nullptr;
- HRESULT hr = CoCreateInstance(ADOS::CLSID_ADOGROUP_25,
- nullptr,
- CLSCTX_INPROC_SERVER,
- ADOS::IID_ADOGROUP_25,
- reinterpret_cast<void**>(&pGroup) );
-
-
- if( !FAILED( hr ) )
- {
- operator=( pGroup );
- pGroup->Release();
- }
+ pInterface.CoCreateInstance(ADOS::CLSID_ADOGROUP_25, nullptr, CLSCTX_INPROC_SERVER);
}
OAdoGroup::OAdoGroup(OCatalog* _pParent,bool _bCase, ADOGroup* _pGroup) : OGroup_ADO(_bCase),m_pCatalog(_pParent)
{
construct();
if(_pGroup)
- m_aGroup = WpADOGroup(_pGroup);
+ m_aGroup.set(_pGroup);
else
m_aGroup.Create();
@@ -81,21 +69,6 @@ void OAdoGroup::refreshUsers()
m_pUsers.reset(new OUsers(m_pCatalog, m_aMutex, aVector, aUsers, isCaseSensitive()));
}
-Sequence< sal_Int8 > OAdoGroup::getUnoTunnelId()
-{
- static const comphelper::UnoIdInit implId;
- return implId.getSeq();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OAdoGroup::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return comphelper::getSomethingImpl(rId, this,
- comphelper::FallbackToGetSomethingOf<OGroup_ADO>{});
-}
-
-
void OAdoGroup::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue)
{
if(m_aGroup.IsValid())
diff --git a/connectivity/source/drivers/ado/AGroups.cxx b/connectivity/source/drivers/ado/AGroups.cxx
index e3fb165b0a34..527cfaac13fa 100644
--- a/connectivity/source/drivers/ado/AGroups.cxx
+++ b/connectivity/source/drivers/ado/AGroups.cxx
@@ -40,7 +40,7 @@ using namespace com::sun::star::sdbc;
using namespace com::sun::star::container;
-sdbcx::ObjectType OGroups::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > OGroups::createObject(const OUString& _rName)
{
return new OAdoGroup(m_pCatalog,isCaseSensitive(),_rName);
}
@@ -56,9 +56,9 @@ Reference< XPropertySet > OGroups::createDescriptor()
}
// XAppend
-sdbcx::ObjectType OGroups::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
+css::uno::Reference< css::beans::XPropertySet > OGroups::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
{
- OAdoGroup* pGroup = getFromUnoTunnel<OAdoGroup>(descriptor);
+ OAdoGroup* pGroup = dynamic_cast<OAdoGroup*>(descriptor.get());
if ( pGroup == nullptr )
m_pCatalog->getConnection()->throwGenericSQLException( STR_INVALID_GROUP_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) );
diff --git a/connectivity/source/drivers/ado/AIndex.cxx b/connectivity/source/drivers/ado/AIndex.cxx
index 6b58900893b8..b183d49c2435 100644
--- a/connectivity/source/drivers/ado/AIndex.cxx
+++ b/connectivity/source/drivers/ado/AIndex.cxx
@@ -39,7 +39,7 @@ OAdoIndex::OAdoIndex(bool _bCase,OConnection* _pConnection,ADOIndex* _pIndex)
,m_pConnection(_pConnection)
{
construct();
- m_aIndex = WpADOIndex(_pIndex);
+ m_aIndex.set(_pIndex);
fillPropertyValues();
}
@@ -70,20 +70,6 @@ void OAdoIndex::refreshColumns()
}
-Sequence< sal_Int8 > OAdoIndex::getUnoTunnelId()
-{
- static const comphelper::UnoIdInit implId;
- return implId.getSeq();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OAdoIndex::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return comphelper::getSomethingImpl(rId, this,
- comphelper::FallbackToGetSomethingOf<sdbcx::OIndex>{});
-}
-
void SAL_CALL OAdoIndex::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue)
{
if(m_aIndex.IsValid())
diff --git a/connectivity/source/drivers/ado/AIndexes.cxx b/connectivity/source/drivers/ado/AIndexes.cxx
index c2cdb76081d2..ea80e2d6d4a7 100644
--- a/connectivity/source/drivers/ado/AIndexes.cxx
+++ b/connectivity/source/drivers/ado/AIndexes.cxx
@@ -40,7 +40,7 @@ using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
using namespace com::sun::star::container;
-sdbcx::ObjectType OIndexes::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > OIndexes::createObject(const OUString& _rName)
{
return new OAdoIndex(isCaseSensitive(),m_pConnection,m_aCollection.GetItem(_rName));
}
@@ -56,16 +56,16 @@ Reference< XPropertySet > OIndexes::createDescriptor()
}
// XAppend
-sdbcx::ObjectType OIndexes::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
+css::uno::Reference< css::beans::XPropertySet > OIndexes::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
{
- OAdoIndex* pIndex = getFromUnoTunnel<OAdoIndex>(descriptor);
+ OAdoIndex* pIndex = dynamic_cast<OAdoIndex*>(descriptor.get());
if ( pIndex == nullptr )
m_pConnection->throwGenericSQLException( STR_INVALID_INDEX_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) );
ADOIndexes* pIndexes = m_aCollection;
if ( FAILED( pIndexes->Append( OLEVariant( _rForName ), OLEVariant( pIndex->getImpl() ) ) ) )
{
- ADOS::ThrowException(*m_pConnection->getConnection(),static_cast<XTypeProvider*>(this));
+ ADOS::ThrowException(m_pConnection->getConnection(),static_cast<XTypeProvider*>(this));
m_pConnection->throwGenericSQLException( STR_INVALID_INDEX_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) );
}
diff --git a/connectivity/source/drivers/ado/AKey.cxx b/connectivity/source/drivers/ado/AKey.cxx
index 35e121c6bb7a..9c2734ede8f1 100644
--- a/connectivity/source/drivers/ado/AKey.cxx
+++ b/connectivity/source/drivers/ado/AKey.cxx
@@ -37,7 +37,7 @@ OAdoKey::OAdoKey(bool _bCase,OConnection* _pConnection, ADOKey* _pKey)
,m_pConnection(_pConnection)
{
construct();
- m_aKey = WpADOKey(_pKey);
+ m_aKey.set(_pKey);
fillPropertyValues();
}
@@ -66,20 +66,6 @@ void OAdoKey::refreshColumns()
m_pColumns.reset(new OColumns(*this, m_aMutex, aVector, aColumns, isCaseSensitive(), m_pConnection));
}
-Sequence< sal_Int8 > OAdoKey::getUnoTunnelId()
-{
- static const comphelper::UnoIdInit implId;
- return implId.getSeq();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OAdoKey::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return comphelper::getSomethingImpl(rId, this,
- comphelper::FallbackToGetSomethingOf<OKey_ADO>{});
-}
-
void OAdoKey::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue)
{
if(m_aKey.IsValid())
@@ -91,7 +77,7 @@ void OAdoKey::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rVal
OUString aVal;
rValue >>= aVal;
m_aKey.put_Name(aVal);
- ADOS::ThrowException(*m_pConnection->getConnection(),*this);
+ ADOS::ThrowException(m_pConnection->getConnection(),*this);
}
break;
case PROPERTY_ID_TYPE:
@@ -99,7 +85,7 @@ void OAdoKey::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rVal
sal_Int32 nVal=0;
rValue >>= nVal;
m_aKey.put_Type(Map2KeyRule(nVal));
- ADOS::ThrowException(*m_pConnection->getConnection(),*this);
+ ADOS::ThrowException(m_pConnection->getConnection(),*this);
}
break;
case PROPERTY_ID_REFERENCEDTABLE:
@@ -107,7 +93,7 @@ void OAdoKey::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rVal
OUString aVal;
rValue >>= aVal;
m_aKey.put_RelatedTable(aVal);
- ADOS::ThrowException(*m_pConnection->getConnection(),*this);
+ ADOS::ThrowException(m_pConnection->getConnection(),*this);
}
break;
case PROPERTY_ID_UPDATERULE:
@@ -115,7 +101,7 @@ void OAdoKey::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rVal
sal_Int32 nVal=0;
rValue >>= nVal;
m_aKey.put_UpdateRule(Map2Rule(nVal));
- ADOS::ThrowException(*m_pConnection->getConnection(),*this);
+ ADOS::ThrowException(m_pConnection->getConnection(),*this);
}
break;
case PROPERTY_ID_DELETERULE:
@@ -123,7 +109,7 @@ void OAdoKey::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rVal
sal_Int32 nVal=0;
rValue >>= nVal;
m_aKey.put_DeleteRule(Map2Rule(nVal));
- ADOS::ThrowException(*m_pConnection->getConnection(),*this);
+ ADOS::ThrowException(m_pConnection->getConnection(),*this);
}
break;
}
diff --git a/connectivity/source/drivers/ado/AKeys.cxx b/connectivity/source/drivers/ado/AKeys.cxx
index a18d91709455..caf7eda5a391 100644
--- a/connectivity/source/drivers/ado/AKeys.cxx
+++ b/connectivity/source/drivers/ado/AKeys.cxx
@@ -40,7 +40,7 @@ using namespace com::sun::star::sdbc;
using namespace com::sun::star::sdbcx;
using namespace com::sun::star::container;
-sdbcx::ObjectType OKeys::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > OKeys::createObject(const OUString& _rName)
{
return new OAdoKey(isCaseSensitive(),m_pConnection,m_aCollection.GetItem(_rName));
}
@@ -56,9 +56,9 @@ Reference< XPropertySet > OKeys::createDescriptor()
}
// XAppend
-sdbcx::ObjectType OKeys::appendObject( const OUString&, const Reference< XPropertySet >& descriptor )
+css::uno::Reference< css::beans::XPropertySet > OKeys::appendObject( const OUString&, const Reference< XPropertySet >& descriptor )
{
- OAdoKey* pKey = getFromUnoTunnel<OAdoKey>( descriptor );
+ OAdoKey* pKey = dynamic_cast<OAdoKey*>( descriptor.get() );
if ( pKey == nullptr)
m_pConnection->throwGenericSQLException( STR_INVALID_KEY_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) );
@@ -78,7 +78,7 @@ sdbcx::ObjectType OKeys::appendObject( const OUString&, const Reference< XProper
adKeyPrimary, // must be every time adKeyPrimary
vOptional)) )
{
- ADOS::ThrowException(*m_pConnection->getConnection(),static_cast<XTypeProvider*>(this));
+ ADOS::ThrowException(m_pConnection->getConnection(),static_cast<XTypeProvider*>(this));
// just make sure that an SQLExceptionis thrown here
m_pConnection->throwGenericSQLException( STR_INVALID_KEY_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) );
}
@@ -90,7 +90,7 @@ sdbcx::ObjectType OKeys::appendObject( const OUString&, const Reference< XProper
void OKeys::dropObject(sal_Int32 /*_nPos*/,const OUString& _sElementName)
{
if(!m_aCollection.Delete(OLEVariant(_sElementName).getString()))
- ADOS::ThrowException(*m_pConnection->getConnection(),static_cast<XTypeProvider*>(this));
+ ADOS::ThrowException(m_pConnection->getConnection(),static_cast<XTypeProvider*>(this));
}
diff --git a/connectivity/source/drivers/ado/APreparedStatement.cxx b/connectivity/source/drivers/ado/APreparedStatement.cxx
index 0db461ef12d3..d7c82d184fdb 100644
--- a/connectivity/source/drivers/ado/APreparedStatement.cxx
+++ b/connectivity/source/drivers/ado/APreparedStatement.cxx
@@ -38,7 +38,7 @@
#define CHECK_RETURN(x) \
if(!x) \
- ADOS::ThrowException(*m_pConnection->getConnection(),*this);
+ ADOS::ThrowException(m_pConnection->getConnection(),*this);
#ifdef max
# undef max
@@ -55,7 +55,7 @@ using namespace com::sun::star::util;
IMPLEMENT_SERVICE_INFO(OPreparedStatement,"com.sun.star.sdbcx.APreparedStatement","com.sun.star.sdbc.PreparedStatement");
OPreparedStatement::OPreparedStatement( OConnection* _pConnection, const OUString& sql)
- : OStatement_Base( _pConnection )
+ : OPreparedStatement_BASE(_pConnection)
{
osl_atomic_increment( &m_refCount );
@@ -92,24 +92,6 @@ OPreparedStatement::~OPreparedStatement()
}
}
-Any SAL_CALL OPreparedStatement::queryInterface( const Type & rType )
-{
- Any aRet = OStatement_Base::queryInterface(rType);
- return aRet.hasValue() ? aRet : ::cppu::queryInterface( rType,
- static_cast< XPreparedStatement*>(this),
- static_cast< XParameters*>(this),
- static_cast< XResultSetMetaDataSupplier*>(this));
-}
-
-css::uno::Sequence< css::uno::Type > SAL_CALL OPreparedStatement::getTypes( )
-{
- ::cppu::OTypeCollection aTypes( cppu::UnoType<XPreparedStatement>::get(),
- cppu::UnoType<XParameters>::get(),
- cppu::UnoType<XResultSetMetaDataSupplier>::get());
-
- return ::comphelper::concatSequences(aTypes.getTypes(),OStatement_Base::getTypes());
-}
-
Reference< XResultSetMetaData > SAL_CALL OPreparedStatement::getMetaData( )
{
if(!m_xMetaData.is() && m_RecordSet.IsValid())
@@ -151,7 +133,7 @@ sal_Bool SAL_CALL OPreparedStatement::execute( )
try {
ADORecordset* pSet=nullptr;
CHECK_RETURN(m_Command.Execute(m_RecordsAffected,m_Parameters,adCmdUnknown,&pSet))
- m_RecordSet = WpADORecordset(pSet);
+ m_RecordSet.set(pSet);
}
catch (SQLWarning&)
{
@@ -171,11 +153,11 @@ sal_Int32 SAL_CALL OPreparedStatement::executeUpdate( )
CHECK_RETURN(m_Command.Execute(m_RecordsAffected,m_Parameters,adCmdUnknown,&pSet))
if ( VT_ERROR == m_RecordsAffected.getType() )
{
- ADOS::ThrowException(*m_pConnection->getConnection(),*this);
+ ADOS::ThrowException(m_pConnection->getConnection(),*this);
// to be sure that we get the error really thrown
throw SQLException();
}
- m_RecordSet = WpADORecordset(pSet);
+ m_RecordSet.set(pSet);
return m_RecordsAffected.getInt32();
}
@@ -199,10 +181,9 @@ void OPreparedStatement::setParameter(sal_Int32 parameterIndex, const DataTypeEn
}
else
{
- ADOParameter* pParam = nullptr;
- m_pParameters->get_Item(OLEVariant(sal_Int32(parameterIndex-1)),&pParam);
- WpADOParameter aParam(pParam);
- if(pParam)
+ WpADOParameter aParam;
+ m_pParameters->get_Item(OLEVariant(sal_Int32(parameterIndex-1)),&aParam);
+ if(aParam)
{
DataTypeEnum eType = aParam.GetADOType();
if ( _eType != eType && _eType != adDBTimeStamp )
@@ -220,7 +201,7 @@ void OPreparedStatement::setParameter(sal_Int32 parameterIndex, const DataTypeEn
CHECK_RETURN(aParam.PutValue(Val));
}
}
- ADOS::ThrowException(*m_pConnection->getConnection(),*this);
+ ADOS::ThrowException(m_pConnection->getConnection(),*this);
}
void SAL_CALL OPreparedStatement::setString( sal_Int32 parameterIndex, const OUString& x )
@@ -265,7 +246,7 @@ Reference< XResultSet > SAL_CALL OPreparedStatement::executeQuery( )
rtl::Reference<OResultSet> pSet = new OResultSet(m_RecordSet,this);
pSet->construct();
pSet->setMetaData(getMetaData());
- m_xResultSet = WeakReference<XResultSet>(pSet);
+ m_xResultSet = pSet.get();
return pSet;
}
@@ -412,10 +393,9 @@ void SAL_CALL OPreparedStatement::clearParameters( )
aVal.setEmpty();
for(sal_Int32 i=0;i<nCount;++i)
{
- ADOParameter* pParam = nullptr;
- m_pParameters->get_Item(OLEVariant(i),&pParam);
- WpADOParameter aParam(pParam);
- if(pParam)
+ WpADOParameter aParam;
+ m_pParameters->get_Item(OLEVariant(i),&aParam);
+ if(aParam)
{
CHECK_RETURN(aParam.PutValue(aVal));
}
@@ -423,16 +403,6 @@ void SAL_CALL OPreparedStatement::clearParameters( )
}
}
-void SAL_CALL OPreparedStatement::acquire() noexcept
-{
- OStatement_Base::acquire();
-}
-
-void SAL_CALL OPreparedStatement::release() noexcept
-{
- OStatement_Base::release();
-}
-
void OPreparedStatement::replaceParameterNodeName(OSQLParseNode const * _pNode,
const OUString& _sDefaultName,
sal_Int32& _rParameterCount)
@@ -444,7 +414,7 @@ void OPreparedStatement::replaceParameterNodeName(OSQLParseNode const * _pNode,
if(SQL_ISRULE(pChildNode,parameter) && pChildNode->count() == 1)
{
OSQLParseNode* pNewNode = new OSQLParseNode(OUString(":") ,SQLNodeType::Punctuation,0);
- delete pChildNode->replace(pChildNode->getChild(0),pNewNode);
+ pChildNode->replaceAndDelete(pChildNode->getChild(0), pNewNode);
OUString sParameterName = _sDefaultName + OUString::number(++_rParameterCount);
pChildNode->append(new OSQLParseNode( sParameterName,SQLNodeType::Name,0));
}
diff --git a/connectivity/source/drivers/ado/AResultSet.cxx b/connectivity/source/drivers/ado/AResultSet.cxx
index abae9087823e..ae1013c1c177 100644
--- a/connectivity/source/drivers/ado/AResultSet.cxx
+++ b/connectivity/source/drivers/ado/AResultSet.cxx
@@ -44,7 +44,7 @@ using namespace ::comphelper;
#define CHECK_RETURN(x) \
if(!SUCCEEDED(x)) \
- ADOS::ThrowException(*m_pStmt->m_pConnection->getConnection(),*this);
+ ADOS::ThrowException(m_pStmt->m_pConnection->getConnection(),*this);
using namespace connectivity::ado;
using namespace com::sun::star::uno;
@@ -132,14 +132,10 @@ Any SAL_CALL OResultSet::queryInterface( const Type & rType )
css::uno::Sequence< css::uno::Type > SAL_CALL OResultSet::getTypes( )
{
- ::cppu::OTypeCollection aTypes( cppu::UnoType<css::beans::XMultiPropertySet>::get(),
- cppu::UnoType<css::beans::XFastPropertySet>::get(),
- cppu::UnoType<css::beans::XPropertySet>::get());
-
- return ::comphelper::concatSequences(aTypes.getTypes(),OResultSet_BASE::getTypes());
+ return comphelper::concatSequences(cppu::OPropertySetHelper::getTypes(),
+ OResultSet_BASE::getTypes());
}
-
sal_Int32 SAL_CALL OResultSet::findColumn( const OUString& columnName )
{
::osl::MutexGuard aGuard( m_aMutex );
@@ -157,9 +153,8 @@ sal_Int32 SAL_CALL OResultSet::findColumn( const OUString& columnName )
}
::dbtools::throwInvalidColumnException( columnName, *this );
- assert(false);
- return 0; // Never reached
}
+
#define BLOCK_SIZE 256
Reference< css::io::XInputStream > SAL_CALL OResultSet::getBinaryStream( sal_Int32 columnIndex )
@@ -205,7 +200,6 @@ Reference< css::io::XInputStream > SAL_CALL OResultSet::getBinaryStream( sal_Int
Reference< css::io::XInputStream > SAL_CALL OResultSet::getCharacterStream( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getCharacterStream", *this );
- return nullptr;
}
OLEVariant OResultSet::getValue(sal_Int32 columnIndex )
@@ -266,7 +260,7 @@ sal_Int32 SAL_CALL OResultSet::getRow( )
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- PositionEnum_Param aPos;
+ PositionEnum aPos;
m_pRecordSet->get_AbsolutePosition(&aPos);
return (aPos > 0) ? static_cast<sal_Int32>(aPos) : m_nRowPos;
// return the rowcount from driver if the driver doesn't support this return our count
@@ -276,7 +270,6 @@ sal_Int32 SAL_CALL OResultSet::getRow( )
sal_Int64 SAL_CALL OResultSet::getLong( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getLong", *this );
- return sal_Int64(0);
}
@@ -294,30 +287,23 @@ Reference< XResultSetMetaData > SAL_CALL OResultSet::getMetaData( )
Reference< XArray > SAL_CALL OResultSet::getArray( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getArray", *this );
- return nullptr;
}
-
Reference< XClob > SAL_CALL OResultSet::getClob( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getClob", *this );
- return nullptr;
}
Reference< XBlob > SAL_CALL OResultSet::getBlob( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getBlob", *this );
- return nullptr;
}
-
Reference< XRef > SAL_CALL OResultSet::getRef( sal_Int32 /*columnIndex*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XRow::getRef", *this );
- return nullptr;
}
-
Any SAL_CALL OResultSet::getObject( sal_Int32 columnIndex, const Reference< css::container::XNameAccess >& /*typeMap*/ )
{
return getValue(columnIndex).makeAny();
@@ -596,7 +582,7 @@ sal_Bool SAL_CALL OResultSet::next( )
++m_nRowPos;
}
else
- ADOS::ThrowException(*m_pStmt->m_pConnection->getConnection(),*this);
+ ADOS::ThrowException(m_pStmt->m_pConnection->getConnection(),*this);
}
return bRet;
@@ -818,12 +804,12 @@ Any SAL_CALL OResultSet::getBookmark( )
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
if(m_nRowPos < static_cast<sal_Int32>(m_aBookmarks.size())) // this bookmark was already fetched
- return makeAny(sal_Int32(m_nRowPos-1));
+ return Any(sal_Int32(m_nRowPos-1));
OLEVariant aVar;
m_pRecordSet->get_Bookmark(&aVar);
m_aBookmarks.push_back(aVar);
- return makeAny(static_cast<sal_Int32>(m_aBookmarks.size()-1));
+ return Any(static_cast<sal_Int32>(m_aBookmarks.size()-1));
}
@@ -882,11 +868,9 @@ sal_Bool SAL_CALL OResultSet::hasOrderedBookmarks( )
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- ADOProperties* pProps = nullptr;
- m_pRecordSet->get_Properties(&pProps);
WpADOProperties aProps;
- aProps.setWithOutAddRef(pProps);
- ADOS::ThrowException(*static_cast<OConnection*>(m_pStmt->getConnection().get())->getConnection(),*this);
+ m_pRecordSet->get_Properties(&aProps);
+ ADOS::ThrowException(static_cast<OConnection*>(m_pStmt->getConnection().get())->getConnection(),*this);
OSL_ENSURE(aProps.IsValid(),"There are no properties at the connection");
WpADOProperty aProp(aProps.GetItem(OUString("Bookmarks Ordered")));
@@ -894,7 +878,7 @@ sal_Bool SAL_CALL OResultSet::hasOrderedBookmarks( )
if(aProp.IsValid())
aVar = aProp.GetValue();
else
- ADOS::ThrowException(*static_cast<OConnection*>(m_pStmt->getConnection().get())->getConnection(),*this);
+ ADOS::ThrowException(static_cast<OConnection*>(m_pStmt->getConnection().get())->getConnection(),*this);
bool bValue(false);
if(!aVar.isNull() && !aVar.isEmpty())
@@ -929,11 +913,9 @@ Sequence< sal_Int32 > SAL_CALL OResultSet::deleteRows( const Sequence< Any >& ro
rgsabound[0].cElements = rows.getLength();
SAFEARRAY *psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound );
- const Any* pBegin = rows.getConstArray();
- const Any* pEnd = pBegin + rows.getLength();
- for(sal_Int32 i=0;pBegin != pEnd ;++pBegin,++i)
+ for (sal_Int32 i = 0; i < rows.getLength(); ++i)
{
- *pBegin >>= nPos;
+ rows[i] >>= nPos;
SafeArrayPutElement(psa,&i,&m_aBookmarks[nPos]);
}
@@ -1035,26 +1017,31 @@ void OResultSet::setFetchSize(sal_Int32 _par0)
::cppu::IPropertyArrayHelper* OResultSet::createArrayHelper( ) const
{
- Sequence< css::beans::Property > aProps(5);
- css::beans::Property* pProperties = aProps.getArray();
- sal_Int32 nPos = 0;
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
- PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
- PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISBOOKMARKABLE),
- PROPERTY_ID_ISBOOKMARKABLE, cppu::UnoType<bool>::get(), PropertyAttribute::READONLY);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
- PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
- PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY);
-
- return new ::cppu::OPropertyArrayHelper(aProps);
+ return new ::cppu::OPropertyArrayHelper
+ {
+ {
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
+ PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
+ PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISBOOKMARKABLE),
+ PROPERTY_ID_ISBOOKMARKABLE, cppu::UnoType<bool>::get(), PropertyAttribute::READONLY
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
+ PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
+ PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY
+ }
+ }
+ };
}
::cppu::IPropertyArrayHelper & OResultSet::getInfoHelper()
diff --git a/connectivity/source/drivers/ado/AResultSetMetaData.cxx b/connectivity/source/drivers/ado/AResultSetMetaData.cxx
index e64c1c45b6e9..d43ee5da9216 100644
--- a/connectivity/source/drivers/ado/AResultSetMetaData.cxx
+++ b/connectivity/source/drivers/ado/AResultSetMetaData.cxx
@@ -72,10 +72,9 @@ sal_Int32 SAL_CALL OResultSetMetaData::getColumnCount( )
if ( !m_pRecordSet )
return 0;
- ADOFields* pFields = nullptr;
+ WpOLEAppendCollection<ADOFields, WpADOField> pFields;
m_pRecordSet->get_Fields(&pFields);
- WpOLEAppendCollection<ADOFields, ADOField, WpADOField> aFields(pFields);
- m_nColCount = aFields.GetItemCount();
+ m_nColCount = pFields.GetItemCount();
return m_nColCount;
}
diff --git a/connectivity/source/drivers/ado/AStatement.cxx b/connectivity/source/drivers/ado/AStatement.cxx
index 9670d92292bd..0764a4b335a5 100644
--- a/connectivity/source/drivers/ado/AStatement.cxx
+++ b/connectivity/source/drivers/ado/AStatement.cxx
@@ -41,7 +41,7 @@ using namespace ::comphelper;
#define CHECK_RETURN(x) \
if(!x) \
- ADOS::ThrowException(*m_pConnection->getConnection(),*this);
+ ADOS::ThrowException(m_pConnection->getConnection(),*this);
using namespace connectivity::ado;
@@ -51,7 +51,6 @@ using namespace com::sun::star::uno;
using namespace com::sun::star::lang;
using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
-using namespace ::std;
OStatement_Base::OStatement_Base(OConnection* _pConnection ) : OStatement_BASE(m_aMutex)
,OPropertySetHelper(OStatement_BASE::rBHelper)
@@ -67,7 +66,7 @@ OStatement_Base::OStatement_Base(OConnection* _pConnection ) : OStatement_BASE(
if(m_Command.IsValid())
m_Command.putref_ActiveConnection(m_pConnection->getConnection());
else
- ADOS::ThrowException(*m_pConnection->getConnection(),*this);
+ ADOS::ThrowException(m_pConnection->getConnection(),*this);
m_RecordsAffected.setNoArg();
m_Parameters.setNoArg();
@@ -80,7 +79,7 @@ OStatement_Base::OStatement_Base(OConnection* _pConnection ) : OStatement_BASE(
void OStatement_Base::disposeResultSet()
{
// free the cursor if alive
- Reference< XComponent > xComp(m_xResultSet.get(), UNO_QUERY);
+ rtl::Reference< OResultSet > xComp = m_xResultSet.get();
if (xComp.is())
xComp->dispose();
m_xResultSet.clear();
@@ -95,7 +94,7 @@ void OStatement_Base::disposing()
disposeResultSet();
if ( m_Command.IsValid() )
- m_Command.putref_ActiveConnection( nullptr );
+ m_Command.putref_ActiveConnection({});
m_Command.clear();
if ( m_RecordSet.IsValid() )
@@ -121,11 +120,8 @@ Any SAL_CALL OStatement_Base::queryInterface( const Type & rType )
css::uno::Sequence< css::uno::Type > SAL_CALL OStatement_Base::getTypes( )
{
- ::cppu::OTypeCollection aTypes( cppu::UnoType<css::beans::XMultiPropertySet>::get(),
- cppu::UnoType<css::beans::XFastPropertySet>::get(),
- cppu::UnoType<css::beans::XPropertySet>::get());
-
- return ::comphelper::concatSequences(aTypes.getTypes(),OStatement_BASE::getTypes());
+ return comphelper::concatSequences(cppu::OPropertySetHelper::getTypes(),
+ OStatement_BASE::getTypes());
}
@@ -179,8 +175,7 @@ void OStatement_Base::clearMyResultSet ()
try
{
- Reference<XCloseable> xCloseable(
- m_xResultSet.get(), css::uno::UNO_QUERY);
+ rtl::Reference<OResultSet> xCloseable = m_xResultSet.get();
if ( xCloseable.is() )
xCloseable->close();
}
@@ -240,7 +235,7 @@ void OStatement_Base::setWarning (const SQLWarning &ex)
void OStatement_Base::assignRecordSet( ADORecordset* _pRS )
{
WpADORecordset aOldRS( m_RecordSet );
- m_RecordSet = WpADORecordset( _pRS );
+ m_RecordSet.set( _pRS );
if ( aOldRS.IsValid() )
aOldRS.PutRefDataSource( nullptr );
@@ -287,7 +282,7 @@ Reference< XResultSet > SAL_CALL OStatement_Base::executeQuery( const OUString&
reset();
- m_xResultSet = WeakReference<XResultSet>(nullptr);
+ m_xResultSet.clear();
WpADORecordset aSet;
aSet.Create();
@@ -309,7 +304,7 @@ Reference< XResultSet > SAL_CALL OStatement_Base::executeQuery( const OUString&
rtl::Reference<OResultSet> pSet = new OResultSet(aSet,this);
pSet->construct();
- m_xResultSet = WeakReference<XResultSet>(pSet);
+ m_xResultSet = pSet.get();
return pSet;
}
@@ -376,7 +371,7 @@ Sequence< sal_Int32 > SAL_CALL OStatement::executeBatch( )
{
assignRecordSet( pSet );
- ADO_LONGPTR nValue;
+ long nValue;
if(m_RecordSet.get_RecordCount(nValue))
pArray[j] = nValue;
}
@@ -418,7 +413,7 @@ Reference< XResultSet > SAL_CALL OStatement_Base::getResultSet( )
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- return m_xResultSet;
+ return m_xResultSet.get();
}
@@ -428,7 +423,7 @@ sal_Int32 SAL_CALL OStatement_Base::getUpdateCount( )
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- ADO_LONGPTR nRet;
+ long nRet;
if(m_RecordSet.IsValid() && m_RecordSet.get_RecordCount(nRet))
return nRet;
return -1;
@@ -470,7 +465,7 @@ Any SAL_CALL OStatement_Base::getWarnings( )
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- return makeAny(m_aLastWarning);
+ return Any(m_aLastWarning);
}
@@ -491,7 +486,7 @@ sal_Int32 OStatement_Base::getQueryTimeOut() const
sal_Int32 OStatement_Base::getMaxRows() const
{
- ADO_LONGPTR nRet=-1;
+ long nRet = -1;
if(!(m_RecordSet.IsValid() && m_RecordSet.get_MaxRecords(nRet)))
::dbtools::throwFunctionSequenceException(nullptr);
return nRet;
@@ -641,31 +636,71 @@ void OStatement_Base::setCursorName(std::u16string_view _par0)
::cppu::IPropertyArrayHelper* OStatement_Base::createArrayHelper( ) const
{
- Sequence< css::beans::Property > aProps(10);
- css::beans::Property* pProperties = aProps.getArray();
- sal_Int32 nPos = 0;
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
- PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING),
- PROPERTY_ID_ESCAPEPROCESSING, cppu::UnoType<bool>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
- PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
- PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE),
- PROPERTY_ID_MAXFIELDSIZE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS),
- PROPERTY_ID_MAXROWS, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT),
- PROPERTY_ID_QUERYTIMEOUT, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
- PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
- PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS),
- PROPERTY_ID_USEBOOKMARKS, cppu::UnoType<bool>::get(), 0);
-
- return new ::cppu::OPropertyArrayHelper(aProps);
+ return new ::cppu::OPropertyArrayHelper
+ {
+ {
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
+ PROPERTY_ID_CURSORNAME,
+ cppu::UnoType<OUString>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING),
+ PROPERTY_ID_ESCAPEPROCESSING,
+ cppu::UnoType<bool>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
+ PROPERTY_ID_FETCHDIRECTION,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
+ PROPERTY_ID_FETCHSIZE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE),
+ PROPERTY_ID_MAXFIELDSIZE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS),
+ PROPERTY_ID_MAXROWS,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT),
+ PROPERTY_ID_QUERYTIMEOUT,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
+ PROPERTY_ID_RESULTSETCONCURRENCY,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
+ PROPERTY_ID_RESULTSETTYPE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS),
+ PROPERTY_ID_USEBOOKMARKS,
+ cppu::UnoType<bool>::get(),
+ 0
+ }
+ }
+ };
}
diff --git a/connectivity/source/drivers/ado/ATable.cxx b/connectivity/source/drivers/ado/ATable.cxx
index 1ade9a649b77..47e22e125398 100644
--- a/connectivity/source/drivers/ado/ATable.cxx
+++ b/connectivity/source/drivers/ado/ATable.cxx
@@ -54,7 +54,7 @@ OAdoTable::OAdoTable(sdbcx::OCollection* _pTables,bool _bCase,OCatalog* _pCatalo
,m_pCatalog(_pCatalog)
{
construct();
- m_aTable = WpADOTable(_pTable);
+ m_aTable.set(_pTable);
// m_aTable.putref_ParentCatalog(_pCatalog->getCatalog());
fillPropertyValues();
@@ -127,20 +127,6 @@ void OAdoTable::refreshIndexes()
m_xIndexes.reset(new OIndexes(*this,m_aMutex,aVector,aIndexes,isCaseSensitive(),m_pCatalog->getConnection()));
}
-Sequence< sal_Int8 > OAdoTable::getUnoTunnelId()
-{
- static const comphelper::UnoIdInit implId;
- return implId.getSeq();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OAdoTable::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return comphelper::getSomethingImpl(rId, this,
- comphelper::FallbackToGetSomethingOf<OTable_TYPEDEF>{});
-}
-
// XRename
void SAL_CALL OAdoTable::rename( const OUString& newName )
{
@@ -148,7 +134,7 @@ void SAL_CALL OAdoTable::rename( const OUString& newName )
checkDisposed(OTableDescriptor_BASE_TYPEDEF::rBHelper.bDisposed);
m_aTable.put_Name(newName);
- ADOS::ThrowException(*(m_pCatalog->getConnection()->getConnection()),*this);
+ ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),*this);
OTable_TYPEDEF::rename(newName);
}
@@ -165,7 +151,7 @@ void SAL_CALL OAdoTable::alterColumnByName( const OUString& colName, const Refer
checkDisposed(OTableDescriptor_BASE_TYPEDEF::rBHelper.bDisposed);
bool bError = true;
- OAdoColumn* pColumn = comphelper::getFromUnoTunnel<OAdoColumn>(descriptor);
+ OAdoColumn* pColumn = dynamic_cast<OAdoColumn*>(descriptor.get());
if(pColumn != nullptr)
{
WpADOColumns aColumns = m_aTable.get_Columns();
@@ -173,7 +159,7 @@ void SAL_CALL OAdoTable::alterColumnByName( const OUString& colName, const Refer
bError = bError || !aColumns.Append(pColumn->getColumnImpl());
}
if(bError)
- ADOS::ThrowException(*(m_pCatalog->getConnection()->getConnection()),*this);
+ ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),*this);
m_xColumns->refresh();
refreshColumns();
diff --git a/connectivity/source/drivers/ado/ATables.cxx b/connectivity/source/drivers/ado/ATables.cxx
index 61a057344ff1..48a82ceee2d5 100644
--- a/connectivity/source/drivers/ado/ATables.cxx
+++ b/connectivity/source/drivers/ado/ATables.cxx
@@ -44,7 +44,7 @@ using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
using namespace com::sun::star::container;
-sdbcx::ObjectType OTables::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > OTables::createObject(const OUString& _rName)
{
OSL_ENSURE(m_aCollection.IsValid(),"Collection isn't valid");
return new OAdoTable(this,isCaseSensitive(),m_pCatalog,m_aCollection.GetItem(_rName));
@@ -63,15 +63,15 @@ Reference< XPropertySet > OTables::createDescriptor()
}
// XAppend
-sdbcx::ObjectType OTables::appendObject( const OUString&, const Reference< XPropertySet >& descriptor )
+css::uno::Reference< css::beans::XPropertySet > OTables::appendObject( const OUString&, const Reference< XPropertySet >& descriptor )
{
- OAdoTable* pTable = getFromUnoTunnel<OAdoTable>( descriptor );
+ OAdoTable* pTable = dynamic_cast<OAdoTable*>( descriptor.get() );
if ( pTable == nullptr )
m_pCatalog->getConnection()->throwGenericSQLException( STR_INVALID_TABLE_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) );
OSL_ENSURE(m_aCollection.IsValid(),"Collection isn't valid");
if(!m_aCollection.Append(pTable->getImpl()))
- ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),static_cast<XTypeProvider*>(this));
+ ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),static_cast<XTypeProvider*>(this));
m_aCollection.Refresh();
return new OAdoTable(this,isCaseSensitive(),m_pCatalog,pTable->getImpl());
@@ -82,7 +82,7 @@ void OTables::dropObject(sal_Int32 /*_nPos*/,const OUString& _sElementName)
{
OSL_ENSURE(m_aCollection.IsValid(),"Collection isn't valid");
if ( !m_aCollection.Delete(_sElementName) )
- ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),static_cast<XTypeProvider*>(this));
+ ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),static_cast<XTypeProvider*>(this));
}
void OTables::appendNew(const OUString& _rsNewTable)
@@ -93,7 +93,7 @@ void OTables::appendNew(const OUString& _rsNewTable)
insertElement(_rsNewTable,nullptr);
// notify our container listeners
- ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_rsNewTable), Any(), Any());
+ ContainerEvent aEvent(static_cast<XContainer*>(this), Any(_rsNewTable), Any(), Any());
OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners);
while (aListenerLoop.hasMoreElements())
aListenerLoop.next()->elementInserted(aEvent);
diff --git a/connectivity/source/drivers/ado/AUser.cxx b/connectivity/source/drivers/ado/AUser.cxx
index 09585ed81e44..eb7a5803f60c 100644
--- a/connectivity/source/drivers/ado/AUser.cxx
+++ b/connectivity/source/drivers/ado/AUser.cxx
@@ -40,7 +40,7 @@ OAdoUser::OAdoUser(OCatalog* _pParent,bool _bCase, ADOUser* _pUser)
construct();
if(_pUser)
- m_aUser = WpADOUser(_pUser);
+ m_aUser.set(_pUser);
else
m_aUser.Create();
}
@@ -65,21 +65,6 @@ void OAdoUser::refreshGroups()
m_pGroups.reset(new OGroups(m_pCatalog, m_aMutex, aVector, aGroups, isCaseSensitive()));
}
-Sequence< sal_Int8 > OAdoUser::getUnoTunnelId()
-{
- static const comphelper::UnoIdInit implId;
- return implId.getSeq();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OAdoUser::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return comphelper::getSomethingImpl(rId, this,
- comphelper::FallbackToGetSomethingOf<OUser_TYPEDEF>{});
-}
-
-
void OAdoUser::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue)
{
if(m_aUser.IsValid())
@@ -157,7 +142,7 @@ sal_Int32 SAL_CALL OAdoUser::getGrantablePrivileges( const OUString& objName, sa
RightsEnum eRights = m_aUser.GetPermissions(objName, ADOS::mapObjectType2Ado(objType));
if((eRights & adRightWithGrant) == adRightWithGrant)
nRights = ADOS::mapAdoRights2Sdbc(eRights);
- ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),*this);
+ ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),*this);
return nRights;
}
@@ -166,7 +151,7 @@ void SAL_CALL OAdoUser::grantPrivileges( const OUString& objName, sal_Int32 objT
::osl::MutexGuard aGuard(m_aMutex);
checkDisposed(OUser_BASE_TYPEDEF::rBHelper.bDisposed);
m_aUser.SetPermissions(objName,ADOS::mapObjectType2Ado(objType),adAccessGrant,RightsEnum(ADOS::mapRights2Ado(objPrivileges)));
- ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),*this);
+ ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),*this);
}
void SAL_CALL OAdoUser::revokePrivileges( const OUString& objName, sal_Int32 objType, sal_Int32 objPrivileges )
@@ -174,7 +159,7 @@ void SAL_CALL OAdoUser::revokePrivileges( const OUString& objName, sal_Int32 obj
::osl::MutexGuard aGuard(m_aMutex);
checkDisposed(OUser_BASE_TYPEDEF::rBHelper.bDisposed);
m_aUser.SetPermissions(objName,ADOS::mapObjectType2Ado(objType),adAccessRevoke,RightsEnum(ADOS::mapRights2Ado(objPrivileges)));
- ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),*this);
+ ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),*this);
}
// XUser
@@ -183,7 +168,7 @@ void SAL_CALL OAdoUser::changePassword( const OUString& objPassword, const OUStr
::osl::MutexGuard aGuard(m_aMutex);
checkDisposed(OUser_BASE_TYPEDEF::rBHelper.bDisposed);
m_aUser.ChangePassword(objPassword,newPassword);
- ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),*this);
+ ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),*this);
}
diff --git a/connectivity/source/drivers/ado/AUsers.cxx b/connectivity/source/drivers/ado/AUsers.cxx
index 9d0dab6e8d4c..ce45af21732c 100644
--- a/connectivity/source/drivers/ado/AUsers.cxx
+++ b/connectivity/source/drivers/ado/AUsers.cxx
@@ -27,6 +27,7 @@
#include <comphelper/servicehelper.hxx>
#include <comphelper/types.hxx>
#include <connectivity/dbexception.hxx>
+#include <systools/win32/oleauto.hxx>
#include <strings.hrc>
using namespace comphelper;
@@ -38,7 +39,7 @@ using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
using namespace com::sun::star::container;
-sdbcx::ObjectType OUsers::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > OUsers::createObject(const OUString& _rName)
{
return new OAdoUser(m_pCatalog,isCaseSensitive(),_rName);
}
@@ -54,14 +55,14 @@ Reference< XPropertySet > OUsers::createDescriptor()
}
// XAppend
-sdbcx::ObjectType OUsers::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
+css::uno::Reference< css::beans::XPropertySet > OUsers::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
{
- OUserExtend* pUser = getFromUnoTunnel<OUserExtend>( descriptor );
+ OUserExtend* pUser = dynamic_cast<OUserExtend*>( descriptor.get() );
if ( pUser == nullptr )
m_pCatalog->getConnection()->throwGenericSQLException( STR_INVALID_USER_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) );
ADOUsers* pUsers = m_aCollection;
- pUsers->Append(OLEVariant(pUser->getImpl()),OLEString(pUser->getPassword()).asBSTR());
+ pUsers->Append(OLEVariant(pUser->getImpl()), sal::systools::BStr(pUser->getPassword()));
return createObject( _rForName );
}
diff --git a/connectivity/source/drivers/ado/AView.cxx b/connectivity/source/drivers/ado/AView.cxx
index 15f6a5cc9a6d..10a5524db95b 100644
--- a/connectivity/source/drivers/ado/AView.cxx
+++ b/connectivity/source/drivers/ado/AView.cxx
@@ -23,6 +23,8 @@
#include <ado/Awrapado.hxx>
#include <comphelper/servicehelper.hxx>
#include <comphelper/types.hxx>
+#include <systools/win32/oleauto.hxx>
+
#include <TConnection.hxx>
@@ -40,21 +42,6 @@ OAdoView::OAdoView(bool _bCase,ADOView* _pView) : OView_ADO(_bCase,nullptr)
{
}
-Sequence< sal_Int8 > OAdoView::getUnoTunnelId()
-{
- static const comphelper::UnoIdInit implId;
- return implId.getSeq();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OAdoView::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return comphelper::getSomethingImpl(rId, this,
- comphelper::FallbackToGetSomethingOf<OView_ADO>{});
-}
-
-
void OAdoView::getFastPropertyValue(Any& rValue,sal_Int32 nHandle) const
{
if(m_aView.IsValid())
@@ -76,9 +63,9 @@ void OAdoView::getFastPropertyValue(Any& rValue,sal_Int32 nHandle) const
if(!aVar.isNull() && !aVar.isEmpty())
{
ADOCommand* pCom = static_cast<ADOCommand*>(aVar.getIDispatch());
- OLEString aBSTR;
- pCom->get_CommandText(aBSTR.getAddress());
- rValue <<= aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pCom->get_CommandText(&aBSTR);
+ rValue <<= OUString(aBSTR);
}
}
break;
diff --git a/connectivity/source/drivers/ado/AViews.cxx b/connectivity/source/drivers/ado/AViews.cxx
index 22fe40142d25..536b95309bb2 100644
--- a/connectivity/source/drivers/ado/AViews.cxx
+++ b/connectivity/source/drivers/ado/AViews.cxx
@@ -28,6 +28,8 @@
#include <comphelper/types.hxx>
#include <connectivity/dbexception.hxx>
#include <rtl/ref.hxx>
+#include <systools/win32/oleauto.hxx>
+
#include <strings.hrc>
using namespace ::comphelper;
@@ -40,7 +42,7 @@ using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
using namespace com::sun::star::container;
-sdbcx::ObjectType OViews::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > OViews::createObject(const OUString& _rName)
{
rtl::Reference<OAdoView> pView = new OAdoView(isCaseSensitive(),m_aCollection.GetItem(_rName));
pView->setNew(false);
@@ -59,9 +61,9 @@ Reference< XPropertySet > OViews::createDescriptor()
// XAppend
-sdbcx::ObjectType OViews::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
+css::uno::Reference< css::beans::XPropertySet > OViews::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
{
- OAdoView* pView = getFromUnoTunnel<OAdoView>( descriptor );
+ OAdoView* pView = dynamic_cast<OAdoView*>( descriptor.get() );
if ( pView == nullptr )
m_pCatalog->getConnection()->throwGenericSQLException( STR_INVALID_VIEW_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) );
@@ -74,8 +76,8 @@ sdbcx::ObjectType OViews::appendObject( const OUString& _rForName, const Referen
aCommand.put_Name(sName);
aCommand.put_CommandText(getString(descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_COMMAND))));
ADOViews* pViews = m_aCollection;
- if(FAILED(pViews->Append(OLEString(sName).asBSTR(),aCommand)))
- ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),static_cast<XTypeProvider*>(this));
+ if (FAILED(pViews->Append(sal::systools::BStr(sName), aCommand)))
+ ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),static_cast<XTypeProvider*>(this));
OTables* pTables = static_cast<OTables*>(static_cast<OCatalog&>(m_rParent).getPrivateTables());
if ( pTables )
@@ -88,7 +90,7 @@ sdbcx::ObjectType OViews::appendObject( const OUString& _rForName, const Referen
void OViews::dropObject(sal_Int32 /*_nPos*/,const OUString& _sElementName)
{
if(!m_aCollection.Delete(_sElementName))
- ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),static_cast<XTypeProvider*>(this));
+ ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),static_cast<XTypeProvider*>(this));
}
diff --git a/connectivity/source/drivers/ado/Aolevariant.cxx b/connectivity/source/drivers/ado/Aolevariant.cxx
index 8b6ad10b4662..75591468be36 100644
--- a/connectivity/source/drivers/ado/Aolevariant.cxx
+++ b/connectivity/source/drivers/ado/Aolevariant.cxx
@@ -37,64 +37,6 @@ using namespace com::sun::star::uno;
using namespace com::sun::star::bridge::oleautomation;
using namespace connectivity::ado;
-OLEString::OLEString()
- :m_sStr(nullptr)
-{
-}
-OLEString::OLEString(const BSTR& _sBStr)
- :m_sStr(_sBStr)
-{
-}
-OLEString::OLEString(std::u16string_view _sBStr)
-{
- m_sStr = SysAllocStringLen(o3tl::toW(_sBStr.data()), _sBStr.length());
-}
-OLEString::~OLEString()
-{
- if(m_sStr)
- ::SysFreeString(m_sStr);
-}
-OLEString& OLEString::operator=(std::u16string_view _rSrc)
-{
- if(m_sStr)
- ::SysFreeString(m_sStr);
- m_sStr = SysAllocStringLen(o3tl::toW(_rSrc.data()), _rSrc.length());
- return *this;
-}
-OLEString& OLEString::operator=(const OLEString& _rSrc)
-{
- if(this != &_rSrc)
- {
- if(m_sStr)
- ::SysFreeString(m_sStr);
- m_sStr = ::SysAllocString(_rSrc.m_sStr);
- }
- return *this;
-}
-OLEString& OLEString::operator=(const BSTR& _rSrc)
-{
- if(m_sStr)
- ::SysFreeString(m_sStr);
- m_sStr = _rSrc;
- return *this;
-}
-OUString OLEString::asOUString() const
-{
- return (m_sStr != nullptr) ? OUString(o3tl::toU(m_sStr),::SysStringLen(m_sStr)) : OUString();
-}
-BSTR OLEString::asBSTR() const
-{
- return m_sStr;
-}
-BSTR* OLEString::getAddress()
-{
- return &m_sStr;
-}
-sal_Int32 OLEString::length() const
-{
- return (m_sStr != nullptr) ? ::SysStringLen(m_sStr) : 0;
-}
-
OLEVariant::OLEVariant()
{
VariantInit(this);
@@ -175,12 +117,10 @@ OLEVariant::OLEVariant(const css::uno::Sequence< sal_Int8 >& x)
vt = VT_ARRAY|VT_UI1;
parray = SafeArrayCreateVector(VT_UI1, 0, x.getLength());
- const sal_Int8* pBegin = x.getConstArray();
- const sal_Int8* pEnd = pBegin + x.getLength();
- for(sal_Int32 i=0;pBegin != pEnd;++i,++pBegin)
+ for (sal_Int32 i = 0; i < x.getLength(); ++i)
{
- sal_Int32 nData = *pBegin;
+ sal_Int32 nData = x[i];
HRESULT rs = SafeArrayPutElement(parray,&i,&nData);
OSL_ENSURE(S_OK == rs,"Error while copy byte data");
}
@@ -427,8 +367,8 @@ css::uno::Sequence< sal_Int8 > OLEVariant::getByteSequence() const
css::uno::Sequence< sal_Int8 > aRet;
if(V_VT(this) == VT_BSTR)
{
- OLEString sStr(V_BSTR(this));
- aRet = css::uno::Sequence<sal_Int8>(reinterpret_cast<const sal_Int8*>(sStr.asBSTR()),sizeof(sal_Unicode)*sStr.length());
+ aRet = css::uno::Sequence<sal_Int8>(reinterpret_cast<sal_Int8*>(V_BSTR(this)),
+ ::SysStringByteLen(V_BSTR(this)));
}
else if(!isNull())
{
diff --git a/connectivity/source/drivers/ado/Awrapado.cxx b/connectivity/source/drivers/ado/Awrapado.cxx
index 6f4dd5ce1c20..74abd185353f 100644
--- a/connectivity/source/drivers/ado/Awrapado.cxx
+++ b/connectivity/source/drivers/ado/Awrapado.cxx
@@ -21,50 +21,38 @@
#include <ado/Awrapado.hxx>
#include <ado/Awrapadox.hxx>
#include <comphelper/types.hxx>
+#include <o3tl/string_view.hxx>
#include <rtl/ustrbuf.hxx>
#include <sal/log.hxx>
+#include <systools/win32/oleauto.hxx>
using namespace connectivity::ado;
void WpADOCatalog::Create()
{
- _ADOCatalog* pCommand;
- HRESULT hr = CoCreateInstance(ADOS::CLSID_ADOCATALOG_25,
- nullptr,
- CLSCTX_INPROC_SERVER,
- ADOS::IID_ADOCATALOG_25,
- reinterpret_cast<void**>(&pCommand) );
-
-
- if( !FAILED( hr ) )
- setWithOutAddRef(pCommand);
+ pInterface.CoCreateInstance(ADOS::CLSID_ADOCATALOG_25, nullptr, CLSCTX_INPROC_SERVER);
}
WpADOProperties WpADOConnection::get_Properties() const
{
- ADOProperties* pProps=nullptr;
+ WpADOProperties pProps;
pInterface->get_Properties(&pProps);
- WpADOProperties aProps;
- aProps.setWithOutAddRef(pProps);
- return aProps;
+ return pProps;
}
OUString WpADOConnection::GetConnectionString() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_ConnectionString(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_ConnectionString(&aBSTR);
+ return OUString(aBSTR);
}
bool WpADOConnection::PutConnectionString(std::u16string_view aCon) const
{
assert(pInterface);
- OLEString bstr(aCon);
- bool bErg = SUCCEEDED(pInterface->put_ConnectionString(bstr.asBSTR()));
-
- return bErg;
+ return SUCCEEDED(pInterface->put_ConnectionString(sal::systools::BStr(aCon)));
}
sal_Int32 WpADOConnection::GetCommandTimeout() const
@@ -104,9 +92,8 @@ bool WpADOConnection::Close()
bool WpADOConnection::Execute(std::u16string_view CommandText,OLEVariant& RecordsAffected,long Options, WpADORecordset** ppiRset)
{
assert(pInterface);
- OLEString sStr1(CommandText);
- bool bErg = SUCCEEDED(pInterface->Execute(sStr1.asBSTR(),&RecordsAffected,Options,reinterpret_cast<ADORecordset**>(ppiRset)));
- return bErg;
+ return SUCCEEDED(pInterface->Execute(sal::systools::BStr(CommandText), &RecordsAffected,
+ Options, reinterpret_cast<ADORecordset**>(ppiRset)));
}
bool WpADOConnection::BeginTrans()
@@ -131,11 +118,9 @@ bool WpADOConnection::RollbackTrans( )
bool WpADOConnection::Open(std::u16string_view ConnectionString, std::u16string_view UserID,std::u16string_view Password,long Options)
{
assert(pInterface);
- OLEString sStr1(ConnectionString);
- OLEString sStr2(UserID);
- OLEString sStr3(Password);
- bool bErg = SUCCEEDED(pInterface->Open(sStr1.asBSTR(),sStr2.asBSTR(),sStr3.asBSTR(),Options));
- return bErg;
+ return SUCCEEDED(pInterface->Open(sal::systools::BStr(ConnectionString),
+ sal::systools::BStr(UserID), sal::systools::BStr(Password),
+ Options));
}
bool WpADOConnection::GetErrors(ADOErrors** pErrors)
@@ -147,17 +132,14 @@ bool WpADOConnection::GetErrors(ADOErrors** pErrors)
OUString WpADOConnection::GetDefaultDatabase() const
{
assert(pInterface);
- OLEString aBSTR; pInterface->get_DefaultDatabase(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR; pInterface->get_DefaultDatabase(&aBSTR);
+ return OUString(aBSTR);
}
bool WpADOConnection::PutDefaultDatabase(std::u16string_view _bstr)
{
assert(pInterface);
- OLEString bstr(_bstr);
- bool bErg = SUCCEEDED(pInterface->put_DefaultDatabase(bstr.asBSTR()));
-
- return bErg;
+ return SUCCEEDED(pInterface->put_DefaultDatabase(sal::systools::BStr(_bstr)));
}
IsolationLevelEnum WpADOConnection::get_IsolationLevel() const
@@ -219,15 +201,14 @@ bool WpADOConnection::put_Mode(const ConnectModeEnum &eNum)
OUString WpADOConnection::get_Provider() const
{
assert(pInterface);
- OLEString aBSTR; pInterface->get_Provider(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR; pInterface->get_Provider(&aBSTR);
+ return OUString(aBSTR);
}
bool WpADOConnection::put_Provider(std::u16string_view _bstr)
{
assert(pInterface);
- OLEString bstr(_bstr);
- return SUCCEEDED(pInterface->put_Provider(bstr.asBSTR()));
+ return SUCCEEDED(pInterface->put_Provider(sal::systools::BStr(_bstr)));
}
sal_Int32 WpADOConnection::get_State() const
@@ -247,18 +228,15 @@ bool WpADOConnection::OpenSchema(SchemaEnum eNum,OLEVariant const & Restrictions
OUString WpADOConnection::get_Version() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_Version(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_Version(&aBSTR);
+ return OUString(aBSTR);
}
-bool WpADOCommand::putref_ActiveConnection( WpADOConnection *pCon)
+bool WpADOCommand::putref_ActiveConnection(const WpADOConnection& rCon)
{
assert(pInterface);
- if(pCon)
- return SUCCEEDED(pInterface->putref_ActiveConnection(pCon->pInterface));
- else
- return SUCCEEDED(pInterface->putref_ActiveConnection(nullptr));
+ return SUCCEEDED(pInterface->putref_ActiveConnection(rCon));
}
void WpADOCommand::put_ActiveConnection(/* [in] */ const OLEVariant& vConn)
@@ -269,31 +247,19 @@ void WpADOCommand::put_ActiveConnection(/* [in] */ const OLEVariant& vConn)
void WpADOCommand::Create()
{
- IClassFactory2* pInterface2 = nullptr;
- HRESULT hr = CoGetClassObject( ADOS::CLSID_ADOCOMMAND_21,
- CLSCTX_INPROC_SERVER,
- nullptr,
- IID_IClassFactory2,
- reinterpret_cast<void**>(&pInterface2) );
-
- if( !FAILED( hr ) )
+ sal::systools::COMReference<IClassFactory2> pInterface2;
+ if (!FAILED(pInterface2.CoGetClassObject(ADOS::CLSID_ADOCOMMAND_21, CLSCTX_INPROC_SERVER)))
{
- ADOCommand* pCommand=nullptr;
- IUnknown* pOuter=nullptr;
+ sal::systools::COMReference<ADOCommand> pCommand;
- hr = pInterface2->CreateInstanceLic( pOuter,
+ HRESULT hr = pInterface2->CreateInstanceLic(nullptr,
nullptr,
ADOS::IID_ADOCOMMAND_21,
- ADOS::GetKeyStr().asBSTR(),
+ ADOS::GetKeyStr(),
reinterpret_cast<void**>(&pCommand));
if( !FAILED( hr ) )
- {
- operator=(pCommand);
- pCommand->Release();
- }
-
- pInterface2->Release();
+ pInterface = std::move(pCommand);
}
}
@@ -308,18 +274,15 @@ sal_Int32 WpADOCommand::get_State() const
OUString WpADOCommand::get_CommandText() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_CommandText(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_CommandText(&aBSTR);
+ return OUString(aBSTR);
}
bool WpADOCommand::put_CommandText(std::u16string_view aCon)
{
assert(pInterface);
- OLEString bstr(aCon);
- bool bErg = SUCCEEDED(pInterface->put_CommandText(bstr.asBSTR()));
-
- return bErg;
+ return SUCCEEDED(pInterface->put_CommandText(sal::systools::BStr(aCon)));
}
sal_Int32 WpADOCommand::get_CommandTimeout() const
@@ -360,8 +323,8 @@ ADOParameter* WpADOCommand::CreateParameter(std::u16string_view _bstr,DataTypeEn
{
assert(pInterface);
ADOParameter* pPara = nullptr;
- OLEString bstr(_bstr);
- bool bErg = SUCCEEDED(pInterface->CreateParameter(bstr.asBSTR(),Type,Direction,nSize,Value,&pPara));
+ bool bErg = SUCCEEDED(pInterface->CreateParameter(sal::systools::BStr(_bstr), Type, Direction,
+ nSize, Value, &pPara));
return bErg ? pPara : nullptr;
}
@@ -392,18 +355,15 @@ CommandTypeEnum WpADOCommand::get_CommandType() const
OUString WpADOCommand::GetName() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_Name(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_Name(&aBSTR);
+ return OUString(aBSTR);
}
bool WpADOCommand::put_Name(std::u16string_view Name)
{
assert(pInterface);
- OLEString bstr(Name);
- bool bErg = SUCCEEDED(pInterface->put_Name(bstr.asBSTR()));
-
- return bErg;
+ return SUCCEEDED(pInterface->put_Name(sal::systools::BStr(Name)));
}
bool WpADOCommand::Cancel()
{
@@ -414,17 +374,17 @@ bool WpADOCommand::Cancel()
OUString WpADOError::GetDescription() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_Description(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_Description(&aBSTR);
+ return OUString(aBSTR);
}
OUString WpADOError::GetSource() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_Source(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_Source(&aBSTR);
+ return OUString(aBSTR);
}
sal_Int32 WpADOError::GetNumber() const
@@ -438,9 +398,9 @@ sal_Int32 WpADOError::GetNumber() const
OUString WpADOError::GetSQLState() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_SQLState(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_SQLState(&aBSTR);
+ return OUString(aBSTR);
}
sal_Int32 WpADOError::GetNativeError() const
@@ -454,18 +414,15 @@ sal_Int32 WpADOError::GetNativeError() const
WpADOProperties WpADOField::get_Properties()
{
assert(pInterface);
- ADOProperties* pProps = nullptr;
+ WpADOProperties pProps;
pInterface->get_Properties(&pProps);
- WpADOProperties aProps;
-
- aProps.setWithOutAddRef(pProps);
- return aProps;
+ return pProps;
}
sal_Int32 WpADOField::GetActualSize() const
{
assert(pInterface);
- ADO_LONGPTR nActualSize=0;
+ long nActualSize = 0;
pInterface->get_ActualSize(&nActualSize);
return nActualSize;
}
@@ -488,7 +445,7 @@ sal_Int32 WpADOField::GetStatus() const
sal_Int32 WpADOField::GetDefinedSize() const
{
assert(pInterface);
- ADO_LONGPTR nDefinedSize=0;
+ long nDefinedSize = 0;
pInterface->get_DefinedSize(&nDefinedSize);
return nDefinedSize;
}
@@ -497,9 +454,9 @@ sal_Int32 WpADOField::GetDefinedSize() const
OUString WpADOField::GetName() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_Name(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_Name(&aBSTR);
+ return OUString(aBSTR);
}
DataTypeEnum WpADOField::GetADOType() const
@@ -649,9 +606,9 @@ bool WpADOProperty::PutValue(const OLEVariant &aValVar)
OUString WpADOProperty::GetName() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_Name(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_Name(&aBSTR);
+ return OUString(aBSTR);
}
DataTypeEnum WpADOProperty::GetADOType() const
@@ -677,30 +634,18 @@ bool WpADOProperty::PutAttributes(sal_Int32 _nDefSize)
}
void WpADORecordset::Create()
{
- IClassFactory2* pInterface2 = nullptr;
- HRESULT hr = CoGetClassObject( ADOS::CLSID_ADORECORDSET_21,
- CLSCTX_INPROC_SERVER,
- nullptr,
- IID_IClassFactory2,
- reinterpret_cast<void**>(&pInterface2) );
-
- if( !FAILED( hr ) )
+ sal::systools::COMReference<IClassFactory2> pInterface2;
+ if (!FAILED(pInterface2.CoGetClassObject(ADOS::CLSID_ADORECORDSET_21, CLSCTX_INPROC_SERVER)))
{
- ADORecordset *pRec = nullptr;
- IUnknown *pOuter = nullptr;
- hr = pInterface2->CreateInstanceLic( pOuter,
+ sal::systools::COMReference<ADORecordset> pRec;
+ HRESULT hr = pInterface2->CreateInstanceLic(nullptr,
nullptr,
ADOS::IID_ADORECORDSET_21,
- ADOS::GetKeyStr().asBSTR(),
+ ADOS::GetKeyStr(),
reinterpret_cast<void**>(&pRec));
if( !FAILED( hr ) )
- {
- operator=(pRec);
- pRec->Release();
- }
-
- pInterface2->Release();
+ pInterface = std::move(pRec);
}
}
@@ -752,10 +697,10 @@ bool WpADORecordset::Supports( /* [in] */ CursorOptionEnum CursorOptions)
return bSupports == VARIANT_TRUE;
}
-PositionEnum_Param WpADORecordset::get_AbsolutePosition()
+PositionEnum WpADORecordset::get_AbsolutePosition()
{
assert(pInterface);
- PositionEnum_Param aTemp=adPosUnknown;
+ PositionEnum aTemp = adPosUnknown;
pInterface->get_AbsolutePosition(&aTemp);
return aTemp;
}
@@ -804,11 +749,9 @@ bool WpADORecordset::SetBookmark(const OLEVariant &pSafeAr)
WpADOFields WpADORecordset::GetFields() const
{
assert(pInterface);
- ADOFields* pFields=nullptr;
+ WpADOFields pFields;
pInterface->get_Fields(&pFields);
- WpADOFields aFields;
- aFields.setWithOutAddRef(pFields);
- return aFields;
+ return pFields;
}
@@ -861,11 +804,9 @@ bool WpADORecordset::CancelUpdate()
WpADOProperties WpADORecordset::get_Properties() const
{
assert(pInterface);
- ADOProperties* pProps=nullptr;
+ WpADOProperties pProps;
pInterface->get_Properties(&pProps);
- WpADOProperties aProps;
- aProps.setWithOutAddRef(pProps);
- return aProps;
+ return pProps;
}
bool WpADORecordset::NextRecordset(OLEVariant& RecordsAffected,ADORecordset** ppiRset)
@@ -874,13 +815,13 @@ bool WpADORecordset::NextRecordset(OLEVariant& RecordsAffected,ADORecordset** pp
return SUCCEEDED(pInterface->NextRecordset(&RecordsAffected,ppiRset));
}
-bool WpADORecordset::get_RecordCount(ADO_LONGPTR &_nRet) const
+bool WpADORecordset::get_RecordCount(long& _nRet) const
{
assert(pInterface);
return SUCCEEDED(pInterface->get_RecordCount(&_nRet));
}
-bool WpADORecordset::get_MaxRecords(ADO_LONGPTR &_nRet) const
+bool WpADORecordset::get_MaxRecords(long& _nRet) const
{
assert(pInterface);
return SUCCEEDED(pInterface->get_MaxRecords(&_nRet));
@@ -937,9 +878,9 @@ bool WpADORecordset::UpdateBatch(AffectEnum AffectRecords)
OUString WpADOParameter::GetName() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_Name(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_Name(&aBSTR);
+ return OUString(aBSTR);
}
DataTypeEnum WpADOParameter::GetADOType() const
@@ -1021,30 +962,28 @@ bool WpADOParameter::put_Size(sal_Int32 _nSize)
OUString WpADOColumn::get_Name() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_Name(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_Name(&aBSTR);
+ return OUString(aBSTR);
}
OUString WpADOColumn::get_RelatedColumn() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_RelatedColumn(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_RelatedColumn(&aBSTR);
+ return OUString(aBSTR);
}
void WpADOColumn::put_Name(std::u16string_view _rName)
{
assert(pInterface);
- OLEString bstr(_rName);
- pInterface->put_Name(bstr.asBSTR());
+ pInterface->put_Name(sal::systools::BStr(_rName));
}
void WpADOColumn::put_RelatedColumn(std::u16string_view _rName)
{
assert(pInterface);
- OLEString bstr(_rName);
- pInterface->put_RelatedColumn(bstr.asBSTR());
+ pInterface->put_RelatedColumn(sal::systools::BStr(_rName));
}
DataTypeEnum WpADOColumn::get_Type() const
@@ -1127,27 +1066,23 @@ bool WpADOColumn::put_Attributes(const ColumnAttributesEnum& _eNum)
WpADOProperties WpADOColumn::get_Properties() const
{
assert(pInterface);
- ADOProperties* pProps = nullptr;
+ WpADOProperties pProps;
pInterface->get_Properties(&pProps);
- WpADOProperties aProps;
-
- aProps.setWithOutAddRef(pProps);
- return aProps;
+ return pProps;
}
OUString WpADOKey::get_Name() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_Name(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_Name(&aBSTR);
+ return OUString(aBSTR);
}
void WpADOKey::put_Name(std::u16string_view _rName)
{
assert(pInterface);
- OLEString bstr(_rName);
- pInterface->put_Name(bstr.asBSTR());
+ pInterface->put_Name(sal::systools::BStr(_rName));
}
KeyTypeEnum WpADOKey::get_Type() const
@@ -1167,16 +1102,15 @@ void WpADOKey::put_Type(const KeyTypeEnum& _eNum)
OUString WpADOKey::get_RelatedTable() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_RelatedTable(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_RelatedTable(&aBSTR);
+ return OUString(aBSTR);
}
void WpADOKey::put_RelatedTable(std::u16string_view _rName)
{
assert(pInterface);
- OLEString bstr(_rName);
- pInterface->put_RelatedTable(bstr.asBSTR());
+ pInterface->put_RelatedTable(sal::systools::BStr(_rName));
}
RuleEnum WpADOKey::get_DeleteRule() const
@@ -1210,26 +1144,23 @@ void WpADOKey::put_UpdateRule(const RuleEnum& _eNum)
WpADOColumns WpADOKey::get_Columns() const
{
assert(pInterface);
- ADOColumns* pCols = nullptr;
+ WpADOColumns pCols;
pInterface->get_Columns(&pCols);
- WpADOColumns aCols;
- aCols.setWithOutAddRef(pCols);
- return aCols;
+ return pCols;
}
OUString WpADOIndex::get_Name() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_Name(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_Name(&aBSTR);
+ return OUString(aBSTR);
}
void WpADOIndex::put_Name(std::u16string_view _rName)
{
assert(pInterface);
- OLEString bstr(_rName);
- pInterface->put_Name(bstr.asBSTR());
+ pInterface->put_Name(sal::systools::BStr(_rName));
}
bool WpADOIndex::get_Clustered() const
@@ -1277,11 +1208,9 @@ void WpADOIndex::put_PrimaryKey(bool _b)
WpADOColumns WpADOIndex::get_Columns() const
{
assert(pInterface);
- ADOColumns* pCols = nullptr;
+ WpADOColumns pCols;
pInterface->get_Columns(&pCols);
- WpADOColumns aCols;
- aCols.setWithOutAddRef(pCols);
- return aCols;
+ return pCols;
}
void WpADOCatalog::putref_ActiveConnection(IDispatch* pCon)
@@ -1293,41 +1222,33 @@ void WpADOCatalog::putref_ActiveConnection(IDispatch* pCon)
WpADOTables WpADOCatalog::get_Tables()
{
assert(pInterface);
- ADOTables* pRet = nullptr;
+ WpADOTables pRet;
pInterface->get_Tables(&pRet);
- WpADOTables aRet;
- aRet.setWithOutAddRef(pRet);
- return aRet;
+ return pRet;
}
WpADOViews WpADOCatalog::get_Views()
{
assert(pInterface);
- ADOViews* pRet = nullptr;
+ WpADOViews pRet;
pInterface->get_Views(&pRet);
- WpADOViews aRet;
- aRet.setWithOutAddRef(pRet);
- return aRet;
+ return pRet;
}
WpADOGroups WpADOCatalog::get_Groups()
{
assert(pInterface);
- ADOGroups* pRet = nullptr;
+ WpADOGroups pRet;
pInterface->get_Groups(&pRet);
- WpADOGroups aRet;
- aRet.setWithOutAddRef(pRet);
- return aRet;
+ return pRet;
}
WpADOUsers WpADOCatalog::get_Users()
{
assert(pInterface);
- ADOUsers* pRet = nullptr;
+ WpADOUsers pRet;
pInterface->get_Users(&pRet);
- WpADOUsers aRet;
- aRet.setWithOutAddRef(pRet);
- return aRet;
+ return pRet;
}
ADOProcedures* WpADOCatalog::get_Procedures()
@@ -1341,82 +1262,71 @@ ADOProcedures* WpADOCatalog::get_Procedures()
OUString WpADOTable::get_Name() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_Name(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_Name(&aBSTR);
+ return OUString(aBSTR);
}
void WpADOTable::put_Name(std::u16string_view _rName)
{
assert(pInterface);
- OLEString bstr(_rName);
- pInterface->put_Name(bstr.asBSTR());
+ pInterface->put_Name(sal::systools::BStr(_rName));
}
OUString WpADOTable::get_Type() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_Type(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_Type(&aBSTR);
+ return OUString(aBSTR);
}
WpADOColumns WpADOTable::get_Columns() const
{
assert(pInterface);
- ADOColumns* pCols = nullptr;
+ WpADOColumns pCols;
pInterface->get_Columns(&pCols);
- WpADOColumns aCols;
- aCols.setWithOutAddRef(pCols);
- return aCols;
+ return pCols;
}
WpADOIndexes WpADOTable::get_Indexes() const
{
assert(pInterface);
- ADOIndexes* pCols = nullptr;
- pInterface->get_Indexes(&pCols);
- WpADOIndexes aRet;
- aRet.setWithOutAddRef(pCols);
- return aRet;
+ WpADOIndexes pRet;
+ pInterface->get_Indexes(&pRet);
+ return pRet;
}
WpADOKeys WpADOTable::get_Keys() const
{
assert(pInterface);
- ADOKeys* pCols = nullptr;
- pInterface->get_Keys(&pCols);
- WpADOKeys aRet;
- aRet.setWithOutAddRef(pCols);
- return aRet;
+ WpADOKeys pRet;
+ pInterface->get_Keys(&pRet);
+ return pRet;
}
WpADOCatalog WpADOTable::get_ParentCatalog() const
{
assert(pInterface);
- ADOCatalog* pCat = nullptr;
+ WpADOCatalog pCat;
pInterface->get_ParentCatalog(&pCat);
- WpADOCatalog aRet;
- aRet.setWithOutAddRef(pCat);
- return aRet;
+ return pCat;
}
WpADOProperties WpADOTable::get_Properties() const
{
assert(pInterface);
- ADOProperties* pProps = nullptr;
+ WpADOProperties pProps;
pInterface->get_Properties(&pProps);
- WpADOProperties aProps;
- aProps.setWithOutAddRef(pProps);
- return aProps;
+ return pProps;
}
OUString WpADOView::get_Name() const
{
assert(pInterface);
- OLEString aBSTR;
- pInterface->get_Name(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_Name(&aBSTR);
+ return OUString(aBSTR);
}
void WpADOView::get_Command(OLEVariant& _rVar) const
@@ -1433,15 +1343,14 @@ void WpADOView::put_Command(OLEVariant const & _rVar)
OUString WpADOGroup::get_Name() const
{
- OLEString aBSTR;
- pInterface->get_Name(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_Name(&aBSTR);
+ return OUString(aBSTR);
}
void WpADOGroup::put_Name(std::u16string_view _rName)
{
- OLEString bstr(_rName);
- pInterface->put_Name(bstr.asBSTR());
+ pInterface->put_Name(sal::systools::BStr(_rName));
}
RightsEnum WpADOGroup::GetPermissions(
@@ -1468,41 +1377,34 @@ bool WpADOGroup::SetPermissions(
WpADOUsers WpADOGroup::get_Users( )
{
- ADOUsers* pRet = nullptr;
+ WpADOUsers pRet;
pInterface->get_Users( &pRet);
- WpADOUsers aRet;
- aRet.setWithOutAddRef(pRet);
- return aRet;
+ return pRet;
}
OUString WpADOUser::get_Name() const
{
- OLEString aBSTR;
- pInterface->get_Name(aBSTR.getAddress());
- return aBSTR.asOUString();
+ sal::systools::BStr aBSTR;
+ pInterface->get_Name(&aBSTR);
+ return OUString(aBSTR);
}
void WpADOUser::put_Name(std::u16string_view _rName)
{
- OLEString bstr(_rName);
- pInterface->put_Name(bstr.asBSTR());
+ pInterface->put_Name(sal::systools::BStr(_rName));
}
bool WpADOUser::ChangePassword(std::u16string_view _rPwd,std::u16string_view _rNewPwd)
{
- OLEString sStr1(_rPwd);
- OLEString sStr2(_rNewPwd);
- bool bErg = SUCCEEDED(pInterface->ChangePassword(sStr1.asBSTR(),sStr2.asBSTR()));
- return bErg;
+ return SUCCEEDED(
+ pInterface->ChangePassword(sal::systools::BStr(_rPwd), sal::systools::BStr(_rNewPwd)));
}
WpADOGroups WpADOUser::get_Groups()
{
- ADOGroups* pRet = nullptr;
+ WpADOGroups pRet;
pInterface->get_Groups(&pRet);
- WpADOGroups aRet;
- aRet.setWithOutAddRef(pRet);
- return aRet;
+ return pRet;
}
RightsEnum WpADOUser::GetPermissions(
@@ -1527,73 +1429,6 @@ bool WpADOUser::SetPermissions(
return SUCCEEDED(pInterface->SetPermissions(Name,ObjectType,Action,Rights,adInheritNone,ObjectTypeId));
}
-WpBase::WpBase() : pIUnknown(nullptr)
-{
-}
-WpBase::WpBase(IDispatch* pInt)
- :pIUnknown(pInt)
-{
- if (pIUnknown)
- {
- pIUnknown->AddRef();
- }
-}
-
-WpBase::WpBase(const WpBase& aWrapper)
- :pIUnknown(aWrapper.pIUnknown)
-{
- if (pIUnknown)
- pIUnknown->AddRef();
-}
-
-//inline
-WpBase& WpBase::operator=(const WpBase& rhs)
-{
- operator=(rhs.pIUnknown);
- return *this;
-};
-
-WpBase& WpBase::operator=(IDispatch* rhs)
-{
- if (pIUnknown != rhs)
- {
- if (pIUnknown)
- pIUnknown->Release();
- pIUnknown = rhs;
- if (pIUnknown)
- pIUnknown->AddRef();
- }
- return *this;
-}
-
-WpBase::~WpBase()
-{
- if (pIUnknown)
- {
- pIUnknown->Release();
- pIUnknown = nullptr;
- }
-}
-
-void WpBase::clear()
-{
- if (pIUnknown)
- {
- pIUnknown->Release();
- pIUnknown = nullptr;
- }
-}
-
-
-bool WpBase::IsValid() const
-{
- return pIUnknown != nullptr;
-}
-WpBase::operator IDispatch*()
-{
- return pIUnknown;
-}
-
ADORecordset* WpADOConnection::getExportedKeys( const css::uno::Any& catalog, const OUString& schema, std::u16string_view table )
{
// Create elements used in the array
@@ -1603,7 +1438,7 @@ ADORecordset* WpADOConnection::getExportedKeys( const css::uno::Any& catalog, co
// Create SafeArray Bounds and initialize the array
rgsabound[0].lLbound = 0;
- rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria);
+ rgsabound[0].cElements = std::size(varCriteria);
psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound );
sal_Int32 nPos=0;
@@ -1643,7 +1478,7 @@ ADORecordset* WpADOConnection::getImportedKeys( const css::uno::Any& catalog, co
// Create SafeArray Bounds and initialize the array
rgsabound[0].lLbound = 0;
- rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria);
+ rgsabound[0].cElements = std::size(varCriteria);
psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound );
sal_Int32 nPos=0;
@@ -1685,7 +1520,7 @@ ADORecordset* WpADOConnection::getPrimaryKeys( const css::uno::Any& catalog, con
// Create SafeArray Bounds and initialize the array
rgsabound[0].lLbound = 0;
- rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria);
+ rgsabound[0].cElements = std::size(varCriteria);
psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound );
sal_Int32 nPos=0;
@@ -1725,7 +1560,7 @@ ADORecordset* WpADOConnection::getIndexInfo(
// Create SafeArray Bounds and initialize the array
rgsabound[0].lLbound = 0;
- rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria);
+ rgsabound[0].cElements = std::size(varCriteria);
psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound );
sal_Int32 nPos=0;
@@ -1759,7 +1594,7 @@ ADORecordset* WpADOConnection::getIndexInfo(
ADORecordset* WpADOConnection::getTablePrivileges( const css::uno::Any& catalog,
const OUString& schemaPattern,
- const OUString& tableNamePattern )
+ std::u16string_view tableNamePattern )
{
SAFEARRAYBOUND rgsabound[1];
SAFEARRAY *psa = nullptr;
@@ -1767,7 +1602,7 @@ ADORecordset* WpADOConnection::getTablePrivileges( const css::uno::Any& catalog,
// Create SafeArray Bounds and initialize the array
rgsabound[0].lLbound = 0;
- rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria);
+ rgsabound[0].cElements = std::size(varCriteria);
psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound );
sal_Int32 nPos=0;
@@ -1779,7 +1614,7 @@ ADORecordset* WpADOConnection::getTablePrivileges( const css::uno::Any& catalog,
varCriteria[nPos].setString(schemaPattern);
SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// TABLE_SCHEMA
- if(tableNamePattern.toChar() != '%')
+ if(!o3tl::starts_with(tableNamePattern, u"%"))
varCriteria[nPos].setString(tableNamePattern);
SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// TABLE_NAME
@@ -1813,7 +1648,7 @@ ADORecordset* WpADOConnection::getCrossReference( const css::uno::Any& primaryCa
// Create SafeArray Bounds and initialize the array
rgsabound[0].lLbound = 0;
- rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria);
+ rgsabound[0].cElements = std::size(varCriteria);
psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound );
sal_Int32 nPos=0;
@@ -1854,7 +1689,7 @@ ADORecordset* WpADOConnection::getCrossReference( const css::uno::Any& primaryCa
ADORecordset* WpADOConnection::getProcedures( const css::uno::Any& catalog,
const OUString& schemaPattern,
- const OUString& procedureNamePattern )
+ std::u16string_view procedureNamePattern )
{
SAFEARRAYBOUND rgsabound[1];
SAFEARRAY *psa = nullptr;
@@ -1862,7 +1697,7 @@ ADORecordset* WpADOConnection::getProcedures( const css::uno::Any& catalog,
// Create SafeArray Bounds and initialize the array
rgsabound[0].lLbound = 0;
- rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria);
+ rgsabound[0].cElements = std::size(varCriteria);
psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound );
sal_Int32 nPos=0;
@@ -1874,7 +1709,7 @@ ADORecordset* WpADOConnection::getProcedures( const css::uno::Any& catalog,
varCriteria[nPos].setString(schemaPattern);
SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// TABLE_SCHEMA
- if(procedureNamePattern.toChar() != '%')
+ if(!o3tl::starts_with(procedureNamePattern, u"%"))
varCriteria[nPos].setString(procedureNamePattern);
SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// TABLE_NAME
@@ -1893,8 +1728,8 @@ ADORecordset* WpADOConnection::getProcedures( const css::uno::Any& catalog,
ADORecordset* WpADOConnection::getProcedureColumns( const css::uno::Any& catalog,
const OUString& schemaPattern,
- const OUString& procedureNamePattern,
- const OUString& columnNamePattern )
+ std::u16string_view procedureNamePattern,
+ std::u16string_view columnNamePattern )
{
// Create elements used in the array
SAFEARRAYBOUND rgsabound[1];
@@ -1903,7 +1738,7 @@ ADORecordset* WpADOConnection::getProcedureColumns( const css::uno::Any& catalog
// Create SafeArray Bounds and initialize the array
rgsabound[0].lLbound = 0;
- rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria);
+ rgsabound[0].cElements = std::size(varCriteria);
psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound );
sal_Int32 nPos=0;
@@ -1915,11 +1750,11 @@ ADORecordset* WpADOConnection::getProcedureColumns( const css::uno::Any& catalog
varCriteria[nPos].setString(schemaPattern);
SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// TABLE_SCHEMA
- if(procedureNamePattern.toChar() != '%')
+ if(!o3tl::starts_with(procedureNamePattern, u"%"))
varCriteria[nPos].setString(procedureNamePattern);
SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// TABLE_NAME
- if(columnNamePattern.toChar() != '%')
+ if(!o3tl::starts_with(columnNamePattern, u"%"))
varCriteria[nPos].setString(columnNamePattern);
SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// COLUMN_NAME
@@ -1938,7 +1773,7 @@ ADORecordset* WpADOConnection::getProcedureColumns( const css::uno::Any& catalog
ADORecordset* WpADOConnection::getTables( const css::uno::Any& catalog,
const OUString& schemaPattern,
- const OUString& tableNamePattern,
+ std::u16string_view tableNamePattern,
const css::uno::Sequence< OUString >& types )
{
// Create elements used in the array
@@ -1955,18 +1790,16 @@ ADORecordset* WpADOConnection::getTables( const css::uno::Any& catalog,
varCriteria[nPos].setString(schemaPattern);
++nPos;
- if(tableNamePattern.toChar() != '%')
+ if(!o3tl::starts_with(tableNamePattern, u"%"))
varCriteria[nPos].setString(tableNamePattern);
++nPos;
OUStringBuffer aTypes;
- const OUString* pIter = types.getConstArray();
- const OUString* pEnd = pIter + types.getLength();
- for( ; pIter != pEnd ; ++pIter)
+ for (auto& type : types)
{
if ( aTypes.getLength() )
aTypes.append(",");
- aTypes.append(*pIter);
+ aTypes.append(type);
}
OUString sTypeNames = aTypes.makeStringAndClear();
@@ -1974,7 +1807,7 @@ ADORecordset* WpADOConnection::getTables( const css::uno::Any& catalog,
varCriteria[nPos].setString(sTypeNames);
// Create SafeArray Bounds and initialize the array
- const sal_Int32 nCrit = SAL_N_ELEMENTS(varCriteria);
+ const sal_Int32 nCrit = std::size(varCriteria);
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nCrit;
@@ -2001,7 +1834,7 @@ ADORecordset* WpADOConnection::getTables( const css::uno::Any& catalog,
ADORecordset* WpADOConnection::getColumns( const css::uno::Any& catalog,
const OUString& schemaPattern,
- const OUString& tableNamePattern,
+ std::u16string_view tableNamePattern,
std::u16string_view columnNamePattern )
{
// Create elements used in the array
@@ -2011,7 +1844,7 @@ ADORecordset* WpADOConnection::getColumns( const css::uno::Any& catalog,
// Create SafeArray Bounds and initialize the array
rgsabound[0].lLbound = 0;
- rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria);
+ rgsabound[0].cElements = std::size(varCriteria);
psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound );
sal_Int32 nPos=0;
@@ -2023,7 +1856,7 @@ ADORecordset* WpADOConnection::getColumns( const css::uno::Any& catalog,
varCriteria[nPos].setString(schemaPattern);
SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// TABLE_SCHEMA
- if(tableNamePattern.toChar() != '%')
+ if(!o3tl::starts_with(tableNamePattern, u"%"))
varCriteria[nPos].setString(tableNamePattern);
SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// TABLE_NAME
@@ -2055,7 +1888,7 @@ ADORecordset* WpADOConnection::getColumnPrivileges( const css::uno::Any& catalog
// Create SafeArray Bounds and initialize the array
rgsabound[0].lLbound = 0;
- rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria);
+ rgsabound[0].cElements = std::size(varCriteria);
psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound );
sal_Int32 nPos=0;
@@ -2090,7 +1923,7 @@ ADORecordset* WpADOConnection::getTypeInfo(DataTypeEnum /*_eType*/)
{
// Create elements used in the array
OLEVariant varCriteria[2];
- const int nCrit = SAL_N_ELEMENTS(varCriteria);
+ const int nCrit = std::size(varCriteria);
// Create SafeArray Bounds and initialize the array
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
@@ -2128,11 +1961,6 @@ void WpADOTable::putref_ParentCatalog(/* [in] */ _ADOCatalog __RPC_FAR *ppvObjec
SAL_WARN_IF(!bRet, "connectivity.ado", "Could not set ParentCatalog!");
}
-void WpBase::setIDispatch(IDispatch* _pIUnknown)
-{
- pIUnknown = _pIUnknown;
-}
-
void OTools::putValue(const WpADOProperties& _rProps,const OLEVariant &_aPosition,const OLEVariant &_aValVar)
{
SAL_WARN_IF(!_rProps.IsValid(), "connectivity.ado", "Properties are not valid!");
diff --git a/connectivity/source/drivers/ado/adoimp.cxx b/connectivity/source/drivers/ado/adoimp.cxx
index 0b4936e734f2..91f19dd7380d 100644
--- a/connectivity/source/drivers/ado/adoimp.cxx
+++ b/connectivity/source/drivers/ado/adoimp.cxx
@@ -23,6 +23,7 @@
#include <ado/Awrapado.hxx>
#include <ado/adoimp.hxx>
#include <osl/diagnose.h>
+#include <systools/win32/oleauto.hxx>
#include <com/sun/star/sdbc/DataType.hpp>
@@ -67,9 +68,9 @@ const IID ADOS::IID_ADOUSER_25 = MYADOID(0x00000619);
const CLSID ADOS::CLSID_ADOVIEW_25 = MYADOID(0x00000612);
const IID ADOS::IID_ADOVIEW_25 = MYADOID(0x00000613);
-OLEString& ADOS::GetKeyStr()
+BSTR ADOS::GetKeyStr()
{
- static OLEString sKeyStr(u"gxwaezucfyqpwjgqbcmtsncuhwsnyhiohwxz");
+ static sal::systools::BStr sKeyStr(u"gxwaezucfyqpwjgqbcmtsncuhwsnyhiohwxz");
return sKeyStr;
}
@@ -310,9 +311,8 @@ WpADOField ADOS::getField(ADORecordset* _pRecordSet,sal_Int32 _nColumnIndex)
if ( !_pRecordSet )
return WpADOField();
- ADOFields* pFields = nullptr;
- _pRecordSet->get_Fields(&pFields);
- WpOLEAppendCollection<ADOFields, ADOField, WpADOField> aFields(pFields);
+ WpOLEAppendCollection<ADOFields, WpADOField> aFields;
+ _pRecordSet->get_Fields(&aFields);
if(_nColumnIndex <= 0 || _nColumnIndex > aFields.GetItemCount())
::dbtools::throwInvalidIndexException(nullptr);
WpADOField aField(aFields.GetItem(_nColumnIndex-1));
diff --git a/connectivity/source/drivers/calc/CCatalog.cxx b/connectivity/source/drivers/calc/CCatalog.cxx
index 03c4358b9b65..60cf3e7ba06a 100644
--- a/connectivity/source/drivers/calc/CCatalog.cxx
+++ b/connectivity/source/drivers/calc/CCatalog.cxx
@@ -24,7 +24,6 @@
#include <com/sun/star/sdbc/XResultSet.hpp>
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
@@ -41,7 +40,7 @@ void OCalcCatalog::refreshTables()
::std::vector<OUString> aVector;
Sequence<OUString> aTypes;
OCalcConnection::ODocHolder aDocHolder(static_cast<OCalcConnection*>(m_pConnection));
- Reference<XResultSet> xResult = m_xMetaData->getTables(Any(), "%", "%", aTypes);
+ Reference<XResultSet> xResult = m_xMetaData->getTables(Any(), u"%"_ustr, u"%"_ustr, aTypes);
if (xResult.is())
{
diff --git a/connectivity/source/drivers/calc/CConnection.cxx b/connectivity/source/drivers/calc/CConnection.cxx
index 8d4a0c01ebc1..d1ae21a38e07 100644
--- a/connectivity/source/drivers/calc/CConnection.cxx
+++ b/connectivity/source/drivers/calc/CConnection.cxx
@@ -62,9 +62,9 @@ void OCalcConnection::construct(const OUString& url,const Sequence< PropertyValu
sal_Int32 nLen = url.indexOf(':');
nLen = url.indexOf(':',nLen+1);
- OUString aDSN(url.copy(nLen+1));
- m_aFileName = aDSN;
+ m_aFileName = url.copy(nLen+1); // DSN
+
INetURLObject aURL;
aURL.SetSmartProtocol(INetProtocol::File);
{
@@ -80,18 +80,15 @@ void OCalcConnection::construct(const OUString& url,const Sequence< PropertyValu
m_aFileName = aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE);
m_sPassword.clear();
- const char pPwd[] = "password";
- const PropertyValue *pIter = info.getConstArray();
- const PropertyValue *pEnd = pIter + info.getLength();
- for(;pIter != pEnd;++pIter)
+ for (auto& propval : info)
{
- if(pIter->Name == pPwd)
+ if (propval.Name == "password")
{
- pIter->Value >>= m_sPassword;
+ propval.Value >>= m_sPassword;
break;
}
- } // for(;pIter != pEnd;++pIter)
+ }
ODocHolder aDocHolder(this); // just to test that the doc can be loaded
acquireDoc();
}
@@ -123,7 +120,7 @@ Reference< XSpreadsheetDocument> const & OCalcConnection::acquireDoc()
try
{
xComponent = xDesktop->loadComponentFromURL(
- m_aFileName, "_blank", 0, aArgs );
+ m_aFileName, u"_blank"_ustr, 0, aArgs );
}
catch( const Exception& )
{
@@ -142,12 +139,11 @@ Reference< XSpreadsheetDocument> const & OCalcConnection::acquireDoc()
Exception aLoaderError;
OSL_VERIFY( aLoaderException >>= aLoaderError );
- SQLException aDetailException;
- aDetailException.Message = m_aResources.getResourceStringWithSubstitution(
- STR_LOAD_FILE_ERROR_MESSAGE,
- "$exception_type$", aLoaderException.getValueTypeName(),
- "$error_message$", aLoaderError.Message
- );
+ SQLException aDetailException(m_aResources.getResourceStringWithSubstitution(
+ STR_LOAD_FILE_ERROR_MESSAGE, "$exception_type$",
+ aLoaderException.getValueTypeName(),
+ "$error_message$", aLoaderError.Message),
+ {}, {}, 0, {});
aErrorDetails <<= aDetailException;
}
@@ -194,7 +190,7 @@ void OCalcConnection::disposing()
// XServiceInfo
-IMPLEMENT_SERVICE_INFO(OCalcConnection, "com.sun.star.sdbc.drivers.calc.Connection", "com.sun.star.sdbc.Connection")
+IMPLEMENT_SERVICE_INFO(OCalcConnection, u"com.sun.star.sdbc.drivers.calc.Connection"_ustr, u"com.sun.star.sdbc.Connection"_ustr)
Reference< XDatabaseMetaData > SAL_CALL OCalcConnection::getMetaData( )
@@ -217,11 +213,11 @@ Reference< XDatabaseMetaData > SAL_CALL OCalcConnection::getMetaData( )
css::uno::Reference< XTablesSupplier > OCalcConnection::createCatalog()
{
::osl::MutexGuard aGuard( m_aMutex );
- Reference< XTablesSupplier > xTab = m_xCatalog;
+ rtl::Reference< connectivity::sdbcx::OCatalog > xTab = m_xCatalog;
if(!xTab.is())
{
xTab = new OCalcCatalog(this);
- m_xCatalog = xTab;
+ m_xCatalog = xTab.get();
}
return xTab;
}
@@ -257,9 +253,7 @@ Reference< XPreparedStatement > SAL_CALL OCalcConnection::prepareCall( const OUS
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- ::dbtools::throwFeatureNotImplementedSQLException( "XConnection::prepareCall", *this );
- return nullptr;
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XConnection::prepareCall"_ustr, *this );
}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/calc/CDatabaseMetaData.cxx b/connectivity/source/drivers/calc/CDatabaseMetaData.cxx
index 31798f5bafd0..4c642e66f2e7 100644
--- a/connectivity/source/drivers/calc/CDatabaseMetaData.cxx
+++ b/connectivity/source/drivers/calc/CDatabaseMetaData.cxx
@@ -34,7 +34,6 @@ using namespace connectivity::file;
using namespace connectivity::component;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
using namespace ::com::sun::star::table;
@@ -59,37 +58,37 @@ static bool lcl_IsEmptyOrHidden( const Reference<XSpreadsheets>& xSheets, const
{
Any aAny = xSheets->getByName( rName );
Reference<XSpreadsheet> xSheet;
- if ( aAny >>= xSheet )
+ if ( !(aAny >>= xSheet) )
+ return false;
+
+ // test if sheet is hidden
+
+ Reference<XPropertySet> xProp( xSheet, UNO_QUERY );
+ if (xProp.is())
{
- // test if sheet is hidden
+ bool bVisible;
+ Any aVisAny = xProp->getPropertyValue(u"IsVisible"_ustr);
+ if ( (aVisAny >>= bVisible) && !bVisible)
+ return true; // hidden
+ }
- Reference<XPropertySet> xProp( xSheet, UNO_QUERY );
- if (xProp.is())
- {
- bool bVisible;
- Any aVisAny = xProp->getPropertyValue("IsVisible");
- if ( (aVisAny >>= bVisible) && !bVisible)
- return true; // hidden
- }
+ // use the same data area as in OCalcTable to test for empty table
- // use the same data area as in OCalcTable to test for empty table
+ Reference<XSheetCellCursor> xCursor = xSheet->createCursor();
+ Reference<XCellRangeAddressable> xRange( xCursor, UNO_QUERY );
+ if ( xRange.is() )
+ {
+ xCursor->collapseToSize( 1, 1 ); // single (first) cell
+ xCursor->collapseToCurrentRegion(); // contiguous data area
- Reference<XSheetCellCursor> xCursor = xSheet->createCursor();
- Reference<XCellRangeAddressable> xRange( xCursor, UNO_QUERY );
- if ( xRange.is() )
+ CellRangeAddress aRangeAddr = xRange->getRangeAddress();
+ if ( aRangeAddr.StartColumn == aRangeAddr.EndColumn &&
+ aRangeAddr.StartRow == aRangeAddr.EndRow )
{
- xCursor->collapseToSize( 1, 1 ); // single (first) cell
- xCursor->collapseToCurrentRegion(); // contiguous data area
-
- CellRangeAddress aRangeAddr = xRange->getRangeAddress();
- if ( aRangeAddr.StartColumn == aRangeAddr.EndColumn &&
- aRangeAddr.StartRow == aRangeAddr.EndRow )
- {
- // single cell -> check content
- Reference<XCell> xCell = xCursor->getCellByPosition( 0, 0 );
- if ( xCell.is() && xCell->getType() == CellContentType_EMPTY )
- return true;
- }
+ // single cell -> check content
+ Reference<XCell> xCell = xCursor->getCellByPosition( 0, 0 );
+ if ( xCell.is() && xCell->getType() == CellContentType_EMPTY )
+ return true;
}
}
@@ -109,7 +108,7 @@ static bool lcl_IsUnnamed( const Reference<XDatabaseRanges>& xRanges, const OUSt
{
try
{
- Any aUserAny = xRangeProp->getPropertyValue("IsUserDefined");
+ Any aUserAny = xRangeProp->getPropertyValue(u"IsUserDefined"_ustr);
bool bUserDefined;
if ( aUserAny >>= bUserDefined )
bUnnamed = !bUserDefined;
@@ -135,27 +134,23 @@ Reference< XResultSet > SAL_CALL OCalcDatabaseMetaData::getTables(
// check if ORowSetValue type is given
// when no types are given then we have to return all tables e.g. TABLE
- OUString aTable("TABLE");
+ static constexpr OUString aTable(u"TABLE"_ustr);
- bool bTableFound = true;
- sal_Int32 nLength = types.getLength();
- if(nLength)
+ if (types.hasElements())
{
- bTableFound = false;
+ bool bTableFound = false;
- const OUString* pIter = types.getConstArray();
- const OUString* pEnd = pIter + nLength;
- for(;pIter != pEnd;++pIter)
+ for (auto& type : types)
{
- if(*pIter == aTable)
+ if (type == aTable)
{
bTableFound = true;
break;
}
}
+ if (!bTableFound)
+ return pResult;
}
- if(!bTableFound)
- return pResult;
// get the sheet names from the document
@@ -172,7 +167,7 @@ Reference< XResultSet > SAL_CALL OCalcDatabaseMetaData::getTables(
sal_Int32 nSheetCount = aSheetNames.getLength();
for (sal_Int32 nSheet=0; nSheet<nSheetCount; nSheet++)
{
- OUString aName = aSheetNames[nSheet];
+ const OUString& aName = aSheetNames[nSheet];
if ( !lcl_IsEmptyOrHidden( xSheets, aName ) && match(tableNamePattern,aName,'\0') )
{
aRows.push_back( { nullptr, nullptr, nullptr,
@@ -188,7 +183,7 @@ Reference< XResultSet > SAL_CALL OCalcDatabaseMetaData::getTables(
Reference<XPropertySet> xDocProp( xDoc, UNO_QUERY );
if ( xDocProp.is() )
{
- Any aRangesAny = xDocProp->getPropertyValue("DatabaseRanges");
+ Any aRangesAny = xDocProp->getPropertyValue(u"DatabaseRanges"_ustr);
Reference<XDatabaseRanges> xRanges;
if ( aRangesAny >>= xRanges )
{
@@ -196,7 +191,7 @@ Reference< XResultSet > SAL_CALL OCalcDatabaseMetaData::getTables(
sal_Int32 nDBCount = aDBNames.getLength();
for (sal_Int32 nRange=0; nRange<nDBCount; nRange++)
{
- OUString aName = aDBNames[nRange];
+ const OUString& aName = aDBNames[nRange];
if ( !lcl_IsUnnamed( xRanges, aName ) && match(tableNamePattern,aName,'\0') )
{
aRows.push_back( { nullptr, nullptr, nullptr,
diff --git a/connectivity/source/drivers/calc/CDriver.cxx b/connectivity/source/drivers/calc/CDriver.cxx
index b7b11cc29176..528df911c219 100644
--- a/connectivity/source/drivers/calc/CDriver.cxx
+++ b/connectivity/source/drivers/calc/CDriver.cxx
@@ -37,7 +37,7 @@ using namespace ::com::sun::star::lang;
OUString SAL_CALL ODriver::getImplementationName( )
{
- return "com.sun.star.comp.sdbc.calc.ODriver";
+ return u"com.sun.star.comp.sdbc.calc.ODriver"_ustr;
}
// service names from file::OFileDriver
@@ -53,7 +53,7 @@ connectivity_calc_ODriver(
}
if (ret)
ret->acquire();
- return static_cast<cppu::OWeakObject*>(ret.get());
+ return getXWeak(ret.get());
}
@@ -70,7 +70,7 @@ Reference< XConnection > SAL_CALL ODriver::connect( const OUString& url,
rtl::Reference<OCalcConnection> pCon = new OCalcConnection(this);
pCon->construct(url,info);
- m_xConnections.push_back(WeakReferenceHelper(*pCon));
+ m_xConnections.push_back(pCon.get());
return pCon;
}
diff --git a/connectivity/source/drivers/calc/CTable.cxx b/connectivity/source/drivers/calc/CTable.cxx
index 8e37cdd99071..da7e74542af3 100644
--- a/connectivity/source/drivers/calc/CTable.cxx
+++ b/connectivity/source/drivers/calc/CTable.cxx
@@ -49,10 +49,8 @@ using namespace ::cppu;
using namespace ::dbtools;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::sheet;
using namespace ::com::sun::star::table;
using namespace ::com::sun::star::text;
@@ -71,14 +69,11 @@ static void lcl_UpdateArea( const Reference<XCellRange>& xUsedRange, sal_Int32&
CellFlags::STRING | CellFlags::VALUE | CellFlags::DATETIME | CellFlags::FORMULA | CellFlags::ANNOTATION;
const Reference<XSheetCellRanges> xUsedRanges = xUsedQuery->queryContentCells( nContentFlags );
- const Sequence<CellRangeAddress> aAddresses = xUsedRanges->getRangeAddresses();
- const sal_Int32 nCount = aAddresses.getLength();
- const CellRangeAddress* pData = aAddresses.getConstArray();
- for ( sal_Int32 i=0; i<nCount; i++ )
+ for (auto& address : xUsedRanges->getRangeAddresses())
{
- rEndCol = std::max(pData[i].EndColumn, rEndCol);
- rEndRow = std::max(pData[i].EndRow, rEndRow);
+ rEndCol = std::max(address.EndColumn, rEndCol);
+ rEndRow = std::max(address.EndRow, rEndRow);
}
}
@@ -139,7 +134,7 @@ static CellContentType lcl_GetContentOrResultType( const Reference<XCell>& xCell
Reference<XPropertySet> xProp( xCell, UNO_QUERY );
try
{
- xProp->getPropertyValue( "CellContentType" ) >>= eCellType; // type of cell content
+ xProp->getPropertyValue( u"CellContentType"_ustr ) >>= eCellType; // type of cell content
}
catch (UnknownPropertyException&)
{
@@ -191,24 +186,23 @@ static bool lcl_HasTextInColumn( const Reference<XSpreadsheet>& xSheet, sal_Int3
// look for any text cell or text result in the column
Reference<XCellRangeAddressable> xAddr( xSheet, UNO_QUERY );
- if (xAddr.is())
- {
- CellRangeAddress aTotalRange = xAddr->getRangeAddress();
- sal_Int32 nLastRow = aTotalRange.EndRow;
- Reference<XCellRangesQuery> xQuery( xSheet->getCellRangeByPosition( nDocColumn, nDocRow, nDocColumn, nLastRow ), UNO_QUERY );
- if (xQuery.is())
- {
- // are there text cells in the column?
- Reference<XSheetCellRanges> xTextContent = xQuery->queryContentCells( CellFlags::STRING );
- if ( xTextContent.is() && xTextContent->hasElements() )
- return true;
-
- // are there formulas with text results in the column?
- Reference<XSheetCellRanges> xTextFormula = xQuery->queryFormulaCells( FormulaResult::STRING );
- if ( xTextFormula.is() && xTextFormula->hasElements() )
- return true;
- }
- }
+ if (!xAddr)
+ return false;
+ CellRangeAddress aTotalRange = xAddr->getRangeAddress();
+ sal_Int32 nLastRow = aTotalRange.EndRow;
+ Reference<XCellRangesQuery> xQuery( xSheet->getCellRangeByPosition( nDocColumn, nDocRow, nDocColumn, nLastRow ), UNO_QUERY );
+ if (!xQuery)
+ return false;
+
+ // are there text cells in the column?
+ Reference<XSheetCellRanges> xTextContent = xQuery->queryContentCells( CellFlags::STRING );
+ if ( xTextContent.is() && xTextContent->hasElements() )
+ return true;
+
+ // are there formulas with text results in the column?
+ Reference<XSheetCellRanges> xTextFormula = xQuery->queryFormulaCells( FormulaResult::STRING );
+ if ( xTextFormula.is() && xTextFormula->hasElements() )
+ return true;
return false;
}
@@ -254,7 +248,7 @@ static void lcl_GetColumnInfo( const Reference<XSpreadsheet>& xSheet, const Refe
{
sal_Int32 nKey = 0;
- if ( xProp->getPropertyValue( "NumberFormat" ) >>= nKey )
+ if ( xProp->getPropertyValue( u"NumberFormat"_ustr ) >>= nKey )
{
const Reference<XPropertySet> xFormat = xFormats->getByKey( nKey );
if ( xFormat.is() )
@@ -538,7 +532,7 @@ void OCalcTable::construct()
Reference<XPropertySet> xDocProp( xDoc, UNO_QUERY );
if ( xDocProp.is() )
{
- Reference<XDatabaseRanges> xRanges(xDocProp->getPropertyValue("DatabaseRanges"),UNO_QUERY);
+ Reference<XDatabaseRanges> xRanges(xDocProp->getPropertyValue(u"DatabaseRanges"_ustr),UNO_QUERY);
if ( xRanges.is() && xRanges->hasByName( m_Name ) )
{
@@ -552,7 +546,7 @@ void OCalcTable::construct()
bool bRangeHeader = true;
Reference<XPropertySet> xFiltProp( xDBRange->getFilterDescriptor(), UNO_QUERY );
if ( xFiltProp.is() )
- xFiltProp->getPropertyValue("ContainsHeader") >>= bRangeHeader;
+ xFiltProp->getPropertyValue(u"ContainsHeader"_ustr) >>= bRangeHeader;
Reference<XSheetCellRange> xSheetRange( xRefer->getReferredCells(), UNO_QUERY );
Reference<XCellRangeAddressable> xAddr( xSheetRange, UNO_QUERY );
@@ -586,7 +580,7 @@ void OCalcTable::construct()
if (xProp.is())
{
css::util::Date aDateStruct;
- if ( xProp->getPropertyValue("NullDate") >>= aDateStruct )
+ if ( xProp->getPropertyValue(u"NullDate"_ustr) >>= aDateStruct )
m_aNullDate = ::Date( aDateStruct.Day, aDateStruct.Month, aDateStruct.Year );
}
}
@@ -609,20 +603,6 @@ void SAL_CALL OCalcTable::disposing()
}
-Sequence< sal_Int8 > OCalcTable::getUnoTunnelId()
-{
- static const comphelper::UnoIdInit implId;
- return implId.getSeq();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OCalcTable::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return comphelper::getSomethingImpl(rId, this,
- comphelper::FallbackToGetSomethingOf<OCalcTable_BASE>{});
-}
-
bool OCalcTable::fetchRow( OValueRefRow& _rRow, const OSQLColumns & _rCols,
bool bRetrieveData )
{
diff --git a/connectivity/source/drivers/calc/CTables.cxx b/connectivity/source/drivers/calc/CTables.cxx
index 08e5d63e3abd..87fb959fbda6 100644
--- a/connectivity/source/drivers/calc/CTables.cxx
+++ b/connectivity/source/drivers/calc/CTables.cxx
@@ -25,21 +25,16 @@
#include <file/FCatalog.hxx>
#include <file/FConnection.hxx>
-using namespace ::comphelper;
using namespace connectivity;
using namespace connectivity::calc;
using namespace connectivity::file;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbcx;
-using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::container;
-sdbcx::ObjectType OCalcTables::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > OCalcTables::createObject(const OUString& _rName)
{
rtl::Reference<OCalcTable> pTable = new OCalcTable(this, static_cast<OCalcConnection*>(static_cast<OFileCatalog&>(m_rParent).getConnection()),
- _rName,"TABLE");
+ _rName,u"TABLE"_ustr);
pTable->construct();
return pTable;
}
diff --git a/connectivity/source/drivers/component/CColumns.cxx b/connectivity/source/drivers/component/CColumns.cxx
index 9f802b6e4c57..9fc7f22882fe 100644
--- a/connectivity/source/drivers/component/CColumns.cxx
+++ b/connectivity/source/drivers/component/CColumns.cxx
@@ -23,20 +23,16 @@
using namespace connectivity::component;
using namespace connectivity;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbcx;
-using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-sdbcx::ObjectType OComponentColumns::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > OComponentColumns::createObject(const OUString& _rName)
{
::rtl::Reference<OSQLColumns> aCols = m_pTable->getTableColumns();
OSQLColumns::const_iterator aIter = find(aCols->begin(),aCols->end(),_rName,::comphelper::UStringMixEqual(isCaseSensitive()));
- sdbcx::ObjectType xRet;
+ css::uno::Reference< css::beans::XPropertySet > xRet;
if(aIter != aCols->end())
- xRet = sdbcx::ObjectType(*aIter,UNO_QUERY);
+ xRet = *aIter;
return xRet;
}
diff --git a/connectivity/source/drivers/component/CDatabaseMetaData.cxx b/connectivity/source/drivers/component/CDatabaseMetaData.cxx
index b8bbae3d7499..45a932657f67 100644
--- a/connectivity/source/drivers/component/CDatabaseMetaData.cxx
+++ b/connectivity/source/drivers/component/CDatabaseMetaData.cxx
@@ -46,74 +46,69 @@ OComponentDatabaseMetaData::~OComponentDatabaseMetaData()
Reference< XResultSet > OComponentDatabaseMetaData::impl_getTypeInfo_throw( )
{
- ::osl::MutexGuard aGuard( m_aMutex );
-
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo);
- static ODatabaseMetaDataResultSet::ORows aRows;
- if(aRows.empty())
+ ODatabaseMetaDataResultSet::ORows aRows;
+ aRows.reserve(6);
+ ODatabaseMetaDataResultSet::ORow aRow
{
- aRows.reserve(6);
- ODatabaseMetaDataResultSet::ORow aRow
- {
- ODatabaseMetaDataResultSet::getEmptyValue(),
- new ORowSetValueDecorator(OUString("VARCHAR")),
- new ORowSetValueDecorator(DataType::VARCHAR),
- new ORowSetValueDecorator(sal_Int32(65535)),
- ODatabaseMetaDataResultSet::getQuoteValue(),
- ODatabaseMetaDataResultSet::getQuoteValue(),
- ODatabaseMetaDataResultSet::getEmptyValue(),
- ODatabaseMetaDataResultSet::get1Value(), // ORowSetValue((sal_Int32)ColumnValue::NULLABLE
- ODatabaseMetaDataResultSet::get1Value(),
- new ORowSetValueDecorator(sal_Int32(ColumnSearch::CHAR)),
- ODatabaseMetaDataResultSet::get1Value(),
- ODatabaseMetaDataResultSet::get0Value(),
- ODatabaseMetaDataResultSet::get0Value(),
- ODatabaseMetaDataResultSet::getEmptyValue(),
- ODatabaseMetaDataResultSet::get0Value(),
- ODatabaseMetaDataResultSet::get0Value(),
- ODatabaseMetaDataResultSet::getEmptyValue(),
- ODatabaseMetaDataResultSet::getEmptyValue(),
- new ORowSetValueDecorator(sal_Int32(10))
- };
-
- aRows.push_back(aRow);
-
- aRow[1] = new ORowSetValueDecorator(OUString("DECIMAL"));
- aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL);
- aRow[3] = ODatabaseMetaDataResultSet::get0Value();
- aRow[9] = ODatabaseMetaDataResultSet::getBasicValue();
- aRow[15] = ODatabaseMetaDataResultSet::get0Value();
- aRows.push_back(aRow);
-
- aRow[1] = new ORowSetValueDecorator(OUString("BOOL"));
- aRow[2] = new ORowSetValueDecorator(DataType::BIT);
- aRow[3] = new ORowSetValueDecorator(sal_Int32(20));
- aRow[9] = ODatabaseMetaDataResultSet::getBasicValue();
- aRow[15] = new ORowSetValueDecorator(sal_Int32(15));
- aRows.push_back(aRow);
-
- aRow[1] = new ORowSetValueDecorator(OUString("DATE"));
- aRow[2] = new ORowSetValueDecorator(DataType::DATE);
- aRow[3] = ODatabaseMetaDataResultSet::get0Value();
- aRow[9] = ODatabaseMetaDataResultSet::getBasicValue();
- aRow[15] = ODatabaseMetaDataResultSet::get0Value();
- aRows.push_back(aRow);
-
- aRow[1] = new ORowSetValueDecorator(OUString("TIME"));
- aRow[2] = new ORowSetValueDecorator(DataType::TIME);
- aRow[3] = ODatabaseMetaDataResultSet::get0Value();
- aRow[9] = ODatabaseMetaDataResultSet::getBasicValue();
- aRow[15] = ODatabaseMetaDataResultSet::get0Value();
- aRows.push_back(aRow);
-
- aRow[1] = new ORowSetValueDecorator(OUString("TIMESTAMP"));
- aRow[2] = new ORowSetValueDecorator(DataType::TIMESTAMP);
- aRow[3] = ODatabaseMetaDataResultSet::get0Value();
- aRow[9] = ODatabaseMetaDataResultSet::getBasicValue();
- aRow[15] = ODatabaseMetaDataResultSet::get0Value();
- aRows.push_back(aRow);
- }
+ ODatabaseMetaDataResultSet::getEmptyValue(),
+ new ORowSetValueDecorator(u"VARCHAR"_ustr),
+ new ORowSetValueDecorator(DataType::VARCHAR),
+ new ORowSetValueDecorator(sal_Int32(65535)),
+ ODatabaseMetaDataResultSet::getQuoteValue(),
+ ODatabaseMetaDataResultSet::getQuoteValue(),
+ ODatabaseMetaDataResultSet::getEmptyValue(),
+ ODatabaseMetaDataResultSet::get1Value(), // ORowSetValue((sal_Int32)ColumnValue::NULLABLE
+ ODatabaseMetaDataResultSet::get1Value(),
+ new ORowSetValueDecorator(sal_Int32(ColumnSearch::CHAR)),
+ ODatabaseMetaDataResultSet::get1Value(),
+ ODatabaseMetaDataResultSet::get0Value(),
+ ODatabaseMetaDataResultSet::get0Value(),
+ ODatabaseMetaDataResultSet::getEmptyValue(),
+ ODatabaseMetaDataResultSet::get0Value(),
+ ODatabaseMetaDataResultSet::get0Value(),
+ ODatabaseMetaDataResultSet::getEmptyValue(),
+ ODatabaseMetaDataResultSet::getEmptyValue(),
+ new ORowSetValueDecorator(sal_Int32(10))
+ };
+
+ aRows.push_back(aRow);
+
+ aRow[1] = new ORowSetValueDecorator(u"DECIMAL"_ustr);
+ aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL);
+ aRow[3] = ODatabaseMetaDataResultSet::get0Value();
+ aRow[9] = ODatabaseMetaDataResultSet::getBasicValue();
+ aRow[15] = ODatabaseMetaDataResultSet::get0Value();
+ aRows.push_back(aRow);
+
+ aRow[1] = new ORowSetValueDecorator(u"BOOL"_ustr);
+ aRow[2] = new ORowSetValueDecorator(DataType::BIT);
+ aRow[3] = new ORowSetValueDecorator(sal_Int32(20));
+ aRow[9] = ODatabaseMetaDataResultSet::getBasicValue();
+ aRow[15] = new ORowSetValueDecorator(sal_Int32(15));
+ aRows.push_back(aRow);
+
+ aRow[1] = new ORowSetValueDecorator(u"DATE"_ustr);
+ aRow[2] = new ORowSetValueDecorator(DataType::DATE);
+ aRow[3] = ODatabaseMetaDataResultSet::get0Value();
+ aRow[9] = ODatabaseMetaDataResultSet::getBasicValue();
+ aRow[15] = ODatabaseMetaDataResultSet::get0Value();
+ aRows.push_back(aRow);
+
+ aRow[1] = new ORowSetValueDecorator(u"TIME"_ustr);
+ aRow[2] = new ORowSetValueDecorator(DataType::TIME);
+ aRow[3] = ODatabaseMetaDataResultSet::get0Value();
+ aRow[9] = ODatabaseMetaDataResultSet::getBasicValue();
+ aRow[15] = ODatabaseMetaDataResultSet::get0Value();
+ aRows.push_back(aRow);
+
+ aRow[1] = new ORowSetValueDecorator(u"TIMESTAMP"_ustr);
+ aRow[2] = new ORowSetValueDecorator(DataType::TIMESTAMP);
+ aRow[3] = ODatabaseMetaDataResultSet::get0Value();
+ aRow[9] = ODatabaseMetaDataResultSet::getBasicValue();
+ aRow[15] = ODatabaseMetaDataResultSet::get0Value();
+ aRows.push_back(aRow);
pResult->setRows(std::move(aRows));
return pResult;
@@ -192,10 +187,10 @@ Reference< XResultSet > SAL_CALL OComponentDatabaseMetaData::getColumns(
switch(aRow[11]->getValue().getInt32())
{
case ColumnValue::NO_NULLS:
- aRow[18] = new ORowSetValueDecorator(OUString("NO"));
+ aRow[18] = new ORowSetValueDecorator(u"NO"_ustr);
break;
case ColumnValue::NULLABLE:
- aRow[18] = new ORowSetValueDecorator(OUString("YES"));
+ aRow[18] = new ORowSetValueDecorator(u"YES"_ustr);
break;
default:
aRow[18] = new ORowSetValueDecorator(OUString());
diff --git a/connectivity/source/drivers/component/CPreparedStatement.cxx b/connectivity/source/drivers/component/CPreparedStatement.cxx
index 7c5c8e07f891..dc7dd01304b9 100644
--- a/connectivity/source/drivers/component/CPreparedStatement.cxx
+++ b/connectivity/source/drivers/component/CPreparedStatement.cxx
@@ -22,13 +22,12 @@
using namespace connectivity::component;
using namespace connectivity::file;
-using namespace com::sun::star::uno;
rtl::Reference<OResultSet> OComponentPreparedStatement::createResultSet()
{
return new connectivity::component::OComponentResultSet(this,m_aSQLIterator);
}
-IMPLEMENT_SERVICE_INFO(OComponentPreparedStatement,"com.sun.star.sdbc.driver.component.PreparedStatement","com.sun.star.sdbc.PreparedStatement");
+IMPLEMENT_SERVICE_INFO(OComponentPreparedStatement,u"com.sun.star.sdbc.driver.component.PreparedStatement"_ustr,u"com.sun.star.sdbc.PreparedStatement"_ustr);
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/component/CResultSet.cxx b/connectivity/source/drivers/component/CResultSet.cxx
index acf5d6a74df8..8a170bab20d4 100644
--- a/connectivity/source/drivers/component/CResultSet.cxx
+++ b/connectivity/source/drivers/component/CResultSet.cxx
@@ -45,12 +45,12 @@ OComponentResultSet::OComponentResultSet( OStatement_Base* pStmt,connectivity::O
OUString SAL_CALL OComponentResultSet::getImplementationName( )
{
- return "com.sun.star.sdbcx.component.ResultSet";
+ return u"com.sun.star.sdbcx.component.ResultSet"_ustr;
}
Sequence< OUString > SAL_CALL OComponentResultSet::getSupportedServiceNames( )
{
- return { "com.sun.star.sdbc.ResultSet", "com.sun.star.sdbcx.ResultSet" };
+ return { u"com.sun.star.sdbc.ResultSet"_ustr, u"com.sun.star.sdbcx.ResultSet"_ustr };
}
sal_Bool SAL_CALL OComponentResultSet::supportsService( const OUString& _rServiceName )
@@ -77,7 +77,7 @@ Any SAL_CALL OComponentResultSet::getBookmark( )
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- return makeAny((*m_aRow)[0]->getValue().getInt32());
+ return Any((*m_aRow)[0]->getValue().getInt32());
}
sal_Bool SAL_CALL OComponentResultSet::moveToBookmark( const Any& bookmark )
@@ -130,8 +130,7 @@ Sequence< sal_Int32 > SAL_CALL OComponentResultSet::deleteRows( const Sequence<
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- ::dbtools::throwFeatureNotImplementedSQLException( "XDeleteRows::deleteRows", *this );
- return Sequence< sal_Int32 >();
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XDeleteRows::deleteRows"_ustr, *this );
}
bool OComponentResultSet::fillIndexValues(const Reference< XColumnsSupplier> &/*_xIndex*/)
diff --git a/connectivity/source/drivers/component/CStatement.cxx b/connectivity/source/drivers/component/CStatement.cxx
index f3bd03e8b276..61903e01ad08 100644
--- a/connectivity/source/drivers/component/CStatement.cxx
+++ b/connectivity/source/drivers/component/CStatement.cxx
@@ -22,14 +22,13 @@
using namespace connectivity::component;
using namespace connectivity::file;
-using namespace com::sun::star::uno;
rtl::Reference<OResultSet> OComponentStatement::createResultSet()
{
return new connectivity::component::OComponentResultSet(this, m_aSQLIterator);
}
-IMPLEMENT_SERVICE_INFO(OComponentStatement, "com.sun.star.sdbc.driver.component.Statement",
- "com.sun.star.sdbc.Statement");
+IMPLEMENT_SERVICE_INFO(OComponentStatement, u"com.sun.star.sdbc.driver.component.Statement"_ustr,
+ u"com.sun.star.sdbc.Statement"_ustr);
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/component/CTable.cxx b/connectivity/source/drivers/component/CTable.cxx
index 83dbf8a68830..6fe82dc830bb 100644
--- a/connectivity/source/drivers/component/CTable.cxx
+++ b/connectivity/source/drivers/component/CTable.cxx
@@ -25,15 +25,12 @@ using namespace connectivity;
using namespace connectivity::component;
using namespace connectivity::file;
using namespace ::cppu;
-using namespace ::dbtools;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::sheet;
-using namespace ::com::sun::star::util;
OComponentTable::OComponentTable(sdbcx::OCollection* _pTables,file::OConnection* _pConnection,
@@ -104,8 +101,7 @@ Any SAL_CALL OComponentTable::queryInterface( const Type & rType )
rType == cppu::UnoType<XDataDescriptorFactory>::get())
return Any();
- const Any aRet = ::cppu::queryInterface(rType,static_cast< css::lang::XUnoTunnel*> (this));
- return aRet.hasValue() ? aRet : OTable_TYPEDEF::queryInterface(rType);
+ return OTable_TYPEDEF::queryInterface(rType);
}
diff --git a/connectivity/source/drivers/dbase/DCatalog.cxx b/connectivity/source/drivers/dbase/DCatalog.cxx
index a8aaf89c529a..6af3440b6071 100644
--- a/connectivity/source/drivers/dbase/DCatalog.cxx
+++ b/connectivity/source/drivers/dbase/DCatalog.cxx
@@ -24,7 +24,6 @@
#include <com/sun/star/sdbc/XResultSet.hpp>
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
@@ -40,7 +39,7 @@ void ODbaseCatalog::refreshTables()
{
::std::vector<OUString> aVector;
Sequence<OUString> aTypes;
- Reference<XResultSet> xResult = m_xMetaData->getTables(Any(), "%", "%", aTypes);
+ Reference<XResultSet> xResult = m_xMetaData->getTables(Any(), u"%"_ustr, u"%"_ustr, aTypes);
if (xResult.is())
{
diff --git a/connectivity/source/drivers/dbase/DColumns.cxx b/connectivity/source/drivers/dbase/DColumns.cxx
index b997ec8d9087..4025fcc5a800 100644
--- a/connectivity/source/drivers/dbase/DColumns.cxx
+++ b/connectivity/source/drivers/dbase/DColumns.cxx
@@ -25,21 +25,17 @@ using namespace connectivity::dbase;
using namespace connectivity;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::sdbcx;
-using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-sdbcx::ObjectType ODbaseColumns::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > ODbaseColumns::createObject(const OUString& _rName)
{
ODbaseTable* pTable = static_cast<ODbaseTable*>(m_pTable);
const ::rtl::Reference<OSQLColumns>& aCols = pTable->getTableColumns();
OSQLColumns::const_iterator aIter = find(aCols->begin(),aCols->end(),_rName,::comphelper::UStringMixEqual(isCaseSensitive()));
- sdbcx::ObjectType xRet;
+ css::uno::Reference< css::beans::XPropertySet > xRet;
if(aIter != aCols->end())
- xRet = sdbcx::ObjectType(*aIter,UNO_QUERY);
+ xRet = *aIter;
return xRet;
}
@@ -56,7 +52,7 @@ Reference< XPropertySet > ODbaseColumns::createDescriptor()
// XAppend
-sdbcx::ObjectType ODbaseColumns::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
+css::uno::Reference< css::beans::XPropertySet > ODbaseColumns::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
{
if ( m_pTable->isNew() )
return cloneDescriptor( descriptor );
diff --git a/connectivity/source/drivers/dbase/DConnection.cxx b/connectivity/source/drivers/dbase/DConnection.cxx
index c9c7a93fa9f2..ab97a3aeeaa0 100644
--- a/connectivity/source/drivers/dbase/DConnection.cxx
+++ b/connectivity/source/drivers/dbase/DConnection.cxx
@@ -33,10 +33,8 @@ typedef connectivity::file::OConnection OConnection_BASE;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::lang;
ODbaseConnection::ODbaseConnection(ODriver* _pDriver) : OConnection(_pDriver)
{
@@ -49,7 +47,7 @@ ODbaseConnection::~ODbaseConnection()
// XServiceInfo
-IMPLEMENT_SERVICE_INFO(ODbaseConnection, "com.sun.star.sdbc.drivers.dbase.Connection", "com.sun.star.sdbc.Connection")
+IMPLEMENT_SERVICE_INFO(ODbaseConnection, u"com.sun.star.sdbc.drivers.dbase.Connection"_ustr, u"com.sun.star.sdbc.Connection"_ustr)
Reference< XDatabaseMetaData > SAL_CALL ODbaseConnection::getMetaData( )
@@ -71,11 +69,11 @@ Reference< XDatabaseMetaData > SAL_CALL ODbaseConnection::getMetaData( )
css::uno::Reference< XTablesSupplier > ODbaseConnection::createCatalog()
{
::osl::MutexGuard aGuard( m_aMutex );
- Reference< XTablesSupplier > xTab = m_xCatalog;
+ rtl::Reference< connectivity::sdbcx::OCatalog > xTab = m_xCatalog;
if(!xTab.is())
{
xTab = new ODbaseCatalog(this);
- m_xCatalog = xTab;
+ m_xCatalog = xTab.get();
}
return xTab;
}
@@ -104,9 +102,7 @@ Reference< XPreparedStatement > SAL_CALL ODbaseConnection::prepareStatement( con
Reference< XPreparedStatement > SAL_CALL ODbaseConnection::prepareCall( const OUString& /*sql*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XConnection::prepareCall", *this );
- return nullptr;
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XConnection::prepareCall"_ustr, *this );
}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/dbase/DDatabaseMetaData.cxx b/connectivity/source/drivers/dbase/DDatabaseMetaData.cxx
index bdff15cafa82..7e17e1fc0d79 100644
--- a/connectivity/source/drivers/dbase/DDatabaseMetaData.cxx
+++ b/connectivity/source/drivers/dbase/DDatabaseMetaData.cxx
@@ -54,98 +54,93 @@ ODbaseDatabaseMetaData::~ODbaseDatabaseMetaData()
Reference< XResultSet > ODbaseDatabaseMetaData::impl_getTypeInfo_throw( )
{
- ::osl::MutexGuard aGuard( m_aMutex );
-
rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo);
- static ODatabaseMetaDataResultSet::ORows aRows;
- if(aRows.empty())
+ ODatabaseMetaDataResultSet::ORows aRows;
+ aRows.reserve(10);
+ ODatabaseMetaDataResultSet::ORow aRow
{
- aRows.reserve(10);
- ODatabaseMetaDataResultSet::ORow aRow
- {
- ODatabaseMetaDataResultSet::getEmptyValue(),
- new ORowSetValueDecorator(OUString("VARCHAR")),
- new ORowSetValueDecorator(DataType::VARCHAR),
- new ORowSetValueDecorator(sal_Int32(254)),
- ODatabaseMetaDataResultSet::getQuoteValue(),
- ODatabaseMetaDataResultSet::getQuoteValue(),
- new ORowSetValueDecorator(OUString("length")),
- new ORowSetValueDecorator(sal_Int32(ColumnValue::NULLABLE)),
- ODatabaseMetaDataResultSet::get1Value(),
- new ORowSetValueDecorator(sal_Int32(ColumnSearch::FULL)),
- ODatabaseMetaDataResultSet::get1Value(),
- ODatabaseMetaDataResultSet::get0Value(),
- ODatabaseMetaDataResultSet::get0Value(),
- new ORowSetValueDecorator(OUString("C")),
- ODatabaseMetaDataResultSet::get0Value(),
- ODatabaseMetaDataResultSet::get0Value(),
- ODatabaseMetaDataResultSet::getEmptyValue(),
- ODatabaseMetaDataResultSet::getEmptyValue(),
- new ORowSetValueDecorator(sal_Int32(10))
- };
-
- aRows.push_back(aRow);
-
- aRow[1] = new ORowSetValueDecorator(OUString("LONGVARCHAR"));
- aRow[2] = new ORowSetValueDecorator(DataType::LONGVARCHAR);
- aRow[3] = new ORowSetValueDecorator(sal_Int32(2147483647));
- aRow[6] = new ORowSetValueDecorator();
- aRow[13] = new ORowSetValueDecorator(OUString("M"));
- aRows.push_back(aRow);
-
- aRow[1] = new ORowSetValueDecorator(OUString("DATE"));
- aRow[2] = new ORowSetValueDecorator(DataType::DATE);
- aRow[3] = new ORowSetValueDecorator(sal_Int32(10));
- aRow[13] = new ORowSetValueDecorator(OUString("D"));
- aRows.push_back(aRow);
-
- aRow[1] = new ORowSetValueDecorator(OUString("BOOLEAN"));
- aRow[2] = new ORowSetValueDecorator(DataType::BIT);
- aRow[3] = ODatabaseMetaDataResultSet::get1Value();
- aRow[4] = ODatabaseMetaDataResultSet::getEmptyValue();
- aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue();
- aRow[6] = new ORowSetValueDecorator(OUString());
- aRow[9] = ODatabaseMetaDataResultSet::getBasicValue();
- aRow[13] = new ORowSetValueDecorator(OUString("L"));
- aRows.push_back(aRow);
-
- aRow[1] = new ORowSetValueDecorator(OUString("DOUBLE"));
- aRow[2] = new ORowSetValueDecorator(DataType::DOUBLE);
- aRow[3] = new ORowSetValueDecorator(sal_Int32(8));
- aRow[13] = new ORowSetValueDecorator(OUString("B"));
- aRows.push_back(aRow);
-
- aRow[11] = new ORowSetValueDecorator(true);
- aRow[13] = new ORowSetValueDecorator(OUString("Y"));
- aRows.push_back(aRow);
-
- aRow[1] = new ORowSetValueDecorator(OUString("TIMESTAMP"));
- aRow[2] = new ORowSetValueDecorator(DataType::TIMESTAMP);
- aRow[11] = new ORowSetValueDecorator(false);
- aRow[13] = new ORowSetValueDecorator(OUString("T"));
- aRows.push_back(aRow);
-
- aRow[1] = new ORowSetValueDecorator(OUString("INTEGER"));
- aRow[2] = new ORowSetValueDecorator(DataType::INTEGER);
- aRow[3] = new ORowSetValueDecorator(sal_Int32(10));
- aRow[13] = new ORowSetValueDecorator(OUString("I"));
- aRows.push_back(aRow);
-
- aRow[1] = new ORowSetValueDecorator(OUString("DECIMAL"));
- aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL);
- aRow[3] = new ORowSetValueDecorator(sal_Int32(20));
- aRow[6] = new ORowSetValueDecorator(OUString("length,scale"));
- aRow[13] = new ORowSetValueDecorator(OUString("F"));
- aRows.push_back(aRow);
-
- aRow[1] = new ORowSetValueDecorator(OUString("NUMERIC"));
- aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL);
- aRow[3] = new ORowSetValueDecorator(sal_Int32(16));
- aRow[13] = new ORowSetValueDecorator(OUString("N"));
- aRow[15] = new ORowSetValueDecorator(sal_Int32(16));
- aRows.push_back(aRow);
- }
+ ODatabaseMetaDataResultSet::getEmptyValue(),
+ new ORowSetValueDecorator(u"VARCHAR"_ustr),
+ new ORowSetValueDecorator(DataType::VARCHAR),
+ new ORowSetValueDecorator(sal_Int32(254)),
+ ODatabaseMetaDataResultSet::getQuoteValue(),
+ ODatabaseMetaDataResultSet::getQuoteValue(),
+ new ORowSetValueDecorator(u"length"_ustr),
+ new ORowSetValueDecorator(sal_Int32(ColumnValue::NULLABLE)),
+ ODatabaseMetaDataResultSet::get1Value(),
+ new ORowSetValueDecorator(sal_Int32(ColumnSearch::FULL)),
+ ODatabaseMetaDataResultSet::get1Value(),
+ ODatabaseMetaDataResultSet::get0Value(),
+ ODatabaseMetaDataResultSet::get0Value(),
+ new ORowSetValueDecorator(u"C"_ustr),
+ ODatabaseMetaDataResultSet::get0Value(),
+ ODatabaseMetaDataResultSet::get0Value(),
+ ODatabaseMetaDataResultSet::getEmptyValue(),
+ ODatabaseMetaDataResultSet::getEmptyValue(),
+ new ORowSetValueDecorator(sal_Int32(10))
+ };
+
+ aRows.push_back(aRow);
+
+ aRow[1] = new ORowSetValueDecorator(u"LONGVARCHAR"_ustr);
+ aRow[2] = new ORowSetValueDecorator(DataType::LONGVARCHAR);
+ aRow[3] = new ORowSetValueDecorator(sal_Int32(2147483647));
+ aRow[6] = new ORowSetValueDecorator();
+ aRow[13] = new ORowSetValueDecorator(u"M"_ustr);
+ aRows.push_back(aRow);
+
+ aRow[1] = new ORowSetValueDecorator(u"DATE"_ustr);
+ aRow[2] = new ORowSetValueDecorator(DataType::DATE);
+ aRow[3] = new ORowSetValueDecorator(sal_Int32(10));
+ aRow[13] = new ORowSetValueDecorator(u"D"_ustr);
+ aRows.push_back(aRow);
+
+ aRow[1] = new ORowSetValueDecorator(u"BOOLEAN"_ustr);
+ aRow[2] = new ORowSetValueDecorator(DataType::BIT);
+ aRow[3] = ODatabaseMetaDataResultSet::get1Value();
+ aRow[4] = ODatabaseMetaDataResultSet::getEmptyValue();
+ aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue();
+ aRow[6] = new ORowSetValueDecorator(OUString());
+ aRow[9] = ODatabaseMetaDataResultSet::getBasicValue();
+ aRow[13] = new ORowSetValueDecorator(u"L"_ustr);
+ aRows.push_back(aRow);
+
+ aRow[1] = new ORowSetValueDecorator(u"DOUBLE"_ustr);
+ aRow[2] = new ORowSetValueDecorator(DataType::DOUBLE);
+ aRow[3] = new ORowSetValueDecorator(sal_Int32(8));
+ aRow[13] = new ORowSetValueDecorator(u"B"_ustr);
+ aRows.push_back(aRow);
+
+ aRow[11] = new ORowSetValueDecorator(ORowSetValue(true));
+ aRow[13] = new ORowSetValueDecorator(u"Y"_ustr);
+ aRows.push_back(aRow);
+
+ aRow[1] = new ORowSetValueDecorator(u"TIMESTAMP"_ustr);
+ aRow[2] = new ORowSetValueDecorator(DataType::TIMESTAMP);
+ aRow[11] = new ORowSetValueDecorator(ORowSetValue(false));
+ aRow[13] = new ORowSetValueDecorator(u"T"_ustr);
+ aRows.push_back(aRow);
+
+ aRow[1] = new ORowSetValueDecorator(u"INTEGER"_ustr);
+ aRow[2] = new ORowSetValueDecorator(DataType::INTEGER);
+ aRow[3] = new ORowSetValueDecorator(sal_Int32(10));
+ aRow[13] = new ORowSetValueDecorator(u"I"_ustr);
+ aRows.push_back(aRow);
+
+ aRow[1] = new ORowSetValueDecorator(u"DECIMAL"_ustr);
+ aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL);
+ aRow[3] = new ORowSetValueDecorator(sal_Int32(20));
+ aRow[6] = new ORowSetValueDecorator(u"length,scale"_ustr);
+ aRow[13] = new ORowSetValueDecorator(u"F"_ustr);
+ aRows.push_back(aRow);
+
+ aRow[1] = new ORowSetValueDecorator(u"NUMERIC"_ustr);
+ aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL);
+ aRow[3] = new ORowSetValueDecorator(sal_Int32(16));
+ aRow[13] = new ORowSetValueDecorator(u"N"_ustr);
+ aRow[15] = new ORowSetValueDecorator(sal_Int32(16));
+ aRows.push_back(aRow);
pResult->setRows(std::move(aRows));
return pResult;
@@ -171,35 +166,28 @@ Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getColumns(
try
{
aRow[10] = new ORowSetValueDecorator(sal_Int32(10));
- Sequence< OUString> aTabNames(xNames->getElementNames());
- const OUString* pTabBegin = aTabNames.getConstArray();
- const OUString* pTabEnd = pTabBegin + aTabNames.getLength();
- for(;pTabBegin != pTabEnd;++pTabBegin)
+ for (auto& tabName : xNames->getElementNames())
{
- if(match(tableNamePattern,*pTabBegin,'\0'))
+ if (match(tableNamePattern, tabName, '\0'))
{
- Reference< XColumnsSupplier> xTable(
- xNames->getByName(*pTabBegin), css::uno::UNO_QUERY);
+ Reference<XColumnsSupplier> xTable(xNames->getByName(tabName), css::uno::UNO_QUERY);
OSL_ENSURE(xTable.is(),"Table not found! Normally an exception had to be thrown here!");
- aRow[3] = new ORowSetValueDecorator(*pTabBegin);
+ aRow[3] = new ORowSetValueDecorator(tabName);
Reference< XNameAccess> xColumns = xTable->getColumns();
if(!xColumns.is())
throw SQLException();
- Sequence< OUString> aColNames(xColumns->getElementNames());
-
- const OUString* pBegin = aColNames.getConstArray();
- const OUString* pEnd = pBegin + aColNames.getLength();
Reference< XPropertySet> xColumn;
- for(sal_Int32 i=1;pBegin != pEnd;++pBegin,++i)
+ sal_Int32 i = 0;
+ for (auto& colName : xColumns->getElementNames())
{
- if(match(columnNamePattern,*pBegin,'\0'))
+ ++i;
+ if (match(columnNamePattern, colName, '\0'))
{
- aRow[4] = new ORowSetValueDecorator(*pBegin);
+ aRow[4] = new ORowSetValueDecorator(colName);
- xColumn.set(
- xColumns->getByName(*pBegin), css::uno::UNO_QUERY);
+ xColumn.set(xColumns->getByName(colName), css::uno::UNO_QUERY);
OSL_ENSURE(xColumn.is(),"Columns contains a column who isn't a fastpropertyset!");
aRow[5] = new ORowSetValueDecorator(getINT32(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE))));
aRow[6] = new ORowSetValueDecorator(getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME))));
@@ -223,10 +211,10 @@ Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getColumns(
switch(aRow[11]->getValue().getInt32())
{
case ColumnValue::NO_NULLS:
- aRow[18] = new ORowSetValueDecorator(OUString("NO"));
+ aRow[18] = new ORowSetValueDecorator(u"NO"_ustr);
break;
case ColumnValue::NULLABLE:
- aRow[18] = new ORowSetValueDecorator(OUString("YES"));
+ aRow[18] = new ORowSetValueDecorator(u"YES"_ustr);
break;
default:
aRow[18] = new ORowSetValueDecorator(OUString());
@@ -268,7 +256,7 @@ Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getIndexInfo(
ODatabaseMetaDataResultSet::ORow aRow(14);
aRow[5] = new ORowSetValueDecorator(OUString());
- aRow[10] = new ORowSetValueDecorator(OUString("A"));
+ aRow[10] = new ORowSetValueDecorator(u"A"_ustr);
Reference< XIndexesSupplier> xTable(
xNames->getByName(table), css::uno::UNO_QUERY);
@@ -279,22 +267,18 @@ Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getIndexInfo(
if(!xIndexes.is())
throw SQLException();
- Sequence< OUString> aIdxNames(xIndexes->getElementNames());
-
- const OUString* pBegin = aIdxNames.getConstArray();
- const OUString* pEnd = pBegin + aIdxNames.getLength();
Reference< XPropertySet> xIndex;
- for(;pBegin != pEnd;++pBegin)
+ for (auto& idxName : xIndexes->getElementNames())
{
- xIndex.set(xIndexes->getByName(*pBegin), css::uno::UNO_QUERY);
+ xIndex.set(xIndexes->getByName(idxName), css::uno::UNO_QUERY);
OSL_ENSURE(xIndex.is(),"Indexes contains a column who isn't a fastpropertyset!");
if(unique && !getBOOL(xIndex->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISUNIQUE))))
continue;
- aRow[4] = new ORowSetValueDecorator(getBOOL(xIndex->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISUNIQUE))));
- aRow[6] = new ORowSetValueDecorator(*pBegin);
+ aRow[4] = new ORowSetValueDecorator(ORowSetValue(getBOOL(xIndex->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISUNIQUE)))));
+ aRow[6] = new ORowSetValueDecorator(idxName);
- auto pIndex = comphelper::getFromUnoTunnel<ODbaseIndex>(xIndex);
+ auto pIndex = dynamic_cast<ODbaseIndex*>(xIndex.get());
if(pIndex)
{
aRow[11] = new ORowSetValueDecorator(static_cast<sal_Int32>(pIndex->getHeader().db_maxkeys));
@@ -303,14 +287,12 @@ Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getIndexInfo(
Reference<XColumnsSupplier> xColumnsSup(xIndex,UNO_QUERY);
Reference< XNameAccess> xColumns = xColumnsSup->getColumns();
- Sequence< OUString> aColNames(xColumns->getElementNames());
- const OUString* pColBegin = aColNames.getConstArray();
- const OUString* pColEnd = pColBegin + aColNames.getLength();
- for(sal_Int32 j=1;pColBegin != pColEnd;++pColBegin,++j)
+ sal_Int32 j = 0;
+ for (auto& colName : xColumns->getElementNames())
{
- aRow[8] = new ORowSetValueDecorator(j);
- aRow[9] = new ORowSetValueDecorator(*pColBegin);
+ aRow[8] = new ORowSetValueDecorator(++j);
+ aRow[9] = new ORowSetValueDecorator(colName);
aRows.push_back(aRow);
}
}
@@ -367,7 +349,7 @@ sal_Bool SAL_CALL ODbaseDatabaseMetaData::isReadOnly( )
bool bReadOnly = false;
::ucbhelper::Content aFile(m_pConnection->getContent(),Reference< XCommandEnvironment >(), comphelper::getProcessComponentContext());
- aFile.getPropertyValue("IsReadOnly") >>= bReadOnly;
+ aFile.getPropertyValue(u"IsReadOnly"_ustr) >>= bReadOnly;
return bReadOnly;
}
diff --git a/connectivity/source/drivers/dbase/DDriver.cxx b/connectivity/source/drivers/dbase/DDriver.cxx
index 8eae0013c940..36d44951f0f2 100644
--- a/connectivity/source/drivers/dbase/DDriver.cxx
+++ b/connectivity/source/drivers/dbase/DDriver.cxx
@@ -36,7 +36,7 @@ using namespace ::com::sun::star::lang;
OUString SAL_CALL ODriver::getImplementationName( )
{
- return "com.sun.star.comp.sdbc.dbase.ODriver";
+ return u"com.sun.star.comp.sdbc.dbase.ODriver"_ustr;
}
@@ -51,7 +51,7 @@ connectivity_dbase_ODriver(
}
if (ret)
ret->acquire();
- return static_cast<cppu::OWeakObject*>(ret.get());
+ return getXWeak(ret.get());
}
@@ -66,7 +66,7 @@ Reference< XConnection > SAL_CALL ODriver::connect( const OUString& url, const S
rtl::Reference<ODbaseConnection> pCon = new ODbaseConnection(this);
pCon->construct(url,info);
- m_xConnections.push_back(WeakReferenceHelper(*pCon));
+ m_xConnections.push_back(pCon.get());
return pCon;
}
@@ -80,29 +80,29 @@ Sequence< DriverPropertyInfo > SAL_CALL ODriver::getPropertyInfo( const OUString
{
if ( acceptsURL(url) )
{
- Sequence< OUString > aBoolean { "0", "1" };
+ Sequence< OUString > aBoolean { u"0"_ustr, u"1"_ustr };
return
{
{
- "CharSet"
- ,"CharSet of the database."
+ u"CharSet"_ustr
+ ,u"CharSet of the database."_ustr
,false
,OUString()
,Sequence< OUString >()
},
{
- "ShowDeleted"
- ,"Display inactive records."
+ u"ShowDeleted"_ustr
+ ,u"Display inactive records."_ustr
,false
- ,"0"
+ ,u"0"_ustr
,aBoolean
},
{
- "EnableSQL92Check"
- ,"Use SQL92 naming constraints."
+ u"EnableSQL92Check"_ustr
+ ,u"Use SQL92 naming constraints."_ustr
,false
- ,"0"
+ ,u"0"_ustr
,aBoolean
}
};
@@ -111,7 +111,6 @@ Sequence< DriverPropertyInfo > SAL_CALL ODriver::getPropertyInfo( const OUString
SharedResources aResources;
const OUString sMessage = aResources.getResourceString(STR_URI_SYNTAX_ERROR);
::dbtools::throwGenericSQLException(sMessage ,*this);
- return Sequence< DriverPropertyInfo >();
}
diff --git a/connectivity/source/drivers/dbase/DIndex.cxx b/connectivity/source/drivers/dbase/DIndex.cxx
index 245c49b58e2f..1c32440e6b89 100644
--- a/connectivity/source/drivers/dbase/DIndex.cxx
+++ b/connectivity/source/drivers/dbase/DIndex.cxx
@@ -41,15 +41,12 @@ using namespace connectivity;
using namespace utl;
using namespace ::cppu;
using namespace connectivity::file;
-using namespace connectivity::sdbcx;
using namespace connectivity::dbase;
using namespace com::sun::star::sdbc;
-using namespace com::sun::star::sdbcx;
using namespace com::sun::star::uno;
using namespace com::sun::star::beans;
-using namespace com::sun::star::lang;
-IMPLEMENT_SERVICE_INFO(ODbaseIndex,"com.sun.star.sdbcx.driver.dbase.Index","com.sun.star.sdbcx.Index");
+IMPLEMENT_SERVICE_INFO(ODbaseIndex,u"com.sun.star.sdbcx.driver.dbase.Index"_ustr,u"com.sun.star.sdbcx.Index"_ustr);
ODbaseIndex::ODbaseIndex(ODbaseTable* _pTable)
: OIndex(true/*_pTable->getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers()*/)
@@ -99,20 +96,6 @@ void ODbaseIndex::refreshColumns()
m_pColumns.reset(new ODbaseIndexColumns(this,m_aMutex,aVector));
}
-Sequence< sal_Int8 > ODbaseIndex::getUnoTunnelId()
-{
- static const comphelper::UnoIdInit implId;
- return implId.getSeq();
-}
-
-// XUnoTunnel
-
-sal_Int64 ODbaseIndex::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return comphelper::getSomethingImpl(rId, this,
- comphelper::FallbackToGetSomethingOf<ODbaseIndex_BASE>{});
-}
-
ONDXPagePtr const & ODbaseIndex::getRoot()
{
openIndexFile();
@@ -401,8 +384,7 @@ void ODbaseIndex::createINFEntry()
bool bCase = isCaseSensitive();
while (aNewEntry.isEmpty())
{
- aNewEntry = OString("NDX");
- aNewEntry += OString::number(++nSuffix);
+ aNewEntry = "NDX" + OString::number(++nSuffix);
for (sal_uInt16 i = 0; i < aInfFile.GetKeyCount(); i++)
{
aKeyName = aInfFile.GetKeyName(i);
@@ -565,15 +547,13 @@ void ODbaseIndex::CreateImpl()
if(xSet->last())
{
- Reference< XUnoTunnel> xTunnel(xSet, UNO_QUERY_THROW);
- ODbaseResultSet* pDbaseRes = comphelper::getFromUnoTunnel<ODbaseResultSet>(xTunnel);
+ ODbaseResultSet* pDbaseRes = dynamic_cast<ODbaseResultSet*>(xSet.getTyped().get());
assert(pDbaseRes); //"No dbase resultset found? What's going on here!
nRowsLeft = xSet->getRow();
xSet->beforeFirst();
- ORowSetValue atmpValue;
- ONDXKey aKey(atmpValue, nType, 0);
- ONDXKey aInsertKey(atmpValue, nType, 0);
+ ONDXKey aKey(ORowSetValue(), nType, 0);
+ ONDXKey aInsertKey(ORowSetValue(), nType, 0);
// Create the index structure
while (xSet->next())
{
diff --git a/connectivity/source/drivers/dbase/DIndexColumns.cxx b/connectivity/source/drivers/dbase/DIndexColumns.cxx
index 886c7273db31..dbf8f59a43c9 100644
--- a/connectivity/source/drivers/dbase/DIndexColumns.cxx
+++ b/connectivity/source/drivers/dbase/DIndexColumns.cxx
@@ -28,12 +28,10 @@ using namespace connectivity::dbase;
using namespace connectivity;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-sdbcx::ObjectType ODbaseIndexColumns::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > ODbaseIndexColumns::createObject(const OUString& _rName)
{
const ODbaseTable* pTable = m_pIndex->getTable();
@@ -45,9 +43,9 @@ sdbcx::ObjectType ODbaseIndexColumns::createObject(const OUString& _rName)
xCol = *aIter;
if(!xCol.is())
- return sdbcx::ObjectType();
+ return css::uno::Reference< css::beans::XPropertySet >();
- sdbcx::ObjectType xRet = new sdbcx::OIndexColumn(true,_rName
+ css::uno::Reference< css::beans::XPropertySet > xRet = new sdbcx::OIndexColumn(true,_rName
,getString(xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME)))
,OUString()
,getINT32(xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISNULLABLE)))
@@ -73,7 +71,7 @@ Reference< XPropertySet > ODbaseIndexColumns::createDescriptor()
return new sdbcx::OIndexColumn(m_pIndex->getTable()->getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers());
}
-sdbcx::ObjectType ODbaseIndexColumns::appendObject( const OUString& /*_rForName*/, const Reference< XPropertySet >& descriptor )
+css::uno::Reference< css::beans::XPropertySet > ODbaseIndexColumns::appendObject( const OUString& /*_rForName*/, const Reference< XPropertySet >& descriptor )
{
return cloneDescriptor( descriptor );
}
diff --git a/connectivity/source/drivers/dbase/DIndexIter.cxx b/connectivity/source/drivers/dbase/DIndexIter.cxx
index 37e28a073f4c..35f5862b1bc2 100644
--- a/connectivity/source/drivers/dbase/DIndexIter.cxx
+++ b/connectivity/source/drivers/dbase/DIndexIter.cxx
@@ -109,7 +109,7 @@ ONDXKey* OIndexIterator::GetFirstKey(ONDXPage* pPage, const OOperand& rKey)
pFoundKey = nullptr;
m_aCurLeaf = pPage;
- m_nCurNode = pFoundKey ? i : i - 1;
+ m_nCurNode = pFoundKey ? i : sal_uInt16(i - 1);
}
return pFoundKey;
}
@@ -262,7 +262,8 @@ ONDXKey* OIndexIterator::GetNextKey()
sal_uInt16 nPos = pParentPage->Search(pPage);
if (nPos != pParentPage->Count() - 1)
{ // page found
- pPage = (*pParentPage)[nPos + 1].GetChild(m_xIndex.get(), pParentPage);
+ pPage = (*pParentPage)[o3tl::sanitizing_inc(nPos)].GetChild(m_xIndex.get(),
+ pParentPage);
break;
}
}
diff --git a/connectivity/source/drivers/dbase/DIndexes.cxx b/connectivity/source/drivers/dbase/DIndexes.cxx
index 7f47085c6509..1ade0679216c 100644
--- a/connectivity/source/drivers/dbase/DIndexes.cxx
+++ b/connectivity/source/drivers/dbase/DIndexes.cxx
@@ -24,20 +24,14 @@
#include <unotools/ucbhelper.hxx>
#include <strings.hrc>
-using namespace ::comphelper;
-
using namespace utl;
using namespace ::connectivity;
using namespace ::dbtools;
using namespace ::connectivity::dbase;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbcx;
-using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
-sdbcx::ObjectType ODbaseIndexes::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > ODbaseIndexes::createObject(const OUString& _rName)
{
OUString sFile = m_pTable->getConnection()->getURL() +
OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DELIMITER) +
@@ -51,23 +45,8 @@ sdbcx::ObjectType ODbaseIndexes::createObject(const OUString& _rName)
::dbtools::throwGenericSQLException( sError, *m_pTable );
}
- sdbcx::ObjectType xRet;
std::unique_ptr<SvStream> pFileStream = ::connectivity::file::OFileTable::createStream_simpleError(sFile, StreamMode::READ | StreamMode::NOCREATE | StreamMode::SHARE_DENYWRITE);
- if(pFileStream)
- {
- pFileStream->SetEndian(SvStreamEndian::LITTLE);
- pFileStream->SetBufferSize(DINDEX_PAGE_SIZE);
- ODbaseIndex::NDXHeader aHeader;
-
- pFileStream->Seek(0);
- ReadHeader(*pFileStream, aHeader);
- pFileStream.reset();
-
- rtl::Reference<ODbaseIndex> pIndex = new ODbaseIndex(m_pTable,aHeader,_rName);
- xRet = pIndex;
- pIndex->openIndexFile();
- }
- else
+ if(!pFileStream)
{
const OUString sError( m_pTable->getConnection()->getResources().getResourceStringWithSubstitution(
STR_COULD_NOT_LOAD_FILE,
@@ -75,7 +54,18 @@ sdbcx::ObjectType ODbaseIndexes::createObject(const OUString& _rName)
) );
::dbtools::throwGenericSQLException( sError, *m_pTable );
}
- return xRet;
+
+ pFileStream->SetEndian(SvStreamEndian::LITTLE);
+ pFileStream->SetBufferSize(DINDEX_PAGE_SIZE);
+ ODbaseIndex::NDXHeader aHeader;
+
+ pFileStream->Seek(0);
+ ReadHeader(*pFileStream, aHeader);
+ pFileStream.reset();
+
+ rtl::Reference<ODbaseIndex> pIndex = new ODbaseIndex(m_pTable,aHeader,_rName);
+ pIndex->openIndexFile();
+ return pIndex;
}
void ODbaseIndexes::impl_refresh( )
@@ -90,16 +80,11 @@ Reference< XPropertySet > ODbaseIndexes::createDescriptor()
}
// XAppend
-sdbcx::ObjectType ODbaseIndexes::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
+css::uno::Reference< css::beans::XPropertySet > ODbaseIndexes::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
{
- Reference<XUnoTunnel> xTunnel(descriptor,UNO_QUERY);
- if(xTunnel.is())
- {
- ODbaseIndex* pIndex = comphelper::getFromUnoTunnel<ODbaseIndex>(xTunnel);
- if(!pIndex)
- throw SQLException();
+ ODbaseIndex* pIndex = dynamic_cast<ODbaseIndex*>(descriptor.get());
+ if(pIndex)
pIndex->CreateImpl();
- }
return createObject( _rForName );
}
@@ -107,7 +92,7 @@ sdbcx::ObjectType ODbaseIndexes::appendObject( const OUString& _rForName, const
// XDrop
void ODbaseIndexes::dropObject(sal_Int32 _nPos, const OUString& /*_sElementName*/)
{
- auto pIndex = comphelper::getFromUnoTunnel<ODbaseIndex>(getObject(_nPos));
+ rtl::Reference<ODbaseIndex> pIndex = dynamic_cast<ODbaseIndex*>(getObject(_nPos).get());
if ( pIndex )
pIndex->DropImpl();
}
diff --git a/connectivity/source/drivers/dbase/DPreparedStatement.cxx b/connectivity/source/drivers/dbase/DPreparedStatement.cxx
index 9a2b54409bea..3dc39e68857a 100644
--- a/connectivity/source/drivers/dbase/DPreparedStatement.cxx
+++ b/connectivity/source/drivers/dbase/DPreparedStatement.cxx
@@ -22,14 +22,14 @@
using namespace connectivity::dbase;
using namespace connectivity::file;
-using namespace com::sun::star::uno;
rtl::Reference<OResultSet> ODbasePreparedStatement::createResultSet()
{
return new ODbaseResultSet(this, m_aSQLIterator);
}
-IMPLEMENT_SERVICE_INFO(ODbasePreparedStatement, "com.sun.star.sdbc.driver.dbase.PreparedStatement",
- "com.sun.star.sdbc.PreparedStatement");
+IMPLEMENT_SERVICE_INFO(ODbasePreparedStatement,
+ u"com.sun.star.sdbc.driver.dbase.PreparedStatement"_ustr,
+ u"com.sun.star.sdbc.PreparedStatement"_ustr);
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/dbase/DResultSet.cxx b/connectivity/source/drivers/dbase/DResultSet.cxx
index 3533477bb0cf..99357a01fcc8 100644
--- a/connectivity/source/drivers/dbase/DResultSet.cxx
+++ b/connectivity/source/drivers/dbase/DResultSet.cxx
@@ -49,12 +49,12 @@ ODbaseResultSet::ODbaseResultSet( OStatement_Base* pStmt,connectivity::OSQLParse
OUString SAL_CALL ODbaseResultSet::getImplementationName( )
{
- return "com.sun.star.sdbcx.dbase.ResultSet";
+ return u"com.sun.star.sdbcx.dbase.ResultSet"_ustr;
}
Sequence< OUString > SAL_CALL ODbaseResultSet::getSupportedServiceNames( )
{
- return { "com.sun.star.sdbc.ResultSet", "com.sun.star.sdbcx.ResultSet" };
+ return { u"com.sun.star.sdbc.ResultSet"_ustr, u"com.sun.star.sdbcx.ResultSet"_ustr };
}
sal_Bool SAL_CALL ODbaseResultSet::supportsService( const OUString& _rServiceName )
@@ -81,7 +81,7 @@ Any SAL_CALL ODbaseResultSet::getBookmark( )
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
OSL_ENSURE((m_bShowDeleted || !m_aRow->isDeleted()),"getBookmark called for deleted row");
- return makeAny((*m_aRow)[0]->getValue().getInt32());
+ return Any((*m_aRow)[0]->getValue().getInt32());
}
sal_Bool SAL_CALL ODbaseResultSet::moveToBookmark( const Any& bookmark )
@@ -149,13 +149,12 @@ Sequence< sal_Int32 > SAL_CALL ODbaseResultSet::deleteRows( const Sequence< An
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- ::dbtools::throwFeatureNotImplementedSQLException( "XDeleteRows::deleteRows", *this );
- return Sequence< sal_Int32 >();
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XDeleteRows::deleteRows"_ustr, *this );
}
bool ODbaseResultSet::fillIndexValues(const Reference< XColumnsSupplier> &_xIndex)
{
- auto pIndex = comphelper::getFromUnoTunnel<dbase::ODbaseIndex>(_xIndex);
+ auto pIndex = dynamic_cast<dbase::ODbaseIndex*>(_xIndex.get());
if(pIndex)
{
std::unique_ptr<dbase::OIndexIterator> pIter = pIndex->createIterator();
diff --git a/connectivity/source/drivers/dbase/DStatement.cxx b/connectivity/source/drivers/dbase/DStatement.cxx
index d2537232778e..c6245e852d31 100644
--- a/connectivity/source/drivers/dbase/DStatement.cxx
+++ b/connectivity/source/drivers/dbase/DStatement.cxx
@@ -22,7 +22,6 @@
using namespace connectivity::dbase;
using namespace connectivity::file;
-using namespace com::sun::star::uno;
rtl::Reference<OResultSet> ODbaseStatement::createResultSet()
@@ -30,6 +29,6 @@ rtl::Reference<OResultSet> ODbaseStatement::createResultSet()
return new ODbaseResultSet(this,m_aSQLIterator);
}
-IMPLEMENT_SERVICE_INFO(ODbaseStatement,"com.sun.star.sdbc.driver.dbase.Statement","com.sun.star.sdbc.Statement");
+IMPLEMENT_SERVICE_INFO(ODbaseStatement,u"com.sun.star.sdbc.driver.dbase.Statement"_ustr,u"com.sun.star.sdbc.Statement"_ustr);
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/dbase/DTable.cxx b/connectivity/source/drivers/dbase/DTable.cxx
index c5da1d6b2477..c7b6802209fd 100644
--- a/connectivity/source/drivers/dbase/DTable.cxx
+++ b/connectivity/source/drivers/dbase/DTable.cxx
@@ -28,7 +28,7 @@
#include <dbase/DConnection.hxx>
#include <dbase/DColumns.hxx>
#include <tools/config.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <dbase/DIndex.hxx>
#include <dbase/DIndexes.hxx>
#include <comphelper/processfactory.hxx>
@@ -39,8 +39,9 @@
#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
#include <comphelper/property.hxx>
#include <comphelper/servicehelper.hxx>
+#include <o3tl/string_view.hxx>
#include <comphelper/string.hxx>
-#include <unotools/configmgr.hxx>
+#include <comphelper/configuration.hxx>
#include <unotools/tempfile.hxx>
#include <unotools/ucbhelper.hxx>
#include <comphelper/types.hxx>
@@ -54,6 +55,7 @@
#include <rtl/strbuf.hxx>
#include <sal/log.hxx>
#include <tools/date.hxx>
+#include <i18nutil/calendar.hxx>
#include <algorithm>
#include <cassert>
@@ -132,13 +134,13 @@ void lcl_CalcJulDate(sal_Int32& _nJulianDate,sal_Int32& _nJulianTime, const css:
if ( aDateTime.Year <= 0 )
{
_nJulianDate = static_cast<sal_Int32>((365.25 * iy0) - 0.75)
- + static_cast<sal_Int32>(30.6001 * (im0 + 1) )
+ + static_cast<sal_Int32>(i18nutil::monthDaysWithoutJanFeb * (im0 + 1) )
+ aDateTime.Day + 1720994;
} // if ( rDateTime.Year <= 0 )
else
{
_nJulianDate = static_cast<sal_Int32>(365.25 * iy0)
- + static_cast<sal_Int32>(30.6001 * (im0 + 1))
+ + static_cast<sal_Int32>(i18nutil::monthDaysWithoutJanFeb * (im0 + 1))
+ aDateTime.Day + 1720994;
}
double JD = _nJulianDate + 0.5;
@@ -164,8 +166,8 @@ void lcl_CalDate(sal_Int32 _nJulianDate,sal_Int32 _nJulianTime,css::util::DateTi
sal_Int64 kb = ka + 1524;
sal_Int64 kc = static_cast<sal_Int64>((static_cast<double>(kb) - 122.1) / 365.25);
sal_Int64 kd = static_cast<sal_Int64>(static_cast<double>(kc) * 365.25);
- sal_Int64 ke = static_cast<sal_Int64>(static_cast<double>(kb - kd) / 30.6001);
- _rDateTime.Day = static_cast<sal_uInt16>(kb - kd - static_cast<sal_Int64>( static_cast<double>(ke) * 30.6001 ));
+ sal_Int64 ke = static_cast<sal_Int64>(static_cast<double>(kb - kd) / i18nutil::monthDaysWithoutJanFeb);
+ _rDateTime.Day = static_cast<sal_uInt16>(kb - kd - static_cast<sal_Int64>( static_cast<double>(ke) * i18nutil::monthDaysWithoutJanFeb ));
if ( ke > 13 )
_rDateTime.Month = static_cast<sal_uInt16>(ke - 13);
else
@@ -737,14 +739,12 @@ Sequence< Type > SAL_CALL ODbaseTable::getTypes( )
std::vector<Type> aOwnTypes;
aOwnTypes.reserve(aTypes.getLength());
- const Type* pBegin = aTypes.getConstArray();
- const Type* pEnd = pBegin + aTypes.getLength();
- for(;pBegin != pEnd;++pBegin)
+ for (auto& type : aTypes)
{
- if(*pBegin != cppu::UnoType<XKeysSupplier>::get() &&
- *pBegin != cppu::UnoType<XDataDescriptorFactory>::get())
+ if(type != cppu::UnoType<XKeysSupplier>::get() &&
+ type != cppu::UnoType<XDataDescriptorFactory>::get())
{
- aOwnTypes.push_back(*pBegin);
+ aOwnTypes.push_back(type);
}
}
aOwnTypes.push_back(cppu::UnoType<css::lang::XUnoTunnel>::get());
@@ -759,31 +759,17 @@ Any SAL_CALL ODbaseTable::queryInterface( const Type & rType )
return Any();
Any aRet = OTable_TYPEDEF::queryInterface(rType);
- return aRet.hasValue() ? aRet : ::cppu::queryInterface(rType,static_cast< css::lang::XUnoTunnel*> (this));
+ return aRet;
}
-Sequence< sal_Int8 > ODbaseTable::getUnoTunnelId()
-{
- static const comphelper::UnoIdInit implId;
- return implId.getSeq();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 ODbaseTable::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return comphelper::getSomethingImpl(rId, this,
- comphelper::FallbackToGetSomethingOf<ODbaseTable_BASE>{});
-}
-
bool ODbaseTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool bRetrieveData)
{
if (!m_pBuffer)
return false;
// Read the data
- bool bIsCurRecordDeleted = static_cast<char>(m_pBuffer[0]) == '*';
+ bool bIsCurRecordDeleted = m_pBuffer[0] == '*';
// only read the bookmark
@@ -855,8 +841,8 @@ bool ODbaseTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool
}
else
{
- // Commit the string. Use intern() to ref-count it.
- *(*_rRow)[i] = OUString::intern(pData, static_cast<sal_Int32>(nLastPos+1), m_eEncoding);
+ // Commit the string
+ *(*_rRow)[i] = OUString(pData, static_cast<sal_Int32>(nLastPos+1), m_eEncoding);
}
} // if (nType == DataType::CHAR || nType == DataType::VARCHAR)
else if ( DataType::TIMESTAMP == nType )
@@ -940,20 +926,20 @@ bool ODbaseTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool
continue;
}
- OUString aStr = OUString::intern(pData+nPos1, nPos2-nPos1+1, m_eEncoding);
+ OUString aStr(pData+nPos1, nPos2-nPos1+1, m_eEncoding);
switch (nType)
{
case DataType::DATE:
{
- if (aStr.getLength() != nLen)
+ if (nLen < 8 || aStr.getLength() != nLen)
{
(*_rRow)[i]->setNull();
break;
}
- const sal_uInt16 nYear = static_cast<sal_uInt16>(aStr.copy( 0, 4 ).toInt32());
- const sal_uInt16 nMonth = static_cast<sal_uInt16>(aStr.copy( 4, 2 ).toInt32());
- const sal_uInt16 nDay = static_cast<sal_uInt16>(aStr.copy( 6, 2 ).toInt32());
+ const sal_uInt16 nYear = static_cast<sal_uInt16>(o3tl::toInt32(aStr.subView( 0, 4 )));
+ const sal_uInt16 nMonth = static_cast<sal_uInt16>(o3tl::toInt32(aStr.subView( 4, 2 )));
+ const sal_uInt16 nDay = static_cast<sal_uInt16>(o3tl::toInt32(aStr.subView( 6, 2 )));
const css::util::Date aDate(nDay,nMonth,nYear);
*(*_rRow)[i] = aDate;
@@ -1004,9 +990,6 @@ bool ODbaseTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool
void ODbaseTable::FileClose()
{
::osl::MutexGuard aGuard(m_aMutex);
- // if not everything has been written yet
- if (m_pMemoStream && m_pMemoStream->IsWritable())
- m_pMemoStream->Flush();
m_pMemoStream.reset();
@@ -1017,7 +1000,7 @@ bool ODbaseTable::CreateImpl()
{
OSL_ENSURE(!m_pFileStream, "SequenceError");
- if ( m_pConnection->isCheckEnabled() && ::dbtools::convertName2SQLName(m_Name,OUString()) != m_Name )
+ if ( m_pConnection->isCheckEnabled() && ::dbtools::convertName2SQLName(m_Name, u"") != m_Name )
{
const OUString sError( getConnection()->getResources().getResourceStringWithSubstitution(
STR_SQL_NAME_ERROR,
@@ -1069,7 +1052,7 @@ bool ODbaseTable::CreateImpl()
try
{
Content aContent(aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE),Reference<XCommandEnvironment>(), comphelper::getProcessComponentContext());
- aContent.executeCommand( "delete", css::uno::Any( true ) );
+ aContent.executeCommand( u"delete"_ustr, css::uno::Any( true ) );
}
catch(const Exception&) // an exception is thrown when no file exists
{
@@ -1097,7 +1080,7 @@ bool ODbaseTable::CreateImpl()
try
{
Content aMemoContent(aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE),Reference<XCommandEnvironment>(), comphelper::getProcessComponentContext());
- aMemoContent.executeCommand( "delete", css::uno::Any( true ) );
+ aMemoContent.executeCommand( u"delete"_ustr, css::uno::Any( true ) );
}
catch(const Exception&)
{
@@ -1115,7 +1098,7 @@ bool ODbaseTable::CreateImpl()
try
{
Content aMemoContent(aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE),Reference<XCommandEnvironment>(), comphelper::getProcessComponentContext());
- aMemoContent.executeCommand( "delete", css::uno::Any( true ) );
+ aMemoContent.executeCommand( u"delete"_ustr, css::uno::Any( true ) );
}
catch(const ContentCreationException&)
{
@@ -1398,7 +1381,7 @@ bool ODbaseTable::CreateFile(const INetURLObject& aFile, bool& bCreateMemo)
bool ODbaseTable::HasMemoFields() const
{
- return m_aHeader.type > dBaseIV && !utl::ConfigManager::IsFuzzing();
+ return m_aHeader.type > dBaseIV && !comphelper::IsFuzzing();
}
// creates in principle dBase III file format
@@ -1415,12 +1398,11 @@ bool ODbaseTable::CreateMemoFile(const INetURLObject& aFile)
m_pMemoStream->Seek(0);
(*m_pMemoStream).WriteUInt32( 1 ); // pointer to the first free block
- m_pMemoStream->Flush();
m_pMemoStream.reset();
return true;
}
-bool ODbaseTable::Drop_Static(const OUString& _sUrl, bool _bHasMemoFields, OCollection* _pIndexes )
+bool ODbaseTable::Drop_Static(std::u16string_view _sUrl, bool _bHasMemoFields, OCollection* _pIndexes )
{
INetURLObject aURL;
aURL.SetURL(_sUrl);
@@ -1457,7 +1439,7 @@ bool ODbaseTable::Drop_Static(const OUString& _sUrl, bool _bHasMemoFields, OColl
try
{
::ucbhelper::Content aDeleteContent( aURL.GetMainURL( INetURLObject::DecodeMechanism::NONE ), Reference< XCommandEnvironment >(), comphelper::getProcessComponentContext() );
- aDeleteContent.executeCommand( "delete", makeAny( true ) );
+ aDeleteContent.executeCommand( u"delete"_ustr, Any( true ) );
}
catch(const Exception&)
{
@@ -1599,9 +1581,7 @@ bool ODbaseTable::DeleteRow(const OSQLColumns& _rCols)
{
xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME)) >>= aColName;
- Reference<XUnoTunnel> xTunnel(xIndex,UNO_QUERY);
- OSL_ENSURE(xTunnel.is(),"No TunnelImplementation!");
- ODbaseIndex* pIndex = comphelper::getFromUnoTunnel<ODbaseIndex>(xTunnel);
+ ODbaseIndex* pIndex = dynamic_cast<ODbaseIndex*>(xIndex.get());
assert(pIndex && "ODbaseTable::DeleteRow: No Index returned!");
OSQLColumns::const_iterator aIter = std::find_if(_rCols.begin(), _rCols.end(),
@@ -1650,7 +1630,7 @@ Reference<XPropertySet> ODbaseTable::isUniqueByColumnName(sal_Int32 _nColumnPos)
return Reference<XPropertySet>();
}
-static double toDouble(const OString& rString)
+static double toDouble(std::string_view rString)
{
return ::rtl::math::stringToDouble( rString, '.', ',' );
}
@@ -1705,9 +1685,7 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo
continue;
else
{
- Reference<XUnoTunnel> xTunnel(xIndex,UNO_QUERY);
- OSL_ENSURE(xTunnel.is(),"No TunnelImplementation!");
- ODbaseIndex* pIndex = comphelper::getFromUnoTunnel<ODbaseIndex>(xTunnel);
+ ODbaseIndex* pIndex = dynamic_cast<ODbaseIndex*>(xIndex.get());
assert(pIndex && "ODbaseTable::UpdateBuffer: No Index returned!");
if (pIndex->Find(0,*rRow[nPos]))
@@ -1813,9 +1791,7 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo
}
if (aIndexedCols[i].is())
{
- Reference<XUnoTunnel> xTunnel(aIndexedCols[i],UNO_QUERY);
- OSL_ENSURE(xTunnel.is(),"No TunnelImplementation!");
- ODbaseIndex* pIndex = comphelper::getFromUnoTunnel<ODbaseIndex>(xTunnel);
+ ODbaseIndex* pIndex = dynamic_cast<ODbaseIndex*>(aIndexedCols[i].get());
assert(pIndex && "ODbaseTable::UpdateBuffer: No Index returned!");
// Update !!
if (pOrgRow.is() && !thisColIsNull)
@@ -2194,8 +2170,7 @@ void ODbaseTable::alterColumn(sal_Int32 index,
OUString sTempName = createTempFile();
rtl::Reference<ODbaseTable> pNewTable = new ODbaseTable(m_pTables,static_cast<ODbaseConnection*>(m_pConnection));
- Reference<XPropertySet> xHoldTable = pNewTable;
- pNewTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),makeAny(sTempName));
+ pNewTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),Any(sTempName));
Reference<XAppend> xAppend(pNewTable->getColumns(),UNO_QUERY);
OSL_ENSURE(xAppend.is(),"ODbaseTable::alterColumn: No XAppend interface!");
@@ -2263,8 +2238,8 @@ void ODbaseTable::alterColumn(sal_Int32 index,
::dbtools::throwGenericSQLException( sError, *this );
}
// release the temp file
+ ::comphelper::disposeComponent(pNewTable);
pNewTable = nullptr;
- ::comphelper::disposeComponent(xHoldTable);
}
else
{
@@ -2332,14 +2307,14 @@ namespace
{
Content aContent(aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE),Reference<XCommandEnvironment>(), comphelper::getProcessComponentContext());
- Sequence< PropertyValue > aProps{ { "Title",
+ Sequence< PropertyValue > aProps{ { u"Title"_ustr,
-1, // n/a
Any(sNewName),
css::beans::PropertyState_DIRECT_VALUE } };
Sequence< Any > aValues;
- aContent.executeCommand( "setPropertyValues",makeAny(aProps) ) >>= aValues;
+ aContent.executeCommand( u"setPropertyValues"_ustr,Any(aProps) ) >>= aValues;
if(aValues.hasElements() && aValues[0].hasValue())
- throw Exception("setPropertyValues returned non-zero", nullptr);
+ throw Exception(u"setPropertyValues returned non-zero"_ustr, nullptr);
}
catch(const Exception&)
{
@@ -2367,7 +2342,7 @@ void ODbaseTable::addColumn(const Reference< XPropertySet >& _xNewColumn)
OUString sTempName = createTempFile();
rtl::Reference xNewTable(new ODbaseTable(m_pTables,static_cast<ODbaseConnection*>(m_pConnection)));
- xNewTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),makeAny(sTempName));
+ xNewTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),Any(sTempName));
{
Reference<XAppend> xAppend(xNewTable->getColumns(),UNO_QUERY);
bool bCase = getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers();
@@ -2425,7 +2400,7 @@ void ODbaseTable::dropColumn(sal_Int32 _nPos)
OUString sTempName = createTempFile();
rtl::Reference xNewTable(new ODbaseTable(m_pTables,static_cast<ODbaseConnection*>(m_pConnection)));
- xNewTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),makeAny(sTempName));
+ xNewTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),Any(sTempName));
{
Reference<XAppend> xAppend(xNewTable->getColumns(),UNO_QUERY);
bool bCase = getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers();
@@ -2479,16 +2454,14 @@ OUString ODbaseTable::createTempFile()
if ( aIdent.lastIndexOf('/') != (aIdent.getLength()-1) )
aIdent += "/";
- OUString sTempName(aIdent);
OUString sExt("." + m_pConnection->getExtension());
- OUString sName(m_Name);
- TempFile aTempFile(sName, true, &sExt, &sTempName);
- if(!aTempFile.IsValid())
+ OUString aTempFileURL = utl::CreateTempURL(m_Name, true, sExt, &aIdent);
+ if(aTempFileURL.isEmpty())
getConnection()->throwGenericSQLException(STR_COULD_NOT_ALTER_TABLE, *this);
INetURLObject aURL;
aURL.SetSmartProtocol(INetProtocol::File);
- aURL.SetURL(aTempFile.GetURL());
+ aURL.SetURL(aTempFileURL);
OUString sNewName(aURL.getName().copy(0, aURL.getName().getLength() - sExt.getLength()));
@@ -2685,7 +2658,7 @@ bool ODbaseTable::ReadMemo(std::size_t nBlockNo, ORowSetValue& aVariable)
} while (!bReady && !m_pMemoStream->eof());
- aVariable = OStringToOUString(aBStr.makeStringAndClear(),
+ aVariable = OStringToOUString(aBStr,
m_eEncoding);
} break;
@@ -2709,7 +2682,14 @@ bool ODbaseTable::ReadMemo(std::size_t nBlockNo, ORowSetValue& aVariable)
(*m_pMemoStream).ReadUInt32( nLength );
if (m_aMemoHeader.db_typ == MemodBaseIV)
+ {
+ if (nLength < 8)
+ {
+ SAL_WARN("connectivity.drivers", "Size too small");
+ return false;
+ }
nLength -= 8;
+ }
if ( nLength )
{
@@ -2719,7 +2699,7 @@ bool ODbaseTable::ReadMemo(std::size_t nBlockNo, ORowSetValue& aVariable)
//pad it out with ' ' to expected length on short read
sal_Int32 nRequested = sal::static_int_cast<sal_Int32>(nLength);
comphelper::string::padToLength(aBuffer, nRequested, ' ');
- aVariable = OStringToOUString(aBuffer.makeStringAndClear(), m_eEncoding);
+ aVariable = OStringToOUString(aBuffer, m_eEncoding);
} // if ( bIsText )
else
{
diff --git a/connectivity/source/drivers/dbase/DTables.cxx b/connectivity/source/drivers/dbase/DTables.cxx
index a3bc953d93b4..d43bfb31356a 100644
--- a/connectivity/source/drivers/dbase/DTables.cxx
+++ b/connectivity/source/drivers/dbase/DTables.cxx
@@ -32,7 +32,6 @@
#include <strings.hrc>
#include <connectivity/dbexception.hxx>
-using namespace ::comphelper;
using namespace connectivity;
using namespace connectivity::dbase;
using namespace connectivity::file;
@@ -40,13 +39,12 @@ using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::container;
-sdbcx::ObjectType ODbaseTables::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > ODbaseTables::createObject(const OUString& _rName)
{
rtl::Reference<ODbaseTable> pRet = new ODbaseTable(this, static_cast<ODbaseConnection*>(static_cast<OFileCatalog&>(m_rParent).getConnection()),
- _rName,"TABLE");
+ _rName,u"TABLE"_ustr);
pRet->construct();
return pRet;
@@ -63,12 +61,12 @@ Reference< XPropertySet > ODbaseTables::createDescriptor()
}
// XAppend
-sdbcx::ObjectType ODbaseTables::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
+css::uno::Reference< css::beans::XPropertySet > ODbaseTables::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
{
- auto pTable = comphelper::getFromUnoTunnel<ODbaseTable>(descriptor);
+ auto pTable = dynamic_cast<ODbaseTable*>(descriptor.get());
if(pTable)
{
- pTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),makeAny(_rForName));
+ pTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),Any(_rForName));
try
{
if(!pTable->CreateImpl())
@@ -81,7 +79,7 @@ sdbcx::ObjectType ODbaseTables::appendObject( const OUString& _rForName, const R
catch(Exception& ex)
{
css::uno::Any anyEx = cppu::getCaughtException();
- throw SQLException( ex.Message, nullptr, "", 0, anyEx );
+ throw SQLException( ex.Message, nullptr, u""_ustr, 0, anyEx );
}
}
return createObject( _rForName );
@@ -90,7 +88,7 @@ sdbcx::ObjectType ODbaseTables::appendObject( const OUString& _rForName, const R
// XDrop
void ODbaseTables::dropObject(sal_Int32 _nPos, const OUString& _sElementName)
{
- Reference< XUnoTunnel> xTunnel;
+ Reference< XInterface > xTunnel;
try
{
xTunnel.set(getObject(_nPos),UNO_QUERY);
@@ -103,7 +101,7 @@ void ODbaseTables::dropObject(sal_Int32 _nPos, const OUString& _sElementName)
if ( xTunnel.is() )
{
- ODbaseTable* pTable = comphelper::getFromUnoTunnel<ODbaseTable>(xTunnel);
+ ODbaseTable* pTable = dynamic_cast<ODbaseTable*>(xTunnel.get());
if(pTable)
pTable->DropImpl();
}
diff --git a/connectivity/source/drivers/dbase/dindexnode.cxx b/connectivity/source/drivers/dbase/dindexnode.cxx
index 422fef11ce20..0e4746a0b9a6 100644
--- a/connectivity/source/drivers/dbase/dindexnode.cxx
+++ b/connectivity/source/drivers/dbase/dindexnode.cxx
@@ -26,6 +26,7 @@
#include <algorithm>
#include <memory>
+#include <utility>
using namespace connectivity;
@@ -38,10 +39,10 @@ ONDXKey::ONDXKey()
{
}
-ONDXKey::ONDXKey(const ORowSetValue& rVal, sal_Int32 eType, sal_uInt32 nRec)
+ONDXKey::ONDXKey(ORowSetValue aVal, sal_Int32 eType, sal_uInt32 nRec)
: ONDXKey_BASE(eType)
, nRecord(nRec)
- , xValue(rVal)
+ , xValue(std::move(aVal))
{
}
@@ -167,7 +168,7 @@ bool ONDXPage::Find(const ONDXKey& rKey)
else if (i == nCount)
{
rIndex.m_aCurLeaf = this;
- rIndex.m_nCurNode = i - 1;
+ rIndex.m_nCurNode = sal_uInt16(i - 1);
bResult = false;
}
else
@@ -206,8 +207,13 @@ bool ONDXPage::Insert(ONDXNode& rNode, sal_uInt32 nRowsLeft)
}
else // position unknown
{
- sal_uInt16 nPos = NODE_NOTFOUND;
- while (++nPos < nCount && rNode.GetKey() > ((*this)[nPos]).GetKey()) ;
+ sal_uInt16 nPos = 0;
+ while (nPos < nCount)
+ {
+ if (rNode.GetKey() <= ((*this)[nPos]).GetKey())
+ break;
+ ++nPos;
+ }
--nCount; // (otherwise we might get Assertions and GPFs - 60593)
bResult = Insert(nPos, rNode);
@@ -234,7 +240,7 @@ bool ONDXPage::Insert(ONDXNode& rNode, sal_uInt32 nRowsLeft)
ONDXPagePtr aNewRoot = rIndex.CreatePage(nNewPagePos + 1);
aNewRoot->SetChild(this);
- rIndex.m_aRoot = aNewRoot;
+ rIndex.m_aRoot = std::move(aNewRoot);
rIndex.SetRootPos(nNewPagePos + 1);
rIndex.SetPageCount(++nNewPageCount);
}
@@ -268,7 +274,7 @@ bool ONDXPage::Insert(ONDXNode& rNode, sal_uInt32 nRowsLeft)
ONDXPagePtr aTempParent = aParent;
if (IsLeaf())
{
- rIndex.m_aCurLeaf = aNewPage;
+ rIndex.m_aCurLeaf = std::move(aNewPage);
rIndex.m_nCurNode = rIndex.m_aCurLeaf->Count() - 1;
// free not needed pages, there are no references to those on the page
@@ -410,8 +416,8 @@ void ONDXPage::Delete(sal_uInt16 nNodePos)
else
{
// merge with right neighbour
- Merge(nParentNodePos + 1,((*aParent)[nParentNodePos + 1].GetChild(&rIndex,aParent)));
- nParentNodePos++;
+ nParentNodePos = o3tl::sanitizing_inc(nParentNodePos);
+ Merge(nParentNodePos,((*aParent)[nParentNodePos].GetChild(&rIndex,aParent)));
}
if (HasParent() && !(*aParent)[nParentNodePos].HasChild())
aParent->Delete(nParentNodePos);
@@ -482,7 +488,7 @@ void ONDXPage::Merge(sal_uInt16 nParentNodePos, const ONDXPagePtr& xPage)
nMaxNodes_2 = nMaxNodes / 2;
// Determine if page is right or left neighbour
- bool bRight = ((*xPage)[0].GetKey() > (*this)[0].GetKey()); // sal_True, whenn xPage the right side is
+ bool bRight = ((*xPage)[0].GetKey() > (*this)[0].GetKey()); // true when xPage is at the right side
sal_uInt16 nNewCount = (*xPage).Count() + Count();
if (IsLeaf())
@@ -968,28 +974,28 @@ bool ONDXPage::IsFull() const
return Count() == rIndex.getHeader().db_maxkeys;
}
-
sal_uInt16 ONDXPage::Search(const ONDXKey& rSearch)
{
// binary search later
- sal_uInt16 i = NODE_NOTFOUND;
- while (++i < Count())
- if ((*this)[i].GetKey() == rSearch)
- break;
+ for (sal_uInt16 i = 0, nSize = Count(); i < nSize; ++i)
+ {
+ if (((*this)[i]).GetKey() == rSearch)
+ return i;
+ }
- return (i < Count()) ? i : NODE_NOTFOUND;
+ return NODE_NOTFOUND;
}
-
sal_uInt16 ONDXPage::Search(const ONDXPage* pPage)
{
- sal_uInt16 i = NODE_NOTFOUND;
- while (++i < Count())
+ for (sal_uInt16 i = 0, nSize = Count(); i < nSize; ++i)
+ {
if (((*this)[i]).GetChild() == pPage)
- break;
+ return i;
+ }
// if not found, then we assume, that the page itself points to the page
- return (i < Count()) ? i : NODE_NOTFOUND;
+ return NODE_NOTFOUND;
}
// runs recursively
diff --git a/connectivity/source/drivers/evoab2/EApi.cxx b/connectivity/source/drivers/evoab2/EApi.cxx
index 6df2c45d4aef..9ec8e0d44e32 100644
--- a/connectivity/source/drivers/evoab2/EApi.cxx
+++ b/connectivity/source/drivers/evoab2/EApi.cxx
@@ -21,18 +21,10 @@
#define DECLARE_FN_POINTERS 1
#include "EApi.h"
static const char *eBookLibNames[] = {
+ "libebook-1.2.so.21", // evolution-data-server 3.45.2+
"libebook-1.2.so.20", // evolution-data-server 3.33.2+
"libebook-1.2.so.19", // evolution-data-server 3.24+
- "libebook-1.2.so.16",
- "libebook-1.2.so.15",
- "libebook-1.2.so.14", // bumped again (evolution-3.6)
- "libebook-1.2.so.13", // bumped again (evolution-3.4)
- "libebook-1.2.so.12", // bumped again
- "libebook-1.2.so.10", // bumped again
- "libebook-1.2.so.9", // evolution-2.8
- "libebook-1.2.so.5", // evolution-2.4 and 2.6+
- "libebook-1.2.so.3", // evolution-2.2
- "libebook.so.8" // evolution-2.0
+ "libebook-1.2.so.16"
};
typedef void (*SymbolFunc) ();
@@ -69,20 +61,6 @@ const ApiMap aCommonApiMap[] =
{ "e_book_query_field_exists", reinterpret_cast<SymbolFunc *>(&e_book_query_field_exists) }
};
-//< 3.6 api
-const ApiMap aOldApiMap[] =
-{
- { "e_book_get_addressbooks", reinterpret_cast<SymbolFunc *>(&e_book_get_addressbooks) },
- { "e_book_get_uri", reinterpret_cast<SymbolFunc *>(&e_book_get_uri) },
- { "e_book_authenticate_user", reinterpret_cast<SymbolFunc *>(&e_book_authenticate_user) },
- { "e_source_group_peek_base_uri", reinterpret_cast<SymbolFunc *>(&e_source_group_peek_base_uri) },
- { "e_source_peek_name", reinterpret_cast<SymbolFunc *>(&e_source_peek_name) },
- { "e_source_get_property", reinterpret_cast<SymbolFunc *>(&e_source_get_property) },
- { "e_source_list_peek_groups", reinterpret_cast<SymbolFunc *>(&e_source_list_peek_groups) },
- { "e_source_group_peek_sources", reinterpret_cast<SymbolFunc *>(&e_source_group_peek_sources) }
-};
-
-//>= 3.6 api
const ApiMap aNewApiMap[] =
{
{ "e_source_registry_list_sources", reinterpret_cast<SymbolFunc *>(&e_source_registry_list_sources) },
@@ -99,12 +77,6 @@ const ApiMap aNewApiMap[] =
{ "e_client_util_free_object_slist", reinterpret_cast<SymbolFunc *>(&e_client_util_free_object_slist) }
};
-//== indirect read access (3.6 only)
-const ApiMap aClientApiMap36[] =
-{
- { "e_book_client_new", reinterpret_cast<SymbolFunc *>(&e_book_client_new) }
-};
-
//>= direct read access API (>= 3.8)
const ApiMap aClientApiMap38[] =
{
@@ -140,33 +112,14 @@ bool EApiInit()
if (tryLink( aModule, eBookLibNames[ j ], aCommonApiMap))
{
- if (eds_check_version( 3, 6, 0 ) != nullptr)
+ if (tryLink( aModule, eBookLibNames[ j ], aNewApiMap))
{
- if (tryLink( aModule, eBookLibNames[ j ], aOldApiMap))
+ if (tryLink( aModule, eBookLibNames[ j ], aClientApiMap38))
{
aModule.release();
return true;
}
}
- else if (tryLink( aModule, eBookLibNames[ j ], aNewApiMap))
- {
- if (eds_check_version( 3, 7, 6 ) != nullptr)
- {
- if (tryLink( aModule, eBookLibNames[ j ], aClientApiMap36))
- {
- aModule.release();
- return true;
- }
- }
- else
- {
- if (tryLink( aModule, eBookLibNames[ j ], aClientApiMap38))
- {
- aModule.release();
- return true;
- }
- }
- }
}
}
fprintf( stderr, "Can find no compliant libebook client libraries\n" );
diff --git a/connectivity/source/drivers/evoab2/EApi.h b/connectivity/source/drivers/evoab2/EApi.h
index 4d17922aab30..a33bf9721de6 100644
--- a/connectivity/source/drivers/evoab2/EApi.h
+++ b/connectivity/source/drivers/evoab2/EApi.h
@@ -146,7 +146,7 @@ EAPI_EXTERN const gchar* (*eds_check_version) (guint required_major, guint requi
EAPI_EXTERN const gchar* (*e_source_get_uid) (ESource *source);
EAPI_EXTERN ESource* (*e_source_registry_ref_source) (ESourceRegistry *registry, const gchar *uid);
EAPI_EXTERN EBookClient* (*e_book_client_new) (ESource *source, GError **error);
-EAPI_EXTERN EBookClient* (*e_book_client_connect_direct_sync) (ESourceRegistry *registry, ESource *source, GCancellable *cancellable, GError **error);
+EAPI_EXTERN EBookClient* (*e_book_client_connect_direct_sync) (ESourceRegistry *registry, ESource *source, guint32 wait_for_connected_seconds, GCancellable *cancellable, GError **error);
EAPI_EXTERN gboolean (*e_client_open_sync) (EClient *client, gboolean only_if_exists, GCancellable *cancellable, GError **error);
EAPI_EXTERN ESource* (*e_client_get_source) (EClient *client);
EAPI_EXTERN gboolean (*e_book_client_get_contacts_sync) (EBookClient *client, const gchar *sexp, GSList **contacts, GCancellable *cancellable, GError **error);
@@ -157,4 +157,6 @@ bool isSourceBackend(ESource *pSource, const char *backendname);
G_END_DECLS
+inline void object_unref(gpointer data, gpointer) { g_object_unref(data); }
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/evoab2/NCatalog.cxx b/connectivity/source/drivers/evoab2/NCatalog.cxx
index 6b409ce66d65..42c66f7f4542 100644
--- a/connectivity/source/drivers/evoab2/NCatalog.cxx
+++ b/connectivity/source/drivers/evoab2/NCatalog.cxx
@@ -26,11 +26,8 @@
using namespace connectivity::evoab;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
OEvoabCatalog::OEvoabCatalog(OEvoabConnection* _pCon) :
connectivity::sdbcx::OCatalog(_pCon)
@@ -40,9 +37,9 @@ OEvoabCatalog::OEvoabCatalog(OEvoabConnection* _pCon) :
void OEvoabCatalog::refreshTables()
{
::std::vector< OUString> aVector;
- Sequence< OUString > aTypes { "TABLE" };
+ Sequence< OUString > aTypes { u"TABLE"_ustr };
Reference< XResultSet > xResult = m_xMetaData->getTables(
- Any(), "%", "%", aTypes);
+ Any(), u"%"_ustr, u"%"_ustr, aTypes);
if(xResult.is())
{
diff --git a/connectivity/source/drivers/evoab2/NCatalog.hxx b/connectivity/source/drivers/evoab2/NCatalog.hxx
index b2bd8084474c..2b794c81202e 100644
--- a/connectivity/source/drivers/evoab2/NCatalog.hxx
+++ b/connectivity/source/drivers/evoab2/NCatalog.hxx
@@ -23,21 +23,21 @@
namespace connectivity::evoab
{
- class OEvoabConnection;
- class OEvoabCatalog : public connectivity::sdbcx::OCatalog
- {
- OEvoabConnection *m_pConnection;
- public:
- explicit OEvoabCatalog(OEvoabConnection *_pCon);
- OEvoabConnection* getConnection() const { return m_pConnection; }
- virtual void refreshTables() override;
- virtual void refreshViews() override {}
- virtual void refreshGroups() override {}
- virtual void refreshUsers() override {}
- // XTablesSupplier
- virtual css::uno::Reference< css::container::XNameAccess > SAL_CALL getTables(
- ) override;
- };
+ class OEvoabConnection;
+ class OEvoabCatalog : public connectivity::sdbcx::OCatalog
+ {
+ OEvoabConnection *m_pConnection;
+ public:
+ explicit OEvoabCatalog(OEvoabConnection *_pCon);
+ OEvoabConnection* getConnection() const { return m_pConnection; }
+ virtual void refreshTables() override;
+ virtual void refreshViews() override {}
+ virtual void refreshGroups() override {}
+ virtual void refreshUsers() override {}
+// XTablesSupplier
+ virtual css::uno::Reference< css::container::XNameAccess > SAL_CALL getTables(
+ ) override;
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/evoab2/NColumns.cxx b/connectivity/source/drivers/evoab2/NColumns.cxx
index 5b2b64d5d58b..a07e12d764d7 100644
--- a/connectivity/source/drivers/evoab2/NColumns.cxx
+++ b/connectivity/source/drivers/evoab2/NColumns.cxx
@@ -25,16 +25,12 @@
using namespace connectivity::sdbcx;
using namespace connectivity;
-using namespace ::comphelper;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
using namespace connectivity::evoab;
-sdbcx::ObjectType OEvoabColumns::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > OEvoabColumns::createObject(const OUString& _rName)
{
const Any aCatalog;
const OUString sCatalogName;
@@ -46,33 +42,32 @@ sdbcx::ObjectType OEvoabColumns::createObject(const OUString& _rName)
sTableName,
_rName);
- sdbcx::ObjectType xRet;
- if (xResult.is())
- {
- Reference< XRow > xRow(xResult,UNO_QUERY);
+ if (!xResult.is())
+ return nullptr;
- while (xResult->next())
+ rtl::Reference< OColumn > xRet;
+ Reference< XRow > xRow(xResult,UNO_QUERY);
+ while (xResult->next())
+ {
+ if (xRow->getString(4) == _rName)
{
- if (xRow->getString(4) == _rName)
- {
- xRet = new OColumn(
- _rName,
- xRow->getString(6),
- xRow->getString(13),
- xRow->getString(12),
- xRow->getInt(11),
- xRow->getInt(7),
- xRow->getInt(9),
- xRow->getInt(5),
- false,
- false,
- false,
- true,
- sCatalogName,
- sSchemaName,
- sTableName);
- break;
- }
+ xRet = new OColumn(
+ _rName,
+ xRow->getString(6),
+ xRow->getString(13),
+ xRow->getString(12),
+ xRow->getInt(11),
+ xRow->getInt(7),
+ xRow->getInt(9),
+ xRow->getInt(5),
+ false,
+ false,
+ false,
+ true,
+ sCatalogName,
+ sSchemaName,
+ sTableName);
+ break;
}
}
diff --git a/connectivity/source/drivers/evoab2/NColumns.hxx b/connectivity/source/drivers/evoab2/NColumns.hxx
index f768c51bb046..0f070e5ca8c8 100644
--- a/connectivity/source/drivers/evoab2/NColumns.hxx
+++ b/connectivity/source/drivers/evoab2/NColumns.hxx
@@ -24,21 +24,21 @@
namespace connectivity::evoab
{
- class OEvoabColumns final : public sdbcx::OCollection
- {
- OEvoabTable* m_pTable;
+ class OEvoabColumns final : public sdbcx::OCollection
+ {
+ OEvoabTable* m_pTable;
- virtual sdbcx::ObjectType createObject(const OUString& _rName) override;
- virtual void impl_refresh() override;
+ virtual css::uno::Reference< css::beans::XPropertySet > createObject(const OUString& _rName) override;
+ virtual void impl_refresh() override;
- public:
- OEvoabColumns( OEvoabTable* _pTable,
- ::osl::Mutex& _rMutex,
- const ::std::vector< OUString> &_rVector
- ) : sdbcx::OCollection(*_pTable,true,_rMutex,_rVector),
- m_pTable(_pTable)
- { }
- };
+ public:
+ OEvoabColumns( OEvoabTable* _pTable,
+ ::osl::Mutex& _rMutex,
+ const ::std::vector< OUString> &_rVector
+ ) : sdbcx::OCollection(*_pTable,true,_rMutex,_rVector),
+ m_pTable(_pTable)
+ { }
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/evoab2/NConnection.cxx b/connectivity/source/drivers/evoab2/NConnection.cxx
index 02e8d476dd6e..4c4d46e63fd8 100644
--- a/connectivity/source/drivers/evoab2/NConnection.cxx
+++ b/connectivity/source/drivers/evoab2/NConnection.cxx
@@ -36,7 +36,6 @@ using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::lang;
OEvoabConnection::OEvoabConnection(OEvoabDriver const & _rDriver)
: m_rDriver(_rDriver)
@@ -57,7 +56,7 @@ OEvoabConnection::~OEvoabConnection()
// XServiceInfo
-IMPLEMENT_SERVICE_INFO(OEvoabConnection, "com.sun.star.sdbc.drivers.evoab.Connection", "com.sun.star.sdbc.Connection")
+IMPLEMENT_SERVICE_INFO(OEvoabConnection, u"com.sun.star.sdbc.drivers.evoab.Connection"_ustr, u"com.sun.star.sdbc.Connection"_ustr)
void OEvoabConnection::construct(const OUString& url, const Sequence< PropertyValue >& info)
@@ -148,7 +147,7 @@ Reference< XPreparedStatement > SAL_CALL OEvoabConnection::prepareStatement( con
Reference< XPreparedStatement > SAL_CALL OEvoabConnection::prepareCall( const OUString& /*sql*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XConnection::prepareCall", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XConnection::prepareCall"_ustr, *this );
return nullptr;
}
sal_Bool SAL_CALL OEvoabConnection::isClosed( )
@@ -190,7 +189,7 @@ void OEvoabConnection::disposing()
// -------------------------------- stubbed methods ------------------------------------------------
void SAL_CALL OEvoabConnection::setAutoCommit( sal_Bool /*autoCommit*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XConnection::setAutoCommit", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XConnection::setAutoCommit"_ustr, *this );
}
sal_Bool SAL_CALL OEvoabConnection::getAutoCommit( )
{
@@ -204,7 +203,7 @@ void SAL_CALL OEvoabConnection::rollback( )
}
void SAL_CALL OEvoabConnection::setReadOnly( sal_Bool /*readOnly*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XConnection::setReadOnly", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XConnection::setReadOnly"_ustr, *this );
}
sal_Bool SAL_CALL OEvoabConnection::isReadOnly( )
{
@@ -212,7 +211,7 @@ sal_Bool SAL_CALL OEvoabConnection::isReadOnly( )
}
void SAL_CALL OEvoabConnection::setCatalog( const OUString& /*catalog*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XConnection::setCatalog", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XConnection::setCatalog"_ustr, *this );
}
OUString SAL_CALL OEvoabConnection::getCatalog( )
@@ -221,7 +220,7 @@ OUString SAL_CALL OEvoabConnection::getCatalog( )
}
void SAL_CALL OEvoabConnection::setTransactionIsolation( sal_Int32 /*level*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XConnection::setTransactionIsolation", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XConnection::setTransactionIsolation"_ustr, *this );
}
sal_Int32 SAL_CALL OEvoabConnection::getTransactionIsolation( )
@@ -231,12 +230,12 @@ sal_Int32 SAL_CALL OEvoabConnection::getTransactionIsolation( )
Reference< css::container::XNameAccess > SAL_CALL OEvoabConnection::getTypeMap( )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XConnection::getTypeMap", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XConnection::getTypeMap"_ustr, *this );
return nullptr;
}
void SAL_CALL OEvoabConnection::setTypeMap( const Reference< css::container::XNameAccess >& /*typeMap*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XConnection::setTypeMap", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XConnection::setTypeMap"_ustr, *this );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/evoab2/NConnection.hxx b/connectivity/source/drivers/evoab2/NConnection.hxx
index 4d6604f0975c..77e3ea30b335 100644
--- a/connectivity/source/drivers/evoab2/NConnection.hxx
+++ b/connectivity/source/drivers/evoab2/NConnection.hxx
@@ -32,75 +32,74 @@
namespace connectivity::evoab {
- namespace SDBCAddress {
- typedef enum {
- Unknown = 0,
- EVO_LOCAL = 1,
- EVO_LDAP = 2,
- EVO_GWISE = 3
- } sdbc_address_type;
- }
+ namespace SDBCAddress {
+ typedef enum {
+ Unknown = 0,
+ EVO_LOCAL = 1,
+ EVO_LDAP = 2,
+ EVO_GWISE = 3
+ } sdbc_address_type;
+ }
- typedef connectivity::OMetaConnection OConnection_BASE; // implements basics and text encoding
+ typedef connectivity::OMetaConnection OConnection_BASE; // implements basics and text encoding
- class OEvoabConnection final :public OConnection_BASE
- {
- private:
- const OEvoabDriver& m_rDriver;
- SDBCAddress::sdbc_address_type m_eSDBCAddressType;
- css::uno::Reference< css::sdbcx::XTablesSupplier >
- m_xCatalog;
- OString m_aPassword;
- ::dbtools::WarningsContainer m_aWarnings;
+ class OEvoabConnection final :public OConnection_BASE
+ {
+ private:
+ const OEvoabDriver& m_rDriver;
+ SDBCAddress::sdbc_address_type m_eSDBCAddressType;
+ css::uno::Reference< css::sdbcx::XTablesSupplier >
+ m_xCatalog;
+ OString m_aPassword;
+ ::dbtools::WarningsContainer m_aWarnings;
- virtual ~OEvoabConnection() override;
+ virtual ~OEvoabConnection() override;
- public:
- explicit OEvoabConnection( OEvoabDriver const & _rDriver );
- /// @throws css::sdbc::SQLException
- void construct(const OUString& _rUrl,const css::uno::Sequence< css::beans::PropertyValue >& _rInfo );
+ public:
+ explicit OEvoabConnection( OEvoabDriver const & _rDriver );
+ /// @throws css::sdbc::SQLException
+ void construct(const OUString& _rUrl,const css::uno::Sequence< css::beans::PropertyValue >& _rInfo );
- OString const & getPassword() const { return m_aPassword; }
- void setPassword( OString const & aStr ) { m_aPassword = aStr; }
- // own methods
- const OEvoabDriver& getDriver() const { return m_rDriver; }
+ void setPassword( OString const & aStr ) { m_aPassword = aStr; }
+ // own methods
+ const OEvoabDriver& getDriver() const { return m_rDriver; }
- SDBCAddress::sdbc_address_type getSDBCAddressType() const { return m_eSDBCAddressType;}
- void setSDBCAddressType(SDBCAddress::sdbc_address_type _eSDBCAddressType) {m_eSDBCAddressType = _eSDBCAddressType;}
+ SDBCAddress::sdbc_address_type getSDBCAddressType() const { return m_eSDBCAddressType;}
+ void setSDBCAddressType(SDBCAddress::sdbc_address_type _eSDBCAddressType) {m_eSDBCAddressType = _eSDBCAddressType;}
- // OComponentHelper
- virtual void SAL_CALL disposing() override;
+ // OComponentHelper
+ virtual void SAL_CALL disposing() override;
- // XServiceInfo
- DECLARE_SERVICE_INFO();
+ // XServiceInfo
+ DECLARE_SERVICE_INFO();
- // XConnection
- css::uno::Reference< css::sdbcx::XTablesSupplier > createCatalog();
- virtual css::uno::Reference< css::sdbc::XStatement > SAL_CALL createStatement( ) override;
- virtual css::uno::Reference< css::sdbc::XPreparedStatement > SAL_CALL prepareStatement( const OUString& sql ) override;
- virtual css::uno::Reference< css::sdbc::XPreparedStatement > SAL_CALL prepareCall( const OUString& sql ) override;
- virtual OUString SAL_CALL nativeSQL( const OUString& sql ) override;
- virtual void SAL_CALL setAutoCommit( sal_Bool autoCommit ) override;
- virtual sal_Bool SAL_CALL getAutoCommit( ) override;
- virtual void SAL_CALL commit( ) override;
- virtual void SAL_CALL rollback( ) override;
- virtual sal_Bool SAL_CALL isClosed( ) override;
- virtual css::uno::Reference< css::sdbc::XDatabaseMetaData > SAL_CALL getMetaData( ) override;
- virtual void SAL_CALL setReadOnly( sal_Bool readOnly ) override;
- virtual sal_Bool SAL_CALL isReadOnly( ) override;
- virtual void SAL_CALL setCatalog( const OUString& catalog ) override;
- virtual OUString SAL_CALL getCatalog( ) override;
- virtual void SAL_CALL setTransactionIsolation( sal_Int32 level ) override;
- virtual sal_Int32 SAL_CALL getTransactionIsolation( ) override;
- virtual css::uno::Reference< css::container::XNameAccess > SAL_CALL getTypeMap( ) override;
- virtual void SAL_CALL setTypeMap( const css::uno::Reference< css::container::XNameAccess >& typeMap ) override;
+ // XConnection
+ css::uno::Reference< css::sdbcx::XTablesSupplier > createCatalog();
+ virtual css::uno::Reference< css::sdbc::XStatement > SAL_CALL createStatement( ) override;
+ virtual css::uno::Reference< css::sdbc::XPreparedStatement > SAL_CALL prepareStatement( const OUString& sql ) override;
+ virtual css::uno::Reference< css::sdbc::XPreparedStatement > SAL_CALL prepareCall( const OUString& sql ) override;
+ virtual OUString SAL_CALL nativeSQL( const OUString& sql ) override;
+ virtual void SAL_CALL setAutoCommit( sal_Bool autoCommit ) override;
+ virtual sal_Bool SAL_CALL getAutoCommit( ) override;
+ virtual void SAL_CALL commit( ) override;
+ virtual void SAL_CALL rollback( ) override;
+ virtual sal_Bool SAL_CALL isClosed( ) override;
+ virtual css::uno::Reference< css::sdbc::XDatabaseMetaData > SAL_CALL getMetaData( ) override;
+ virtual void SAL_CALL setReadOnly( sal_Bool readOnly ) override;
+ virtual sal_Bool SAL_CALL isReadOnly( ) override;
+ virtual void SAL_CALL setCatalog( const OUString& catalog ) override;
+ virtual OUString SAL_CALL getCatalog( ) override;
+ virtual void SAL_CALL setTransactionIsolation( sal_Int32 level ) override;
+ virtual sal_Int32 SAL_CALL getTransactionIsolation( ) override;
+ virtual css::uno::Reference< css::container::XNameAccess > SAL_CALL getTypeMap( ) override;
+ virtual void SAL_CALL setTypeMap( const css::uno::Reference< css::container::XNameAccess >& typeMap ) override;
- // XCloseable
- virtual void SAL_CALL close( ) override;
- // XWarningsSupplier
- virtual css::uno::Any SAL_CALL getWarnings( ) override;
- virtual void SAL_CALL clearWarnings( ) override;
- };
+ // XCloseable
+ virtual void SAL_CALL close( ) override;
+ // XWarningsSupplier
+ virtual css::uno::Any SAL_CALL getWarnings( ) override;
+ virtual void SAL_CALL clearWarnings( ) override;
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx b/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx
index a671ceb233a8..060c4480bd87 100644
--- a/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx
+++ b/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx
@@ -34,10 +34,7 @@
using namespace connectivity::evoab;
using namespace connectivity;
using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
-using namespace com::sun::star::sdbcx;
namespace
{
@@ -193,9 +190,9 @@ namespace connectivity::evoab
switch( getFieldType( nCol ) )
{
case DataType::BIT:
- return "BIT";
+ return u"BIT"_ustr;
case DataType::VARCHAR:
- return "VARCHAR";
+ return u"VARCHAR"_ustr;
default:
break;
}
@@ -253,8 +250,14 @@ OEvoabDatabaseMetaData::~OEvoabDatabaseMetaData()
}
-ODatabaseMetaDataResultSet::ORows OEvoabDatabaseMetaData::getColumnRows( const OUString& columnNamePattern )
+Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getColumns(
+ const Any& /*catalog*/, const OUString& /*schemaPattern*/, const OUString& /*tableNamePattern*/,
+ const OUString& columnNamePattern )
{
+ // this returns an empty resultset where the column-names are already set
+ // in special the metadata of the resultset already returns the right columns
+ rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eColumns );
+
ODatabaseMetaDataResultSet::ORows aRows;
ODatabaseMetaDataResultSet::ORow aRow(19);
@@ -287,14 +290,14 @@ ODatabaseMetaDataResultSet::ORows OEvoabDatabaseMetaData::getColumnRows( const O
// CHAR_OCTET_LENGTH, refer to [5]
aRow[16] = new ORowSetValueDecorator(s_nCHAR_OCTET_LENGTH);
// IS_NULLABLE
- aRow[18] = new ORowSetValueDecorator(OUString("YES"));
+ aRow[18] = new ORowSetValueDecorator(u"YES"_ustr);
- aRow[3] = new ORowSetValueDecorator(OUString("TABLE"));
+ aRow[3] = new ORowSetValueDecorator(u"TABLE"_ustr);
::osl::MutexGuard aGuard( m_aMutex );
initFields();
- for (sal_Int32 i = 0; i < static_cast<sal_Int32>(nFields); i++)
+ for (guint i = 0; i < nFields; i++)
{
if( match( columnNamePattern, getFieldName( i ), '\0' ) )
{
@@ -304,12 +307,14 @@ ODatabaseMetaDataResultSet::ORows OEvoabDatabaseMetaData::getColumnRows( const O
// COLUMN_NAME
aRow[4] = new ORowSetValueDecorator( getFieldName( i ) );
// ORDINAL_POSITION
- aRow[17] = new ORowSetValueDecorator( i );
+ aRow[17] = new ORowSetValueDecorator( sal_Int32(i) );
aRows.push_back( aRow );
}
}
- return aRows ;
+ pResultSet->setRows(std::move(aRows));
+
+ return pResultSet;
}
OUString OEvoabDatabaseMetaData::impl_getCatalogSeparator_throw( )
@@ -442,7 +447,7 @@ OUString SAL_CALL OEvoabDatabaseMetaData::getCatalogTerm( )
OUString OEvoabDatabaseMetaData::impl_getIdentifierQuoteString_throw( )
{
// normally this is "
- return "\"";
+ return u"\""_ustr;
}
OUString SAL_CALL OEvoabDatabaseMetaData::getExtraNameCharacters( )
@@ -798,12 +803,12 @@ OUString SAL_CALL OEvoabDatabaseMetaData::getDriverName( )
OUString SAL_CALL OEvoabDatabaseMetaData::getDriverVersion()
{
- return "1";
+ return u"1"_ustr;
}
OUString SAL_CALL OEvoabDatabaseMetaData::getDatabaseProductVersion( )
{
- return "0";
+ return u"0"_ustr;
}
OUString SAL_CALL OEvoabDatabaseMetaData::getDatabaseProductName( )
@@ -988,8 +993,8 @@ Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getTableTypes( )
rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTableTypes);
// here we fill the rows which should be visible when ask for data from the resultset returned here
- auto nNbTypes = SAL_N_ELEMENTS(sTableTypes);
- ODatabaseMetaDataResultSet::ORows aRows(nNbTypes);
+ auto nNbTypes = std::size(sTableTypes);
+ ODatabaseMetaDataResultSet::ORows aRows;
for(std::size_t i=0;i < nNbTypes;++i)
{
// bound row
@@ -1010,11 +1015,11 @@ Reference< XResultSet > OEvoabDatabaseMetaData::impl_getTypeInfo_throw( )
static ODatabaseMetaDataResultSet::ORows aRows = []()
{
- ODatabaseMetaDataResultSet::ORows tmp(2);
+ ODatabaseMetaDataResultSet::ORows tmp;
ODatabaseMetaDataResultSet::ORow aRow
{
ODatabaseMetaDataResultSet::getEmptyValue() ,
- new ORowSetValueDecorator(OUString("VARCHAR")) ,
+ new ORowSetValueDecorator(u"VARCHAR"_ustr) ,
new ORowSetValueDecorator(DataType::VARCHAR) ,
new ORowSetValueDecorator(sal_Int32(s_nCHAR_OCTET_LENGTH)) ,
ODatabaseMetaDataResultSet::getQuoteValue() ,
@@ -1036,7 +1041,7 @@ Reference< XResultSet > OEvoabDatabaseMetaData::impl_getTypeInfo_throw( )
tmp.push_back(aRow);
- aRow[1] = new ORowSetValueDecorator(OUString("VARCHAR"));
+ aRow[1] = new ORowSetValueDecorator(u"VARCHAR"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::VARCHAR);
aRow[3] = new ORowSetValueDecorator(sal_Int32(65535));
tmp.push_back(aRow);
@@ -1046,18 +1051,6 @@ Reference< XResultSet > OEvoabDatabaseMetaData::impl_getTypeInfo_throw( )
return pResultSet;
}
-Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getColumns(
- const Any& /*catalog*/, const OUString& /*schemaPattern*/, const OUString& /*tableNamePattern*/,
- const OUString& columnNamePattern )
-{
- // this returns an empty resultset where the column-names are already set
- // in special the metadata of the resultset already returns the right columns
- rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eColumns );
- pResultSet->setRows( getColumnRows( columnNamePattern ) );
- return pResultSet;
-}
-
-
bool isSourceBackend(ESource *pSource, const char *backendname)
{
if (!pSource || !e_source_has_extension (pSource, E_SOURCE_EXTENSION_ADDRESS_BOOK))
@@ -1073,12 +1066,12 @@ Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getTables(
{
::osl::MutexGuard aGuard( m_aMutex );
- rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTableTypes);
+ rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTables);
// check if any type is given
// when no types are given then we have to return all tables e.g. TABLE
- static const OUStringLiteral aTable(u"TABLE");
+ static constexpr OUString aTable(u"TABLE"_ustr);
bool bTableFound = true;
sal_Int32 nLength = types.getLength();
@@ -1102,105 +1095,50 @@ Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getTables(
ODatabaseMetaDataResultSet::ORows aRows;
- if (eds_check_version(3, 6, 0) == nullptr)
- {
- GList *pSources = e_source_registry_list_sources(get_e_source_registry(), E_SOURCE_EXTENSION_ADDRESS_BOOK);
+ GList *pSources = e_source_registry_list_sources(get_e_source_registry(), E_SOURCE_EXTENSION_ADDRESS_BOOK);
- for (GList* liter = pSources; liter; liter = liter->next)
- {
- ESource *pSource = E_SOURCE (liter->data);
- bool can = false;
- switch (m_pConnection->getSDBCAddressType())
- {
- case SDBCAddress::EVO_GWISE:
- can = isSourceBackend( pSource, "groupwise"); // not supported in evo/eds 3.6.x+, somehow
- break;
- case SDBCAddress::EVO_LOCAL:
- can = isSourceBackend( pSource, "local");
- break;
- case SDBCAddress::EVO_LDAP:
- can = isSourceBackend( pSource, "ldap");
- break;
- case SDBCAddress::Unknown:
- can = true;
- break;
- }
- if (!can)
- continue;
-
- OUString aHumanName = OStringToOUString( e_source_get_display_name( pSource ),
- RTL_TEXTENCODING_UTF8 );
- OUString aUID = OStringToOUString( e_source_get_uid( pSource ),
- RTL_TEXTENCODING_UTF8 );
- ODatabaseMetaDataResultSet::ORow aRow{
- ORowSetValueDecoratorRef(),
- ORowSetValueDecoratorRef(),
- ORowSetValueDecoratorRef(),
- new ORowSetValueDecorator(aHumanName), //tablename
- new ORowSetValueDecorator(ORowSetValue(aTable)),
- new ORowSetValueDecorator(aUID)}; //comment
- //I'd prefer to swap the comment and the human name and
- //just use e_source_registry_ref_source(get_e_source_registry(), aUID);
- //in open book rather than search for the name again
- aRows.push_back(aRow);
- }
-
- g_list_foreach (pSources, reinterpret_cast<GFunc>(g_object_unref), nullptr);
- g_list_free (pSources);
- }
- else
+ for (GList* liter = pSources; liter; liter = liter->next)
{
- ESourceList *pSourceList;
- if( !e_book_get_addressbooks (&pSourceList, nullptr) )
- pSourceList = nullptr;
-
- GSList *g;
- for( g = e_source_list_peek_groups( pSourceList ); g; g = g->next)
+ ESource *pSource = E_SOURCE (liter->data);
+ bool can = false;
+ switch (m_pConnection->getSDBCAddressType())
{
- GSList *s;
- const char *p = e_source_group_peek_base_uri(E_SOURCE_GROUP(g->data));
-
- switch (m_pConnection->getSDBCAddressType()) {
case SDBCAddress::EVO_GWISE:
- if ( !strncmp( "groupwise://", p, 11 ))
- break;
- else
- continue;
+ can = isSourceBackend( pSource, "groupwise"); // not supported in evo/eds 3.6.x+, somehow
+ break;
case SDBCAddress::EVO_LOCAL:
- if ( !strncmp( "file://", p, 6 ) ||
- !strncmp( "local://", p, 6 ) )
- break;
- else
- continue;
+ can = isSourceBackend( pSource, "local");
+ break;
case SDBCAddress::EVO_LDAP:
- if ( !strncmp( "ldap://", p, 6 ))
- break;
- else
- continue;
+ can = isSourceBackend( pSource, "ldap");
+ break;
case SDBCAddress::Unknown:
+ can = true;
break;
- }
- for (s = e_source_group_peek_sources (E_SOURCE_GROUP (g->data)); s; s = s->next)
- {
- ESource *pSource = E_SOURCE (s->data);
-
- OUString aName = OStringToOUString( e_source_peek_name( pSource ),
- RTL_TEXTENCODING_UTF8 );
-
- aRows.push_back(
- {
- ORowSetValueDecoratorRef(),
- ORowSetValueDecoratorRef(),
- ORowSetValueDecoratorRef(),
- new ORowSetValueDecorator(aName),
- new ORowSetValueDecorator(ORowSetValue(aTable)),
- ODatabaseMetaDataResultSet::getEmptyValue()
- }
- );
- }
}
+ if (!can)
+ continue;
+
+ OUString aHumanName = OStringToOUString( e_source_get_display_name( pSource ),
+ RTL_TEXTENCODING_UTF8 );
+ OUString aUID = OStringToOUString( e_source_get_uid( pSource ),
+ RTL_TEXTENCODING_UTF8 );
+ ODatabaseMetaDataResultSet::ORow aRow{
+ ORowSetValueDecoratorRef(),
+ ORowSetValueDecoratorRef(),
+ ORowSetValueDecoratorRef(),
+ new ORowSetValueDecorator(aHumanName), //tablename
+ new ORowSetValueDecorator(ORowSetValue(aTable)),
+ new ORowSetValueDecorator(aUID)}; //comment
+ //I'd prefer to swap the comment and the human name and
+ //just use e_source_registry_ref_source(get_e_source_registry(), aUID);
+ //in open book rather than search for the name again
+ aRows.push_back(aRow);
}
+ g_list_foreach (pSources, object_unref, nullptr);
+ g_list_free (pSources);
+
pResult->setRows(std::move(aRows));
return pResult;
@@ -1208,7 +1146,7 @@ Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getTables(
Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getUDTs( const Any& /*catalog*/, const OUString& /*schemaPattern*/, const OUString& /*typeNamePattern*/, const Sequence< sal_Int32 >& /*types*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XDatabaseMetaDaza::getUDTs", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XDatabaseMetaDaza::getUDTs"_ustr, *this );
return nullptr;
}
diff --git a/connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx b/connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx
index b5f504425d95..333594bf3741 100644
--- a/connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx
+++ b/connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx
@@ -31,189 +31,187 @@
namespace connectivity::evoab
{
- //************ Class: OEvoabDatabaseMetaData
-
- typedef struct{
- gboolean bIsSplittedValue;
- GParamSpec *pField;
- }ColumnProperty;
-
- typedef enum {
- DEFAULT_ADDR_LINE1=1,DEFAULT_ADDR_LINE2,DEFAULT_CITY,DEFAULT_STATE,DEFAULT_COUNTRY,DEFAULT_ZIP,
- WORK_ADDR_LINE1,WORK_ADDR_LINE2,WORK_CITY,WORK_STATE,WORK_COUNTRY,WORK_ZIP,
- HOME_ADDR_LINE1,HOME_ADDR_LINE2,HOME_CITY,HOME_STATE,HOME_COUNTRY,HOME_ZIP,
- OTHER_ADDR_LINE1,OTHER_ADDR_LINE2,OTHER_CITY,OTHER_STATE,OTHER_COUNTRY,OTHER_ZIP
- }ColumnNumber;
-
- typedef struct {
- const gchar *pColumnName;
- ColumnNumber value;
- }SplitEvoColumns;
-
- const SplitEvoColumns* get_evo_addr();
-
- const ColumnProperty *getField(guint n);
- GType getGFieldType(guint nCol) ;
- sal_Int32 getFieldType(guint nCol) ;
- OUString getFieldTypeName(guint nCol) ;
- OUString getFieldName(guint nCol) ;
- guint findEvoabField(std::u16string_view aColName);
-
- void free_column_resources();
-
- class OEvoabDatabaseMetaData : public ODatabaseMetaDataBase
- {
- OEvoabConnection* m_pConnection;
-
- ODatabaseMetaDataResultSet::ORows getColumnRows( const OUString& columnNamePattern );
-
- protected:
- virtual css::uno::Reference< css::sdbc::XResultSet > impl_getTypeInfo_throw() override;
- // cached database information
- virtual OUString impl_getIdentifierQuoteString_throw( ) override;
- virtual bool impl_isCatalogAtStart_throw( ) override;
- virtual OUString impl_getCatalogSeparator_throw( ) override;
- virtual bool impl_supportsCatalogsInTableDefinitions_throw( ) override;
- virtual bool impl_supportsSchemasInTableDefinitions_throw( ) override ;
- virtual bool impl_supportsCatalogsInDataManipulation_throw( ) override;
- virtual bool impl_supportsSchemasInDataManipulation_throw( ) override ;
- virtual bool impl_supportsMixedCaseQuotedIdentifiers_throw( ) override ;
- virtual bool impl_supportsAlterTableWithAddColumn_throw( ) override;
- virtual bool impl_supportsAlterTableWithDropColumn_throw( ) override;
- virtual sal_Int32 impl_getMaxStatements_throw( ) override;
- virtual sal_Int32 impl_getMaxTablesInSelect_throw( ) override;
- virtual bool impl_storesMixedCaseQuotedIdentifiers_throw( ) override;
-
- virtual ~OEvoabDatabaseMetaData() override;
- public:
- explicit OEvoabDatabaseMetaData(OEvoabConnection* _pCon);
-
- // as I mentioned before this interface is really BIG
- // XDatabaseMetaData
- virtual sal_Bool SAL_CALL allProceduresAreCallable( ) override;
- virtual sal_Bool SAL_CALL allTablesAreSelectable( ) override;
- virtual OUString SAL_CALL getURL( ) override;
- virtual OUString SAL_CALL getUserName( ) override;
- virtual sal_Bool SAL_CALL isReadOnly( ) override;
- virtual sal_Bool SAL_CALL nullsAreSortedHigh( ) override;
- virtual sal_Bool SAL_CALL nullsAreSortedLow( ) override;
- virtual sal_Bool SAL_CALL nullsAreSortedAtStart( ) override;
- virtual sal_Bool SAL_CALL nullsAreSortedAtEnd( ) override;
- virtual OUString SAL_CALL getDatabaseProductName( ) override;
- virtual OUString SAL_CALL getDatabaseProductVersion( ) override;
- virtual OUString SAL_CALL getDriverName( ) override;
- virtual OUString SAL_CALL getDriverVersion( ) override;
- virtual sal_Int32 SAL_CALL getDriverMajorVersion( ) override;
- virtual sal_Int32 SAL_CALL getDriverMinorVersion( ) override;
- virtual sal_Bool SAL_CALL usesLocalFiles( ) override;
- virtual sal_Bool SAL_CALL usesLocalFilePerTable( ) override;
- virtual sal_Bool SAL_CALL supportsMixedCaseIdentifiers( ) override;
- virtual sal_Bool SAL_CALL storesUpperCaseIdentifiers( ) override;
- virtual sal_Bool SAL_CALL storesLowerCaseIdentifiers( ) override;
- virtual sal_Bool SAL_CALL storesMixedCaseIdentifiers( ) override;
-
- virtual sal_Bool SAL_CALL storesUpperCaseQuotedIdentifiers( ) override;
- virtual sal_Bool SAL_CALL storesLowerCaseQuotedIdentifiers( ) override;
-
- virtual OUString SAL_CALL getSQLKeywords( ) override;
- virtual OUString SAL_CALL getNumericFunctions( ) override;
- virtual OUString SAL_CALL getStringFunctions( ) override;
- virtual OUString SAL_CALL getSystemFunctions( ) override;
- virtual OUString SAL_CALL getTimeDateFunctions( ) override;
- virtual OUString SAL_CALL getSearchStringEscape( ) override;
- virtual OUString SAL_CALL getExtraNameCharacters( ) override;
- virtual sal_Bool SAL_CALL supportsColumnAliasing( ) override;
- virtual sal_Bool SAL_CALL nullPlusNonNullIsNull( ) override;
- virtual sal_Bool SAL_CALL supportsTypeConversion( ) override;
- virtual sal_Bool SAL_CALL supportsConvert( sal_Int32 fromType, sal_Int32 toType ) override;
- virtual sal_Bool SAL_CALL supportsTableCorrelationNames( ) override;
- virtual sal_Bool SAL_CALL supportsDifferentTableCorrelationNames( ) override;
- virtual sal_Bool SAL_CALL supportsExpressionsInOrderBy( ) override;
- virtual sal_Bool SAL_CALL supportsOrderByUnrelated( ) override;
- virtual sal_Bool SAL_CALL supportsGroupBy( ) override;
- virtual sal_Bool SAL_CALL supportsGroupByUnrelated( ) override;
- virtual sal_Bool SAL_CALL supportsGroupByBeyondSelect( ) override;
- virtual sal_Bool SAL_CALL supportsLikeEscapeClause( ) override;
- virtual sal_Bool SAL_CALL supportsMultipleResultSets( ) override;
- virtual sal_Bool SAL_CALL supportsMultipleTransactions( ) override;
- virtual sal_Bool SAL_CALL supportsNonNullableColumns( ) override;
- virtual sal_Bool SAL_CALL supportsMinimumSQLGrammar( ) override;
- virtual sal_Bool SAL_CALL supportsCoreSQLGrammar( ) override;
- virtual sal_Bool SAL_CALL supportsExtendedSQLGrammar( ) override;
- virtual sal_Bool SAL_CALL supportsANSI92EntryLevelSQL( ) override;
- virtual sal_Bool SAL_CALL supportsANSI92IntermediateSQL( ) override;
- virtual sal_Bool SAL_CALL supportsANSI92FullSQL( ) override;
- virtual sal_Bool SAL_CALL supportsIntegrityEnhancementFacility( ) override;
- virtual sal_Bool SAL_CALL supportsOuterJoins( ) override;
- virtual sal_Bool SAL_CALL supportsFullOuterJoins( ) override;
- virtual sal_Bool SAL_CALL supportsLimitedOuterJoins( ) override;
- virtual OUString SAL_CALL getSchemaTerm( ) override;
- virtual OUString SAL_CALL getProcedureTerm( ) override;
- virtual OUString SAL_CALL getCatalogTerm( ) override;
- virtual sal_Bool SAL_CALL supportsSchemasInProcedureCalls( ) override;
- virtual sal_Bool SAL_CALL supportsSchemasInIndexDefinitions( ) override;
- virtual sal_Bool SAL_CALL supportsSchemasInPrivilegeDefinitions( ) override;
- virtual sal_Bool SAL_CALL supportsCatalogsInProcedureCalls( ) override;
- virtual sal_Bool SAL_CALL supportsCatalogsInIndexDefinitions( ) override;
- virtual sal_Bool SAL_CALL supportsCatalogsInPrivilegeDefinitions( ) override;
- virtual sal_Bool SAL_CALL supportsPositionedDelete( ) override;
- virtual sal_Bool SAL_CALL supportsPositionedUpdate( ) override;
- virtual sal_Bool SAL_CALL supportsSelectForUpdate( ) override;
- virtual sal_Bool SAL_CALL supportsStoredProcedures( ) override;
- virtual sal_Bool SAL_CALL supportsSubqueriesInComparisons( ) override;
- virtual sal_Bool SAL_CALL supportsSubqueriesInExists( ) override;
- virtual sal_Bool SAL_CALL supportsSubqueriesInIns( ) override;
- virtual sal_Bool SAL_CALL supportsSubqueriesInQuantifieds( ) override;
- virtual sal_Bool SAL_CALL supportsCorrelatedSubqueries( ) override;
- virtual sal_Bool SAL_CALL supportsUnion( ) override;
- virtual sal_Bool SAL_CALL supportsUnionAll( ) override;
- virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossCommit( ) override;
- virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossRollback( ) override;
- virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossCommit( ) override;
- virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossRollback( ) override;
- virtual sal_Int32 SAL_CALL getMaxBinaryLiteralLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxCharLiteralLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnsInGroupBy( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnsInIndex( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnsInOrderBy( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnsInSelect( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnsInTable( ) override;
- virtual sal_Int32 SAL_CALL getMaxConnections( ) override;
- virtual sal_Int32 SAL_CALL getMaxCursorNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxIndexLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxSchemaNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxProcedureNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxCatalogNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxRowSize( ) override;
- virtual sal_Bool SAL_CALL doesMaxRowSizeIncludeBlobs( ) override;
- virtual sal_Int32 SAL_CALL getMaxStatementLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxTableNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxUserNameLength( ) override;
- virtual sal_Int32 SAL_CALL getDefaultTransactionIsolation( ) override;
- virtual sal_Bool SAL_CALL supportsTransactions( ) override;
- virtual sal_Bool SAL_CALL supportsTransactionIsolationLevel( sal_Int32 level ) override;
- virtual sal_Bool SAL_CALL supportsDataDefinitionAndDataManipulationTransactions( ) override;
- virtual sal_Bool SAL_CALL supportsDataManipulationTransactionsOnly( ) override;
- virtual sal_Bool SAL_CALL dataDefinitionCausesTransactionCommit( ) override;
- virtual sal_Bool SAL_CALL dataDefinitionIgnoredInTransactions( ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTables( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const css::uno::Sequence< OUString >& types ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTableTypes( ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getColumns( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const OUString& columnNamePattern ) override;
- virtual sal_Bool SAL_CALL supportsResultSetType( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL supportsResultSetConcurrency( sal_Int32 setType, sal_Int32 concurrency ) override;
- virtual sal_Bool SAL_CALL ownUpdatesAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL ownDeletesAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL ownInsertsAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL othersUpdatesAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL othersDeletesAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL othersInsertsAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL updatesAreDetected( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL deletesAreDetected( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL insertsAreDetected( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL supportsBatchUpdates( ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getUDTs( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& typeNamePattern, const css::uno::Sequence< sal_Int32 >& types ) override;
- };
+ //************ Class: OEvoabDatabaseMetaData
+
+ typedef struct{
+ gboolean bIsSplittedValue;
+ GParamSpec *pField;
+ }ColumnProperty;
+
+ typedef enum {
+ DEFAULT_ADDR_LINE1=1,DEFAULT_ADDR_LINE2,DEFAULT_CITY,DEFAULT_STATE,DEFAULT_COUNTRY,DEFAULT_ZIP,
+ WORK_ADDR_LINE1,WORK_ADDR_LINE2,WORK_CITY,WORK_STATE,WORK_COUNTRY,WORK_ZIP,
+ HOME_ADDR_LINE1,HOME_ADDR_LINE2,HOME_CITY,HOME_STATE,HOME_COUNTRY,HOME_ZIP,
+ OTHER_ADDR_LINE1,OTHER_ADDR_LINE2,OTHER_CITY,OTHER_STATE,OTHER_COUNTRY,OTHER_ZIP
+ }ColumnNumber;
+
+ typedef struct {
+ const gchar *pColumnName;
+ ColumnNumber value;
+ }SplitEvoColumns;
+
+ const SplitEvoColumns* get_evo_addr();
+
+ const ColumnProperty *getField(guint n);
+ GType getGFieldType(guint nCol) ;
+ sal_Int32 getFieldType(guint nCol) ;
+ OUString getFieldTypeName(guint nCol) ;
+ OUString getFieldName(guint nCol) ;
+ guint findEvoabField(std::u16string_view aColName);
+
+ void free_column_resources();
+
+ class OEvoabDatabaseMetaData : public ODatabaseMetaDataBase
+ {
+ OEvoabConnection* m_pConnection;
+
+ protected:
+ virtual css::uno::Reference< css::sdbc::XResultSet > impl_getTypeInfo_throw() override;
+ // cached database information
+ virtual OUString impl_getIdentifierQuoteString_throw( ) override;
+ virtual bool impl_isCatalogAtStart_throw( ) override;
+ virtual OUString impl_getCatalogSeparator_throw( ) override;
+ virtual bool impl_supportsCatalogsInTableDefinitions_throw( ) override;
+ virtual bool impl_supportsSchemasInTableDefinitions_throw( ) override ;
+ virtual bool impl_supportsCatalogsInDataManipulation_throw( ) override;
+ virtual bool impl_supportsSchemasInDataManipulation_throw( ) override ;
+ virtual bool impl_supportsMixedCaseQuotedIdentifiers_throw( ) override ;
+ virtual bool impl_supportsAlterTableWithAddColumn_throw( ) override;
+ virtual bool impl_supportsAlterTableWithDropColumn_throw( ) override;
+ virtual sal_Int32 impl_getMaxStatements_throw( ) override;
+ virtual sal_Int32 impl_getMaxTablesInSelect_throw( ) override;
+ virtual bool impl_storesMixedCaseQuotedIdentifiers_throw( ) override;
+
+ virtual ~OEvoabDatabaseMetaData() override;
+ public:
+ explicit OEvoabDatabaseMetaData(OEvoabConnection* _pCon);
+
+ // as I mentioned before this interface is really BIG
+ // XDatabaseMetaData
+ virtual sal_Bool SAL_CALL allProceduresAreCallable( ) override;
+ virtual sal_Bool SAL_CALL allTablesAreSelectable( ) override;
+ virtual OUString SAL_CALL getURL( ) override;
+ virtual OUString SAL_CALL getUserName( ) override;
+ virtual sal_Bool SAL_CALL isReadOnly( ) override;
+ virtual sal_Bool SAL_CALL nullsAreSortedHigh( ) override;
+ virtual sal_Bool SAL_CALL nullsAreSortedLow( ) override;
+ virtual sal_Bool SAL_CALL nullsAreSortedAtStart( ) override;
+ virtual sal_Bool SAL_CALL nullsAreSortedAtEnd( ) override;
+ virtual OUString SAL_CALL getDatabaseProductName( ) override;
+ virtual OUString SAL_CALL getDatabaseProductVersion( ) override;
+ virtual OUString SAL_CALL getDriverName( ) override;
+ virtual OUString SAL_CALL getDriverVersion( ) override;
+ virtual sal_Int32 SAL_CALL getDriverMajorVersion( ) override;
+ virtual sal_Int32 SAL_CALL getDriverMinorVersion( ) override;
+ virtual sal_Bool SAL_CALL usesLocalFiles( ) override;
+ virtual sal_Bool SAL_CALL usesLocalFilePerTable( ) override;
+ virtual sal_Bool SAL_CALL supportsMixedCaseIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL storesUpperCaseIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL storesLowerCaseIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL storesMixedCaseIdentifiers( ) override;
+
+ virtual sal_Bool SAL_CALL storesUpperCaseQuotedIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL storesLowerCaseQuotedIdentifiers( ) override;
+
+ virtual OUString SAL_CALL getSQLKeywords( ) override;
+ virtual OUString SAL_CALL getNumericFunctions( ) override;
+ virtual OUString SAL_CALL getStringFunctions( ) override;
+ virtual OUString SAL_CALL getSystemFunctions( ) override;
+ virtual OUString SAL_CALL getTimeDateFunctions( ) override;
+ virtual OUString SAL_CALL getSearchStringEscape( ) override;
+ virtual OUString SAL_CALL getExtraNameCharacters( ) override;
+ virtual sal_Bool SAL_CALL supportsColumnAliasing( ) override;
+ virtual sal_Bool SAL_CALL nullPlusNonNullIsNull( ) override;
+ virtual sal_Bool SAL_CALL supportsTypeConversion( ) override;
+ virtual sal_Bool SAL_CALL supportsConvert( sal_Int32 fromType, sal_Int32 toType ) override;
+ virtual sal_Bool SAL_CALL supportsTableCorrelationNames( ) override;
+ virtual sal_Bool SAL_CALL supportsDifferentTableCorrelationNames( ) override;
+ virtual sal_Bool SAL_CALL supportsExpressionsInOrderBy( ) override;
+ virtual sal_Bool SAL_CALL supportsOrderByUnrelated( ) override;
+ virtual sal_Bool SAL_CALL supportsGroupBy( ) override;
+ virtual sal_Bool SAL_CALL supportsGroupByUnrelated( ) override;
+ virtual sal_Bool SAL_CALL supportsGroupByBeyondSelect( ) override;
+ virtual sal_Bool SAL_CALL supportsLikeEscapeClause( ) override;
+ virtual sal_Bool SAL_CALL supportsMultipleResultSets( ) override;
+ virtual sal_Bool SAL_CALL supportsMultipleTransactions( ) override;
+ virtual sal_Bool SAL_CALL supportsNonNullableColumns( ) override;
+ virtual sal_Bool SAL_CALL supportsMinimumSQLGrammar( ) override;
+ virtual sal_Bool SAL_CALL supportsCoreSQLGrammar( ) override;
+ virtual sal_Bool SAL_CALL supportsExtendedSQLGrammar( ) override;
+ virtual sal_Bool SAL_CALL supportsANSI92EntryLevelSQL( ) override;
+ virtual sal_Bool SAL_CALL supportsANSI92IntermediateSQL( ) override;
+ virtual sal_Bool SAL_CALL supportsANSI92FullSQL( ) override;
+ virtual sal_Bool SAL_CALL supportsIntegrityEnhancementFacility( ) override;
+ virtual sal_Bool SAL_CALL supportsOuterJoins( ) override;
+ virtual sal_Bool SAL_CALL supportsFullOuterJoins( ) override;
+ virtual sal_Bool SAL_CALL supportsLimitedOuterJoins( ) override;
+ virtual OUString SAL_CALL getSchemaTerm( ) override;
+ virtual OUString SAL_CALL getProcedureTerm( ) override;
+ virtual OUString SAL_CALL getCatalogTerm( ) override;
+ virtual sal_Bool SAL_CALL supportsSchemasInProcedureCalls( ) override;
+ virtual sal_Bool SAL_CALL supportsSchemasInIndexDefinitions( ) override;
+ virtual sal_Bool SAL_CALL supportsSchemasInPrivilegeDefinitions( ) override;
+ virtual sal_Bool SAL_CALL supportsCatalogsInProcedureCalls( ) override;
+ virtual sal_Bool SAL_CALL supportsCatalogsInIndexDefinitions( ) override;
+ virtual sal_Bool SAL_CALL supportsCatalogsInPrivilegeDefinitions( ) override;
+ virtual sal_Bool SAL_CALL supportsPositionedDelete( ) override;
+ virtual sal_Bool SAL_CALL supportsPositionedUpdate( ) override;
+ virtual sal_Bool SAL_CALL supportsSelectForUpdate( ) override;
+ virtual sal_Bool SAL_CALL supportsStoredProcedures( ) override;
+ virtual sal_Bool SAL_CALL supportsSubqueriesInComparisons( ) override;
+ virtual sal_Bool SAL_CALL supportsSubqueriesInExists( ) override;
+ virtual sal_Bool SAL_CALL supportsSubqueriesInIns( ) override;
+ virtual sal_Bool SAL_CALL supportsSubqueriesInQuantifieds( ) override;
+ virtual sal_Bool SAL_CALL supportsCorrelatedSubqueries( ) override;
+ virtual sal_Bool SAL_CALL supportsUnion( ) override;
+ virtual sal_Bool SAL_CALL supportsUnionAll( ) override;
+ virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossCommit( ) override;
+ virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossRollback( ) override;
+ virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossCommit( ) override;
+ virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossRollback( ) override;
+ virtual sal_Int32 SAL_CALL getMaxBinaryLiteralLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxCharLiteralLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnsInGroupBy( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnsInIndex( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnsInOrderBy( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnsInSelect( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnsInTable( ) override;
+ virtual sal_Int32 SAL_CALL getMaxConnections( ) override;
+ virtual sal_Int32 SAL_CALL getMaxCursorNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxIndexLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxSchemaNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxProcedureNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxCatalogNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxRowSize( ) override;
+ virtual sal_Bool SAL_CALL doesMaxRowSizeIncludeBlobs( ) override;
+ virtual sal_Int32 SAL_CALL getMaxStatementLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxTableNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxUserNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getDefaultTransactionIsolation( ) override;
+ virtual sal_Bool SAL_CALL supportsTransactions( ) override;
+ virtual sal_Bool SAL_CALL supportsTransactionIsolationLevel( sal_Int32 level ) override;
+ virtual sal_Bool SAL_CALL supportsDataDefinitionAndDataManipulationTransactions( ) override;
+ virtual sal_Bool SAL_CALL supportsDataManipulationTransactionsOnly( ) override;
+ virtual sal_Bool SAL_CALL dataDefinitionCausesTransactionCommit( ) override;
+ virtual sal_Bool SAL_CALL dataDefinitionIgnoredInTransactions( ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTables( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const css::uno::Sequence< OUString >& types ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTableTypes( ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getColumns( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const OUString& columnNamePattern ) override;
+ virtual sal_Bool SAL_CALL supportsResultSetType( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL supportsResultSetConcurrency( sal_Int32 setType, sal_Int32 concurrency ) override;
+ virtual sal_Bool SAL_CALL ownUpdatesAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL ownDeletesAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL ownInsertsAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL othersUpdatesAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL othersDeletesAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL othersInsertsAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL updatesAreDetected( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL deletesAreDetected( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL insertsAreDetected( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL supportsBatchUpdates( ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getUDTs( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& typeNamePattern, const css::uno::Sequence< sal_Int32 >& types ) override;
+ };
}
diff --git a/connectivity/source/drivers/evoab2/NDriver.cxx b/connectivity/source/drivers/evoab2/NDriver.cxx
index d1b7746f47c5..83934b6b3e1a 100644
--- a/connectivity/source/drivers/evoab2/NDriver.cxx
+++ b/connectivity/source/drivers/evoab2/NDriver.cxx
@@ -31,10 +31,8 @@ using namespace osl;
using namespace connectivity::evoab;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::ucb;
OEvoabDriver::OEvoabDriver(const Reference< XComponentContext >& _rxContext) :
@@ -53,7 +51,7 @@ void OEvoabDriver::disposing()
// when driver will be destroyed so all our connections have to be destroyed as well
for (const auto& rxConnection : m_xConnections)
{
- Reference< XComponent > xComp(rxConnection.get(), UNO_QUERY);
+ rtl::Reference< OEvoabConnection > xComp(rxConnection);
if (xComp.is())
{
try
@@ -67,7 +65,6 @@ void OEvoabDriver::disposing()
}
}
m_xConnections.clear();
- connectivity::OWeakRefArray().swap(m_xConnections); // this really clears
ODriver_BASE::disposing();
}
@@ -91,7 +88,7 @@ Sequence< OUString > SAL_CALL OEvoabDriver::getSupportedServiceNames( )
{
// which service is supported
// for more information @see com.sun.star.sdbc.Driver
- return { "com.sun.star.sdbc.Driver" };
+ return { u"com.sun.star.sdbc.Driver"_ustr };
}
@@ -106,7 +103,7 @@ Reference< XConnection > SAL_CALL OEvoabDriver::connect( const OUString& url, co
rtl::Reference<OEvoabConnection> pCon = new OEvoabConnection( *this );
pCon->construct(url,info);
- m_xConnections.push_back(WeakReferenceHelper(*pCon));
+ m_xConnections.push_back(pCon);
return pCon;
}
diff --git a/connectivity/source/drivers/evoab2/NDriver.hxx b/connectivity/source/drivers/evoab2/NDriver.hxx
index 9d3b57fa7988..e144e61d2987 100644
--- a/connectivity/source/drivers/evoab2/NDriver.hxx
+++ b/connectivity/source/drivers/evoab2/NDriver.hxx
@@ -27,47 +27,50 @@
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <cppuhelper/compbase.hxx>
#include <connectivity/CommonTools.hxx>
+#include <unotools/weakref.hxx>
-inline constexpr OUStringLiteral EVOAB_DRIVER_IMPL_NAME = u"com.sun.star.comp.sdbc.evoab.OEvoabDriver";
+inline constexpr OUString EVOAB_DRIVER_IMPL_NAME = u"com.sun.star.comp.sdbc.evoab.OEvoabDriver"_ustr;
namespace connectivity::evoab
- {
- typedef ::cppu::WeakComponentImplHelper< css::sdbc::XDriver,
- css::lang::XServiceInfo > ODriver_BASE;
+{
+ class OEvoabConnection;
+
+ typedef ::cppu::WeakComponentImplHelper< css::sdbc::XDriver,
+ css::lang::XServiceInfo > ODriver_BASE;
- class OEvoabDriver final : public ODriver_BASE
- {
- ::osl::Mutex m_aMutex;
- connectivity::OWeakRefArray m_xConnections;
- css::uno::Reference< css::uno::XComponentContext > m_xContext;
+ class OEvoabDriver final : public ODriver_BASE
+ {
+ ::osl::Mutex m_aMutex;
+ std::vector<unotools::WeakReference<OEvoabConnection>> m_xConnections;
+ css::uno::Reference< css::uno::XComponentContext > m_xContext;
- public:
- explicit OEvoabDriver(const css::uno::Reference< css::uno::XComponentContext >& );
- virtual ~OEvoabDriver() override;
+ public:
+ explicit OEvoabDriver(const css::uno::Reference< css::uno::XComponentContext >& );
+ virtual ~OEvoabDriver() override;
- // OComponentHelper
- virtual void SAL_CALL disposing() override;
+ // OComponentHelper
+ virtual void SAL_CALL disposing() override;
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName( ) override;
- virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
- virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override;
+ // XServiceInfo
+ virtual OUString SAL_CALL getImplementationName( ) override;
+ virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override;
- // XDriver
- virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL connect( const OUString& url, const css::uno::Sequence< css::beans::PropertyValue >& info ) override;
- virtual sal_Bool SAL_CALL acceptsURL( const OUString& url ) override;
- virtual css::uno::Sequence< css::sdbc::DriverPropertyInfo > SAL_CALL getPropertyInfo( const OUString& url, const css::uno::Sequence< css::beans::PropertyValue >& info ) override;
- virtual sal_Int32 SAL_CALL getMajorVersion( ) override;
- virtual sal_Int32 SAL_CALL getMinorVersion( ) override;
+ // XDriver
+ virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL connect( const OUString& url, const css::uno::Sequence< css::beans::PropertyValue >& info ) override;
+ virtual sal_Bool SAL_CALL acceptsURL( const OUString& url ) override;
+ virtual css::uno::Sequence< css::sdbc::DriverPropertyInfo > SAL_CALL getPropertyInfo( const OUString& url, const css::uno::Sequence< css::beans::PropertyValue >& info ) override;
+ virtual sal_Int32 SAL_CALL getMajorVersion( ) override;
+ virtual sal_Int32 SAL_CALL getMinorVersion( ) override;
- public:
- const css::uno::Reference< css::uno::XComponentContext >& getComponentContext( ) const { return m_xContext; }
+ public:
+ const css::uno::Reference< css::uno::XComponentContext >& getComponentContext( ) const { return m_xContext; }
- // static methods
- static bool acceptsURL_Stat( std::u16string_view url );
- };
+ // static methods
+ static bool acceptsURL_Stat( std::u16string_view url );
+ };
}
diff --git a/connectivity/source/drivers/evoab2/NPreparedStatement.cxx b/connectivity/source/drivers/evoab2/NPreparedStatement.cxx
index 7b6172ac6cf9..f518122ebfcd 100644
--- a/connectivity/source/drivers/evoab2/NPreparedStatement.cxx
+++ b/connectivity/source/drivers/evoab2/NPreparedStatement.cxx
@@ -22,20 +22,19 @@
#include <connectivity/dbexception.hxx>
#include <connectivity/dbtools.hxx>
#include <rtl/ref.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <strings.hrc>
using namespace connectivity::evoab;
using namespace com::sun::star::uno;
using namespace com::sun::star::lang;
-using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
using namespace com::sun::star::container;
using namespace com::sun::star::io;
using namespace com::sun::star::util;
-IMPLEMENT_SERVICE_INFO(OEvoabPreparedStatement,"com.sun.star.sdbcx.evoab.PreparedStatement","com.sun.star.sdbc.PreparedStatement");
+IMPLEMENT_SERVICE_INFO(OEvoabPreparedStatement,u"com.sun.star.sdbcx.evoab.PreparedStatement"_ustr,u"com.sun.star.sdbc.PreparedStatement"_ustr);
OEvoabPreparedStatement::OEvoabPreparedStatement( OEvoabConnection* _pConnection )
@@ -134,14 +133,14 @@ sal_Int32 SAL_CALL OEvoabPreparedStatement::executeUpdate( )
{
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OCommonStatement_IBase::rBHelper.bDisposed);
- ::dbtools::throwFeatureNotImplementedSQLException( "XStatement::executeUpdate", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XStatement::executeUpdate"_ustr, *this );
return 0;
}
void SAL_CALL OEvoabPreparedStatement::setString( sal_Int32 /*parameterIndex*/, const OUString& /*x*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setString", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setString"_ustr, *this );
}
@@ -165,97 +164,97 @@ Reference< XResultSet > SAL_CALL OEvoabPreparedStatement::executeQuery( )
void SAL_CALL OEvoabPreparedStatement::setBoolean( sal_Int32 /*parameterIndex*/, sal_Bool /*x*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setBoolean", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setBoolean"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setByte( sal_Int32 /*parameterIndex*/, sal_Int8 /*x*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setByte", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setByte"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setDate( sal_Int32 /*parameterIndex*/, const Date& /*aData*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setDate", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setDate"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setTime( sal_Int32 /*parameterIndex*/, const css::util::Time& /*aVal*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setTime", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setTime"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setTimestamp( sal_Int32 /*parameterIndex*/, const DateTime& /*aVal*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setTimestamp", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setTimestamp"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setDouble( sal_Int32 /*parameterIndex*/, double /*x*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setDouble", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setDouble"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setFloat( sal_Int32 /*parameterIndex*/, float /*x*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setFloat", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setFloat"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setInt( sal_Int32 /*parameterIndex*/, sal_Int32 /*x*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setInt", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setInt"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setLong( sal_Int32 /*parameterIndex*/, sal_Int64 /*aVal*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setLong", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setLong"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setNull( sal_Int32 /*parameterIndex*/, sal_Int32 /*sqlType*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setNull", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setNull"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setClob( sal_Int32 /*parameterIndex*/, const Reference< XClob >& /*x*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setClob", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setClob"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setBlob( sal_Int32 /*parameterIndex*/, const Reference< XBlob >& /*x*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setBlob", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setBlob"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setArray( sal_Int32 /*parameterIndex*/, const Reference< XArray >& /*x*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setArray", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setArray"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setRef( sal_Int32 /*parameterIndex*/, const Reference< XRef >& /*x*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setRef", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setRef"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setObjectWithInfo( sal_Int32 /*parameterIndex*/, const Any& /*x*/, sal_Int32 /*sqlType*/, sal_Int32 /*scale*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setObjectWithInfo", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setObjectWithInfo"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setObjectNull( sal_Int32 /*parameterIndex*/, sal_Int32 /*sqlType*/, const OUString& /*typeName*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setObjectNull", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setObjectNull"_ustr, *this );
}
@@ -274,25 +273,25 @@ void SAL_CALL OEvoabPreparedStatement::setObject( sal_Int32 parameterIndex, cons
void SAL_CALL OEvoabPreparedStatement::setShort( sal_Int32 /*parameterIndex*/, sal_Int16 /*x*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setShort", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setShort"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setBytes( sal_Int32 /*parameterIndex*/, const Sequence< sal_Int8 >& /*x*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setBytes", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setBytes"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setCharacterStream( sal_Int32 /*parameterIndex*/, const Reference< XInputStream >& /*x*/, sal_Int32 /*length*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setCharacterStream", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setCharacterStream"_ustr, *this );
}
void SAL_CALL OEvoabPreparedStatement::setBinaryStream( sal_Int32 /*parameterIndex*/, const Reference< XInputStream >& /*x*/, sal_Int32 /*length*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setBinaryStream", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setBinaryStream"_ustr, *this );
}
diff --git a/connectivity/source/drivers/evoab2/NPreparedStatement.hxx b/connectivity/source/drivers/evoab2/NPreparedStatement.hxx
index cd42d42d505b..22463c0ee2d4 100644
--- a/connectivity/source/drivers/evoab2/NPreparedStatement.hxx
+++ b/connectivity/source/drivers/evoab2/NPreparedStatement.hxx
@@ -33,75 +33,75 @@
namespace connectivity::evoab
{
- typedef ::cppu::ImplHelper5< css::sdbc::XPreparedStatement,
- css::sdbc::XParameters,
- css::sdbc::XResultSetMetaDataSupplier,
- css::sdbc::XMultipleResults,
- css::lang::XServiceInfo> OPreparedStatement_BASE;
+ typedef ::cppu::ImplHelper5< css::sdbc::XPreparedStatement,
+ css::sdbc::XParameters,
+ css::sdbc::XResultSetMetaDataSupplier,
+ css::sdbc::XMultipleResults,
+ css::lang::XServiceInfo> OPreparedStatement_BASE;
- class OEvoabPreparedStatement final:public OCommonStatement
- ,public OPreparedStatement_BASE
- {
- // our SQL statement
- OUString m_sSqlStatement;
- // the EBookQuery we're working with
- QueryData m_aQueryData;
- // our meta data
- css::uno::Reference< css::sdbc::XResultSetMetaData > m_xMetaData;
+ class OEvoabPreparedStatement final:public OCommonStatement
+ ,public OPreparedStatement_BASE
+ {
+ // our SQL statement
+ OUString m_sSqlStatement;
+ // the EBookQuery we're working with
+ QueryData m_aQueryData;
+ // our meta data
+ rtl::Reference<OEvoabResultSetMetaData> m_xMetaData;
- virtual ~OEvoabPreparedStatement() override;
+ virtual ~OEvoabPreparedStatement() override;
- public:
- explicit OEvoabPreparedStatement( OEvoabConnection* _pConnection );
+ public:
+ explicit OEvoabPreparedStatement( OEvoabConnection* _pConnection );
- void construct( const OUString& _sql );
+ void construct( const OUString& _sql );
- DECLARE_SERVICE_INFO();
- //XInterface
- virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
- virtual void SAL_CALL acquire() noexcept override;
- virtual void SAL_CALL release() noexcept override;
- //XTypeProvider
- virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
+ DECLARE_SERVICE_INFO();
+ //XInterface
+ virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
+ virtual void SAL_CALL acquire() noexcept override;
+ virtual void SAL_CALL release() noexcept override;
+ //XTypeProvider
+ virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
- // XPreparedStatement
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL executeQuery( ) override;
- virtual sal_Int32 SAL_CALL executeUpdate( ) override;
- virtual sal_Bool SAL_CALL execute( ) override;
- virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL getConnection( ) override;
- // XParameters
- virtual void SAL_CALL setNull( sal_Int32 parameterIndex, sal_Int32 sqlType ) override;
- virtual void SAL_CALL setObjectNull( sal_Int32 parameterIndex, sal_Int32 sqlType, const OUString& typeName ) override;
- virtual void SAL_CALL setBoolean( sal_Int32 parameterIndex, sal_Bool x ) override;
- virtual void SAL_CALL setByte( sal_Int32 parameterIndex, sal_Int8 x ) override;
- virtual void SAL_CALL setShort( sal_Int32 parameterIndex, sal_Int16 x ) override;
- virtual void SAL_CALL setInt( sal_Int32 parameterIndex, sal_Int32 x ) override;
- virtual void SAL_CALL setLong( sal_Int32 parameterIndex, sal_Int64 x ) override;
- virtual void SAL_CALL setFloat( sal_Int32 parameterIndex, float x ) override;
- virtual void SAL_CALL setDouble( sal_Int32 parameterIndex, double x ) override;
- virtual void SAL_CALL setString( sal_Int32 parameterIndex, const OUString& x ) override;
- virtual void SAL_CALL setBytes( sal_Int32 parameterIndex, const css::uno::Sequence< sal_Int8 >& x ) override;
- virtual void SAL_CALL setDate( sal_Int32 parameterIndex, const css::util::Date& x ) override;
- virtual void SAL_CALL setTime( sal_Int32 parameterIndex, const css::util::Time& x ) override;
- virtual void SAL_CALL setTimestamp( sal_Int32 parameterIndex, const css::util::DateTime& x ) override;
- virtual void SAL_CALL setBinaryStream( sal_Int32 parameterIndex, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length ) override;
- virtual void SAL_CALL setCharacterStream( sal_Int32 parameterIndex, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length ) override;
- virtual void SAL_CALL setObject( sal_Int32 parameterIndex, const css::uno::Any& x ) override;
- virtual void SAL_CALL setObjectWithInfo( sal_Int32 parameterIndex, const css::uno::Any& x, sal_Int32 targetSqlType, sal_Int32 scale ) override;
- virtual void SAL_CALL setRef( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XRef >& x ) override;
- virtual void SAL_CALL setBlob( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XBlob >& x ) override;
- virtual void SAL_CALL setClob( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XClob >& x ) override;
- virtual void SAL_CALL setArray( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XArray >& x ) override;
- virtual void SAL_CALL clearParameters( ) override;
- // XCloseable
- virtual void SAL_CALL close( ) override;
- // XResultSetMetaDataSupplier
- virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) override;
- // XMultipleResults
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getResultSet( ) override;
- virtual sal_Int32 SAL_CALL getUpdateCount( ) override;
- virtual sal_Bool SAL_CALL getMoreResults( ) override;
- };
+ // XPreparedStatement
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL executeQuery( ) override;
+ virtual sal_Int32 SAL_CALL executeUpdate( ) override;
+ virtual sal_Bool SAL_CALL execute( ) override;
+ virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL getConnection( ) override;
+ // XParameters
+ virtual void SAL_CALL setNull( sal_Int32 parameterIndex, sal_Int32 sqlType ) override;
+ virtual void SAL_CALL setObjectNull( sal_Int32 parameterIndex, sal_Int32 sqlType, const OUString& typeName ) override;
+ virtual void SAL_CALL setBoolean( sal_Int32 parameterIndex, sal_Bool x ) override;
+ virtual void SAL_CALL setByte( sal_Int32 parameterIndex, sal_Int8 x ) override;
+ virtual void SAL_CALL setShort( sal_Int32 parameterIndex, sal_Int16 x ) override;
+ virtual void SAL_CALL setInt( sal_Int32 parameterIndex, sal_Int32 x ) override;
+ virtual void SAL_CALL setLong( sal_Int32 parameterIndex, sal_Int64 x ) override;
+ virtual void SAL_CALL setFloat( sal_Int32 parameterIndex, float x ) override;
+ virtual void SAL_CALL setDouble( sal_Int32 parameterIndex, double x ) override;
+ virtual void SAL_CALL setString( sal_Int32 parameterIndex, const OUString& x ) override;
+ virtual void SAL_CALL setBytes( sal_Int32 parameterIndex, const css::uno::Sequence< sal_Int8 >& x ) override;
+ virtual void SAL_CALL setDate( sal_Int32 parameterIndex, const css::util::Date& x ) override;
+ virtual void SAL_CALL setTime( sal_Int32 parameterIndex, const css::util::Time& x ) override;
+ virtual void SAL_CALL setTimestamp( sal_Int32 parameterIndex, const css::util::DateTime& x ) override;
+ virtual void SAL_CALL setBinaryStream( sal_Int32 parameterIndex, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length ) override;
+ virtual void SAL_CALL setCharacterStream( sal_Int32 parameterIndex, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length ) override;
+ virtual void SAL_CALL setObject( sal_Int32 parameterIndex, const css::uno::Any& x ) override;
+ virtual void SAL_CALL setObjectWithInfo( sal_Int32 parameterIndex, const css::uno::Any& x, sal_Int32 targetSqlType, sal_Int32 scale ) override;
+ virtual void SAL_CALL setRef( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XRef >& x ) override;
+ virtual void SAL_CALL setBlob( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XBlob >& x ) override;
+ virtual void SAL_CALL setClob( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XClob >& x ) override;
+ virtual void SAL_CALL setArray( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XArray >& x ) override;
+ virtual void SAL_CALL clearParameters( ) override;
+ // XCloseable
+ virtual void SAL_CALL close( ) override;
+ // XResultSetMetaDataSupplier
+ virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) override;
+ // XMultipleResults
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getResultSet( ) override;
+ virtual sal_Int32 SAL_CALL getUpdateCount( ) override;
+ virtual sal_Bool SAL_CALL getMoreResults( ) override;
+ };
}
diff --git a/connectivity/source/drivers/evoab2/NResultSet.cxx b/connectivity/source/drivers/evoab2/NResultSet.cxx
index c0b31cc100e4..95a25d664602 100644
--- a/connectivity/source/drivers/evoab2/NResultSet.cxx
+++ b/connectivity/source/drivers/evoab2/NResultSet.cxx
@@ -36,7 +36,7 @@
#include <connectivity/sqlerror.hxx>
#include <rtl/string.hxx>
#include <sal/log.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <unotools/syslocale.hxx>
#include <unotools/intlwrapper.hxx>
#include <unotools/collatorwrapper.hxx>
@@ -51,7 +51,6 @@ using namespace com::sun::star::uno;
using namespace com::sun::star::lang;
using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
-using namespace com::sun::star::sdbcx;
using namespace com::sun::star::container;
using namespace com::sun::star::io;
namespace ErrorCondition = ::com::sun::star::sdb::ErrorCondition;
@@ -59,12 +58,12 @@ namespace ErrorCondition = ::com::sun::star::sdb::ErrorCondition;
OUString SAL_CALL OEvoabResultSet::getImplementationName( )
{
- return "com.sun.star.sdbcx.evoab.ResultSet";
+ return u"com.sun.star.sdbcx.evoab.ResultSet"_ustr;
}
Sequence< OUString > SAL_CALL OEvoabResultSet::getSupportedServiceNames( )
{
- return { "com.sun.star.sdbc.ResultSet" };
+ return { u"com.sun.star.sdbc.ResultSet"_ustr };
}
sal_Bool SAL_CALL OEvoabResultSet::supportsService( const OUString& _rServiceName )
@@ -88,7 +87,7 @@ static OUString
valueToOUString( GValue& _rValue )
{
const char *pStr = g_value_get_string( &_rValue );
- OString aStr( pStr ? pStr : "" );
+ std::string_view aStr( pStr ? pStr : "" );
OUString sResult( OStringToOUString( aStr, RTL_TEXTENCODING_UTF8 ) );
g_value_unset( &_rValue );
return sResult;
@@ -308,6 +307,10 @@ static int CompareContacts( gconstpointer _lhs, gconstpointer _rhs, gpointer _us
for ( const auto& sortCol : rCompData.rSortOrder )
{
sal_Int32 nField = sortCol.nField;
+ int nOrder = 1;
+ // if descending sort, reverse order
+ if (!sortCol.bAscending)
+ nOrder = -1;
GType eFieldType = evoab::getGFieldType( nField );
bool success = getValue( lhs, nField, eFieldType, &aLhsValue, bLhsNull )
@@ -317,9 +320,9 @@ static int CompareContacts( gconstpointer _lhs, gconstpointer _rhs, gpointer _us
return 0;
if ( bLhsNull && !bRhsNull )
- return -1;
+ return -1 * nOrder;
if ( !bLhsNull && bRhsNull )
- return 1;
+ return 1 * nOrder;
if ( bLhsNull && bRhsNull )
continue;
@@ -329,16 +332,16 @@ static int CompareContacts( gconstpointer _lhs, gconstpointer _rhs, gpointer _us
sRhs = valueToOUString( aRhsValue );
sal_Int32 nCompResult = rCompData.aIntlWrapper.getCaseCollator()->compareString( sLhs, sRhs );
if ( nCompResult != 0 )
- return nCompResult;
+ return nCompResult * nOrder;
continue;
}
bLhs = valueToBool( aLhsValue );
bRhs = valueToBool( aRhsValue );
if ( bLhs && !bRhs )
- return -1;
+ return -1 * nOrder;
if ( !bLhs && bRhs )
- return 1;
+ return 1 * nOrder;
continue;
}
@@ -398,7 +401,7 @@ public:
break;
}
}
- g_list_foreach (pSources, reinterpret_cast<GFunc>(g_object_unref), nullptr);
+ g_list_foreach (pSources, object_unref, nullptr);
g_list_free (pSources);
if (!id)
return nullptr;
@@ -431,7 +434,7 @@ public:
m_pContacts = nullptr;
}
- virtual void executeQuery (EBook* pBook, EBookQuery* pQuery, OString &/*rPassword*/) override
+ virtual void executeQuery (EBook* pBook, EBookQuery* pQuery) override
{
freeContacts();
char *sexp = e_book_query_to_string( pQuery );
@@ -476,123 +479,7 @@ class OEvoabVersion38Helper : public OEvoabVersion36Helper
protected:
virtual EBookClient * createClient( ESource *pSource ) override
{
- return e_book_client_connect_direct_sync (get_e_source_registry (), pSource, nullptr, nullptr);
- }
-};
-
-ESource * findSource( const char *id )
-{
- ESourceList *pSourceList = nullptr;
-
- g_return_val_if_fail (id != nullptr, nullptr);
-
- if (!e_book_get_addressbooks (&pSourceList, nullptr))
- pSourceList = nullptr;
-
- for ( GSList *g = e_source_list_peek_groups (pSourceList); g; g = g->next)
- {
- for (GSList *s = e_source_group_peek_sources (E_SOURCE_GROUP (g->data)); s; s = s->next)
- {
- ESource *pSource = E_SOURCE (s->data);
- if (!strcmp (e_source_peek_name (pSource), id))
- return pSource;
- }
- }
- return nullptr;
-}
-
-bool isAuthRequired( EBook *pBook )
-{
- return e_source_get_property( e_book_get_source( pBook ),
- "auth" ) != nullptr;
-}
-
-class OEvoabVersion35Helper : public OEvoabVersionHelper
-{
-private:
- GList *m_pContacts;
-
-public:
- OEvoabVersion35Helper()
- : m_pContacts(nullptr)
- {
- }
-
- virtual ~OEvoabVersion35Helper() override
- {
- freeContacts();
- }
-
- virtual EBook* openBook(const char *abname) override
- {
- ESource *pSource = findSource (abname);
- EBook *pBook = pSource ? e_book_new (pSource, nullptr) : nullptr;
- if (pBook && !e_book_open (pBook, true, nullptr))
- {
- g_object_unref (G_OBJECT (pBook));
- pBook = nullptr;
- }
- return pBook;
- }
-
- virtual bool isLDAP( EBook *pBook ) override
- {
- return pBook && !strncmp( "ldap://", e_book_get_uri( pBook ), 6 );
- }
-
- virtual bool isLocal( EBook *pBook ) override
- {
- return pBook && ( !strncmp( "file://", e_book_get_uri( pBook ), 6 ) ||
- !strncmp( "local:", e_book_get_uri( pBook ), 6 ) );
- }
-
- virtual void freeContacts() override final
- {
- g_list_free(m_pContacts);
- m_pContacts = nullptr;
- }
-
- virtual void executeQuery (EBook* pBook, EBookQuery* pQuery, OString &rPassword) override
- {
- freeContacts();
-
- ESource *pSource = e_book_get_source( pBook );
- bool bAuthSuccess = true;
-
- if( isAuthRequired( pBook ) )
- {
- OString aUser( getUserName( pBook ) );
- const char *pAuth = e_source_get_property( pSource, "auth" );
- bAuthSuccess = e_book_authenticate_user( pBook, aUser.getStr(), rPassword.getStr(), pAuth, nullptr );
- }
-
- if (bAuthSuccess)
- e_book_get_contacts( pBook, pQuery, &m_pContacts, nullptr );
- }
-
- virtual EContact *getContact(sal_Int32 nIndex) override
- {
- gpointer pData = g_list_nth_data (m_pContacts, nIndex);
- return pData ? E_CONTACT (pData) : nullptr;
- }
-
- virtual sal_Int32 getNumContacts() override
- {
- return g_list_length( m_pContacts );
- }
-
- virtual bool hasContacts() override
- {
- return m_pContacts != nullptr;
- }
-
- virtual void sortContacts( const ComparisonData& _rCompData ) override
- {
- OSL_ENSURE( !_rCompData.rSortOrder.empty(), "sortContacts: no need to call this without any sort order!" );
- ENSURE_OR_THROW( _rCompData.aIntlWrapper.getCaseCollator(), "no collator for comparing strings" );
-
- m_pContacts = g_list_sort_with_data( m_pContacts, &CompareContacts,
- const_cast< gpointer >( static_cast< gconstpointer >( &_rCompData ) ) );
+ return e_book_client_connect_direct_sync (get_e_source_registry (), pSource, 10, nullptr, nullptr);
}
};
@@ -611,12 +498,7 @@ OEvoabResultSet::OEvoabResultSet( OCommonStatement* pStmt, OEvoabConnection *pCo
,m_nIndex(-1)
,m_nLength(0)
{
- if (eds_check_version( 3, 7, 6 ) == nullptr)
- m_pVersionHelper = std::make_unique<OEvoabVersion38Helper>();
- else if (eds_check_version( 3, 6, 0 ) == nullptr)
- m_pVersionHelper = std::make_unique<OEvoabVersion36Helper>();
- else
- m_pVersionHelper = std::make_unique<OEvoabVersion35Helper>();
+ m_pVersionHelper = std::make_unique<OEvoabVersion38Helper>();
registerProperty(
OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
@@ -687,9 +569,7 @@ void OEvoabResultSet::construct( const QueryData& _rData )
}
if ( bExecuteQuery )
{
- OString aPassword = m_pConnection->getPassword();
- m_pVersionHelper->executeQuery(pBook, _rData.getQuery(), aPassword);
- m_pConnection->setPassword( aPassword );
+ m_pVersionHelper->executeQuery(pBook, _rData.getQuery());
if ( m_pVersionHelper->hasContacts() && !_rData.aSortOrder.empty() )
{
@@ -777,103 +657,103 @@ sal_Bool SAL_CALL OEvoabResultSet::getBoolean( sal_Int32 nColumnNum )
sal_Int64 SAL_CALL OEvoabResultSet::getLong( sal_Int32 /*nColumnNum*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getLong", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getLong"_ustr, *this );
return sal_Int64();
}
Reference< XArray > SAL_CALL OEvoabResultSet::getArray( sal_Int32 /*nColumnNum*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getArray", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getArray"_ustr, *this );
return nullptr;
}
Reference< XClob > SAL_CALL OEvoabResultSet::getClob( sal_Int32 /*nColumnNum*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getClob", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getClob"_ustr, *this );
return nullptr;
}
Reference< XBlob > SAL_CALL OEvoabResultSet::getBlob( sal_Int32 /*nColumnNum*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getBlob", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getBlob"_ustr, *this );
return nullptr;
}
Reference< XRef > SAL_CALL OEvoabResultSet::getRef( sal_Int32 /*nColumnNum*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getRef", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getRef"_ustr, *this );
return nullptr;
}
Any SAL_CALL OEvoabResultSet::getObject( sal_Int32 /*nColumnNum*/, const Reference< css::container::XNameAccess >& /*typeMap*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getObject", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getObject"_ustr, *this );
return Any();
}
sal_Int16 SAL_CALL OEvoabResultSet::getShort( sal_Int32 /*nColumnNum*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getShort", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getShort"_ustr, *this );
return 0;
}
css::util::Time SAL_CALL OEvoabResultSet::getTime( sal_Int32 /*nColumnNum*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getTime", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getTime"_ustr, *this );
return css::util::Time();
}
util::DateTime SAL_CALL OEvoabResultSet::getTimestamp( sal_Int32 /*nColumnNum*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getTimestamp", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getTimestamp"_ustr, *this );
return css::util::DateTime();
}
Reference< XInputStream > SAL_CALL OEvoabResultSet::getBinaryStream( sal_Int32 /*nColumnNum*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getBinaryStream", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getBinaryStream"_ustr, *this );
return nullptr;
}
Reference< XInputStream > SAL_CALL OEvoabResultSet::getCharacterStream( sal_Int32 /*nColumnNum*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getCharacterStream", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getCharacterStream"_ustr, *this );
return nullptr;
}
sal_Int8 SAL_CALL OEvoabResultSet::getByte( sal_Int32 /*nColumnNum*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getByte", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getByte"_ustr, *this );
return 0;
}
Sequence< sal_Int8 > SAL_CALL OEvoabResultSet::getBytes( sal_Int32 /*nColumnNum*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getBytes", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getBytes"_ustr, *this );
return Sequence< sal_Int8 >();
}
css::util::Date SAL_CALL OEvoabResultSet::getDate( sal_Int32 /*nColumnNum*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getDate", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getDate"_ustr, *this );
return css::util::Date();
}
double SAL_CALL OEvoabResultSet::getDouble( sal_Int32 /*nColumnNum*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getDouble", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getDouble"_ustr, *this );
return 0;
}
float SAL_CALL OEvoabResultSet::getFloat( sal_Int32 /*nColumnNum*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getFloat", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getFloat"_ustr, *this );
return 0;
}
sal_Int32 SAL_CALL OEvoabResultSet::getInt( sal_Int32 /*nColumnNum*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getInt", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getInt"_ustr, *this );
return 0;
}
// XRow Interface Ends
@@ -1031,8 +911,7 @@ Reference< XInterface > SAL_CALL OEvoabResultSet::getStatement( )
{
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- css::uno::WeakReferenceHelper aStatement(static_cast<OWeakObject*>(m_pStatement));
- return aStatement.get();
+ return cppu::getXWeak(m_pStatement);
}
diff --git a/connectivity/source/drivers/evoab2/NResultSet.hxx b/connectivity/source/drivers/evoab2/NResultSet.hxx
index 74a5e40dda1f..659fa4ff4b20 100644
--- a/connectivity/source/drivers/evoab2/NResultSet.hxx
+++ b/connectivity/source/drivers/evoab2/NResultSet.hxx
@@ -43,139 +43,139 @@
namespace connectivity::evoab
{
- struct ComparisonData;
-
- class OEvoabVersionHelper
- {
- public:
- virtual EBook* openBook(const char *abname) = 0;
- virtual void executeQuery (EBook* pBook, EBookQuery* pQuery, OString &rPassword) = 0;
- virtual void freeContacts() = 0;
- virtual bool isLDAP( EBook *pBook ) = 0;
- virtual bool isLocal( EBook *pBook ) = 0;
- virtual EContact *getContact(sal_Int32 nIndex) = 0;
- virtual sal_Int32 getNumContacts() = 0;
- virtual bool hasContacts() = 0;
- virtual void sortContacts( const ComparisonData& _rCompData ) = 0;
- OString getUserName( EBook *pBook );
- virtual ~OEvoabVersionHelper() {}
- };
-
- typedef ::cppu::WeakComponentImplHelper< css::sdbc::XResultSet
- , css::sdbc::XRow
- , css::sdbc::XResultSetMetaDataSupplier
- , css::util::XCancellable
- , css::sdbc::XWarningsSupplier
- , css::sdbc::XCloseable
- , css::sdbc::XColumnLocate
- , css::lang::XServiceInfo
- > OResultSet_BASE;
-
-
- class OEvoabResultSet final : public cppu::BaseMutex
- ,public OResultSet_BASE
- ,public ::comphelper::OPropertyContainer
- ,public ::comphelper::OPropertyArrayUsageHelper<OEvoabResultSet>
+ struct ComparisonData;
+
+ class OEvoabVersionHelper
+ {
+ public:
+ virtual EBook* openBook(const char *abname) = 0;
+ virtual void executeQuery (EBook* pBook, EBookQuery* pQuery) = 0;
+ virtual void freeContacts() = 0;
+ virtual bool isLDAP( EBook *pBook ) = 0;
+ virtual bool isLocal( EBook *pBook ) = 0;
+ virtual EContact *getContact(sal_Int32 nIndex) = 0;
+ virtual sal_Int32 getNumContacts() = 0;
+ virtual bool hasContacts() = 0;
+ virtual void sortContacts( const ComparisonData& _rCompData ) = 0;
+ OString getUserName( EBook *pBook );
+ virtual ~OEvoabVersionHelper() {}
+ };
+
+ typedef ::cppu::WeakComponentImplHelper< css::sdbc::XResultSet
+ , css::sdbc::XRow
+ , css::sdbc::XResultSetMetaDataSupplier
+ , css::util::XCancellable
+ , css::sdbc::XWarningsSupplier
+ , css::sdbc::XCloseable
+ , css::sdbc::XColumnLocate
+ , css::lang::XServiceInfo
+ > OResultSet_BASE;
+
+
+ class OEvoabResultSet final : public cppu::BaseMutex
+ ,public OResultSet_BASE
+ ,public ::comphelper::OPropertyContainer
+ ,public ::comphelper::OPropertyArrayUsageHelper<OEvoabResultSet>
+ {
+ private:
+ std::unique_ptr<OEvoabVersionHelper> m_pVersionHelper;
+
+ OCommonStatement* m_pStatement;
+ OEvoabConnection* m_pConnection;
+ rtl::Reference<OEvoabResultSetMetaData> m_xMetaData;
+ ::dbtools::WarningsContainer m_aWarnings;
+
+ bool m_bWasNull;
+ // <properties>
+ sal_Int32 m_nFetchSize;
+ sal_Int32 m_nResultSetType;
+ sal_Int32 m_nFetchDirection;
+ sal_Int32 m_nResultSetConcurrency;
+ // </properties>
+
+ // Data & iteration
+ sal_Int32 m_nIndex;
+ sal_Int32 m_nLength;
+ EContact *getCur()
{
- private:
- std::unique_ptr<OEvoabVersionHelper> m_pVersionHelper;
-
- OCommonStatement* m_pStatement;
- OEvoabConnection* m_pConnection;
- rtl::Reference<OEvoabResultSetMetaData> m_xMetaData;
- ::dbtools::WarningsContainer m_aWarnings;
-
- bool m_bWasNull;
- // <properties>
- sal_Int32 m_nFetchSize;
- sal_Int32 m_nResultSetType;
- sal_Int32 m_nFetchDirection;
- sal_Int32 m_nResultSetConcurrency;
- // </properties>
-
- // Data & iteration
- sal_Int32 m_nIndex;
- sal_Int32 m_nLength;
- EContact *getCur()
- {
- return m_pVersionHelper->getContact(m_nIndex);
- }
-
- // OPropertyArrayUsageHelper
- virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const override;
- // OPropertySetHelper
- virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
-
- // you can't delete objects of this type
- virtual ~OEvoabResultSet() override;
- public:
- DECLARE_SERVICE_INFO();
-
- OEvoabResultSet( OCommonStatement *pStmt, OEvoabConnection *pConnection );
- void construct( const QueryData& _rData );
-
- // ::cppu::OComponentHelper
- virtual void SAL_CALL disposing() override;
- // XInterface
- virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
- virtual void SAL_CALL acquire() noexcept override;
- virtual void SAL_CALL release() noexcept override;
- //XTypeProvider
- virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
- // XPropertySet
- virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) override;
- // XResultSet
- virtual sal_Bool SAL_CALL next( ) override;
- virtual sal_Bool SAL_CALL isBeforeFirst( ) override;
- virtual sal_Bool SAL_CALL isAfterLast( ) override;
- virtual sal_Bool SAL_CALL isFirst( ) override;
- virtual sal_Bool SAL_CALL isLast( ) override;
- virtual void SAL_CALL beforeFirst( ) override;
- virtual void SAL_CALL afterLast( ) override;
- virtual sal_Bool SAL_CALL first( ) override;
- virtual sal_Bool SAL_CALL last( ) override;
- virtual sal_Int32 SAL_CALL getRow( ) override;
- virtual sal_Bool SAL_CALL absolute( sal_Int32 row ) override;
- virtual sal_Bool SAL_CALL relative( sal_Int32 rows ) override;
- virtual sal_Bool SAL_CALL previous( ) override;
- virtual void SAL_CALL refreshRow( ) override;
- virtual sal_Bool SAL_CALL rowUpdated( ) override;
- virtual sal_Bool SAL_CALL rowInserted( ) override;
- virtual sal_Bool SAL_CALL rowDeleted( ) override;
- virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getStatement( ) override;
- // XRow
- virtual sal_Bool SAL_CALL wasNull( ) override;
- virtual OUString SAL_CALL getString( sal_Int32 columnIndex ) override;
- virtual sal_Bool SAL_CALL getBoolean( sal_Int32 columnIndex ) override;
- virtual sal_Int8 SAL_CALL getByte( sal_Int32 columnIndex ) override;
- virtual sal_Int16 SAL_CALL getShort( sal_Int32 columnIndex ) override;
- virtual sal_Int32 SAL_CALL getInt( sal_Int32 columnIndex ) override;
- virtual sal_Int64 SAL_CALL getLong( sal_Int32 columnIndex ) override;
- virtual float SAL_CALL getFloat( sal_Int32 columnIndex ) override;
- virtual double SAL_CALL getDouble( sal_Int32 columnIndex ) override;
- virtual css::uno::Sequence< sal_Int8 > SAL_CALL getBytes( sal_Int32 columnIndex ) override;
- virtual css::util::Date SAL_CALL getDate( sal_Int32 columnIndex ) override;
- virtual css::util::Time SAL_CALL getTime( sal_Int32 columnIndex ) override;
- virtual css::util::DateTime SAL_CALL getTimestamp( sal_Int32 columnIndex ) override;
- virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getBinaryStream( sal_Int32 columnIndex ) override;
- virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getCharacterStream( sal_Int32 columnIndex ) override;
- virtual css::uno::Any SAL_CALL getObject( sal_Int32 columnIndex, const css::uno::Reference< css::container::XNameAccess >& typeMap ) override;
- virtual css::uno::Reference< css::sdbc::XRef > SAL_CALL getRef( sal_Int32 columnIndex ) override;
- virtual css::uno::Reference< css::sdbc::XBlob > SAL_CALL getBlob( sal_Int32 columnIndex ) override;
- virtual css::uno::Reference< css::sdbc::XClob > SAL_CALL getClob( sal_Int32 columnIndex ) override;
- virtual css::uno::Reference< css::sdbc::XArray > SAL_CALL getArray( sal_Int32 columnIndex ) override;
- // XCancellable
- virtual void SAL_CALL cancel( ) override;
- // XCloseable
- virtual void SAL_CALL close( ) override;
- // XResultSetMetaDataSupplier
- virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) override;
- // XWarningsSupplier
- virtual css::uno::Any SAL_CALL getWarnings( ) override;
- virtual void SAL_CALL clearWarnings( ) override;
- // XColumnLocate
- virtual sal_Int32 SAL_CALL findColumn( const OUString& columnName ) override;
- };
+ return m_pVersionHelper->getContact(m_nIndex);
+ }
+
+ // OPropertyArrayUsageHelper
+ virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const override;
+ // OPropertySetHelper
+ virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
+
+ // you can't delete objects of this type
+ virtual ~OEvoabResultSet() override;
+ public:
+ DECLARE_SERVICE_INFO();
+
+ OEvoabResultSet( OCommonStatement *pStmt, OEvoabConnection *pConnection );
+ void construct( const QueryData& _rData );
+
+ // ::cppu::OComponentHelper
+ virtual void SAL_CALL disposing() override;
+ // XInterface
+ virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
+ virtual void SAL_CALL acquire() noexcept override;
+ virtual void SAL_CALL release() noexcept override;
+ //XTypeProvider
+ virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
+ // XPropertySet
+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) override;
+ // XResultSet
+ virtual sal_Bool SAL_CALL next( ) override;
+ virtual sal_Bool SAL_CALL isBeforeFirst( ) override;
+ virtual sal_Bool SAL_CALL isAfterLast( ) override;
+ virtual sal_Bool SAL_CALL isFirst( ) override;
+ virtual sal_Bool SAL_CALL isLast( ) override;
+ virtual void SAL_CALL beforeFirst( ) override;
+ virtual void SAL_CALL afterLast( ) override;
+ virtual sal_Bool SAL_CALL first( ) override;
+ virtual sal_Bool SAL_CALL last( ) override;
+ virtual sal_Int32 SAL_CALL getRow( ) override;
+ virtual sal_Bool SAL_CALL absolute( sal_Int32 row ) override;
+ virtual sal_Bool SAL_CALL relative( sal_Int32 rows ) override;
+ virtual sal_Bool SAL_CALL previous( ) override;
+ virtual void SAL_CALL refreshRow( ) override;
+ virtual sal_Bool SAL_CALL rowUpdated( ) override;
+ virtual sal_Bool SAL_CALL rowInserted( ) override;
+ virtual sal_Bool SAL_CALL rowDeleted( ) override;
+ virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getStatement( ) override;
+ // XRow
+ virtual sal_Bool SAL_CALL wasNull( ) override;
+ virtual OUString SAL_CALL getString( sal_Int32 columnIndex ) override;
+ virtual sal_Bool SAL_CALL getBoolean( sal_Int32 columnIndex ) override;
+ virtual sal_Int8 SAL_CALL getByte( sal_Int32 columnIndex ) override;
+ virtual sal_Int16 SAL_CALL getShort( sal_Int32 columnIndex ) override;
+ virtual sal_Int32 SAL_CALL getInt( sal_Int32 columnIndex ) override;
+ virtual sal_Int64 SAL_CALL getLong( sal_Int32 columnIndex ) override;
+ virtual float SAL_CALL getFloat( sal_Int32 columnIndex ) override;
+ virtual double SAL_CALL getDouble( sal_Int32 columnIndex ) override;
+ virtual css::uno::Sequence< sal_Int8 > SAL_CALL getBytes( sal_Int32 columnIndex ) override;
+ virtual css::util::Date SAL_CALL getDate( sal_Int32 columnIndex ) override;
+ virtual css::util::Time SAL_CALL getTime( sal_Int32 columnIndex ) override;
+ virtual css::util::DateTime SAL_CALL getTimestamp( sal_Int32 columnIndex ) override;
+ virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getBinaryStream( sal_Int32 columnIndex ) override;
+ virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getCharacterStream( sal_Int32 columnIndex ) override;
+ virtual css::uno::Any SAL_CALL getObject( sal_Int32 columnIndex, const css::uno::Reference< css::container::XNameAccess >& typeMap ) override;
+ virtual css::uno::Reference< css::sdbc::XRef > SAL_CALL getRef( sal_Int32 columnIndex ) override;
+ virtual css::uno::Reference< css::sdbc::XBlob > SAL_CALL getBlob( sal_Int32 columnIndex ) override;
+ virtual css::uno::Reference< css::sdbc::XClob > SAL_CALL getClob( sal_Int32 columnIndex ) override;
+ virtual css::uno::Reference< css::sdbc::XArray > SAL_CALL getArray( sal_Int32 columnIndex ) override;
+ // XCancellable
+ virtual void SAL_CALL cancel( ) override;
+ // XCloseable
+ virtual void SAL_CALL close( ) override;
+ // XResultSetMetaDataSupplier
+ virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) override;
+ // XWarningsSupplier
+ virtual css::uno::Any SAL_CALL getWarnings( ) override;
+ virtual void SAL_CALL clearWarnings( ) override;
+ // XColumnLocate
+ virtual sal_Int32 SAL_CALL findColumn( const OUString& columnName ) override;
+ };
}
diff --git a/connectivity/source/drivers/evoab2/NResultSetMetaData.cxx b/connectivity/source/drivers/evoab2/NResultSetMetaData.cxx
index a980c2067041..a828b127fe68 100644
--- a/connectivity/source/drivers/evoab2/NResultSetMetaData.cxx
+++ b/connectivity/source/drivers/evoab2/NResultSetMetaData.cxx
@@ -21,14 +21,14 @@
#include "NDatabaseMetaData.hxx"
#include <connectivity/dbexception.hxx>
#include <strings.hrc>
+#include <utility>
using namespace connectivity::evoab;
using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
using namespace com::sun::star::sdbc;
-OEvoabResultSetMetaData::OEvoabResultSetMetaData(const OUString& _aTableName)
- : m_aTableName(_aTableName)
+OEvoabResultSetMetaData::OEvoabResultSetMetaData(OUString _aTableName)
+ : m_aTableName(std::move(_aTableName))
{
}
@@ -101,15 +101,7 @@ OUString SAL_CALL OEvoabResultSetMetaData::getColumnTypeName( sal_Int32 nColumnN
OUString SAL_CALL OEvoabResultSetMetaData::getColumnLabel( sal_Int32 nColumnNum )
{
- sal_uInt32 nField = m_aEvoabFields[nColumnNum - 1];
- const ColumnProperty *pSpecs = getField(nField);
- GParamSpec *pSpec = pSpecs->pField;
- OUString aLabel;
-
- if( pSpec )
- aLabel = OStringToOUString( g_param_spec_get_nick( pSpec ),
- RTL_TEXTENCODING_UTF8 );
- return aLabel;
+ return getColumnName(nColumnNum);
}
OUString SAL_CALL OEvoabResultSetMetaData::getColumnServiceName( sal_Int32 /*nColumnNum*/ )
diff --git a/connectivity/source/drivers/evoab2/NResultSetMetaData.hxx b/connectivity/source/drivers/evoab2/NResultSetMetaData.hxx
index 66fffb984e4f..e79d347b1c4d 100644
--- a/connectivity/source/drivers/evoab2/NResultSetMetaData.hxx
+++ b/connectivity/source/drivers/evoab2/NResultSetMetaData.hxx
@@ -40,7 +40,7 @@ namespace connectivity::evoab
protected:
virtual ~OEvoabResultSetMetaData() override;
public:
- explicit OEvoabResultSetMetaData(const OUString& _aTableName);
+ explicit OEvoabResultSetMetaData(OUString _aTableName);
/// @throws css::sdbc::SQLException
void setEvoabFields(const ::rtl::Reference<connectivity::OSQLColumns> &xColumns);
sal_uInt32 fieldAtColumn(sal_Int32 columnIndex) const
diff --git a/connectivity/source/drivers/evoab2/NStatement.cxx b/connectivity/source/drivers/evoab2/NStatement.cxx
index 542ee1de8d45..8fee66699b3d 100644
--- a/connectivity/source/drivers/evoab2/NStatement.cxx
+++ b/connectivity/source/drivers/evoab2/NStatement.cxx
@@ -38,7 +38,7 @@
#include <sqlbison.hxx>
#include <strings.hrc>
#include <connectivity/dbexception.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
namespace connectivity::evoab {
@@ -49,7 +49,6 @@ using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
using namespace com::sun::star::sdbcx;
using namespace com::sun::star::container;
-using namespace com::sun::star::io;
using namespace com::sun::star::util;
namespace {
@@ -161,7 +160,7 @@ OCommonStatement::~OCommonStatement()
void OCommonStatement::disposeResultSet()
{
// free the cursor if alive
- Reference< XComponent > xComp(m_xResultSet.get(), UNO_QUERY);
+ rtl::Reference< OEvoabResultSet > xComp(m_xResultSet);
if (xComp.is())
xComp->dispose();
m_xResultSet.clear();
@@ -268,8 +267,11 @@ void OCommonStatement::orderByAnalysis( const OSQLParseNode* _pOrderByClause, So
ENSURE_OR_THROW(
( pColumnRef != nullptr )
&& ( pAscDesc != nullptr )
- && SQL_ISRULE( pAscDesc, opt_asc_desc )
- && ( pAscDesc->count() < 2 ),
+ && ( pAscDesc->isLeaf() )
+ && ( SQL_ISRULE( pAscDesc, opt_asc_desc )
+ || SQL_ISTOKEN(pAscDesc, ASC)
+ || SQL_ISTOKEN(pAscDesc, DESC)
+ ),
"ordering_spec structure error" );
// column name -> column field
@@ -278,11 +280,7 @@ void OCommonStatement::orderByAnalysis( const OSQLParseNode* _pOrderByClause, So
const OUString sColumnName( impl_getColumnRefColumnName_throw( *pColumnRef ) );
guint nField = evoab::findEvoabField( sColumnName );
// ascending/descending?
- bool bAscending = true;
- if ( ( pAscDesc->count() == 1 )
- && SQL_ISTOKEN( pAscDesc->getChild( 0 ), DESC )
- )
- bAscending = false;
+ bool bAscending = !SQL_ISTOKEN(pAscDesc, DESC);
_out_rSort.push_back( FieldSort( nField, bAscending ) );
}
@@ -506,6 +504,7 @@ void OCommonStatement::parseSql( const OUString& sql, QueryData& _out_rQueryData
pOrderByClause->showParseTree( sTreeDebug );
SAL_INFO( "connectivity.evoab2", "found order-by tree:\n" << sTreeDebug );
#endif
+
orderByAnalysis( pOrderByClause, _out_rQueryData.aSortOrder );
}
@@ -549,7 +548,7 @@ Any SAL_CALL OCommonStatement::getWarnings( )
checkDisposed(OCommonStatement_IBase::rBHelper.bDisposed);
- return makeAny(SQLWarning());
+ return Any(SQLWarning());
}
@@ -614,7 +613,7 @@ Reference< XResultSet > OCommonStatement::impl_executeQuery_throw( const QueryDa
pResult->construct( _rQueryData );
// done
- m_xResultSet = pResult;
+ m_xResultSet = pResult.get();
return pResult;
}
@@ -641,7 +640,7 @@ Reference< XPropertySetInfo > SAL_CALL OCommonStatement::getPropertySetInfo( )
// = OStatement
-IMPLEMENT_SERVICE_INFO( OStatement, "com.sun.star.comp.sdbcx.evoab.OStatement", "com.sun.star.sdbc.Statement" );
+IMPLEMENT_SERVICE_INFO( OStatement, u"com.sun.star.comp.sdbcx.evoab.OStatement"_ustr, u"com.sun.star.sdbc.Statement"_ustr );
IMPLEMENT_FORWARD_XINTERFACE2( OStatement, OCommonStatement, OStatement_IBase )
@@ -673,7 +672,7 @@ sal_Int32 SAL_CALL OStatement::executeUpdate( const OUString& /*sql*/ )
{
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OCommonStatement_IBase::rBHelper.bDisposed);
- ::dbtools::throwFeatureNotImplementedSQLException( "XStatement::executeUpdate", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XStatement::executeUpdate"_ustr, *this );
return 0;
}
diff --git a/connectivity/source/drivers/evoab2/NStatement.hxx b/connectivity/source/drivers/evoab2/NStatement.hxx
index a348c5335d56..302c6d8ac1ad 100644
--- a/connectivity/source/drivers/evoab2/NStatement.hxx
+++ b/connectivity/source/drivers/evoab2/NStatement.hxx
@@ -36,6 +36,7 @@
#include <com/sun/star/util/XCancellable.hpp>
#include <cppuhelper/compbase.hxx>
#include <comphelper/propertycontainer.hxx>
+#include <unotools/weakref.hxx>
#include "EApi.h"
#include "NConnection.hxx"
@@ -44,229 +45,231 @@
namespace connectivity::evoab
{
- typedef ::cppu::WeakComponentImplHelper< css::sdbc::XWarningsSupplier
- , css::sdbc::XCloseable
- > OCommonStatement_IBase;
-
- struct FieldSort
+ class OEvoabResultSet;
+
+ typedef ::cppu::WeakComponentImplHelper< css::sdbc::XWarningsSupplier
+ , css::sdbc::XCloseable
+ > OCommonStatement_IBase;
+
+ struct FieldSort
+ {
+ sal_Int32 nField;
+ bool bAscending;
+
+ FieldSort( const sal_Int32 _nField, const bool _bAscending ) : nField( _nField ), bAscending( _bAscending ) { }
+ };
+ typedef std::vector< FieldSort > SortDescriptor;
+
+ enum QueryFilterType
+ {
+ eFilterAlwaysFalse,
+ eFilterNone,
+ eFilterOther
+ };
+
+ class EBookQueryWrapper
+ {
+ private:
+ EBookQuery* mpQuery;
+ public:
+ EBookQueryWrapper()
+ : mpQuery(nullptr)
{
- sal_Int32 nField;
- bool bAscending;
-
- FieldSort( const sal_Int32 _nField, const bool _bAscending ) : nField( _nField ), bAscending( _bAscending ) { }
- };
- typedef std::vector< FieldSort > SortDescriptor;
-
- enum QueryFilterType
+ }
+ EBookQueryWrapper(const EBookQueryWrapper& rhs)
+ : mpQuery(rhs.mpQuery)
{
- eFilterAlwaysFalse,
- eFilterNone,
- eFilterOther
- };
-
- class EBookQueryWrapper
+ if (mpQuery)
+ e_book_query_ref(mpQuery);
+ }
+ EBookQueryWrapper(EBookQueryWrapper&& rhs) noexcept
+ : mpQuery(rhs.mpQuery)
+ {
+ rhs.mpQuery = nullptr;
+ }
+ void reset(EBookQuery* pQuery)
+ {
+ if (mpQuery)
+ e_book_query_unref(mpQuery);
+ mpQuery = pQuery;
+ if (mpQuery)
+ e_book_query_ref(mpQuery);
+ }
+ EBookQueryWrapper& operator=(const EBookQueryWrapper& rhs)
{
- private:
- EBookQuery* mpQuery;
- public:
- EBookQueryWrapper()
- : mpQuery(nullptr)
- {
- }
- EBookQueryWrapper(const EBookQueryWrapper& rhs)
- : mpQuery(rhs.mpQuery)
- {
- if (mpQuery)
- e_book_query_ref(mpQuery);
- }
- EBookQueryWrapper(EBookQueryWrapper&& rhs) noexcept
- : mpQuery(rhs.mpQuery)
- {
- rhs.mpQuery = nullptr;
- }
- void reset(EBookQuery* pQuery)
- {
- if (mpQuery)
- e_book_query_unref(mpQuery);
- mpQuery = pQuery;
- if (mpQuery)
- e_book_query_ref(mpQuery);
- }
- EBookQueryWrapper& operator=(const EBookQueryWrapper& rhs)
- {
- if (this != &rhs)
- reset(rhs.mpQuery);
- return *this;
- }
- EBookQueryWrapper& operator=(EBookQueryWrapper&& rhs)
- {
- if (mpQuery)
- e_book_query_unref(mpQuery);
- mpQuery = rhs.mpQuery;
- rhs.mpQuery = nullptr;
- return *this;
- }
- ~EBookQueryWrapper()
- {
- if (mpQuery)
- e_book_query_unref(mpQuery);
- }
- EBookQuery* getQuery() const
- {
- return mpQuery;
- }
- };
-
- struct QueryData
+ if (this != &rhs)
+ reset(rhs.mpQuery);
+ return *this;
+ }
+ EBookQueryWrapper& operator=(EBookQueryWrapper&& rhs)
{
- private:
- EBookQueryWrapper aQuery;
-
- public:
- OUString sTable;
- QueryFilterType eFilterType;
- rtl::Reference<connectivity::OSQLColumns> xSelectColumns;
- SortDescriptor aSortOrder;
-
- QueryData()
- : sTable()
- , eFilterType( eFilterOther )
- , xSelectColumns()
- , aSortOrder()
- {
- }
-
- EBookQuery* getQuery() const { return aQuery.getQuery(); }
- void setQuery(EBookQuery* pQuery) { aQuery.reset(pQuery); }
- };
-
- //************ Class: OCommonStatement
- // is a base class for the normal statement and for the prepared statement
-
- class OCommonStatement :public cppu::BaseMutex
- ,public OCommonStatement_IBase
- ,public ::comphelper::OPropertyContainer
- ,public ::comphelper::OPropertyArrayUsageHelper< OCommonStatement >
+ if (mpQuery)
+ e_book_query_unref(mpQuery);
+ mpQuery = rhs.mpQuery;
+ rhs.mpQuery = nullptr;
+ return *this;
+ }
+ ~EBookQueryWrapper()
{
- private:
- css::uno::WeakReference< css::sdbc::XResultSet> m_xResultSet; // The last ResultSet created
- rtl::Reference<OEvoabConnection> m_xConnection;
- connectivity::OSQLParser m_aParser;
- connectivity::OSQLParseTreeIterator m_aSQLIterator;
- connectivity::OSQLParseNode *m_pParseTree;
-
- // <properties>
- OUString m_aCursorName;
- sal_Int32 m_nMaxFieldSize;
- sal_Int32 m_nMaxRows;
- sal_Int32 m_nQueryTimeOut;
- sal_Int32 m_nFetchSize;
- sal_Int32 m_nResultSetType;
- sal_Int32 m_nFetchDirection;
- sal_Int32 m_nResultSetConcurrency;
- bool m_bEscapeProcessing;
- // </properties>
-
- protected:
-
- void disposeResultSet();
-
- // OPropertyArrayUsageHelper
- virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const override;
- // OPropertySetHelper
- virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
-
- virtual ~OCommonStatement() override;
-
- protected:
- void parseSql( const OUString& sql, QueryData& _out_rQueryData );
- EBookQuery *whereAnalysis( const OSQLParseNode* parseTree );
- void orderByAnalysis( const OSQLParseNode* _pOrderByClause, SortDescriptor& _out_rSort );
- OUString getTableName() const;
-
- public:
-
- // other methods
- OEvoabConnection* getOwnConnection() const { return m_xConnection.get(); }
-
- using OCommonStatement_IBase::operator css::uno::Reference< css::uno::XInterface >;
-
- protected:
- explicit OCommonStatement( OEvoabConnection* _pConnection );
-
- // OComponentHelper
- virtual void SAL_CALL disposing() override;
- // XInterface
- virtual void SAL_CALL release() noexcept override;
- virtual void SAL_CALL acquire() noexcept override;
- // XInterface
- virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
- //XTypeProvider
- virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
-
- // XPropertySet
- virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) override;
-
- // XWarningsSupplier
- virtual css::uno::Any SAL_CALL getWarnings( ) override;
- virtual void SAL_CALL clearWarnings( ) override;
-
- // XCloseable
- virtual void SAL_CALL close( ) override;
-
- protected:
- /** will return the EBookQuery representing the statement WHERE condition, or throw
-
- Also, all statement dependent members (such as the parser/iterator) will be inited afterwards.
- */
- QueryData
- impl_getEBookQuery_throw( const OUString& _rSql );
-
- css::uno::Reference< css::sdbc::XResultSet >
- impl_executeQuery_throw( const OUString& _rSql );
-
- css::uno::Reference< css::sdbc::XResultSet >
- impl_executeQuery_throw( const QueryData& _rData );
-
- css::uno::Reference< css::sdbc::XConnection >
- impl_getConnection() { return css::uno::Reference< css::sdbc::XConnection >( m_xConnection ); }
-
- OUString
- impl_getColumnRefColumnName_throw( const ::connectivity::OSQLParseNode& _rColumnRef );
- };
-
- typedef ::cppu::ImplHelper2 < css::lang::XServiceInfo
- , css::sdbc::XStatement
- > OStatement_IBase;
- class OStatement :public OCommonStatement
- ,public OStatement_IBase
+ if (mpQuery)
+ e_book_query_unref(mpQuery);
+ }
+ EBookQuery* getQuery() const
{
- protected:
- virtual ~OStatement() override {}
-
- public:
- explicit OStatement( OEvoabConnection* _pConnection)
- :OCommonStatement( _pConnection)
- {
- }
-
- // XInterface
- virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
- virtual void SAL_CALL acquire() noexcept override;
- virtual void SAL_CALL release() noexcept override;
-
- // XTypeProvider
- DECLARE_XTYPEPROVIDER()
-
- // XServiceInfo
- DECLARE_SERVICE_INFO();
-
- // XStatement
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL executeQuery( const OUString& sql ) override ;
- virtual sal_Int32 SAL_CALL executeUpdate( const OUString& sql ) override ;
- virtual sal_Bool SAL_CALL execute( const OUString& sql ) override ;
- virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL getConnection( ) override ;
- };
+ return mpQuery;
+ }
+ };
+
+ struct QueryData
+ {
+ private:
+ EBookQueryWrapper aQuery;
+
+ public:
+ OUString sTable;
+ QueryFilterType eFilterType;
+ rtl::Reference<connectivity::OSQLColumns> xSelectColumns;
+ SortDescriptor aSortOrder;
+
+ QueryData()
+ : sTable()
+ , eFilterType( eFilterOther )
+ , xSelectColumns()
+ , aSortOrder()
+ {
+ }
+
+ EBookQuery* getQuery() const { return aQuery.getQuery(); }
+ void setQuery(EBookQuery* pQuery) { aQuery.reset(pQuery); }
+ };
+
+ //************ Class: OCommonStatement
+ // is a base class for the normal statement and for the prepared statement
+
+ class OCommonStatement :public cppu::BaseMutex
+ ,public OCommonStatement_IBase
+ ,public ::comphelper::OPropertyContainer
+ ,public ::comphelper::OPropertyArrayUsageHelper< OCommonStatement >
+ {
+ private:
+ unotools::WeakReference< OEvoabResultSet> m_xResultSet; // The last ResultSet created
+ rtl::Reference<OEvoabConnection> m_xConnection;
+ connectivity::OSQLParser m_aParser;
+ connectivity::OSQLParseTreeIterator m_aSQLIterator;
+ connectivity::OSQLParseNode *m_pParseTree;
+
+ // <properties>
+ OUString m_aCursorName;
+ sal_Int32 m_nMaxFieldSize;
+ sal_Int32 m_nMaxRows;
+ sal_Int32 m_nQueryTimeOut;
+ sal_Int32 m_nFetchSize;
+ sal_Int32 m_nResultSetType;
+ sal_Int32 m_nFetchDirection;
+ sal_Int32 m_nResultSetConcurrency;
+ bool m_bEscapeProcessing;
+ // </properties>
+
+ protected:
+
+ void disposeResultSet();
+
+ // OPropertyArrayUsageHelper
+ virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const override;
+ // OPropertySetHelper
+ virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
+
+ virtual ~OCommonStatement() override;
+
+ protected:
+ void parseSql( const OUString& sql, QueryData& _out_rQueryData );
+ EBookQuery *whereAnalysis( const OSQLParseNode* parseTree );
+ void orderByAnalysis( const OSQLParseNode* _pOrderByClause, SortDescriptor& _out_rSort );
+ OUString getTableName() const;
+
+ public:
+
+ // other methods
+ OEvoabConnection* getOwnConnection() const { return m_xConnection.get(); }
+
+ using OCommonStatement_IBase::operator css::uno::Reference< css::uno::XInterface >;
+
+ protected:
+ explicit OCommonStatement( OEvoabConnection* _pConnection );
+
+ // OComponentHelper
+ virtual void SAL_CALL disposing() override;
+ // XInterface
+ virtual void SAL_CALL release() noexcept override;
+ virtual void SAL_CALL acquire() noexcept override;
+ // XInterface
+ virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
+ //XTypeProvider
+ virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
+
+ // XPropertySet
+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) override;
+
+ // XWarningsSupplier
+ virtual css::uno::Any SAL_CALL getWarnings( ) override;
+ virtual void SAL_CALL clearWarnings( ) override;
+
+ // XCloseable
+ virtual void SAL_CALL close( ) override;
+
+ protected:
+ /** will return the EBookQuery representing the statement WHERE condition, or throw
+
+ Also, all statement dependent members (such as the parser/iterator) will be inited afterwards.
+ */
+ QueryData
+ impl_getEBookQuery_throw( const OUString& _rSql );
+
+ css::uno::Reference< css::sdbc::XResultSet >
+ impl_executeQuery_throw( const OUString& _rSql );
+
+ css::uno::Reference< css::sdbc::XResultSet >
+ impl_executeQuery_throw( const QueryData& _rData );
+
+ css::uno::Reference< css::sdbc::XConnection >
+ impl_getConnection() { return css::uno::Reference< css::sdbc::XConnection >( m_xConnection ); }
+
+ OUString
+ impl_getColumnRefColumnName_throw( const ::connectivity::OSQLParseNode& _rColumnRef );
+ };
+
+ typedef ::cppu::ImplHelper2 < css::lang::XServiceInfo
+ , css::sdbc::XStatement
+ > OStatement_IBase;
+ class OStatement :public OCommonStatement
+ ,public OStatement_IBase
+ {
+ protected:
+ virtual ~OStatement() override {}
+
+ public:
+ explicit OStatement( OEvoabConnection* _pConnection)
+ :OCommonStatement( _pConnection)
+ {
+ }
+
+ // XInterface
+ virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
+ virtual void SAL_CALL acquire() noexcept override;
+ virtual void SAL_CALL release() noexcept override;
+
+ // XTypeProvider
+ DECLARE_XTYPEPROVIDER()
+
+ // XServiceInfo
+ DECLARE_SERVICE_INFO();
+
+ // XStatement
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL executeQuery( const OUString& sql ) override ;
+ virtual sal_Int32 SAL_CALL executeUpdate( const OUString& sql ) override ;
+ virtual sal_Bool SAL_CALL execute( const OUString& sql ) override ;
+ virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL getConnection( ) override ;
+ };
}
diff --git a/connectivity/source/drivers/evoab2/NTable.cxx b/connectivity/source/drivers/evoab2/NTable.cxx
index 208c52747768..94a20480f8d2 100644
--- a/connectivity/source/drivers/evoab2/NTable.cxx
+++ b/connectivity/source/drivers/evoab2/NTable.cxx
@@ -24,13 +24,8 @@
#include <com/sun/star/sdbc/XRow.hpp>
using namespace connectivity;
-using namespace ::comphelper;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
using namespace connectivity::evoab;
OEvoabTable::OEvoabTable( sdbcx::OCollection* _pTables,
@@ -58,7 +53,7 @@ void OEvoabTable::refreshColumns()
if (!isNew())
{
Reference< XResultSet > xResult = m_pConnection->getMetaData()->getColumns(
- Any(), m_SchemaName, m_Name, "%");
+ Any(), m_SchemaName, m_Name, u"%"_ustr);
if (xResult.is())
{
diff --git a/connectivity/source/drivers/evoab2/NTable.hxx b/connectivity/source/drivers/evoab2/NTable.hxx
index 0aa30815b9b5..d28f55404799 100644
--- a/connectivity/source/drivers/evoab2/NTable.hxx
+++ b/connectivity/source/drivers/evoab2/NTable.hxx
@@ -24,29 +24,29 @@
namespace connectivity::evoab
{
- typedef connectivity::sdbcx::OTable OEvoabTable_TYPEDEF;
+ typedef connectivity::sdbcx::OTable OEvoabTable_TYPEDEF;
- class OEvoabTable : public OEvoabTable_TYPEDEF
- {
- OEvoabConnection* m_pConnection;
+ class OEvoabTable : public OEvoabTable_TYPEDEF
+ {
+ OEvoabConnection* m_pConnection;
- public:
- OEvoabTable( sdbcx::OCollection* _pTables,
- OEvoabConnection* _pConnection,
- const OUString& Name,
- const OUString& Type,
- const OUString& Description,
- const OUString& SchemaName,
- const OUString& CatalogName
- );
+ public:
+ OEvoabTable( sdbcx::OCollection* _pTables,
+ OEvoabConnection* _pConnection,
+ const OUString& Name,
+ const OUString& Type,
+ const OUString& Description,
+ const OUString& SchemaName,
+ const OUString& CatalogName
+ );
- OEvoabConnection* getConnection() { return m_pConnection;}
+ OEvoabConnection* getConnection() { return m_pConnection;}
- virtual void refreshColumns() override;
+ virtual void refreshColumns() override;
- OUString const & getTableName() const { return m_Name; }
- OUString const & getSchema() const { return m_SchemaName; }
- };
+ OUString const & getTableName() const { return m_Name; }
+ OUString const & getSchema() const { return m_SchemaName; }
+ };
}
diff --git a/connectivity/source/drivers/evoab2/NTables.cxx b/connectivity/source/drivers/evoab2/NTables.cxx
index 69b54ba70759..f124f6dbf92a 100644
--- a/connectivity/source/drivers/evoab2/NTables.cxx
+++ b/connectivity/source/drivers/evoab2/NTables.cxx
@@ -29,34 +29,29 @@ using namespace ::cppu;
using namespace connectivity::evoab;
using namespace connectivity::sdbcx;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
-using namespace dbtools;
-ObjectType OEvoabTables::createObject(const OUString& aName)
+css::uno::Reference< css::beans::XPropertySet > OEvoabTables::createObject(const OUString& aName)
{
- Sequence< OUString > aTypes { "TABLE" };
+ Sequence< OUString > aTypes { u"TABLE"_ustr };
- Reference< XResultSet > xResult = m_xMetaData->getTables(Any(),"%",aName,aTypes);
+ Reference< XResultSet > xResult = m_xMetaData->getTables(Any(),u"%"_ustr,aName,aTypes);
- ObjectType xRet;
- if(xResult.is())
+ rtl::Reference< OEvoabTable > xRet;
+ if(!xResult.is())
+ return nullptr;
+
+ Reference< XRow > xRow(xResult,UNO_QUERY);
+ if(xResult->next()) // there can be only one table with this name
{
- Reference< XRow > xRow(xResult,UNO_QUERY);
- if(xResult->next()) // there can be only one table with this name
- {
- xRet = new OEvoabTable(
- this,
- static_cast<OEvoabCatalog&>(m_rParent).getConnection(),
- aName,
- xRow->getString(4),
- xRow->getString(5),
- "",
- "");
- }
+ xRet = new OEvoabTable(
+ this,
+ static_cast<OEvoabCatalog&>(m_rParent).getConnection(),
+ aName,
+ xRow->getString(4),
+ xRow->getString(5),
+ u""_ustr,
+ u""_ustr);
}
::comphelper::disposeComponent(xResult);
diff --git a/connectivity/source/drivers/evoab2/NTables.hxx b/connectivity/source/drivers/evoab2/NTables.hxx
index 7e200ff6aee2..3e81e4d0497a 100644
--- a/connectivity/source/drivers/evoab2/NTables.hxx
+++ b/connectivity/source/drivers/evoab2/NTables.hxx
@@ -20,24 +20,25 @@
#include <connectivity/sdbcx/VCollection.hxx>
#include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
+#include <utility>
namespace connectivity::evoab
{
- class OEvoabTables : public sdbcx::OCollection
- {
- css::uno::Reference< css::sdbc::XDatabaseMetaData > m_xMetaData;
- protected:
- virtual sdbcx::ObjectType createObject(const OUString& _rName) override;
- virtual void impl_refresh() override;
- public:
- OEvoabTables(const css::uno::Reference< css::sdbc::XDatabaseMetaData >& _rMetaData,
- ::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex,
- const ::std::vector< OUString> &_rVector) :
- sdbcx::OCollection(_rParent,true,_rMutex,_rVector),
- m_xMetaData(_rMetaData)
- {}
- virtual void disposing() override;
- };
+ class OEvoabTables : public sdbcx::OCollection
+ {
+ css::uno::Reference< css::sdbc::XDatabaseMetaData > m_xMetaData;
+ protected:
+ virtual css::uno::Reference< css::beans::XPropertySet > createObject(const OUString& _rName) override;
+ virtual void impl_refresh() override;
+ public:
+ OEvoabTables(css::uno::Reference< css::sdbc::XDatabaseMetaData > _xMetaData,
+ ::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex,
+ const ::std::vector< OUString> &_rVector) :
+ sdbcx::OCollection(_rParent,true,_rMutex,_rVector),
+ m_xMetaData(std::move(_xMetaData))
+ {}
+ virtual void disposing() override;
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/file/FCatalog.cxx b/connectivity/source/drivers/file/FCatalog.cxx
index eedda26efba2..2a33bded28fe 100644
--- a/connectivity/source/drivers/file/FCatalog.cxx
+++ b/connectivity/source/drivers/file/FCatalog.cxx
@@ -24,10 +24,8 @@
#include <com/sun/star/sdbc/XResultSet.hpp>
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
using namespace connectivity::file;
@@ -56,7 +54,7 @@ void OFileCatalog::refreshTables()
::std::vector< OUString> aVector;
Sequence< OUString > aTypes;
Reference< XResultSet > xResult = m_xMetaData->getTables(Any(),
- "%", "%", aTypes);
+ u"%"_ustr, u"%"_ustr, aTypes);
fillNames(xResult,aVector);
if(m_pTables)
diff --git a/connectivity/source/drivers/file/FColumns.cxx b/connectivity/source/drivers/file/FColumns.cxx
index 1b90385bf9c0..dbe95ed16d55 100644
--- a/connectivity/source/drivers/file/FColumns.cxx
+++ b/connectivity/source/drivers/file/FColumns.cxx
@@ -25,14 +25,10 @@
using namespace connectivity::file;
using namespace connectivity;
-using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
-sdbcx::ObjectType OColumns::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > OColumns::createObject(const OUString& _rName)
{
const OUString sCatalogName;
const OUString sSchemaName(m_pTable->getSchema());
@@ -40,31 +36,31 @@ sdbcx::ObjectType OColumns::createObject(const OUString& _rName)
Reference< XResultSet > xResult = m_pTable->getConnection()->getMetaData()->getColumns(Any(),
sSchemaName, sTableName, _rName);
- sdbcx::ObjectType xRet;
- if(xResult.is())
+ if(!xResult.is())
+ return nullptr;
+
+ rtl::Reference< sdbcx::OColumn > xRet;
+ Reference< XRow > xRow(xResult,UNO_QUERY);
+ while(xResult->next())
{
- Reference< XRow > xRow(xResult,UNO_QUERY);
- while(xResult->next())
+ if(xRow->getString(4) == _rName)
{
- if(xRow->getString(4) == _rName)
- {
- xRet = new sdbcx::OColumn(_rName,
- xRow->getString(6),
- xRow->getString(13),
- xRow->getString(12),
- xRow->getInt(11),
- xRow->getInt(7),
- xRow->getInt(9),
- xRow->getInt(5),
- false,
- false,
- false,
- m_pTable->getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers(),
- sCatalogName,
- sSchemaName,
- sTableName);
- break;
- }
+ xRet = new sdbcx::OColumn(_rName,
+ xRow->getString(6),
+ xRow->getString(13),
+ xRow->getString(12),
+ xRow->getInt(11),
+ xRow->getInt(7),
+ xRow->getInt(9),
+ xRow->getInt(5),
+ false,
+ false,
+ false,
+ m_pTable->getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers(),
+ sCatalogName,
+ sSchemaName,
+ sTableName);
+ break;
}
}
diff --git a/connectivity/source/drivers/file/FConnection.cxx b/connectivity/source/drivers/file/FConnection.cxx
index 283bee8fee45..fe43ed6477ed 100644
--- a/connectivity/source/drivers/file/FConnection.cxx
+++ b/connectivity/source/drivers/file/FConnection.cxx
@@ -32,7 +32,7 @@
#include <com/sun/star/ucb/XContentIdentifier.hpp>
#include <tools/urlobj.hxx>
#include <file/FCatalog.hxx>
-#include <unotools/configmgr.hxx>
+#include <comphelper/configuration.hxx>
#include <unotools/pathoptions.hxx>
#include <ucbhelper/content.hxx>
#include <connectivity/dbcharset.hxx>
@@ -132,7 +132,7 @@ void OConnection::construct(const OUString& url,const Sequence< PropertyValue >&
OUString aFileName = aDSN;
INetURLObject aURL;
aURL.SetSmartProtocol(INetProtocol::File);
- if (!utl::ConfigManager::IsFuzzing())
+ if (!comphelper::IsFuzzing())
{
SvtPathOptions aPathOptions;
aFileName = aPathOptions.SubstituteVariable(aFileName);
@@ -166,7 +166,7 @@ void OConnection::construct(const OUString& url,const Sequence< PropertyValue >&
}
// set fields to fetch
- Sequence< OUString > aProps { "Title" };
+ Sequence< OUString > aProps { u"Title"_ustr };
try
{
@@ -179,7 +179,7 @@ void OConnection::construct(const OUString& url,const Sequence< PropertyValue >&
{
Reference<XContent> xParent(Reference<XChild>(aFile.get(),UNO_QUERY_THROW)->getParent(),UNO_QUERY_THROW);
Reference<XContentIdentifier> xIdent = xParent->getIdentifier();
- m_xContent = xParent;
+ m_xContent = std::move(xParent);
::ucbhelper::Content aParent(xIdent->getContentIdentifier(), Reference< XCommandEnvironment >(), comphelper::getProcessComponentContext());
m_xDir = aParent.createDynamicCursor(aProps, ::ucbhelper::INCLUDE_DOCUMENTS_ONLY );
@@ -210,7 +210,7 @@ void OConnection::construct(const OUString& url,const Sequence< PropertyValue >&
}
// XServiceInfo
-IMPLEMENT_SERVICE_INFO(OConnection, "com.sun.star.sdbc.drivers.file.Connection", "com.sun.star.sdbc.Connection")
+IMPLEMENT_SERVICE_INFO(OConnection, u"com.sun.star.sdbc.drivers.file.Connection"_ustr, u"com.sun.star.sdbc.Connection"_ustr)
Reference< XStatement > SAL_CALL OConnection::createStatement( )
@@ -238,8 +238,7 @@ Reference< XPreparedStatement > SAL_CALL OConnection::prepareStatement( const OU
Reference< XPreparedStatement > SAL_CALL OConnection::prepareCall( const OUString& /*sql*/ )
{
- throwFeatureNotImplementedSQLException( "XConnection::prepareCall", *this );
- return nullptr;
+ throwFeatureNotImplementedSQLException( u"XConnection::prepareCall"_ustr, *this );
}
OUString SAL_CALL OConnection::nativeSQL( const OUString& sql )
@@ -314,7 +313,7 @@ sal_Bool SAL_CALL OConnection::isReadOnly( )
void SAL_CALL OConnection::setCatalog( const OUString& /*catalog*/ )
{
- throwFeatureNotImplementedSQLException( "XConnection::setCatalog", *this );
+ throwFeatureNotImplementedSQLException( u"XConnection::setCatalog"_ustr, *this );
}
OUString SAL_CALL OConnection::getCatalog( )
@@ -324,7 +323,7 @@ OUString SAL_CALL OConnection::getCatalog( )
void SAL_CALL OConnection::setTransactionIsolation( sal_Int32 /*level*/ )
{
- throwFeatureNotImplementedSQLException( "XConnection::setTransactionIsolation", *this );
+ throwFeatureNotImplementedSQLException( u"XConnection::setTransactionIsolation"_ustr, *this );
}
sal_Int32 SAL_CALL OConnection::getTransactionIsolation( )
@@ -369,17 +368,17 @@ void OConnection::disposing()
m_xDir.clear();
m_xContent.clear();
- m_xCatalog = WeakReference< XTablesSupplier>();
+ m_xCatalog.clear();
}
Reference< XTablesSupplier > OConnection::createCatalog()
{
::osl::MutexGuard aGuard( m_aMutex );
- Reference< XTablesSupplier > xTab = m_xCatalog;
+ rtl::Reference< connectivity::sdbcx::OCatalog > xTab = m_xCatalog.get();
if(!xTab.is())
{
xTab = new OFileCatalog(this);
- m_xCatalog = xTab;
+ m_xCatalog = xTab.get();
}
return xTab;
}
@@ -387,7 +386,7 @@ Reference< XTablesSupplier > OConnection::createCatalog()
Reference< XDynamicResultSet > OConnection::getDir() const
{
Reference<XDynamicResultSet> xContent;
- Sequence< OUString > aProps { "Title" };
+ Sequence< OUString > aProps { u"Title"_ustr };
try
{
Reference<XContentIdentifier> xIdent = getContent()->getIdentifier();
@@ -405,7 +404,7 @@ sal_Int64 SAL_CALL OConnection::getSomething( const Sequence< sal_Int8 >& rId )
return comphelper::getSomethingImpl(rId, this);
}
-Sequence< sal_Int8 > OConnection::getUnoTunnelId()
+const Sequence< sal_Int8 > & OConnection::getUnoTunnelId()
{
static const comphelper::UnoIdInit implId;
return implId.getSeq();
@@ -413,17 +412,13 @@ Sequence< sal_Int8 > OConnection::getUnoTunnelId()
void OConnection::throwUrlNotValid(const OUString & _rsUrl,const OUString & _rsMessage)
{
- SQLException aError;
- aError.Message = getResources().getResourceStringWithSubstitution(
- STR_NO_VALID_FILE_URL,
- "$URL$", _rsUrl
- );
-
- aError.SQLState = "S1000";
- aError.ErrorCode = 0;
- aError.Context = static_cast< XConnection* >(this);
+ XConnection* context = this;
+ css::uno::Any next;
if (!_rsMessage.isEmpty())
- aError.NextException <<= SQLException(_rsMessage, aError.Context, OUString(), 0, Any());
+ next <<= SQLException(_rsMessage, context, OUString(), 0, Any());
+ SQLException aError(
+ getResources().getResourceStringWithSubstitution(STR_NO_VALID_FILE_URL, "$URL$", _rsUrl),
+ context, u"S1000"_ustr, 0, next);
throw aError;
}
diff --git a/connectivity/source/drivers/file/FDatabaseMetaData.cxx b/connectivity/source/drivers/file/FDatabaseMetaData.cxx
index f6480744e665..efc8f8149f08 100644
--- a/connectivity/source/drivers/file/FDatabaseMetaData.cxx
+++ b/connectivity/source/drivers/file/FDatabaseMetaData.cxx
@@ -30,14 +30,13 @@
#include <file/FTable.hxx>
#include <comphelper/processfactory.hxx>
#include <comphelper/servicehelper.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <ucbhelper/content.hxx>
using namespace com::sun::star::ucb;
using namespace connectivity::file;
using namespace connectivity;
using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
using namespace com::sun::star::sdbcx;
@@ -73,6 +72,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns(
namespace
{
+#if !ENABLE_FUZZERS
sal_Int16 isCaseSensitiveParentFolder( const OUString& _rFolderOrDoc, std::u16string_view _rDocName )
{
sal_Int16 nIsCS = 1;
@@ -84,7 +84,7 @@ namespace
{
::ucbhelper::Content aFolderOrDoc( _rFolderOrDoc, Reference< XCommandEnvironment >(), comphelper::getProcessComponentContext() );
if ( aFolderOrDoc.isDocument() )
- aContent1 = aFolderOrDoc;
+ aContent1 = std::move(aFolderOrDoc);
else
{
aContentURL = INetURLObject( _rFolderOrDoc, INetURLObject::EncodeMechanism::WasEncoded );
@@ -151,6 +151,7 @@ namespace
return nIsCS;
}
+#endif
}
@@ -165,7 +166,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables(
// check if any type is given
// when no types are given then we have to return all tables e.g. TABLE
- static constexpr OUStringLiteral aTable = u"TABLE";
+ static constexpr OUString aTable = u"TABLE"_ustr;
bool bTableFound = true;
sal_Int32 nLength = types.getLength();
@@ -297,7 +298,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables(
}
if(bNewRow)
{
- aRow.push_back(new ORowSetValueDecorator(OUString(aTable)));
+ aRow.push_back(new ORowSetValueDecorator(aTable));
aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue());
aRows.push_back(aRow);
@@ -392,14 +393,14 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges(
aRow[2] = new ORowSetValueDecorator(*pBegin);
aRow[6] = ODatabaseMetaDataResultSet::getSelectValue();
- aRow[7] = new ORowSetValueDecorator(OUString("NO"));
+ aRow[7] = new ORowSetValueDecorator(u"NO"_ustr);
aRows.push_back(aRow);
Reference< XPropertySet> xTable(
xNames->getByName(*pBegin), css::uno::UNO_QUERY);
if(xTable.is())
{
- auto pTable = comphelper::getFromUnoTunnel<OFileTable>(xTable);
+ auto pTable = dynamic_cast<OFileTable*>(xTable.get());
if(pTable && !pTable->isReadOnly())
{
aRow[6] = ODatabaseMetaDataResultSet::getInsertValue();
@@ -491,7 +492,7 @@ OUString SAL_CALL ODatabaseMetaData::getCatalogTerm( )
OUString ODatabaseMetaData::impl_getIdentifierQuoteString_throw( )
{
- return "\"";
+ return u"\""_ustr;
}
OUString SAL_CALL ODatabaseMetaData::getExtraNameCharacters( )
@@ -616,14 +617,9 @@ sal_Bool SAL_CALL ODatabaseMetaData::supportsOuterJoins( )
Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTableTypes( )
{
- ::osl::MutexGuard aGuard( m_aMutex );
-
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eTableTypes );
- static ODatabaseMetaDataResultSet::ORows aRows;
- if(aRows.empty())
- {
- aRows.push_back( { ODatabaseMetaDataResultSet::getEmptyValue(), new ORowSetValueDecorator(OUString("TABLE")) } );
- }
+ ODatabaseMetaDataResultSet::ORows aRows;
+ aRows.push_back( { ODatabaseMetaDataResultSet::getEmptyValue(), new ORowSetValueDecorator(u"TABLE"_ustr) } );
pResult->setRows(std::move(aRows));
return pResult;
}
@@ -840,7 +836,7 @@ sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92IntermediateSQL( )
OUString SAL_CALL ODatabaseMetaData::getURL( )
{
- return "sdbc:file:";
+ return u"sdbc:file:"_ustr;
}
OUString SAL_CALL ODatabaseMetaData::getUserName( )
@@ -905,12 +901,12 @@ OUString SAL_CALL ODatabaseMetaData::getSearchStringEscape( )
OUString SAL_CALL ODatabaseMetaData::getStringFunctions( )
{
- return "UCASE,LCASE,ASCII,LENGTH,OCTET_LENGTH,CHAR_LENGTH,CHARACTER_LENGTH,CHAR,CONCAT,LOCATE,SUBSTRING,LTRIM,RTRIM,SPACE,REPLACE,REPEAT,INSERT,LEFT,RIGHT";
+ return u"UCASE,LCASE,ASCII,LENGTH,OCTET_LENGTH,CHAR_LENGTH,CHARACTER_LENGTH,CHAR,CONCAT,LOCATE,SUBSTRING,LTRIM,RTRIM,SPACE,REPLACE,REPEAT,INSERT,LEFT,RIGHT"_ustr;
}
OUString SAL_CALL ODatabaseMetaData::getTimeDateFunctions( )
{
- return "DAYOFWEEK,DAYOFMONTH,DAYOFYEAR,MONTH,DAYNAME,MONTHNAME,QUARTER,WEEK,YEAR,HOUR,MINUTE,SECOND,CURDATE,CURTIME,NOW";
+ return u"DAYOFWEEK,DAYOFMONTH,DAYOFYEAR,MONTH,DAYNAME,MONTHNAME,QUARTER,WEEK,YEAR,HOUR,MINUTE,SECOND,CURDATE,CURTIME,NOW"_ustr;
}
OUString SAL_CALL ODatabaseMetaData::getSystemFunctions( )
@@ -920,7 +916,7 @@ OUString SAL_CALL ODatabaseMetaData::getSystemFunctions( )
OUString SAL_CALL ODatabaseMetaData::getNumericFunctions( )
{
- return "ABS,SIGN,MOD,FLOOR,CEILING,ROUND,EXP,LN,LOG,LOG10,POWER,SQRT,PI,COS,SIN,TAN,ACOS,ASIN,ATAN,ATAN2,DEGREES,RADIANS";
+ return u"ABS,SIGN,MOD,FLOOR,CEILING,ROUND,EXP,LN,LOG,LOG10,POWER,SQRT,PI,COS,SIN,TAN,ACOS,ASIN,ATAN,ATAN2,DEGREES,RADIANS"_ustr;
}
sal_Bool SAL_CALL ODatabaseMetaData::supportsExtendedSQLGrammar( )
diff --git a/connectivity/source/drivers/file/FDriver.cxx b/connectivity/source/drivers/file/FDriver.cxx
index 4b6d45fe7420..e5788a257ddb 100644
--- a/connectivity/source/drivers/file/FDriver.cxx
+++ b/connectivity/source/drivers/file/FDriver.cxx
@@ -26,6 +26,7 @@
#include <connectivity/dbexception.hxx>
#include <strings.hrc>
#include <resource/sharedresources.hxx>
+#include <utility>
using namespace connectivity::file;
@@ -36,9 +37,9 @@ using namespace com::sun::star::sdbc;
using namespace com::sun::star::sdbcx;
using namespace com::sun::star::container;
-OFileDriver::OFileDriver(const css::uno::Reference< css::uno::XComponentContext >& _rxContext)
+OFileDriver::OFileDriver(css::uno::Reference< css::uno::XComponentContext > _xContext)
: ODriver_BASE(m_aMutex)
- ,m_xContext(_rxContext)
+ ,m_xContext(std::move(_xContext))
{
}
@@ -49,7 +50,7 @@ void OFileDriver::disposing()
for (auto const& connection : m_xConnections)
{
- Reference< XComponent > xComp(connection.get(), UNO_QUERY);
+ rtl::Reference< OConnection > xComp(connection);
if (xComp.is())
xComp->dispose();
}
@@ -62,7 +63,7 @@ void OFileDriver::disposing()
OUString SAL_CALL OFileDriver::getImplementationName( )
{
- return "com.sun.star.sdbc.driver.file.Driver";
+ return u"com.sun.star.sdbc.driver.file.Driver"_ustr;
}
sal_Bool SAL_CALL OFileDriver::supportsService( const OUString& _rServiceName )
@@ -73,7 +74,7 @@ sal_Bool SAL_CALL OFileDriver::supportsService( const OUString& _rServiceName )
Sequence< OUString > SAL_CALL OFileDriver::getSupportedServiceNames( )
{
- return { "com.sun.star.sdbc.Driver", "com.sun.star.sdbcx.Driver" };
+ return { u"com.sun.star.sdbc.Driver"_ustr, u"com.sun.star.sdbcx.Driver"_ustr };
}
@@ -84,7 +85,7 @@ Reference< XConnection > SAL_CALL OFileDriver::connect( const OUString& url, con
rtl::Reference<OConnection> pCon = new OConnection(this);
pCon->construct(url,info);
- m_xConnections.push_back(WeakReferenceHelper(*pCon));
+ m_xConnections.push_back(pCon);
return pCon;
}
@@ -99,48 +100,48 @@ Sequence< DriverPropertyInfo > SAL_CALL OFileDriver::getPropertyInfo( const OUSt
if ( acceptsURL(url) )
{
- Sequence< OUString > aBoolean { "0", "1" };
+ Sequence< OUString > aBoolean { u"0"_ustr, u"1"_ustr };
return
{
{
- "CharSet"
- ,"CharSet of the database."
+ u"CharSet"_ustr
+ ,u"CharSet of the database."_ustr
,false
,{}
,{}
},
{
- "Extension"
- ,"Extension of the file format."
+ u"Extension"_ustr
+ ,u"Extension of the file format."_ustr
,false
- ,".*"
+ ,u".*"_ustr
,{}
},
{
- "ShowDeleted"
- ,"Display inactive records."
+ u"ShowDeleted"_ustr
+ ,u"Display inactive records."_ustr
,false
- ,"0"
+ ,u"0"_ustr
,aBoolean
},
{
- "EnableSQL92Check"
- ,"Use SQL92 naming constraints."
+ u"EnableSQL92Check"_ustr
+ ,u"Use SQL92 naming constraints."_ustr
,false
- ,"0"
+ ,u"0"_ustr
,aBoolean
},
{
- "UseRelativePath"
- ,"Handle the connection url as relative path."
+ u"UseRelativePath"_ustr
+ ,u"Handle the connection url as relative path."_ustr
,false
- ,"0"
+ ,u"0"_ustr
,aBoolean
},
{
- "URL"
- ,"The URL of the database document which is used to create an absolute path."
+ u"URL"_ustr
+ ,u"The URL of the database document which is used to create an absolute path."_ustr
,false
,{}
,{}
@@ -152,7 +153,6 @@ Sequence< DriverPropertyInfo > SAL_CALL OFileDriver::getPropertyInfo( const OUSt
const OUString sMessage = aResources.getResourceString(STR_URI_SYNTAX_ERROR);
::dbtools::throwGenericSQLException(sMessage ,*this);
} // if ( ! acceptsURL(url) )
- return Sequence< DriverPropertyInfo >();
}
sal_Int32 SAL_CALL OFileDriver::getMajorVersion( )
@@ -176,7 +176,7 @@ Reference< XTablesSupplier > SAL_CALL OFileDriver::getDataDefinitionByConnection
{
for (auto const& elem : m_xConnections)
{
- if (static_cast<OConnection*>( Reference< XConnection >::query(elem.get()).get() ) == pSearchConnection)
+ if (elem.get().get() == pSearchConnection)
return pSearchConnection->createCatalog();
}
}
diff --git a/connectivity/source/drivers/file/FNoException.cxx b/connectivity/source/drivers/file/FNoException.cxx
index 920bb38859f1..c2cd9d9579d6 100644
--- a/connectivity/source/drivers/file/FNoException.cxx
+++ b/connectivity/source/drivers/file/FNoException.cxx
@@ -65,7 +65,7 @@ void OSQLAnalyzer::bindParameterRow(OValueRefRow const & _pRow)
void OPreparedStatement::scanParameter(OSQLParseNode* pParseNode,std::vector< OSQLParseNode*>& _rParaNodes)
{
- DBG_ASSERT(pParseNode != nullptr,"OResultSet: internal error: invalid ParseNode");
+ assert(pParseNode && "OResultSet: internal error: invalid ParseNode");
// found parameter Name-Rule?
if (SQL_ISRULE(pParseNode,parameter))
diff --git a/connectivity/source/drivers/file/FNumericFunctions.cxx b/connectivity/source/drivers/file/FNumericFunctions.cxx
index 7de058dee06c..7c7fdc75425f 100644
--- a/connectivity/source/drivers/file/FNumericFunctions.cxx
+++ b/connectivity/source/drivers/file/FNumericFunctions.cxx
@@ -19,14 +19,13 @@
#include <cmath>
+#include <basegfx/numeric/ftools.hxx>
#include <file/FNumericFunctions.hxx>
#include <rtl/math.hxx>
using namespace connectivity;
using namespace connectivity::file;
-const double fPi = 3.14159265358979323846;
-
ORowSetValue OOp_Abs::operate(const ORowSetValue& lhs) const
{
if ( lhs.isNull() )
@@ -162,7 +161,7 @@ ORowSetValue OOp_Sqrt::operate(const ORowSetValue& lhs) const
ORowSetValue OOp_Pi::operate(const std::vector<ORowSetValue>& /*lhs*/) const
{
- return fPi;
+ return M_PI;
}
ORowSetValue OOp_Cos::operate(const ORowSetValue& lhs) const
@@ -227,7 +226,7 @@ ORowSetValue OOp_Degrees::operate(const ORowSetValue& lhs) const
return lhs;
double nLhs = lhs.getDouble();
- return nLhs*180*(1.0/fPi);
+ return basegfx::rad2deg(nLhs);
}
ORowSetValue OOp_Radians::operate(const ORowSetValue& lhs) const
@@ -236,7 +235,7 @@ ORowSetValue OOp_Radians::operate(const ORowSetValue& lhs) const
return lhs;
double nLhs = lhs.getDouble();
- return nLhs*fPi*(1.0/180.0);
+ return basegfx::deg2rad(nLhs);
}
diff --git a/connectivity/source/drivers/file/FPreparedStatement.cxx b/connectivity/source/drivers/file/FPreparedStatement.cxx
index 79c69b3ee62e..5a3f09adb920 100644
--- a/connectivity/source/drivers/file/FPreparedStatement.cxx
+++ b/connectivity/source/drivers/file/FPreparedStatement.cxx
@@ -18,6 +18,7 @@
*/
+#include <o3tl/safeint.hxx>
#include <osl/diagnose.h>
#include <file/FPreparedStatement.hxx>
#include <com/sun/star/sdbc/DataType.hpp>
@@ -45,7 +46,7 @@ using namespace com::sun::star::sdbcx;
using namespace com::sun::star::container;
using namespace com::sun::star;
-IMPLEMENT_SERVICE_INFO(OPreparedStatement,"com.sun.star.sdbc.driver.file.PreparedStatement","com.sun.star.sdbc.PreparedStatement");
+IMPLEMENT_SERVICE_INFO(OPreparedStatement,u"com.sun.star.sdbc.driver.file.PreparedStatement"_ustr,u"com.sun.star.sdbc.PreparedStatement"_ustr);
OPreparedStatement::OPreparedStatement( OConnection* _pConnection)
: OStatement_BASE2( _pConnection )
@@ -100,7 +101,7 @@ rtl::Reference<OResultSet> OPreparedStatement::makeResultSet()
closeResultSet();
rtl::Reference<OResultSet> xResultSet(createResultSet());
- m_xResultSet = xResultSet;
+ m_xResultSet = xResultSet.get();
initializeResultSet(xResultSet.get());
initResultSet(xResultSet.get());
return xResultSet;
@@ -127,6 +128,11 @@ css::uno::Sequence< css::uno::Type > SAL_CALL OPreparedStatement::getTypes( )
Reference< XResultSetMetaData > SAL_CALL OPreparedStatement::getMetaData( )
{
+ return getMetaDataImpl();
+}
+
+const rtl::Reference< OResultSetMetaData > & OPreparedStatement::getMetaDataImpl( )
+{
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
@@ -250,7 +256,7 @@ void SAL_CALL OPreparedStatement::setInt( sal_Int32 parameterIndex, sal_Int32 x
void SAL_CALL OPreparedStatement::setLong( sal_Int32 /*parameterIndex*/, sal_Int64 /*aVal*/ )
{
- throwFeatureNotImplementedSQLException( "XParameters::setLong", *this );
+ throwFeatureNotImplementedSQLException( u"XParameters::setLong"_ustr, *this );
}
@@ -268,25 +274,25 @@ void SAL_CALL OPreparedStatement::setNull( sal_Int32 parameterIndex, sal_Int32 /
void SAL_CALL OPreparedStatement::setClob( sal_Int32 /*parameterIndex*/, const Reference< XClob >& /*x*/ )
{
- throwFeatureNotImplementedSQLException( "XParameters::setClob", *this );
+ throwFeatureNotImplementedSQLException( u"XParameters::setClob"_ustr, *this );
}
void SAL_CALL OPreparedStatement::setBlob( sal_Int32 /*parameterIndex*/, const Reference< XBlob >& /*x*/ )
{
- throwFeatureNotImplementedSQLException( "XParameters::setBlob", *this );
+ throwFeatureNotImplementedSQLException( u"XParameters::setBlob"_ustr, *this );
}
void SAL_CALL OPreparedStatement::setArray( sal_Int32 /*parameterIndex*/, const Reference< XArray >& /*x*/ )
{
- throwFeatureNotImplementedSQLException( "XParameters::setArray", *this );
+ throwFeatureNotImplementedSQLException( u"XParameters::setArray"_ustr, *this );
}
void SAL_CALL OPreparedStatement::setRef( sal_Int32 /*parameterIndex*/, const Reference< XRef >& /*x*/ )
{
- throwFeatureNotImplementedSQLException( "XParameters::setRef", *this );
+ throwFeatureNotImplementedSQLException( u"XParameters::setRef"_ustr, *this );
}
@@ -376,7 +382,7 @@ void OPreparedStatement::initResultSet(OResultSet *pResultSet)
m_pConnection->throwGenericSQLException(STR_INVALID_PARA_COUNT,*this);
pResultSet->OpenImpl();
- pResultSet->setMetaData(getMetaData());
+ pResultSet->setMetaData(getMetaDataImpl());
}
void SAL_CALL OPreparedStatement::acquire() noexcept
@@ -392,7 +398,7 @@ void SAL_CALL OPreparedStatement::release() noexcept
void OPreparedStatement::checkAndResizeParameters(sal_Int32 parameterIndex)
{
::connectivity::checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- if ( m_aAssignValues.is() && (parameterIndex < 1 || parameterIndex >= static_cast<sal_Int32>(m_aParameterIndexes.size())) )
+ if ( m_aAssignValues.is() && (parameterIndex < 1 || o3tl::make_unsigned(parameterIndex) >= m_aParameterIndexes.size()) )
throwInvalidIndexException(*this);
else if ( static_cast<sal_Int32>(m_aParameterRow->size()) <= parameterIndex )
{
diff --git a/connectivity/source/drivers/file/FResultSet.cxx b/connectivity/source/drivers/file/FResultSet.cxx
index fdf3a4e47d84..56ca7ed0063a 100644
--- a/connectivity/source/drivers/file/FResultSet.cxx
+++ b/connectivity/source/drivers/file/FResultSet.cxx
@@ -29,6 +29,7 @@
#include <cppuhelper/typeprovider.hxx>
#include <connectivity/dbtools.hxx>
#include <cppuhelper/propshlp.hxx>
+#include <o3tl/safeint.hxx>
#include <sal/log.hxx>
#include <iterator>
#include <com/sun/star/sdbc/ResultSetType.hpp>
@@ -41,7 +42,7 @@
#include <comphelper/types.hxx>
#include <resource/sharedresources.hxx>
#include <strings.hrc>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
using namespace ::comphelper;
using namespace connectivity;
@@ -65,7 +66,7 @@ namespace
}
}
-IMPLEMENT_SERVICE_INFO(OResultSet,"com.sun.star.sdbcx.drivers.file.ResultSet","com.sun.star.sdbc.ResultSet");
+IMPLEMENT_SERVICE_INFO(OResultSet,u"com.sun.star.sdbcx.drivers.file.ResultSet"_ustr,u"com.sun.star.sdbc.ResultSet"_ustr);
OResultSet::OResultSet(OStatement_Base* pStmt,OSQLParseTreeIterator& _aSQLIterator) : OResultSet_BASE(m_aMutex)
,::comphelper::OPropertyContainer(OResultSet_BASE::rBHelper)
@@ -181,8 +182,6 @@ sal_Int32 SAL_CALL OResultSet::findColumn( const OUString& columnName )
}
::dbtools::throwInvalidColumnException( columnName, *this );
- assert(false);
- return 0; // Never reached
}
const ORowSetValue& OResultSet::getValue(sal_Int32 columnIndex)
@@ -652,7 +651,7 @@ void SAL_CALL OResultSet::updateInt( sal_Int32 columnIndex, sal_Int32 x )
void SAL_CALL OResultSet::updateLong( sal_Int32 /*columnIndex*/, sal_Int64 /*x*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XRowUpdate::updateLong", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XRowUpdate::updateLong"_ustr, *this );
}
void SAL_CALL OResultSet::updateFloat( sal_Int32 columnIndex, float x )
@@ -921,7 +920,7 @@ bool OResultSet::Move(IResultSetHelper::Movement eCursorPosition, sal_Int32 nOff
// The FileCursor is outside of the valid range, if:
// a.) m_nRowPos < 1
// b.) a KeySet exists and m_nRowPos > m_pFileSet->size()
- if (m_nRowPos < 0 || (m_pFileSet->isFrozen() && eCursorPosition != IResultSetHelper::BOOKMARK && m_nRowPos >= static_cast<sal_Int32>(m_pFileSet->size()) )) // && m_pFileSet->IsFrozen()
+ if (m_nRowPos < 0 || (m_pFileSet->isFrozen() && eCursorPosition != IResultSetHelper::BOOKMARK && o3tl::make_unsigned(m_nRowPos) >= m_pFileSet->size() )) // && m_pFileSet->IsFrozen()
{
goto Error;
}
@@ -994,8 +993,6 @@ bool OResultSet::Move(IResultSetHelper::Movement eCursorPosition, sal_Int32 nOff
--m_nRowPos;
break;
case IResultSetHelper::FIRST:
- m_nRowPos = 0;
- break;
case IResultSetHelper::LAST:
m_nRowPos = 0;
break;
@@ -1329,8 +1326,7 @@ void OResultSet::OpenImpl()
#endif
}
- m_pFileSet->erase(std::remove(m_pFileSet->begin(),m_pFileSet->end(),0)
- ,m_pFileSet->end());
+ std::erase(*m_pFileSet, 0);
}
}
}
@@ -1380,19 +1376,6 @@ void OResultSet::OpenImpl()
m_nFilePos = 0;
}
-Sequence< sal_Int8 > OResultSet::getUnoTunnelId()
-{
- static const comphelper::UnoIdInit implId;
- return implId.getSeq();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OResultSet::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return comphelper::getSomethingImpl(rId, this);
-}
-
void OResultSet::setBoundedColumns(const OValueRefRow& _rRow,
const OValueRefRow& _rSelectRow,
const ::rtl::Reference<connectivity::OSQLColumns>& _rxColumns,
@@ -1527,8 +1510,7 @@ Reference< css::beans::XPropertySetInfo > SAL_CALL OResultSet::getPropertySetInf
void OResultSet::doTableSpecials(const OSQLTable& _xTable)
{
- Reference<css::lang::XUnoTunnel> xTunnel(_xTable, UNO_QUERY_THROW);
- m_pTable = comphelper::getFromUnoTunnel<OFileTable>(xTunnel);
+ m_pTable = dynamic_cast<OFileTable*>(_xTable.get());
assert(m_pTable.is());
}
@@ -1581,8 +1563,7 @@ bool OResultSet::isRowDeleted() const
void SAL_CALL OResultSet::disposing( const EventObject& Source )
{
- Reference<XPropertySet> xProp = m_pTable;
- if(m_pTable.is() && Source.Source == xProp)
+ if(m_pTable.is() && Source.Source == Reference<XPropertySet>(m_pTable))
{
m_pTable.clear();
}
diff --git a/connectivity/source/drivers/file/FResultSetMetaData.cxx b/connectivity/source/drivers/file/FResultSetMetaData.cxx
index f68a06532bb7..44898d88242b 100644
--- a/connectivity/source/drivers/file/FResultSetMetaData.cxx
+++ b/connectivity/source/drivers/file/FResultSetMetaData.cxx
@@ -22,6 +22,8 @@
#include <comphelper/extract.hxx>
#include <connectivity/dbexception.hxx>
#include <comphelper/types.hxx>
+#include <o3tl/safeint.hxx>
+#include <utility>
using namespace ::comphelper;
@@ -33,12 +35,11 @@ using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
-OResultSetMetaData::OResultSetMetaData(const ::rtl::Reference<connectivity::OSQLColumns>& _rxColumns,const OUString& _aTableName,OFileTable* _pTable)
- :m_aTableName(_aTableName)
- ,m_xColumns(_rxColumns)
+OResultSetMetaData::OResultSetMetaData(::rtl::Reference<connectivity::OSQLColumns> _xColumns, OUString _aTableName, OFileTable* _pTable)
+ :m_aTableName(std::move(_aTableName))
+ ,m_xColumns(std::move(_xColumns))
,m_pTable(_pTable)
{
}
@@ -51,7 +52,7 @@ OResultSetMetaData::~OResultSetMetaData()
void OResultSetMetaData::checkColumnIndex(sal_Int32 column)
{
- if(column <= 0 || column > static_cast<sal_Int32>(m_xColumns->size()))
+ if(column <= 0 || o3tl::make_unsigned(column) > m_xColumns->size())
throwInvalidIndexException(*this);
}
diff --git a/connectivity/source/drivers/file/FStatement.cxx b/connectivity/source/drivers/file/FStatement.cxx
index e0ea8bc59aef..ee260fdb33e5 100644
--- a/connectivity/source/drivers/file/FStatement.cxx
+++ b/connectivity/source/drivers/file/FStatement.cxx
@@ -38,6 +38,7 @@
#include <connectivity/dbexception.hxx>
#include <strings.hrc>
#include <algorithm>
+#include <cstddef>
namespace connectivity::file
{
@@ -92,7 +93,7 @@ void OStatement_Base::disposeResultSet()
{
SAL_INFO( "connectivity.drivers", "file Ocke.Janssen@sun.com OStatement_Base::disposeResultSet" );
// free the cursor if alive
- Reference< XComponent > xComp(m_xResultSet.get(), UNO_QUERY);
+ rtl::Reference< OResultSet > xComp(m_xResultSet.get());
assert(xComp.is() || !m_xResultSet.get().is());
if (xComp.is())
xComp->dispose();
@@ -174,7 +175,7 @@ void OStatement_Base::closeResultSet()
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- Reference< XCloseable > xCloseable(m_xResultSet.get(), UNO_QUERY);
+ rtl::Reference< OResultSet > xCloseable(m_xResultSet.get());
assert(xCloseable.is() || !m_xResultSet.get().is());
if (xCloseable.is())
{
@@ -193,7 +194,7 @@ Any SAL_CALL OStatement_Base::getWarnings( )
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- return makeAny(m_aLastWarning);
+ return Any(m_aLastWarning);
}
void SAL_CALL OStatement_Base::clearWarnings( )
@@ -222,7 +223,7 @@ rtl::Reference<OResultSet> OStatement::createResultSet()
return new OResultSet(this,m_aSQLIterator);
}
-IMPLEMENT_SERVICE_INFO(OStatement,"com.sun.star.sdbc.driver.file.Statement","com.sun.star.sdbc.Statement");
+IMPLEMENT_SERVICE_INFO(OStatement,u"com.sun.star.sdbc.driver.file.Statement"_ustr,u"com.sun.star.sdbc.Statement"_ustr);
void SAL_CALL OStatement::acquire() noexcept
{
@@ -251,15 +252,13 @@ Reference< XResultSet > SAL_CALL OStatement::executeQuery( const OUString& sql )
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
construct(sql);
- Reference< XResultSet > xRS;
rtl::Reference<OResultSet> pResult = createResultSet();
- xRS = pResult;
initializeResultSet(pResult.get());
- m_xResultSet = xRS;
+ m_xResultSet = pResult.get();
pResult->OpenImpl();
- return xRS;
+ return pResult;
}
Reference< XConnection > SAL_CALL OStatement::getConnection( )
@@ -407,7 +406,7 @@ void OStatement_Base::construct(const OUString& sql)
}
// at this moment we support only one table per select statement
- m_pTable = comphelper::getFromUnoTunnel<OFileTable>(rTabs.begin()->second);
+ m_pTable = dynamic_cast<OFileTable*>(rTabs.begin()->second.get());
OSL_ENSURE(m_pTable.is(),"No table!");
if ( m_pTable.is() )
m_xColNames = m_pTable->getColumns();
@@ -440,7 +439,7 @@ void OStatement_Base::createColumnMapping()
// initialize the column index map (mapping select columns to table columns)
::rtl::Reference<connectivity::OSQLColumns> xColumns = m_aSQLIterator.getSelectColumns();
m_aColMapping.resize(xColumns->size() + 1);
- for (sal_Int32 i=0; i<static_cast<sal_Int32>(m_aColMapping.size()); ++i)
+ for (std::size_t i=0; i<m_aColMapping.size(); ++i)
m_aColMapping[i] = i;
Reference<XIndexAccess> xNames(m_xColNames,UNO_QUERY);
@@ -498,7 +497,7 @@ void OStatement_Base::GetAssignValues()
OSL_ENSURE(SQL_ISRULE(pOptColumnCommalist,opt_column_commalist),"OResultSet: Error in Parse Tree");
if (pOptColumnCommalist->count() == 0)
{
- const Sequence< OUString>& aNames = m_xColNames->getElementNames();
+ const Sequence< OUString> aNames = m_xColNames->getElementNames();
aColumnNameList.insert(aColumnNameList.end(), aNames.begin(), aNames.end());
}
else
@@ -575,7 +574,7 @@ void OStatement_Base::GetAssignValues()
OSL_ENSURE(m_pParseTree->count() >= 4,"OResultSet: Error in Parse Tree");
OSQLParseNode * pAssignmentCommalist = m_pParseTree->getChild(3);
- OSL_ENSURE(pAssignmentCommalist != nullptr,"OResultSet: pAssignmentCommalist == NULL");
+ assert(pAssignmentCommalist && "OResultSet: pAssignmentCommalist == NULL");
OSL_ENSURE(SQL_ISRULE(pAssignmentCommalist,assignment_commalist),"OResultSet: Error in Parse Tree");
OSL_ENSURE(pAssignmentCommalist->count() > 0,"OResultSet: pAssignmentCommalist->count() <= 0");
@@ -584,15 +583,15 @@ void OStatement_Base::GetAssignValues()
for (size_t i = 0; i < pAssignmentCommalist->count(); i++)
{
OSQLParseNode * pAssignment = pAssignmentCommalist->getChild(i);
- OSL_ENSURE(pAssignment != nullptr,"OResultSet: pAssignment == NULL");
+ assert(pAssignment && "OResultSet: pAssignment == NULL");
OSL_ENSURE(SQL_ISRULE(pAssignment,assignment),"OResultSet: Error in Parse Tree");
OSL_ENSURE(pAssignment->count() == 3,"OResultSet: pAssignment->count() != 3");
OSQLParseNode * pCol = pAssignment->getChild(0);
- OSL_ENSURE(pCol != nullptr,"OResultSet: pCol == NULL");
+ assert(pCol && "OResultSet: pCol == NULL");
OSQLParseNode * pComp = pAssignment->getChild(1);
- OSL_ENSURE(pComp != nullptr,"OResultSet: pComp == NULL");
+ assert(pComp && "OResultSet: pComp == NULL");
OSL_ENSURE(pComp->getNodeType() == SQLNodeType::Equal,"OResultSet: pComp->getNodeType() != SQLNodeType::Comparison");
if (pComp->getTokenValue().toChar() != '=')
{
@@ -611,9 +610,9 @@ void OStatement_Base::GetAssignValues()
void OStatement_Base::ParseAssignValues(const std::vector< OUString>& aColumnNameList,OSQLParseNode* pRow_Value_Constructor_Elem, sal_Int32 nIndex)
{
OSL_ENSURE(o3tl::make_unsigned(nIndex) <= aColumnNameList.size(),"SdbFileCursor::ParseAssignValues: nIndex > aColumnNameList.GetTokenCount()");
- OUString aColumnName(aColumnNameList[nIndex]);
+ const OUString& aColumnName(aColumnNameList[nIndex]);
OSL_ENSURE(aColumnName.getLength() > 0,"OResultSet: Column-Name not found");
- OSL_ENSURE(pRow_Value_Constructor_Elem != nullptr,"OResultSet: pRow_Value_Constructor_Elem must not be NULL!");
+ assert(pRow_Value_Constructor_Elem != nullptr && "OResultSet: pRow_Value_Constructor_Elem must not be NULL!");
if (pRow_Value_Constructor_Elem->getNodeType() == SQLNodeType::String ||
pRow_Value_Constructor_Elem->getNodeType() == SQLNodeType::IntNum ||
@@ -660,14 +659,6 @@ void OStatement_Base::SetAssignValue(const OUString& aColumnName,
{
switch (::comphelper::getINT32(xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE))))
{
- // put criteria depending on the Type as String or double in the variable
- case DataType::CHAR:
- case DataType::VARCHAR:
- case DataType::LONGVARCHAR:
- *(*m_aAssignValues)[nId] = ORowSetValue(aValue);
- //Characterset is already converted, since the entire statement was converted
- break;
-
case DataType::BIT:
if (aValue.equalsIgnoreAsciiCase("TRUE") || aValue[0] == '1')
*(*m_aAssignValues)[nId] = true;
@@ -676,6 +667,10 @@ void OStatement_Base::SetAssignValue(const OUString& aColumnName,
else
throwFunctionSequenceException(*this);
break;
+ case DataType::CHAR:
+ case DataType::VARCHAR:
+ case DataType::LONGVARCHAR:
+ //Characterset is already converted, since the entire statement was converted
case DataType::TINYINT:
case DataType::SMALLINT:
case DataType::INTEGER:
diff --git a/connectivity/source/drivers/file/FStringFunctions.cxx b/connectivity/source/drivers/file/FStringFunctions.cxx
index 619c1a128dbf..d02c7cce1737 100644
--- a/connectivity/source/drivers/file/FStringFunctions.cxx
+++ b/connectivity/source/drivers/file/FStringFunctions.cxx
@@ -18,6 +18,8 @@
*/
#include <file/FStringFunctions.hxx>
+
+#include <comphelper/string.hxx>
#include <rtl/ustrbuf.hxx>
using namespace connectivity;
@@ -61,7 +63,7 @@ ORowSetValue OOp_Char::operate(const std::vector<ORowSetValue>& lhs) const
if (lhs.empty())
return ORowSetValue();
- OUStringBuffer sRet;
+ OUStringBuffer sRet(static_cast<sal_Int32>(lhs.size()));
std::vector<ORowSetValue>::const_reverse_iterator aIter = lhs.rbegin();
std::vector<ORowSetValue>::const_reverse_iterator aEnd = lhs.rend();
for (; aIter != aEnd; ++aIter)
@@ -151,13 +153,9 @@ ORowSetValue OOp_Space::operate(const ORowSetValue& lhs) const
if (lhs.isNull())
return lhs;
- const char c = ' ';
- OUStringBuffer sRet;
- sal_Int32 nCount = lhs.getInt32();
- for (sal_Int32 i = 0; i < nCount; ++i)
- {
- sRet.appendAscii(&c, 1);
- }
+ sal_Int32 nCount = std::max(lhs.getInt32(), sal_Int32(0));
+ OUStringBuffer sRet(nCount);
+ comphelper::string::padToLength(sRet, nCount, ' ');
return sRet.makeStringAndClear();
}
@@ -169,14 +167,7 @@ ORowSetValue OOp_Replace::operate(const std::vector<ORowSetValue>& lhs) const
OUString sStr = lhs[2].getString();
OUString sFrom = lhs[1].getString();
OUString sTo = lhs[0].getString();
- sal_Int32 nIndexOf = sStr.indexOf(sFrom);
- while (nIndexOf != -1)
- {
- sStr = sStr.replaceAt(nIndexOf, sFrom.getLength(), sTo);
- nIndexOf = sStr.indexOf(sFrom, nIndexOf + sTo.getLength());
- }
-
- return sStr;
+ return sStr.replaceAll(sFrom, sTo);
}
ORowSetValue OOp_Repeat::operate(const ORowSetValue& lhs, const ORowSetValue& rhs) const
@@ -184,11 +175,12 @@ ORowSetValue OOp_Repeat::operate(const ORowSetValue& lhs, const ORowSetValue& rh
if (lhs.isNull() || rhs.isNull())
return lhs;
- OUStringBuffer sRet;
- sal_Int32 nCount = rhs.getInt32();
+ const OUString s = lhs.getString();
+ const sal_Int32 nCount = std::max(rhs.getInt32(), sal_Int32(0));
+ OUStringBuffer sRet(s.getLength() * nCount);
for (sal_Int32 i = 0; i < nCount; ++i)
{
- sRet.append(lhs.getString());
+ sRet.append(s);
}
return sRet.makeStringAndClear();
}
diff --git a/connectivity/source/drivers/file/FTable.cxx b/connectivity/source/drivers/file/FTable.cxx
index 50475449ef73..120af8a61a11 100644
--- a/connectivity/source/drivers/file/FTable.cxx
+++ b/connectivity/source/drivers/file/FTable.cxx
@@ -74,7 +74,7 @@ void OFileTable::refreshColumns()
{
::std::vector< OUString> aVector;
Reference< XResultSet > xResult = m_pConnection->getMetaData()->getColumns(Any(),
- m_SchemaName,m_Name, "%");
+ m_SchemaName,m_Name, u"%"_ustr);
if(xResult.is())
{
@@ -118,27 +118,10 @@ void SAL_CALL OFileTable::disposing()
FileClose();
}
-Sequence< sal_Int8 > OFileTable::getUnoTunnelId()
-{
- static const comphelper::UnoIdInit s_Id;
- return s_Id.getSeq();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OFileTable::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return comphelper::getSomethingImpl(rId, this,
- comphelper::FallbackToGetSomethingOf<OTable_TYPEDEF>{});
-}
-
void OFileTable::FileClose()
{
::osl::MutexGuard aGuard(m_aMutex);
- if (m_pFileStream && m_pFileStream->IsWritable())
- m_pFileStream->Flush();
-
m_pFileStream.reset();
m_pBuffer.reset();
}
diff --git a/connectivity/source/drivers/file/FTables.cxx b/connectivity/source/drivers/file/FTables.cxx
index c063f4a890e6..25321b1721af 100644
--- a/connectivity/source/drivers/file/FTables.cxx
+++ b/connectivity/source/drivers/file/FTables.cxx
@@ -23,14 +23,12 @@
using namespace connectivity;
using namespace connectivity::file;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-sdbcx::ObjectType OTables::createObject(const OUString& /*_rName*/)
+css::uno::Reference< css::beans::XPropertySet > OTables::createObject(const OUString& /*_rName*/)
{
- return sdbcx::ObjectType();
+ return nullptr;
}
void OTables::impl_refresh( )
diff --git a/connectivity/source/drivers/file/fanalyzer.cxx b/connectivity/source/drivers/file/fanalyzer.cxx
index a0d1305f6f89..0a749cc3b22d 100644
--- a/connectivity/source/drivers/file/fanalyzer.cxx
+++ b/connectivity/source/drivers/file/fanalyzer.cxx
@@ -28,7 +28,6 @@ using namespace ::connectivity;
using namespace ::connectivity::file;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
OSQLAnalyzer::OSQLAnalyzer(OConnection* _pConnection)
diff --git a/connectivity/source/drivers/file/fcode.cxx b/connectivity/source/drivers/file/fcode.cxx
index 14fb8f41d6f8..ec56032c8491 100644
--- a/connectivity/source/drivers/file/fcode.cxx
+++ b/connectivity/source/drivers/file/fcode.cxx
@@ -20,11 +20,10 @@
#include <file/fcode.hxx>
#include <osl/diagnose.h>
#include <sal/log.hxx>
-#include <connectivity/sqlparse.hxx>
+#include <connectivity/sqlnode.hxx>
#include <sqlbison.hxx>
#include <com/sun/star/sdb/SQLFilterOperator.hpp>
-using namespace ::comphelper;
using namespace connectivity;
using namespace connectivity::file;
using namespace ::com::sun::star::sdbc;
diff --git a/connectivity/source/drivers/file/fcomp.cxx b/connectivity/source/drivers/file/fcomp.cxx
index e725b1870865..86ed7d4cf8c5 100644
--- a/connectivity/source/drivers/file/fcomp.cxx
+++ b/connectivity/source/drivers/file/fcomp.cxx
@@ -22,9 +22,6 @@
#include <connectivity/sqlparse.hxx>
#include <file/fanalyzer.hxx>
#include <com/sun/star/sdbc/XColumnLocate.hpp>
-#include <com/sun/star/util/DateTime.hpp>
-#include <com/sun/star/util/Date.hpp>
-#include <com/sun/star/util/Time.hpp>
#include <connectivity/dbexception.hxx>
#include <connectivity/dbconversion.hxx>
#include <com/sun/star/sdb/SQLFilterOperator.hpp>
@@ -32,7 +29,7 @@
#include <file/FDateFunctions.hxx>
#include <file/FNumericFunctions.hxx>
#include <file/FConnection.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <sqlbison.hxx>
#include <strings.hrc>
@@ -78,7 +75,7 @@ void OPredicateCompiler::start(OSQLParseNode const * pSQLParseNode)
DBG_ASSERT(pSQLParseNode->count() >= 4,"OFILECursor: Error in Parse Tree");
OSQLParseNode * pTableExp = pSQLParseNode->getChild(3);
- DBG_ASSERT(pTableExp != nullptr,"Error in Parse Tree");
+ assert(pTableExp && "Error in Parse Tree");
DBG_ASSERT(SQL_ISRULE(pTableExp,table_exp)," Error in Parse Tree");
DBG_ASSERT(pTableExp->count() == TABLE_EXPRESSION_CHILD_COUNT,"Error in Parse Tree");
@@ -333,12 +330,12 @@ void OPredicateCompiler::execute_BETWEEN(OSQLParseNode const * pPredicateNode)
OOperand* pColumnOp = execute(pColumn);
OOperand* pOb1 = execute(p1stValue);
- OBoolOperator* pOperator = new OOp_COMPARE(bNot ? SQLFilterOperator::LESS_EQUAL : SQLFilterOperator::GREATER);
+ OBoolOperator* pOperator = new OOp_COMPARE(bNot ? SQLFilterOperator::LESS : SQLFilterOperator::GREATER_EQUAL);
m_aCodeList.emplace_back(pOperator);
execute(pColumn);
OOperand* pOb2 = execute(p2ndtValue);
- pOperator = new OOp_COMPARE(bNot ? SQLFilterOperator::GREATER_EQUAL : SQLFilterOperator::LESS);
+ pOperator = new OOp_COMPARE(bNot ? SQLFilterOperator::GREATER : SQLFilterOperator::LESS_EQUAL);
m_aCodeList.emplace_back(pOperator);
if ( pColumnOp && pOb1 && pOb2 )
@@ -353,6 +350,8 @@ void OPredicateCompiler::execute_BETWEEN(OSQLParseNode const * pPredicateNode)
break;
case DataType::DECIMAL:
case DataType::NUMERIC:
+ case DataType::DOUBLE:
+ case DataType::REAL:
pOb1->setValue(pOb1->getValue().getDouble());
pOb2->setValue(pOb2->getValue().getDouble());
break;
@@ -360,11 +359,6 @@ void OPredicateCompiler::execute_BETWEEN(OSQLParseNode const * pPredicateNode)
pOb1->setValue(pOb1->getValue().getFloat());
pOb2->setValue(pOb2->getValue().getFloat());
break;
- case DataType::DOUBLE:
- case DataType::REAL:
- pOb1->setValue(pOb1->getValue().getDouble());
- pOb2->setValue(pOb2->getValue().getDouble());
- break;
case DataType::DATE:
pOb1->setValue(pOb1->getValue().getDate());
pOb2->setValue(pOb2->getValue().getDate());
@@ -549,7 +543,7 @@ bool OPredicateInterpreter::evaluate(OCodeList& rCodeList)
m_aStack.pop();
DBG_ASSERT(m_aStack.empty(), "Stack error");
- DBG_ASSERT(pOperand, "Stack error");
+ assert(pOperand && "Stack error");
const bool bResult = pOperand->isValid();
if (typeid(OOperandResult) == typeid(*pOperand))
@@ -575,7 +569,7 @@ void OPredicateInterpreter::evaluateSelection(OCodeList& rCodeList, ORowSetValue
m_aStack.pop();
DBG_ASSERT(m_aStack.empty(), "Stack error");
- DBG_ASSERT(pOperand, "Stack error");
+ assert(pOperand && "Stack error");
(*_rVal) = pOperand->getValue();
if (typeid(OOperandResult) == typeid(*pOperand))
diff --git a/connectivity/source/drivers/firebird/Blob.cxx b/connectivity/source/drivers/firebird/Blob.cxx
index 33ab36b8d33e..774246fa18d4 100644
--- a/connectivity/source/drivers/firebird/Blob.cxx
+++ b/connectivity/source/drivers/firebird/Blob.cxx
@@ -19,7 +19,7 @@
#include <connectivity/CommonTools.hxx>
#include <connectivity/dbexception.hxx>
#include <cppuhelper/exc_hlp.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
using namespace ::connectivity::firebird;
@@ -205,7 +205,7 @@ uno::Sequence< sal_Int8 > SAL_CALL Blob::getBytes(sal_Int64 nPosition,
ensureBlobIsOpened();
if (nPosition > m_nBlobLength || nPosition < 1)
- throw lang::IllegalArgumentException("nPosition out of range", *this, 0);
+ throw lang::IllegalArgumentException(u"nPosition out of range"_ustr, *this, 0);
// We only have to read as many bytes as are available, i.e. nPosition+nBytes
// can legally be greater than the total length, hence we don't bother to check.
@@ -234,15 +234,13 @@ uno::Reference< XInputStream > SAL_CALL Blob::getBinaryStream()
sal_Int64 SAL_CALL Blob::position(const uno::Sequence< sal_Int8 >& /*rPattern*/,
sal_Int64 /*nStart*/)
{
- ::dbtools::throwFeatureNotImplementedSQLException("Blob::position", *this);
- return 0;
+ ::dbtools::throwFeatureNotImplementedSQLException(u"Blob::position"_ustr, *this);
}
sal_Int64 SAL_CALL Blob::positionOfBlob(const uno::Reference< XBlob >& /*rPattern*/,
sal_Int64 /*aStart*/)
{
- ::dbtools::throwFeatureNotImplementedSQLException("Blob::positionOfBlob", *this);
- return 0;
+ ::dbtools::throwFeatureNotImplementedSQLException(u"Blob::positionOfBlob"_ustr, *this);
}
// ---- XInputStream ----------------------------------------------------------
diff --git a/connectivity/source/drivers/firebird/Blob.hxx b/connectivity/source/drivers/firebird/Blob.hxx
index 990108934bf2..80a23459288e 100644
--- a/connectivity/source/drivers/firebird/Blob.hxx
+++ b/connectivity/source/drivers/firebird/Blob.hxx
@@ -19,81 +19,81 @@
#include <vector>
namespace connectivity::firebird
+{
+ typedef ::cppu::WeakComponentImplHelper< css::sdbc::XBlob,
+ css::io::XInputStream >
+ Blob_BASE;
+
+ class Blob :
+ public Blob_BASE
{
- typedef ::cppu::WeakComponentImplHelper< css::sdbc::XBlob,
- css::io::XInputStream >
- Blob_BASE;
-
- class Blob :
- public Blob_BASE
- {
- protected:
- ::osl::Mutex m_aMutex;
-
- isc_db_handle* m_pDatabaseHandle;
- isc_tr_handle* m_pTransactionHandle;
- // We store our own copy of the blob id as typically the statement
- // manages its own blob id, and blobs are independent of a statement
- // in firebird.
- ISC_QUAD m_blobID;
- isc_blob_handle m_blobHandle;
-
- bool m_bBlobOpened;
- sal_Int64 m_nBlobLength;
- sal_uInt16 m_nMaxSegmentSize;
- sal_Int64 m_nBlobPosition;
-
- ISC_STATUS_ARRAY m_statusVector;
-
- /// @throws css::sdbc::SQLException
- void ensureBlobIsOpened();
- /**
- * Closes the blob and cleans up resources -- can be used to reset
- * the blob if we e.g. want to read from the beginning again.
- *
- * @throws css::sdbc::SQLException
- */
- void closeBlob();
- sal_uInt16 getMaximumSegmentSize();
-
- public:
- Blob(isc_db_handle* pDatabaseHandle,
- isc_tr_handle* pTransactionHandle,
- ISC_QUAD const & aBlobID);
-
- bool readOneSegment(std::vector<char>& rDataOut);
-
- // ---- XBlob ----------------------------------------------------
- virtual sal_Int64 SAL_CALL
- length() override;
- virtual css::uno::Sequence< sal_Int8 > SAL_CALL
- getBytes(sal_Int64 aPosition, sal_Int32 aLength) override;
- virtual css::uno::Reference< css::io::XInputStream > SAL_CALL
- getBinaryStream() override;
- virtual sal_Int64 SAL_CALL
- position(const css::uno::Sequence< sal_Int8 >& rPattern,
- sal_Int64 aStart) override;
- virtual sal_Int64 SAL_CALL
- positionOfBlob(const css::uno::Reference< css::sdbc::XBlob >& rPattern,
- sal_Int64 aStart) override;
-
- // ---- XInputStream ----------------------------------------------
- virtual sal_Int32 SAL_CALL
- readBytes(css::uno::Sequence< sal_Int8 >& rDataOut,
- sal_Int32 nBytes) override;
- virtual sal_Int32 SAL_CALL
- readSomeBytes(css::uno::Sequence< sal_Int8 >& rDataOut,
- sal_Int32 nMaximumBytes) override;
- virtual void SAL_CALL
- skipBytes(sal_Int32 nBytes) override;
- virtual sal_Int32 SAL_CALL
- available() override;
- virtual void SAL_CALL
- closeInput() override;
-
- // ---- OComponentHelper ------------------------------------------
- virtual void SAL_CALL disposing() override;
- };
+ protected:
+ ::osl::Mutex m_aMutex;
+
+ isc_db_handle* m_pDatabaseHandle;
+ isc_tr_handle* m_pTransactionHandle;
+ // We store our own copy of the blob id as typically the statement
+ // manages its own blob id, and blobs are independent of a statement
+ // in firebird.
+ ISC_QUAD m_blobID;
+ isc_blob_handle m_blobHandle;
+
+ bool m_bBlobOpened;
+ sal_Int64 m_nBlobLength;
+ sal_uInt16 m_nMaxSegmentSize;
+ sal_Int64 m_nBlobPosition;
+
+ ISC_STATUS_ARRAY m_statusVector;
+
+ /// @throws css::sdbc::SQLException
+ void ensureBlobIsOpened();
+ /**
+ * Closes the blob and cleans up resources -- can be used to reset
+ * the blob if we e.g. want to read from the beginning again.
+ *
+ * @throws css::sdbc::SQLException
+ */
+ void closeBlob();
+ sal_uInt16 getMaximumSegmentSize();
+
+ public:
+ Blob(isc_db_handle* pDatabaseHandle,
+ isc_tr_handle* pTransactionHandle,
+ ISC_QUAD const & aBlobID);
+
+ bool readOneSegment(std::vector<char>& rDataOut);
+
+ // ---- XBlob ----------------------------------------------------
+ virtual sal_Int64 SAL_CALL
+ length() override;
+ virtual css::uno::Sequence< sal_Int8 > SAL_CALL
+ getBytes(sal_Int64 aPosition, sal_Int32 aLength) override;
+ virtual css::uno::Reference< css::io::XInputStream > SAL_CALL
+ getBinaryStream() override;
+ virtual sal_Int64 SAL_CALL
+ position(const css::uno::Sequence< sal_Int8 >& rPattern,
+ sal_Int64 aStart) override;
+ virtual sal_Int64 SAL_CALL
+ positionOfBlob(const css::uno::Reference< css::sdbc::XBlob >& rPattern,
+ sal_Int64 aStart) override;
+
+ // ---- XInputStream ----------------------------------------------
+ virtual sal_Int32 SAL_CALL
+ readBytes(css::uno::Sequence< sal_Int8 >& rDataOut,
+ sal_Int32 nBytes) override;
+ virtual sal_Int32 SAL_CALL
+ readSomeBytes(css::uno::Sequence< sal_Int8 >& rDataOut,
+ sal_Int32 nMaximumBytes) override;
+ virtual void SAL_CALL
+ skipBytes(sal_Int32 nBytes) override;
+ virtual sal_Int32 SAL_CALL
+ available() override;
+ virtual void SAL_CALL
+ closeInput() override;
+
+ // ---- OComponentHelper ------------------------------------------
+ virtual void SAL_CALL disposing() override;
+ };
}
diff --git a/connectivity/source/drivers/firebird/Catalog.cxx b/connectivity/source/drivers/firebird/Catalog.cxx
index c743b42cc75f..aba0784662a7 100644
--- a/connectivity/source/drivers/firebird/Catalog.cxx
+++ b/connectivity/source/drivers/firebird/Catalog.cxx
@@ -10,6 +10,7 @@
#include "Catalog.hxx"
#include "Tables.hxx"
#include "Users.hxx"
+#include "Views.hxx"
#include <com/sun/star/sdbc/XRow.hpp>
@@ -27,11 +28,11 @@ Catalog::Catalog(const uno::Reference< XConnection >& rConnection):
//----- OCatalog -------------------------------------------------------------
void Catalog::refreshTables()
{
- Sequence< OUString > aTypes {"TABLE", "VIEW"};
+ Sequence< OUString > aTypes {u"TABLE"_ustr, u"VIEW"_ustr};
uno::Reference< XResultSet > xTables = m_xMetaData->getTables(Any(),
- "%",
- "%",
+ u"%"_ustr,
+ u"%"_ustr,
aTypes);
if (!xTables.is())
@@ -53,8 +54,20 @@ void Catalog::refreshTables()
void Catalog::refreshViews()
{
- // TODO: implement me.
- // Sets m_pViews (OCatalog)
+ css::uno::Reference<css::sdbc::XResultSet> xViews
+ = m_xMetaData->getTables(css::uno::Any(), u"%"_ustr, u"%"_ustr, { u"VIEW"_ustr });
+
+ if (!xViews.is())
+ return;
+
+ ::std::vector<OUString> aViewNames;
+
+ fillNames(xViews, aViewNames);
+
+ if (!m_pViews)
+ m_pViews.reset(new Views(m_xConnection, *this, m_aMutex, aViewNames));
+ else
+ m_pViews->reFill(aViewNames);
}
//----- IRefreshableGroups ---------------------------------------------------
@@ -67,7 +80,7 @@ void Catalog::refreshGroups()
void Catalog::refreshUsers()
{
Reference<XStatement> xStmt= m_xMetaData->getConnection()->createStatement();
- uno::Reference< XResultSet > xUsers = xStmt->executeQuery("SELECT DISTINCT RDB$USER FROM RDB$USER_PRIVILEGES");
+ uno::Reference< XResultSet > xUsers = xStmt->executeQuery(u"SELECT DISTINCT RDB$USER FROM RDB$USER_PRIVILEGES"_ustr);
if (!xUsers.is())
return;
diff --git a/connectivity/source/drivers/firebird/Catalog.hxx b/connectivity/source/drivers/firebird/Catalog.hxx
index 4a562e22a26e..7ae15960546b 100644
--- a/connectivity/source/drivers/firebird/Catalog.hxx
+++ b/connectivity/source/drivers/firebird/Catalog.hxx
@@ -12,25 +12,28 @@
#include <sdbcx/VCatalog.hxx>
namespace connectivity::firebird
+{
+ class Catalog: public ::connectivity::sdbcx::OCatalog
{
- class Catalog: public ::connectivity::sdbcx::OCatalog
- {
- css::uno::Reference< css::sdbc::XConnection >
- m_xConnection;
+ css::uno::Reference< css::sdbc::XConnection >
+ m_xConnection;
- public:
- explicit Catalog(const css::uno::Reference< css::sdbc::XConnection >& rConnection);
+ public:
+ explicit Catalog(const css::uno::Reference< css::sdbc::XConnection >& rConnection);
- // OCatalog
- virtual void refreshTables() override;
- virtual void refreshViews() override;
+ // OCatalog
+ virtual void refreshTables() override;
+ virtual void refreshViews() override;
- // IRefreshableGroups
- virtual void refreshGroups() override;
+ // IRefreshableGroups
+ virtual void refreshGroups() override;
- // IRefreshableUsers
- virtual void refreshUsers() override;
- };
+ // IRefreshableUsers
+ virtual void refreshUsers() override;
+
+ sdbcx::OCollection* getPrivateTables() const { return m_pTables.get(); }
+ sdbcx::OCollection* getPrivateViews() const { return m_pViews.get(); }
+ };
} // namespace connectivity::firebird
diff --git a/connectivity/source/drivers/firebird/Clob.cxx b/connectivity/source/drivers/firebird/Clob.cxx
index 707020b39bbf..95d14c11d08d 100644
--- a/connectivity/source/drivers/firebird/Clob.cxx
+++ b/connectivity/source/drivers/firebird/Clob.cxx
@@ -9,8 +9,6 @@
#include <sal/config.h>
-#include <string_view>
-
#include "Clob.hxx"
#include "Blob.hxx"
@@ -72,11 +70,11 @@ OUString SAL_CALL Clob::getSubString(sal_Int64 nPosition,
sal_Int32 nLength)
{
if (nPosition < 1) // XClob is indexed from 1
- throw lang::IllegalArgumentException("nPosition < 1", *this, 0);
+ throw lang::IllegalArgumentException(u"nPosition < 1"_ustr, *this, 0);
--nPosition; // make 0-based
if (nLength < 0)
- throw lang::IllegalArgumentException("nLength < 0", *this, 0);
+ throw lang::IllegalArgumentException(u"nLength < 0"_ustr, *this, 0);
MutexGuard aGuard(m_aMutex);
checkDisposed(Clob_BASE::rBHelper.bDisposed);
@@ -96,7 +94,7 @@ OUString SAL_CALL Clob::getSubString(sal_Int64 nPosition,
if (sSegment.getLength() < nPosition)
{
if (bLastRead)
- throw lang::IllegalArgumentException("nPosition out of range", *this, 0);
+ throw lang::IllegalArgumentException(u"nPosition out of range"_ustr, *this, 0);
nPosition -= sSegment.getLength();
continue;
}
@@ -112,7 +110,7 @@ OUString SAL_CALL Clob::getSubString(sal_Int64 nPosition,
assert(sSegmentBuffer.getLength() < nLength);
if (bLastRead)
- throw lang::IllegalArgumentException("out of range", *this, 0);
+ throw lang::IllegalArgumentException(u"out of range"_ustr, *this, 0);
nPosition = 0; // No offset after first append
}
@@ -129,15 +127,13 @@ uno::Reference< XInputStream > SAL_CALL Clob::getCharacterStream()
sal_Int64 SAL_CALL Clob::position(const OUString& /*rPattern*/,
sal_Int32 /*nStart*/)
{
- ::dbtools::throwFeatureNotImplementedSQLException("Clob::position", *this);
- return 0;
+ ::dbtools::throwFeatureNotImplementedSQLException(u"Clob::position"_ustr, *this);
}
sal_Int64 SAL_CALL Clob::positionOfClob(const Reference <XClob >& /*rPattern*/,
sal_Int64 /*aStart*/)
{
- ::dbtools::throwFeatureNotImplementedSQLException("Clob::positionOfClob", *this);
- return 0;
+ ::dbtools::throwFeatureNotImplementedSQLException(u"Clob::positionOfClob"_ustr, *this);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/firebird/Clob.hxx b/connectivity/source/drivers/firebird/Clob.hxx
index 7fc5459d5d29..385836627e68 100644
--- a/connectivity/source/drivers/firebird/Clob.hxx
+++ b/connectivity/source/drivers/firebird/Clob.hxx
@@ -18,46 +18,46 @@
#include <rtl/ref.hxx>
namespace connectivity::firebird
- {
- typedef ::cppu::WeakComponentImplHelper< css::sdbc::XClob >
- Clob_BASE;
+{
+ typedef ::cppu::WeakComponentImplHelper< css::sdbc::XClob >
+ Clob_BASE;
- class Clob :
- public Clob_BASE
- {
- protected:
- ::osl::Mutex m_aMutex;
+ class Clob :
+ public Clob_BASE
+ {
+ protected:
+ ::osl::Mutex m_aMutex;
- /*
- * In Firebird Clob (textual Blob) is a subtype of blob,
- * hence we store the data in a Blob, and the Clob class is
- * a wrapper around that.
- */
- rtl::Reference<connectivity::firebird::Blob> m_aBlob;
+ /*
+ * In Firebird Clob (textual Blob) is a subtype of blob,
+ * hence we store the data in a Blob, and the Clob class is
+ * a wrapper around that.
+ */
+ rtl::Reference<connectivity::firebird::Blob> m_aBlob;
- sal_Int64 m_nCharCount;
+ sal_Int64 m_nCharCount;
- public:
- Clob(isc_db_handle* pDatabaseHandle,
- isc_tr_handle* pTransactionHandle,
- ISC_QUAD const & aBlobID);
+ public:
+ Clob(isc_db_handle* pDatabaseHandle,
+ isc_tr_handle* pTransactionHandle,
+ ISC_QUAD const & aBlobID);
- // ---- XClob ----------------------------------------------------
- virtual sal_Int64 SAL_CALL
- length() override;
- virtual OUString SAL_CALL
- getSubString(sal_Int64 aPosition, sal_Int32 aLength) override;
- virtual css::uno::Reference< css::io::XInputStream > SAL_CALL
- getCharacterStream() override;
- virtual sal_Int64 SAL_CALL
- position(const OUString& rPattern,
- sal_Int32 aStart) override;
- virtual sal_Int64 SAL_CALL
- positionOfClob(const ::css::uno::Reference< ::css::sdbc::XClob >& rPattern,
- sal_Int64 aStart) override;
- // ---- OComponentHelper ------------------------------------------
- virtual void SAL_CALL disposing() override;
- };
+ // ---- XClob ----------------------------------------------------
+ virtual sal_Int64 SAL_CALL
+ length() override;
+ virtual OUString SAL_CALL
+ getSubString(sal_Int64 aPosition, sal_Int32 aLength) override;
+ virtual css::uno::Reference< css::io::XInputStream > SAL_CALL
+ getCharacterStream() override;
+ virtual sal_Int64 SAL_CALL
+ position(const OUString& rPattern,
+ sal_Int32 aStart) override;
+ virtual sal_Int64 SAL_CALL
+ positionOfClob(const ::css::uno::Reference< ::css::sdbc::XClob >& rPattern,
+ sal_Int64 aStart) override;
+ // ---- OComponentHelper ------------------------------------------
+ virtual void SAL_CALL disposing() override;
+ };
}
diff --git a/connectivity/source/drivers/firebird/Column.cxx b/connectivity/source/drivers/firebird/Column.cxx
index 0a18ebe5b441..5838456abaf7 100644
--- a/connectivity/source/drivers/firebird/Column.cxx
+++ b/connectivity/source/drivers/firebird/Column.cxx
@@ -45,7 +45,7 @@ void Column::construct()
css::uno::Sequence< OUString > SAL_CALL Column::getSupportedServiceNames( )
{
- return { "com.sun.star.sdbc.Firebird" };
+ return { u"com.sun.star.sdbc.Firebird"_ustr };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/firebird/Column.hxx b/connectivity/source/drivers/firebird/Column.hxx
index c66287ce5668..13a13052feeb 100644
--- a/connectivity/source/drivers/firebird/Column.hxx
+++ b/connectivity/source/drivers/firebird/Column.hxx
@@ -11,21 +11,21 @@
#include <connectivity/sdbcx/VColumn.hxx>
namespace connectivity::firebird
+{
+ class Column;
+ typedef ::comphelper::OIdPropertyArrayUsageHelper<Column> Column_PROP;
+ class Column : public sdbcx::OColumn,
+ public Column_PROP
{
- class Column;
- typedef ::comphelper::OIdPropertyArrayUsageHelper<Column> Column_PROP;
- class Column : public sdbcx::OColumn,
- public Column_PROP
- {
- OUString m_sAutoIncrement;
- protected:
- virtual ::cppu::IPropertyArrayHelper* createArrayHelper( sal_Int32 _nId) const override;
- virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
- public:
- Column();
- virtual void construct() override;
- virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override;
- };
+ OUString m_sAutoIncrement;
+ protected:
+ virtual ::cppu::IPropertyArrayHelper* createArrayHelper( sal_Int32 _nId) const override;
+ virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
+ public:
+ Column();
+ virtual void construct() override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override;
+ };
}
diff --git a/connectivity/source/drivers/firebird/Columns.cxx b/connectivity/source/drivers/firebird/Columns.cxx
index 200eec1fb57d..d36e25f9195b 100644
--- a/connectivity/source/drivers/firebird/Columns.cxx
+++ b/connectivity/source/drivers/firebird/Columns.cxx
@@ -12,13 +12,11 @@
using namespace ::connectivity;
using namespace ::connectivity::firebird;
-using namespace ::connectivity::sdbcx;
using namespace ::cppu;
using namespace ::osl;
using namespace ::com::sun::star;
-using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::uno;
Columns::Columns(Table& rTable,
diff --git a/connectivity/source/drivers/firebird/Columns.hxx b/connectivity/source/drivers/firebird/Columns.hxx
index a211f70d1809..ef3b06bc6a4f 100644
--- a/connectivity/source/drivers/firebird/Columns.hxx
+++ b/connectivity/source/drivers/firebird/Columns.hxx
@@ -15,15 +15,15 @@
namespace connectivity::firebird
{
- class Columns: public ::connectivity::OColumnsHelper
- {
- protected:
- virtual css::uno::Reference< css::beans::XPropertySet > createDescriptor() override;
- public:
- Columns(Table& rTable,
- ::osl::Mutex& rMutex,
- const ::std::vector< OUString> &_rVector);
- };
+ class Columns: public ::connectivity::OColumnsHelper
+ {
+ protected:
+ virtual css::uno::Reference< css::beans::XPropertySet > createDescriptor() override;
+ public:
+ Columns(Table& rTable,
+ ::osl::Mutex& rMutex,
+ const ::std::vector< OUString> &_rVector);
+ };
} // namespace connectivity::firebird
diff --git a/connectivity/source/drivers/firebird/Connection.cxx b/connectivity/source/drivers/firebird/Connection.cxx
index 7122d80b7a15..fc105a883e4e 100644
--- a/connectivity/source/drivers/firebird/Connection.cxx
+++ b/connectivity/source/drivers/firebird/Connection.cxx
@@ -22,7 +22,6 @@
#include "Clob.hxx"
#include "Connection.hxx"
#include "DatabaseMetaData.hxx"
-#include "Driver.hxx"
#include "PreparedStatement.hxx"
#include "Statement.hxx"
#include "Util.hxx"
@@ -48,7 +47,6 @@
#include <comphelper/storagehelper.hxx>
#include <cppuhelper/exc_hlp.hxx>
#include <unotools/tempfile.hxx>
-#include <unotools/localfilehelper.hxx>
#include <osl/file.hxx>
#include <rtl/strbuf.hxx>
@@ -74,11 +72,11 @@ using namespace ::com::sun::star::uno;
* Location within the .odb that an embedded .fdb will be stored.
* Only relevant for embedded dbs.
*/
-constexpr OUStringLiteral our_sFDBLocation( u"firebird.fdb" );
+constexpr OUString our_sFDBLocation( u"firebird.fdb"_ustr );
/**
* Older version of LO may store the database in a .fdb file
*/
-constexpr OUStringLiteral our_sFBKLocation( u"firebird.fbk" );
+constexpr OUString our_sFBKLocation( u"firebird.fbk"_ustr );
Connection::Connection()
: Connection_BASE(m_aMutex)
@@ -86,7 +84,7 @@ Connection::Connection()
, m_bIsFile(false)
, m_bIsAutoCommit(true)
, m_bIsReadOnly(false)
- , m_aTransactionIsolation(TransactionIsolation::REPEATABLE_READ)
+ , m_aTransactionIsolation(TransactionIsolation::READ_COMMITTED)
#if SAL_TYPES_SIZEOFPOINTER == 8
, m_aDBHandle(0)
, m_aTransactionHandle(0)
@@ -163,7 +161,7 @@ void Connection::construct(const OUString& url, const Sequence< PropertyValue >&
bIsNewDatabase = !m_xEmbeddedStorage->hasElements();
- m_pDatabaseFileDir.reset(new ::utl::TempFile(nullptr, true));
+ m_pDatabaseFileDir.reset(new ::utl::TempFileNamed(nullptr, true));
m_pDatabaseFileDir->EnableKillingFile();
m_sFirebirdURL = m_pDatabaseFileDir->GetFileName() + "/firebird.fdb";
m_sFBKPath = m_pDatabaseFileDir->GetFileName() + "/firebird.fbk";
@@ -198,7 +196,7 @@ void Connection::construct(const OUString& url, const Sequence< PropertyValue >&
// External file AND/OR remote connection
else if (url.startsWith("sdbc:firebird:"))
{
- m_sFirebirdURL = url.copy(OUString("sdbc:firebird:").getLength());
+ m_sFirebirdURL = url.copy(strlen("sdbc:firebird:"));
if (m_sFirebirdURL.startsWith("file://"))
{
m_bIsFile = true;
@@ -219,7 +217,7 @@ void Connection::construct(const OUString& url, const Sequence< PropertyValue >&
dpbBuffer.push_back(isc_dpb_version1);
dpbBuffer.push_back(isc_dpb_sql_dialect);
dpbBuffer.push_back(1); // 1 byte long
- dpbBuffer.push_back(FIREBIRD_SQL_DIALECT);
+ dpbBuffer.push_back(SQL_DIALECT_CURRENT);
// set UTF8 as default character set of the database
const char sCharset[] = "UTF8";
@@ -235,8 +233,8 @@ void Connection::construct(const OUString& url, const Sequence< PropertyValue >&
if (m_bIsEmbedded || m_bIsFile)
{
- userName = "sysdba";
- userPassword = "masterkey";
+ userName = "sysdba"_ostr;
+ userPassword = "masterkey"_ostr;
}
else
{
@@ -341,15 +339,9 @@ void Connection::construct(const OUString& url, const Sequence< PropertyValue >&
}
}
-void Connection::notifyDatabaseModified()
-{
- if (m_xParentDocument.is()) // Only true in embedded mode
- m_xParentDocument->setModified(true);
-}
-
//----- XServiceInfo ---------------------------------------------------------
-IMPLEMENT_SERVICE_INFO(Connection, "com.sun.star.sdbc.drivers.firebird.Connection",
- "com.sun.star.sdbc.Connection")
+IMPLEMENT_SERVICE_INFO(Connection, u"com.sun.star.sdbc.drivers.firebird.Connection"_ustr,
+ u"com.sun.star.sdbc.Connection"_ustr)
Reference< XBlob> Connection::createBlob(ISC_QUAD const * pBlobId)
{
@@ -360,7 +352,7 @@ Reference< XBlob> Connection::createBlob(ISC_QUAD const * pBlobId)
&m_aTransactionHandle,
*pBlobId);
- m_aStatements.push_back(WeakReferenceHelper(xReturn));
+ m_aStatements.emplace_back(xReturn);
return xReturn;
}
@@ -373,7 +365,7 @@ Reference< XClob> Connection::createClob(ISC_QUAD const * pBlobId)
&m_aTransactionHandle,
*pBlobId);
- m_aStatements.push_back(WeakReferenceHelper(xReturn));
+ m_aStatements.emplace_back(xReturn);
return xReturn;
}
@@ -385,7 +377,7 @@ sal_Int64 SAL_CALL Connection::getSomething(const css::uno::Sequence<sal_Int8>&
}
// static
-css::uno::Sequence<sal_Int8> Connection::getUnoTunnelId()
+const css::uno::Sequence<sal_Int8> & Connection::getUnoTunnelId()
{
static const comphelper::UnoIdInit implId;
return implId.getSeq();
@@ -404,7 +396,7 @@ Reference< XStatement > SAL_CALL Connection::createStatement( )
// create a statement
// the statement can only be executed once
Reference< XStatement > xReturn = new OStatement(this);
- m_aStatements.push_back(WeakReferenceHelper(xReturn));
+ m_aStatements.emplace_back(xReturn);
return xReturn;
}
@@ -420,7 +412,7 @@ Reference< XPreparedStatement > SAL_CALL Connection::prepareStatement(
buildTypeInfo();
Reference< XPreparedStatement > xReturn = new OPreparedStatement(this, _sSql);
- m_aStatements.push_back(WeakReferenceHelper(xReturn));
+ m_aStatements.emplace_back(xReturn);
return xReturn;
}
@@ -442,7 +434,6 @@ Reference< XPreparedStatement > SAL_CALL Connection::prepareCall(
OUString SAL_CALL Connection::nativeSQL( const OUString& _sSql )
{
- MutexGuard aGuard( m_aMutex );
// We do not need to adapt the SQL for Firebird atm.
return _sSql;
}
@@ -492,8 +483,6 @@ void Connection::setupTransaction()
aTransactionIsolation = isc_tpb_read_committed;
break;
case TransactionIsolation::REPEATABLE_READ:
- aTransactionIsolation = isc_tpb_consistency;
- break;
case TransactionIsolation::SERIALIZABLE:
aTransactionIsolation = isc_tpb_consistency;
break;
@@ -583,7 +572,7 @@ isc_svc_handle Connection::attachServiceManager()
*pSPB++ = isc_spb_version;
*pSPB++ = isc_spb_current_version;
*pSPB++ = isc_spb_user_name;
- OUString sUserName("SYSDBA");
+ OUString sUserName(u"SYSDBA"_ustr);
char aLength = static_cast<char>(sUserName.getLength());
*pSPB++ = aLength;
strncpy(pSPB,
@@ -631,22 +620,18 @@ void Connection::runBackupService(const short nAction)
OString sFBKPath = OUStringToOString(m_sFBKPath, RTL_TEXTENCODING_UTF8);
- OStringBuffer aRequest; // byte array
-
-
- aRequest.append(static_cast<char>(nAction));
-
- aRequest.append(char(isc_spb_dbname)); // .fdb
sal_uInt16 nFDBLength = sFDBPath.getLength();
- aRequest.append(static_cast<char>(nFDBLength & 0xFF)); // least significant byte first
- aRequest.append(static_cast<char>((nFDBLength >> 8) & 0xFF));
- aRequest.append(sFDBPath);
-
- aRequest.append(char(isc_spb_bkp_file)); // .fbk
sal_uInt16 nFBKLength = sFBKPath.getLength();
- aRequest.append(static_cast<char>(nFBKLength & 0xFF));
- aRequest.append(static_cast<char>((nFBKLength >> 8) & 0xFF));
- aRequest.append(sFBKPath);
+ OStringBuffer aRequest( // byte array
+ OStringChar(static_cast<char>(nAction))
+ + OStringChar(char(isc_spb_dbname)) // .fdb
+ + OStringChar(static_cast<char>(nFDBLength & 0xFF)) // least significant byte first
+ + OStringChar(static_cast<char>((nFDBLength >> 8) & 0xFF))
+ + sFDBPath
+ + OStringChar(char(isc_spb_bkp_file)) // .fbk
+ + OStringChar(static_cast<char>(nFBKLength & 0xFF))
+ + OStringChar(static_cast<char>((nFBKLength >> 8) & 0xFF))
+ + sFBKPath);
if (nAction == isc_action_svc_restore)
{
@@ -724,11 +709,11 @@ Reference< XDatabaseMetaData > SAL_CALL Connection::getMetaData( )
// here we have to create the class with biggest interface
// The answer is 42 :-)
- Reference< XDatabaseMetaData > xMetaData = m_xMetaData;
+ rtl::Reference< ODatabaseMetaData > xMetaData = m_xMetaData.get();
if(!xMetaData.is())
{
xMetaData = new ODatabaseMetaData(this); // need the connection because it can return it
- m_xMetaData = xMetaData;
+ m_xMetaData = xMetaData.get();
}
return xMetaData;
@@ -753,13 +738,12 @@ sal_Bool SAL_CALL Connection::isReadOnly()
void SAL_CALL Connection::setCatalog(const OUString& /*catalog*/)
{
- ::dbtools::throwFunctionNotSupportedSQLException("setCatalog", *this);
+ ::dbtools::throwFunctionNotSupportedSQLException(u"setCatalog"_ustr, *this);
}
OUString SAL_CALL Connection::getCatalog()
{
- ::dbtools::throwFunctionNotSupportedSQLException("getCatalog", *this);
- return OUString();
+ ::dbtools::throwFunctionNotSupportedSQLException(u"getCatalog"_ustr, *this);
}
void SAL_CALL Connection::setTransactionIsolation( sal_Int32 level )
@@ -781,13 +765,12 @@ sal_Int32 SAL_CALL Connection::getTransactionIsolation( )
Reference< XNameAccess > SAL_CALL Connection::getTypeMap()
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XConnection::getTypeMap", *this );
- return nullptr;
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XConnection::getTypeMap"_ustr, *this );
}
void SAL_CALL Connection::setTypeMap(const Reference< XNameAccess >&)
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XConnection::setTypeMap", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XConnection::setTypeMap"_ustr, *this );
}
//----- XCloseable -----------------------------------------------------------
@@ -829,42 +812,9 @@ void SAL_CALL Connection::documentEventOccured( const DocumentEvent& Event )
if ( !(m_bIsEmbedded && m_xEmbeddedStorage.is()) )
return;
- SAL_INFO("connectivity.firebird", "Writing .fbk from running db");
- try
- {
- runBackupService(isc_action_svc_backup);
- }
- catch (const SQLException& e)
- {
- auto a = cppu::getCaughtException();
- throw WrappedTargetRuntimeException(e.Message, e.Context, a);
- }
-
-
- Reference< XStream > xDBStream(m_xEmbeddedStorage->openStreamElement(our_sFBKLocation,
- ElementModes::WRITE));
-
- // TODO: verify the backup actually exists -- the backup service
- // can fail without giving any sane error messages / telling us
- // that it failed.
- using namespace ::comphelper;
- Reference< XComponentContext > xContext = comphelper::getProcessComponentContext();
- Reference< XInputStream > xInputStream;
- if (!xContext.is())
- return;
-
- xInputStream =
- OStorageHelper::GetInputStreamFromURL(m_sFBKPath, xContext);
- if (xInputStream.is())
- OStorageHelper::CopyInputToOutput( xInputStream,
- xDBStream->getOutputStream());
-
- // remove old fdb file if exists
- uno::Reference< ucb::XSimpleFileAccess > xFileAccess =
- ucb::SimpleFileAccess::create(xContext);
- if (xFileAccess->exists(m_sFirebirdURL))
- xFileAccess->kill(m_sFirebirdURL);
+ storeDatabase();
}
+
// XEventListener
void SAL_CALL Connection::disposing(const EventObject& /*rSource*/)
{
@@ -929,7 +879,7 @@ void Connection::disposing()
disposeStatements();
- m_xMetaData = css::uno::WeakReference< css::sdbc::XDatabaseMetaData>();
+ m_xMetaData.clear();
ISC_STATUS_ARRAY status; /* status vector */
if (m_aTransactionHandle)
@@ -945,13 +895,43 @@ void Connection::disposing()
evaluateStatusVector(status, u"isc_detach_database", *this);
}
}
- // TODO: write to storage again?
+
+ storeDatabase();
cppu::WeakComponentImplHelperBase::disposing();
m_pDatabaseFileDir.reset();
}
+void Connection::storeDatabase()
+{
+ MutexGuard aGuard(m_aMutex);
+ if (m_bIsEmbedded && m_xEmbeddedStorage.is())
+ {
+ SAL_INFO("connectivity.firebird", "Writing .fbk from running db");
+ try
+ {
+ runBackupService(isc_action_svc_backup);
+ }
+ catch (const SQLException& e)
+ {
+ auto a = cppu::getCaughtException();
+ throw WrappedTargetRuntimeException(e.Message, e.Context, a);
+ }
+ Reference<XStream> xDBStream(
+ m_xEmbeddedStorage->openStreamElement(our_sFBKLocation, ElementModes::WRITE));
+ using namespace ::comphelper;
+ const Reference<XComponentContext>& xContext = comphelper::getProcessComponentContext();
+ Reference<XInputStream> xInputStream;
+ if (!xContext.is())
+ return;
+ xInputStream = OStorageHelper::GetInputStreamFromURL(m_sFBKPath, xContext);
+ if (xInputStream.is())
+ OStorageHelper::CopyInputToOutput(xInputStream, xDBStream->getOutputStream());
+ }
+}
+
+
void Connection::disposeStatements()
{
MutexGuard aGuard(m_aMutex);
@@ -969,18 +949,13 @@ uno::Reference< XTablesSupplier > Connection::createCatalog()
MutexGuard aGuard(m_aMutex);
// m_xCatalog is a weak reference. Reuse it if it still exists.
- Reference< XTablesSupplier > xCatalog = m_xCatalog;
- if (xCatalog.is())
- {
- return xCatalog;
- }
- else
+ rtl::Reference< Catalog > xCatalog = m_xCatalog.get();
+ if (!xCatalog.is())
{
xCatalog = new Catalog(this);
- m_xCatalog = xCatalog;
- return m_xCatalog;
+ m_xCatalog = xCatalog.get();
}
-
+ return xCatalog;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/firebird/Connection.hxx b/connectivity/source/drivers/firebird/Connection.hxx
index caf091146ae6..524c0a7c476f 100644
--- a/connectivity/source/drivers/firebird/Connection.hxx
+++ b/connectivity/source/drivers/firebird/Connection.hxx
@@ -27,6 +27,7 @@
#include <memory>
#include <OTypeInfo.hxx>
#include <unotools/tempfile.hxx>
+#include <unotools/weakref.hxx>
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/document/DocumentEvent.hpp>
@@ -42,205 +43,201 @@
#include <com/sun/star/util/XModifiable.hpp>
namespace connectivity::firebird
- {
+{
+
+ typedef ::cppu::WeakComponentImplHelper< css::document::XDocumentEventListener,
+ css::lang::XServiceInfo,
+ css::lang::XUnoTunnel,
+ css::sdbc::XConnection,
+ css::sdbc::XWarningsSupplier
+ > Connection_BASE;
+
+ class OStatementCommonBase;
+ class FirebirdDriver;
+ class ODatabaseMetaData;
+ class Catalog;
- typedef ::cppu::WeakComponentImplHelper< css::document::XDocumentEventListener,
- css::lang::XServiceInfo,
- css::lang::XUnoTunnel,
- css::sdbc::XConnection,
- css::sdbc::XWarningsSupplier
- > Connection_BASE;
-
- class OStatementCommonBase;
- class FirebirdDriver;
- class ODatabaseMetaData;
-
-
- typedef std::vector< ::connectivity::OTypeInfo> TTypeInfoVector;
- typedef std::vector< css::uno::WeakReferenceHelper > OWeakRefArray;
-
- class Connection final : public Connection_BASE
- {
- ::osl::Mutex m_aMutex;
-
- TTypeInfoVector m_aTypeInfo; // vector containing an entry
- // for each row returned by
- // DatabaseMetaData.getTypeInfo.
-
- /** The URL passed to us when opening, i.e. of the form sdbc:* */
- OUString m_sConnectionURL;
- /**
- * The URL passed to firebird, i.e. either a local file (for a
- * temporary .fdb extracted from a .odb or a normal local file) or
- * a remote url.
- */
- OUString m_sFirebirdURL;
-
- /* EMBEDDED MODE DATA */
- /** Denotes that we have a database stored within a .odb file. */
- bool m_bIsEmbedded;
-
- /**
- * Handle for the parent DatabaseDocument. We need to notify this
- * whenever any data is written to our temporary database so that
- * the user is able to save this back to the .odb file.
- *
- * Note that this is ONLY set in embedded mode.
- */
- css::uno::Reference< css::util::XModifiable >
- m_xParentDocument;
-
- /**
- * Handle for the folder within the .odb where we store our .fbk
- * (Only used if m_bIsEmbedded is true).
- */
- css::uno::Reference< css::embed::XStorage >
- m_xEmbeddedStorage;
- /**
- * The temporary folder where we extract the .fbk from a .odb,
- * and also store the temporary .fdb
- * It is only valid if m_bIsEmbedded is true.
- *
- * The extracted .fbk is written in firebird.fbk, the temporary
- * .fdb is stored as firebird.fdb.
- */
- std::unique_ptr< ::utl::TempFile > m_pDatabaseFileDir;
- /**
- * Path for our extracted .fbk file.
- *
- * (The temporary .fdb is our m_sFirebirdURL.)
- */
- OUString m_sFBKPath;
-
- void loadDatabaseFile(const OUString& pSrcLocation, const OUString& pTmpLocation);
-
- /**
- * Run the backup service, use nAction =
- * isc_action_svc_backup to backup, nAction = isc_action_svc_restore
- * to restore.
- */
- void runBackupService(const short nAction);
-
- isc_svc_handle attachServiceManager();
-
- void detachServiceManager(isc_svc_handle pServiceHandle);
-
- /** We are using an external (local) file */
- bool m_bIsFile;
-
- /* CONNECTION PROPERTIES */
- bool m_bIsAutoCommit;
- bool m_bIsReadOnly;
- sal_Int32 m_aTransactionIsolation;
-
- isc_db_handle m_aDBHandle;
- isc_tr_handle m_aTransactionHandle;
-
- css::uno::WeakReference< css::sdbcx::XTablesSupplier>
- m_xCatalog;
- css::uno::WeakReference< css::sdbc::XDatabaseMetaData >
- m_xMetaData;
- /** Statements owned by this connection. */
- OWeakRefArray m_aStatements;
-
- /// @throws css::sdbc::SQLException
- void buildTypeInfo();
-
- /**
- * Creates a new transaction with the desired parameters, if
- * necessary discarding an existing transaction. This has to be done
- * anytime we change the transaction isolation, or autocommitting.
- *
- * @throws css::sdbc::SQLException
- */
- void setupTransaction();
- void disposeStatements();
-
- public:
- explicit Connection();
- virtual ~Connection() override;
-
- /// @throws css::sdbc::SQLException
- /// @throws css::uno::RuntimeException
- void construct( const OUString& url,
- const css::uno::Sequence< css::beans::PropertyValue >& info);
-
- const OUString& getConnectionURL() const {return m_sConnectionURL;}
- bool isEmbedded() const {return m_bIsEmbedded;}
- isc_db_handle& getDBHandle() {return m_aDBHandle;}
- /// @throws css::sdbc::SQLException
- isc_tr_handle& getTransaction();
-
- /**
- * Must be called anytime the underlying database is likely to have
- * changed.
- *
- * This is used to notify the database document of any changes, so
- * that the user is informed of any pending changes needing to be
- * saved.
- */
- void notifyDatabaseModified();
-
- /**
- * Create a new Blob tied to this connection. Blobs are tied to a
- * transaction and not to a statement, hence the connection should
- * deal with their management.
- *
- * @throws css::sdbc::SQLException
- * @throws css::uno::RuntimeException
- */
- css::uno::Reference< css::sdbc::XBlob>
- createBlob(ISC_QUAD const * pBlobID);
- /// @throws css::sdbc::SQLException
- /// @throws css::uno::RuntimeException
- css::uno::Reference< css::sdbc::XClob>
- createClob(ISC_QUAD const * pBlobID);
-
- /**
- * Create and/or connect to the sdbcx Catalog. This is completely
- * unrelated to the SQL "Catalog".
- */
- css::uno::Reference< css::sdbcx::XTablesSupplier >
- createCatalog();
-
- // OComponentHelper
- virtual void SAL_CALL disposing() override;
-
- // XServiceInfo
- DECLARE_SERVICE_INFO();
- // XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething(const css::uno::Sequence<sal_Int8>& rId) override;
- static css::uno::Sequence<sal_Int8> getUnoTunnelId();
- // XConnection
- virtual css::uno::Reference< css::sdbc::XStatement > SAL_CALL createStatement( ) override;
- virtual css::uno::Reference< css::sdbc::XPreparedStatement > SAL_CALL prepareStatement( const OUString& sql ) override;
- virtual css::uno::Reference< css::sdbc::XPreparedStatement > SAL_CALL prepareCall( const OUString& sql ) override;
- virtual OUString SAL_CALL nativeSQL( const OUString& sql ) override;
- virtual void SAL_CALL setAutoCommit( sal_Bool autoCommit ) override;
- virtual sal_Bool SAL_CALL getAutoCommit( ) override;
- virtual void SAL_CALL commit( ) override;
- virtual void SAL_CALL rollback( ) override;
- virtual sal_Bool SAL_CALL isClosed( ) override;
- virtual css::uno::Reference< css::sdbc::XDatabaseMetaData > SAL_CALL getMetaData( ) override;
- virtual void SAL_CALL setReadOnly( sal_Bool readOnly ) override;
- virtual sal_Bool SAL_CALL isReadOnly( ) override;
- virtual void SAL_CALL setCatalog( const OUString& catalog ) override;
- virtual OUString SAL_CALL getCatalog( ) override;
- virtual void SAL_CALL setTransactionIsolation( sal_Int32 level ) override;
- virtual sal_Int32 SAL_CALL getTransactionIsolation( ) override;
- virtual css::uno::Reference< css::container::XNameAccess > SAL_CALL getTypeMap( ) override;
- virtual void SAL_CALL setTypeMap( const css::uno::Reference< css::container::XNameAccess >& typeMap ) override;
- // XCloseable
- virtual void SAL_CALL close( ) override;
- // XWarningsSupplier
- virtual css::uno::Any SAL_CALL getWarnings( ) override;
- virtual void SAL_CALL clearWarnings( ) override;
- // XDocumentEventListener
- virtual void SAL_CALL documentEventOccured( const css::document::DocumentEvent& Event ) override;
- // css.lang.XEventListener
- virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
-
- };
+
+ typedef std::vector< ::connectivity::OTypeInfo> TTypeInfoVector;
+ typedef std::vector< css::uno::WeakReferenceHelper > OWeakRefArray;
+
+ class Connection final : public Connection_BASE
+ {
+ ::osl::Mutex m_aMutex;
+
+ TTypeInfoVector m_aTypeInfo; // vector containing an entry
+ // for each row returned by
+ // DatabaseMetaData.getTypeInfo.
+
+ /** The URL passed to us when opening, i.e. of the form sdbc:* */
+ OUString m_sConnectionURL;
+ /**
+ * The URL passed to firebird, i.e. either a local file (for a
+ * temporary .fdb extracted from a .odb or a normal local file) or
+ * a remote url.
+ */
+ OUString m_sFirebirdURL;
+
+ /* EMBEDDED MODE DATA */
+ /** Denotes that we have a database stored within a .odb file. */
+ bool m_bIsEmbedded;
+
+ /**
+ * Handle for the parent DatabaseDocument. We need to notify this
+ * whenever any data is written to our temporary database so that
+ * the user is able to save this back to the .odb file.
+ *
+ * Note that this is ONLY set in embedded mode.
+ */
+ css::uno::Reference< css::util::XModifiable >
+ m_xParentDocument;
+
+ /**
+ * Handle for the folder within the .odb where we store our .fbk
+ * (Only used if m_bIsEmbedded is true).
+ */
+ css::uno::Reference< css::embed::XStorage >
+ m_xEmbeddedStorage;
+ /**
+ * The temporary folder where we extract the .fbk from a .odb,
+ * and also store the temporary .fdb
+ * It is only valid if m_bIsEmbedded is true.
+ *
+ * The extracted .fbk is written in firebird.fbk, the temporary
+ * .fdb is stored as firebird.fdb.
+ */
+ std::unique_ptr< ::utl::TempFileNamed > m_pDatabaseFileDir;
+ /**
+ * Path for our extracted .fbk file.
+ *
+ * (The temporary .fdb is our m_sFirebirdURL.)
+ */
+ OUString m_sFBKPath;
+
+ void loadDatabaseFile(const OUString& pSrcLocation, const OUString& pTmpLocation);
+
+ /**
+ * Run the backup service, use nAction =
+ * isc_action_svc_backup to backup, nAction = isc_action_svc_restore
+ * to restore.
+ */
+ void runBackupService(const short nAction);
+
+ isc_svc_handle attachServiceManager();
+
+ void detachServiceManager(isc_svc_handle pServiceHandle);
+
+ /** We are using an external (local) file */
+ bool m_bIsFile;
+
+ /* CONNECTION PROPERTIES */
+ bool m_bIsAutoCommit;
+ bool m_bIsReadOnly;
+ sal_Int32 m_aTransactionIsolation;
+
+ isc_db_handle m_aDBHandle;
+ isc_tr_handle m_aTransactionHandle;
+
+ unotools::WeakReference< Catalog >
+ m_xCatalog;
+ unotools::WeakReference< ODatabaseMetaData >
+ m_xMetaData;
+ /** Statements owned by this connection. */
+ OWeakRefArray m_aStatements;
+
+ /// @throws css::sdbc::SQLException
+ void buildTypeInfo();
+
+ /**
+ * Creates a new transaction with the desired parameters, if
+ * necessary discarding an existing transaction. This has to be done
+ * anytime we change the transaction isolation, or autocommitting.
+ *
+ * @throws css::sdbc::SQLException
+ */
+ void setupTransaction();
+ void disposeStatements();
+
+ public:
+ explicit Connection();
+ virtual ~Connection() override;
+
+ /// @throws css::sdbc::SQLException
+ /// @throws css::uno::RuntimeException
+ void construct( const OUString& url,
+ const css::uno::Sequence< css::beans::PropertyValue >& info);
+
+ const OUString& getConnectionURL() const {return m_sConnectionURL;}
+ bool isEmbedded() const {return m_bIsEmbedded;}
+ isc_db_handle& getDBHandle() {return m_aDBHandle;}
+ /// @throws css::sdbc::SQLException
+ isc_tr_handle& getTransaction();
+
+ /**
+ * Create a new Blob tied to this connection. Blobs are tied to a
+ * transaction and not to a statement, hence the connection should
+ * deal with their management.
+ *
+ * @throws css::sdbc::SQLException
+ * @throws css::uno::RuntimeException
+ */
+ css::uno::Reference< css::sdbc::XBlob>
+ createBlob(ISC_QUAD const * pBlobID);
+ /// @throws css::sdbc::SQLException
+ /// @throws css::uno::RuntimeException
+ css::uno::Reference< css::sdbc::XClob>
+ createClob(ISC_QUAD const * pBlobID);
+
+ /**
+ * Create and/or connect to the sdbcx Catalog. This is completely
+ * unrelated to the SQL "Catalog".
+ */
+ css::uno::Reference< css::sdbcx::XTablesSupplier >
+ createCatalog();
+
+ /**
+ * Backup and store embedded extracted database to the .odb file
+ */
+ void storeDatabase();
+
+ // OComponentHelper
+ virtual void SAL_CALL disposing() override;
+
+ // XServiceInfo
+ DECLARE_SERVICE_INFO();
+ // XUnoTunnel
+ virtual sal_Int64 SAL_CALL getSomething(const css::uno::Sequence<sal_Int8>& rId) override;
+ static const css::uno::Sequence<sal_Int8> & getUnoTunnelId();
+ // XConnection
+ virtual css::uno::Reference< css::sdbc::XStatement > SAL_CALL createStatement( ) override;
+ virtual css::uno::Reference< css::sdbc::XPreparedStatement > SAL_CALL prepareStatement( const OUString& sql ) override;
+ virtual css::uno::Reference< css::sdbc::XPreparedStatement > SAL_CALL prepareCall( const OUString& sql ) override;
+ virtual OUString SAL_CALL nativeSQL( const OUString& sql ) override;
+ virtual void SAL_CALL setAutoCommit( sal_Bool autoCommit ) override;
+ virtual sal_Bool SAL_CALL getAutoCommit( ) override;
+ virtual void SAL_CALL commit( ) override;
+ virtual void SAL_CALL rollback( ) override;
+ virtual sal_Bool SAL_CALL isClosed( ) override;
+ virtual css::uno::Reference< css::sdbc::XDatabaseMetaData > SAL_CALL getMetaData( ) override;
+ virtual void SAL_CALL setReadOnly( sal_Bool readOnly ) override;
+ virtual sal_Bool SAL_CALL isReadOnly( ) override;
+ virtual void SAL_CALL setCatalog( const OUString& catalog ) override;
+ virtual OUString SAL_CALL getCatalog( ) override;
+ virtual void SAL_CALL setTransactionIsolation( sal_Int32 level ) override;
+ virtual sal_Int32 SAL_CALL getTransactionIsolation( ) override;
+ virtual css::uno::Reference< css::container::XNameAccess > SAL_CALL getTypeMap( ) override;
+ virtual void SAL_CALL setTypeMap( const css::uno::Reference< css::container::XNameAccess >& typeMap ) override;
+ // XCloseable
+ virtual void SAL_CALL close( ) override;
+ // XWarningsSupplier
+ virtual css::uno::Any SAL_CALL getWarnings( ) override;
+ virtual void SAL_CALL clearWarnings( ) override;
+ // XDocumentEventListener
+ virtual void SAL_CALL documentEventOccured( const css::document::DocumentEvent& Event ) override;
+ // css.lang.XEventListener
+ virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
+
+ };
}
diff --git a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx
index f63468f0813f..948a39861d29 100644
--- a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx
+++ b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx
@@ -221,7 +221,7 @@ sal_Bool SAL_CALL ODatabaseMetaData::doesMaxRowSizeIncludeBlobs( )
// Only quoted identifiers are case sensitive, unquoted are case insensitive
OUString SAL_CALL ODatabaseMetaData::getIdentifierQuoteString()
{
- return "\"";
+ return u"\""_ustr;
}
sal_Bool SAL_CALL ODatabaseMetaData::supportsMixedCaseQuotedIdentifiers( )
@@ -600,7 +600,7 @@ OUString SAL_CALL ODatabaseMetaData::getDatabaseProductVersion( )
{
uno::Reference< XStatement > xSelect = m_pConnection->createStatement();
- uno::Reference< XResultSet > xRs = xSelect->executeQuery("SELECT rdb$get_context('SYSTEM', 'ENGINE_VERSION') as version from rdb$database");
+ uno::Reference< XResultSet > xRs = xSelect->executeQuery(u"SELECT rdb$get_context('SYSTEM', 'ENGINE_VERSION') as version from rdb$database"_ustr);
(void)xRs->next(); // first and only row
uno::Reference< XRow > xRow( xRs, UNO_QUERY_THROW );
return xRow->getString(1);
@@ -608,7 +608,7 @@ OUString SAL_CALL ODatabaseMetaData::getDatabaseProductVersion( )
OUString SAL_CALL ODatabaseMetaData::getDatabaseProductName( )
{
- return "Firebird (engine12)";
+ return u"Firebird (engine12)"_ustr;
}
OUString SAL_CALL ODatabaseMetaData::getProcedureTerm( )
@@ -638,15 +638,15 @@ OUString SAL_CALL ODatabaseMetaData::getSearchStringEscape( )
OUString SAL_CALL ODatabaseMetaData::getStringFunctions( )
{
- return "ASCII_CHAR,ASCII_VAL,BIT_LENGTH,CHAR_LENGTH,CHAR_TO_UUID,CHARACTER_LENGTH,"
+ return u"ASCII_CHAR,ASCII_VAL,BIT_LENGTH,CHAR_LENGTH,CHAR_TO_UUID,CHARACTER_LENGTH,"
"GEN_UUID,HASH,LEFT,LOWER,LPAD,OCTET_LENGTH,OVERLAY,POSITION,REPLACE,REVERSE,"
- "RIGHT,RPAD,SUBSTRING,TRIM,UPPER,UUID_TO_CHAR";
+ "RIGHT,RPAD,SUBSTRING,TRIM,UPPER,UUID_TO_CHAR"_ustr;
}
OUString SAL_CALL ODatabaseMetaData::getTimeDateFunctions( )
{
- return "CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,DATEADD, DATEDIFF,"
- "EXTRACT,'NOW','TODAY','TOMORROW','YESTERDAY'";
+ return u"CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,DATEADD, DATEDIFF,"
+ "EXTRACT,'NOW','TODAY','TOMORROW','YESTERDAY'"_ustr;
}
OUString SAL_CALL ODatabaseMetaData::getSystemFunctions( )
@@ -656,9 +656,9 @@ OUString SAL_CALL ODatabaseMetaData::getSystemFunctions( )
OUString SAL_CALL ODatabaseMetaData::getNumericFunctions( )
{
- return "ABS,ACOS,ASIN,ATAN,ATAN2,BIN_AND,BIN_NOT,BIN_OR,BIN_SHL,"
+ return u"ABS,ACOS,ASIN,ATAN,ATAN2,BIN_AND,BIN_NOT,BIN_OR,BIN_SHL,"
"BIN_SHR,BIN_XOR,CEIL,CEILING,COS,COSH,COT,EXP,FLOOR,LN,"
- "LOG,LOG10,MOD,PI,POWER,RAND,ROUND,SIGN,SIN,SINH,SQRT,TAN,TANH,TRUNC";
+ "LOG,LOG10,MOD,PI,POWER,RAND,ROUND,SIGN,SIN,SINH,SQRT,TAN,TANH,TRUNC"_ustr;
}
sal_Bool SAL_CALL ODatabaseMetaData::supportsExtendedSQLGrammar( )
@@ -774,6 +774,192 @@ uno::Reference< XConnection > SAL_CALL ODatabaseMetaData::getConnection()
return m_pConnection;
}
+::css::uno::Sequence< ::css::beans::PropertyValue > SAL_CALL ODatabaseMetaData::getConnectionInfo()
+{
+ // TODO IMPLEMENT
+ return Sequence< ::css::beans::PropertyValue >();
+}
+
+sal_Bool SAL_CALL ODatabaseMetaData::autoCommitFailureClosesAllResultSets()
+{
+ // TODO IMPLEMENT
+ return false;
+}
+
+sal_Bool SAL_CALL ODatabaseMetaData::generatedKeyAlwaysReturned()
+{
+ // TODO IMPLEMENT
+ return false;
+}
+
+uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getAttributes( const ::rtl::OUString& /* catalog */,
+ const ::rtl::OUString& /* schemaPattern */,
+ const ::rtl::OUString& /* typeNamePattern */,
+ const ::rtl::OUString& /* attributeNamePattern */)
+{
+ // TODO IMPLEMENT
+ return nullptr;
+}
+
+uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getClientInfoProperties()
+{
+ // TODO IMPLEMENT
+ return nullptr;
+}
+
+::sal_Int32 SAL_CALL ODatabaseMetaData::getDatabaseMajorVersion()
+{
+ // TODO IMPLEMENT
+ return 0;
+}
+
+::sal_Int32 SAL_CALL ODatabaseMetaData::getDatabaseMinorVersion()
+{
+ // TODO IMPLEMENT
+ return 0;
+}
+
+uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getFunctions( const ::rtl::OUString& /* catalog */, const ::rtl::OUString& /* schemaPattern */, const ::rtl::OUString& functionNamePattern )
+{
+ OUString strQuery(
+ "SELECT "
+ " null as FUNCTION_CAT,"
+ "RDB$FUNCTION_NAME as FUNCTION_NAME,"
+ "RDB$DESCRIPTION as REMARKS,"
+ "cast(null as blob sub_type text) as JB_FUNCTION_SOURCE,"
+ "'UDF' as JB_FUNCTION_KIND,"
+ "trim(trailing from RDB$MODULE_NAME) as JB_MODULE_NAME,"
+ "trim(trailing from RDB$ENTRYPOINT) as JB_ENTRYPOINT,"
+ "cast(null as varchar(255)) as JB_ENGINE_NAME "
+ "FROM RDB$FUNCTIONS "
+ "WHERE RDB$FUNCTION_NAME = '" + functionNamePattern + "'");
+
+ uno::Reference< XStatement > statement = m_pConnection->createStatement();
+ uno::Reference< XResultSet > rs = statement->executeQuery(strQuery);
+ return rs;
+}
+
+uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getFunctionColumns( const ::rtl::OUString& /* catalog */, const ::rtl::OUString& /* schemaPattern */, const ::rtl::OUString& /* functionNamePattern */, const ::rtl::OUString& /* columnNamePattern */ )
+{
+ // TODO IMPLEMENT
+ return nullptr;
+}
+
+::sal_Int32 SAL_CALL ODatabaseMetaData::getMaxLogicalLobSize()
+{
+ // TODO IMPLEMENT
+ return 0;
+}
+
+uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getPseudoColumns( const ::rtl::OUString& /* catalog */,
+ const ::rtl::OUString& /* schemaPattern */,
+ const ::rtl::OUString& /* tableNamePattern */,
+ const ::rtl::OUString& /* columnNamePattern */)
+{
+ // TODO IMPLEMENT
+ return nullptr;
+}
+
+::sal_Int32 SAL_CALL ODatabaseMetaData::getResultSetHoldability()
+{
+ // TODO IMPLEMENT
+ return 0;
+}
+
+::sal_Int32 SAL_CALL ODatabaseMetaData::getRowIdLifetime()
+{
+ // TODO IMPLEMENT
+ return 0;
+}
+
+uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getSchemasFiltered( const ::css::beans::Optional< ::rtl::OUString >& /* catalog */,
+ const ::css::beans::Optional< ::rtl::OUString >& /* schemaPattern */)
+{
+ // TODO IMPLEMENT
+ return nullptr;
+}
+
+::sal_Int32 SAL_CALL ODatabaseMetaData::getSQLStateType()
+{
+ // TODO IMPLEMENT
+ return 0;
+}
+
+uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getSuperTables( const ::rtl::OUString& /* catalog */,
+ const ::rtl::OUString& /* schemaPattern */, const ::rtl::OUString& /* tableNamePattern */)
+{
+ // TODO IMPLEMENT
+ return nullptr;
+}
+
+uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getSuperTypes( const ::rtl::OUString& /* catalog */,
+ const ::rtl::OUString& /* schemaPattern */,
+ const ::rtl::OUString& /* typeNamePattern */)
+{
+ // TODO IMPLEMENT
+ return nullptr;
+}
+
+::sal_Bool SAL_CALL ODatabaseMetaData::locatorsUpdateCopy()
+{
+ // TODO IMPLEMENT
+ return false;
+}
+
+::sal_Bool SAL_CALL ODatabaseMetaData::supportsConvertInGeneral()
+{
+ // TODO IMPLEMENT
+ return false;
+}
+
+::sal_Bool SAL_CALL ODatabaseMetaData::supportsGetGeneratedKeys()
+{
+ // TODO IMPLEMENT
+ return false;
+}
+
+::sal_Bool SAL_CALL ODatabaseMetaData::supportsMultipleOpenResults()
+{
+ // TODO IMPLEMENT
+ return false;
+}
+
+::sal_Bool SAL_CALL ODatabaseMetaData::supportsNamedParameters()
+{
+ // TODO IMPLEMENT
+ return false;
+}
+
+::sal_Bool SAL_CALL ODatabaseMetaData::supportsRefCursors()
+{
+ // TODO IMPLEMENT
+ return false;
+}
+
+::sal_Bool SAL_CALL ODatabaseMetaData::supportsSavepoints()
+{
+ // TODO IMPLEMENT
+ return false;
+}
+
+::sal_Bool SAL_CALL ODatabaseMetaData::supportsSharding()
+{
+ // TODO IMPLEMENT
+ return false;
+}
+
+::sal_Bool SAL_CALL ODatabaseMetaData::supportsStatementPooling()
+{
+ // TODO IMPLEMENT
+ return false;
+}
+
+::sal_Bool SAL_CALL ODatabaseMetaData::supportsStoredFunctionsUsingCallSyntax()
+{
+ // TODO IMPLEMENT
+ return false;
+}
+
// here follow all methods which return a resultset
// the first methods is an example implementation how to use this resultset
// of course you could implement it on your and you should do this because
@@ -792,13 +978,13 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTableTypes( )
// TODO Put these statics to one place
// like postgreSQL's Statics class.
- aRow[1] = new ORowSetValueDecorator(OUString("TABLE"));
+ aRow[1] = new ORowSetValueDecorator(u"TABLE"_ustr);
aResults.push_back(aRow);
- aRow[1] = new ORowSetValueDecorator(OUString("VIEW"));
+ aRow[1] = new ORowSetValueDecorator(u"VIEW"_ustr);
aResults.push_back(aRow);
- aRow[1] = new ORowSetValueDecorator(OUString("SYSTEM TABLE"));
+ aRow[1] = new ORowSetValueDecorator(u"SYSTEM TABLE"_ustr);
aResults.push_back(aRow);
pResultSet->setRows(std::move(aResults));
@@ -821,14 +1007,14 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
// Common data
aRow[4] = ODatabaseMetaDataResultSet::getQuoteValue(); // Literal quote marks
aRow[5] = ODatabaseMetaDataResultSet::getQuoteValue(); // Literal quote marks
- aRow[7] = new ORowSetValueDecorator(true); // Nullable
- aRow[8] = new ORowSetValueDecorator(true); // Case sensitive
- aRow[10] = new ORowSetValueDecorator(false); // Is unsigned
+ aRow[7] = new ORowSetValueDecorator(ORowSetValue(true)); // Nullable
+ aRow[8] = new ORowSetValueDecorator(ORowSetValue(true)); // Case sensitive
+ aRow[10] = new ORowSetValueDecorator(ORowSetValue(false)); // Is unsigned
// FIXED_PREC_SCALE: docs state "can it be a money value? " however
// in reality this causes Base to treat all numbers as money formatted
// by default which is wrong (and formatting as money value is still
// possible for all values).
- aRow[11] = new ORowSetValueDecorator(false);
+ aRow[11] = new ORowSetValueDecorator(ORowSetValue(false));
// Localised Type Name -- TODO: implement (but can be null):
aRow[13] = new ORowSetValueDecorator();
aRow[16] = new ORowSetValueDecorator(); // Unused
@@ -836,25 +1022,25 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
aRow[18] = new ORowSetValueDecorator(sal_Int16(10));// Radix
// Char
- aRow[1] = new ORowSetValueDecorator(OUString("CHAR"));
+ aRow[1] = new ORowSetValueDecorator(u"CHAR"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::CHAR);
aRow[3] = new ORowSetValueDecorator(sal_Int16(32765)); // Prevision = max length
- aRow[6] = new ORowSetValueDecorator(OUString("length")); // Create Params
+ aRow[6] = new ORowSetValueDecorator(u"length"_ustr); // Create Params
aRow[9] = new ORowSetValueDecorator(
sal_Int16(ColumnSearch::FULL)); // Searchable
- aRow[12] = new ORowSetValueDecorator(false); // Autoincrement
+ aRow[12] = new ORowSetValueDecorator(ORowSetValue(false)); // Autoincrement
aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
tmp.push_back(aRow);
// Varchar
- aRow[1] = new ORowSetValueDecorator(OUString("VARCHAR"));
+ aRow[1] = new ORowSetValueDecorator(u"VARCHAR"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::VARCHAR);
aRow[3] = new ORowSetValueDecorator(sal_Int16(32765)); // Prevision = max length
- aRow[6] = new ORowSetValueDecorator(OUString("length")); // Create Params
+ aRow[6] = new ORowSetValueDecorator(u"length"_ustr); // Create Params
aRow[9] = new ORowSetValueDecorator(
sal_Int16(ColumnSearch::FULL)); // Searchable
- aRow[12] = new ORowSetValueDecorator(false); // Autoincrement
+ aRow[12] = new ORowSetValueDecorator(ORowSetValue(false)); // Autoincrement
aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
tmp.push_back(aRow);
@@ -863,10 +1049,10 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
// to fool LO into seeing it as different types.
// It is distinguished from Text type by its character set OCTETS;
// that will be added by Tables::createStandardColumnPart
- aRow[1] = new ORowSetValueDecorator(OUString("CHARACTER"));
+ aRow[1] = new ORowSetValueDecorator(u"CHARACTER"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::BINARY);
aRow[3] = new ORowSetValueDecorator(sal_Int16(32765)); // Prevision = max length
- aRow[6] = new ORowSetValueDecorator(OUString("length")); // Create Params
+ aRow[6] = new ORowSetValueDecorator(u"length"_ustr); // Create Params
aRow[9] = new ORowSetValueDecorator(
sal_Int16(ColumnSearch::NONE)); // Searchable
aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
@@ -874,21 +1060,21 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
tmp.push_back(aRow);
// Varbinary (VARCHAR); see comment above about BINARY
- aRow[1] = new ORowSetValueDecorator(OUString("CHARACTER VARYING"));
+ aRow[1] = new ORowSetValueDecorator(u"CHARACTER VARYING"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::VARBINARY);
aRow[3] = new ORowSetValueDecorator(sal_Int16(32765)); // Prevision = max length
- aRow[6] = new ORowSetValueDecorator(OUString("length")); // Create Params
+ aRow[6] = new ORowSetValueDecorator(u"length"_ustr); // Create Params
aRow[9] = new ORowSetValueDecorator(
sal_Int16(ColumnSearch::NONE)); // Searchable
// Clob (SQL_BLOB)
- aRow[1] = new ORowSetValueDecorator(OUString("BLOB SUB_TYPE TEXT")); // BLOB, with subtype 1
+ aRow[1] = new ORowSetValueDecorator(u"BLOB SUB_TYPE TEXT"_ustr); // BLOB, with subtype 1
aRow[2] = new ORowSetValueDecorator(DataType::CLOB);
aRow[3] = new ORowSetValueDecorator(sal_Int32(2147483647)); // Precision = max length
aRow[6] = new ORowSetValueDecorator(); // Create Params
aRow[9] = new ORowSetValueDecorator(
sal_Int16(ColumnSearch::FULL)); // Searchable
- aRow[12] = new ORowSetValueDecorator(false); // Autoincrement
+ aRow[12] = new ORowSetValueDecorator(ORowSetValue(false)); // Autoincrement
aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
tmp.push_back(aRow);
@@ -904,22 +1090,22 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
aRow[6] = new ORowSetValueDecorator(); // Create Params
aRow[9] = new ORowSetValueDecorator(
sal_Int16(ColumnSearch::FULL)); // Searchable
- aRow[12] = new ORowSetValueDecorator(true); // Autoincrement
+ aRow[12] = new ORowSetValueDecorator(ORowSetValue(true)); // Autoincrement
aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
}
// Smallint (SQL_SHORT)
- aRow[1] = new ORowSetValueDecorator(OUString("SMALLINT"));
+ aRow[1] = new ORowSetValueDecorator(u"SMALLINT"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::SMALLINT);
aRow[3] = new ORowSetValueDecorator(sal_Int16(5)); // Prevision
tmp.push_back(aRow);
// Integer (SQL_LONG)
- aRow[1] = new ORowSetValueDecorator(OUString("INTEGER"));
+ aRow[1] = new ORowSetValueDecorator(u"INTEGER"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::INTEGER);
aRow[3] = new ORowSetValueDecorator(sal_Int16(10)); // Precision
tmp.push_back(aRow);
// Bigint (SQL_INT64)
- aRow[1] = new ORowSetValueDecorator(OUString("BIGINT"));
+ aRow[1] = new ORowSetValueDecorator(u"BIGINT"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::BIGINT);
aRow[3] = new ORowSetValueDecorator(sal_Int16(20)); // Precision
tmp.push_back(aRow);
@@ -928,19 +1114,19 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
{
aRow[9] = new ORowSetValueDecorator(
sal_Int16(ColumnSearch::FULL)); // Searchable
- aRow[12] = new ORowSetValueDecorator(true); // Autoincrement
+ aRow[12] = new ORowSetValueDecorator(ORowSetValue(true)); // Autoincrement
}
- aRow[6] = new ORowSetValueDecorator(OUString("PRECISION,SCALE")); // Create params
+ aRow[6] = new ORowSetValueDecorator(u"PRECISION,SCALE"_ustr); // Create params
// Numeric
- aRow[1] = new ORowSetValueDecorator(OUString("NUMERIC"));
+ aRow[1] = new ORowSetValueDecorator(u"NUMERIC"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::NUMERIC);
aRow[3] = new ORowSetValueDecorator(sal_Int16(18)); // Precision
aRow[14] = new ORowSetValueDecorator(sal_Int16(0)); // Minimum scale
aRow[15] = new ORowSetValueDecorator(sal_Int16(18)); // Max scale
tmp.push_back(aRow);
// Decimal
- aRow[1] = new ORowSetValueDecorator(OUString("DECIMAL"));
+ aRow[1] = new ORowSetValueDecorator(u"DECIMAL"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL);
aRow[3] = new ORowSetValueDecorator(sal_Int16(18)); // Precision
aRow[14] = new ORowSetValueDecorator(sal_Int16(0)); // Minimum scale
@@ -949,14 +1135,14 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
aRow[6] = new ORowSetValueDecorator(); // Create Params
// Float (SQL_FLOAT)
- aRow[1] = new ORowSetValueDecorator(OUString("FLOAT"));
+ aRow[1] = new ORowSetValueDecorator(u"FLOAT"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::FLOAT);
aRow[3] = new ORowSetValueDecorator(sal_Int16(7)); // Precision
aRow[14] = new ORowSetValueDecorator(sal_Int16(1)); // Minimum scale
aRow[15] = new ORowSetValueDecorator(sal_Int16(7)); // Max scale
tmp.push_back(aRow);
// Double (SQL_DOUBLE)
- aRow[1] = new ORowSetValueDecorator(OUString("DOUBLE PRECISION"));
+ aRow[1] = new ORowSetValueDecorator(u"DOUBLE PRECISION"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::DOUBLE);
aRow[3] = new ORowSetValueDecorator(sal_Int16(15)); // Precision
aRow[14] = new ORowSetValueDecorator(sal_Int16(1)); // Minimum scale
@@ -966,66 +1152,67 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
// TODO: no idea whether D_FLOAT corresponds to an sql type
// SQL_TIMESTAMP
- aRow[1] = new ORowSetValueDecorator(OUString("TIMESTAMP"));
+ aRow[1] = new ORowSetValueDecorator(u"TIMESTAMP"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::TIMESTAMP);
aRow[3] = new ORowSetValueDecorator(sal_Int32(8)); // Prevision = max length
aRow[6] = new ORowSetValueDecorator(); // Create Params
aRow[9] = new ORowSetValueDecorator(
sal_Int16(ColumnSearch::FULL)); // Searchable
- aRow[12] = new ORowSetValueDecorator(false); // Autoincrement
+ aRow[12] = new ORowSetValueDecorator(ORowSetValue(false)); // Autoincrement
aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
tmp.push_back(aRow);
// SQL_TYPE_TIME
- aRow[1] = new ORowSetValueDecorator(OUString("TIME"));
+ aRow[1] = new ORowSetValueDecorator(u"TIME"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::TIME);
aRow[3] = new ORowSetValueDecorator(sal_Int32(8)); // Prevision = max length
aRow[6] = new ORowSetValueDecorator(); // Create Params
aRow[9] = new ORowSetValueDecorator(
sal_Int16(ColumnSearch::FULL)); // Searchable
- aRow[12] = new ORowSetValueDecorator(false); // Autoincrement
+ aRow[12] = new ORowSetValueDecorator(ORowSetValue(false)); // Autoincrement
aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
tmp.push_back(aRow);
// SQL_TYPE_DATE
- aRow[1] = new ORowSetValueDecorator(OUString("DATE"));
+ aRow[1] = new ORowSetValueDecorator(u"DATE"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::DATE);
aRow[3] = new ORowSetValueDecorator(sal_Int32(8)); // Prevision = max length
aRow[6] = new ORowSetValueDecorator(); // Create Params
aRow[9] = new ORowSetValueDecorator(
sal_Int16(ColumnSearch::FULL)); // Searchable
- aRow[12] = new ORowSetValueDecorator(false); // Autoincrement
+ aRow[12] = new ORowSetValueDecorator(ORowSetValue(false)); // Autoincrement
aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
tmp.push_back(aRow);
// SQL_BLOB
- aRow[1] = new ORowSetValueDecorator(OUString("BLOB SUB_TYPE BINARY"));
+ aRow[1] = new ORowSetValueDecorator(u"BLOB SUB_TYPE BINARY"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::BLOB);
aRow[3] = new ORowSetValueDecorator(sal_Int32(0)); // Prevision = max length
aRow[6] = new ORowSetValueDecorator(); // Create Params
aRow[9] = new ORowSetValueDecorator(
sal_Int16(ColumnSearch::NONE)); // Searchable
- aRow[12] = new ORowSetValueDecorator(false); // Autoincrement
+ aRow[12] = new ORowSetValueDecorator(ORowSetValue(false)); // Autoincrement
aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
tmp.push_back(aRow);
// SQL_BOOLEAN
- aRow[1] = new ORowSetValueDecorator(OUString("BOOLEAN"));
+ aRow[1] = new ORowSetValueDecorator(u"BOOLEAN"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::BOOLEAN);
aRow[3] = new ORowSetValueDecorator(sal_Int32(1)); // Prevision = max length
aRow[6] = new ORowSetValueDecorator(); // Create Params
aRow[9] = new ORowSetValueDecorator(
sal_Int16(ColumnSearch::BASIC)); // Searchable
- aRow[12] = new ORowSetValueDecorator(false); // Autoincrement
+ aRow[12] = new ORowSetValueDecorator(ORowSetValue(false)); // Autoincrement
aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale
aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale
tmp.push_back(aRow);
return tmp;
}();
+ // [-loplugin:redundantfcast] false positive:
pResultSet->setRows(ODatabaseMetaDataResultSet::ORows(aResults));
return pResultSet;
}
@@ -1056,7 +1243,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumnPrivileges(
"FROM RDB$USER_PRIVILEGES priv ");
{
- OUString sAppend = "WHERE priv.RDB$RELATION_NAME = '%' ";
+ OUString sAppend = u"WHERE priv.RDB$RELATION_NAME = '%' "_ustr;
queryBuf.append(sAppend.replaceAll("%", sTable));
}
if (!sColumnNamePattern.isEmpty())
@@ -1094,7 +1281,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumnPrivileges(
aCurrentRow[6] = new ORowSetValueDecorator(sanitizeIdentifier(xRow->getString(3))); // 6. GRANTEE
aCurrentRow[7] = new ORowSetValueDecorator(xRow->getString(4)); // 7. Privilege
aCurrentRow[8] = new ORowSetValueDecorator( ( xRow->getShort(5) == 1 ) ?
- OUString("YES") : OUString("NO")); // 8. Grantable
+ u"YES"_ustr : u"NO"_ustr); // 8. Grantable
aResults.push_back(aCurrentRow);
}
@@ -1296,11 +1483,11 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns(
// 18. Is nullable
if (xRow->getShort(9))
{
- aCurrentRow[18] = new ORowSetValueDecorator(OUString("NO"));
+ aCurrentRow[18] = new ORowSetValueDecorator(u"NO"_ustr);
}
else
{
- aCurrentRow[18] = new ORowSetValueDecorator(OUString("YES"));
+ aCurrentRow[18] = new ORowSetValueDecorator(u"YES"_ustr);
}
aResults.push_back(aCurrentRow);
@@ -1339,8 +1526,10 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables(
// TODO: GLOBAL TEMPORARY, LOCAL TEMPORARY, ALIAS, SYNONYM
if (!types.hasElements() || (types.getLength() == 1 && types[0].match(wld)))
{
+ // from Firebird: src/jrd/constants.h
+ // rel_persistent = 0, rel_view = 1, rel_external = 2
// All table types? I.e. includes system tables.
- queryBuf.append("(RDB$RELATION_TYPE = 0 OR RDB$RELATION_TYPE = 1) ");
+ queryBuf.append("(RDB$RELATION_TYPE = 0 OR RDB$RELATION_TYPE = 1 OR RDB$RELATION_TYPE = 2) ");
}
else
{
@@ -1406,7 +1595,8 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables(
}
else
{
- if (nTableType == 0)
+ // see above about src/jrd/constants.h
+ if (nTableType == 0 || nTableType == 2)
sTableType = "TABLE";
}
@@ -1473,11 +1663,11 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getImportedKeys(
uno::Reference< XResultSet > ODatabaseMetaData::lcl_getKeys(const bool bIsImport, std::u16string_view table )
{
rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new
- ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eImportedKeys);
+ ODatabaseMetaDataResultSet(bIsImport?ODatabaseMetaDataResultSet::eImportedKeys:ODatabaseMetaDataResultSet::eExportedKeys);
uno::Reference< XStatement > statement = m_pConnection->createStatement();
- OUString sSQL = "SELECT "
+ OUString sSQL = u"SELECT "
"RDB$REF_CONSTRAINTS.RDB$UPDATE_RULE, " // 1 update rule
"RDB$REF_CONSTRAINTS.RDB$DELETE_RULE, " // 2 delete rule
"RDB$REF_CONSTRAINTS.RDB$CONST_NAME_UQ, " // 3 primary or unique key name
@@ -1498,7 +1688,7 @@ uno::Reference< XResultSet > ODatabaseMetaData::lcl_getKeys(const bool bIsImport
"ON PRIM.RDB$INDEX_NAME = PRIMARY_INDEX.RDB$INDEX_NAME "
"INNER JOIN RDB$INDEX_SEGMENTS AS FOREIGN_INDEX "
"ON FOREI.RDB$INDEX_NAME = FOREIGN_INDEX.RDB$INDEX_NAME "
- "WHERE FOREI.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY' ";
+ "WHERE FOREI.RDB$CONSTRAINT_TYPE = 'FOREIGN KEY' "_ustr;
if (bIsImport)
sSQL += OUString::Concat("AND FOREI.RDB$RELATION_NAME = '")+ table +"'";
else
@@ -1518,11 +1708,11 @@ uno::Reference< XResultSet > ODatabaseMetaData::lcl_getKeys(const bool bIsImport
aCurrentRow[6] = new ORowSetValueDecorator(); // FKTABLE_SCHEM unsupported
std::map< OUString,sal_Int32> aRuleMap;
- aRuleMap[ OUString("CASCADE")] = KeyRule::CASCADE;
- aRuleMap[ OUString("RESTRICT")] = KeyRule::RESTRICT;
- aRuleMap[ OUString("SET NULL")] = KeyRule::SET_NULL;
- aRuleMap[ OUString("SET DEFAULT")] = KeyRule::SET_DEFAULT;
- aRuleMap[ OUString("NO ACTION")] = KeyRule::NO_ACTION;
+ aRuleMap[ u"CASCADE"_ustr] = KeyRule::CASCADE;
+ aRuleMap[ u"RESTRICT"_ustr] = KeyRule::RESTRICT;
+ aRuleMap[ u"SET NULL"_ustr] = KeyRule::SET_NULL;
+ aRuleMap[ u"SET DEFAULT"_ustr] = KeyRule::SET_DEFAULT;
+ aRuleMap[ u"NO ACTION"_ustr] = KeyRule::NO_ACTION;
while(rs->next())
{
@@ -1564,7 +1754,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getPrimaryKeys(
SAL_INFO("connectivity.firebird", "getPrimaryKeys() with "
"Table: " << sTable);
- OUString sAppend = "WHERE constr.RDB$RELATION_NAME = '%' ";
+ OUString sAppend = u"WHERE constr.RDB$RELATION_NAME = '%' "_ustr;
OUString sQuery = "SELECT "
"constr.RDB$RELATION_NAME, " // 1. Table Name
"inds.RDB$FIELD_NAME, " // 2. Column Name
@@ -1676,7 +1866,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getIndexInfo(
}
// 4. NON_UNIQUE -- i.e. specifically negate here.
- aCurrentRow[4] = new ORowSetValueDecorator(xRow->getShort(5) == 0);
+ aCurrentRow[4] = new ORowSetValueDecorator(ORowSetValue(xRow->getShort(5) == 0));
// 6. INDEX NAME
aCurrentRow[6] = new ORowSetValueDecorator(sanitizeIdentifier(xRow->getString(4)));
@@ -1686,9 +1876,9 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getIndexInfo(
aCurrentRow[9] = new ORowSetValueDecorator(sanitizeIdentifier(xRow->getString(2)));
// 10. ASC(ending)/DESC(ending)
if (xRow->getShort(6) == 1)
- aCurrentRow[10] = new ORowSetValueDecorator(OUString("D"));
+ aCurrentRow[10] = new ORowSetValueDecorator(u"D"_ustr);
else
- aCurrentRow[10] = new ORowSetValueDecorator(OUString("A"));
+ aCurrentRow[10] = new ORowSetValueDecorator(u"A"_ustr);
// TODO: double check this^^^, doesn't seem to be officially documented anywhere.
// 11. CARDINALITY
aCurrentRow[11] = new ORowSetValueDecorator(sal_Int32(0)); // TODO: determine how to do this
@@ -1698,7 +1888,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getIndexInfo(
aResults.push_back(aCurrentRow);
}
rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new
- ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::ePrimaryKeys);
+ ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eIndexInfo);
pResultSet->setRows( std::move(aResults) );
return pResultSet;
@@ -1769,7 +1959,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges(
aRow[4] = new ORowSetValueDecorator(sanitizeIdentifier(xRow->getString(2))); // 4. GRANTOR
aRow[5] = new ORowSetValueDecorator(sanitizeIdentifier(xRow->getString(3))); // 5. GRANTEE
aRow[6] = new ORowSetValueDecorator(xRow->getString(4)); // 6. Privilege
- aRow[7] = new ORowSetValueDecorator(bool(xRow->getBoolean(5))); // 7. Is Grantable
+ aRow[7] = new ORowSetValueDecorator(ORowSetValue(bool(xRow->getBoolean(5)))); // 7. Is Grantable
aResults.push_back(aRow);
}
diff --git a/connectivity/source/drivers/firebird/DatabaseMetaData.hxx b/connectivity/source/drivers/firebird/DatabaseMetaData.hxx
index c577f594d245..ca6155ed4ca1 100644
--- a/connectivity/source/drivers/firebird/DatabaseMetaData.hxx
+++ b/connectivity/source/drivers/firebird/DatabaseMetaData.hxx
@@ -25,180 +25,211 @@
#include "Connection.hxx"
-#include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
+#include <com/sun/star/sdbc/XDatabaseMetaData3.hpp>
#include <cppuhelper/implbase.hxx>
#include <rtl/ref.hxx>
namespace connectivity::firebird
+{
+
+ //************ Class: ODatabaseMetaData
+
+
+ typedef ::cppu::WeakImplHelper< css::sdbc::XDatabaseMetaData3> ODatabaseMetaData_BASE;
+
+ class ODatabaseMetaData : public ODatabaseMetaData_BASE
{
+ ::rtl::Reference<Connection> m_pConnection;
+ private:
+ css::uno::Reference< css::sdbc::XResultSet > lcl_getKeys( bool bIsImport, std::u16string_view table );
+ public:
+
+ explicit ODatabaseMetaData(Connection* _pCon);
+ virtual ~ODatabaseMetaData() override;
+
+ // as I mentioned before this interface is really BIG
+ // XDatabaseMetaData
+ virtual sal_Bool SAL_CALL allProceduresAreCallable( ) override;
+ virtual sal_Bool SAL_CALL allTablesAreSelectable( ) override;
+ virtual OUString SAL_CALL getURL( ) override;
+ virtual OUString SAL_CALL getUserName( ) override;
+ virtual sal_Bool SAL_CALL isReadOnly( ) override;
+ virtual sal_Bool SAL_CALL nullsAreSortedHigh( ) override;
+ virtual sal_Bool SAL_CALL nullsAreSortedLow( ) override;
+ virtual sal_Bool SAL_CALL nullsAreSortedAtStart( ) override;
+ virtual sal_Bool SAL_CALL nullsAreSortedAtEnd( ) override;
+ virtual OUString SAL_CALL getDatabaseProductName( ) override;
+ virtual OUString SAL_CALL getDatabaseProductVersion( ) override;
+ virtual OUString SAL_CALL getDriverName( ) override;
+ virtual OUString SAL_CALL getDriverVersion( ) override;
+ virtual sal_Int32 SAL_CALL getDriverMajorVersion( ) override;
+ virtual sal_Int32 SAL_CALL getDriverMinorVersion( ) override;
+ virtual sal_Bool SAL_CALL usesLocalFiles( ) override;
+ virtual sal_Bool SAL_CALL usesLocalFilePerTable( ) override;
+ virtual sal_Bool SAL_CALL supportsMixedCaseIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL storesUpperCaseIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL storesLowerCaseIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL storesMixedCaseIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL supportsMixedCaseQuotedIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL storesUpperCaseQuotedIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL storesLowerCaseQuotedIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL storesMixedCaseQuotedIdentifiers( ) override;
+ virtual OUString SAL_CALL getIdentifierQuoteString( ) override;
+ virtual OUString SAL_CALL getSQLKeywords( ) override;
+ virtual OUString SAL_CALL getNumericFunctions( ) override;
+ virtual OUString SAL_CALL getStringFunctions( ) override;
+ virtual OUString SAL_CALL getSystemFunctions( ) override;
+ virtual OUString SAL_CALL getTimeDateFunctions( ) override;
+ virtual OUString SAL_CALL getSearchStringEscape( ) override;
+ virtual OUString SAL_CALL getExtraNameCharacters( ) override;
+ virtual sal_Bool SAL_CALL supportsAlterTableWithAddColumn( ) override;
+ virtual sal_Bool SAL_CALL supportsAlterTableWithDropColumn( ) override;
+ virtual sal_Bool SAL_CALL supportsColumnAliasing( ) override;
+ virtual sal_Bool SAL_CALL nullPlusNonNullIsNull( ) override;
+ virtual sal_Bool SAL_CALL supportsTypeConversion( ) override;
+ virtual sal_Bool SAL_CALL supportsConvert( sal_Int32 fromType, sal_Int32 toType ) override;
+ virtual sal_Bool SAL_CALL supportsTableCorrelationNames( ) override;
+ virtual sal_Bool SAL_CALL supportsDifferentTableCorrelationNames( ) override;
+ virtual sal_Bool SAL_CALL supportsExpressionsInOrderBy( ) override;
+ virtual sal_Bool SAL_CALL supportsOrderByUnrelated( ) override;
+ virtual sal_Bool SAL_CALL supportsGroupBy( ) override;
+ virtual sal_Bool SAL_CALL supportsGroupByUnrelated( ) override;
+ virtual sal_Bool SAL_CALL supportsGroupByBeyondSelect( ) override;
+ virtual sal_Bool SAL_CALL supportsLikeEscapeClause( ) override;
+ virtual sal_Bool SAL_CALL supportsMultipleResultSets( ) override;
+ virtual sal_Bool SAL_CALL supportsMultipleTransactions( ) override;
+ virtual sal_Bool SAL_CALL supportsNonNullableColumns( ) override;
+ virtual sal_Bool SAL_CALL supportsMinimumSQLGrammar( ) override;
+ virtual sal_Bool SAL_CALL supportsCoreSQLGrammar( ) override;
+ virtual sal_Bool SAL_CALL supportsExtendedSQLGrammar( ) override;
+ virtual sal_Bool SAL_CALL supportsANSI92EntryLevelSQL( ) override;
+ virtual sal_Bool SAL_CALL supportsANSI92IntermediateSQL( ) override;
+ virtual sal_Bool SAL_CALL supportsANSI92FullSQL( ) override;
+ virtual sal_Bool SAL_CALL supportsIntegrityEnhancementFacility( ) override;
+ virtual sal_Bool SAL_CALL supportsOuterJoins( ) override;
+ virtual sal_Bool SAL_CALL supportsFullOuterJoins( ) override;
+ virtual sal_Bool SAL_CALL supportsLimitedOuterJoins( ) override;
+ virtual OUString SAL_CALL getSchemaTerm( ) override;
+ virtual OUString SAL_CALL getProcedureTerm( ) override;
+ virtual OUString SAL_CALL getCatalogTerm( ) override;
+ virtual sal_Bool SAL_CALL isCatalogAtStart( ) override;
+ virtual OUString SAL_CALL getCatalogSeparator( ) override;
+ virtual sal_Bool SAL_CALL supportsSchemasInDataManipulation( ) override;
+ virtual sal_Bool SAL_CALL supportsSchemasInProcedureCalls( ) override;
+ virtual sal_Bool SAL_CALL supportsSchemasInTableDefinitions( ) override;
+ virtual sal_Bool SAL_CALL supportsSchemasInIndexDefinitions( ) override;
+ virtual sal_Bool SAL_CALL supportsSchemasInPrivilegeDefinitions( ) override;
+ virtual sal_Bool SAL_CALL supportsCatalogsInDataManipulation( ) override;
+ virtual sal_Bool SAL_CALL supportsCatalogsInProcedureCalls( ) override;
+ virtual sal_Bool SAL_CALL supportsCatalogsInTableDefinitions( ) override;
+ virtual sal_Bool SAL_CALL supportsCatalogsInIndexDefinitions( ) override;
+ virtual sal_Bool SAL_CALL supportsCatalogsInPrivilegeDefinitions( ) override;
+ virtual sal_Bool SAL_CALL supportsPositionedDelete( ) override;
+ virtual sal_Bool SAL_CALL supportsPositionedUpdate( ) override;
+ virtual sal_Bool SAL_CALL supportsSelectForUpdate( ) override;
+ virtual sal_Bool SAL_CALL supportsStoredProcedures( ) override;
+ virtual sal_Bool SAL_CALL supportsSubqueriesInComparisons( ) override;
+ virtual sal_Bool SAL_CALL supportsSubqueriesInExists( ) override;
+ virtual sal_Bool SAL_CALL supportsSubqueriesInIns( ) override;
+ virtual sal_Bool SAL_CALL supportsSubqueriesInQuantifieds( ) override;
+ virtual sal_Bool SAL_CALL supportsCorrelatedSubqueries( ) override;
+ virtual sal_Bool SAL_CALL supportsUnion( ) override;
+ virtual sal_Bool SAL_CALL supportsUnionAll( ) override;
+ virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossCommit( ) override;
+ virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossRollback( ) override;
+ virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossCommit( ) override;
+ virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossRollback( ) override;
+ virtual sal_Int32 SAL_CALL getMaxBinaryLiteralLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxCharLiteralLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnsInGroupBy( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnsInIndex( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnsInOrderBy( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnsInSelect( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnsInTable( ) override;
+ virtual sal_Int32 SAL_CALL getMaxConnections( ) override;
+ virtual sal_Int32 SAL_CALL getMaxCursorNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxIndexLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxSchemaNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxProcedureNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxCatalogNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxRowSize( ) override;
+ virtual sal_Bool SAL_CALL doesMaxRowSizeIncludeBlobs( ) override;
+ virtual sal_Int32 SAL_CALL getMaxStatementLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxStatements( ) override;
+ virtual sal_Int32 SAL_CALL getMaxTableNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxTablesInSelect( ) override;
+ virtual sal_Int32 SAL_CALL getMaxUserNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getDefaultTransactionIsolation( ) override;
+ virtual sal_Bool SAL_CALL supportsTransactions( ) override;
+ virtual sal_Bool SAL_CALL supportsTransactionIsolationLevel( sal_Int32 level ) override;
+ virtual sal_Bool SAL_CALL supportsDataDefinitionAndDataManipulationTransactions( ) override;
+ virtual sal_Bool SAL_CALL supportsDataManipulationTransactionsOnly( ) override;
+ virtual sal_Bool SAL_CALL dataDefinitionCausesTransactionCommit( ) override;
+ virtual sal_Bool SAL_CALL dataDefinitionIgnoredInTransactions( ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getProcedures( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& procedureNamePattern ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getProcedureColumns( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& procedureNamePattern, const OUString& columnNamePattern ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTables( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const css::uno::Sequence< OUString >& types ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getSchemas( ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getCatalogs( ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTableTypes( ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getColumns( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const OUString& columnNamePattern ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getColumnPrivileges( const css::uno::Any& catalog, const OUString& schema, const OUString& table, const OUString& columnNamePattern ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTablePrivileges( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getBestRowIdentifier( const css::uno::Any& catalog, const OUString& schema, const OUString& table, sal_Int32 scope, sal_Bool nullable ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getVersionColumns( const css::uno::Any& catalog, const OUString& schema, const OUString& table ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getPrimaryKeys( const css::uno::Any& catalog, const OUString& schema, const OUString& table ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getImportedKeys( const css::uno::Any& catalog, const OUString& schema, const OUString& table ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getExportedKeys( const css::uno::Any& catalog, const OUString& schema, const OUString& table ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getCrossReference( const css::uno::Any& primaryCatalog, const OUString& primarySchema, const OUString& primaryTable, const css::uno::Any& foreignCatalog, const OUString& foreignSchema, const OUString& foreignTable ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTypeInfo( ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getIndexInfo( const css::uno::Any& catalog, const OUString& schema, const OUString& table, sal_Bool unique, sal_Bool approximate ) override;
+ virtual sal_Bool SAL_CALL supportsResultSetType( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL supportsResultSetConcurrency( sal_Int32 setType, sal_Int32 concurrency ) override;
+ virtual sal_Bool SAL_CALL ownUpdatesAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL ownDeletesAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL ownInsertsAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL othersUpdatesAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL othersDeletesAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL othersInsertsAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL updatesAreDetected( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL deletesAreDetected( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL insertsAreDetected( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL supportsBatchUpdates( ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getUDTs( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& typeNamePattern, const css::uno::Sequence< sal_Int32 >& types ) override;
+ virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL getConnection( ) override;
+
+ // XDatabaseMetaData2
+ virtual ::css::uno::Sequence< ::css::beans::PropertyValue > SAL_CALL getConnectionInfo() override;
- //************ Class: ODatabaseMetaData
-
-
- typedef ::cppu::WeakImplHelper< css::sdbc::XDatabaseMetaData> ODatabaseMetaData_BASE;
-
- class ODatabaseMetaData : public ODatabaseMetaData_BASE
- {
- ::rtl::Reference<Connection> m_pConnection;
- private:
- css::uno::Reference< css::sdbc::XResultSet > lcl_getKeys( bool bIsImport, std::u16string_view table );
- public:
-
- explicit ODatabaseMetaData(Connection* _pCon);
- virtual ~ODatabaseMetaData() override;
-
- // as I mentioned before this interface is really BIG
- // XDatabaseMetaData
- virtual sal_Bool SAL_CALL allProceduresAreCallable( ) override;
- virtual sal_Bool SAL_CALL allTablesAreSelectable( ) override;
- virtual OUString SAL_CALL getURL( ) override;
- virtual OUString SAL_CALL getUserName( ) override;
- virtual sal_Bool SAL_CALL isReadOnly( ) override;
- virtual sal_Bool SAL_CALL nullsAreSortedHigh( ) override;
- virtual sal_Bool SAL_CALL nullsAreSortedLow( ) override;
- virtual sal_Bool SAL_CALL nullsAreSortedAtStart( ) override;
- virtual sal_Bool SAL_CALL nullsAreSortedAtEnd( ) override;
- virtual OUString SAL_CALL getDatabaseProductName( ) override;
- virtual OUString SAL_CALL getDatabaseProductVersion( ) override;
- virtual OUString SAL_CALL getDriverName( ) override;
- virtual OUString SAL_CALL getDriverVersion( ) override;
- virtual sal_Int32 SAL_CALL getDriverMajorVersion( ) override;
- virtual sal_Int32 SAL_CALL getDriverMinorVersion( ) override;
- virtual sal_Bool SAL_CALL usesLocalFiles( ) override;
- virtual sal_Bool SAL_CALL usesLocalFilePerTable( ) override;
- virtual sal_Bool SAL_CALL supportsMixedCaseIdentifiers( ) override;
- virtual sal_Bool SAL_CALL storesUpperCaseIdentifiers( ) override;
- virtual sal_Bool SAL_CALL storesLowerCaseIdentifiers( ) override;
- virtual sal_Bool SAL_CALL storesMixedCaseIdentifiers( ) override;
- virtual sal_Bool SAL_CALL supportsMixedCaseQuotedIdentifiers( ) override;
- virtual sal_Bool SAL_CALL storesUpperCaseQuotedIdentifiers( ) override;
- virtual sal_Bool SAL_CALL storesLowerCaseQuotedIdentifiers( ) override;
- virtual sal_Bool SAL_CALL storesMixedCaseQuotedIdentifiers( ) override;
- virtual OUString SAL_CALL getIdentifierQuoteString( ) override;
- virtual OUString SAL_CALL getSQLKeywords( ) override;
- virtual OUString SAL_CALL getNumericFunctions( ) override;
- virtual OUString SAL_CALL getStringFunctions( ) override;
- virtual OUString SAL_CALL getSystemFunctions( ) override;
- virtual OUString SAL_CALL getTimeDateFunctions( ) override;
- virtual OUString SAL_CALL getSearchStringEscape( ) override;
- virtual OUString SAL_CALL getExtraNameCharacters( ) override;
- virtual sal_Bool SAL_CALL supportsAlterTableWithAddColumn( ) override;
- virtual sal_Bool SAL_CALL supportsAlterTableWithDropColumn( ) override;
- virtual sal_Bool SAL_CALL supportsColumnAliasing( ) override;
- virtual sal_Bool SAL_CALL nullPlusNonNullIsNull( ) override;
- virtual sal_Bool SAL_CALL supportsTypeConversion( ) override;
- virtual sal_Bool SAL_CALL supportsConvert( sal_Int32 fromType, sal_Int32 toType ) override;
- virtual sal_Bool SAL_CALL supportsTableCorrelationNames( ) override;
- virtual sal_Bool SAL_CALL supportsDifferentTableCorrelationNames( ) override;
- virtual sal_Bool SAL_CALL supportsExpressionsInOrderBy( ) override;
- virtual sal_Bool SAL_CALL supportsOrderByUnrelated( ) override;
- virtual sal_Bool SAL_CALL supportsGroupBy( ) override;
- virtual sal_Bool SAL_CALL supportsGroupByUnrelated( ) override;
- virtual sal_Bool SAL_CALL supportsGroupByBeyondSelect( ) override;
- virtual sal_Bool SAL_CALL supportsLikeEscapeClause( ) override;
- virtual sal_Bool SAL_CALL supportsMultipleResultSets( ) override;
- virtual sal_Bool SAL_CALL supportsMultipleTransactions( ) override;
- virtual sal_Bool SAL_CALL supportsNonNullableColumns( ) override;
- virtual sal_Bool SAL_CALL supportsMinimumSQLGrammar( ) override;
- virtual sal_Bool SAL_CALL supportsCoreSQLGrammar( ) override;
- virtual sal_Bool SAL_CALL supportsExtendedSQLGrammar( ) override;
- virtual sal_Bool SAL_CALL supportsANSI92EntryLevelSQL( ) override;
- virtual sal_Bool SAL_CALL supportsANSI92IntermediateSQL( ) override;
- virtual sal_Bool SAL_CALL supportsANSI92FullSQL( ) override;
- virtual sal_Bool SAL_CALL supportsIntegrityEnhancementFacility( ) override;
- virtual sal_Bool SAL_CALL supportsOuterJoins( ) override;
- virtual sal_Bool SAL_CALL supportsFullOuterJoins( ) override;
- virtual sal_Bool SAL_CALL supportsLimitedOuterJoins( ) override;
- virtual OUString SAL_CALL getSchemaTerm( ) override;
- virtual OUString SAL_CALL getProcedureTerm( ) override;
- virtual OUString SAL_CALL getCatalogTerm( ) override;
- virtual sal_Bool SAL_CALL isCatalogAtStart( ) override;
- virtual OUString SAL_CALL getCatalogSeparator( ) override;
- virtual sal_Bool SAL_CALL supportsSchemasInDataManipulation( ) override;
- virtual sal_Bool SAL_CALL supportsSchemasInProcedureCalls( ) override;
- virtual sal_Bool SAL_CALL supportsSchemasInTableDefinitions( ) override;
- virtual sal_Bool SAL_CALL supportsSchemasInIndexDefinitions( ) override;
- virtual sal_Bool SAL_CALL supportsSchemasInPrivilegeDefinitions( ) override;
- virtual sal_Bool SAL_CALL supportsCatalogsInDataManipulation( ) override;
- virtual sal_Bool SAL_CALL supportsCatalogsInProcedureCalls( ) override;
- virtual sal_Bool SAL_CALL supportsCatalogsInTableDefinitions( ) override;
- virtual sal_Bool SAL_CALL supportsCatalogsInIndexDefinitions( ) override;
- virtual sal_Bool SAL_CALL supportsCatalogsInPrivilegeDefinitions( ) override;
- virtual sal_Bool SAL_CALL supportsPositionedDelete( ) override;
- virtual sal_Bool SAL_CALL supportsPositionedUpdate( ) override;
- virtual sal_Bool SAL_CALL supportsSelectForUpdate( ) override;
- virtual sal_Bool SAL_CALL supportsStoredProcedures( ) override;
- virtual sal_Bool SAL_CALL supportsSubqueriesInComparisons( ) override;
- virtual sal_Bool SAL_CALL supportsSubqueriesInExists( ) override;
- virtual sal_Bool SAL_CALL supportsSubqueriesInIns( ) override;
- virtual sal_Bool SAL_CALL supportsSubqueriesInQuantifieds( ) override;
- virtual sal_Bool SAL_CALL supportsCorrelatedSubqueries( ) override;
- virtual sal_Bool SAL_CALL supportsUnion( ) override;
- virtual sal_Bool SAL_CALL supportsUnionAll( ) override;
- virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossCommit( ) override;
- virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossRollback( ) override;
- virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossCommit( ) override;
- virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossRollback( ) override;
- virtual sal_Int32 SAL_CALL getMaxBinaryLiteralLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxCharLiteralLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnsInGroupBy( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnsInIndex( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnsInOrderBy( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnsInSelect( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnsInTable( ) override;
- virtual sal_Int32 SAL_CALL getMaxConnections( ) override;
- virtual sal_Int32 SAL_CALL getMaxCursorNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxIndexLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxSchemaNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxProcedureNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxCatalogNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxRowSize( ) override;
- virtual sal_Bool SAL_CALL doesMaxRowSizeIncludeBlobs( ) override;
- virtual sal_Int32 SAL_CALL getMaxStatementLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxStatements( ) override;
- virtual sal_Int32 SAL_CALL getMaxTableNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxTablesInSelect( ) override;
- virtual sal_Int32 SAL_CALL getMaxUserNameLength( ) override;
- virtual sal_Int32 SAL_CALL getDefaultTransactionIsolation( ) override;
- virtual sal_Bool SAL_CALL supportsTransactions( ) override;
- virtual sal_Bool SAL_CALL supportsTransactionIsolationLevel( sal_Int32 level ) override;
- virtual sal_Bool SAL_CALL supportsDataDefinitionAndDataManipulationTransactions( ) override;
- virtual sal_Bool SAL_CALL supportsDataManipulationTransactionsOnly( ) override;
- virtual sal_Bool SAL_CALL dataDefinitionCausesTransactionCommit( ) override;
- virtual sal_Bool SAL_CALL dataDefinitionIgnoredInTransactions( ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getProcedures( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& procedureNamePattern ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getProcedureColumns( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& procedureNamePattern, const OUString& columnNamePattern ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTables( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const css::uno::Sequence< OUString >& types ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getSchemas( ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getCatalogs( ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTableTypes( ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getColumns( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const OUString& columnNamePattern ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getColumnPrivileges( const css::uno::Any& catalog, const OUString& schema, const OUString& table, const OUString& columnNamePattern ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTablePrivileges( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getBestRowIdentifier( const css::uno::Any& catalog, const OUString& schema, const OUString& table, sal_Int32 scope, sal_Bool nullable ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getVersionColumns( const css::uno::Any& catalog, const OUString& schema, const OUString& table ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getPrimaryKeys( const css::uno::Any& catalog, const OUString& schema, const OUString& table ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getImportedKeys( const css::uno::Any& catalog, const OUString& schema, const OUString& table ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getExportedKeys( const css::uno::Any& catalog, const OUString& schema, const OUString& table ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getCrossReference( const css::uno::Any& primaryCatalog, const OUString& primarySchema, const OUString& primaryTable, const css::uno::Any& foreignCatalog, const OUString& foreignSchema, const OUString& foreignTable ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTypeInfo( ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getIndexInfo( const css::uno::Any& catalog, const OUString& schema, const OUString& table, sal_Bool unique, sal_Bool approximate ) override;
- virtual sal_Bool SAL_CALL supportsResultSetType( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL supportsResultSetConcurrency( sal_Int32 setType, sal_Int32 concurrency ) override;
- virtual sal_Bool SAL_CALL ownUpdatesAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL ownDeletesAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL ownInsertsAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL othersUpdatesAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL othersDeletesAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL othersInsertsAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL updatesAreDetected( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL deletesAreDetected( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL insertsAreDetected( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL supportsBatchUpdates( ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getUDTs( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& typeNamePattern, const css::uno::Sequence< sal_Int32 >& types ) override;
- virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL getConnection( ) override;
- };
+ // XDatabaseMetaData3
+ virtual sal_Bool SAL_CALL autoCommitFailureClosesAllResultSets() override;
+ virtual sal_Bool SAL_CALL generatedKeyAlwaysReturned() override;
+ virtual ::css::uno::Reference< ::css::sdbc::XResultSet > SAL_CALL getAttributes( const ::rtl::OUString& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& typeNamePattern, const ::rtl::OUString& attributeNamePattern ) override;
+ virtual ::css::uno::Reference< ::css::sdbc::XResultSet > SAL_CALL getClientInfoProperties() override;
+ virtual ::sal_Int32 SAL_CALL getDatabaseMajorVersion() override;
+ virtual ::sal_Int32 SAL_CALL getDatabaseMinorVersion() override;
+ virtual ::css::uno::Reference< ::css::sdbc::XResultSet > SAL_CALL getFunctions( const ::rtl::OUString& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& functionNamePattern ) override;
+ virtual ::css::uno::Reference< ::css::sdbc::XResultSet > SAL_CALL getFunctionColumns( const ::rtl::OUString& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& functionNamePattern, const ::rtl::OUString& columnNamePattern ) override;
+ virtual ::sal_Int32 SAL_CALL getMaxLogicalLobSize() override;
+ virtual ::css::uno::Reference< ::css::sdbc::XResultSet > SAL_CALL getPseudoColumns( const ::rtl::OUString& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern, const ::rtl::OUString& columnNamePattern ) override;
+ virtual ::sal_Int32 SAL_CALL getResultSetHoldability() override;
+ virtual ::sal_Int32 SAL_CALL getRowIdLifetime() override;
+ virtual ::css::uno::Reference< ::css::sdbc::XResultSet > SAL_CALL getSchemasFiltered( const ::css::beans::Optional< ::rtl::OUString >& catalog, const ::css::beans::Optional< ::rtl::OUString >& schemaPattern ) override;
+ virtual ::sal_Int32 SAL_CALL getSQLStateType() override;
+ virtual ::css::uno::Reference< ::css::sdbc::XResultSet > SAL_CALL getSuperTables( const ::rtl::OUString& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& tableNamePattern ) override;
+ virtual ::css::uno::Reference< ::css::sdbc::XResultSet > SAL_CALL getSuperTypes( const ::rtl::OUString& catalog, const ::rtl::OUString& schemaPattern, const ::rtl::OUString& typeNamePattern ) override;
+ virtual ::sal_Bool SAL_CALL locatorsUpdateCopy() override;
+ virtual ::sal_Bool SAL_CALL supportsConvertInGeneral() override;
+ virtual ::sal_Bool SAL_CALL supportsGetGeneratedKeys() override;
+ virtual ::sal_Bool SAL_CALL supportsMultipleOpenResults() override;
+ virtual ::sal_Bool SAL_CALL supportsNamedParameters() override;
+ virtual ::sal_Bool SAL_CALL supportsRefCursors() override;
+ virtual ::sal_Bool SAL_CALL supportsSavepoints() override;
+ virtual ::sal_Bool SAL_CALL supportsSharding() override;
+ virtual ::sal_Bool SAL_CALL supportsStatementPooling() override;
+ virtual ::sal_Bool SAL_CALL supportsStoredFunctionsUsingCallSyntax() override;
+ };
}
diff --git a/connectivity/source/drivers/firebird/Driver.cxx b/connectivity/source/drivers/firebird/Driver.cxx
index c9dc6155d0e0..0879a7eca310 100644
--- a/connectivity/source/drivers/firebird/Driver.cxx
+++ b/connectivity/source/drivers/firebird/Driver.cxx
@@ -31,7 +31,6 @@
#include <osl/process.h>
#include <rtl/bootstrap.hxx>
#include <sal/log.hxx>
-#include <unotools/localfilehelper.hxx>
using namespace com::sun::star;
using namespace com::sun::star::uno;
@@ -46,11 +45,11 @@ using namespace connectivity::firebird;
// Static const variables
namespace {
-constexpr OUStringLiteral our_sFirebirdTmpVar = u"FIREBIRD_TMP";
-constexpr OUStringLiteral our_sFirebirdLockVar = u"FIREBIRD_LOCK";
-constexpr OUStringLiteral our_sFirebirdMsgVar = u"FIREBIRD_MSG";
+constexpr OUString our_sFirebirdTmpVar = u"FIREBIRD_TMP"_ustr;
+constexpr OUString our_sFirebirdLockVar = u"FIREBIRD_LOCK"_ustr;
+constexpr OUString our_sFirebirdMsgVar = u"FIREBIRD_MSG"_ustr;
#ifdef MACOSX
-constexpr OUStringLiteral our_sFirebirdLibVar = u"LIBREOFFICE_FIREBIRD_LIB";
+constexpr OUString our_sFirebirdLibVar = u"LIBREOFFICE_FIREBIRD_LIB"_ustr;
#endif
};
@@ -67,19 +66,19 @@ FirebirdDriver::FirebirdDriver(const css::uno::Reference< css::uno::XComponentCo
m_firebirdLockDirectory.EnableKillingFile(true);
// Overrides firebird's default of /tmp or c:\temp
- osl_setEnvironment(OUString(our_sFirebirdTmpVar).pData, m_firebirdTMPDirectory.GetFileName().pData);
+ osl_setEnvironment(our_sFirebirdTmpVar.pData, m_firebirdTMPDirectory.GetFileName().pData);
// Overrides firebird's default of /tmp/firebird or c:\temp\firebird
- osl_setEnvironment(OUString(our_sFirebirdLockVar).pData, m_firebirdLockDirectory.GetFileName().pData);
+ osl_setEnvironment(our_sFirebirdLockVar.pData, m_firebirdLockDirectory.GetFileName().pData);
#ifndef SYSTEM_FIREBIRD
// Overrides firebird's hardcoded default of /usr/local/firebird on *nix,
// however on Windows it seems to use the current directory as a default.
- OUString sMsgURL("$BRAND_BASE_DIR/$BRAND_SHARE_SUBDIR/firebird");
+ OUString sMsgURL(u"$BRAND_BASE_DIR/$BRAND_SHARE_SUBDIR/firebird"_ustr);
::rtl::Bootstrap::expandMacros(sMsgURL);
OUString sMsgPath;
::osl::FileBase::getSystemPathFromFileURL(sMsgURL, sMsgPath);
- osl_setEnvironment(OUString(our_sFirebirdMsgVar).pData, sMsgPath.pData);
+ osl_setEnvironment(our_sFirebirdMsgVar.pData, sMsgPath.pData);
#ifdef MACOSX
// Set an env. variable to specify library location
// for dlopen used in fbclient.
@@ -87,7 +86,7 @@ FirebirdDriver::FirebirdDriver(const css::uno::Reference< css::uno::XComponentCo
::rtl::Bootstrap::expandMacros(sLibURL);
OUString sLibPath;
::osl::FileBase::getSystemPathFromFileURL(sLibURL, sLibPath);
- osl_setEnvironment(OUString(our_sFirebirdLibVar).pData, sLibPath.pData);
+ osl_setEnvironment(our_sFirebirdLibVar.pData, sLibPath.pData);
#endif /*MACOSX*/
#endif /*!SYSTEM_FIREBIRD*/
}
@@ -100,30 +99,30 @@ void FirebirdDriver::disposing()
for (auto const& elem : m_xConnections)
{
- Reference< XComponent > xComp(elem.get(), UNO_QUERY);
+ rtl::Reference< Connection > xComp(elem.get());
if (xComp.is())
xComp->dispose();
}
m_xConnections.clear();
- osl_clearEnvironment(OUString(our_sFirebirdTmpVar).pData);
- osl_clearEnvironment(OUString(our_sFirebirdLockVar).pData);
+ osl_clearEnvironment(our_sFirebirdTmpVar.pData);
+ osl_clearEnvironment(our_sFirebirdLockVar.pData);
#ifndef SYSTEM_FIREBIRD
- osl_clearEnvironment(OUString(our_sFirebirdMsgVar).pData);
+ osl_clearEnvironment(our_sFirebirdMsgVar.pData);
#ifdef MACOSX
- osl_clearEnvironment(OUString(our_sFirebirdLibVar).pData);
+ osl_clearEnvironment(our_sFirebirdLibVar.pData);
#endif /*MACOSX*/
#endif /*!SYSTEM_FIREBIRD*/
- OSL_VERIFY(fb_shutdown(0, 1));
+ OSL_VERIFY(fb_shutdown(0, 1) == 0);
ODriver_BASE::disposing();
}
OUString SAL_CALL FirebirdDriver::getImplementationName()
{
- return "com.sun.star.comp.sdbc.firebird.Driver";
+ return u"com.sun.star.comp.sdbc.firebird.Driver"_ustr;
}
sal_Bool SAL_CALL FirebirdDriver::supportsService(const OUString& _rServiceName)
@@ -133,7 +132,7 @@ sal_Bool SAL_CALL FirebirdDriver::supportsService(const OUString& _rServiceName)
Sequence< OUString > SAL_CALL FirebirdDriver::getSupportedServiceNames()
{
- return { "com.sun.star.sdbc.Driver", "com.sun.star.sdbcx.Driver" };
+ return { u"com.sun.star.sdbc.Driver"_ustr, u"com.sun.star.sdbcx.Driver"_ustr };
}
// ---- XDriver -------------------------------------------------------------
@@ -152,7 +151,7 @@ Reference< XConnection > SAL_CALL FirebirdDriver::connect(
rtl::Reference<Connection> pCon = new Connection();
pCon->construct(url, info);
- m_xConnections.push_back(WeakReferenceHelper(*pCon));
+ m_xConnections.push_back(pCon);
return pCon;
}
diff --git a/connectivity/source/drivers/firebird/Driver.hxx b/connectivity/source/drivers/firebird/Driver.hxx
index d8ce92b0ed93..5428568b4166 100644
--- a/connectivity/source/drivers/firebird/Driver.hxx
+++ b/connectivity/source/drivers/firebird/Driver.hxx
@@ -27,61 +27,65 @@
#include <com/sun/star/sdbcx/XDataDefinitionSupplier.hpp>
#include <cppuhelper/compbase.hxx>
#include <unotools/tempfile.hxx>
+#include <unotools/weakref.hxx>
namespace connectivity::firebird
- {
- // The SQL dialect in use
- // Has to be used in various isc_* calls.
- // 3: Is IB6 -- minimum required for delimited identifiers.
- const int FIREBIRD_SQL_DIALECT = 3;
+{
+ // The SQL dialect in use
+ // Has to be used in various isc_* calls.
+ // 3: Is IB6 -- minimum required for delimited identifiers.
+ // SQL_DIALECT_V6 = 3, it's the last current version
+ // SQL_DIALECT_CURRENT is an alias for SQL_DIALECT_V6
+ // See src/dsql/sqlda_pub.h for full details
- typedef ::cppu::WeakComponentImplHelper< css::sdbc::XDriver,
- css::sdbcx::XDataDefinitionSupplier,
- css::lang::XServiceInfo > ODriver_BASE;
+ typedef ::cppu::WeakComponentImplHelper< css::sdbc::XDriver,
+ css::sdbcx::XDataDefinitionSupplier,
+ css::lang::XServiceInfo > ODriver_BASE;
- class FirebirdDriver : public ODriver_BASE
- {
- private:
- css::uno::Reference<css::uno::XComponentContext> m_aContext;
- ::utl::TempFile m_firebirdTMPDirectory;
- ::utl::TempFile m_firebirdLockDirectory;
+ class FirebirdDriver : public ODriver_BASE
+ {
+ private:
+ css::uno::Reference<css::uno::XComponentContext> m_aContext;
+ ::utl::TempFileNamed m_firebirdTMPDirectory;
+ ::utl::TempFileNamed m_firebirdLockDirectory;
- protected:
- ::osl::Mutex m_aMutex; // mutex is need to control member access
- OWeakRefArray m_xConnections; // vector containing a list
- // of all the Connection objects
- // for this Driver
+ protected:
+ ::osl::Mutex m_aMutex; // mutex is need to control member access
+ std::vector<unotools::WeakReference<Connection>>
+ m_xConnections; // vector containing a list
+ // of all the Connection objects
+ // for this Driver
- public:
+ public:
- explicit FirebirdDriver(const css::uno::Reference< css::uno::XComponentContext >& _rxContext);
- virtual ~FirebirdDriver() override;
- const css::uno::Reference<css::uno::XComponentContext>& getContext() const { return m_aContext; }
+ explicit FirebirdDriver(const css::uno::Reference< css::uno::XComponentContext >& _rxContext);
+ virtual ~FirebirdDriver() override;
+ const css::uno::Reference<css::uno::XComponentContext>& getContext() const { return m_aContext; }
- // OComponentHelper
- virtual void SAL_CALL disposing() override;
+ // OComponentHelper
+ virtual void SAL_CALL disposing() override;
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName( ) override;
- virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
- virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override;
+ // XServiceInfo
+ virtual OUString SAL_CALL getImplementationName( ) override;
+ virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override;
- // XDriver
- virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL connect( const OUString& url, const css::uno::Sequence< css::beans::PropertyValue >& info ) override;
- virtual sal_Bool SAL_CALL acceptsURL( const OUString& url ) override;
- virtual css::uno::Sequence< css::sdbc::DriverPropertyInfo > SAL_CALL getPropertyInfo( const OUString& url, const css::uno::Sequence< css::beans::PropertyValue >& info ) override;
- virtual sal_Int32 SAL_CALL getMajorVersion( ) override;
- virtual sal_Int32 SAL_CALL getMinorVersion( ) override;
+ // XDriver
+ virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL connect( const OUString& url, const css::uno::Sequence< css::beans::PropertyValue >& info ) override;
+ virtual sal_Bool SAL_CALL acceptsURL( const OUString& url ) override;
+ virtual css::uno::Sequence< css::sdbc::DriverPropertyInfo > SAL_CALL getPropertyInfo( const OUString& url, const css::uno::Sequence< css::beans::PropertyValue >& info ) override;
+ virtual sal_Int32 SAL_CALL getMajorVersion( ) override;
+ virtual sal_Int32 SAL_CALL getMinorVersion( ) override;
- // XDataDefinitionSupplier
- virtual css::uno::Reference< css::sdbcx::XTablesSupplier >
- SAL_CALL getDataDefinitionByConnection(
- const css::uno::Reference< css::sdbc::XConnection >& rxConnection) override;
- virtual css::uno::Reference< css::sdbcx::XTablesSupplier >
- SAL_CALL getDataDefinitionByURL(
- const OUString& rsURL,
- const css::uno::Sequence< css::beans::PropertyValue >& rInfo) override;
- };
+ // XDataDefinitionSupplier
+ virtual css::uno::Reference< css::sdbcx::XTablesSupplier >
+ SAL_CALL getDataDefinitionByConnection(
+ const css::uno::Reference< css::sdbc::XConnection >& rxConnection) override;
+ virtual css::uno::Reference< css::sdbcx::XTablesSupplier >
+ SAL_CALL getDataDefinitionByURL(
+ const OUString& rsURL,
+ const css::uno::Sequence< css::beans::PropertyValue >& rInfo) override;
+ };
}
diff --git a/connectivity/source/drivers/firebird/Indexes.cxx b/connectivity/source/drivers/firebird/Indexes.cxx
index 10ec90dc5be0..7bf783c79c7b 100644
--- a/connectivity/source/drivers/firebird/Indexes.cxx
+++ b/connectivity/source/drivers/firebird/Indexes.cxx
@@ -13,12 +13,11 @@ using namespace ::connectivity;
using namespace ::connectivity::firebird;
using namespace ::osl;
-using namespace ::std;
using namespace ::com::sun::star;
using namespace ::com::sun::star::sdbc;
-Indexes::Indexes(Table* pTable, Mutex& rMutex, const vector<OUString>& rVector)
+Indexes::Indexes(Table* pTable, Mutex& rMutex, const std::vector<OUString>& rVector)
: OIndexesHelper(pTable, rMutex, rVector)
, m_pTable(pTable)
{
diff --git a/connectivity/source/drivers/firebird/Indexes.hxx b/connectivity/source/drivers/firebird/Indexes.hxx
index 12d7dd198028..58991e23a788 100644
--- a/connectivity/source/drivers/firebird/Indexes.hxx
+++ b/connectivity/source/drivers/firebird/Indexes.hxx
@@ -14,25 +14,25 @@
#include <connectivity/TIndexes.hxx>
namespace connectivity::firebird
- {
+{
- /**
- * Firebird has a non-standard DROP INDEX statement, hence we need
- * to override OIndexesHelper::dropObject
- */
- class Indexes: public ::connectivity::OIndexesHelper
- {
- private:
- Table* m_pTable;
- protected:
- // XDrop
- virtual void dropObject(sal_Int32 nPosition,
- const OUString& sIndexName) override;
- public:
- Indexes(Table* pTable,
- ::osl::Mutex& rMutex,
- const std::vector< OUString>& rVector);
- };
+ /**
+ * Firebird has a non-standard DROP INDEX statement, hence we need
+ * to override OIndexesHelper::dropObject
+ */
+ class Indexes: public ::connectivity::OIndexesHelper
+ {
+ private:
+ Table* m_pTable;
+ protected:
+ // XDrop
+ virtual void dropObject(sal_Int32 nPosition,
+ const OUString& sIndexName) override;
+ public:
+ Indexes(Table* pTable,
+ ::osl::Mutex& rMutex,
+ const std::vector< OUString>& rVector);
+ };
} // namespace connectivity::firebird
diff --git a/connectivity/source/drivers/firebird/Keys.cxx b/connectivity/source/drivers/firebird/Keys.cxx
index 8de112ec6fc4..18d74c8b6ac0 100644
--- a/connectivity/source/drivers/firebird/Keys.cxx
+++ b/connectivity/source/drivers/firebird/Keys.cxx
@@ -37,7 +37,7 @@ void Keys::dropObject(sal_Int32 nPosition, const OUString& sName)
if (m_pTable->isNew())
return;
- uno::Reference<XPropertySet> xKey(getObject(nPosition), UNO_QUERY);
+ uno::Reference<XPropertySet> xKey(getObject(nPosition));
if (xKey.is())
{
diff --git a/connectivity/source/drivers/firebird/Keys.hxx b/connectivity/source/drivers/firebird/Keys.hxx
index 4e9ba5a7eede..fb3d3ca036d4 100644
--- a/connectivity/source/drivers/firebird/Keys.hxx
+++ b/connectivity/source/drivers/firebird/Keys.hxx
@@ -12,24 +12,24 @@
#include <connectivity/TKeys.hxx>
namespace connectivity::firebird
- {
+{
- class Table;
+ class Table;
- class Keys: public ::connectivity::OKeysHelper
- {
- private:
- Table* m_pTable;
+ class Keys: public ::connectivity::OKeysHelper
+ {
+ private:
+ Table* m_pTable;
- public:
- Keys(Table* pTable,
- ::osl::Mutex& rMutex,
- const ::std::vector< OUString>& rNames);
+ public:
+ Keys(Table* pTable,
+ ::osl::Mutex& rMutex,
+ const ::std::vector< OUString>& rNames);
- // OKeysHelper / XDrop
- void dropObject(sal_Int32 nPosition, const OUString& sName) override;
+ // OKeysHelper / XDrop
+ void dropObject(sal_Int32 nPosition, const OUString& sName) override;
- };
+ };
}
diff --git a/connectivity/source/drivers/firebird/PreparedStatement.cxx b/connectivity/source/drivers/firebird/PreparedStatement.cxx
index 8d08a207a67c..c1ebd314ea7e 100644
--- a/connectivity/source/drivers/firebird/PreparedStatement.cxx
+++ b/connectivity/source/drivers/firebird/PreparedStatement.cxx
@@ -20,8 +20,6 @@
#include <sal/config.h>
#include <cmath>
-#include <string_view>
-
#include "Connection.hxx"
#include "PreparedStatement.hxx"
#include "ResultSet.hxx"
@@ -50,7 +48,9 @@ using namespace com::sun::star::container;
using namespace com::sun::star::io;
using namespace com::sun::star::util;
-IMPLEMENT_SERVICE_INFO(OPreparedStatement,"com.sun.star.sdbcx.firebird.PreparedStatement","com.sun.star.sdbc.PreparedStatement");
+IMPLEMENT_SERVICE_INFO(OPreparedStatement,u"com.sun.star.sdbcx.firebird.PreparedStatement"_ustr,u"com.sun.star.sdbc.PreparedStatement"_ustr);
+
+constexpr size_t MAX_SIZE_SEGMENT = 65535; // max value of a segment of CLOB, if we want more than 65535 bytes, we need more segments
OPreparedStatement::OPreparedStatement( Connection* _pConnection,
@@ -77,6 +77,7 @@ void OPreparedStatement::ensurePrepared()
if (!m_pInSqlda)
{
m_pInSqlda = static_cast<XSQLDA*>(calloc(1, XSQLDA_LENGTH(10)));
+ assert(m_pInSqlda && "Don't handle OOM conditions");
m_pInSqlda->version = SQLDA_VERSION1;
m_pInSqlda->sqln = 10;
}
@@ -97,6 +98,7 @@ void OPreparedStatement::ensurePrepared()
short nItems = m_pInSqlda->sqld;
free(m_pInSqlda);
m_pInSqlda = static_cast<XSQLDA*>(calloc(1, XSQLDA_LENGTH(nItems)));
+ assert(m_pInSqlda && "Don't handle OOM conditions");
m_pInSqlda->version = SQLDA_VERSION1;
m_pInSqlda->sqln = nItems;
aErr = isc_dsql_describe_bind(m_statusVector,
@@ -191,80 +193,89 @@ void SAL_CALL OPreparedStatement::setString(sal_Int32 nParameterIndex,
checkParameterIndex(nParameterIndex);
setParameterNull(nParameterIndex, false);
- OString str = OUStringToOString(sInput , RTL_TEXTENCODING_UTF8 );
-
XSQLVAR* pVar = m_pInSqlda->sqlvar + (nParameterIndex - 1);
+ ColumnTypeInfo columnType(*pVar);
- int dtype = (pVar->sqltype & ~1); // drop flag bit for now
-
- if (str.getLength() > pVar->sqllen)
- str = str.copy(0, pVar->sqllen);
-
- switch (dtype) {
- case SQL_VARYING:
+ switch (auto sdbcType = columnType.getSdbcType()) {
+ case DataType::VARCHAR:
+ case DataType::CHAR:
{
- const sal_Int32 max_varchar_len = 0xFFFF;
- // First 2 bytes indicate string size
- if (str.getLength() > max_varchar_len)
+ OString str = OUStringToOString(sInput, RTL_TEXTENCODING_UTF8);
+ const ISC_SHORT nLength = std::min(str.getLength(), static_cast<sal_Int32>(pVar->sqllen));
+ int offset = 0;
+ if (sdbcType == DataType::VARCHAR)
{
- str = str.copy(0, max_varchar_len);
+ // First 2 bytes indicate string size
+ static_assert(sizeof(nLength) == 2, "must match dest memcpy len");
+ memcpy(pVar->sqldata, &nLength, 2);
+ offset = 2;
}
- const auto nLength = str.getLength();
- memcpy(pVar->sqldata, &nLength, 2);
// Actual data
- memcpy(pVar->sqldata + 2, str.getStr(), str.getLength());
+ memcpy(pVar->sqldata + offset, str.getStr(), nLength);
+ if (sdbcType == DataType::CHAR)
+ {
+ // Fill remainder with spaces
+ memset(pVar->sqldata + offset + nLength, ' ', pVar->sqllen - nLength);
+ }
break;
}
- case SQL_TEXT:
- memcpy(pVar->sqldata, str.getStr(), str.getLength());
- // Fill remainder with spaces
- memset(pVar->sqldata + str.getLength(), ' ', pVar->sqllen - str.getLength());
- break;
- case SQL_BLOB: // Clob
- assert( pVar->sqlsubtype == static_cast<short>(BlobSubtype::Clob) );
+ case DataType::CLOB:
setClob(nParameterIndex, sInput );
break;
- case SQL_SHORT:
+ case DataType::SMALLINT:
{
sal_Int32 int32Value = sInput.toInt32();
if ( (int32Value < std::numeric_limits<sal_Int16>::min()) ||
(int32Value > std::numeric_limits<sal_Int16>::max()) )
{
::dbtools::throwSQLException(
- "Value out of range for SQL_SHORT type",
+ u"Value out of range for SQL_SHORT type"_ustr,
::dbtools::StandardSQLState::INVALID_SQL_DATA_TYPE,
*this);
}
setShort(nParameterIndex, int32Value);
break;
}
- case SQL_LONG:
+ case DataType::INTEGER:
{
sal_Int32 int32Value = sInput.toInt32();
setInt(nParameterIndex, int32Value);
break;
}
- case SQL_INT64:
+ case DataType::BIGINT:
{
sal_Int64 int64Value = sInput.toInt64();
setLong(nParameterIndex, int64Value);
break;
}
- case SQL_FLOAT:
+ case DataType::FLOAT:
{
float floatValue = sInput.toFloat();
setFloat(nParameterIndex, floatValue);
break;
}
- case SQL_BOOLEAN:
+ case DataType::DOUBLE:
+ setDouble(nParameterIndex, sInput.toDouble());
+ break;
+ case DataType::NUMERIC:
+ case DataType::DECIMAL:
+ return setObjectWithInfo(nParameterIndex, Any{ sInput }, sdbcType, 0);
+ break;
+ case DataType::BOOLEAN:
{
bool boolValue = sInput.toBoolean();
setBoolean(nParameterIndex, boolValue);
break;
}
+ case DataType::SQLNULL:
+ {
+ // See https://www.firebirdsql.org/file/documentation/html/en/refdocs/fblangref25/firebird-25-language-reference.html#fblangref25-datatypes-special-sqlnull
+ pVar->sqldata = nullptr;
+ break;
+ }
default:
::dbtools::throwSQLException(
- "Incorrect type for setString",
+ u"Incorrect type for setString"_ustr,
::dbtools::StandardSQLState::INVALID_SQL_DATA_TYPE,
*this);
}
@@ -327,9 +338,6 @@ sal_Bool SAL_CALL OPreparedStatement::execute()
m_aStatementHandle,
m_pOutSqlda);
- if (getStatementChangeCount() > 0)
- m_pConnection->notifyDatabaseModified();
-
return m_xResultSet.is();
// TODO: implement handling of multiple ResultSets.
}
@@ -348,44 +356,97 @@ Reference< XResultSet > SAL_CALL OPreparedStatement::executeQuery()
namespace {
+sal_Int64 toPowOf10AndRound(double n, int powOf10)
+{
+ static constexpr sal_Int64 powers[] = {
+ 1,
+ 10,
+ 100,
+ 1000,
+ 10000,
+ 100000,
+ 1000000,
+ 10000000,
+ 100000000,
+ 1000000000,
+ 10000000000,
+ 100000000000,
+ 1000000000000,
+ 10000000000000,
+ 100000000000000,
+ 1000000000000000,
+ 10000000000000000,
+ 100000000000000000,
+ 1000000000000000000,
+ };
+ powOf10 = std::clamp(powOf10, 0, int(std::size(powers) - 1));
+ return n * powers[powOf10] + (n >= 0 ? 0.5 : -0.5);
+}
+
/**
* Take out the number part of a fix point decimal without
* the information of where is the fractional part from a
* string representation of a number. (e.g. 54.654 -> 54654)
*/
-sal_Int64 toNumericWithoutDecimalPlace(const OUString& sSource)
+sal_Int64 toNumericWithoutDecimalPlace(const Any& x, sal_Int32 scale)
{
- OUString sNumber(sSource);
-
- // cut off leading 0 eventually ( eg. 0.567 -> .567)
- (void)sSource.startsWith("0", &sNumber);
+ if (double value = 0; x >>= value)
+ return toPowOf10AndRound(value, scale);
- sal_Int32 nDotIndex = sNumber.indexOf('.');
+ // Can't use conversion of string to double, because it could be not representable in double
- if( nDotIndex < 0)
+ OUString s;
+ x >>= s;
+ std::u16string_view num(o3tl::trim(s));
+ size_t end = num.starts_with('-') ? 1 : 0;
+ for (bool seenDot = false; end < num.size(); ++end)
{
- return sNumber.toInt64(); // no dot -> it's an integer
+ if (num[end] == '.')
+ {
+ if (seenDot)
+ break;
+ seenDot = true;
+ }
+ else if (!rtl::isAsciiDigit(num[end]))
+ break;
}
- else
+ num = num.substr(0, end);
+
+ // fill in the number with nulls in fractional part.
+ // We need this because e.g. 0.450 != 0.045 despite
+ // their scale is equal
+ OUStringBuffer buffer(num);
+ if (auto dotPos = num.find('.'); dotPos != std::u16string_view::npos) // there is a dot
{
- // remove dot
- OUStringBuffer sBuffer(15);
- if(nDotIndex > 0)
+ scale -= num.substr(dotPos + 1).size();
+ buffer.remove(dotPos, 1);
+ if (scale < 0)
{
- sBuffer.append(sNumber.subView(0, nDotIndex));
+ const sal_Int32 n = std::min(buffer.getLength(), -scale);
+ buffer.truncate(buffer.getLength() - n);
+ scale = 0;
}
- sBuffer.append(sNumber.subView(nDotIndex + 1));
- return sBuffer.makeStringAndClear().toInt64();
}
+ for (sal_Int32 i = 0; i < scale; ++i)
+ buffer.append('0');
+
+ return OUString::unacquired(buffer).toInt64();
}
+double toDouble(const Any& x)
+{
+ if (double value = 0; x >>= value)
+ return value;
+ OUString s;
+ x >>= s;
+ return s.toDouble();
+}
}
//----- XParameters -----------------------------------------------------------
void SAL_CALL OPreparedStatement::setNull(sal_Int32 nIndex, sal_Int32 /*nSqlType*/)
{
MutexGuard aGuard( m_aMutex );
- checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
ensurePrepared();
checkParameterIndex(nIndex);
@@ -401,7 +462,6 @@ template <typename T>
void OPreparedStatement::setValue(sal_Int32 nIndex, const T& nValue, ISC_SHORT nType)
{
MutexGuard aGuard( m_aMutex );
- checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
ensurePrepared();
checkParameterIndex(nIndex);
@@ -412,7 +472,7 @@ void OPreparedStatement::setValue(sal_Int32 nIndex, const T& nValue, ISC_SHORT n
if ((pVar->sqltype & ~1) != nType)
{
::dbtools::throwSQLException(
- "Incorrect type for setValue",
+ u"Incorrect type for setValue"_ustr,
::dbtools::StandardSQLState::INVALID_SQL_DATA_TYPE,
*this);
}
@@ -420,20 +480,48 @@ void OPreparedStatement::setValue(sal_Int32 nIndex, const T& nValue, ISC_SHORT n
memcpy(pVar->sqldata, &nValue, sizeof(nValue));
}
+// Integral type setters convert transparently to bigger types
+
void SAL_CALL OPreparedStatement::setByte(sal_Int32 nIndex, sal_Int8 nValue)
{
// there's no TINYINT or equivalent on Firebird,
// so do the same as setShort
- setValue< sal_Int16 >(nIndex, nValue, SQL_SHORT);
+ setShort(nIndex, nValue);
}
void SAL_CALL OPreparedStatement::setShort(sal_Int32 nIndex, sal_Int16 nValue)
{
+ MutexGuard aGuard(m_aMutex);
+ ensurePrepared();
+
+ ColumnTypeInfo columnType{ m_pInSqlda, nIndex };
+ switch (columnType.getSdbcType())
+ {
+ case DataType::INTEGER:
+ return setValue<sal_Int32>(nIndex, nValue, columnType.getType());
+ case DataType::BIGINT:
+ return setValue<sal_Int64>(nIndex, nValue, columnType.getType());
+ case DataType::FLOAT:
+ return setValue<float>(nIndex, nValue, columnType.getType());
+ case DataType::DOUBLE:
+ return setValue<double>(nIndex, nValue, columnType.getType());
+ }
setValue< sal_Int16 >(nIndex, nValue, SQL_SHORT);
}
void SAL_CALL OPreparedStatement::setInt(sal_Int32 nIndex, sal_Int32 nValue)
{
+ MutexGuard aGuard(m_aMutex);
+ ensurePrepared();
+
+ ColumnTypeInfo columnType{ m_pInSqlda, nIndex };
+ switch (columnType.getSdbcType())
+ {
+ case DataType::BIGINT:
+ return setValue<sal_Int64>(nIndex, nValue, columnType.getType());
+ case DataType::DOUBLE:
+ return setValue<double>(nIndex, nValue, columnType.getType());
+ }
setValue< sal_Int32 >(nIndex, nValue, SQL_LONG);
}
@@ -450,51 +538,34 @@ void SAL_CALL OPreparedStatement::setFloat(sal_Int32 nIndex, float nValue)
void SAL_CALL OPreparedStatement::setDouble(sal_Int32 nIndex, double nValue)
{
MutexGuard aGuard( m_aMutex );
- checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
ensurePrepared();
- XSQLVAR* pVar = m_pInSqlda->sqlvar + (nIndex - 1);
- short dType = (pVar->sqltype & ~1); // drop flag bit for now
- short dSubType = pVar->sqlsubtype;
+ ColumnTypeInfo columnType{ m_pInSqlda, nIndex };
// Assume it is a sub type of a number.
- if(dSubType < 0 || dSubType > 2)
+ if (columnType.getSubType() < 0 || columnType.getSubType() > 2)
{
::dbtools::throwSQLException(
- "Incorrect number sub type",
+ u"Incorrect number sub type"_ustr,
::dbtools::StandardSQLState::INVALID_SQL_DATA_TYPE,
*this);
}
- // firebird stores scale as a negative number
- ColumnTypeInfo columnType{ dType, dSubType,
- static_cast<short>(-pVar->sqlscale) };
// Caller might try to set an integer type here. It makes sense to convert
// it instead of throwing an error.
- switch(columnType.getSdbcType())
+ switch(auto sdbcType = columnType.getSdbcType())
{
case DataType::SMALLINT:
- setValue< sal_Int16 >(nIndex,
- static_cast<sal_Int16>(nValue),
- dType);
- break;
+ return setValue(nIndex, static_cast<sal_Int16>(nValue), columnType.getType());
case DataType::INTEGER:
- setValue< sal_Int32 >(nIndex,
- static_cast<sal_Int32>(nValue),
- dType);
- break;
+ return setValue(nIndex, static_cast<sal_Int32>(nValue), columnType.getType());
case DataType::BIGINT:
- setValue< sal_Int64 >(nIndex,
- static_cast<sal_Int64>(nValue),
- dType);
- break;
+ return setValue(nIndex, static_cast<sal_Int64>(nValue), columnType.getType());
case DataType::NUMERIC:
case DataType::DECIMAL:
- // take decimal places into account, later on they are removed in makeNumericString
- setObjectWithInfo(nIndex,Any{nValue}, columnType.getSdbcType(), columnType.getScale());
- break;
- default:
- setValue< double >(nIndex, nValue, SQL_DOUBLE); // TODO: SQL_D_FLOAT?
+ return setObjectWithInfo(nIndex, Any{ nValue }, sdbcType, 0);
+ // TODO: SQL_D_FLOAT?
}
+ setValue<double>(nIndex, nValue, SQL_DOUBLE);
}
void SAL_CALL OPreparedStatement::setDate(sal_Int32 nIndex, const Date& rDate)
@@ -563,7 +634,7 @@ void OPreparedStatement::openBlobForWriting(isc_blob_handle& rBlobHandle, ISC_QU
if (aErr)
{
evaluateStatusVector(m_statusVector,
- OUStringConcatenation("setBlob failed on " + m_sSqlStatement),
+ Concat2View("setBlob failed on " + m_sSqlStatement),
*this);
assert(false);
}
@@ -589,11 +660,8 @@ void SAL_CALL OPreparedStatement::setClob(sal_Int32 nParameterIndex, const Refer
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
-#if SAL_TYPES_SIZEOFPOINTER == 8
- isc_blob_handle aBlobHandle = 0;
-#else
- isc_blob_handle aBlobHandle = nullptr;
-#endif
+ // value-initialization: isc_blob_handle may be either a pointer of an integer
+ isc_blob_handle aBlobHandle{};
ISC_QUAD aBlobId;
openBlobForWriting(aBlobHandle, aBlobId);
@@ -605,9 +673,9 @@ void SAL_CALL OPreparedStatement::setClob(sal_Int32 nParameterIndex, const Refer
sal_Int64 nCharWritten = 1; // XClob is indexed from 1
ISC_STATUS aErr = 0;
sal_Int64 nLen = xClob->length();
- while ( nLen > nCharWritten )
+ while ( nLen >= nCharWritten )
{
- sal_Int64 nCharRemain = nLen - nCharWritten;
+ sal_Int64 nCharRemain = nLen - nCharWritten + 1;
constexpr sal_uInt16 MAX_SIZE = SAL_MAX_UINT16 / 4;
sal_uInt16 nWriteSize = std::min<sal_Int64>(nCharRemain, MAX_SIZE);
OString sData = OUStringToOString(
@@ -638,17 +706,14 @@ void SAL_CALL OPreparedStatement::setClob(sal_Int32 nParameterIndex, const Refer
setValue< ISC_QUAD >(nParameterIndex, aBlobId, SQL_BLOB);
}
-void OPreparedStatement::setClob( sal_Int32 nParameterIndex, const OUString& rStr )
+void OPreparedStatement::setClob(sal_Int32 nParameterIndex, std::u16string_view rStr)
{
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
checkParameterIndex(nParameterIndex);
-#if SAL_TYPES_SIZEOFPOINTER == 8
- isc_blob_handle aBlobHandle = 0;
-#else
- isc_blob_handle aBlobHandle = nullptr;
-#endif
+ // value-initialization: isc_blob_handle may be either a pointer of an integer
+ isc_blob_handle aBlobHandle{};
ISC_QUAD aBlobId;
openBlobForWriting(aBlobHandle, aBlobId);
@@ -656,10 +721,41 @@ void OPreparedStatement::setClob( sal_Int32 nParameterIndex, const OUString& rSt
OString sData = OUStringToOString(
rStr,
RTL_TEXTENCODING_UTF8);
- ISC_STATUS aErr = isc_put_segment( m_statusVector,
+ size_t nDataSize = sData.getLength();
+ ISC_STATUS aErr = 0;
+ // we can't store more than MAX_SIZE_SEGMENT in a segment
+ if (nDataSize <= MAX_SIZE_SEGMENT)
+ {
+ aErr = isc_put_segment( m_statusVector,
&aBlobHandle,
sData.getLength(),
sData.getStr() );
+ }
+ else
+ {
+ // if we need more, let's split the input and first let's calculate the nb of entire chunks needed
+ size_t nNbEntireChunks = nDataSize / MAX_SIZE_SEGMENT;
+ for (size_t i = 0; i < nNbEntireChunks; ++i)
+ {
+ OString strCurrentChunk = sData.copy(i * MAX_SIZE_SEGMENT, MAX_SIZE_SEGMENT);
+ aErr = isc_put_segment( m_statusVector,
+ &aBlobHandle,
+ strCurrentChunk.getLength(),
+ strCurrentChunk.getStr() );
+ if (aErr)
+ break;
+ }
+ size_t nRemainingBytes = nDataSize - (nNbEntireChunks * MAX_SIZE_SEGMENT);
+ if (nRemainingBytes && !aErr)
+ {
+ // then copy the remaining
+ OString strCurrentChunk = sData.copy(nNbEntireChunks * MAX_SIZE_SEGMENT, nRemainingBytes);
+ aErr = isc_put_segment( m_statusVector,
+ &aBlobHandle,
+ strCurrentChunk.getLength(),
+ strCurrentChunk.getStr() );
+ }
+ }
// We need to make sure we close the Blob even if there are errors, hence evaluate
// errors after closing.
@@ -683,11 +779,8 @@ void SAL_CALL OPreparedStatement::setBlob(sal_Int32 nParameterIndex,
checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
checkParameterIndex(nParameterIndex);
-#if SAL_TYPES_SIZEOFPOINTER == 8
- isc_blob_handle aBlobHandle = 0;
-#else
- isc_blob_handle aBlobHandle = nullptr;
-#endif
+ // value-initialization: isc_blob_handle may be either a pointer of an integer
+ isc_blob_handle aBlobHandle{};
ISC_QUAD aBlobId;
openBlobForWriting(aBlobHandle, aBlobId);
@@ -754,62 +847,28 @@ void SAL_CALL OPreparedStatement::setObjectWithInfo( sal_Int32 parameterIndex, c
checkParameterIndex(parameterIndex);
setParameterNull(parameterIndex, false);
- XSQLVAR* pVar = m_pInSqlda->sqlvar + (parameterIndex - 1);
- int dType = (pVar->sqltype & ~1); // drop null flag
+ ColumnTypeInfo columnType{ m_pInSqlda, parameterIndex };
+ int dType = columnType.getType() & ~1; // drop null flag
if(sqlType == DataType::DECIMAL || sqlType == DataType::NUMERIC)
{
- double dbValue =0.0;
- OUString sValue;
- if( x >>= dbValue )
- {
- // truncate and round to 'scale' number of decimal places
- sValue = OUString::number( std::floor((dbValue * pow10Integer(scale)) + .5) / pow10Integer(scale) );
- }
- else
- {
- x >>= sValue;
- }
-
- // fill in the number with nulls in fractional part.
- // We need this because e.g. 0.450 != 0.045 despite
- // their scale is equal
- OUStringBuffer sBuffer(15);
- sBuffer.append(sValue);
- if(sValue.indexOf('.') != -1) // there is a dot
- {
- for(sal_Int32 i=sValue.copy(sValue.indexOf('.')+1).getLength(); i<scale;i++)
- {
- sBuffer.append('0');
- }
- }
- else
- {
- for (sal_Int32 i=0; i<scale; i++)
- {
- sBuffer.append('0');
- }
- }
-
- sValue = sBuffer.makeStringAndClear();
switch(dType)
{
case SQL_SHORT:
- setValue< sal_Int16 >(parameterIndex,
- static_cast<sal_Int16>( toNumericWithoutDecimalPlace(sValue) ),
- dType);
- break;
+ return setValue(
+ parameterIndex,
+ static_cast<sal_Int16>(toNumericWithoutDecimalPlace(x, columnType.getScale())),
+ dType);
case SQL_LONG:
- case SQL_DOUBLE:
- setValue< sal_Int32 >(parameterIndex,
- static_cast<sal_Int32>( toNumericWithoutDecimalPlace(sValue) ),
- dType);
- break;
+ return setValue(
+ parameterIndex,
+ static_cast<sal_Int32>(toNumericWithoutDecimalPlace(x, columnType.getScale())),
+ dType);
case SQL_INT64:
- setValue< sal_Int64 >(parameterIndex,
- toNumericWithoutDecimalPlace(sValue),
- dType);
- break;
+ return setValue(parameterIndex,
+ toNumericWithoutDecimalPlace(x, columnType.getScale()), dType);
+ case SQL_DOUBLE:
+ return setValue(parameterIndex, toDouble(x), dType);
default:
SAL_WARN("connectivity.firebird",
"No Firebird sql type found for numeric or decimal types");
@@ -851,11 +910,8 @@ void SAL_CALL OPreparedStatement::setBytes(sal_Int32 nParameterIndex,
if( dType == SQL_BLOB )
{
-#if SAL_TYPES_SIZEOFPOINTER == 8
- isc_blob_handle aBlobHandle = 0;
-#else
- isc_blob_handle aBlobHandle = nullptr;
-#endif
+ // value-initialization: isc_blob_handle may be either a pointer of an integer
+ isc_blob_handle aBlobHandle{};
ISC_QUAD aBlobId;
openBlobForWriting(aBlobHandle, aBlobId);
@@ -899,12 +955,7 @@ void SAL_CALL OPreparedStatement::setBytes(sal_Int32 nParameterIndex,
{
setParameterNull(nParameterIndex, false);
const sal_Int32 nMaxSize = 0xFFFF;
- Sequence<sal_Int8> xBytesCopy(xBytes);
- if (xBytesCopy.getLength() > nMaxSize)
- {
- xBytesCopy.realloc( nMaxSize );
- }
- const auto nSize = xBytesCopy.getLength();
+ const sal_uInt16 nSize = std::min(xBytes.getLength(), nMaxSize);
// 8000 corresponds to value from lcl_addDefaultParameters
// in dbaccess/source/filter/hsqldb/createparser.cxx
if (nSize > 8000)
@@ -912,22 +963,26 @@ void SAL_CALL OPreparedStatement::setBytes(sal_Int32 nParameterIndex,
free(pVar->sqldata);
pVar->sqldata = static_cast<char *>(malloc(sizeof(char) * nSize + 2));
}
+ static_assert(sizeof(nSize) == 2, "must match dest memcpy len");
// First 2 bytes indicate string size
memcpy(pVar->sqldata, &nSize, 2);
// Actual data
- memcpy(pVar->sqldata + 2, xBytesCopy.getConstArray(), nSize);
+ memcpy(pVar->sqldata + 2, xBytes.getConstArray(), nSize);
}
else if( dType == SQL_TEXT )
{
+ if (pVar->sqllen < xBytes.getLength())
+ dbtools::throwSQLException(u"Data too big for this field"_ustr,
+ dbtools::StandardSQLState::INVALID_SQL_DATA_TYPE, *this);
setParameterNull(nParameterIndex, false);
memcpy(pVar->sqldata, xBytes.getConstArray(), xBytes.getLength() );
- // Fill remainder with spaces
+ // Fill remainder with zeroes
memset(pVar->sqldata + xBytes.getLength(), 0, pVar->sqllen - xBytes.getLength());
}
else
{
::dbtools::throwSQLException(
- "Incorrect type for setBytes",
+ u"Incorrect type for setBytes"_ustr,
::dbtools::StandardSQLState::INVALID_SQL_DATA_TYPE,
*this);
}
diff --git a/connectivity/source/drivers/firebird/PreparedStatement.hxx b/connectivity/source/drivers/firebird/PreparedStatement.hxx
index 3e61436b5874..1c0fbb8f13f0 100644
--- a/connectivity/source/drivers/firebird/PreparedStatement.hxx
+++ b/connectivity/source/drivers/firebird/PreparedStatement.hxx
@@ -32,120 +32,120 @@
#include <ibase.h>
namespace connectivity::firebird
+{
+ class OResultSetMetaData;
+ class OBoundParam;
+ typedef ::cppu::ImplHelper5< css::sdbc::XPreparedStatement,
+ css::sdbc::XParameters,
+ css::sdbc::XPreparedBatchExecution,
+ css::sdbc::XResultSetMetaDataSupplier,
+ css::lang::XServiceInfo> OPreparedStatement_Base;
+
+ class OPreparedStatement : public OStatementCommonBase,
+ public OPreparedStatement_Base
{
-
- class OBoundParam;
- typedef ::cppu::ImplHelper5< css::sdbc::XPreparedStatement,
- css::sdbc::XParameters,
- css::sdbc::XPreparedBatchExecution,
- css::sdbc::XResultSetMetaDataSupplier,
- css::lang::XServiceInfo> OPreparedStatement_Base;
-
- class OPreparedStatement : public OStatementCommonBase,
- public OPreparedStatement_Base
- {
- protected:
- OUString m_sSqlStatement;
- css::uno::Reference< css::sdbc::XResultSetMetaData > m_xMetaData;
-
- XSQLDA* m_pOutSqlda;
- XSQLDA* m_pInSqlda;
- /// @throws css::sdbc::SQLException
- /// @throws css::uno::RuntimeException
- void checkParameterIndex(sal_Int32 nParameterIndex);
-
- /**
- * Set a numeric value in the input SQLDA. If the destination
- * parameter is not of nType then an Exception will be thrown.
- *
- * @throws css::sdbc::SQLException
- * @throws css::uno::RuntimeException
- */
- template <typename T> void setValue(sal_Int32 nIndex, const T& nValue, ISC_SHORT nType);
- void setParameterNull(sal_Int32 nParameterIndex, bool bSetNull = true);
-
- /// @throws css::sdbc::SQLException
- /// @throws css::uno::RuntimeException
- void ensurePrepared();
- /**
- * Assumes that all necessary mutexes have been taken.
- */
- void openBlobForWriting(isc_blob_handle& rBlobHandle, ISC_QUAD& rBlobId);
- /**
- * Assumes that all necessary mutexes have been taken.
- */
- void closeBlobAfterWriting(isc_blob_handle& rBlobHandle);
- void setClob(sal_Int32 nParamIndex, const OUString& rStr);
-
- protected:
- virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,
- const css::uno::Any& rValue) override;
- virtual ~OPreparedStatement() override;
- public:
- DECLARE_SERVICE_INFO();
- // a constructor, which is required for returning objects:
- OPreparedStatement( Connection* _pConnection,
- const OUString& sql);
-
- //XInterface
- virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
- virtual void SAL_CALL acquire() noexcept override;
- virtual void SAL_CALL release() noexcept override;
- //XTypeProvider
- virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
-
- // XPreparedStatement
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL
- executeQuery() override;
- virtual sal_Int32 SAL_CALL
- executeUpdate() override;
- virtual sal_Bool SAL_CALL
- execute() override;
- virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL
- getConnection() override;
-
- // XParameters
- virtual void SAL_CALL setNull(sal_Int32 nIndex, sal_Int32 nValue) override;
- virtual void SAL_CALL setObjectNull(sal_Int32 parameterIndex, sal_Int32 sqlType, const OUString& typeName ) override;
- virtual void SAL_CALL setBoolean( sal_Int32 nIndex, sal_Bool nValue) override;
- virtual void SAL_CALL setByte(sal_Int32 nIndex, sal_Int8 nValue) override;
- virtual void SAL_CALL setShort(sal_Int32 nIndex, sal_Int16 nValue) override;
- virtual void SAL_CALL setInt(sal_Int32 nIndex, sal_Int32 nValue) override;
- virtual void SAL_CALL setLong(sal_Int32 nIndex, sal_Int64 nValue) override;
- virtual void SAL_CALL setFloat( sal_Int32 parameterIndex, float x ) override;
- virtual void SAL_CALL setDouble( sal_Int32 parameterIndex, double x ) override;
- virtual void SAL_CALL setString( sal_Int32 parameterIndex, const OUString& x ) override;
- virtual void SAL_CALL setBytes( sal_Int32 parameterIndex, const css::uno::Sequence< sal_Int8 >& x ) override;
- virtual void SAL_CALL setDate( sal_Int32 parameterIndex, const css::util::Date& x ) override;
- virtual void SAL_CALL setTime( sal_Int32 parameterIndex, const css::util::Time& x ) override;
- virtual void SAL_CALL setTimestamp( sal_Int32 parameterIndex, const css::util::DateTime& x ) override;
- virtual void SAL_CALL setBinaryStream( sal_Int32 parameterIndex, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length ) override;
- virtual void SAL_CALL setCharacterStream( sal_Int32 parameterIndex, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length ) override;
- virtual void SAL_CALL setObject( sal_Int32 parameterIndex, const css::uno::Any& x ) override;
- virtual void SAL_CALL setObjectWithInfo( sal_Int32 parameterIndex, const css::uno::Any& x, sal_Int32 targetSqlType, sal_Int32 scale ) override;
- virtual void SAL_CALL setRef( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XRef >& x ) override;
- virtual void SAL_CALL setBlob( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XBlob >& x ) override;
- virtual void SAL_CALL setClob( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XClob >& x ) override;
- virtual void SAL_CALL setArray( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XArray >& x ) override;
- virtual void SAL_CALL clearParameters( ) override;
-
- // XPreparedBatchExecution -- UNSUPPORTED by firebird
- virtual void SAL_CALL
- addBatch() override;
- virtual void SAL_CALL
- clearBatch() override;
- virtual css::uno::Sequence< sal_Int32 > SAL_CALL
- executeBatch() override;
-
- // XCloseable
- virtual void SAL_CALL close() override;
- // OComponentHelper
- virtual void SAL_CALL disposing() override;
-
- // XResultSetMetaDataSupplier
- virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) override;
-
- };
+ protected:
+ OUString m_sSqlStatement;
+ rtl::Reference<OResultSetMetaData> m_xMetaData;
+
+ XSQLDA* m_pOutSqlda;
+ XSQLDA* m_pInSqlda;
+ /// @throws css::sdbc::SQLException
+ /// @throws css::uno::RuntimeException
+ void checkParameterIndex(sal_Int32 nParameterIndex);
+
+ /**
+ * Set a numeric value in the input SQLDA. If the destination
+ * parameter is not of nType then an Exception will be thrown.
+ *
+ * @throws css::sdbc::SQLException
+ * @throws css::uno::RuntimeException
+ */
+ template <typename T> void setValue(sal_Int32 nIndex, const T& nValue, ISC_SHORT nType);
+ void setParameterNull(sal_Int32 nParameterIndex, bool bSetNull = true);
+
+ /// @throws css::sdbc::SQLException
+ /// @throws css::uno::RuntimeException
+ void ensurePrepared();
+ /**
+ * Assumes that all necessary mutexes have been taken.
+ */
+ void openBlobForWriting(isc_blob_handle& rBlobHandle, ISC_QUAD& rBlobId);
+ /**
+ * Assumes that all necessary mutexes have been taken.
+ */
+ void closeBlobAfterWriting(isc_blob_handle& rBlobHandle);
+ void setClob(sal_Int32 nParamIndex, std::u16string_view rStr);
+
+ protected:
+ virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,
+ const css::uno::Any& rValue) override;
+ virtual ~OPreparedStatement() override;
+ public:
+ DECLARE_SERVICE_INFO();
+ // a constructor, which is required for returning objects:
+ OPreparedStatement( Connection* _pConnection,
+ const OUString& sql);
+
+ //XInterface
+ virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
+ virtual void SAL_CALL acquire() noexcept override;
+ virtual void SAL_CALL release() noexcept override;
+ //XTypeProvider
+ virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
+
+ // XPreparedStatement
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL
+ executeQuery() override;
+ virtual sal_Int32 SAL_CALL
+ executeUpdate() override;
+ virtual sal_Bool SAL_CALL
+ execute() override;
+ virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL
+ getConnection() override;
+
+ // XParameters
+ virtual void SAL_CALL setNull(sal_Int32 nIndex, sal_Int32 nValue) override;
+ virtual void SAL_CALL setObjectNull(sal_Int32 parameterIndex, sal_Int32 sqlType, const OUString& typeName ) override;
+ virtual void SAL_CALL setBoolean( sal_Int32 nIndex, sal_Bool nValue) override;
+ virtual void SAL_CALL setByte(sal_Int32 nIndex, sal_Int8 nValue) override;
+ virtual void SAL_CALL setShort(sal_Int32 nIndex, sal_Int16 nValue) override;
+ virtual void SAL_CALL setInt(sal_Int32 nIndex, sal_Int32 nValue) override;
+ virtual void SAL_CALL setLong(sal_Int32 nIndex, sal_Int64 nValue) override;
+ virtual void SAL_CALL setFloat( sal_Int32 parameterIndex, float x ) override;
+ virtual void SAL_CALL setDouble( sal_Int32 parameterIndex, double x ) override;
+ virtual void SAL_CALL setString( sal_Int32 parameterIndex, const OUString& x ) override;
+ virtual void SAL_CALL setBytes( sal_Int32 parameterIndex, const css::uno::Sequence< sal_Int8 >& x ) override;
+ virtual void SAL_CALL setDate( sal_Int32 parameterIndex, const css::util::Date& x ) override;
+ virtual void SAL_CALL setTime( sal_Int32 parameterIndex, const css::util::Time& x ) override;
+ virtual void SAL_CALL setTimestamp( sal_Int32 parameterIndex, const css::util::DateTime& x ) override;
+ virtual void SAL_CALL setBinaryStream( sal_Int32 parameterIndex, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length ) override;
+ virtual void SAL_CALL setCharacterStream( sal_Int32 parameterIndex, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length ) override;
+ virtual void SAL_CALL setObject( sal_Int32 parameterIndex, const css::uno::Any& x ) override;
+ virtual void SAL_CALL setObjectWithInfo( sal_Int32 parameterIndex, const css::uno::Any& x, sal_Int32 targetSqlType, sal_Int32 scale ) override;
+ virtual void SAL_CALL setRef( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XRef >& x ) override;
+ virtual void SAL_CALL setBlob( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XBlob >& x ) override;
+ virtual void SAL_CALL setClob( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XClob >& x ) override;
+ virtual void SAL_CALL setArray( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XArray >& x ) override;
+ virtual void SAL_CALL clearParameters( ) override;
+
+ // XPreparedBatchExecution -- UNSUPPORTED by firebird
+ virtual void SAL_CALL
+ addBatch() override;
+ virtual void SAL_CALL
+ clearBatch() override;
+ virtual css::uno::Sequence< sal_Int32 > SAL_CALL
+ executeBatch() override;
+
+ // XCloseable
+ virtual void SAL_CALL close() override;
+ // OComponentHelper
+ virtual void SAL_CALL disposing() override;
+
+ // XResultSetMetaDataSupplier
+ virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) override;
+
+ };
}
diff --git a/connectivity/source/drivers/firebird/ResultSet.cxx b/connectivity/source/drivers/firebird/ResultSet.cxx
index aa13dbd0b96c..ce6b875554da 100644
--- a/connectivity/source/drivers/firebird/ResultSet.cxx
+++ b/connectivity/source/drivers/firebird/ResultSet.cxx
@@ -151,16 +151,14 @@ sal_Bool SAL_CALL OResultSet::next()
sal_Bool SAL_CALL OResultSet::previous()
{
- ::dbtools::throwFunctionNotSupportedSQLException("previous not supported in firebird",
+ ::dbtools::throwFunctionNotSupportedSQLException(u"previous not supported in firebird"_ustr,
*this);
- return false;
}
sal_Bool SAL_CALL OResultSet::isLast()
{
- ::dbtools::throwFunctionNotSupportedSQLException("isLast not supported in firebird",
+ ::dbtools::throwFunctionNotSupportedSQLException(u"isLast not supported in firebird"_ustr,
*this);
- return false;
}
sal_Bool SAL_CALL OResultSet::isBeforeFirst()
@@ -193,7 +191,7 @@ void SAL_CALL OResultSet::beforeFirst()
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
if (m_currentRow != 0)
- ::dbtools::throwFunctionNotSupportedSQLException("beforeFirst not supported in firebird",
+ ::dbtools::throwFunctionNotSupportedSQLException(u"beforeFirst not supported in firebird"_ustr,
*this);
}
@@ -203,7 +201,7 @@ void SAL_CALL OResultSet::afterLast()
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
if (!m_bIsAfterLastRow)
- ::dbtools::throwFunctionNotSupportedSQLException("afterLast not supported in firebird",
+ ::dbtools::throwFunctionNotSupportedSQLException(u"afterLast not supported in firebird"_ustr,
*this);
}
@@ -222,7 +220,7 @@ sal_Bool SAL_CALL OResultSet::first()
}
else
{
- ::dbtools::throwFunctionNotSupportedSQLException("first not supported in firebird",
+ ::dbtools::throwFunctionNotSupportedSQLException(u"first not supported in firebird"_ustr,
*this);
return false;
}
@@ -232,9 +230,8 @@ sal_Bool SAL_CALL OResultSet::last()
{
// We need to iterate past the last row to know when we've passed the last
// row, hence we can't actually move to last.
- ::dbtools::throwFunctionNotSupportedSQLException("last not supported in firebird",
+ ::dbtools::throwFunctionNotSupportedSQLException(u"last not supported in firebird"_ustr,
*this);
- return false;
}
sal_Bool SAL_CALL OResultSet::absolute(sal_Int32 aRow)
@@ -249,7 +246,7 @@ sal_Bool SAL_CALL OResultSet::absolute(sal_Int32 aRow)
}
else
{
- ::dbtools::throwFunctionNotSupportedSQLException("absolute not supported in firebird",
+ ::dbtools::throwFunctionNotSupportedSQLException(u"absolute not supported in firebird"_ustr,
*this);
return false;
}
@@ -271,7 +268,7 @@ sal_Bool SAL_CALL OResultSet::relative(sal_Int32 row)
}
else
{
- ::dbtools::throwFunctionNotSupportedSQLException("relative not supported in firebird",
+ ::dbtools::throwFunctionNotSupportedSQLException(u"relative not supported in firebird"_ustr,
*this);
return false;
}
@@ -299,7 +296,7 @@ void OResultSet::checkRowIndex()
if((m_currentRow < 1) || m_bIsAfterLastRow)
{
::dbtools::throwSQLException(
- "Invalid Row",
+ u"Invalid Row"_ustr,
::dbtools::StandardSQLState::INVALID_CURSOR_POSITION,
*this);
}
@@ -334,8 +331,6 @@ sal_Int32 SAL_CALL OResultSet::findColumn(const OUString& rColumnName)
}
::dbtools::throwInvalidColumnException(rColumnName, *this);
- assert(false);
- return 0; // Never reached
}
uno::Reference< XInputStream > SAL_CALL OResultSet::getBinaryStream( sal_Int32 )
@@ -368,7 +363,7 @@ bool OResultSet::isNull(const sal_Int32 nColumnIndex)
return false;
}
-template <typename T>
+template <typename T> requires std::is_integral_v<T>
OUString OResultSet::makeNumericString(const sal_Int32 nColumnIndex)
{
// minus because firebird stores scale as a negative number
@@ -382,40 +377,14 @@ OUString OResultSet::makeNumericString(const sal_Int32 nColumnIndex)
OUStringBuffer sRetBuffer;
T nAllDigits = *reinterpret_cast<T*>(m_pSqlda->sqlvar[nColumnIndex-1].sqldata);
- sal_Int64 nDecimalCountExp = pow10Integer(nDecimalCount);
-
- if(nAllDigits < 0)
- {
- sRetBuffer.append('-');
- nAllDigits = -nAllDigits; // abs
- }
-
- sRetBuffer.append(static_cast<sal_Int64>(nAllDigits / nDecimalCountExp) );
- if( nDecimalCount > 0)
- {
- sRetBuffer.append('.');
+ sRetBuffer.append(static_cast<sal_Int64>(nAllDigits));
+ sal_Int32 insertionPos = nAllDigits < 0 ? 1 : 0; // consider leading minus
+ int nMissingNulls = nDecimalCount - (sRetBuffer.getLength() - insertionPos) + 1;
+ for (int i = 0; i < nMissingNulls; ++i)
+ sRetBuffer.insert(insertionPos, '0');
- sal_Int64 nFractionalPart = nAllDigits % nDecimalCountExp;
-
- int iCount = 0; // digit count
- sal_Int64 nFracTemp = nFractionalPart;
- while(nFracTemp>0)
- {
- nFracTemp /= 10;
- iCount++;
- }
-
- int nMissingNulls = nDecimalCount - iCount;
-
- // append nulls after dot and before nFractionalPart
- for(int i=0; i<nMissingNulls; i++)
- {
- sRetBuffer.append('0');
- }
-
- // the rest
- sRetBuffer.append(nFractionalPart);
- }
+ if (nDecimalCount)
+ sRetBuffer.insert(sRetBuffer.getLength() - nDecimalCount, '.');
return sRetBuffer.makeStringAndClear();
}
@@ -452,7 +421,7 @@ T OResultSet::retrieveValue(const sal_Int32 nColumnIndex, const ISC_SHORT nType)
template <>
ORowSetValue OResultSet::retrieveValue(const sal_Int32 nColumnIndex, const ISC_SHORT /*nType*/)
{
- // See http://wiki.openoffice.org/wiki/Documentation/DevGuide/Database/Using_the_getXXX_Methods
+ // See https://wiki.documentfoundation.org/Documentation/DevGuide/Database_Access#Using_the_getXXX_Methods
// (bottom of page) for a chart of possible conversions, we should allow all
// of these -- Blob/Clob will probably need some specialist handling especially
// w.r.t. to generating Strings for them.
@@ -847,31 +816,28 @@ uno::Reference< XInterface > SAL_CALL OResultSet::getStatement()
//----- XResultSet: unsupported change detection methods ---------------------
sal_Bool SAL_CALL OResultSet::rowDeleted()
{
- ::dbtools::throwFunctionNotSupportedSQLException("rowDeleted not supported in firebird",
+ ::dbtools::throwFunctionNotSupportedSQLException(u"rowDeleted not supported in firebird"_ustr,
*this);
- return false;
}
+
sal_Bool SAL_CALL OResultSet::rowInserted()
{
- ::dbtools::throwFunctionNotSupportedSQLException("rowInserted not supported in firebird",
+ ::dbtools::throwFunctionNotSupportedSQLException(u"rowInserted not supported in firebird"_ustr,
*this);
- return false;
}
sal_Bool SAL_CALL OResultSet::rowUpdated()
{
- ::dbtools::throwFunctionNotSupportedSQLException("rowUpdated not supported in firebird",
+ ::dbtools::throwFunctionNotSupportedSQLException(u"rowUpdated not supported in firebird"_ustr,
*this);
- return false;
}
void SAL_CALL OResultSet::refreshRow()
{
- ::dbtools::throwFunctionNotSupportedSQLException("refreshRow not supported in firebird",
+ ::dbtools::throwFunctionNotSupportedSQLException(u"refreshRow not supported in firebird"_ustr,
*this);
}
-
void SAL_CALL OResultSet::cancel( )
{
MutexGuard aGuard(m_rMutex);
@@ -910,12 +876,12 @@ uno::Reference< css::beans::XPropertySetInfo > SAL_CALL OResultSet::getPropertyS
// ---- XServiceInfo -----------------------------------------------------------
OUString SAL_CALL OResultSet::getImplementationName()
{
- return "com.sun.star.sdbcx.firebird.ResultSet";
+ return u"com.sun.star.sdbcx.firebird.ResultSet"_ustr;
}
Sequence< OUString > SAL_CALL OResultSet::getSupportedServiceNames()
{
- return {"com.sun.star.sdbc.ResultSet","com.sun.star.sdbcx.ResultSet"};
+ return {u"com.sun.star.sdbc.ResultSet"_ustr,u"com.sun.star.sdbcx.ResultSet"_ustr};
}
sal_Bool SAL_CALL OResultSet::supportsService(const OUString& _rServiceName)
diff --git a/connectivity/source/drivers/firebird/ResultSet.hxx b/connectivity/source/drivers/firebird/ResultSet.hxx
index fdae21dfbaaf..66814748bd6b 100644
--- a/connectivity/source/drivers/firebird/ResultSet.hxx
+++ b/connectivity/source/drivers/firebird/ResultSet.hxx
@@ -35,181 +35,184 @@
#include <com/sun/star/sdbc/XRow.hpp>
#include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp>
+#include <type_traits>
+
namespace connectivity::firebird
+{
+ class OResultSetMetaData;
+ /*
+ ** OResultSet
+ */
+ typedef ::cppu::WeakComponentImplHelper< css::sdbc::XResultSet,
+ css::sdbc::XRow,
+ css::sdbc::XResultSetMetaDataSupplier,
+ css::util::XCancellable,
+ css::sdbc::XCloseable,
+ css::sdbc::XColumnLocate,
+ css::lang::XServiceInfo> OResultSet_BASE;
+
+ /**
+ * This ResultSet does not deal with the management of the SQLDA
+ * it is supplied with. The owner must manage its SQLDA appropriately
+ * and ensure that the ResultSet is destroyed before disposing of the
+ * SQLDA.
+ */
+ class OResultSet: public OResultSet_BASE,
+ public ::comphelper::OPropertyContainer,
+ public ::comphelper::OPropertyArrayUsageHelper<OResultSet>
{
- /*
- ** OResultSet
- */
- typedef ::cppu::WeakComponentImplHelper< css::sdbc::XResultSet,
- css::sdbc::XRow,
- css::sdbc::XResultSetMetaDataSupplier,
- css::util::XCancellable,
- css::sdbc::XCloseable,
- css::sdbc::XColumnLocate,
- css::lang::XServiceInfo> OResultSet_BASE;
-
- /**
- * This ResultSet does not deal with the management of the SQLDA
- * it is supplied with. The owner must mange its SQLDA appropriately
- * and ensure that the ResultSet is destroyed before disposing of the
- * SQLDA.
- */
- class OResultSet: public OResultSet_BASE,
- public ::comphelper::OPropertyContainer,
- public ::comphelper::OPropertyArrayUsageHelper<OResultSet>
- {
- private:
- bool m_bIsBookmarkable;
- sal_Int32 m_nFetchSize;
- sal_Int32 m_nResultSetType;
- sal_Int32 m_nFetchDirection;
- sal_Int32 m_nResultSetConcurrency;
-
- protected:
- // Connection kept alive by m_xStatement
- Connection* m_pConnection;
- ::osl::Mutex& m_rMutex;
- const css::uno::Reference< css::uno::XInterface >& m_xStatement;
-
- css::uno::Reference< css::sdbc::XResultSetMetaData> m_xMetaData;
-
- XSQLDA* m_pSqlda;
- isc_stmt_handle m_statementHandle;
-
- bool m_bWasNull;
- // Row numbering starts with 0 for "in front of first row"
- sal_Int32 m_currentRow;
- bool m_bIsAfterLastRow;
-
- const sal_Int32 m_fieldCount;
- ISC_STATUS_ARRAY m_statusVector;
-
- bool isNull(const sal_Int32 nColumnIndex);
-
- template <typename T> OUString makeNumericString(
- const sal_Int32 nColumnIndex);
-
- template <typename T> T retrieveValue(const sal_Int32 nColumnIndex,
- const ISC_SHORT nType);
-
- template <typename T> T safelyRetrieveValue(
- const sal_Int32 nColumnIndex,
- const ISC_SHORT nType = 0);
-
- // OIdPropertyArrayUsageHelper
- virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const override;
- virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() override;
-
- /// @throws css::sdbc::SQLException
- /// @throws css::uno::RuntimeException
- void checkColumnIndex( sal_Int32 index );
- /// @throws css::sdbc::SQLException
- /// @throws css::uno::RuntimeException
- void checkRowIndex();
-
- // you can't delete objects of this type
- virtual ~OResultSet() override;
- public:
- DECLARE_SERVICE_INFO();
-
- OResultSet(Connection* pConnection,
- ::osl::Mutex& rMutex,
- const css::uno::Reference< css::uno::XInterface >& xStatement,
- isc_stmt_handle aStatementHandle,
- XSQLDA* aSqlda
- );
-
- // XInterface
- virtual css::uno::Any SAL_CALL queryInterface(
- const css::uno::Type& rType) override;
- virtual void SAL_CALL acquire() noexcept override;
- virtual void SAL_CALL release() noexcept override;
- //XTypeProvider
- virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
- // XPropertySet
- virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) override;
- // XResultSet
- virtual sal_Bool SAL_CALL next( ) override;
- virtual sal_Bool SAL_CALL isBeforeFirst( ) override;
- virtual sal_Bool SAL_CALL isAfterLast( ) override;
- virtual sal_Bool SAL_CALL isFirst( ) override;
- virtual sal_Bool SAL_CALL isLast( ) override;
- virtual void SAL_CALL beforeFirst( ) override;
- virtual void SAL_CALL afterLast( ) override;
- virtual sal_Bool SAL_CALL first( ) override;
- virtual sal_Bool SAL_CALL last( ) override;
- virtual sal_Int32 SAL_CALL getRow( ) override;
- virtual sal_Bool SAL_CALL absolute( sal_Int32 row ) override;
- virtual sal_Bool SAL_CALL relative( sal_Int32 rows ) override;
- virtual sal_Bool SAL_CALL previous( ) override;
- virtual void SAL_CALL refreshRow( ) override;
- virtual sal_Bool SAL_CALL rowUpdated( ) override;
- virtual sal_Bool SAL_CALL rowInserted( ) override;
- virtual sal_Bool SAL_CALL rowDeleted( ) override;
- virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getStatement( ) override;
- // XRow
- virtual sal_Bool SAL_CALL wasNull( ) override;
- virtual OUString SAL_CALL getString( sal_Int32 columnIndex ) override;
- virtual sal_Bool SAL_CALL getBoolean( sal_Int32 columnIndex ) override;
- virtual sal_Int8 SAL_CALL getByte( sal_Int32 columnIndex ) override;
- virtual sal_Int16 SAL_CALL getShort( sal_Int32 columnIndex ) override;
- virtual sal_Int32 SAL_CALL getInt( sal_Int32 columnIndex ) override;
- virtual sal_Int64 SAL_CALL getLong( sal_Int32 columnIndex ) override;
- virtual float SAL_CALL getFloat( sal_Int32 columnIndex ) override;
- virtual double SAL_CALL getDouble( sal_Int32 columnIndex ) override;
- virtual css::uno::Sequence< sal_Int8 > SAL_CALL getBytes( sal_Int32 columnIndex ) override;
- virtual css::util::Date SAL_CALL getDate( sal_Int32 columnIndex ) override;
- virtual css::util::Time SAL_CALL getTime( sal_Int32 columnIndex ) override;
- virtual css::util::DateTime SAL_CALL getTimestamp( sal_Int32 columnIndex ) override;
- virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getBinaryStream( sal_Int32 columnIndex ) override;
- virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getCharacterStream( sal_Int32 columnIndex ) override;
- virtual css::uno::Any SAL_CALL getObject( sal_Int32 columnIndex, const css::uno::Reference< css::container::XNameAccess >& typeMap ) override;
- virtual css::uno::Reference< css::sdbc::XRef > SAL_CALL getRef( sal_Int32 columnIndex ) override;
- virtual css::uno::Reference< css::sdbc::XBlob > SAL_CALL getBlob( sal_Int32 columnIndex ) override;
- virtual css::uno::Reference< css::sdbc::XClob > SAL_CALL getClob( sal_Int32 columnIndex ) override;
- virtual css::uno::Reference< css::sdbc::XArray > SAL_CALL getArray( sal_Int32 columnIndex ) override;
- // XResultSetMetaDataSupplier
- virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) override;
- // XCancellable
- virtual void SAL_CALL cancel( ) override;
- // XCloseable
- virtual void SAL_CALL close( ) override;
- // XWarningsSupplier
-
- // XColumnLocate
- virtual sal_Int32 SAL_CALL findColumn(const OUString& columnName) override;
-
- };
-
- // Specialisations have to be in the namespace and can't be within the class.
- template <> css::util::Date
- OResultSet::retrieveValue(
- const sal_Int32 nColumnIndex,
- const ISC_SHORT nType);
- template <> ::connectivity::ORowSetValue
- OResultSet::retrieveValue(
- const sal_Int32 nColumnIndex,
- const ISC_SHORT nType);
- template <> css::util::Time
- OResultSet::retrieveValue(
- const sal_Int32 nColumnIndex,
- const ISC_SHORT nType);
- template <> css::util::DateTime
- OResultSet::retrieveValue(
- const sal_Int32 nColumnIndex,
- const ISC_SHORT nType);
- template <> ISC_QUAD*
- OResultSet::retrieveValue(
- const sal_Int32 nColumnIndex,
- const ISC_SHORT nType);
- template <> OUString
- OResultSet::retrieveValue(
+ private:
+ bool m_bIsBookmarkable;
+ sal_Int32 m_nFetchSize;
+ sal_Int32 m_nResultSetType;
+ sal_Int32 m_nFetchDirection;
+ sal_Int32 m_nResultSetConcurrency;
+
+ protected:
+ // Connection kept alive by m_xStatement
+ Connection* m_pConnection;
+ ::osl::Mutex& m_rMutex;
+ const css::uno::Reference< css::uno::XInterface >& m_xStatement;
+
+ rtl::Reference<OResultSetMetaData> m_xMetaData;
+
+ XSQLDA* m_pSqlda;
+ isc_stmt_handle m_statementHandle;
+
+ bool m_bWasNull;
+ // Row numbering starts with 0 for "in front of first row"
+ sal_Int32 m_currentRow;
+ bool m_bIsAfterLastRow;
+
+ const sal_Int32 m_fieldCount;
+ ISC_STATUS_ARRAY m_statusVector;
+
+ bool isNull(const sal_Int32 nColumnIndex);
+
+ template <typename T> requires std::is_integral_v<T>
+ OUString makeNumericString(const sal_Int32 nColumnIndex);
+
+ template <typename T> T retrieveValue(const sal_Int32 nColumnIndex,
+ const ISC_SHORT nType);
+
+ template <typename T> T safelyRetrieveValue(
const sal_Int32 nColumnIndex,
- const ISC_SHORT nType);
- template <> ISC_QUAD*
- OResultSet::retrieveValue(
- const sal_Int32 nColumnIndex,
- const ISC_SHORT nType);
+ const ISC_SHORT nType = 0);
+
+ // OIdPropertyArrayUsageHelper
+ virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const override;
+ virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() override;
+
+ /// @throws css::sdbc::SQLException
+ /// @throws css::uno::RuntimeException
+ void checkColumnIndex( sal_Int32 index );
+ /// @throws css::sdbc::SQLException
+ /// @throws css::uno::RuntimeException
+ void checkRowIndex();
+
+ // you can't delete objects of this type
+ virtual ~OResultSet() override;
+ public:
+ DECLARE_SERVICE_INFO();
+
+ OResultSet(Connection* pConnection,
+ ::osl::Mutex& rMutex,
+ const css::uno::Reference< css::uno::XInterface >& xStatement,
+ isc_stmt_handle aStatementHandle,
+ XSQLDA* aSqlda
+ );
+
+ // XInterface
+ virtual css::uno::Any SAL_CALL queryInterface(
+ const css::uno::Type& rType) override;
+ virtual void SAL_CALL acquire() noexcept override;
+ virtual void SAL_CALL release() noexcept override;
+ //XTypeProvider
+ virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
+ // XPropertySet
+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) override;
+ // XResultSet
+ virtual sal_Bool SAL_CALL next( ) override;
+ virtual sal_Bool SAL_CALL isBeforeFirst( ) override;
+ virtual sal_Bool SAL_CALL isAfterLast( ) override;
+ virtual sal_Bool SAL_CALL isFirst( ) override;
+ virtual sal_Bool SAL_CALL isLast( ) override;
+ virtual void SAL_CALL beforeFirst( ) override;
+ virtual void SAL_CALL afterLast( ) override;
+ virtual sal_Bool SAL_CALL first( ) override;
+ virtual sal_Bool SAL_CALL last( ) override;
+ virtual sal_Int32 SAL_CALL getRow( ) override;
+ virtual sal_Bool SAL_CALL absolute( sal_Int32 row ) override;
+ virtual sal_Bool SAL_CALL relative( sal_Int32 rows ) override;
+ virtual sal_Bool SAL_CALL previous( ) override;
+ virtual void SAL_CALL refreshRow( ) override;
+ virtual sal_Bool SAL_CALL rowUpdated( ) override;
+ virtual sal_Bool SAL_CALL rowInserted( ) override;
+ virtual sal_Bool SAL_CALL rowDeleted( ) override;
+ virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getStatement( ) override;
+ // XRow
+ virtual sal_Bool SAL_CALL wasNull( ) override;
+ virtual OUString SAL_CALL getString( sal_Int32 columnIndex ) override;
+ virtual sal_Bool SAL_CALL getBoolean( sal_Int32 columnIndex ) override;
+ virtual sal_Int8 SAL_CALL getByte( sal_Int32 columnIndex ) override;
+ virtual sal_Int16 SAL_CALL getShort( sal_Int32 columnIndex ) override;
+ virtual sal_Int32 SAL_CALL getInt( sal_Int32 columnIndex ) override;
+ virtual sal_Int64 SAL_CALL getLong( sal_Int32 columnIndex ) override;
+ virtual float SAL_CALL getFloat( sal_Int32 columnIndex ) override;
+ virtual double SAL_CALL getDouble( sal_Int32 columnIndex ) override;
+ virtual css::uno::Sequence< sal_Int8 > SAL_CALL getBytes( sal_Int32 columnIndex ) override;
+ virtual css::util::Date SAL_CALL getDate( sal_Int32 columnIndex ) override;
+ virtual css::util::Time SAL_CALL getTime( sal_Int32 columnIndex ) override;
+ virtual css::util::DateTime SAL_CALL getTimestamp( sal_Int32 columnIndex ) override;
+ virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getBinaryStream( sal_Int32 columnIndex ) override;
+ virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getCharacterStream( sal_Int32 columnIndex ) override;
+ virtual css::uno::Any SAL_CALL getObject( sal_Int32 columnIndex, const css::uno::Reference< css::container::XNameAccess >& typeMap ) override;
+ virtual css::uno::Reference< css::sdbc::XRef > SAL_CALL getRef( sal_Int32 columnIndex ) override;
+ virtual css::uno::Reference< css::sdbc::XBlob > SAL_CALL getBlob( sal_Int32 columnIndex ) override;
+ virtual css::uno::Reference< css::sdbc::XClob > SAL_CALL getClob( sal_Int32 columnIndex ) override;
+ virtual css::uno::Reference< css::sdbc::XArray > SAL_CALL getArray( sal_Int32 columnIndex ) override;
+ // XResultSetMetaDataSupplier
+ virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) override;
+ // XCancellable
+ virtual void SAL_CALL cancel( ) override;
+ // XCloseable
+ virtual void SAL_CALL close( ) override;
+ // XWarningsSupplier
+
+ // XColumnLocate
+ virtual sal_Int32 SAL_CALL findColumn(const OUString& columnName) override;
+
+ };
+
+ // Specialisations have to be in the namespace and can't be within the class.
+ template <> css::util::Date
+ OResultSet::retrieveValue(
+ const sal_Int32 nColumnIndex,
+ const ISC_SHORT nType);
+ template <> ::connectivity::ORowSetValue
+ OResultSet::retrieveValue(
+ const sal_Int32 nColumnIndex,
+ const ISC_SHORT nType);
+ template <> css::util::Time
+ OResultSet::retrieveValue(
+ const sal_Int32 nColumnIndex,
+ const ISC_SHORT nType);
+ template <> css::util::DateTime
+ OResultSet::retrieveValue(
+ const sal_Int32 nColumnIndex,
+ const ISC_SHORT nType);
+ template <> ISC_QUAD*
+ OResultSet::retrieveValue(
+ const sal_Int32 nColumnIndex,
+ const ISC_SHORT nType);
+ template <> OUString
+ OResultSet::retrieveValue(
+ const sal_Int32 nColumnIndex,
+ const ISC_SHORT nType);
+ template <> ISC_QUAD*
+ OResultSet::retrieveValue(
+ const sal_Int32 nColumnIndex,
+ const ISC_SHORT nType);
}
diff --git a/connectivity/source/drivers/firebird/ResultSetMetaData.cxx b/connectivity/source/drivers/firebird/ResultSetMetaData.cxx
index 2ed46bae9b34..1e2db23e0256 100644
--- a/connectivity/source/drivers/firebird/ResultSetMetaData.cxx
+++ b/connectivity/source/drivers/firebird/ResultSetMetaData.cxx
@@ -53,8 +53,8 @@ OUString OResultSetMetaData::getCharacterSet( sal_Int32 nIndex )
"JOIN RDB$RELATION_FIELDS relfields "
"ON (fields.RDB$FIELD_NAME = relfields.RDB$FIELD_SOURCE) "
"WHERE relfields.RDB$RELATION_NAME = '"
- + escapeWith(sTable, '\'', '\'') + "' AND "
- "relfields.RDB$FIELD_NAME = '"+ escapeWith(sColumnName, '\'', '\'') +"'";
+ + sTable.replaceAll("'", "''") + "' AND "
+ "relfields.RDB$FIELD_NAME = '"+ sColumnName.replaceAll("'", "''") +"'";
Reference<XStatement> xStmt= m_pConnection->createStatement();
@@ -75,7 +75,7 @@ OUString OResultSetMetaData::getCharacterSet( sal_Int32 nIndex )
void OResultSetMetaData::verifyValidColumn(sal_Int32 column)
{
if (column>getColumnCount() || column < 1)
- throw SQLException("Invalid column specified", *this, OUString(), 0, Any());
+ throw SQLException(u"Invalid column specified"_ustr, *this, OUString(), 0, Any());
}
sal_Int32 SAL_CALL OResultSetMetaData::getColumnCount()
@@ -102,10 +102,7 @@ sal_Int32 SAL_CALL OResultSetMetaData::getColumnType(sal_Int32 column)
sCharset = getCharacterSet(column);
}
- ColumnTypeInfo aInfo( m_pSqlda->sqlvar[column-1].sqltype,
- m_pSqlda->sqlvar[column-1].sqlsubtype,
- -(m_pSqlda->sqlvar[column-1].sqlscale),
- sCharset );
+ ColumnTypeInfo aInfo(m_pSqlda, column, sCharset);
return aInfo.getSdbcType();
}
@@ -128,9 +125,25 @@ OUString SAL_CALL OResultSetMetaData::getSchemaName(sal_Int32)
OUString SAL_CALL OResultSetMetaData::getColumnName(sal_Int32 column)
{
verifyValidColumn(column);
- OUString sRet(m_pSqlda->sqlvar[column-1].sqlname,
- m_pSqlda->sqlvar[column-1].sqlname_length,
- RTL_TEXTENCODING_UTF8);
+ char* pColumnName = m_pSqlda->sqlvar[column - 1].sqlname;
+ sal_Int32 nColumnNameLength = m_pSqlda->sqlvar[column - 1].sqlname_length;
+ // tdf#132924 - return column alias if specified
+ if (m_pSqlda->sqlvar[column - 1].aliasname_length > 0)
+ {
+ pColumnName = m_pSqlda->sqlvar[column - 1].aliasname;
+ nColumnNameLength = m_pSqlda->sqlvar[column - 1].aliasname_length;
+ }
+ OUString sRet(pColumnName, nColumnNameLength, RTL_TEXTENCODING_UTF8);
+ sanitizeIdentifier(sRet);
+ return sRet;
+}
+
+OUString OResultSetMetaData::getColumnNameWithoutAlias(sal_Int32 column)
+{
+ verifyValidColumn(column);
+ char* pColumnName = m_pSqlda->sqlvar[column - 1].sqlname;
+ sal_Int32 nColumnNameLength = m_pSqlda->sqlvar[column - 1].sqlname_length;
+ OUString sRet(pColumnName, nColumnNameLength, RTL_TEXTENCODING_UTF8);
sanitizeIdentifier(sRet);
return sRet;
}
@@ -152,9 +165,7 @@ OUString SAL_CALL OResultSetMetaData::getColumnTypeName(sal_Int32 column)
{
verifyValidColumn(column);
- ColumnTypeInfo aInfo( m_pSqlda->sqlvar[column-1].sqltype,
- m_pSqlda->sqlvar[column-1].sqlsubtype,
- -(m_pSqlda->sqlvar[column-1].sqlscale) );
+ ColumnTypeInfo aInfo(m_pSqlda, column);
return aInfo.getColumnTypeName();
}
@@ -184,34 +195,34 @@ sal_Bool SAL_CALL OResultSetMetaData::isCurrency(sal_Int32)
sal_Bool SAL_CALL OResultSetMetaData::isAutoIncrement(sal_Int32 column)
{
OUString sTable = getTableName(column);
- if( !sTable.isEmpty() )
- {
- OUString sColumnName = getColumnName( column );
+ if( sTable.isEmpty() )
+ return false;
- OUString sSql = "SELECT RDB$IDENTITY_TYPE FROM RDB$RELATION_FIELDS "
- "WHERE RDB$RELATION_NAME = '"
- + escapeWith(sTable, '\'', '\'') + "' AND "
- "RDB$FIELD_NAME = '"+ escapeWith(sColumnName, '\'', '\'') +"'";
+ OUString sColumnName = getColumnNameWithoutAlias( column );
- Reference<XStatement> xStmt =m_pConnection ->createStatement();
+ OUString sSql = "SELECT RDB$IDENTITY_TYPE FROM RDB$RELATION_FIELDS "
+ "WHERE RDB$RELATION_NAME = '"
+ + sTable.replaceAll("'", "''") + "' AND "
+ "RDB$FIELD_NAME = '"+ sColumnName.replaceAll("'", "''") +"'";
- Reference<XResultSet> xRes =
- xStmt->executeQuery(sSql);
- Reference<XRow> xRow ( xRes, UNO_QUERY);
- if(xRes->next())
- {
- int iType = xRow->getShort(1);
- if(iType == 1) // IDENTITY
- return true;
- }
- else
- {
- SAL_WARN("connectivity.firebird","Column '"
- << sColumnName
- << "' not found in database");
+ Reference<XStatement> xStmt =m_pConnection ->createStatement();
- return false;
- }
+ Reference<XResultSet> xRes =
+ xStmt->executeQuery(sSql);
+ Reference<XRow> xRow ( xRes, UNO_QUERY);
+ if(xRes->next())
+ {
+ int iType = xRow->getShort(1);
+ if(iType == 1) // IDENTITY
+ return true;
+ }
+ else
+ {
+ SAL_WARN("connectivity.firebird","Column '"
+ << sColumnName
+ << "' not found in database");
+
+ return false;
}
return false;
}
@@ -226,34 +237,34 @@ sal_Bool SAL_CALL OResultSetMetaData::isSigned(sal_Int32)
sal_Int32 SAL_CALL OResultSetMetaData::getPrecision(sal_Int32 column)
{
sal_Int32 nType = getColumnType(column);
- if( nType == DataType::NUMERIC || nType == DataType::DECIMAL )
+ if( nType != DataType::NUMERIC && nType != DataType::DECIMAL )
+ return 0;
+
+ OUString sColumnName = getColumnName( column );
+
+ // RDB$FIELD_SOURCE is a unique name of column per database
+ OUString sSql = "SELECT RDB$FIELD_PRECISION FROM RDB$FIELDS "
+ " INNER JOIN RDB$RELATION_FIELDS "
+ " ON RDB$RELATION_FIELDS.RDB$FIELD_SOURCE = RDB$FIELDS.RDB$FIELD_NAME "
+ "WHERE RDB$RELATION_FIELDS.RDB$RELATION_NAME = '"
+ + getTableName(column).replaceAll("'", "''") + "' AND "
+ "RDB$RELATION_FIELDS.RDB$FIELD_NAME = '"
+ + sColumnName.replaceAll("'", "''") +"'";
+ Reference<XStatement> xStmt= m_pConnection->createStatement();
+
+ Reference<XResultSet> xRes =
+ xStmt->executeQuery(sSql);
+ Reference<XRow> xRow ( xRes, UNO_QUERY);
+ if(xRes->next())
{
- OUString sColumnName = getColumnName( column );
-
- // RDB$FIELD_SOURCE is a unique name of column per database
- OUString sSql = "SELECT RDB$FIELD_PRECISION FROM RDB$FIELDS "
- " INNER JOIN RDB$RELATION_FIELDS "
- " ON RDB$RELATION_FIELDS.RDB$FIELD_SOURCE = RDB$FIELDS.RDB$FIELD_NAME "
- "WHERE RDB$RELATION_FIELDS.RDB$RELATION_NAME = '"
- + escapeWith(getTableName(column), '\'', '\'') + "' AND "
- "RDB$RELATION_FIELDS.RDB$FIELD_NAME = '"
- + escapeWith(sColumnName, '\'', '\'') +"'";
- Reference<XStatement> xStmt= m_pConnection->createStatement();
-
- Reference<XResultSet> xRes =
- xStmt->executeQuery(sSql);
- Reference<XRow> xRow ( xRes, UNO_QUERY);
- if(xRes->next())
- {
- return static_cast<sal_Int32>(xRow->getShort(1));
- }
- else
- {
- SAL_WARN("connectivity.firebird","Column '"
- << sColumnName
- << "' not found in database");
- return 0;
- }
+ return static_cast<sal_Int32>(xRow->getShort(1));
+ }
+ else
+ {
+ SAL_WARN("connectivity.firebird","Column '"
+ << sColumnName
+ << "' not found in database");
+ return 0;
}
return 0;
}
diff --git a/connectivity/source/drivers/firebird/ResultSetMetaData.hxx b/connectivity/source/drivers/firebird/ResultSetMetaData.hxx
index a32c206213aa..ece967379205 100644
--- a/connectivity/source/drivers/firebird/ResultSetMetaData.hxx
+++ b/connectivity/source/drivers/firebird/ResultSetMetaData.hxx
@@ -29,51 +29,52 @@
#include <com/sun/star/sdbc/XResultSetMetaData.hpp>
namespace connectivity::firebird
- {
- typedef ::cppu::WeakImplHelper< css::sdbc::XResultSetMetaData>
- OResultSetMetaData_BASE;
+{
+ typedef ::cppu::WeakImplHelper< css::sdbc::XResultSetMetaData>
+ OResultSetMetaData_BASE;
- class OResultSetMetaData : public OResultSetMetaData_BASE
- {
- protected:
- ::rtl::Reference<Connection> m_pConnection;
- XSQLDA* m_pSqlda;
+ class OResultSetMetaData : public OResultSetMetaData_BASE
+ {
+ protected:
+ ::rtl::Reference<Connection> m_pConnection;
+ XSQLDA* m_pSqlda;
- virtual ~OResultSetMetaData() override;
+ virtual ~OResultSetMetaData() override;
- /// @throws css::sdbc::SQLException
- void verifyValidColumn(sal_Int32 column);
- OUString getCharacterSet(sal_Int32 nIndex);
- public:
- // a constructor, which is required for returning objects:
- OResultSetMetaData(Connection* pConnection,
- XSQLDA* pSqlda)
- : m_pConnection(pConnection)
- , m_pSqlda(pSqlda)
- {}
+ /// @throws css::sdbc::SQLException
+ void verifyValidColumn(sal_Int32 column);
+ OUString getCharacterSet(sal_Int32 nIndex);
+ public:
+ // a constructor, which is required for returning objects:
+ OResultSetMetaData(Connection* pConnection,
+ XSQLDA* pSqlda)
+ : m_pConnection(pConnection)
+ , m_pSqlda(pSqlda)
+ {}
- virtual sal_Int32 SAL_CALL getColumnCount() override;
- virtual sal_Bool SAL_CALL isAutoIncrement(sal_Int32 column) override;
- virtual sal_Bool SAL_CALL isCaseSensitive(sal_Int32 column) override;
- virtual sal_Bool SAL_CALL isSearchable(sal_Int32 column) override;
- virtual sal_Bool SAL_CALL isCurrency(sal_Int32 column) override;
- virtual sal_Int32 SAL_CALL isNullable(sal_Int32 column) override;
- virtual sal_Bool SAL_CALL isSigned(sal_Int32 column) override;
- virtual sal_Int32 SAL_CALL getColumnDisplaySize(sal_Int32 column) override;
- virtual OUString SAL_CALL getColumnLabel(sal_Int32 column) override;
- virtual OUString SAL_CALL getColumnName(sal_Int32 column) override;
- virtual OUString SAL_CALL getSchemaName(sal_Int32 column) override;
- virtual sal_Int32 SAL_CALL getPrecision(sal_Int32 column) override;
- virtual sal_Int32 SAL_CALL getScale(sal_Int32 column) override;
- virtual OUString SAL_CALL getTableName(sal_Int32 column) override;
- virtual OUString SAL_CALL getCatalogName(sal_Int32 column) override;
- virtual sal_Int32 SAL_CALL getColumnType(sal_Int32 column) override;
- virtual OUString SAL_CALL getColumnTypeName(sal_Int32 column) override;
- virtual sal_Bool SAL_CALL isReadOnly(sal_Int32 column) override;
- virtual sal_Bool SAL_CALL isWritable(sal_Int32 column) override;
- virtual sal_Bool SAL_CALL isDefinitelyWritable(sal_Int32 column) override;
- virtual OUString SAL_CALL getColumnServiceName(sal_Int32 column) override;
- };
+ virtual sal_Int32 SAL_CALL getColumnCount() override;
+ virtual sal_Bool SAL_CALL isAutoIncrement(sal_Int32 column) override;
+ virtual sal_Bool SAL_CALL isCaseSensitive(sal_Int32 column) override;
+ virtual sal_Bool SAL_CALL isSearchable(sal_Int32 column) override;
+ virtual sal_Bool SAL_CALL isCurrency(sal_Int32 column) override;
+ virtual sal_Int32 SAL_CALL isNullable(sal_Int32 column) override;
+ virtual sal_Bool SAL_CALL isSigned(sal_Int32 column) override;
+ virtual sal_Int32 SAL_CALL getColumnDisplaySize(sal_Int32 column) override;
+ virtual OUString SAL_CALL getColumnLabel(sal_Int32 column) override;
+ virtual OUString SAL_CALL getColumnName(sal_Int32 column) override;
+ OUString getColumnNameWithoutAlias(sal_Int32 column);
+ virtual OUString SAL_CALL getSchemaName(sal_Int32 column) override;
+ virtual sal_Int32 SAL_CALL getPrecision(sal_Int32 column) override;
+ virtual sal_Int32 SAL_CALL getScale(sal_Int32 column) override;
+ virtual OUString SAL_CALL getTableName(sal_Int32 column) override;
+ virtual OUString SAL_CALL getCatalogName(sal_Int32 column) override;
+ virtual sal_Int32 SAL_CALL getColumnType(sal_Int32 column) override;
+ virtual OUString SAL_CALL getColumnTypeName(sal_Int32 column) override;
+ virtual sal_Bool SAL_CALL isReadOnly(sal_Int32 column) override;
+ virtual sal_Bool SAL_CALL isWritable(sal_Int32 column) override;
+ virtual sal_Bool SAL_CALL isDefinitelyWritable(sal_Int32 column) override;
+ virtual OUString SAL_CALL getColumnServiceName(sal_Int32 column) override;
+ };
}
diff --git a/connectivity/source/drivers/firebird/Statement.cxx b/connectivity/source/drivers/firebird/Statement.cxx
index f4faebbf1a55..6b24e5c33321 100644
--- a/connectivity/source/drivers/firebird/Statement.cxx
+++ b/connectivity/source/drivers/firebird/Statement.cxx
@@ -40,7 +40,6 @@ using namespace com::sun::star::util;
using namespace ::comphelper;
using namespace ::osl;
-using namespace ::std;
// ---- XBatchExecution - UNSUPPORTED ----------------------------------------
void SAL_CALL OStatement::addBatch(const OUString&)
@@ -56,7 +55,7 @@ Sequence< sal_Int32 > SAL_CALL OStatement::executeBatch()
return Sequence< sal_Int32 >();
}
-IMPLEMENT_SERVICE_INFO(OStatement,"com.sun.star.sdbcx.OStatement","com.sun.star.sdbc.Statement");
+IMPLEMENT_SERVICE_INFO(OStatement,u"com.sun.star.sdbcx.OStatement"_ustr,u"com.sun.star.sdbc.Statement"_ustr);
void SAL_CALL OStatement::acquire() noexcept
{
@@ -71,7 +70,8 @@ void SAL_CALL OStatement::release() noexcept
void OStatement::disposeResultSet()
{
MutexGuard aGuard(m_aMutex);
- checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed);
+ if (OStatementCommonBase_Base::rBHelper.bDisposed)
+ return;
OStatementCommonBase::disposeResultSet();
@@ -126,11 +126,6 @@ uno::Reference< XResultSet > SAL_CALL OStatement::executeQuery(const OUString& s
if (isDDLStatement())
{
m_pConnection->commit();
- m_pConnection->notifyDatabaseModified();
- }
- else if (getStatementChangeCount() > 0)
- {
- m_pConnection->notifyDatabaseModified();
}
return m_xResultSet;
diff --git a/connectivity/source/drivers/firebird/Statement.hxx b/connectivity/source/drivers/firebird/Statement.hxx
index d1b967def1d5..6e501633a88f 100644
--- a/connectivity/source/drivers/firebird/Statement.hxx
+++ b/connectivity/source/drivers/firebird/Statement.hxx
@@ -25,59 +25,59 @@
#include <com/sun/star/sdbc/XBatchExecution.hpp>
namespace connectivity::firebird
- {
+{
+
+ typedef ::cppu::ImplHelper1< css::sdbc::XStatement >
+ OStatement_Base;
- typedef ::cppu::ImplHelper1< css::sdbc::XStatement >
- OStatement_Base;
-
- class OStatement : public OStatementCommonBase,
- public OStatement_Base,
- public css::sdbc::XBatchExecution,
- public css::lang::XServiceInfo
- {
- XSQLDA* m_pSqlda;
- protected:
- virtual ~OStatement() override {}
-
- public:
- // a constructor, which is required for returning objects:
- explicit OStatement( Connection* _pConnection)
- : OStatementCommonBase( _pConnection),
- m_pSqlda(nullptr)
- {}
-
- virtual void disposeResultSet() override;
-
- DECLARE_SERVICE_INFO();
-
- virtual void SAL_CALL acquire() noexcept override;
- virtual void SAL_CALL release() noexcept override;
-
- // XStatement
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL
- executeQuery(const OUString& sql) override;
- virtual sal_Int32 SAL_CALL executeUpdate(const OUString& sqlIn) override;
- virtual sal_Bool SAL_CALL
- execute(const OUString& sql) override;
- virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL
- getConnection() override;
-
- // XBatchExecution - UNSUPPORTED
- virtual void SAL_CALL addBatch( const OUString& sql ) override;
- virtual void SAL_CALL clearBatch( ) override;
- virtual css::uno::Sequence< sal_Int32 > SAL_CALL executeBatch( ) override;
-
- // XInterface
- virtual css::uno::Any SAL_CALL
- queryInterface(const css::uno::Type & rType) override;
-
- //XTypeProvider
- virtual css::uno::Sequence< css::uno::Type > SAL_CALL
- getTypes() override;
- // OComponentHelper
- virtual void SAL_CALL disposing() override;
-
- };
+ class OStatement : public OStatementCommonBase,
+ public OStatement_Base,
+ public css::sdbc::XBatchExecution,
+ public css::lang::XServiceInfo
+ {
+ XSQLDA* m_pSqlda;
+ protected:
+ virtual ~OStatement() override {}
+
+ public:
+ // a constructor, which is required for returning objects:
+ explicit OStatement( Connection* _pConnection)
+ : OStatementCommonBase( _pConnection),
+ m_pSqlda(nullptr)
+ {}
+
+ virtual void disposeResultSet() override;
+
+ DECLARE_SERVICE_INFO();
+
+ virtual void SAL_CALL acquire() noexcept override;
+ virtual void SAL_CALL release() noexcept override;
+
+ // XStatement
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL
+ executeQuery(const OUString& sql) override;
+ virtual sal_Int32 SAL_CALL executeUpdate(const OUString& sqlIn) override;
+ virtual sal_Bool SAL_CALL
+ execute(const OUString& sql) override;
+ virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL
+ getConnection() override;
+
+ // XBatchExecution - UNSUPPORTED
+ virtual void SAL_CALL addBatch( const OUString& sql ) override;
+ virtual void SAL_CALL clearBatch( ) override;
+ virtual css::uno::Sequence< sal_Int32 > SAL_CALL executeBatch( ) override;
+
+ // XInterface
+ virtual css::uno::Any SAL_CALL
+ queryInterface(const css::uno::Type & rType) override;
+
+ //XTypeProvider
+ virtual css::uno::Sequence< css::uno::Type > SAL_CALL
+ getTypes() override;
+ // OComponentHelper
+ virtual void SAL_CALL disposing() override;
+
+ };
}
diff --git a/connectivity/source/drivers/firebird/StatementCommonBase.cxx b/connectivity/source/drivers/firebird/StatementCommonBase.cxx
index 61f57f330516..12ce9a8fd7ba 100644
--- a/connectivity/source/drivers/firebird/StatementCommonBase.cxx
+++ b/connectivity/source/drivers/firebird/StatementCommonBase.cxx
@@ -17,9 +17,9 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include "Driver.hxx"
#include "StatementCommonBase.hxx"
#include "Util.hxx"
+#include "ResultSet.hxx"
#include <sal/log.hxx>
#include <comphelper/sequence.hxx>
@@ -44,7 +44,6 @@ using namespace ::com::sun::star::util;
using namespace ::comphelper;
using namespace ::osl;
-using namespace ::std;
OStatementCommonBase::OStatementCommonBase(Connection* _pConnection)
: OStatementCommonBase_Base(m_aMutex),
@@ -64,9 +63,8 @@ OStatementCommonBase::~OStatementCommonBase()
void OStatementCommonBase::disposeResultSet()
{
- uno::Reference< XComponent > xComp(m_xResultSet, UNO_QUERY);
- if (xComp.is())
- xComp->dispose();
+ if (m_xResultSet.is())
+ m_xResultSet->dispose();
m_xResultSet.clear();
}
@@ -133,6 +131,7 @@ void OStatementCommonBase::prepareAndDescribeStatement(std::u16string_view sql,
if (!pOutSqlda)
{
pOutSqlda = static_cast<XSQLDA*>(calloc(1, XSQLDA_LENGTH(10)));
+ assert(pOutSqlda && "Don't handle OOM conditions");
pOutSqlda->version = SQLDA_VERSION1;
pOutSqlda->sqln = 10;
}
@@ -154,7 +153,7 @@ void OStatementCommonBase::prepareAndDescribeStatement(std::u16string_view sql,
&m_aStatementHandle,
0,
OUStringToOString(sql, RTL_TEXTENCODING_UTF8).getStr(),
- FIREBIRD_SQL_DIALECT,
+ SQL_DIALECT_CURRENT,
pOutSqlda);
if (aErr)
@@ -171,6 +170,7 @@ void OStatementCommonBase::prepareAndDescribeStatement(std::u16string_view sql,
int n = pOutSqlda->sqld;
free(pOutSqlda);
pOutSqlda = static_cast<XSQLDA*>(calloc(1, XSQLDA_LENGTH(n)));
+ assert(pOutSqlda && "Don't handle OOM conditions");
pOutSqlda->version = SQLDA_VERSION1;
pOutSqlda->sqln = n;
aErr = isc_dsql_describe(m_statusVector,
@@ -243,31 +243,71 @@ void SAL_CALL OStatementCommonBase::clearWarnings()
{
// this properties are define by the service statement
// they must in alphabetic order
- Sequence< Property > aProps(10);
- Property* pProperties = aProps.getArray();
- sal_Int32 nPos = 0;
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
- PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING),
- PROPERTY_ID_ESCAPEPROCESSING, cppu::UnoType<bool>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
- PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
- PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE),
- PROPERTY_ID_MAXFIELDSIZE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS),
- PROPERTY_ID_MAXROWS, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT),
- PROPERTY_ID_QUERYTIMEOUT, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
- PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
- PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS),
- PROPERTY_ID_USEBOOKMARKS, cppu::UnoType<bool>::get(), 0);
-
- return new ::cppu::OPropertyArrayHelper(aProps);
+ return new ::cppu::OPropertyArrayHelper
+ {
+ {
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
+ PROPERTY_ID_CURSORNAME,
+ cppu::UnoType<OUString>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING),
+ PROPERTY_ID_ESCAPEPROCESSING,
+ cppu::UnoType<bool>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
+ PROPERTY_ID_FETCHDIRECTION,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
+ PROPERTY_ID_FETCHSIZE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE),
+ PROPERTY_ID_MAXFIELDSIZE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS),
+ PROPERTY_ID_MAXROWS,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT),
+ PROPERTY_ID_QUERYTIMEOUT,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
+ PROPERTY_ID_RESULTSETCONCURRENCY,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
+ PROPERTY_ID_RESULTSETTYPE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS),
+ PROPERTY_ID_USEBOOKMARKS,
+ cppu::UnoType<bool>::get(),
+ 0
+ }
+ }
+ };
}
@@ -415,30 +455,31 @@ sal_Int32 OStatementCommonBase::getStatementChangeCount()
aDesiredInfoType = isc_info_req_delete_count;
break;
case isc_info_sql_stmt_exec_procedure:
+ case isc_info_sql_stmt_ddl:
return 0; // cannot determine
default:
throw SQLException(); // TODO: better error message?
}
char* pResults = aResultsBuffer;
- if (static_cast<short>(*pResults++) == isc_info_sql_records)
- {
-// const short aTotalLength = (short) isc_vax_integer(pResults, 2);
- pResults += 2;
+ if (static_cast<short>(*pResults++) != isc_info_sql_records)
+ return 0;
- // Seems to be of form TOKEN (1 byte), LENGTH (2 bytes), DATA (LENGTH bytes)
- while (*pResults != isc_info_rsb_end)
- {
- const char aToken = *pResults;
- const short aLength = static_cast<short>(isc_vax_integer(pResults+1, 2));
+// const short aTotalLength = (short) isc_vax_integer(pResults, 2);
+ pResults += 2;
- if (aToken == aDesiredInfoType)
- {
- return isc_vax_integer(pResults + 3, aLength);
- }
+ // Seems to be of form TOKEN (1 byte), LENGTH (2 bytes), DATA (LENGTH bytes)
+ while (*pResults != isc_info_rsb_end)
+ {
+ const char aToken = *pResults;
+ const short aLength = static_cast<short>(isc_vax_integer(pResults+1, 2));
- pResults += (3 + aLength);
+ if (aToken == aDesiredInfoType)
+ {
+ return isc_vax_integer(pResults + 3, aLength);
}
+
+ pResults += (3 + aLength);
}
return 0;
diff --git a/connectivity/source/drivers/firebird/StatementCommonBase.hxx b/connectivity/source/drivers/firebird/StatementCommonBase.hxx
index fa9cd790272e..17c130f7a374 100644
--- a/connectivity/source/drivers/firebird/StatementCommonBase.hxx
+++ b/connectivity/source/drivers/firebird/StatementCommonBase.hxx
@@ -37,97 +37,98 @@
#include <com/sun/star/util/XCancellable.hpp>
namespace connectivity::firebird
- {
+{
+ class OResultSet;
+
+ typedef ::cppu::WeakComponentImplHelper< css::sdbc::XWarningsSupplier,
+ css::util::XCancellable,
+ css::sdbc::XCloseable,
+ css::sdbc::XMultipleResults> OStatementCommonBase_Base;
- typedef ::cppu::WeakComponentImplHelper< css::sdbc::XWarningsSupplier,
- css::util::XCancellable,
- css::sdbc::XCloseable,
- css::sdbc::XMultipleResults> OStatementCommonBase_Base;
-
- class OStatementCommonBase : public OStatementCommonBase_Base,
- public ::cppu::OPropertySetHelper,
- public OPropertyArrayUsageHelper<OStatementCommonBase>
-
- {
- protected:
- ::osl::Mutex m_aMutex;
-
- css::uno::Reference< css::sdbc::XResultSet> m_xResultSet; // The last ResultSet created
- // for this Statement
-
- ::rtl::Reference<Connection> m_pConnection;
-
- ISC_STATUS_ARRAY m_statusVector;
- isc_stmt_handle m_aStatementHandle;
-
- protected:
- virtual void disposeResultSet();
- /// @throws css::sdbc::SQLException
- void freeStatementHandle();
-
- // OPropertyArrayUsageHelper
- virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const override;
- // OPropertySetHelper
- using OPropertySetHelper::getFastPropertyValue;
- virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
- virtual sal_Bool SAL_CALL convertFastPropertyValue(
- css::uno::Any & rConvertedValue,
- css::uno::Any & rOldValue,
- sal_Int32 nHandle,
- const css::uno::Any& rValue ) override;
- virtual void SAL_CALL setFastPropertyValue_NoBroadcast(
- sal_Int32 nHandle,
- const css::uno::Any& rValue) override;
- virtual void SAL_CALL getFastPropertyValue(
- css::uno::Any& rValue,
- sal_Int32 nHandle) const override;
- virtual ~OStatementCommonBase() override;
-
- /// @throws css::sdbc::SQLException
- void prepareAndDescribeStatement(std::u16string_view sqlIn, XSQLDA*& pOutSqlda);
-
- /// @throws css::sdbc::SQLException
- short getSqlInfoItem(char aInfoItem);
- /// @throws css::sdbc::SQLException
- bool isDDLStatement();
- /// @throws css::sdbc::SQLException
- sal_Int32 getStatementChangeCount();
-
- public:
-
- explicit OStatementCommonBase(Connection* _pConnection);
- using OStatementCommonBase_Base::operator css::uno::Reference< css::uno::XInterface >;
-
- // OComponentHelper
- virtual void SAL_CALL disposing() override {
- disposeResultSet();
- OStatementCommonBase_Base::disposing();
- }
- // XInterface
- virtual void SAL_CALL release() noexcept override;
- virtual void SAL_CALL acquire() noexcept override;
- // XInterface
- virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
- //XTypeProvider
- virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
-
- // XPropertySet
- virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) override;
-
- // XWarningsSupplier - UNSUPPORTED
- virtual css::uno::Any SAL_CALL getWarnings( ) override;
- virtual void SAL_CALL clearWarnings( ) override;
- // XMultipleResults - UNSUPPORTED
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getResultSet( ) override;
- virtual sal_Int32 SAL_CALL getUpdateCount( ) override;
- virtual sal_Bool SAL_CALL getMoreResults( ) override;
-
- // XCancellable
- virtual void SAL_CALL cancel( ) override;
- // XCloseable
- virtual void SAL_CALL close( ) override;
-
- };
+ class OStatementCommonBase : public OStatementCommonBase_Base,
+ public ::cppu::OPropertySetHelper,
+ public OPropertyArrayUsageHelper<OStatementCommonBase>
+
+ {
+ protected:
+ ::osl::Mutex m_aMutex;
+
+ rtl::Reference<OResultSet> m_xResultSet; // The last ResultSet created
+ // for this Statement
+
+ ::rtl::Reference<Connection> m_pConnection;
+
+ ISC_STATUS_ARRAY m_statusVector;
+ isc_stmt_handle m_aStatementHandle;
+
+ protected:
+ virtual void disposeResultSet();
+ /// @throws css::sdbc::SQLException
+ void freeStatementHandle();
+
+ // OPropertyArrayUsageHelper
+ virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const override;
+ // OPropertySetHelper
+ using OPropertySetHelper::getFastPropertyValue;
+ virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
+ virtual sal_Bool SAL_CALL convertFastPropertyValue(
+ css::uno::Any & rConvertedValue,
+ css::uno::Any & rOldValue,
+ sal_Int32 nHandle,
+ const css::uno::Any& rValue ) override;
+ virtual void SAL_CALL setFastPropertyValue_NoBroadcast(
+ sal_Int32 nHandle,
+ const css::uno::Any& rValue) override;
+ virtual void SAL_CALL getFastPropertyValue(
+ css::uno::Any& rValue,
+ sal_Int32 nHandle) const override;
+ virtual ~OStatementCommonBase() override;
+
+ /// @throws css::sdbc::SQLException
+ void prepareAndDescribeStatement(std::u16string_view sqlIn, XSQLDA*& pOutSqlda);
+
+ /// @throws css::sdbc::SQLException
+ short getSqlInfoItem(char aInfoItem);
+ /// @throws css::sdbc::SQLException
+ bool isDDLStatement();
+ /// @throws css::sdbc::SQLException
+ sal_Int32 getStatementChangeCount();
+
+ public:
+
+ explicit OStatementCommonBase(Connection* _pConnection);
+ using OStatementCommonBase_Base::operator css::uno::Reference< css::uno::XInterface >;
+
+ // OComponentHelper
+ virtual void SAL_CALL disposing() override {
+ disposeResultSet();
+ OStatementCommonBase_Base::disposing();
+ }
+ // XInterface
+ virtual void SAL_CALL release() noexcept override;
+ virtual void SAL_CALL acquire() noexcept override;
+ // XInterface
+ virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
+ //XTypeProvider
+ virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
+
+ // XPropertySet
+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) override;
+
+ // XWarningsSupplier - UNSUPPORTED
+ virtual css::uno::Any SAL_CALL getWarnings( ) override;
+ virtual void SAL_CALL clearWarnings( ) override;
+ // XMultipleResults - UNSUPPORTED
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getResultSet( ) override;
+ virtual sal_Int32 SAL_CALL getUpdateCount( ) override;
+ virtual sal_Bool SAL_CALL getMoreResults( ) override;
+
+ // XCancellable
+ virtual void SAL_CALL cancel( ) override;
+ // XCloseable
+ virtual void SAL_CALL close( ) override;
+
+ };
}
diff --git a/connectivity/source/drivers/firebird/SubComponent.hxx b/connectivity/source/drivers/firebird/SubComponent.hxx
index bea5d76d423d..8eec40e3275d 100644
--- a/connectivity/source/drivers/firebird/SubComponent.hxx
+++ b/connectivity/source/drivers/firebird/SubComponent.hxx
@@ -23,88 +23,85 @@
#include <osl/diagnose.h>
#include <osl/mutex.hxx>
-namespace cppu { class IPropertyArrayHelper; }
-namespace com::sun::star::lang { class XComponent; }
-
namespace connectivity::firebird
- {
- /// @throws css::lang::DisposedException
- void checkDisposed(bool _bThrow);
+{
+ /// @throws css::lang::DisposedException
+ void checkDisposed(bool _bThrow);
- template <class TYPE>
- class OPropertyArrayUsageHelper
- {
- protected:
- static sal_Int32 s_nRefCount;
- static ::cppu::IPropertyArrayHelper* s_pProps;
- static ::osl::Mutex s_aMutex;
-
- public:
- OPropertyArrayUsageHelper();
- virtual ~OPropertyArrayUsageHelper();
-
- /** call this in the getInfoHelper method of your derived class. The method returns the array helper of the
- class, which is created if necessary.
- */
- ::cppu::IPropertyArrayHelper* getArrayHelper();
-
- protected:
- /** used to implement the creation of the array helper which is shared amongst all instances of the class.
- This method needs to be implemented in derived classes.
- <BR>
- The method gets called with s_aMutex acquired.
- @return a pointer to the newly created array helper. Must not be NULL.
- */
- virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const = 0;
- };
-
- template<class TYPE>
- sal_Int32 OPropertyArrayUsageHelper< TYPE >::s_nRefCount = 0;
-
- template<class TYPE>
- ::cppu::IPropertyArrayHelper* OPropertyArrayUsageHelper< TYPE >::s_pProps = nullptr;
-
- template<class TYPE>
- ::osl::Mutex OPropertyArrayUsageHelper< TYPE >::s_aMutex;
-
-
- template <class TYPE>
- OPropertyArrayUsageHelper<TYPE>::OPropertyArrayUsageHelper()
- {
- ::osl::MutexGuard aGuard(s_aMutex);
- ++s_nRefCount;
- }
+ template <class TYPE>
+ class OPropertyArrayUsageHelper
+ {
+ protected:
+ static sal_Int32 s_nRefCount;
+ static ::cppu::IPropertyArrayHelper* s_pProps;
+ static ::osl::Mutex s_aMutex;
+
+ public:
+ OPropertyArrayUsageHelper();
+ virtual ~OPropertyArrayUsageHelper();
+
+ /** call this in the getInfoHelper method of your derived class. The method returns the array helper of the
+ class, which is created if necessary.
+ */
+ ::cppu::IPropertyArrayHelper* getArrayHelper();
+
+ protected:
+ /** used to implement the creation of the array helper which is shared amongst all instances of the class.
+ This method needs to be implemented in derived classes.
+ <BR>
+ The method gets called with s_aMutex acquired.
+ @return a pointer to the newly created array helper. Must not be NULL.
+ */
+ virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const = 0;
+ };
+
+ template<class TYPE>
+ sal_Int32 OPropertyArrayUsageHelper< TYPE >::s_nRefCount = 0;
+
+ template<class TYPE>
+ ::cppu::IPropertyArrayHelper* OPropertyArrayUsageHelper< TYPE >::s_pProps = nullptr;
+
+ template<class TYPE>
+ ::osl::Mutex OPropertyArrayUsageHelper< TYPE >::s_aMutex;
+
+
+ template <class TYPE>
+ OPropertyArrayUsageHelper<TYPE>::OPropertyArrayUsageHelper()
+ {
+ ::osl::MutexGuard aGuard(s_aMutex);
+ ++s_nRefCount;
+ }
- template <class TYPE>
- OPropertyArrayUsageHelper<TYPE>::~OPropertyArrayUsageHelper()
+ template <class TYPE>
+ OPropertyArrayUsageHelper<TYPE>::~OPropertyArrayUsageHelper()
+ {
+ ::osl::MutexGuard aGuard(s_aMutex);
+ OSL_ENSURE(s_nRefCount > 0, "OPropertyArrayUsageHelper::~OPropertyArrayUsageHelper : suspicious call : have a refcount of 0 !");
+ if (!--s_nRefCount)
{
- ::osl::MutexGuard aGuard(s_aMutex);
- OSL_ENSURE(s_nRefCount > 0, "OPropertyArrayUsageHelper::~OPropertyArrayUsageHelper : suspicious call : have a refcount of 0 !");
- if (!--s_nRefCount)
- {
- delete s_pProps;
- s_pProps = nullptr;
- }
+ delete s_pProps;
+ s_pProps = nullptr;
}
+ }
- template <class TYPE>
- ::cppu::IPropertyArrayHelper* OPropertyArrayUsageHelper<TYPE>::getArrayHelper()
+ template <class TYPE>
+ ::cppu::IPropertyArrayHelper* OPropertyArrayUsageHelper<TYPE>::getArrayHelper()
+ {
+ OSL_ENSURE(s_nRefCount, "OPropertyArrayUsageHelper::getArrayHelper : suspicious call : have a refcount of 0 !");
+ if (!s_pProps)
{
- OSL_ENSURE(s_nRefCount, "OPropertyArrayUsageHelper::getArrayHelper : suspicious call : have a refcount of 0 !");
+ ::osl::MutexGuard aGuard(s_aMutex);
if (!s_pProps)
{
- ::osl::MutexGuard aGuard(s_aMutex);
- if (!s_pProps)
- {
- s_pProps = createArrayHelper();
- OSL_ENSURE(s_pProps, "OPropertyArrayUsageHelper::getArrayHelper : createArrayHelper returned nonsense !");
- }
+ s_pProps = createArrayHelper();
+ OSL_ENSURE(s_pProps, "OPropertyArrayUsageHelper::getArrayHelper : createArrayHelper returned nonsense !");
}
- return s_pProps;
}
+ return s_pProps;
+ }
}
diff --git a/connectivity/source/drivers/firebird/Table.cxx b/connectivity/source/drivers/firebird/Table.cxx
index f88b371d5705..c12ea8439333 100644
--- a/connectivity/source/drivers/firebird/Table.cxx
+++ b/connectivity/source/drivers/firebird/Table.cxx
@@ -59,8 +59,8 @@ Table::Table(Tables* pTables,
rName,
rType,
rDescription,
- "",
- ""),
+ u""_ustr,
+ u""_ustr),
m_rMutex(rMutex),
m_nPrivileges(0)
{
@@ -121,19 +121,19 @@ void SAL_CALL Table::alterColumnByName(const OUString& rColName,
uno::Reference< XPropertySet > xColumn(m_xColumns->getByName(rColName), UNO_QUERY);
// sdbcx::Descriptor
- const bool bNameChanged = xColumn->getPropertyValue("Name") != rDescriptor->getPropertyValue("Name");
+ const bool bNameChanged = xColumn->getPropertyValue(u"Name"_ustr) != rDescriptor->getPropertyValue(u"Name"_ustr);
// sdbcx::ColumnDescriptor
- const bool bTypeChanged = xColumn->getPropertyValue("Type") != rDescriptor->getPropertyValue("Type");
- const bool bTypeNameChanged = xColumn->getPropertyValue("TypeName") != rDescriptor->getPropertyValue("TypeName");
- const bool bPrecisionChanged = xColumn->getPropertyValue("Precision") != rDescriptor->getPropertyValue("Precision");
- const bool bScaleChanged = xColumn->getPropertyValue("Scale") != rDescriptor->getPropertyValue("Scale");
- const bool bIsNullableChanged = xColumn->getPropertyValue("IsNullable") != rDescriptor->getPropertyValue("IsNullable");
- const bool bIsAutoIncrementChanged = xColumn->getPropertyValue("IsAutoIncrement") != rDescriptor->getPropertyValue("IsAutoIncrement");
+ const bool bTypeChanged = xColumn->getPropertyValue(u"Type"_ustr) != rDescriptor->getPropertyValue(u"Type"_ustr);
+ const bool bTypeNameChanged = xColumn->getPropertyValue(u"TypeName"_ustr) != rDescriptor->getPropertyValue(u"TypeName"_ustr);
+ const bool bPrecisionChanged = xColumn->getPropertyValue(u"Precision"_ustr) != rDescriptor->getPropertyValue(u"Precision"_ustr);
+ const bool bScaleChanged = xColumn->getPropertyValue(u"Scale"_ustr) != rDescriptor->getPropertyValue(u"Scale"_ustr);
+ const bool bIsNullableChanged = xColumn->getPropertyValue(u"IsNullable"_ustr) != rDescriptor->getPropertyValue(u"IsNullable"_ustr);
+ const bool bIsAutoIncrementChanged = xColumn->getPropertyValue(u"IsAutoIncrement"_ustr) != rDescriptor->getPropertyValue(u"IsAutoIncrement"_ustr);
// TODO: remainder -- these are all "optional" so have to detect presence and change.
- bool bDefaultChanged = xColumn->getPropertyValue("DefaultValue")
- != rDescriptor->getPropertyValue("DefaultValue");
+ bool bDefaultChanged = xColumn->getPropertyValue(u"DefaultValue"_ustr)
+ != rDescriptor->getPropertyValue(u"DefaultValue"_ustr);
if (bTypeChanged || bTypeNameChanged || bPrecisionChanged || bScaleChanged)
{
@@ -150,32 +150,19 @@ void SAL_CALL Table::alterColumnByName(const OUString& rColName,
if (bIsNullableChanged)
{
sal_Int32 nNullable = 0;
- rDescriptor->getPropertyValue("IsNullable") >>= nNullable;
+ rDescriptor->getPropertyValue(u"IsNullable"_ustr) >>= nNullable;
if (nNullable != ColumnValue::NULLABLE_UNKNOWN)
{
- OUString sSql;
- // Dirty hack: can't change null directly in sql, we have to fiddle
- // the system tables manually.
+ OUString sSql(getAlterTableColumn(rColName));
if (nNullable == ColumnValue::NULLABLE)
{
- sSql = "UPDATE RDB$RELATION_FIELDS SET RDB$NULL_FLAG = NULL "
- "WHERE RDB$FIELD_NAME = '" + rColName + "' "
- "AND RDB$RELATION_NAME = '" + getName() + "'";
+ sSql += "DROP NOT NULL";
}
else if (nNullable == ColumnValue::NO_NULLS)
{
- // And if we are making NOT NULL then we have to make sure we have
- // no nulls left in the column.
- OUString sFillNulls("UPDATE \"" + getName() + "\" SET \""
- + rColName + "\" = 0 "
- "WHERE \"" + rColName + "\" IS NULL");
- getConnection()->createStatement()->execute(sFillNulls);
-
- sSql = "UPDATE RDB$RELATION_FIELDS SET RDB$NULL_FLAG = 1 "
- "WHERE RDB$FIELD_NAME = '" + rColName + "' "
- "AND RDB$RELATION_NAME = '" + getName() + "'";
+ sSql += "SET NOT NULL";
}
getConnection()->createStatement()->execute(sSql);
}
@@ -188,7 +175,7 @@ void SAL_CALL Table::alterColumnByName(const OUString& rColName,
if (bIsAutoIncrementChanged)
{
::dbtools::throwSQLException(
- "Changing autoincrement property of existing column is not supported",
+ u"Changing autoincrement property of existing column is not supported"_ustr,
::dbtools::StandardSQLState::FUNCTION_NOT_SUPPORTED,
*this);
@@ -197,7 +184,7 @@ void SAL_CALL Table::alterColumnByName(const OUString& rColName,
if (bDefaultChanged)
{
OUString sNewDefault;
- rDescriptor->getPropertyValue("DefaultValue") >>= sNewDefault;
+ rDescriptor->getPropertyValue(u"DefaultValue"_ustr) >>= sNewDefault;
OUString sSql;
if (sNewDefault.isEmpty())
@@ -211,7 +198,7 @@ void SAL_CALL Table::alterColumnByName(const OUString& rColName,
if (bNameChanged)
{
OUString sNewColName;
- rDescriptor->getPropertyValue("Name") >>= sNewColName;
+ rDescriptor->getPropertyValue(u"Name"_ustr) >>= sNewColName;
OUString sSql(getAlterTableColumn(rColName)
+ " TO \"" + sNewColName + "\"");
@@ -225,7 +212,7 @@ void SAL_CALL Table::alterColumnByName(const OUString& rColName,
// ----- XRename --------------------------------------------------------------
void SAL_CALL Table::rename(const OUString&)
{
- throw RuntimeException("Table renaming not supported by Firebird.");
+ throw RuntimeException(u"Table renaming not supported by Firebird."_ustr);
}
// ----- XInterface -----------------------------------------------------------
@@ -237,23 +224,6 @@ Any SAL_CALL Table::queryInterface(const Type& rType)
return OTableHelper::queryInterface(rType);
}
-// ----- XTypeProvider --------------------------------------------------------
-uno::Sequence< Type > SAL_CALL Table::getTypes()
-{
- uno::Sequence< Type > aTypes = OTableHelper::getTypes();
-
- for (int i = 0; i < aTypes.getLength(); i++)
- {
- if (aTypes[i].getTypeName() == "com.sun.star.sdbcx.XRename")
- {
- ::comphelper::removeElementAt(aTypes, i);
- break;
- }
- }
-
- return OTableHelper::getTypes();
-}
-
OUString Table::getAlterTableColumn(std::u16string_view rColumn)
{
return ("ALTER TABLE \"" + getName() + "\" ALTER COLUMN \"" + rColumn + "\" ");
diff --git a/connectivity/source/drivers/firebird/Table.hxx b/connectivity/source/drivers/firebird/Table.hxx
index b641981769af..024f905a88b5 100644
--- a/connectivity/source/drivers/firebird/Table.hxx
+++ b/connectivity/source/drivers/firebird/Table.hxx
@@ -18,67 +18,63 @@
#include <connectivity/TTableHelper.hxx>
namespace connectivity::firebird
+{
+
+ /**
+ * Implements sdbcx.Table. We don't support table renaming (XRename)
+ * hence the appropriate methods are overridden.
+ */
+ class Table: public OTableHelper
{
+ private:
+ ::osl::Mutex& m_rMutex;
+ sal_Int32 m_nPrivileges;
/**
- * Implements sdbcx.Table. We don't support table renaming (XRename)
- * hence the appropriate methods are overridden.
+ * Get the ALTER TABLE [TABLE] ALTER [COLUMN] String.
+ * Includes a trailing space.
+ */
+ OUString getAlterTableColumn(std::u16string_view rColumn);
+
+ protected:
+ void construct() override;
+
+ public:
+ Table(Tables* pTables,
+ ::osl::Mutex& rMutex,
+ const css::uno::Reference< css::sdbc::XConnection >& _xConnection);
+ Table(Tables* pTables,
+ ::osl::Mutex& rMutex,
+ const css::uno::Reference< css::sdbc::XConnection >& _xConnection,
+ const OUString& rName,
+ const OUString& rType,
+ const OUString& rDescription);
+
+ // OTableHelper
+ virtual ::connectivity::sdbcx::OCollection* createColumns(
+ const ::std::vector< OUString>& rNames) override;
+ virtual ::connectivity::sdbcx::OCollection* createKeys(
+ const ::std::vector< OUString>& rNames) override;
+ virtual ::connectivity::sdbcx::OCollection* createIndexes(
+ const ::std::vector< OUString>& rNames) override;
+
+ // XAlterTable
+ /**
+ * See css::sdbcx::ColumnDescriptor for details of
+ * rDescriptor.
*/
- class Table: public OTableHelper
- {
- private:
- ::osl::Mutex& m_rMutex;
- sal_Int32 m_nPrivileges;
-
- /**
- * Get the ALTER TABLE [TABLE] ALTER [COLUMN] String.
- * Includes a trailing space.
- */
- OUString getAlterTableColumn(std::u16string_view rColumn);
-
- protected:
- void construct() override;
-
- public:
- Table(Tables* pTables,
- ::osl::Mutex& rMutex,
- const css::uno::Reference< css::sdbc::XConnection >& _xConnection);
- Table(Tables* pTables,
- ::osl::Mutex& rMutex,
- const css::uno::Reference< css::sdbc::XConnection >& _xConnection,
- const OUString& rName,
- const OUString& rType,
- const OUString& rDescription);
-
- // OTableHelper
- virtual ::connectivity::sdbcx::OCollection* createColumns(
- const ::std::vector< OUString>& rNames) override;
- virtual ::connectivity::sdbcx::OCollection* createKeys(
- const ::std::vector< OUString>& rNames) override;
- virtual ::connectivity::sdbcx::OCollection* createIndexes(
- const ::std::vector< OUString>& rNames) override;
-
- // XAlterTable
- /**
- * See css::sdbcx::ColumnDescriptor for details of
- * rDescriptor.
- */
- virtual void SAL_CALL alterColumnByName(
- const OUString& rColName,
- const css::uno::Reference< css::beans::XPropertySet >& rDescriptor) override;
-
- // XRename -- UNSUPPORTED
- virtual void SAL_CALL rename(const OUString& sName) override;
-
- //XInterface
- virtual css::uno::Any
- SAL_CALL queryInterface(const css::uno::Type & rType) override;
-
- //XTypeProvider
- virtual css::uno::Sequence< css::uno::Type >
- SAL_CALL getTypes() override;
-
- };
+ virtual void SAL_CALL alterColumnByName(
+ const OUString& rColName,
+ const css::uno::Reference< css::beans::XPropertySet >& rDescriptor) override;
+
+ // XRename -- UNSUPPORTED
+ virtual void SAL_CALL rename(const OUString& sName) override;
+
+ //XInterface
+ virtual css::uno::Any
+ SAL_CALL queryInterface(const css::uno::Type & rType) override;
+
+ };
} // namespace connectivity::firebird
diff --git a/connectivity/source/drivers/firebird/Tables.cxx b/connectivity/source/drivers/firebird/Tables.cxx
index ebd6f2309cc8..3675882446f4 100644
--- a/connectivity/source/drivers/firebird/Tables.cxx
+++ b/connectivity/source/drivers/firebird/Tables.cxx
@@ -9,8 +9,8 @@
#include "Table.hxx"
#include "Tables.hxx"
+#include "Views.hxx"
#include "Catalog.hxx"
-#include "Util.hxx"
#include <TConnection.hxx>
@@ -30,7 +30,6 @@ using namespace ::osl;
using namespace ::com::sun::star;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::uno;
@@ -42,7 +41,7 @@ void Tables::impl_refresh()
static_cast<Catalog&>(m_rParent).refreshTables();
}
-ObjectType Tables::createObject(const OUString& rName)
+css::uno::Reference< css::beans::XPropertySet > Tables::createObject(const OUString& rName)
{
// Only retrieving a single table, so table type is irrelevant (param 4)
uno::Reference< XResultSet > xTables = m_xMetaData->getTables(Any(),
@@ -51,14 +50,14 @@ ObjectType Tables::createObject(const OUString& rName)
uno::Sequence< OUString >());
if (!xTables.is())
- throw RuntimeException("Could not acquire table.");
+ throw RuntimeException(u"Could not acquire table."_ustr);
uno::Reference< XRow > xRow(xTables,UNO_QUERY_THROW);
if (!xTables->next())
throw RuntimeException();
- ObjectType xRet(new Table(this,
+ css::uno::Reference< css::beans::XPropertySet > xRet(new Table(this,
m_rMutex,
m_xMetaData->getConnection(),
xRow->getString(3), // Name
@@ -66,7 +65,7 @@ ObjectType Tables::createObject(const OUString& rName)
xRow->getString(5))); // Description / Remarks / Comments
if (xTables->next())
- throw RuntimeException("Found more tables than expected.");
+ throw RuntimeException(u"Found more tables than expected."_ustr);
return xRet;
}
@@ -90,9 +89,8 @@ OUString Tables::createStandardColumnPart(const Reference< XPropertySet >& xColP
if ( xPropInfo.is() && xPropInfo->hasPropertyByName(rPropMap.getNameByIndex(PROPERTY_ID_AUTOINCREMENTCREATION)) )
xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_AUTOINCREMENTCREATION)) >>= sAutoIncrementValue;
- aSql.append(" ");
-
- aSql.append(dbtools::createStandardTypePart(xColProp, _xConnection));
+ aSql.append(" "
+ + dbtools::createStandardTypePart(xColProp, _xConnection));
// Add character set for (VAR)BINARY (fix) types:
// (VAR) BINARY is distinguished from other CHAR types by its character set.
// Octets is a special character set for binary data.
@@ -104,15 +102,13 @@ OUString Tables::createStandardColumnPart(const Reference< XPropertySet >& xColP
>>= aType;
if(aType == DataType::BINARY || aType == DataType::VARBINARY)
{
- aSql.append(" ");
- aSql.append("CHARACTER SET OCTETS");
+ aSql.append(" CHARACTER SET OCTETS");
}
}
if ( bIsAutoIncrement && !sAutoIncrementValue.isEmpty())
{
- aSql.append(" ");
- aSql.append(sAutoIncrementValue);
+ aSql.append(" " + sAutoIncrementValue);
}
// AutoIncrement "IDENTITY" is implicitly "NOT NULL"
else if(::comphelper::getINT32(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_ISNULLABLE))) == ColumnValue::NO_NULLS)
@@ -130,14 +126,14 @@ uno::Reference< XPropertySet > Tables::createDescriptor()
}
//----- XAppend ---------------------------------------------------------------
-ObjectType Tables::appendObject(const OUString& rName,
+css::uno::Reference< css::beans::XPropertySet > Tables::appendObject(const OUString& rName,
const uno::Reference< XPropertySet >& rDescriptor)
{
/* OUString sSql(::dbtools::createSqlCreateTableStatement(rDescriptor,
m_xMetaData->getConnection())); */
OUStringBuffer aSqlBuffer("CREATE TABLE ");
OUString sCatalog, sSchema, sComposedName, sTable;
- const Reference< XConnection>& xConnection = m_xMetaData->getConnection();
+ const Reference< XConnection> xConnection = m_xMetaData->getConnection();
::dbtools::OPropertyMap& rPropMap = OMetaConnection::getPropMap();
@@ -149,11 +145,11 @@ ObjectType Tables::appendObject(const OUString& rName,
if ( sComposedName.isEmpty() )
::dbtools::throwFunctionSequenceException(xConnection);
- aSqlBuffer.append(sComposedName);
- aSqlBuffer.append(" (");
+ aSqlBuffer.append(sComposedName
+ + " (");
// columns
- Reference<XColumnsSupplier> xColumnSup(rDescriptor,UNO_QUERY);
+ Reference<XColumnsSupplier> xColumnSup(rDescriptor, UNO_QUERY_THROW);
Reference<XIndexAccess> xColumns(xColumnSup->getColumns(),UNO_QUERY);
// check if there are columns
if(!xColumns.is() || !xColumns->getCount())
@@ -166,24 +162,23 @@ ObjectType Tables::appendObject(const OUString& rName,
{
if ( (xColumns->getByIndex(i) >>= xColProp) && xColProp.is() )
{
- aSqlBuffer.append(createStandardColumnPart(xColProp,xConnection));
- aSqlBuffer.append(",");
+ aSqlBuffer.append(createStandardColumnPart(xColProp,xConnection)
+ + ",");
}
}
- OUString sSql = aSqlBuffer.makeStringAndClear();
const OUString sKeyStmt = ::dbtools::createStandardKeyStatement(rDescriptor,xConnection);
if ( !sKeyStmt.isEmpty() )
- sSql += sKeyStmt;
+ aSqlBuffer.append(sKeyStmt);
else
{
- if ( sSql.endsWith(",") )
- sSql = sSql.replaceAt(sSql.getLength()-1, 1, u")");
+ if (aSqlBuffer[aSqlBuffer.getLength() - 1] == ',')
+ aSqlBuffer[aSqlBuffer.getLength() - 1] = ')';
else
- sSql += ")";
+ aSqlBuffer.append(")");
}
- m_xMetaData->getConnection()->createStatement()->execute(sSql);
+ m_xMetaData->getConnection()->createStatement()->execute(OUString::unacquired(aSqlBuffer));
return createObject(rName);
}
@@ -197,12 +192,33 @@ void Tables::dropObject(sal_Int32 nPosition, const OUString& sName)
return;
OUString sType;
- xTable->getPropertyValue("Type") >>= sType;
+ xTable->getPropertyValue(u"Type"_ustr) >>= sType;
const OUString sQuoteString = m_xMetaData->getIdentifierQuoteString();
m_xMetaData->getConnection()->createStatement()->execute(
- "DROP " + sType + ::dbtools::quoteName(sQuoteString,sName));
+ "DROP " + sType + " " + ::dbtools::quoteName(sQuoteString,sName));
+
+ if (sType == "VIEW")
+ {
+ Views* pViews = static_cast<Views*>(static_cast<Catalog&>(m_rParent).getPrivateViews());
+ if ( pViews && pViews->hasByName(sName) )
+ pViews->dropByNameImpl(sName);
+ }
}
+void connectivity::firebird::Tables::appendNew(const OUString& _rsNewTable)
+{
+ insertElement(_rsNewTable, nullptr);
+
+ // notify our container listeners
+ css::container::ContainerEvent aEvent(static_cast<XContainer*>(this),
+ css::uno::Any(_rsNewTable), css::uno::Any(),
+ css::uno::Any());
+ comphelper::OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners);
+ while (aListenerLoop.hasMoreElements())
+ aListenerLoop.next()->elementInserted(aEvent);
+}
+
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/firebird/Tables.hxx b/connectivity/source/drivers/firebird/Tables.hxx
index d7fe019ef2a6..057d35c1ad33 100644
--- a/connectivity/source/drivers/firebird/Tables.hxx
+++ b/connectivity/source/drivers/firebird/Tables.hxx
@@ -13,45 +13,48 @@
#include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
#include <connectivity/sdbcx/VCollection.hxx>
+#include <utility>
namespace connectivity::firebird
+{
+
+ /**
+ * This implements com.sun.star.sdbcx.Container, which seems to be
+ * also known by the name of Tables and Collection.
+ */
+ class Tables: public ::connectivity::sdbcx::OCollection
{
+ protected:
+ css::uno::Reference< css::sdbc::XDatabaseMetaData >
+ m_xMetaData;
+
+ static OUString createStandardColumnPart(const css::uno::Reference< css::beans::XPropertySet >& xColProp,const css::uno::Reference< css::sdbc::XConnection>& _xConnection);
+
+ // OCollection
+ virtual void impl_refresh() override;
+ virtual css::uno::Reference< css::beans::XPropertySet > createObject(
+ const OUString& rName) override;
+ virtual css::uno::Reference< css::beans::XPropertySet >
+ createDescriptor() override;
+ virtual css::uno::Reference< css::beans::XPropertySet > appendObject(
+ const OUString& rName,
+ const css::uno::Reference< css::beans::XPropertySet >& rDescriptor) override;
+
+ public:
+ Tables(css::uno::Reference< css::sdbc::XDatabaseMetaData > xMetaData,
+ ::cppu::OWeakObject& rParent,
+ ::osl::Mutex& rMutex,
+ ::std::vector< OUString> const & rNames) : sdbcx::OCollection(rParent, true, rMutex, rNames), m_xMetaData(std::move(xMetaData)) {}
+
+ // TODO: we should also implement XDataDescriptorFactory, XRefreshable,
+ // XAppend, etc., but all are optional.
+
+ // XDrop
+ virtual void dropObject(sal_Int32 nPosition, const OUString& rName) override;
+
+ void appendNew(const OUString& _rsNewTable);
- /**
- * This implements com.sun.star.sdbcx.Container, which seems to be
- * also known by the name of Tables and Collection.
- */
- class Tables: public ::connectivity::sdbcx::OCollection
- {
- protected:
- css::uno::Reference< css::sdbc::XDatabaseMetaData >
- m_xMetaData;
-
- static OUString createStandardColumnPart(const css::uno::Reference< css::beans::XPropertySet >& xColProp,const css::uno::Reference< com::sun::star::sdbc::XConnection>& _xConnection);
-
- // OCollection
- virtual void impl_refresh() override;
- virtual ::connectivity::sdbcx::ObjectType createObject(
- const OUString& rName) override;
- virtual css::uno::Reference< css::beans::XPropertySet >
- createDescriptor() override;
- virtual ::connectivity::sdbcx::ObjectType appendObject(
- const OUString& rName,
- const css::uno::Reference< css::beans::XPropertySet >& rDescriptor) override;
-
- public:
- Tables(const css::uno::Reference< css::sdbc::XDatabaseMetaData >& rMetaData,
- ::cppu::OWeakObject& rParent,
- ::osl::Mutex& rMutex,
- ::std::vector< OUString> const & rNames) : sdbcx::OCollection(rParent, true, rMutex, rNames), m_xMetaData(rMetaData) {}
-
- // TODO: we should also implement XDataDescriptorFactory, XRefreshable,
- // XAppend, etc., but all are optional.
-
- // XDrop
- virtual void dropObject(sal_Int32 nPosition, const OUString& rName) override;
-
- };
+ };
} // namespace connectivity::firebird
diff --git a/connectivity/source/drivers/firebird/User.hxx b/connectivity/source/drivers/firebird/User.hxx
index e47565f5d52e..537c6f9aa1d8 100644
--- a/connectivity/source/drivers/firebird/User.hxx
+++ b/connectivity/source/drivers/firebird/User.hxx
@@ -13,33 +13,33 @@
#include <com/sun/star/sdbc/XConnection.hpp>
namespace connectivity::firebird
+{
+
+ /**
+ * This implements com.sun.star.sdbcx.Container.
+ */
+ class User: public ::connectivity::sdbcx::OUser
{
+ css::uno::Reference< css::sdbc::XConnection > m_xConnection;
+ public:
+ /**
+ * Create a "new" descriptor, which isn't yet in the database.
+ */
+ User(const css::uno::Reference< css::sdbc::XConnection >& rConnection);
/**
- * This implements com.sun.star.sdbcx.Container.
+ * For a user that already exists in the db.
*/
- class User: public ::connectivity::sdbcx::OUser
- {
- css::uno::Reference< css::sdbc::XConnection > m_xConnection;
-
- public:
- /**
- * Create a "new" descriptor, which isn't yet in the database.
- */
- User(const css::uno::Reference< css::sdbc::XConnection >& rConnection);
- /**
- * For a user that already exists in the db.
- */
- User(const css::uno::Reference< css::sdbc::XConnection >& rConnection, const OUString& rName);
-
- // XAuthorizable
- virtual void SAL_CALL changePassword(const OUString&, const OUString& newPassword) override;
- virtual sal_Int32 SAL_CALL getPrivileges(const OUString&, sal_Int32) override;
- virtual sal_Int32 SAL_CALL getGrantablePrivileges(const OUString&, sal_Int32) override;
-
- // IRefreshableGroups::
- virtual void refreshGroups() override;
- };
+ User(const css::uno::Reference< css::sdbc::XConnection >& rConnection, const OUString& rName);
+
+ // XAuthorizable
+ virtual void SAL_CALL changePassword(const OUString&, const OUString& newPassword) override;
+ virtual sal_Int32 SAL_CALL getPrivileges(const OUString&, sal_Int32) override;
+ virtual sal_Int32 SAL_CALL getGrantablePrivileges(const OUString&, sal_Int32) override;
+
+ // IRefreshableGroups::
+ virtual void refreshGroups() override;
+ };
} // namespace connectivity::firebird
diff --git a/connectivity/source/drivers/firebird/Users.cxx b/connectivity/source/drivers/firebird/Users.cxx
index 50cfef84be8c..265bae760946 100644
--- a/connectivity/source/drivers/firebird/Users.cxx
+++ b/connectivity/source/drivers/firebird/Users.cxx
@@ -17,8 +17,6 @@ using namespace ::cppu;
using namespace ::osl;
using namespace ::com::sun::star;
using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::uno;
@@ -41,7 +39,7 @@ void Users::impl_refresh()
// TODO: IMPLEMENT ME
}
-ObjectType Users::createObject(const OUString& rName)
+css::uno::Reference< css::beans::XPropertySet > Users::createObject(const OUString& rName)
{
return new User(m_xMetaData->getConnection(), rName);
}
@@ -55,7 +53,7 @@ uno::Reference< XPropertySet > Users::createDescriptor()
}
//----- XAppend ---------------------------------------------------------------
-ObjectType Users::appendObject(const OUString& rName,
+css::uno::Reference< css::beans::XPropertySet > Users::appendObject(const OUString& rName,
const uno::Reference< XPropertySet >&)
{
// TODO: set sSql as appropriate
diff --git a/connectivity/source/drivers/firebird/Users.hxx b/connectivity/source/drivers/firebird/Users.hxx
index 7e78444d1199..a3c65460e162 100644
--- a/connectivity/source/drivers/firebird/Users.hxx
+++ b/connectivity/source/drivers/firebird/Users.hxx
@@ -13,40 +13,40 @@
#include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
namespace connectivity::firebird
- {
+{
- /**
- * This implements com.sun.star.sdbcx.Container.
- */
- class Users: public ::connectivity::sdbcx::OCollection
- {
- css::uno::Reference< css::sdbc::XDatabaseMetaData >
- m_xMetaData;
- protected:
-
- // OCollection
- virtual void impl_refresh() override;
- virtual ::connectivity::sdbcx::ObjectType createObject(
- const OUString& rName) override;
- virtual css::uno::Reference< css::beans::XPropertySet >
- createDescriptor() override;
- virtual ::connectivity::sdbcx::ObjectType appendObject(
- const OUString& rName,
- const css::uno::Reference< css::beans::XPropertySet >& rDescriptor) override;
-
- public:
- Users(const css::uno::Reference< css::sdbc::XDatabaseMetaData >& rMetaData,
- ::cppu::OWeakObject& rParent,
- ::osl::Mutex& rMutex,
- ::std::vector< OUString> const & rNames);
-
- // TODO: we should also implement XDataDescriptorFactory, XRefreshable,
- // XAppend, etc., but all are optional.
-
- // XDrop
- virtual void dropObject(sal_Int32 nPosition, const OUString& rName) override;
-
- };
+ /**
+ * This implements com.sun.star.sdbcx.Container.
+ */
+ class Users: public ::connectivity::sdbcx::OCollection
+ {
+ css::uno::Reference< css::sdbc::XDatabaseMetaData >
+ m_xMetaData;
+ protected:
+
+ // OCollection
+ virtual void impl_refresh() override;
+ virtual css::uno::Reference< css::beans::XPropertySet > createObject(
+ const OUString& rName) override;
+ virtual css::uno::Reference< css::beans::XPropertySet >
+ createDescriptor() override;
+ virtual ::css::uno::Reference< css::beans::XPropertySet > appendObject(
+ const OUString& rName,
+ const css::uno::Reference< css::beans::XPropertySet >& rDescriptor) override;
+
+ public:
+ Users(const css::uno::Reference< css::sdbc::XDatabaseMetaData >& rMetaData,
+ ::cppu::OWeakObject& rParent,
+ ::osl::Mutex& rMutex,
+ ::std::vector< OUString> const & rNames);
+
+ // TODO: we should also implement XDataDescriptorFactory, XRefreshable,
+ // XAppend, etc., but all are optional.
+
+ // XDrop
+ virtual void dropObject(sal_Int32 nPosition, const OUString& rName) override;
+
+ };
} // namespace connectivity::firebird
diff --git a/connectivity/source/drivers/firebird/Util.cxx b/connectivity/source/drivers/firebird/Util.cxx
index 2d694eac94ec..8f11068e80f0 100644
--- a/connectivity/source/drivers/firebird/Util.cxx
+++ b/connectivity/source/drivers/firebird/Util.cxx
@@ -13,6 +13,7 @@
#include <com/sun/star/sdbc/DataType.hpp>
#include <com/sun/star/sdbc/SQLException.hpp>
+#include <o3tl/string_view.hxx>
using namespace ::connectivity;
@@ -22,12 +23,12 @@ using namespace ::com::sun::star::uno;
using namespace firebird;
-OUString firebird::sanitizeIdentifier(const OUString& rIdentifier)
+OUString firebird::sanitizeIdentifier(std::u16string_view rIdentifier)
{
- OUString sRet = rIdentifier.trim();
- assert(sRet.getLength() <= 31); // Firebird identifiers cannot be longer than this.
+ std::u16string_view sRet = o3tl::trim(rIdentifier);
+ assert(sRet.size() <= 31); // Firebird identifiers cannot be longer than this.
- return sRet;
+ return OUString(sRet);
}
OUString firebird::StatusVectorToString(const ISC_STATUS_ARRAY& rStatusVector,
@@ -43,8 +44,8 @@ OUString firebird::StatusVectorToString(const ISC_STATUS_ARRAY& rStatusVector,
while(fb_interpret(msg, sizeof(msg), &pStatus))
{
// TODO: verify encoding
- buf.append("\n*");
- buf.append(OUString(msg, strlen(msg), RTL_TEXTENCODING_UTF8));
+ buf.append("\n*"
+ + OUString(msg, strlen(msg), RTL_TEXTENCODING_UTF8));
}
}
catch (...)
@@ -185,57 +186,57 @@ OUString firebird::ColumnTypeInfo::getColumnTypeName() const
switch (nDataType)
{
case DataType::BIT:
- return "BIT";
+ return u"BIT"_ustr;
case DataType::TINYINT:
- return "TINYINT";
+ return u"TINYINT"_ustr;
case DataType::SMALLINT:
- return "SMALLINT";
+ return u"SMALLINT"_ustr;
case DataType::INTEGER:
- return "INTEGER";
+ return u"INTEGER"_ustr;
case DataType::BIGINT:
- return "BIGINT";
+ return u"BIGINT"_ustr;
case DataType::FLOAT:
- return "FLOAT";
+ return u"FLOAT"_ustr;
case DataType::REAL:
- return "REAL";
+ return u"REAL"_ustr;
case DataType::DOUBLE:
- return "DOUBLE";
+ return u"DOUBLE"_ustr;
case DataType::NUMERIC:
- return "NUMERIC";
+ return u"NUMERIC"_ustr;
case DataType::DECIMAL:
- return "DECIMAL";
+ return u"DECIMAL"_ustr;
case DataType::CHAR:
- return "CHAR";
+ return u"CHAR"_ustr;
case DataType::VARCHAR:
- return "VARCHAR";
+ return u"VARCHAR"_ustr;
case DataType::LONGVARCHAR:
- return "LONGVARCHAR";
+ return u"LONGVARCHAR"_ustr;
case DataType::DATE:
- return "DATE";
+ return u"DATE"_ustr;
case DataType::TIME:
- return "TIME";
+ return u"TIME"_ustr;
case DataType::TIMESTAMP:
- return "TIMESTAMP";
+ return u"TIMESTAMP"_ustr;
case DataType::BINARY:
// in Firebird, that is the same datatype "CHAR" as DataType::CHAR,
// only with CHARACTER SET OCTETS; we use the synonym CHARACTER
// to fool LO into seeing it as different types.
- return "CHARACTER";
+ return u"CHARACTER"_ustr;
case DataType::VARBINARY:
// see above comment about DataType::BINARY.
- return "CHARACTER VARYING";
+ return u"CHARACTER VARYING"_ustr;
case DataType::LONGVARBINARY:
return "BLOB SUB_TYPE " + OUString::number(static_cast<short>(BlobSubtype::Image));
case DataType::ARRAY:
- return "ARRAY";
+ return u"ARRAY"_ustr;
case DataType::BLOB:
- return "BLOB SUB_TYPE BINARY";
+ return u"BLOB SUB_TYPE BINARY"_ustr;
case DataType::CLOB:
- return "BLOB SUB_TYPE TEXT";
+ return u"BLOB SUB_TYPE TEXT"_ustr;
case DataType::BOOLEAN:
- return "BOOLEAN";
+ return u"BOOLEAN"_ustr;
case DataType::SQLNULL:
- return "NULL";
+ return u"NULL"_ustr;
default:
assert(false); // Should never happen
return OUString();
@@ -316,8 +317,6 @@ void firebird::mallocSQLVAR(XSQLDA* pSqlda)
pVar->sqldata = static_cast<char *>(malloc(sizeof(float)));
break;
case SQL_DOUBLE:
- pVar->sqldata = static_cast<char *>(malloc(sizeof(double)));
- break;
case SQL_D_FLOAT:
pVar->sqldata = static_cast<char *>(malloc(sizeof(double)));
break;
@@ -342,8 +341,9 @@ void firebird::mallocSQLVAR(XSQLDA* pSqlda)
case SQL_BOOLEAN:
pVar->sqldata = static_cast<char *>(malloc(sizeof(sal_Bool)));
break;
+ // See https://www.firebirdsql.org/file/documentation/html/en/refdocs/fblangref25/firebird-25-language-reference.html#fblangref25-datatypes-special-sqlnull
case SQL_NULL:
- assert(false); // TODO: implement
+ pVar->sqldata = nullptr;
break;
case SQL_QUAD:
assert(false); // TODO: implement
@@ -388,7 +388,8 @@ void firebird::freeSQLVAR(XSQLDA* pSqlda)
}
break;
case SQL_NULL:
- assert(false); // TODO: implement
+ // See SQL_NULL case in mallocSQLVAR
+ assert(pVar->sqldata == nullptr);
break;
case SQL_QUAD:
assert(false); // TODO: implement
@@ -407,31 +408,4 @@ void firebird::freeSQLVAR(XSQLDA* pSqlda)
}
}
-
-OUString firebird::escapeWith( const OUString& sText, const char aKey, const char aEscapeChar)
-{
- OUString sRet(sText);
- sal_Int32 aIndex = 0;
- for (;;)
- {
- aIndex = sRet.indexOf(aKey, aIndex);
- if ( aIndex <= 0 || aIndex >= sRet.getLength())
- break;
- sRet = sRet.replaceAt(aIndex, 1, rtl::OUStringConcatenation(OUStringChar(aEscapeChar) + OUStringChar(aKey)) );
- aIndex += 2;
- }
-
- return sRet;
-}
-
-sal_Int64 firebird::pow10Integer(int nDecimalCount)
-{
- sal_Int64 nRet = 1;
- for(int i=0; i< nDecimalCount; i++)
- {
- nRet *= 10;
- }
- return nRet;
-}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/firebird/Util.hxx b/connectivity/source/drivers/firebird/Util.hxx
index 46fadebb1a20..b41afc07dbb9 100644
--- a/connectivity/source/drivers/firebird/Util.hxx
+++ b/connectivity/source/drivers/firebird/Util.hxx
@@ -14,112 +14,109 @@
#include <rtl/ustring.hxx>
#include <com/sun/star/uno/XInterface.hpp>
+#include <utility>
namespace connectivity::firebird
- {
- // Type Blob has 2 subtypes values
- // 0 for BLOB, 1 for CLOB
- // see http://www.firebirdfaq.org/faq48/
- // User-defined subtypes are negative.
- // Use a number for image which is very unlikely to be defined by a
- // user.
- enum class BlobSubtype {
- Blob = 0,
- Clob = 1,
- Image = -9546
- };
-
- /**
- * Numeric and decimal types can be identified by their subtype in
- * Firebird API. 1 for NUMERIC, 2 for DECIMAL.
- */
- enum class NumberSubType {
- Other = 0,
- Numeric = 1,
- Decimal = 2
- };
-
- class ColumnTypeInfo {
+{
+ // Type Blob has 2 subtypes values
+ // 0 for BLOB, 1 for CLOB
+ // see http://www.firebirdfaq.org/faq48/
+ // User-defined subtypes are negative.
+ // Use a number for image which is very unlikely to be defined by a
+ // user.
+ enum class BlobSubtype {
+ Blob = 0,
+ Clob = 1,
+ Image = -9546
+ };
+
+ /**
+ * Numeric and decimal types can be identified by their subtype in
+ * Firebird API. 1 for NUMERIC, 2 for DECIMAL.
+ */
+ enum class NumberSubType {
+ Other = 0,
+ Numeric = 1,
+ Decimal = 2
+ };
+
+ class ColumnTypeInfo {
private:
- short m_aType;
- short m_aSubType;
- short m_nScale;
- OUString m_sCharsetName;
+ short m_aType;
+ short m_aSubType;
+ short m_nScale;
+ OUString m_sCharsetName;
public:
- /**
- * @param tType SQL type of column defined by Firebird (e.g.
- * SQL_DOUBLE)
- * @param aSubType SQL sub type as in firebird API. See
- * NumberSubType.
- * @param scale: Scale of the number. It is ignored in case it's not
- * a number. Scale obtained from the Firebird API is negative, so
- * that should be negated before passing to this constructor.
- *
- */
- explicit ColumnTypeInfo( short aType, short aSubType = 0,
- short nScale = 0, const OUString& sCharset = OUString() )
- : m_aType(aType)
- , m_aSubType(aSubType)
- , m_nScale(nScale)
- , m_sCharsetName(sCharset) {}
- explicit ColumnTypeInfo( short aType, const OUString& sCharset )
- : m_aType(aType)
- , m_aSubType(0)
- , m_nScale(0)
- , m_sCharsetName(sCharset) {}
- short getType() const { return m_aType; }
- short getSubType() const { return m_aSubType; }
- short getScale() const { return m_nScale; }
- OUString const & getCharacterSet() const { return m_sCharsetName; }
-
- sal_Int32 getSdbcType() const;
- OUString getColumnTypeName() const;
-
- };
-
- /**
- * Make sure an identifier is safe to use within the database. Currently
- * firebird seems to return identifiers with 93 character (instead of
- * 31), whereby the name is simply padded with trailing whitespace.
- * This removes all trailing whitespace (i.e. if necessary so that
- * the length is below 31 characters). Firebird automatically compensates
- * for such shorter strings, however any trailing padding makes the gui
- * editing of such names harder, hence we remove all trailing whitespace.
- */
- OUString sanitizeIdentifier(const OUString& rIdentifier);
-
- inline bool IndicatesError(const ISC_STATUS_ARRAY& rStatusVector)
- {
- return rStatusVector[0]==1 && rStatusVector[1]; // indicates error;
- }
-
- OUString StatusVectorToString(const ISC_STATUS_ARRAY& rStatusVector,
- std::u16string_view rCause);
-
/**
- * Evaluate a firebird status vector and throw exceptions as necessary.
- * The content of the status vector is included in the thrown exception.
+ * @param tType SQL type of column defined by Firebird (e.g.
+ * SQL_DOUBLE)
+ * @param aSubType SQL sub type as in firebird API. See
+ * NumberSubType.
+ * @param scale: Scale of the number. It is ignored in case it's not
+ * a number. Scale obtained from the Firebird API is negative, so
+ * that should be negated before passing to this constructor.
*
- * @throws css::sdbc::SQLException
- */
- void evaluateStatusVector(const ISC_STATUS_ARRAY& rStatusVector,
- std::u16string_view aCause,
- const css::uno::Reference< css::uno::XInterface >& _rxContext);
-
- /**
- * Internally (i.e. in RDB$FIELD_TYPE) firebird stores the data type
- * for a column as defined in blr_*, however in the firebird
- * api the SQL_* types are used, hence we need to be able to convert
- * between the two when retrieving column metadata.
*/
- short getFBTypeFromBlrType(short blrType);
-
- void mallocSQLVAR(XSQLDA* pSqlda);
-
- void freeSQLVAR(XSQLDA* pSqlda);
-
- OUString escapeWith( const OUString& sText, const char aKey, const char aEscapeChar);
- sal_Int64 pow10Integer( int nDecimalCount );
+ explicit ColumnTypeInfo( short aType, short aSubType = 0,
+ short nScale = 0, OUString sCharset = OUString() )
+ : m_aType(aType)
+ , m_aSubType(aSubType)
+ , m_nScale(nScale)
+ , m_sCharsetName(std::move(sCharset)) {}
+ explicit ColumnTypeInfo(const XSQLVAR& var, OUString sCharset = {})
+ : ColumnTypeInfo(var.sqltype, var.sqlsubtype, -var.sqlscale, std::move(sCharset)) {}
+ explicit ColumnTypeInfo(const XSQLDA* pXSQLDA, sal_Int32 column, OUString sCharset = {})
+ : ColumnTypeInfo(pXSQLDA->sqlvar[column-1], std::move(sCharset)) {}
+ short getType() const { return m_aType; }
+ short getSubType() const { return m_aSubType; }
+ short getScale() const { return m_nScale; }
+ OUString const & getCharacterSet() const { return m_sCharsetName; }
+
+ sal_Int32 getSdbcType() const;
+ OUString getColumnTypeName() const;
+
+ };
+
+ /**
+ * Make sure an identifier is safe to use within the database. Currently
+ * firebird seems to return identifiers with 93 character (instead of
+ * 31), whereby the name is simply padded with trailing whitespace.
+ * This removes all trailing whitespace (i.e. if necessary so that
+ * the length is below 31 characters). Firebird automatically compensates
+ * for such shorter strings, however any trailing padding makes the gui
+ * editing of such names harder, hence we remove all trailing whitespace.
+ */
+ OUString sanitizeIdentifier(std::u16string_view rIdentifier);
+
+ inline bool IndicatesError(const ISC_STATUS_ARRAY& rStatusVector)
+ {
+ return rStatusVector[0]==1 && rStatusVector[1]; // indicates error;
+ }
+
+ OUString StatusVectorToString(const ISC_STATUS_ARRAY& rStatusVector,
+ std::u16string_view rCause);
+
+ /**
+ * Evaluate a firebird status vector and throw exceptions as necessary.
+ * The content of the status vector is included in the thrown exception.
+ *
+ * @throws css::sdbc::SQLException
+ */
+ void evaluateStatusVector(const ISC_STATUS_ARRAY& rStatusVector,
+ std::u16string_view aCause,
+ const css::uno::Reference< css::uno::XInterface >& _rxContext);
+
+ /**
+ * Internally (i.e. in RDB$FIELD_TYPE) firebird stores the data type
+ * for a column as defined in blr_*, however in the firebird
+ * api the SQL_* types are used, hence we need to be able to convert
+ * between the two when retrieving column metadata.
+ */
+ short getFBTypeFromBlrType(short blrType);
+
+ void mallocSQLVAR(XSQLDA* pSqlda);
+
+ void freeSQLVAR(XSQLDA* pSqlda);
}
diff --git a/connectivity/source/drivers/firebird/View.cxx b/connectivity/source/drivers/firebird/View.cxx
new file mode 100644
index 000000000000..6dcbf6bce2b2
--- /dev/null
+++ b/connectivity/source/drivers/firebird/View.cxx
@@ -0,0 +1,85 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+#include "View.hxx"
+
+#include <propertyids.hxx>
+
+#include <com/sun/star/sdbc/XRow.hpp>
+
+namespace connectivity::firebird
+{
+View::View(const css::uno::Reference<css::sdbc::XConnection>& _rxConnection, bool _bCaseSensitive,
+ const OUString& _rSchemaName, const OUString& _rName)
+ : View_Base(_bCaseSensitive, _rName, _rxConnection->getMetaData(), OUString(), _rSchemaName,
+ OUString())
+ , m_xConnection(_rxConnection)
+{
+}
+
+View::~View() {}
+
+void SAL_CALL View::acquire() noexcept { View_Base::acquire(); };
+void SAL_CALL View::release() noexcept { View_Base::release(); };
+css::uno::Any SAL_CALL View::queryInterface(const css::uno::Type& _rType)
+{
+ css::uno::Any aReturn = View_Base::queryInterface(_rType);
+ if (!aReturn.hasValue())
+ aReturn = View_IBASE::queryInterface(_rType);
+ return aReturn;
+}
+
+css::uno::Sequence<css::uno::Type> SAL_CALL View::getTypes()
+{
+ return ::comphelper::concatSequences(View_Base::getTypes(), View_IBASE::getTypes());
+}
+
+css::uno::Sequence<sal_Int8> SAL_CALL View::getImplementationId()
+{
+ return css::uno::Sequence<sal_Int8>();
+}
+
+void SAL_CALL View::alterCommand(const OUString& _rNewCommand)
+{
+ OUString aCommand = "ALTER VIEW \"" + m_Name + "\" AS " + _rNewCommand;
+ m_xMetaData->getConnection()->createStatement()->execute(aCommand);
+}
+
+void SAL_CALL View::getFastPropertyValue(css::uno::Any& _rValue, sal_Int32 _nHandle) const
+{
+ if (_nHandle == PROPERTY_ID_COMMAND)
+ {
+ // retrieve the very current command, don't rely on the base classes cached value
+ // (which we initialized empty, anyway)
+ _rValue <<= impl_getCommand();
+ return;
+ }
+
+ View_Base::getFastPropertyValue(_rValue, _nHandle);
+}
+
+OUString View::impl_getCommand() const
+{
+ OUString aCommand("SELECT RDB$VIEW_SOURCE FROM RDB$RELATIONS WHERE RDB$RELATION_NAME = '"
+ + m_Name + "'");
+ css::uno::Reference<css::sdbc::XStatement> statement = m_xConnection->createStatement();
+ css::uno::Reference<css::sdbc::XResultSet> xResult = statement->executeQuery(aCommand);
+
+ css::uno::Reference<css::sdbc::XRow> xRow(xResult, css::uno::UNO_QUERY_THROW);
+ if (!xResult->next())
+ {
+ // hmm. There is no view the name as we know it. Can only mean some other instance
+ // dropped this view meanwhile...
+ std::abort();
+ }
+
+ return xRow->getString(1);
+}
+
+} // namespace connectivity::firebird
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/firebird/View.hxx b/connectivity/source/drivers/firebird/View.hxx
new file mode 100644
index 000000000000..2b300a8d06d9
--- /dev/null
+++ b/connectivity/source/drivers/firebird/View.hxx
@@ -0,0 +1,60 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+#pragma once
+
+#include <connectivity/sdbcx/VView.hxx>
+
+#include <com/sun/star/sdbcx/XAlterView.hpp>
+#include <com/sun/star/sdbc/XConnection.hpp>
+
+#include <comphelper/sequence.hxx>
+#include <cppuhelper/implbase1.hxx>
+
+namespace connectivity::firebird
+{
+typedef ::connectivity::sdbcx::OView View_Base;
+typedef ::cppu::ImplHelper1<css::sdbcx::XAlterView> View_IBASE;
+
+class View : public View_Base, public View_IBASE
+{
+public:
+ View(const css::uno::Reference<css::sdbc::XConnection>& _rxConnection, bool _bCaseSensitive,
+ const OUString& _rSchemaName, const OUString& _rName);
+
+ // UNO
+ virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& aType) override;
+ virtual void SAL_CALL acquire() noexcept override;
+ virtual void SAL_CALL release() noexcept override;
+
+ virtual css::uno::Sequence<css::uno::Type> SAL_CALL getTypes() override;
+ virtual css::uno::Sequence<sal_Int8> SAL_CALL getImplementationId() override;
+
+ // XAlterView
+ virtual void SAL_CALL alterCommand(const OUString& NewCommand) override;
+
+protected:
+ virtual ~View() override;
+
+protected:
+ // OPropertyContainer
+ virtual void SAL_CALL getFastPropertyValue(css::uno::Any& _rValue,
+ sal_Int32 _nHandle) const override;
+
+private:
+ /** retrieves the current command of the View */
+ OUString impl_getCommand() const;
+
+private:
+ css::uno::Reference<css::sdbc::XConnection> m_xConnection;
+
+ using View_Base::getFastPropertyValue;
+};
+
+} // namespace connectivity::firebird
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/firebird/Views.cxx b/connectivity/source/drivers/firebird/Views.cxx
new file mode 100644
index 000000000000..606ac9ae7e64
--- /dev/null
+++ b/connectivity/source/drivers/firebird/Views.cxx
@@ -0,0 +1,113 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+#include "Tables.hxx"
+#include "Views.hxx"
+#include "View.hxx"
+#include "Catalog.hxx"
+#include <connectivity/dbtools.hxx>
+#include <comphelper/types.hxx>
+#include <TConnection.hxx>
+
+connectivity::firebird::Views::Views(
+ const css::uno::Reference<css::sdbc::XConnection>& _rxConnection, ::cppu::OWeakObject& _rParent,
+ ::osl::Mutex& _rMutex, const ::std::vector<OUString>& _rVector)
+ : sdbcx::OCollection(_rParent, true, _rMutex, _rVector)
+ , m_xConnection(_rxConnection)
+ , m_xMetaData(_rxConnection->getMetaData())
+ , m_bInDrop(false)
+{
+}
+
+css::uno::Reference<css::beans::XPropertySet>
+connectivity::firebird::Views::createObject(const OUString& _rName)
+{
+ OUString sCatalog, sSchema, sTable;
+ ::dbtools::qualifiedNameComponents(m_xMetaData, _rName, sCatalog, sSchema, sTable,
+ ::dbtools::EComposeRule::InDataManipulation);
+ return new View(m_xConnection, isCaseSensitive(), sSchema, sTable);
+}
+
+void connectivity::firebird::Views::impl_refresh()
+{
+ static_cast<Catalog&>(m_rParent).refreshViews();
+}
+
+css::uno::Reference<css::beans::XPropertySet> connectivity::firebird::Views::createDescriptor()
+{
+ return new connectivity::sdbcx::OView(true, m_xMetaData);
+}
+
+// XAppend
+css::uno::Reference<css::beans::XPropertySet> connectivity::firebird::Views::appendObject(
+ const OUString& _rForName, const css::uno::Reference<css::beans::XPropertySet>& descriptor)
+{
+ createView(descriptor);
+ return createObject(_rForName);
+}
+
+// XDrop
+void connectivity::firebird::Views::dropObject(sal_Int32 _nPos, const OUString& /*_sElementName*/)
+{
+ if (m_bInDrop)
+ return;
+
+ css::uno::Reference<XInterface> xObject(getObject(_nPos));
+ bool bIsNew = connectivity::sdbcx::ODescriptor::isNew(xObject);
+ if (!bIsNew)
+ {
+ OUString aSql(u"DROP VIEW"_ustr);
+
+ css::uno::Reference<css::beans::XPropertySet> xProp(xObject, css::uno::UNO_QUERY);
+ aSql += ::dbtools::composeTableName(m_xMetaData, xProp,
+ ::dbtools::EComposeRule::InTableDefinitions, true);
+
+ css::uno::Reference<css::sdbc::XConnection> xConnection = m_xMetaData->getConnection();
+ css::uno::Reference<css::sdbc::XStatement> xStmt = xConnection->createStatement();
+ xStmt->execute(aSql);
+ ::comphelper::disposeComponent(xStmt);
+ }
+}
+
+void connectivity::firebird::Views::dropByNameImpl(const OUString& elementName)
+{
+ m_bInDrop = true;
+ connectivity::sdbcx::OCollection::dropByName(elementName);
+ m_bInDrop = false;
+}
+
+void connectivity::firebird::Views::createView(
+ const css::uno::Reference<css::beans::XPropertySet>& descriptor)
+{
+ css::uno::Reference<css::sdbc::XConnection> xConnection = m_xMetaData->getConnection();
+
+ OUString sCommand;
+ descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_COMMAND))
+ >>= sCommand;
+
+ OUString aSql = "CREATE VIEW "
+ + ::dbtools::composeTableName(m_xMetaData, descriptor,
+ ::dbtools::EComposeRule::InTableDefinitions, true)
+ + " AS " + sCommand;
+
+ css::uno::Reference<css::sdbc::XStatement> xStmt = xConnection->createStatement();
+ if (xStmt.is())
+ {
+ xStmt->execute(aSql);
+ ::comphelper::disposeComponent(xStmt);
+ }
+ connectivity::firebird::Tables* pTables = static_cast<connectivity::firebird::Tables*>(
+ static_cast<connectivity::firebird::Catalog&>(m_rParent).getPrivateTables());
+ if (pTables)
+ {
+ OUString sName = ::dbtools::composeTableName(
+ m_xMetaData, descriptor, ::dbtools::EComposeRule::InDataManipulation, false);
+ pTables->appendNew(sName);
+ }
+}
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/firebird/Views.hxx b/connectivity/source/drivers/firebird/Views.hxx
new file mode 100644
index 000000000000..d1308d385494
--- /dev/null
+++ b/connectivity/source/drivers/firebird/Views.hxx
@@ -0,0 +1,43 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+#pragma once
+
+#include <connectivity/sdbcx/VCollection.hxx>
+#include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
+namespace connectivity::firebird
+{
+class Views final : public connectivity::sdbcx::OCollection
+{
+ css::uno::Reference<css::sdbc::XConnection> m_xConnection;
+ css::uno::Reference<css::sdbc::XDatabaseMetaData> m_xMetaData;
+ bool m_bInDrop;
+
+ // OCollection
+ virtual css::uno::Reference<css::beans::XPropertySet>
+ createObject(const OUString& _rName) override;
+ virtual void impl_refresh() override;
+ virtual css::uno::Reference<css::beans::XPropertySet> createDescriptor() override;
+ virtual css::uno::Reference<css::beans::XPropertySet>
+ appendObject(const OUString& _rForName,
+ const css::uno::Reference<css::beans::XPropertySet>& descriptor) override;
+
+ void createView(const css::uno::Reference<css::beans::XPropertySet>& descriptor);
+
+public:
+ Views(const css::uno::Reference<css::sdbc::XConnection>& _rxConnection,
+ ::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex,
+ const ::std::vector<OUString>& _rVector);
+
+ // XDrop
+ virtual void dropObject(sal_Int32 _nPos, const OUString& _sElementName) override;
+
+ void dropByNameImpl(const OUString& elementName);
+};
+}
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/flat/ECatalog.cxx b/connectivity/source/drivers/flat/ECatalog.cxx
index aed042fdd578..a7e806b58e9c 100644
--- a/connectivity/source/drivers/flat/ECatalog.cxx
+++ b/connectivity/source/drivers/flat/ECatalog.cxx
@@ -25,7 +25,6 @@
#include <com/sun/star/sdbc/XResultSet.hpp>
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
@@ -41,7 +40,7 @@ void OFlatCatalog::refreshTables()
{
::std::vector<OUString> aVector;
Sequence<OUString> aTypes;
- Reference<XResultSet> xResult = m_xMetaData->getTables(Any(), "%", "%", aTypes);
+ Reference<XResultSet> xResult = m_xMetaData->getTables(Any(), u"%"_ustr, u"%"_ustr, aTypes);
if (xResult.is())
{
diff --git a/connectivity/source/drivers/flat/EColumns.cxx b/connectivity/source/drivers/flat/EColumns.cxx
index a9e210321ba6..f2d5c5f69461 100644
--- a/connectivity/source/drivers/flat/EColumns.cxx
+++ b/connectivity/source/drivers/flat/EColumns.cxx
@@ -23,20 +23,16 @@
using namespace connectivity::flat;
using namespace connectivity;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbcx;
-using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-sdbcx::ObjectType OFlatColumns::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > OFlatColumns::createObject(const OUString& _rName)
{
OFlatTable* pTable = static_cast<OFlatTable*>(m_pTable);
const ::rtl::Reference<OSQLColumns>& aCols = pTable->getTableColumns();
OSQLColumns::const_iterator aIter = find(aCols->begin(),aCols->end(),_rName,::comphelper::UStringMixEqual(isCaseSensitive()));
- sdbcx::ObjectType xRet;
+ css::uno::Reference< css::beans::XPropertySet > xRet;
if(aIter != aCols->end())
- xRet = sdbcx::ObjectType(*aIter,UNO_QUERY);
+ xRet = *aIter;
return xRet;
}
diff --git a/connectivity/source/drivers/flat/EConnection.cxx b/connectivity/source/drivers/flat/EConnection.cxx
index 288a53fa649a..3f199cdfc4f0 100644
--- a/connectivity/source/drivers/flat/EConnection.cxx
+++ b/connectivity/source/drivers/flat/EConnection.cxx
@@ -36,7 +36,6 @@ using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::lang;
OFlatConnection::OFlatConnection(ODriver* _pDriver) : OConnection(_pDriver)
@@ -55,7 +54,7 @@ OFlatConnection::~OFlatConnection()
// XServiceInfo
-IMPLEMENT_SERVICE_INFO(OFlatConnection, "com.sun.star.sdbc.drivers.flat.Connection", "com.sun.star.sdbc.Connection")
+IMPLEMENT_SERVICE_INFO(OFlatConnection, u"com.sun.star.sdbc.drivers.flat.Connection"_ustr, u"com.sun.star.sdbc.Connection"_ustr)
void OFlatConnection::construct(const OUString& url,const Sequence< PropertyValue >& info)
@@ -133,11 +132,11 @@ Reference< XDatabaseMetaData > SAL_CALL OFlatConnection::getMetaData( )
css::uno::Reference< XTablesSupplier > OFlatConnection::createCatalog()
{
::osl::MutexGuard aGuard( m_aMutex );
- Reference< XTablesSupplier > xTab = m_xCatalog;
+ rtl::Reference< connectivity::sdbcx::OCatalog > xTab = m_xCatalog;
if(!xTab.is())
{
xTab = new OFlatCatalog(this);
- m_xCatalog = xTab;
+ m_xCatalog = xTab.get();
}
return xTab;
}
@@ -168,8 +167,7 @@ Reference< XPreparedStatement > SAL_CALL OFlatConnection::prepareCall( const OUS
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OConnection_B::rBHelper.bDisposed);
- ::dbtools::throwFeatureNotImplementedSQLException( "XConnection::prepareCall", *this );
- return nullptr;
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XConnection::prepareCall"_ustr, *this );
}
diff --git a/connectivity/source/drivers/flat/EDatabaseMetaData.cxx b/connectivity/source/drivers/flat/EDatabaseMetaData.cxx
index 7150973069d9..b76e88c9359e 100644
--- a/connectivity/source/drivers/flat/EDatabaseMetaData.cxx
+++ b/connectivity/source/drivers/flat/EDatabaseMetaData.cxx
@@ -47,17 +47,15 @@ OFlatDatabaseMetaData::~OFlatDatabaseMetaData()
Reference< XResultSet > OFlatDatabaseMetaData::impl_getTypeInfo_throw( )
{
- ::osl::MutexGuard aGuard( m_aMutex );
-
rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo);
static ODatabaseMetaDataResultSet::ORows aRows = []()
{
- ODatabaseMetaDataResultSet::ORows tmp(10);
+ ODatabaseMetaDataResultSet::ORows tmp;
ODatabaseMetaDataResultSet::ORow aRow
{
ODatabaseMetaDataResultSet::getEmptyValue() ,
- new ORowSetValueDecorator(OUString("CHAR")) ,
+ new ORowSetValueDecorator(u"CHAR"_ustr) ,
new ORowSetValueDecorator(DataType::CHAR) ,
new ORowSetValueDecorator(sal_Int32(254)) ,
ODatabaseMetaDataResultSet::getQuoteValue() ,
@@ -79,60 +77,60 @@ Reference< XResultSet > OFlatDatabaseMetaData::impl_getTypeInfo_throw( )
tmp.push_back(aRow);
- aRow[1] = new ORowSetValueDecorator(OUString("VARCHAR"));
+ aRow[1] = new ORowSetValueDecorator(u"VARCHAR"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::VARCHAR);
aRow[4] = ODatabaseMetaDataResultSet::getQuoteValue();
aRow[5] = ODatabaseMetaDataResultSet::getQuoteValue();
tmp.push_back(aRow);
- aRow[1] = new ORowSetValueDecorator(OUString("LONGVARCHAR"));
+ aRow[1] = new ORowSetValueDecorator(u"LONGVARCHAR"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::LONGVARCHAR);
aRow[3] = new ORowSetValueDecorator(sal_Int32(65535));
aRow[4] = ODatabaseMetaDataResultSet::getQuoteValue();
aRow[5] = ODatabaseMetaDataResultSet::getQuoteValue();
tmp.push_back(aRow);
- aRow[1] = new ORowSetValueDecorator(OUString("DATE"));
+ aRow[1] = new ORowSetValueDecorator(u"DATE"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::DATE);
aRow[3] = new ORowSetValueDecorator(sal_Int32(10));
aRow[4] = ODatabaseMetaDataResultSet::getQuoteValue();
aRow[5] = ODatabaseMetaDataResultSet::getQuoteValue();
tmp.push_back(aRow);
- aRow[1] = new ORowSetValueDecorator(OUString("TIME"));
+ aRow[1] = new ORowSetValueDecorator(u"TIME"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::TIME);
aRow[3] = new ORowSetValueDecorator(sal_Int32(8));
aRow[4] = ODatabaseMetaDataResultSet::getQuoteValue();
aRow[5] = ODatabaseMetaDataResultSet::getQuoteValue();
tmp.push_back(aRow);
- aRow[1] = new ORowSetValueDecorator(OUString("TIMESTAMP"));
+ aRow[1] = new ORowSetValueDecorator(u"TIMESTAMP"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::TIMESTAMP);
aRow[3] = new ORowSetValueDecorator(sal_Int32(19));
aRow[4] = ODatabaseMetaDataResultSet::getQuoteValue();
aRow[5] = ODatabaseMetaDataResultSet::getQuoteValue();
tmp.push_back(aRow);
- aRow[1] = new ORowSetValueDecorator(OUString("BOOL"));
+ aRow[1] = new ORowSetValueDecorator(u"BOOL"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::BIT);
aRow[3] = ODatabaseMetaDataResultSet::get1Value();
aRow[9] = ODatabaseMetaDataResultSet::getBasicValue();
tmp.push_back(aRow);
- aRow[1] = new ORowSetValueDecorator(OUString("DECIMAL"));
+ aRow[1] = new ORowSetValueDecorator(u"DECIMAL"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL);
aRow[3] = new ORowSetValueDecorator(sal_Int32(20));
aRow[15] = new ORowSetValueDecorator(sal_Int32(15));
tmp.push_back(aRow);
- aRow[1] = new ORowSetValueDecorator(OUString("DOUBLE"));
+ aRow[1] = new ORowSetValueDecorator(u"DOUBLE"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::DOUBLE);
aRow[3] = new ORowSetValueDecorator(sal_Int32(20));
aRow[15] = ODatabaseMetaDataResultSet::get0Value();
tmp.push_back(aRow);
- aRow[1] = new ORowSetValueDecorator(OUString("NUMERIC"));
+ aRow[1] = new ORowSetValueDecorator(u"NUMERIC"_ustr);
aRow[2] = new ORowSetValueDecorator(DataType::NUMERIC);
aRow[3] = new ORowSetValueDecorator(sal_Int32(20));
aRow[15] = new ORowSetValueDecorator(sal_Int32(20));
@@ -214,10 +212,10 @@ Reference< XResultSet > SAL_CALL OFlatDatabaseMetaData::getColumns(
switch(aRow[11]->getValue().getInt32())
{
case ColumnValue::NO_NULLS:
- aRow[18] = new ORowSetValueDecorator(OUString("NO"));
+ aRow[18] = new ORowSetValueDecorator(u"NO"_ustr);
break;
case ColumnValue::NULLABLE:
- aRow[18] = new ORowSetValueDecorator(OUString("YES"));
+ aRow[18] = new ORowSetValueDecorator(u"YES"_ustr);
break;
default:
aRow[18] = new ORowSetValueDecorator(OUString());
diff --git a/connectivity/source/drivers/flat/EDriver.cxx b/connectivity/source/drivers/flat/EDriver.cxx
index 29492895510e..e9cb465d327f 100644
--- a/connectivity/source/drivers/flat/EDriver.cxx
+++ b/connectivity/source/drivers/flat/EDriver.cxx
@@ -39,7 +39,7 @@ using namespace css::lang;
OUString SAL_CALL ODriver::getImplementationName( )
{
- return "com.sun.star.comp.sdbc.flat.ODriver";
+ return u"com.sun.star.comp.sdbc.flat.ODriver"_ustr;
}
@@ -54,7 +54,7 @@ connectivity_flat_ODriver(
}
if (ret)
ret->acquire();
- return static_cast<cppu::OWeakObject*>(ret.get());
+ return getXWeak(ret.get());
}
Reference< XConnection > SAL_CALL ODriver::connect( const OUString& url, const Sequence< PropertyValue >& info )
@@ -68,7 +68,7 @@ Reference< XConnection > SAL_CALL ODriver::connect( const OUString& url, const S
rtl::Reference<OFlatConnection> pCon = new OFlatConnection(this);
pCon->construct(url,info);
- m_xConnections.push_back(WeakReferenceHelper(*pCon));
+ m_xConnections.push_back(pCon.get());
return pCon;
}
@@ -82,43 +82,43 @@ Sequence< DriverPropertyInfo > SAL_CALL ODriver::getPropertyInfo( const OUString
{
if ( acceptsURL(url) )
{
- Sequence< OUString > aBoolean { "0", "1" };
+ Sequence< OUString > aBoolean { u"0"_ustr, u"1"_ustr };
std::vector< DriverPropertyInfo > aDriverInfo
{
{
- "FieldDelimiter"
- ,"Field separator."
+ u"FieldDelimiter"_ustr
+ ,u"Field separator."_ustr
,false
,{}
,{}
},
{
- "HeaderLine"
- ,"Text contains headers."
+ u"HeaderLine"_ustr
+ ,u"Text contains headers."_ustr
,false
- ,"0"
+ ,u"0"_ustr
,aBoolean
},
{
- "StringDelimiter"
- ,"Text separator."
+ u"StringDelimiter"_ustr
+ ,u"Text separator."_ustr
,false
- ,"0"
+ ,u"0"_ustr
,aBoolean
},
{
- "DecimalDelimiter"
- ,"Decimal separator."
+ u"DecimalDelimiter"_ustr
+ ,u"Decimal separator."_ustr
,false
- ,"0"
+ ,u"0"_ustr
,aBoolean
},
{
- "ThousandDelimiter"
- ,"Thousands separator."
+ u"ThousandDelimiter"_ustr
+ ,u"Thousands separator."_ustr
,false
- ,"0"
+ ,u"0"_ustr
,aBoolean
}
};
@@ -128,7 +128,6 @@ Sequence< DriverPropertyInfo > SAL_CALL ODriver::getPropertyInfo( const OUString
::connectivity::SharedResources aResources;
const OUString sMessage = aResources.getResourceString(STR_URI_SYNTAX_ERROR);
::dbtools::throwGenericSQLException(sMessage ,*this);
- return Sequence< DriverPropertyInfo >();
}
diff --git a/connectivity/source/drivers/flat/EPreparedStatement.cxx b/connectivity/source/drivers/flat/EPreparedStatement.cxx
index f4095ac2c087..90a8cb7d0127 100644
--- a/connectivity/source/drivers/flat/EPreparedStatement.cxx
+++ b/connectivity/source/drivers/flat/EPreparedStatement.cxx
@@ -22,14 +22,14 @@
using namespace connectivity::flat;
using namespace connectivity::file;
-using namespace ::com::sun::star::uno;
rtl::Reference<OResultSet> OFlatPreparedStatement::createResultSet()
{
return new OFlatResultSet(this, m_aSQLIterator);
}
-IMPLEMENT_SERVICE_INFO(OFlatPreparedStatement, "com.sun.star.sdbc.driver.flat.PreparedStatement",
- "com.sun.star.sdbc.PreparedStatement");
+IMPLEMENT_SERVICE_INFO(OFlatPreparedStatement,
+ u"com.sun.star.sdbc.driver.flat.PreparedStatement"_ustr,
+ u"com.sun.star.sdbc.PreparedStatement"_ustr);
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/flat/EResultSet.cxx b/connectivity/source/drivers/flat/EResultSet.cxx
index 2e8c2a391d97..57fd3ea1f324 100644
--- a/connectivity/source/drivers/flat/EResultSet.cxx
+++ b/connectivity/source/drivers/flat/EResultSet.cxx
@@ -46,12 +46,12 @@ OFlatResultSet::OFlatResultSet( OStatement_Base* pStmt,connectivity::OSQLParseTr
OUString SAL_CALL OFlatResultSet::getImplementationName( )
{
- return "com.sun.star.sdbcx.flat.ResultSet";
+ return u"com.sun.star.sdbcx.flat.ResultSet"_ustr;
}
Sequence< OUString > SAL_CALL OFlatResultSet::getSupportedServiceNames( )
{
- return { "com.sun.star.sdbc.ResultSet", "com.sun.star.sdbcx.ResultSet" };
+ return { u"com.sun.star.sdbc.ResultSet"_ustr, u"com.sun.star.sdbcx.ResultSet"_ustr };
}
sal_Bool SAL_CALL OFlatResultSet::supportsService( const OUString& _rServiceName )
@@ -96,7 +96,7 @@ Any SAL_CALL OFlatResultSet::getBookmark( )
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- return makeAny((*m_aRow)[0]->getValue().getInt32());
+ return Any((*m_aRow)[0]->getValue().getInt32());
}
sal_Bool SAL_CALL OFlatResultSet::moveToBookmark( const Any& bookmark )
diff --git a/connectivity/source/drivers/flat/EStatement.cxx b/connectivity/source/drivers/flat/EStatement.cxx
index dc801ac48653..795011ac61b1 100644
--- a/connectivity/source/drivers/flat/EStatement.cxx
+++ b/connectivity/source/drivers/flat/EStatement.cxx
@@ -22,13 +22,12 @@
using namespace connectivity::flat;
using namespace connectivity::file;
-using namespace css::uno;
rtl::Reference<OResultSet> OFlatStatement::createResultSet()
{
return new OFlatResultSet(this,m_aSQLIterator);
}
-IMPLEMENT_SERVICE_INFO(OFlatStatement,"com.sun.star.sdbc.driver.flat.Statement","com.sun.star.sdbc.Statement");
+IMPLEMENT_SERVICE_INFO(OFlatStatement,u"com.sun.star.sdbc.driver.flat.Statement"_ustr,u"com.sun.star.sdbc.Statement"_ustr);
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/flat/ETable.cxx b/connectivity/source/drivers/flat/ETable.cxx
index f4676c8712c6..cbf2f1805be5 100644
--- a/connectivity/source/drivers/flat/ETable.cxx
+++ b/connectivity/source/drivers/flat/ETable.cxx
@@ -27,7 +27,6 @@
#include <o3tl/safeint.hxx>
#include <rtl/math.hxx>
#include <sal/log.hxx>
-#include <tools/solar.h>
#include <tools/urlobj.hxx>
#include <cppuhelper/queryinterface.hxx>
#include <comphelper/numbers.hxx>
@@ -230,7 +229,6 @@ void OFlatTable::impl_fillColumnInfo_nothrow(QuotedTokenizedString const & aFirs
}
else
{
- bNumeric = true;
sal_Int32 nDot = 0;
sal_Int32 nDecimalDelCount = 0;
sal_Int32 nSpaceCount = 0;
@@ -266,8 +264,8 @@ void OFlatTable::impl_fillColumnInfo_nothrow(QuotedTokenizedString const & aFirs
if (bNumeric && cThousandDelimiter)
{
// Is the delimiter correct?
- const OUString aValue = aField2.getToken(0,cDecimalDelimiter);
- for( sal_Int32 j = aValue.getLength() - 4; j >= 0; j -= 4)
+ const std::u16string_view aValue = o3tl::getToken(aField2, 0, cDecimalDelimiter);
+ for( sal_Int32 j = static_cast<sal_Int32>(aValue.size()) - 4; j >= 0; j -= 4)
{
const sal_Unicode c = aValue[j];
// just digits, decimal- and thousands-delimiter?
@@ -416,7 +414,7 @@ void OFlatTable::construct()
m_xNumberFormatter.set( NumberFormatter::create( m_pConnection->getDriver()->getComponentContext()), UNO_QUERY_THROW);
m_xNumberFormatter->attachNumberFormatsSupplier(xSupplier);
Reference<XPropertySet> xProp = xSupplier->getNumberFormatSettings();
- xProp->getPropertyValue("NullDate") >>= m_aNullDate;
+ xProp->getPropertyValue(u"NullDate"_ustr) >>= m_aNullDate;
INetURLObject aURL;
aURL.SetURL(getEntry());
@@ -546,24 +544,10 @@ Any SAL_CALL OFlatTable::queryInterface( const Type & rType )
return Any();
Any aRet = OTable_TYPEDEF::queryInterface(rType);
- return aRet.hasValue() ? aRet : ::cppu::queryInterface(rType,static_cast< css::lang::XUnoTunnel*> (this));
+ return aRet;
}
-Sequence< sal_Int8 > OFlatTable::getUnoTunnelId()
-{
- static const comphelper::UnoIdInit implId;
- return implId.getSeq();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OFlatTable::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return comphelper::getSomethingImpl(rId, this,
- comphelper::FallbackToGetSomethingOf<OFlatTable_BASE>{});
-}
-
bool OFlatTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool bRetrieveData)
{
*(*_rRow)[0] = m_nFilePos;
@@ -675,7 +659,7 @@ bool OFlatTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool
// #99178# OJ
if ( DataType::DECIMAL == nType || DataType::NUMERIC == nType )
- *(*_rRow)[i] = OUString(OUString::number(nVal));
+ *(*_rRow)[i] = OUString::number(nVal);
else
*(*_rRow)[i] = nVal;
} break;
@@ -871,7 +855,7 @@ bool OFlatTable::readLine(sal_Int32 * const pEndPos, sal_Int32 * const pStartPos
{
if (pStartPos)
*pStartPos = static_cast<sal_Int32>(m_pFileStream->Tell());
- m_pFileStream->ReadByteStringLine(m_aCurrentLine, nEncoding);
+ m_pFileStream->ReadByteStringLine(m_aCurrentLine, nEncoding, 262144);
if (m_pFileStream->eof())
return false;
diff --git a/connectivity/source/drivers/flat/ETables.cxx b/connectivity/source/drivers/flat/ETables.cxx
index 2e4dd377ed83..b1a0859a7acb 100644
--- a/connectivity/source/drivers/flat/ETables.cxx
+++ b/connectivity/source/drivers/flat/ETables.cxx
@@ -22,20 +22,13 @@
#include <file/FCatalog.hxx>
using namespace connectivity;
-using namespace ::comphelper;
using namespace connectivity::flat;
using namespace connectivity::file;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbcx;
-using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::container;
-sdbcx::ObjectType OFlatTables::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > OFlatTables::createObject(const OUString& _rName)
{
rtl::Reference<OFlatTable> pRet = new OFlatTable(this, static_cast<OFlatConnection*>(static_cast<OFileCatalog&>(m_rParent).getConnection()),
- _rName,"TABLE");
+ _rName,u"TABLE"_ustr);
pRet->construct();
return pRet;
}
diff --git a/connectivity/source/drivers/hsqldb/HCatalog.cxx b/connectivity/source/drivers/hsqldb/HCatalog.cxx
index 1074be53559c..d905e67399f0 100644
--- a/connectivity/source/drivers/hsqldb/HCatalog.cxx
+++ b/connectivity/source/drivers/hsqldb/HCatalog.cxx
@@ -30,11 +30,8 @@
using namespace connectivity;
using namespace connectivity::hsqldb;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
OHCatalog::OHCatalog(const Reference< XConnection >& _xConnection) : sdbcx::OCatalog(_xConnection)
,m_xConnection(_xConnection)
@@ -44,8 +41,8 @@ OHCatalog::OHCatalog(const Reference< XConnection >& _xConnection) : sdbcx::OCat
void OHCatalog::refreshObjects(const Sequence< OUString >& _sKindOfObject,::std::vector< OUString>& _rNames)
{
Reference< XResultSet > xResult = m_xMetaData->getTables(Any(),
- "%",
- "%",
+ u"%"_ustr,
+ u"%"_ustr,
_sKindOfObject);
fillNames(xResult,_rNames);
}
@@ -54,7 +51,7 @@ void OHCatalog::refreshTables()
{
::std::vector< OUString> aVector;
- Sequence< OUString > sTableTypes {"VIEW", "TABLE"};
+ Sequence< OUString > sTableTypes {u"VIEW"_ustr, u"TABLE"_ustr};
refreshObjects(sTableTypes,aVector);
@@ -66,7 +63,7 @@ void OHCatalog::refreshTables()
void OHCatalog::refreshViews()
{
- Sequence< OUString > aTypes { "VIEW" };
+ Sequence< OUString > aTypes { u"VIEW"_ustr };
bool bSupportsViews = false;
try
@@ -103,7 +100,7 @@ void OHCatalog::refreshUsers()
{
::std::vector< OUString> aVector;
Reference< XStatement > xStmt = m_xConnection->createStatement( );
- Reference< XResultSet > xResult = xStmt->executeQuery("select User from hsqldb.user group by User");
+ Reference< XResultSet > xResult = xStmt->executeQuery(u"select User from hsqldb.user group by User"_ustr);
if ( xResult.is() )
{
Reference< XRow > xRow(xResult,UNO_QUERY);
diff --git a/connectivity/source/drivers/hsqldb/HColumns.cxx b/connectivity/source/drivers/hsqldb/HColumns.cxx
index 3f03c3616bc1..6906bde4435a 100644
--- a/connectivity/source/drivers/hsqldb/HColumns.cxx
+++ b/connectivity/source/drivers/hsqldb/HColumns.cxx
@@ -27,10 +27,6 @@ using namespace connectivity::sdbcx;
using namespace connectivity;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbcx;
-using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
OHSQLColumns::OHSQLColumns( ::cppu::OWeakObject& _rParent
,::osl::Mutex& _rMutex
@@ -69,7 +65,7 @@ void OHSQLColumn::construct()
Sequence< OUString > SAL_CALL OHSQLColumn::getSupportedServiceNames( )
{
- return { "com.sun.star.sdbcx.Column" };
+ return { u"com.sun.star.sdbcx.Column"_ustr };
}
diff --git a/connectivity/source/drivers/hsqldb/HConnection.cxx b/connectivity/source/drivers/hsqldb/HConnection.cxx
index 506bf5b075f9..032d02d90e8a 100644
--- a/connectivity/source/drivers/hsqldb/HConnection.cxx
+++ b/connectivity/source/drivers/hsqldb/HConnection.cxx
@@ -36,7 +36,7 @@
#include <cppuhelper/exc_hlp.hxx>
#include <rtl/ustrbuf.hxx>
#include <sal/log.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <resource/sharedresources.hxx>
#include <strings.hrc>
@@ -76,19 +76,17 @@ namespace connectivity::hsqldb
{
m_aFlushListeners.disposeAndClear( EventObject( *this ) );
OHsqlConnection_BASE::disposing();
- OConnectionWrapper::disposing();
}
OHsqlConnection::OHsqlConnection( const Reference< XDriver >& _rxDriver,
const Reference< XConnection >& _xConnection ,const Reference< XComponentContext >& _rxContext )
- :OHsqlConnection_BASE( m_aMutex )
- ,m_aFlushListeners( m_aMutex )
+ :m_aFlushListeners( m_aMutex )
,m_xDriver( _rxDriver )
,m_xContext( _rxContext )
,m_bIni(true)
,m_bReadOnly(false)
{
- setDelegation(_xConnection,_rxContext,m_refCount);
+ setDelegation(_xConnection, _rxContext);
}
OHsqlConnection::~OHsqlConnection()
@@ -100,9 +98,7 @@ namespace connectivity::hsqldb
}
}
- IMPLEMENT_FORWARD_XINTERFACE2(OHsqlConnection,OHsqlConnection_BASE,OConnectionWrapper)
- IMPLEMENT_SERVICE_INFO(OHsqlConnection, "com.sun.star.sdbc.drivers.hsqldb.OHsqlConnection", "com.sun.star.sdbc.Connection")
- IMPLEMENT_FORWARD_XTYPEPROVIDER2(OHsqlConnection,OHsqlConnection_BASE,OConnectionWrapper)
+ IMPLEMENT_SERVICE_INFO(OHsqlConnection, u"com.sun.star.sdbc.drivers.hsqldb.OHsqlConnection"_ustr, u"com.sun.star.sdbc.Connection"_ustr)
::osl::Mutex& OHsqlConnection::getMutex() const
@@ -144,7 +140,7 @@ namespace connectivity::hsqldb
if ( !m_bReadOnly )
{
Reference< XStatement > xStmt( m_xConnection->createStatement(), css::uno::UNO_SET_THROW );
- xStmt->execute( "CHECKPOINT DEFRAG" );
+ xStmt->execute( u"CHECKPOINT DEFRAG"_ustr );
}
}
catch(const Exception& )
@@ -281,8 +277,7 @@ namespace connectivity::hsqldb
::dbtools::qualifiedNameComponents( xMetaData, _rTableName, sCatalog, sSchema, sName, ::dbtools::EComposeRule::Complete );
// get the table information
- OUStringBuffer sSQL;
- sSQL.append( "SELECT HSQLDB_TYPE FROM INFORMATION_SCHEMA.SYSTEM_TABLES" );
+ OUStringBuffer sSQL( "SELECT HSQLDB_TYPE FROM INFORMATION_SCHEMA.SYSTEM_TABLES" );
HTools::appendTableFilterCrit( sSQL, sCatalog, sSchema, sName, true );
sSQL.append( " AND TABLE_TYPE = 'TABLE'" );
@@ -317,11 +312,9 @@ namespace connectivity::hsqldb
// ask the provider to obtain a graphic
Sequence< PropertyValue > aMediaProperties{ comphelper::makePropertyValue(
- "URL", OUString(
- // load the graphic from the global graphic repository
- "private:graphicrepository/"
+ u"URL"_ustr, u"private:graphicrepository/"
// the relative path within the images.zip
- LINKED_TEXT_TABLE_IMAGE_RESOURCE)) };
+ LINKED_TEXT_TABLE_IMAGE_RESOURCE ""_ustr) };
xGraphic = xProvider->queryGraphic( aMediaProperties );
OSL_ENSURE( xGraphic.is(), "OHsqlConnection::impl_getTextTableIcon_nothrow: the provider did not give us a graphic object!" );
}
diff --git a/connectivity/source/drivers/hsqldb/HDriver.cxx b/connectivity/source/drivers/hsqldb/HDriver.cxx
index 962e574879cf..f43584d1f169 100644
--- a/connectivity/source/drivers/hsqldb/HDriver.cxx
+++ b/connectivity/source/drivers/hsqldb/HDriver.cxx
@@ -50,7 +50,9 @@
#include <strings.hrc>
#include <resource/sharedresources.hxx>
#include <i18nlangtag/languagetag.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
+#include <o3tl/string_view.hxx>
+#include <vcl/svapp.hxx>
#include <memory>
@@ -68,9 +70,8 @@ namespace connectivity
using namespace css::embed;
using namespace css::io;
using namespace css::util;
- using namespace css::reflection;
- constexpr OUStringLiteral IMPL_NAME = u"com.sun.star.sdbcx.comp.hsqldb.Driver";
+ constexpr OUString IMPL_NAME = u"com.sun.star.sdbcx.comp.hsqldb.Driver"_ustr;
@@ -102,7 +103,7 @@ namespace connectivity
{
for (const auto& rConnection : m_aConnections)
{
- Reference<XInterface > xTemp = rConnection.first.get();
+ Reference<XConnection> xTemp(rConnection.xOrigConn);
::comphelper::disposeComponent(xTemp);
}
}
@@ -111,7 +112,6 @@ namespace connectivity
// not interested in
}
m_aConnections.clear();
- TWeakPairVector().swap(m_aConnections);
cppu::WeakComponentImplHelperBase::disposing();
}
@@ -121,7 +121,7 @@ namespace connectivity
if ( !m_xDriver.is() )
{
Reference<XDriverManager2> xDriverAccess = DriverManager::create( m_xContext );
- m_xDriver = xDriverAccess->getDriverByURL("jdbc:hsqldb:db");
+ m_xDriver = xDriverAccess->getDriverByURL(u"jdbc:hsqldb:db"_ustr);
}
return m_xDriver;
@@ -203,46 +203,43 @@ namespace connectivity
// properties for accessing the embedded storage
OUString sKey = StorageContainer::registerStorage( xStorage, sSystemPath );
- aProperties.put( "storage_key", sKey );
- aProperties.put( "storage_class_name",
- OUString( "com.sun.star.sdbcx.comp.hsqldb.StorageAccess" ) );
- aProperties.put( "fileaccess_class_name",
- OUString( "com.sun.star.sdbcx.comp.hsqldb.StorageFileAccess" ) );
+ aProperties.put( u"storage_key"_ustr, sKey );
+ aProperties.put( u"storage_class_name"_ustr,
+ u"com.sun.star.sdbcx.comp.hsqldb.StorageAccess"_ustr );
+ aProperties.put( u"fileaccess_class_name"_ustr,
+ u"com.sun.star.sdbcx.comp.hsqldb.StorageFileAccess"_ustr );
// JDBC driver and driver's classpath
- aProperties.put( "JavaDriverClass",
- OUString( "org.hsqldb.jdbcDriver" ) );
- aProperties.put( "JavaDriverClassPath",
- OUString(
+ aProperties.put( u"JavaDriverClass"_ustr, u"org.hsqldb.jdbcDriver"_ustr );
+ aProperties.put( u"JavaDriverClassPath"_ustr,
#ifdef SYSTEM_HSQLDB
- HSQLDB_JAR
+ u"" HSQLDB_JAR
#else
- "vnd.sun.star.expand:$LO_JAVA_DIR/hsqldb.jar"
+ u"vnd.sun.star.expand:$LO_JAVA_DIR/hsqldb.jar"
#endif
- " vnd.sun.star.expand:$LO_JAVA_DIR/sdbc_hsqldb.jar"
- ) );
+ " vnd.sun.star.expand:$LO_JAVA_DIR/sdbc_hsqldb.jar"_ustr );
// auto increment handling
- aProperties.put( "IsAutoRetrievingEnabled", true );
- aProperties.put( "AutoRetrievingStatement",
- OUString( "CALL IDENTITY()" ) );
- aProperties.put( "IgnoreDriverPrivileges", true );
+ aProperties.put( u"IsAutoRetrievingEnabled"_ustr, true );
+ aProperties.put( u"AutoRetrievingStatement"_ustr,
+ u"CALL IDENTITY()"_ustr );
+ aProperties.put( u"IgnoreDriverPrivileges"_ustr, true );
// don't want to expose HSQLDB's schema capabilities which exist since 1.8.0RC10
- aProperties.put( "default_schema",
- OUString( "true" ) );
+ aProperties.put( u"default_schema"_ustr,
+ u"true"_ustr );
// security: permitted Java classes
NamedValue aPermittedClasses(
- "hsqldb.method_class_names",
- makeAny( lcl_getPermittedJavaMethods_nothrow( m_xContext ) )
+ u"hsqldb.method_class_names"_ustr,
+ Any( lcl_getPermittedJavaMethods_nothrow( m_xContext ) )
);
- aProperties.put( "SystemProperties", Sequence< NamedValue >( &aPermittedClasses, 1 ) );
+ aProperties.put( u"SystemProperties"_ustr, Sequence< NamedValue >( &aPermittedClasses, 1 ) );
OUString sMessage;
try
{
- static const OUStringLiteral sProperties( u"properties" );
+ static constexpr OUString sProperties( u"properties"_ustr );
if ( !bIsNewDatabase && xStorage->isStreamElement(sProperties) )
{
Reference<XStream > xStream = xStorage->openStreamElement(sProperties,ElementModes::READ);
@@ -251,15 +248,15 @@ namespace connectivity
std::unique_ptr<SvStream> pStream( ::utl::UcbStreamHelper::CreateStream(xStream) );
if (pStream)
{
- OString sLine;
+ OStringBuffer sLine;
OString sVersionString;
while ( pStream->ReadLine(sLine) )
{
if ( sLine.isEmpty() )
continue;
sal_Int32 nIdx {0};
- const OString sIniKey = sLine.getToken(0, '=', nIdx);
- const OString sValue = sLine.getToken(0, '=', nIdx);
+ const std::string_view sIniKey = o3tl::getToken(sLine, 0, '=', nIdx);
+ const OString sValue(o3tl::getToken(sLine, 0, '=', nIdx));
if( sIniKey == "hsqldb.compatible_version" )
{
sVersionString = sValue;
@@ -275,9 +272,9 @@ namespace connectivity
if (!sVersionString.isEmpty())
{
sal_Int32 nIdx {0};
- const sal_Int32 nMajor = sVersionString.getToken(0, '.', nIdx).toInt32();
- const sal_Int32 nMinor = sVersionString.getToken(0, '.', nIdx).toInt32();
- const sal_Int32 nMicro = sVersionString.getToken(0, '.', nIdx).toInt32();
+ const sal_Int32 nMajor = o3tl::toInt32(o3tl::getToken(sVersionString, 0, '.', nIdx));
+ const sal_Int32 nMinor = o3tl::toInt32(o3tl::getToken(sVersionString, 0, '.', nIdx));
+ const sal_Int32 nMicro = o3tl::toInt32(o3tl::getToken(sVersionString, 0, '.', nIdx));
if ( nMajor > 1
|| ( nMajor == 1 && nMinor > 8 )
|| ( nMajor == 1 && nMinor == 8 && nMicro > 0 ) )
@@ -290,6 +287,37 @@ namespace connectivity
} // if ( xStream.is() )
::comphelper::disposeComponent(xStream);
}
+
+ // disallow any database/script files that contain a "SCRIPT[.*]" entry (this is belt and braces
+ // in that bundled hsqldb 1.8.0 is patched to also reject them)
+ //
+ // hsqldb 2.6.0 release notes have: added system role SCRIPT_OPS for export / import of database structure and data
+ // which seems to provide a builtin way to do this with contemporary hsqldb
+ static constexpr OUString sScript(u"script"_ustr);
+ if (!bIsNewDatabase && xStorage->isStreamElement(sScript))
+ {
+ Reference<XStream > xStream = xStorage->openStreamElement(sScript, ElementModes::READ);
+ if (xStream.is())
+ {
+ std::unique_ptr<SvStream> pStream(::utl::UcbStreamHelper::CreateStream(xStream));
+ if (pStream)
+ {
+ OStringBuffer sLine;
+ while (pStream->ReadLine(sLine))
+ {
+ OString sText = sLine.makeStringAndClear().trim();
+ if (sText.startsWithIgnoreAsciiCase("SCRIPT"))
+ {
+ ::connectivity::SharedResources aResources;
+ sMessage = aResources.getResourceString(STR_COULD_NOT_LOAD_FILE).replaceFirst("$filename$", sSystemPath);
+ break;
+ }
+ }
+ }
+ } // if ( xStream.is() )
+ ::comphelper::disposeComponent(xStream);
+ }
+
}
catch(Exception&)
{
@@ -304,10 +332,10 @@ namespace connectivity
if ( xProp.is() )
{
sal_Int32 nMode = 0;
- xProp->getPropertyValue("OpenMode") >>= nMode;
+ xProp->getPropertyValue(u"OpenMode"_ustr) >>= nMode;
if ( (nMode & ElementModes::WRITE) != ElementModes::WRITE )
{
- aProperties.put( "readonly", OUString( "true" ) );
+ aProperties.put( u"readonly"_ustr, u"true"_ustr );
}
}
@@ -342,7 +370,7 @@ namespace connectivity
xComp->addEventListener(this);
// we want to close all connections when the office shuts down
- static Reference< XTerminateListener> s_xTerminateListener = [&]()
+ static rtl::Reference< OConnectionController > s_xTerminateListener = [&]()
{
Reference< XDesktop2 > xDesktop = Desktop::create( m_xContext );
@@ -352,13 +380,12 @@ namespace connectivity
}();
Reference< XComponent> xIfc = new OHsqlConnection( this, xOrig, m_xContext );
xConnection.set(xIfc,UNO_QUERY);
- m_aConnections.push_back(TWeakPair(WeakReferenceHelper(xOrig),TWeakConnectionPair(sKey,TWeakRefPair(WeakReferenceHelper(xConnection),WeakReferenceHelper()))));
+ m_aConnections.push_back( { xOrig, sKey, xConnection, nullptr } );
Reference<XTransactionBroadcaster> xBroad(xStorage,UNO_QUERY);
if ( xBroad.is() )
{
- Reference<XTransactionListener> xListener(*this,UNO_QUERY);
- xBroad->addTransactionListener(xListener);
+ xBroad->addTransactionListener(Reference<XTransactionListener>(this));
}
}
}
@@ -396,24 +423,24 @@ namespace connectivity
return
{
{
- "Storage",
- "Defines the storage where the database will be stored.",
+ u"Storage"_ustr,
+ u"Defines the storage where the database will be stored."_ustr,
true,
{},
{}
},
{
- "URL",
- "Defines the url of the data source.",
+ u"URL"_ustr,
+ u"Defines the url of the data source."_ustr,
true,
{},
{}
},
{
- "AutoRetrievingStatement",
- "Defines the statement which will be executed to retrieve auto increment values.",
+ u"AutoRetrievingStatement"_ustr,
+ u"Defines the statement which will be executed to retrieve auto increment values."_ustr,
false,
- "CALL IDENTITY()",
+ u"CALL IDENTITY()"_ustr,
{}
}
};
@@ -437,18 +464,18 @@ namespace connectivity
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(ODriverDelegator_BASE::rBHelper.bDisposed);
- Reference< XTablesSupplier > xTab;
+ rtl::Reference< OHCatalog > xTab;
- TWeakPairVector::iterator i = std::find_if(m_aConnections.begin(), m_aConnections.end(),
- [&connection](const TWeakPairVector::value_type& rConnection) {
- return rConnection.second.second.first.get() == connection.get(); });
+ auto i = std::find_if(m_aConnections.begin(), m_aConnections.end(),
+ [&connection](const TConnectionInfo& rConnection) {
+ return rConnection.xConn.get() == connection.get(); });
if (i != m_aConnections.end())
{
- xTab.set(i->second.second.second,UNO_QUERY);
+ xTab = i->xCatalog.get();
if ( !xTab.is() )
{
xTab = new OHCatalog(connection);
- i->second.second.second = WeakReferenceHelper(xTab);
+ i->xCatalog = xTab.get();
}
}
@@ -482,33 +509,40 @@ namespace connectivity
Sequence< OUString > SAL_CALL ODriverDelegator::getSupportedServiceNames( )
{
- return { "com.sun.star.sdbc.Driver", "com.sun.star.sdbcx.Driver" };
+ return { u"com.sun.star.sdbc.Driver"_ustr, u"com.sun.star.sdbcx.Driver"_ustr };
}
void SAL_CALL ODriverDelegator::createCatalog( const Sequence< PropertyValue >& /*info*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XCreateCatalog::createCatalog", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XCreateCatalog::createCatalog"_ustr, *this );
}
- void ODriverDelegator::shutdownConnection(const TWeakPairVector::iterator& _aIter )
+ void ODriverDelegator::shutdownConnection(const std::vector<TConnectionInfo>::iterator& _aIter )
{
OSL_ENSURE(m_aConnections.end() != _aIter,"Iterator equals .end()");
bool bLastOne = true;
try
{
- Reference<XConnection> _xConnection(_aIter->first.get(),UNO_QUERY);
+ Reference<XConnection> _xConnection(_aIter->xOrigConn);
if ( _xConnection.is() )
{
Reference<XStatement> xStmt = _xConnection->createStatement();
if ( xStmt.is() )
{
- Reference<XResultSet> xRes = xStmt->executeQuery("SELECT COUNT(*) FROM INFORMATION_SCHEMA.SYSTEM_SESSIONS WHERE USER_NAME ='SA'");
+ Reference<XResultSet> xRes = xStmt->executeQuery(u"SELECT COUNT(*) FROM INFORMATION_SCHEMA.SYSTEM_SESSIONS WHERE USER_NAME ='SA'"_ustr);
Reference<XRow> xRow(xRes,UNO_QUERY);
if ( xRow.is() && xRes->next() )
bLastOne = xRow->getInt(1) == 1;
if ( bLastOne )
- xStmt->execute("SHUTDOWN");
+ {
+ // during shutdown, we are running on the main thread, and if we call this,
+ // it might trigger dbaccess::DocumentEventNotifier_Impl::impl_notifyEvent_nothrow
+ // which is running on a different thread, and that will call other code that tries
+ // to take the solar mutex.
+ SolarMutexReleaser aReleaser;
+ xStmt->execute(u"SHUTDOWN"_ustr);
+ }
}
}
}
@@ -519,7 +553,7 @@ namespace connectivity
{
// Reference<XTransactionListener> xListener(*this,UNO_QUERY);
// a shutdown should commit all changes to the db files
- StorageContainer::revokeStorage(_aIter->second.first,nullptr);
+ StorageContainer::revokeStorage(_aIter->sKey,nullptr);
}
if ( !m_bInShutDownConnections )
m_aConnections.erase(_aIter);
@@ -531,8 +565,8 @@ namespace connectivity
Reference<XConnection> xCon(Source.Source,UNO_QUERY);
if ( xCon.is() )
{
- TWeakPairVector::iterator i = std::find_if(m_aConnections.begin(), m_aConnections.end(),
- [&xCon](const TWeakPairVector::value_type& rConnection) { return rConnection.first.get() == xCon.get(); });
+ auto i = std::find_if(m_aConnections.begin(), m_aConnections.end(),
+ [&xCon](const TConnectionInfo& rConnection) { return rConnection.xOrigConn.get() == xCon.get(); });
if (i != m_aConnections.end())
shutdownConnection(i);
@@ -543,9 +577,9 @@ namespace connectivity
if ( xStorage.is() )
{
OUString sKey = StorageContainer::getRegisteredKey(xStorage);
- TWeakPairVector::iterator i = std::find_if(m_aConnections.begin(),m_aConnections.end(),
- [&sKey] (const TWeakPairVector::value_type& conn) {
- return conn.second.first == sKey;
+ auto i = std::find_if(m_aConnections.begin(),m_aConnections.end(),
+ [&sKey] (const TConnectionInfo& conn) {
+ return conn.sKey == sKey;
});
if ( i != m_aConnections.end() )
@@ -561,7 +595,7 @@ namespace connectivity
{
try
{
- Reference<XConnection> xCon(rConnection.first,UNO_QUERY);
+ Reference<XConnection> xCon(rConnection.xOrigConn);
::comphelper::disposeComponent(xCon);
}
catch(Exception&)
@@ -578,7 +612,7 @@ namespace connectivity
{
try
{
- Reference<XFlushable> xCon(rConnection.second.second.first.get(),UNO_QUERY);
+ Reference<XFlushable> xCon(rConnection.xConn.get(),UNO_QUERY);
if (xCon.is())
xCon->flush();
}
@@ -598,9 +632,9 @@ namespace connectivity
if ( sKey.isEmpty() )
return;
- TWeakPairVector::const_iterator i = std::find_if(m_aConnections.begin(), m_aConnections.end(),
- [&sKey] (const TWeakPairVector::value_type& conn) {
- return conn.second.first == sKey;
+ auto i = std::find_if(m_aConnections.begin(), m_aConnections.end(),
+ [&sKey] (const TConnectionInfo& conn) {
+ return conn.sKey == sKey;
});
OSL_ENSURE( i != m_aConnections.end(), "ODriverDelegator::preCommit: they're committing a storage which I do not know!" );
@@ -609,13 +643,13 @@ namespace connectivity
try
{
- Reference<XConnection> xConnection(i->first,UNO_QUERY);
+ Reference<XConnection> xConnection(i->xOrigConn);
if ( xConnection.is() )
{
Reference< XStatement> xStmt = xConnection->createStatement();
OSL_ENSURE( xStmt.is(), "ODriverDelegator::preCommit: no statement!" );
if ( xStmt.is() )
- xStmt->execute( "SET WRITE_DELAY 0" );
+ xStmt->execute( u"SET WRITE_DELAY 0"_ustr );
bool bPreviousAutoCommit = xConnection->getAutoCommit();
xConnection->setAutoCommit( false );
@@ -623,7 +657,7 @@ namespace connectivity
xConnection->setAutoCommit( bPreviousAutoCommit );
if ( xStmt.is() )
- xStmt->execute( "SET WRITE_DELAY 60" );
+ xStmt->execute( u"SET WRITE_DELAY 60"_ustr );
}
}
catch(Exception&)
@@ -784,7 +818,7 @@ namespace connectivity
OUString lcl_getSystemLocale( const Reference< XComponentContext >& _rxContext )
{
- OUString sLocaleString = "en-US";
+ OUString sLocaleString = u"en-US"_ustr;
try
{
@@ -795,13 +829,13 @@ namespace connectivity
// arguments for creating the config access
Sequence<Any> aArguments(comphelper::InitAnyPropertySequence(
{
- {"nodepath", Any(OUString("/org.openoffice.Setup/L10N" ))}, // the path to the node to open
+ {"nodepath", Any(u"/org.openoffice.Setup/L10N"_ustr)}, // the path to the node to open
{"depth", Any(sal_Int32(-1))}, // the depth: -1 means unlimited
}));
// create the access
Reference< XPropertySet > xNode(
xConfigProvider->createInstanceWithArguments(
- "com.sun.star.configuration.ConfigurationAccess",
+ u"com.sun.star.configuration.ConfigurationAccess"_ustr,
aArguments ),
UNO_QUERY );
OSL_ENSURE( xNode.is(), "lcl_getSystemLocale: invalid access returned (should throw an exception instead)!" );
@@ -809,7 +843,7 @@ namespace connectivity
// ask for the system locale setting
if ( xNode.is() )
- xNode->getPropertyValue("ooSetupSystemLocale") >>= sLocaleString;
+ xNode->getPropertyValue(u"ooSetupSystemLocale"_ustr) >>= sLocaleString;
}
catch( const Exception& )
{
@@ -833,8 +867,7 @@ namespace connectivity
OSL_ENSURE( xStatement.is(), "ODriverDelegator::onConnectedNewDatabase: could not create a statement!" );
if ( xStatement.is() )
{
- OUStringBuffer aStatement;
- aStatement.append( "SET DATABASE COLLATION \"" );
+ OUStringBuffer aStatement( "SET DATABASE COLLATION \"" );
aStatement.appendAscii( lcl_getCollationForLocale( lcl_getSystemLocale( m_xContext ) ) );
aStatement.append( "\"" );
diff --git a/connectivity/source/drivers/hsqldb/HStorageAccess.cxx b/connectivity/source/drivers/hsqldb/HStorageAccess.cxx
index 09ab485d9fd7..3e874dbbeddc 100644
--- a/connectivity/source/drivers/hsqldb/HStorageAccess.cxx
+++ b/connectivity/source/drivers/hsqldb/HStorageAccess.cxx
@@ -22,17 +22,14 @@
#include <hsqldb/HStorageMap.hxx>
#include "accesslog.hxx"
#include <osl/diagnose.h>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <string.h>
#include <algorithm>
-using namespace ::com::sun::star::container;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::embed;
using namespace ::com::sun::star::io;
-using namespace ::com::sun::star::lang;
using namespace ::connectivity::hsqldb;
#define ThrowException(env, type, msg) { \
@@ -148,28 +145,28 @@ jint read_from_storage_stream( JNIEnv * env, jstring name, jstring key )
std::shared_ptr<StreamHelper> pHelper = StorageContainer::getRegisteredStream(env,name,key);
Reference< XInputStream> xIn = pHelper ? pHelper->getInputStream() : Reference< XInputStream>();
OSL_ENSURE(xIn.is(),"Input stream is NULL!");
- if ( xIn.is() )
+ if ( !xIn.is() )
+ return -1;
+
+ Sequence< ::sal_Int8 > aData(1);
+ sal_Int32 nBytesRead = -1;
+ try
{
- Sequence< ::sal_Int8 > aData(1);
- sal_Int32 nBytesRead = -1;
- try
- {
- nBytesRead = xIn->readBytes(aData,1);
- }
- catch(const Exception& e)
- {
- StorageContainer::throwJavaException(e,env);
- return -1;
+ nBytesRead = xIn->readBytes(aData,1);
+ }
+ catch(const Exception& e)
+ {
+ StorageContainer::throwJavaException(e,env);
+ return -1;
- }
- if (nBytesRead <= 0)
- {
- return -1;
- }
- else
- {
- return static_cast<unsigned char>(aData[0]);
- }
+ }
+ if (nBytesRead <= 0)
+ {
+ return -1;
+ }
+ else
+ {
+ return static_cast<unsigned char>(aData[0]);
}
return -1;
}
@@ -341,10 +338,15 @@ extern "C" SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_Nativ
#endif
std::shared_ptr<StreamHelper> pHelper = StorageContainer::getRegisteredStream(env,name,key);
- Reference< XSeekable> xSeek = pHelper ? pHelper->getSeek() : Reference< XSeekable>();
- OSL_ENSURE(xSeek.is(),"No Seekable stream!");
- if ( !xSeek.is() )
+ OSL_ENSURE(pHelper, "No StreamHelper!");
+ if (!pHelper)
+ return;
+
+ Reference< XSeekable> xSeek = pHelper->getSeek();
+
+ OSL_ENSURE(xSeek.is(), "No Seekable stream!");
+ if (!xSeek)
return;
#ifdef HSQLDB_DBG
@@ -362,22 +364,22 @@ extern "C" SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_Nativ
Reference< XOutputStream> xOut = pHelper->getOutputStream();
OSL_ENSURE(xOut.is(),"No output stream!");
- ::sal_Int64 diff = position - nLen;
- sal_Int32 n;
- while( diff != 0 )
+ sal_Int64 diff = position - nLen, n;
+ while (diff != 0)
{
- if ( BUFFER_SIZE < diff )
+ if (diff > BUFFER_SIZE)
{
- n = static_cast<sal_Int32>(BUFFER_SIZE);
+ n = BUFFER_SIZE;
diff = diff - BUFFER_SIZE;
}
else
{
- n = static_cast<sal_Int32>(diff);
+ n = diff;
diff = 0;
}
- Sequence< ::sal_Int8 > aData(n);
- memset(aData.getArray(),0,n);
+ assert(n >= 0 && n <= SAL_MAX_INT32 && "this fits in sal_Int32");
+ Sequence<sal_Int8> aData(n);
+ memset(aData.getArray(), 0, n);
xOut->writeBytes(aData);
#ifdef HSQLDB_DBG
aDataLog.write( aData.getConstArray(), n );
diff --git a/connectivity/source/drivers/hsqldb/HStorageMap.cxx b/connectivity/source/drivers/hsqldb/HStorageMap.cxx
index 63b5e0481c5c..822a655675d2 100644
--- a/connectivity/source/drivers/hsqldb/HStorageMap.cxx
+++ b/connectivity/source/drivers/hsqldb/HStorageMap.cxx
@@ -27,7 +27,7 @@
#include <sal/log.hxx>
#include <uno/mapping.hxx>
#include <algorithm>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
namespace connectivity::hsqldb
{
@@ -103,14 +103,14 @@ namespace connectivity::hsqldb
{
css::uno::Environment env(css::uno::Environment::getCurrent());
if (!(env.is() && storageEnvironment.is())) {
- throw css::uno::RuntimeException("cannot get environments");
+ throw css::uno::RuntimeException(u"cannot get environments"_ustr);
}
if (env.get() == storageEnvironment.get()) {
return storage;
} else {
css::uno::Mapping map(storageEnvironment, env);
if (!map.is()) {
- throw css::uno::RuntimeException("cannot get mapping");
+ throw css::uno::RuntimeException(u"cannot get mapping"_ustr);
}
css::uno::Reference<css::embed::XStorage> mapped;
map.mapInterface(
@@ -132,9 +132,9 @@ namespace connectivity::hsqldb
return OUString::number(s_nCount++);
}
- OUString StorageContainer::removeURLPrefix(const OUString& _sURL,const OUString& _sFileURL)
+ OUString StorageContainer::removeURLPrefix(std::u16string_view _sURL, std::u16string_view _sFileURL)
{
- return _sURL.copy(_sFileURL.getLength()+1);
+ return OUString(_sURL.substr(_sFileURL.size()+1));
}
OUString StorageContainer::removeOldURLPrefix(const OUString& _sURL)
diff --git a/connectivity/source/drivers/hsqldb/HTable.cxx b/connectivity/source/drivers/hsqldb/HTable.cxx
index 9a23b6052468..05338f21aef2 100644
--- a/connectivity/source/drivers/hsqldb/HTable.cxx
+++ b/connectivity/source/drivers/hsqldb/HTable.cxx
@@ -29,7 +29,7 @@
#include <hsqldb/HColumns.hxx>
#include <TConnection.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
using namespace ::comphelper;
@@ -115,19 +115,6 @@ sdbcx::OCollection* OHSQLTable::createIndexes(const ::std::vector< OUString>& _r
return new OIndexesHelper(this,m_aMutex,_rNames);
}
-Sequence< sal_Int8 > OHSQLTable::getUnoTunnelId()
-{
- static const comphelper::UnoIdInit implId;
- return implId.getSeq();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OHSQLTable::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return comphelper::getSomethingImpl(rId, this,
- comphelper::FallbackToGetSomethingOf<OTable_TYPEDEF>{});
-}
// XAlterTable
void SAL_CALL OHSQLTable::alterColumnByName( const OUString& colName, const Reference< XPropertySet >& descriptor )
@@ -259,7 +246,7 @@ void OHSQLTable::alterColumnType(sal_Int32 nNewType,const OUString& _rColName, c
rtl::Reference<OHSQLColumn> pColumn = new OHSQLColumn;
::comphelper::copyProperties(_xDescriptor,pColumn);
- pColumn->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE),makeAny(nNewType));
+ pColumn->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE),Any(nNewType));
sSql += ::dbtools::createStandardColumnPart(pColumn,getConnection());
executeStatement(sSql);
@@ -289,7 +276,7 @@ void OHSQLTable::dropDefaultValue(const OUString& _rColName)
OUString OHSQLTable::getAlterTableColumnPart() const
{
- OUString sSql( "ALTER TABLE " );
+ OUString sSql( u"ALTER TABLE "_ustr );
OUString sComposedName( ::dbtools::composeTableName( getMetaData(), m_CatalogName, m_SchemaName, m_Name, true, ::dbtools::EComposeRule::InTableDefinitions ) );
sSql += sComposedName;
@@ -351,7 +338,7 @@ void SAL_CALL OHSQLTable::rename( const OUString& newName )
if(!isNew())
{
- OUString sSql = "ALTER ";
+ OUString sSql = u"ALTER "_ustr;
if ( m_Type == "VIEW" )
sSql += " VIEW ";
else
diff --git a/connectivity/source/drivers/hsqldb/HTables.cxx b/connectivity/source/drivers/hsqldb/HTables.cxx
index de818686b49d..dcb1ee1a33d9 100644
--- a/connectivity/source/drivers/hsqldb/HTables.cxx
+++ b/connectivity/source/drivers/hsqldb/HTables.cxx
@@ -37,43 +37,42 @@ using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
using namespace dbtools;
-sdbcx::ObjectType OTables::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > OTables::createObject(const OUString& _rName)
{
OUString sCatalog,sSchema,sTable;
::dbtools::qualifiedNameComponents(m_xMetaData,_rName,sCatalog,sSchema,sTable,::dbtools::EComposeRule::InDataManipulation);
- Sequence< OUString > sTableTypes {"VIEW", "TABLE", "%"}; // this last one just to be sure to include anything else...
+ Sequence< OUString > sTableTypes {u"VIEW"_ustr, u"TABLE"_ustr, u"%"_ustr}; // this last one just to be sure to include anything else...
Any aCatalog;
if ( !sCatalog.isEmpty() )
aCatalog <<= sCatalog;
Reference< XResultSet > xResult = m_xMetaData->getTables(aCatalog,sSchema,sTable,sTableTypes);
- sdbcx::ObjectType xRet;
- if ( xResult.is() )
+ if ( !xResult.is() )
+ return nullptr;
+
+ rtl::Reference< OHSQLTable > xRet;
+ Reference< XRow > xRow(xResult,UNO_QUERY);
+ if ( xResult->next() ) // there can be only one table with this name
{
- Reference< XRow > xRow(xResult,UNO_QUERY);
- if ( xResult->next() ) // there can be only one table with this name
- {
- sal_Int32 nPrivileges = ::dbtools::getTablePrivileges( m_xMetaData, sCatalog, sSchema, sTable );
- if ( m_xMetaData->isReadOnly() )
- nPrivileges &= ~( Privilege::INSERT | Privilege::UPDATE | Privilege::DELETE | Privilege::CREATE | Privilege::ALTER | Privilege::DROP );
-
- // obtain privileges
- xRet = new OHSQLTable( this
- ,static_cast<OHCatalog&>(m_rParent).getConnection()
- ,sTable
- ,xRow->getString(4)
- ,xRow->getString(5)
- ,sSchema
- ,sCatalog
- ,nPrivileges);
- }
- ::comphelper::disposeComponent(xResult);
+ sal_Int32 nPrivileges = ::dbtools::getTablePrivileges( m_xMetaData, sCatalog, sSchema, sTable );
+ if ( m_xMetaData->isReadOnly() )
+ nPrivileges &= ~( Privilege::INSERT | Privilege::UPDATE | Privilege::DELETE | Privilege::CREATE | Privilege::ALTER | Privilege::DROP );
+
+ // obtain privileges
+ xRet = new OHSQLTable( this
+ ,static_cast<OHCatalog&>(m_rParent).getConnection()
+ ,sTable
+ ,xRow->getString(4)
+ ,xRow->getString(5)
+ ,sSchema
+ ,sCatalog
+ ,nPrivileges);
}
+ ::comphelper::disposeComponent(xResult);
return xRet;
}
@@ -95,7 +94,7 @@ Reference< XPropertySet > OTables::createDescriptor()
}
// XAppend
-sdbcx::ObjectType OTables::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
+css::uno::Reference< css::beans::XPropertySet > OTables::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
{
createTable(descriptor);
return createObject( _rForName );
@@ -115,7 +114,7 @@ void OTables::dropObject(sal_Int32 _nPos,const OUString& _sElementName)
OUString sCatalog,sSchema,sTable;
::dbtools::qualifiedNameComponents(m_xMetaData,_sElementName,sCatalog,sSchema,sTable,::dbtools::EComposeRule::InDataManipulation);
- OUString aSql( "DROP " );
+ OUString aSql( u"DROP "_ustr );
Reference<XPropertySet> xProp(xObject,UNO_QUERY);
bool bIsView;
@@ -160,13 +159,13 @@ void OTables::appendNew(const OUString& _rsNewTable)
insertElement(_rsNewTable,nullptr);
// notify our container listeners
- ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_rsNewTable), Any(), Any());
+ ContainerEvent aEvent(static_cast<XContainer*>(this), Any(_rsNewTable), Any(), Any());
OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners);
while (aListenerLoop.hasMoreElements())
aListenerLoop.next()->elementInserted(aEvent);
}
-OUString OTables::getNameForObject(const sdbcx::ObjectType& _xObject)
+OUString OTables::getNameForObject(const css::uno::Reference< css::beans::XPropertySet >& _xObject)
{
OSL_ENSURE(_xObject.is(),"OTables::getNameForObject: Object is NULL!");
return ::dbtools::composeTableName( m_xMetaData, _xObject, ::dbtools::EComposeRule::InDataManipulation, false );
diff --git a/connectivity/source/drivers/hsqldb/HTerminateListener.cxx b/connectivity/source/drivers/hsqldb/HTerminateListener.cxx
index a9df5ccc9b9a..7c6b494488db 100644
--- a/connectivity/source/drivers/hsqldb/HTerminateListener.cxx
+++ b/connectivity/source/drivers/hsqldb/HTerminateListener.cxx
@@ -23,7 +23,6 @@
namespace connectivity
{
using namespace hsqldb;
-using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::lang;
// XEventListener
diff --git a/connectivity/source/drivers/hsqldb/HTerminateListener.hxx b/connectivity/source/drivers/hsqldb/HTerminateListener.hxx
index baf66e90eb1e..265be80ef5b9 100644
--- a/connectivity/source/drivers/hsqldb/HTerminateListener.hxx
+++ b/connectivity/source/drivers/hsqldb/HTerminateListener.hxx
@@ -23,23 +23,23 @@
namespace connectivity::hsqldb
+{
+ class ODriverDelegator;
+ class OConnectionController : public ::cppu::WeakImplHelper< css::frame::XTerminateListener >
{
- class ODriverDelegator;
- class OConnectionController : public ::cppu::WeakImplHelper< css::frame::XTerminateListener >
- {
- ODriverDelegator* m_pDriver;
- protected:
- virtual ~OConnectionController() override {m_pDriver = nullptr;}
- public:
- explicit OConnectionController(ODriverDelegator* _pDriver) : m_pDriver(_pDriver){}
+ ODriverDelegator* m_pDriver;
+ protected:
+ virtual ~OConnectionController() override {m_pDriver = nullptr;}
+ public:
+ explicit OConnectionController(ODriverDelegator* _pDriver) : m_pDriver(_pDriver){}
- // XEventListener
- virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
+ // XEventListener
+ virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
- // XTerminateListener
- virtual void SAL_CALL queryTermination( const css::lang::EventObject& aEvent ) override;
- virtual void SAL_CALL notifyTermination( const css::lang::EventObject& aEvent ) override;
- };
+ // XTerminateListener
+ virtual void SAL_CALL queryTermination( const css::lang::EventObject& aEvent ) override;
+ virtual void SAL_CALL notifyTermination( const css::lang::EventObject& aEvent ) override;
+ };
} // namespace connectivity::hsqldb
diff --git a/connectivity/source/drivers/hsqldb/HUser.cxx b/connectivity/source/drivers/hsqldb/HUser.cxx
index 2ed0c06262ff..95cb68ea517f 100644
--- a/connectivity/source/drivers/hsqldb/HUser.cxx
+++ b/connectivity/source/drivers/hsqldb/HUser.cxx
@@ -27,6 +27,7 @@
#include <com/sun/star/sdbcx/PrivilegeObject.hpp>
#include <TConnection.hxx>
#include <strings.hrc>
+#include <utility>
using namespace connectivity;
using namespace connectivity::hsqldb;
@@ -37,16 +38,16 @@ using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
using namespace ::com::sun::star::lang;
-OHSQLUser::OHSQLUser( const css::uno::Reference< css::sdbc::XConnection >& _xConnection) : connectivity::sdbcx::OUser(true)
- ,m_xConnection(_xConnection)
+OHSQLUser::OHSQLUser( css::uno::Reference< css::sdbc::XConnection > _xConnection) : connectivity::sdbcx::OUser(true)
+ ,m_xConnection(std::move(_xConnection))
{
construct();
}
-OHSQLUser::OHSQLUser( const css::uno::Reference< css::sdbc::XConnection >& _xConnection,
+OHSQLUser::OHSQLUser( css::uno::Reference< css::sdbc::XConnection > _xConnection,
const OUString& Name
) : connectivity::sdbcx::OUser(Name,true)
- ,m_xConnection(_xConnection)
+ ,m_xConnection(std::move(_xConnection))
{
construct();
}
@@ -113,7 +114,7 @@ void OHSQLUser::findPrivilegesAndGrantPrivileges(const OUString& objName, sal_In
Any aCatalog;
if ( !sCatalog.isEmpty() )
aCatalog <<= sCatalog;
- xRes = xMeta->getColumnPrivileges(aCatalog,sSchema,sTable,"%");
+ xRes = xMeta->getColumnPrivileges(aCatalog,sSchema,sTable,u"%"_ustr);
}
break;
}
@@ -266,7 +267,7 @@ void SAL_CALL OHSQLUser::changePassword( const OUString& /*oldPassword*/, const
if( m_Name != xMeta->getUserName() )
{
- ::dbtools::throwGenericSQLException("HSQLDB can only change password of the current user.", *this);
+ ::dbtools::throwGenericSQLException(u"HSQLDB can only change password of the current user."_ustr, *this);
}
OUString sAlterPwd = "SET PASSWORD " +
diff --git a/connectivity/source/drivers/hsqldb/HUsers.cxx b/connectivity/source/drivers/hsqldb/HUsers.cxx
index 9fe31e58eb01..2141a0045d58 100644
--- a/connectivity/source/drivers/hsqldb/HUsers.cxx
+++ b/connectivity/source/drivers/hsqldb/HUsers.cxx
@@ -23,6 +23,7 @@
#include <comphelper/types.hxx>
#include <connectivity/dbtools.hxx>
#include <TConnection.hxx>
+#include <utility>
using namespace ::comphelper;
using namespace connectivity;
@@ -30,22 +31,20 @@ using namespace connectivity::hsqldb;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
OUsers::OUsers( ::cppu::OWeakObject& _rParent,
::osl::Mutex& _rMutex,
const ::std::vector< OUString> &_rVector,
- const css::uno::Reference< css::sdbc::XConnection >& _xConnection,
+ css::uno::Reference< css::sdbc::XConnection > _xConnection,
connectivity::sdbcx::IRefreshableUsers* _pParent)
: sdbcx::OCollection(_rParent, true, _rMutex, _rVector)
- ,m_xConnection(_xConnection)
+ ,m_xConnection(std::move(_xConnection))
,m_pParent(_pParent)
{
}
-sdbcx::ObjectType OUsers::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > OUsers::createObject(const OUString& _rName)
{
return new OHSQLUser(m_xConnection,_rName);
}
@@ -61,7 +60,7 @@ Reference< XPropertySet > OUsers::createDescriptor()
}
// XAppend
-sdbcx::ObjectType OUsers::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
+css::uno::Reference< css::beans::XPropertySet > OUsers::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
{
OUString aQuote = m_xConnection->getMetaData()->getIdentifierQuoteString( );
OUString sPassword;
@@ -84,7 +83,7 @@ sdbcx::ObjectType OUsers::appendObject( const OUString& _rForName, const Referen
// XDrop
void OUsers::dropObject(sal_Int32 /*nPos*/,const OUString& _sElementName)
{
- OUString aSql( "REVOKE ALL ON * FROM " );
+ OUString aSql( u"REVOKE ALL ON * FROM "_ustr );
OUString aQuote = m_xConnection->getMetaData()->getIdentifierQuoteString( );
aSql += ::dbtools::quoteName(aQuote,_sElementName);
diff --git a/connectivity/source/drivers/hsqldb/HView.cxx b/connectivity/source/drivers/hsqldb/HView.cxx
index 29e5a4000a51..83946ee86f86 100644
--- a/connectivity/source/drivers/hsqldb/HView.cxx
+++ b/connectivity/source/drivers/hsqldb/HView.cxx
@@ -31,7 +31,7 @@
#include <com/sun/star/sdbc/SQLException.hpp>
#include <cppuhelper/exc_hlp.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <unotools/sharedunocomponent.hxx>
@@ -146,8 +146,8 @@ namespace connectivity::hsqldb
OUString HView::impl_getCommand() const
{
- OUStringBuffer aCommand;
- aCommand.append( "SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.SYSTEM_VIEWS " );
+ OUStringBuffer aCommand(
+ "SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.SYSTEM_VIEWS " );
HTools::appendTableFilterCrit( aCommand, m_CatalogName, m_SchemaName, m_Name, false );
::utl::SharedUNOComponent< XStatement > xStatement; xStatement.set( m_xConnection->createStatement(), UNO_QUERY_THROW );
Reference< XResultSet > xResult( xStatement->executeQuery( aCommand.makeStringAndClear() ), css::uno::UNO_SET_THROW );
diff --git a/connectivity/source/drivers/hsqldb/HViews.cxx b/connectivity/source/drivers/hsqldb/HViews.cxx
index 1f4b807484e5..880b7bc4ce51 100644
--- a/connectivity/source/drivers/hsqldb/HViews.cxx
+++ b/connectivity/source/drivers/hsqldb/HViews.cxx
@@ -33,10 +33,7 @@ using namespace connectivity;
using namespace connectivity::hsqldb;
using namespace css::uno;
using namespace css::beans;
-using namespace css::sdbcx;
using namespace css::sdbc;
-using namespace css::container;
-using namespace css::lang;
using namespace dbtools;
typedef connectivity::sdbcx::OCollection OCollection_TYPE;
@@ -51,7 +48,7 @@ HViews::HViews( const Reference< XConnection >& _rxConnection, ::cppu::OWeakObje
}
-sdbcx::ObjectType HViews::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > HViews::createObject(const OUString& _rName)
{
OUString sCatalog,sSchema,sTable;
::dbtools::qualifiedNameComponents(m_xMetaData,
@@ -82,7 +79,7 @@ Reference< XPropertySet > HViews::createDescriptor()
}
// XAppend
-sdbcx::ObjectType HViews::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
+css::uno::Reference< css::beans::XPropertySet > HViews::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
{
createView(descriptor);
return createObject( _rForName );
@@ -98,7 +95,7 @@ void HViews::dropObject(sal_Int32 _nPos,const OUString& /*_sElementName*/)
bool bIsNew = connectivity::sdbcx::ODescriptor::isNew( xObject );
if (!bIsNew)
{
- OUString aSql( "DROP VIEW" );
+ OUString aSql( u"DROP VIEW"_ustr );
Reference<XPropertySet> xProp(xObject,UNO_QUERY);
aSql += ::dbtools::composeTableName( m_xMetaData, xProp, ::dbtools::EComposeRule::InTableDefinitions, true );
diff --git a/connectivity/source/drivers/hsqldb/StorageFileAccess.cxx b/connectivity/source/drivers/hsqldb/StorageFileAccess.cxx
index 65457ab1d129..bb07d6673fb1 100644
--- a/connectivity/source/drivers/hsqldb/StorageFileAccess.cxx
+++ b/connectivity/source/drivers/hsqldb/StorageFileAccess.cxx
@@ -24,8 +24,7 @@
#include <com/sun/star/embed/XStorage.hpp>
#include <com/sun/star/lang/IllegalArgumentException.hpp>
#include <hsqldb/HStorageMap.hxx>
-#include <osl/diagnose.h>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
using namespace ::com::sun::star::container;
using namespace ::com::sun::star::uno;
@@ -44,42 +43,42 @@ extern "C" SAL_JNI_EXPORT jboolean JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_S
{
TStorages::mapped_type aStoragePair = StorageContainer::getRegisteredStorage(StorageContainer::jstring2ustring(env,key));
auto storage = aStoragePair.mapStorage();
- if ( storage.is() )
+ if ( !storage )
+ return JNI_FALSE;
+
+ try
{
+ OUString sName = StorageContainer::jstring2ustring(env,name);
try
{
- OUString sName = StorageContainer::jstring2ustring(env,name);
- try
+ OUString sOldName = StorageContainer::removeOldURLPrefix(sName);
+ if ( storage->isStreamElement(sOldName) )
{
- OUString sOldName = StorageContainer::removeOldURLPrefix(sName);
- if ( storage->isStreamElement(sOldName) )
+ try
+ {
+ storage->renameElement(sOldName,StorageContainer::removeURLPrefix(sName,aStoragePair.url));
+ }
+ catch(const Exception&)
{
- try
- {
- storage->renameElement(sOldName,StorageContainer::removeURLPrefix(sName,aStoragePair.url));
- }
- catch(const Exception&)
- {
- }
}
}
- catch(const NoSuchElementException&)
- {
- }
- catch(const IllegalArgumentException&)
- {
- }
- return storage->isStreamElement(StorageContainer::removeURLPrefix(sName,aStoragePair.url));
}
catch(const NoSuchElementException&)
{
}
- catch(const Exception&)
+ catch(const IllegalArgumentException&)
{
- TOOLS_WARN_EXCEPTION("connectivity.hsqldb", "forwarding");
- if (env->ExceptionCheck())
- env->ExceptionClear();
}
+ return storage->isStreamElement(StorageContainer::removeURLPrefix(sName,aStoragePair.url));
+ }
+ catch(const NoSuchElementException&)
+ {
+ }
+ catch(const Exception&)
+ {
+ TOOLS_WARN_EXCEPTION("connectivity.hsqldb", "forwarding");
+ if (env->ExceptionCheck())
+ env->ExceptionClear();
}
return JNI_FALSE;
}
diff --git a/connectivity/source/drivers/hsqldb/StorageNativeInputStream.cxx b/connectivity/source/drivers/hsqldb/StorageNativeInputStream.cxx
index 4fcbbc5aa6cd..3336c7f78bb0 100644
--- a/connectivity/source/drivers/hsqldb/StorageNativeInputStream.cxx
+++ b/connectivity/source/drivers/hsqldb/StorageNativeInputStream.cxx
@@ -27,18 +27,16 @@
#include <hsqldb/HStorageMap.hxx>
#include <osl/diagnose.h>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include "accesslog.hxx"
#include <limits>
-using namespace ::com::sun::star::container;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::document;
using namespace ::com::sun::star::embed;
using namespace ::com::sun::star::io;
-using namespace ::com::sun::star::lang;
using namespace ::connectivity::hsqldb;
/*****************************************************************************/
@@ -136,9 +134,12 @@ extern "C" SAL_JNI_EXPORT jlong JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_Stor
#endif
if ( n < 0 )
+ {
ThrowException( env,
"java/io/IOException",
"n < 0");
+ return 0;
+ }
std::shared_ptr<StreamHelper> pHelper = StorageContainer::getRegisteredStream(env,name,key);
OSL_ENSURE(pHelper,"No stream helper!");
@@ -155,10 +156,10 @@ extern "C" SAL_JNI_EXPORT jlong JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_Stor
try
{
do {
- if (tmpLongVal >= std::numeric_limits<sal_Int64>::max() )
+ if (tmpLongVal > std::numeric_limits<sal_Int32>::max() )
tmpIntVal = std::numeric_limits<sal_Int32>::max();
else // Casting is safe here.
- tmpIntVal = static_cast<sal_Int32>(tmpLongVal);
+ tmpIntVal = static_cast<sal_Int32>(tmpLongVal & 0xFFFFFFFF);
tmpLongVal -= tmpIntVal;
diff --git a/connectivity/source/drivers/hsqldb/StorageNativeOutputStream.cxx b/connectivity/source/drivers/hsqldb/StorageNativeOutputStream.cxx
index f766696e0d9b..bccbec20fcd2 100644
--- a/connectivity/source/drivers/hsqldb/StorageNativeOutputStream.cxx
+++ b/connectivity/source/drivers/hsqldb/StorageNativeOutputStream.cxx
@@ -30,12 +30,8 @@
#include <hsqldb/HStorageAccess.hxx>
#include <hsqldb/HStorageMap.hxx>
-using namespace ::com::sun::star::container;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::document;
-using namespace ::com::sun::star::embed;
using namespace ::com::sun::star::io;
-using namespace ::com::sun::star::lang;
using namespace ::connectivity::hsqldb;
diff --git a/connectivity/source/drivers/jdbc/Blob.cxx b/connectivity/source/drivers/jdbc/Blob.cxx
index 4531fc9b8724..c62c9ba5599b 100644
--- a/connectivity/source/drivers/jdbc/Blob.cxx
+++ b/connectivity/source/drivers/jdbc/Blob.cxx
@@ -132,13 +132,12 @@ sal_Int64 SAL_CALL java_sql_Blob::position( const css::uno::Sequence< sal_Int8 >
sal_Int64 SAL_CALL java_sql_Blob::positionOfBlob( const css::uno::Reference< css::sdbc::XBlob >& /*pattern*/, sal_Int64 /*start*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XBlob::positionOfBlob", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XBlob::positionOfBlob"_ustr, *this );
// this was put here in CWS warnings01. The previous implementation was defective, as it did ignore
// the pattern parameter. Since the effort for proper implementation is rather high - we would need
// to translated pattern into a byte[] -, we defer this functionality for the moment (hey, it was
// unusable, anyway)
// #i57457#
- return 0;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/jdbc/CallableStatement.cxx b/connectivity/source/drivers/jdbc/CallableStatement.cxx
index 884de3d4ce10..6c1714e06352 100644
--- a/connectivity/source/drivers/jdbc/CallableStatement.cxx
+++ b/connectivity/source/drivers/jdbc/CallableStatement.cxx
@@ -33,13 +33,12 @@
using namespace connectivity;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
using namespace ::com::sun::star::lang;
-IMPLEMENT_SERVICE_INFO(java_sql_CallableStatement,"com.sun.star.sdbcx.ACallableStatement","com.sun.star.sdbc.CallableStatement");
+IMPLEMENT_SERVICE_INFO(java_sql_CallableStatement,u"com.sun.star.sdbcx.ACallableStatement"_ustr,u"com.sun.star.sdbc.CallableStatement"_ustr);
//************ Class: java.sql.CallableStatement
@@ -62,10 +61,10 @@ Any SAL_CALL java_sql_CallableStatement::queryInterface( const Type & rType )
css::uno::Sequence< css::uno::Type > SAL_CALL java_sql_CallableStatement::getTypes( )
{
- ::cppu::OTypeCollection aTypes( cppu::UnoType<css::sdbc::XRow>::get(),
- cppu::UnoType<css::sdbc::XOutParameters>::get());
+ css::uno::Type aTypes[] { cppu::UnoType<css::sdbc::XRow>::get(),
+ cppu::UnoType<css::sdbc::XOutParameters>::get() };
- return ::comphelper::concatSequences(aTypes.getTypes(),java_sql_PreparedStatement::getTypes());
+ return ::comphelper::concatSequences(java_sql_PreparedStatement::getTypes(), aTypes);
}
sal_Bool SAL_CALL java_sql_CallableStatement::wasNull( )
diff --git a/connectivity/source/drivers/jdbc/Clob.cxx b/connectivity/source/drivers/jdbc/Clob.cxx
index 6108981aca89..e4ed16559555 100644
--- a/connectivity/source/drivers/jdbc/Clob.cxx
+++ b/connectivity/source/drivers/jdbc/Clob.cxx
@@ -119,14 +119,7 @@ sal_Int64 SAL_CALL java_sql_Clob::position( const OUString& searchstr, sal_Int32
sal_Int64 SAL_CALL java_sql_Clob::positionOfClob( const css::uno::Reference< css::sdbc::XClob >& /*pattern*/, sal_Int64 /*start*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XClob::positionOfClob", *this );
- // this was put here in CWS warnings01. The previous implementation was defective, as it did ignore
- // the pattern parameter. Since the effort for proper implementation is rather high - we would need
- // to translated pattern into a byte[] -, we defer this functionality for the moment (hey, it was
- // unusable, anyway)
- // 2005-11-15 / #i57457# / frank.schoenheit@sun.com
- return 0;
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XClob::positionOfClob"_ustr, *this );
}
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx b/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx
index bd2f8470a2a9..e2553f47c020 100644
--- a/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx
+++ b/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx
@@ -37,10 +37,7 @@ using namespace ::comphelper;
using namespace connectivity;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
jclass java_sql_DatabaseMetaData::theClass = nullptr;
@@ -449,7 +446,7 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getTablePrivileges(
for (sal_Int32 i = 1 ; i <= nCount ; ++i)
{
sColumnName = xMeta->getColumnName(i);
- for (size_t j = 0 ; j < SAL_N_ELEMENTS(sPrivs); ++j)
+ for (size_t j = 0 ; j < std::size(sPrivs); ++j)
{
if ( sPrivs[j] == sColumnName )
{
@@ -612,8 +609,8 @@ Reference< XResultSet > java_sql_DatabaseMetaData::impl_callResultSetMethodWithS
// log the call
if ( m_aLogger.isLoggable( LogLevel::FINEST ) )
{
- OUString sCatalogLog = bCatalog ? sCatalog : OUString( "null" );
- OUString sSchemaLog = bSchema ? _rSchemaPattern : OUString( "null" );
+ OUString sCatalogLog = bCatalog ? sCatalog : u"null"_ustr;
+ OUString sSchemaLog = bSchema ? _rSchemaPattern : u"null"_ustr;
if ( _pOptionalAdditionalString )
m_aLogger.log( LogLevel::FINEST, STR_LOG_META_DATA_METHOD_ARG4, _pMethodName, sCatalogLog, sSchemaLog, _rLeastPattern, *_pOptionalAdditionalString );
else
diff --git a/connectivity/source/drivers/jdbc/DriverPropertyInfo.cxx b/connectivity/source/drivers/jdbc/DriverPropertyInfo.cxx
index 3fb157fb2446..961fd45f5508 100644
--- a/connectivity/source/drivers/jdbc/DriverPropertyInfo.cxx
+++ b/connectivity/source/drivers/jdbc/DriverPropertyInfo.cxx
@@ -20,8 +20,6 @@
#include <java/sql/DriverPropertyInfo.hxx>
using namespace connectivity;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::lang;
//************ Class: java.sql.Driver
diff --git a/connectivity/source/drivers/jdbc/JConnection.cxx b/connectivity/source/drivers/jdbc/JConnection.cxx
index 5553b1195d29..f99737c8ddfc 100644
--- a/connectivity/source/drivers/jdbc/JConnection.cxx
+++ b/connectivity/source/drivers/jdbc/JConnection.cxx
@@ -43,6 +43,7 @@
#include <unotools/confignode.hxx>
#include <strings.hxx>
+#include <utility>
#include <vector>
#include <memory>
@@ -58,8 +59,8 @@ namespace {
struct ClassMapEntry {
ClassMapEntry(
- OUString const & theClassPath, OUString const & theClassName):
- classPath(theClassPath), className(theClassName), classLoader(nullptr),
+ OUString theClassPath, OUString theClassName):
+ classPath(std::move(theClassPath)), className(std::move(theClassName)), classLoader(nullptr),
classObject(nullptr) {}
OUString classPath;
@@ -165,7 +166,7 @@ bool loadClass(
// JVM that are not easily undone). If the pushed ClassMapEntry is
// not used after all (return false, etc.) it will be pruned on next
// call because its classLoader/classObject are null:
- classMapData.map.push_back( ClassMapEntry( classPath, name ) );
+ classMapData.map.emplace_back(classPath, name);
i = std::prev(classMapData.map.end());
}
@@ -238,7 +239,7 @@ bool loadClass(
}
-IMPLEMENT_SERVICE_INFO(java_sql_Connection,"com.sun.star.sdbcx.JConnection","com.sun.star.sdbc.Connection");
+IMPLEMENT_SERVICE_INFO(java_sql_Connection,u"com.sun.star.sdbcx.JConnection"_ustr,u"com.sun.star.sdbc.Connection"_ustr);
//************ Class: java.sql.Connection
@@ -405,7 +406,7 @@ void SAL_CALL java_sql_Connection::setTypeMap( const Reference< css::container::
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(java_sql_Connection_BASE::rBHelper.bDisposed);
- ::dbtools::throwFeatureNotImplementedSQLException( "XConnection::setTypeMap", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XConnection::setTypeMap"_ustr, *this );
}
@@ -435,11 +436,10 @@ Reference< XStatement > SAL_CALL java_sql_Connection::createStatement( )
SDBThreadAttach t;
rtl::Reference<java_sql_Statement> pStatement = new java_sql_Statement( t.pEnv, *this );
- Reference< XStatement > xStmt = pStatement;
- m_aStatements.push_back( WeakReferenceHelper( xStmt ) );
+ m_aStatements.emplace_back(Reference< XStatement >(pStatement));
m_aLogger.log( LogLevel::FINE, STR_LOG_CREATED_STATEMENT_ID, pStatement->getStatementObjectID() );
- return xStmt;
+ return pStatement;
}
Reference< XPreparedStatement > SAL_CALL java_sql_Connection::prepareStatement( const OUString& sql )
@@ -451,11 +451,10 @@ Reference< XPreparedStatement > SAL_CALL java_sql_Connection::prepareStatement(
SDBThreadAttach t;
rtl::Reference<java_sql_PreparedStatement> pStatement = new java_sql_PreparedStatement( t.pEnv, *this, sql );
- Reference< XPreparedStatement > xReturn( pStatement );
- m_aStatements.push_back(WeakReferenceHelper(xReturn));
+ m_aStatements.emplace_back(Reference< XPreparedStatement >( pStatement ));
m_aLogger.log( LogLevel::FINE, STR_LOG_PREPARED_STATEMENT_ID, pStatement->getStatementObjectID() );
- return xReturn;
+ return pStatement;
}
Reference< XPreparedStatement > SAL_CALL java_sql_Connection::prepareCall( const OUString& sql )
@@ -467,11 +466,10 @@ Reference< XPreparedStatement > SAL_CALL java_sql_Connection::prepareCall( const
SDBThreadAttach t;
rtl::Reference<java_sql_CallableStatement> pStatement = new java_sql_CallableStatement( t.pEnv, *this, sql );
- Reference< XPreparedStatement > xStmt( pStatement );
- m_aStatements.push_back(WeakReferenceHelper(xStmt));
+ m_aStatements.emplace_back(Reference< XPreparedStatement >( pStatement ));
m_aLogger.log( LogLevel::FINE, STR_LOG_PREPARED_CALL_ID, pStatement->getStatementObjectID() );
- return xStmt;
+ return pStatement;
}
OUString SAL_CALL java_sql_Connection::nativeSQL( const OUString& sql )
@@ -523,14 +521,10 @@ Any SAL_CALL java_sql_Connection::getWarnings( )
SQLException aAsException( java_sql_SQLWarning( warn_base, *this ) );
// translate to warning
- SQLWarning aWarning;
- aWarning.Context = aAsException.Context;
- aWarning.Message = aAsException.Message;
- aWarning.SQLState = aAsException.SQLState;
- aWarning.ErrorCode = aAsException.ErrorCode;
- aWarning.NextException = aAsException.NextException;
-
- return makeAny( aWarning );
+ SQLWarning aWarning(aAsException.Message, aAsException.Context, aAsException.SQLState,
+ aAsException.ErrorCode, aAsException.NextException);
+
+ return Any( aWarning );
}
return Any();
@@ -705,7 +699,7 @@ OUString java_sql_Connection::impl_getJavaDriverClassPath_nothrow(const OUString
if ( aNamesRoot.isValid() && aNamesRoot.hasByName( _sDriverClass ) )
{
::utl::OConfigurationNode aRegisterObj = aNamesRoot.openNode( _sDriverClass );
- OSL_VERIFY( aRegisterObj.getNodeValue( "Path" ) >>= sURL );
+ OSL_VERIFY( aRegisterObj.getNodeValue( u"Path"_ustr ) >>= sURL );
}
return sURL;
}
@@ -729,17 +723,17 @@ bool java_sql_Connection::construct(const OUString& url,
Sequence< NamedValue > aSystemProperties;
::comphelper::NamedValueCollection aSettings( info );
- sDriverClass = aSettings.getOrDefault( "JavaDriverClass", sDriverClass );
- sDriverClassPath = aSettings.getOrDefault( "JavaDriverClassPath", sDriverClassPath);
+ sDriverClass = aSettings.getOrDefault( u"JavaDriverClass"_ustr, sDriverClass );
+ sDriverClassPath = aSettings.getOrDefault( u"JavaDriverClassPath"_ustr, sDriverClassPath);
if ( sDriverClassPath.isEmpty() )
sDriverClassPath = impl_getJavaDriverClassPath_nothrow(sDriverClass);
- bAutoRetrievingEnabled = aSettings.getOrDefault( "IsAutoRetrievingEnabled", bAutoRetrievingEnabled );
- sGeneratedValueStatement = aSettings.getOrDefault( "AutoRetrievingStatement", sGeneratedValueStatement );
- m_bIgnoreDriverPrivileges = aSettings.getOrDefault( "IgnoreDriverPrivileges", m_bIgnoreDriverPrivileges );
- m_bIgnoreCurrency = aSettings.getOrDefault( "IgnoreCurrency", m_bIgnoreCurrency );
- aSystemProperties = aSettings.getOrDefault( "SystemProperties", aSystemProperties );
- m_aCatalogRestriction = aSettings.getOrDefault( "ImplicitCatalogRestriction", Any() );
- m_aSchemaRestriction = aSettings.getOrDefault( "ImplicitSchemaRestriction", Any() );
+ bAutoRetrievingEnabled = aSettings.getOrDefault( u"IsAutoRetrievingEnabled"_ustr, bAutoRetrievingEnabled );
+ sGeneratedValueStatement = aSettings.getOrDefault( u"AutoRetrievingStatement"_ustr, sGeneratedValueStatement );
+ m_bIgnoreDriverPrivileges = aSettings.getOrDefault( u"IgnoreDriverPrivileges"_ustr, m_bIgnoreDriverPrivileges );
+ m_bIgnoreCurrency = aSettings.getOrDefault( u"IgnoreCurrency"_ustr, m_bIgnoreCurrency );
+ aSystemProperties = aSettings.getOrDefault( u"SystemProperties"_ustr, aSystemProperties );
+ m_aCatalogRestriction = aSettings.getOrDefault( u"ImplicitCatalogRestriction"_ustr, Any() );
+ m_aSchemaRestriction = aSettings.getOrDefault( u"ImplicitSchemaRestriction"_ustr, Any() );
loadDriverFromProperties( sDriverClass, sDriverClassPath, aSystemProperties );
diff --git a/connectivity/source/drivers/jdbc/JDriver.cxx b/connectivity/source/drivers/jdbc/JDriver.cxx
index f294d30b4937..efbe25272bea 100644
--- a/connectivity/source/drivers/jdbc/JDriver.cxx
+++ b/connectivity/source/drivers/jdbc/JDriver.cxx
@@ -47,7 +47,7 @@ java_sql_Driver::~java_sql_Driver()
OUString SAL_CALL java_sql_Driver::getImplementationName( )
{
- return "com.sun.star.comp.sdbc.JDBCDriver";
+ return u"com.sun.star.comp.sdbc.JDBCDriver"_ustr;
// this name is referenced in the configuration and in the jdbc.xml
// Please take care when changing it.
}
@@ -60,7 +60,7 @@ sal_Bool SAL_CALL java_sql_Driver::supportsService( const OUString& _rServiceNam
Sequence< OUString > SAL_CALL java_sql_Driver::getSupportedServiceNames( )
{
- return { "com.sun.star.sdbc.Driver" };
+ return { u"com.sun.star.sdbc.Driver"_ustr };
}
Reference< XConnection > SAL_CALL java_sql_Driver::connect( const OUString& url, const
@@ -68,12 +68,11 @@ Reference< XConnection > SAL_CALL java_sql_Driver::connect( const OUString& url,
{
m_aLogger.log( LogLevel::INFO, STR_LOG_DRIVER_CONNECTING_URL, url );
- Reference< XConnection > xOut;
+ rtl::Reference< java_sql_Connection > xOut;
if ( acceptsURL(url ) )
{
- rtl::Reference<java_sql_Connection> pConnection = new java_sql_Connection( *this );
- xOut = pConnection;
- if ( !pConnection->construct(url,info) )
+ xOut = new java_sql_Connection( *this );
+ if ( !xOut->construct(url,info) )
xOut.clear(); // an error occurred and the java driver didn't throw an exception
else
m_aLogger.log( LogLevel::INFO, STR_LOG_DRIVER_SUCCESS );
@@ -108,97 +107,97 @@ Sequence< DriverPropertyInfo > SAL_CALL java_sql_Driver::getPropertyInfo( const
{
if ( acceptsURL(url) )
{
- Sequence< OUString > aBooleanValues{ "false", "true" };
+ Sequence< OUString > aBooleanValues{ u"false"_ustr, u"true"_ustr };
return
{
{
- "JavaDriverClass"
- ,"The JDBC driver class name."
+ u"JavaDriverClass"_ustr
+ ,u"The JDBC driver class name."_ustr
,true
,OUString()
,Sequence< OUString >()
},
{
- "JavaDriverClassPath"
- ,"The class path where to look for the JDBC driver."
+ u"JavaDriverClassPath"_ustr
+ ,u"The class path where to look for the JDBC driver."_ustr
,true
- , ""
+ , u""_ustr
,Sequence< OUString >()
},
{
- "SystemProperties"
- ,"Additional properties to set at java.lang.System before loading the driver."
+ u"SystemProperties"_ustr
+ ,u"Additional properties to set at java.lang.System before loading the driver."_ustr
,true
- , ""
+ , u""_ustr
,Sequence< OUString >()
},
{
- "ParameterNameSubstitution"
- ,"Change named parameters with '?'."
+ u"ParameterNameSubstitution"_ustr
+ ,u"Change named parameters with '?'."_ustr
,false
- ,"false"
+ ,u"false"_ustr
,aBooleanValues
},
{
- "IgnoreDriverPrivileges"
- ,"Ignore the privileges from the database driver."
+ u"IgnoreDriverPrivileges"_ustr
+ ,u"Ignore the privileges from the database driver."_ustr
,false
- , "false"
+ , u"false"_ustr
,aBooleanValues
},
{
- "IsAutoRetrievingEnabled"
- ,"Retrieve generated values."
+ u"IsAutoRetrievingEnabled"_ustr
+ ,u"Retrieve generated values."_ustr
,false
- ,"false"
+ ,u"false"_ustr
,aBooleanValues
},
{
- "AutoRetrievingStatement"
- ,"Auto-increment statement."
+ u"AutoRetrievingStatement"_ustr
+ ,u"Auto-increment statement."_ustr
,false
,OUString()
,Sequence< OUString >()
},
{
- "GenerateASBeforeCorrelationName"
- ,"Generate AS before table correlation names."
+ u"GenerateASBeforeCorrelationName"_ustr
+ ,u"Generate AS before table correlation names."_ustr
,false
- ,"false"
+ ,u"false"_ustr
,aBooleanValues
},
{
- "IgnoreCurrency"
- ,"Ignore the currency field from the ResultsetMetaData."
+ u"IgnoreCurrency"_ustr
+ ,u"Ignore the currency field from the ResultsetMetaData."_ustr
,false
- ,"false"
+ ,u"false"_ustr
,aBooleanValues
},
{
- "EscapeDateTime"
- ,"Escape date time format."
+ u"EscapeDateTime"_ustr
+ ,u"Escape date time format."_ustr
,false
- ,"true"
+ ,u"true"_ustr
,aBooleanValues
},
{
- "TypeInfoSettings"
- ,"Defines how the type info of the database metadata should be manipulated."
+ u"TypeInfoSettings"_ustr
+ ,u"Defines how the type info of the database metadata should be manipulated."_ustr
,false
,OUString()
,Sequence< OUString > ()
},
{
- "ImplicitCatalogRestriction"
- ,"The catalog which should be used in getTables calls, when the caller passed NULL."
+ u"ImplicitCatalogRestriction"_ustr
+ ,u"The catalog which should be used in getTables calls, when the caller passed NULL."_ustr
,false
,OUString( )
,Sequence< OUString > ()
},
{
- "ImplicitSchemaRestriction"
- ,"The schema which should be used in getTables calls, when the caller passed NULL."
+ u"ImplicitSchemaRestriction"_ustr
+ ,u"The schema which should be used in getTables calls, when the caller passed NULL."_ustr
,false
,OUString( )
,Sequence< OUString > ()
@@ -208,7 +207,6 @@ Sequence< DriverPropertyInfo > SAL_CALL java_sql_Driver::getPropertyInfo( const
::connectivity::SharedResources aResources;
const OUString sMessage = aResources.getResourceString(STR_URI_SYNTAX_ERROR);
::dbtools::throwGenericSQLException(sMessage ,*this);
- return Sequence< DriverPropertyInfo >();
}
sal_Int32 SAL_CALL java_sql_Driver::getMajorVersion( )
diff --git a/connectivity/source/drivers/jdbc/JStatement.cxx b/connectivity/source/drivers/jdbc/JStatement.cxx
index df9d660f554c..da53ee7f50bb 100644
--- a/connectivity/source/drivers/jdbc/JStatement.cxx
+++ b/connectivity/source/drivers/jdbc/JStatement.cxx
@@ -31,7 +31,7 @@
#include <comphelper/sequence.hxx>
#include <TConnection.hxx>
#include <comphelper/types.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <com/sun/star/sdbc/ResultSetConcurrency.hpp>
#include <com/sun/star/sdbc/ResultSetType.hpp>
@@ -378,9 +378,9 @@ Any SAL_CALL java_sql_Statement_Base::getWarnings( )
if( out )
{
java_sql_SQLWarning_BASE warn_base( t.pEnv, out );
- return makeAny(
+ return Any(
static_cast< css::sdbc::SQLException >(
- java_sql_SQLWarning(warn_base,*static_cast<cppu::OWeakObject*>(this))));
+ java_sql_SQLWarning(warn_base,getXWeak())));
}
return Any();
@@ -576,31 +576,71 @@ void java_sql_Statement_Base::setCursorName(const OUString &_par0)
::cppu::IPropertyArrayHelper* java_sql_Statement_Base::createArrayHelper( ) const
{
- Sequence< Property > aProps(10);
- Property* pProperties = aProps.getArray();
- sal_Int32 nPos = 0;
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
- PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING),
- PROPERTY_ID_ESCAPEPROCESSING, cppu::UnoType<bool>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
- PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
- PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE),
- PROPERTY_ID_MAXFIELDSIZE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS),
- PROPERTY_ID_MAXROWS, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT),
- PROPERTY_ID_QUERYTIMEOUT, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
- PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
- PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS),
- PROPERTY_ID_USEBOOKMARKS, cppu::UnoType<bool>::get(), 0);
-
- return new ::cppu::OPropertyArrayHelper(aProps);
+ return new ::cppu::OPropertyArrayHelper
+ {
+ {
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
+ PROPERTY_ID_CURSORNAME,
+ cppu::UnoType<OUString>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING),
+ PROPERTY_ID_ESCAPEPROCESSING,
+ cppu::UnoType<bool>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
+ PROPERTY_ID_FETCHDIRECTION,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
+ PROPERTY_ID_FETCHSIZE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE),
+ PROPERTY_ID_MAXFIELDSIZE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS),
+ PROPERTY_ID_MAXROWS,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT),
+ PROPERTY_ID_QUERYTIMEOUT,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
+ PROPERTY_ID_RESULTSETCONCURRENCY,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
+ PROPERTY_ID_RESULTSETTYPE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS),
+ PROPERTY_ID_USEBOOKMARKS,
+ cppu::UnoType<bool>::get(),
+ 0
+ }
+ }
+ };
}
@@ -793,7 +833,7 @@ void java_sql_Statement::createStatement(JNIEnv* _pEnv)
}
-IMPLEMENT_SERVICE_INFO(java_sql_Statement,"com.sun.star.sdbcx.JStatement","com.sun.star.sdbc.Statement");
+IMPLEMENT_SERVICE_INFO(java_sql_Statement,u"com.sun.star.sdbcx.JStatement"_ustr,u"com.sun.star.sdbc.Statement"_ustr);
void SAL_CALL java_sql_Statement_Base::acquire() noexcept
{
diff --git a/connectivity/source/drivers/jdbc/Object.cxx b/connectivity/source/drivers/jdbc/Object.cxx
index b2dd83168e5e..65d6680d745e 100644
--- a/connectivity/source/drivers/jdbc/Object.cxx
+++ b/connectivity/source/drivers/jdbc/Object.cxx
@@ -29,13 +29,9 @@
#include <comphelper/logging.hxx>
#include <cppuhelper/exc_hlp.hxx>
-#include <memory>
-
using namespace connectivity;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
using namespace ::com::sun::star::lang;
diff --git a/connectivity/source/drivers/jdbc/PreparedStatement.cxx b/connectivity/source/drivers/jdbc/PreparedStatement.cxx
index 33aadcbca840..65ff309c019c 100644
--- a/connectivity/source/drivers/jdbc/PreparedStatement.cxx
+++ b/connectivity/source/drivers/jdbc/PreparedStatement.cxx
@@ -40,7 +40,6 @@
using namespace connectivity;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
using namespace ::com::sun::star::lang;
@@ -48,7 +47,7 @@ using namespace ::com::sun::star::lang;
//************ Class: java.sql.PreparedStatement
-IMPLEMENT_SERVICE_INFO(java_sql_PreparedStatement,"com.sun.star.sdbcx.JPreparedStatement","com.sun.star.sdbc.PreparedStatement");
+IMPLEMENT_SERVICE_INFO(java_sql_PreparedStatement,u"com.sun.star.sdbcx.JPreparedStatement"_ustr,u"com.sun.star.sdbc.PreparedStatement"_ustr);
java_sql_PreparedStatement::java_sql_PreparedStatement( JNIEnv * pEnv, java_sql_Connection& _rCon, const OUString& sql )
: OStatement_BASE2( pEnv, _rCon )
@@ -296,25 +295,25 @@ void SAL_CALL java_sql_PreparedStatement::setNull( sal_Int32 parameterIndex, sal
void SAL_CALL java_sql_PreparedStatement::setClob( sal_Int32 /*parameterIndex*/, const css::uno::Reference< css::sdbc::XClob >& /*x*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XParameters::setClob", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XParameters::setClob"_ustr, *this );
}
void SAL_CALL java_sql_PreparedStatement::setBlob( sal_Int32 /*parameterIndex*/, const css::uno::Reference< css::sdbc::XBlob >& /*x*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XParameters::setBlob", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XParameters::setBlob"_ustr, *this );
}
void SAL_CALL java_sql_PreparedStatement::setArray( sal_Int32 /*parameterIndex*/, const css::uno::Reference< css::sdbc::XArray >& /*x*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XParameters::setArray", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XParameters::setArray"_ustr, *this );
}
void SAL_CALL java_sql_PreparedStatement::setRef( sal_Int32 /*parameterIndex*/, const css::uno::Reference< css::sdbc::XRef >& /*x*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XParameters::setRef", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XParameters::setRef"_ustr, *this );
}
diff --git a/connectivity/source/drivers/jdbc/ResultSet.cxx b/connectivity/source/drivers/jdbc/ResultSet.cxx
index 4c7ec72c54f7..e88fb9600138 100644
--- a/connectivity/source/drivers/jdbc/ResultSet.cxx
+++ b/connectivity/source/drivers/jdbc/ResultSet.cxx
@@ -58,7 +58,7 @@ using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
using namespace ::com::sun::star::lang;
-IMPLEMENT_SERVICE_INFO(java_sql_ResultSet,"com.sun.star.sdbcx.JResultSet","com.sun.star.sdbc.ResultSet");
+IMPLEMENT_SERVICE_INFO(java_sql_ResultSet,u"com.sun.star.sdbcx.JResultSet"_ustr,u"com.sun.star.sdbc.ResultSet"_ustr);
//************ Class: java.sql.ResultSet
@@ -74,7 +74,7 @@ java_sql_ResultSet::java_sql_ResultSet( JNIEnv * pEnv, jobject myObj, const java
SDBThreadAttach::addRef();
osl_atomic_increment(&m_refCount);
if ( pStmt )
- m_xStatement = *pStmt;
+ m_xStatement = pStmt;
osl_atomic_decrement(&m_refCount);
}
@@ -104,7 +104,8 @@ void java_sql_ResultSet::disposing()
::osl::MutexGuard aGuard(m_aMutex);
if( object )
{
- SDBThreadAttach t; OSL_ENSURE(t.pEnv,"Java environment has been deleted!");
+ SDBThreadAttach t;
+ assert(t.pEnv && "Java environment has been deleted!");
static jmethodID mID(nullptr);
callVoidMethod_ThrowSQL("close", mID);
clearObject(*t.pEnv);
@@ -451,7 +452,7 @@ sal_Bool SAL_CALL java_sql_ResultSet::previous( )
Reference< XInterface > SAL_CALL java_sql_ResultSet::getStatement( )
{
- return m_xStatement;
+ return cppu::getXWeak(m_xStatement.get());
}
@@ -514,7 +515,7 @@ css::uno::Any SAL_CALL java_sql_ResultSet::getWarnings( )
if( out )
{
java_sql_SQLWarning_BASE warn_base( t.pEnv, out );
- return makeAny(
+ return Any(
static_cast< css::sdbc::SQLException >(
java_sql_SQLWarning(warn_base,*this)));
}
@@ -730,7 +731,7 @@ void SAL_CALL java_sql_ResultSet::updateBinaryStream( sal_Int32 columnIndex, con
catch(const Exception&)
{
Any anyEx = ::cppu::getCaughtException();
- ::dbtools::throwFeatureNotImplementedSQLException( "XRowUpdate::updateBinaryStream", *this, anyEx );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XRowUpdate::updateBinaryStream"_ustr, *this, anyEx );
}
}
@@ -762,7 +763,7 @@ void SAL_CALL java_sql_ResultSet::updateCharacterStream( sal_Int32 columnIndex,
catch(const Exception&)
{
Any anyEx = ::cppu::getCaughtException();
- ::dbtools::throwFeatureNotImplementedSQLException( "XRowUpdate::updateCharacterStream", *this, anyEx );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XRowUpdate::updateCharacterStream"_ustr, *this, anyEx );
}
}
@@ -873,25 +874,41 @@ void java_sql_ResultSet::setFetchSize(sal_Int32 _par0)
::cppu::IPropertyArrayHelper* java_sql_ResultSet::createArrayHelper( ) const
{
- Sequence< Property > aProps(5);
- Property* pProperties = aProps.getArray();
- sal_Int32 nPos = 0;
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
- PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), PropertyAttribute::READONLY);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
- PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
- PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
- PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
- PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY);
-
- return new ::cppu::OPropertyArrayHelper(aProps);
+ return new ::cppu::OPropertyArrayHelper
+ {
+ {
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
+ PROPERTY_ID_CURSORNAME,
+ cppu::UnoType<OUString>::get(),
+ PropertyAttribute::READONLY
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
+ PROPERTY_ID_FETCHDIRECTION,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
+ PROPERTY_ID_FETCHSIZE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
+ PROPERTY_ID_RESULTSETCONCURRENCY,
+ cppu::UnoType<sal_Int32>::get(),
+ PropertyAttribute::READONLY
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
+ PROPERTY_ID_RESULTSETTYPE,
+ cppu::UnoType<sal_Int32>::get(),
+ PropertyAttribute::READONLY
+ }
+ }
+ };
}
::cppu::IPropertyArrayHelper & java_sql_ResultSet::getInfoHelper()
diff --git a/connectivity/source/drivers/jdbc/ResultSetMetaData.cxx b/connectivity/source/drivers/jdbc/ResultSetMetaData.cxx
index fdf5bfe69c29..b5827ea991e7 100644
--- a/connectivity/source/drivers/jdbc/ResultSetMetaData.cxx
+++ b/connectivity/source/drivers/jdbc/ResultSetMetaData.cxx
@@ -21,10 +21,7 @@
#include <java/sql/Connection.hxx>
using namespace connectivity;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
using namespace ::com::sun::star::lang;
diff --git a/connectivity/source/drivers/jdbc/SQLException.cxx b/connectivity/source/drivers/jdbc/SQLException.cxx
index 55bf0996c941..49fa95c456d5 100644
--- a/connectivity/source/drivers/jdbc/SQLException.cxx
+++ b/connectivity/source/drivers/jdbc/SQLException.cxx
@@ -22,7 +22,6 @@
using namespace connectivity;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::lang;
//************ Class: java.sql.SQLException
@@ -31,7 +30,7 @@ java_sql_SQLException::java_sql_SQLException( const java_sql_SQLException_BASE&
_rContext,
_rException.getSQLState(),
_rException.getErrorCode(),
- makeAny(_rException.getNextException())
+ Any(_rException.getNextException())
)
{
}
diff --git a/connectivity/source/drivers/jdbc/tools.cxx b/connectivity/source/drivers/jdbc/tools.cxx
index 4a4d5069ea18..ad133ee5726d 100644
--- a/connectivity/source/drivers/jdbc/tools.cxx
+++ b/connectivity/source/drivers/jdbc/tools.cxx
@@ -32,7 +32,6 @@ using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
void java_util_Properties::setProperty(const OUString& key, const OUString& value)
{
@@ -182,7 +181,7 @@ jobject connectivity::convertTypeMapToJavaMap(const Reference< css::container::X
{
css::uno::Sequence< OUString > aNames = _rMap->getElementNames();
if ( aNames.hasElements() )
- ::dbtools::throwFeatureNotImplementedSQLException( "Type maps", nullptr );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"Type maps"_ustr, nullptr );
}
return nullptr;
}
diff --git a/connectivity/source/drivers/macab/MacabAddressBook.cxx b/connectivity/source/drivers/macab/MacabAddressBook.cxx
index a14b7abee9b9..7ade1ac0a830 100644
--- a/connectivity/source/drivers/macab/MacabAddressBook.cxx
+++ b/connectivity/source/drivers/macab/MacabAddressBook.cxx
@@ -82,6 +82,13 @@ MacabAddressBook::MacabAddressBook( )
m_xMacabRecords(nullptr),
m_bRetrievedGroups(false)
{
+ if(m_aAddressBook == nullptr)
+ {
+ // TODO: tell the user to reset the permission via "tccutil reset AddressBook"
+ // or the system preferences and try again, this time granting the access
+ throw RuntimeException(
+ "failed to access the macOS address book - permission not granted?" );
+ }
}
@@ -106,8 +113,8 @@ MacabAddressBook::~MacabAddressBook()
const OUString & MacabAddressBook::getDefaultTableName()
{
/* This string probably needs to be localized. */
- static const OUString aDefaultTableName
- (OUString("Address Book"));
+ static constexpr OUString aDefaultTableName
+ (u"Address Book"_ustr);
return aDefaultTableName;
}
diff --git a/connectivity/source/drivers/macab/MacabAddressBook.hxx b/connectivity/source/drivers/macab/MacabAddressBook.hxx
index a23e0c1eb2e7..a12ba6c5be12 100644
--- a/connectivity/source/drivers/macab/MacabAddressBook.hxx
+++ b/connectivity/source/drivers/macab/MacabAddressBook.hxx
@@ -32,28 +32,28 @@
namespace connectivity::macab
{
- class MacabAddressBook
- {
- protected:
- ABAddressBookRef m_aAddressBook;
- MacabRecords *m_xMacabRecords;
- std::vector<MacabGroup *> m_xMacabGroups;
- bool m_bRetrievedGroups;
-
- public:
- MacabAddressBook();
- ~MacabAddressBook();
- static const OUString & getDefaultTableName();
-
- MacabRecords *getMacabRecords();
- std::vector<MacabGroup *> getMacabGroups();
-
- MacabGroup *getMacabGroup(std::u16string_view _groupName);
- MacabRecords *getMacabRecords(std::u16string_view _tableName);
-
- MacabGroup *getMacabGroupMatch(const OUString& _groupName);
- MacabRecords *getMacabRecordsMatch(const OUString& _tableName);
- };
+ class MacabAddressBook
+ {
+ protected:
+ ABAddressBookRef m_aAddressBook;
+ MacabRecords *m_xMacabRecords;
+ std::vector<MacabGroup *> m_xMacabGroups;
+ bool m_bRetrievedGroups;
+
+ public:
+ MacabAddressBook();
+ ~MacabAddressBook();
+ static const OUString & getDefaultTableName();
+
+ MacabRecords *getMacabRecords();
+ std::vector<MacabGroup *> getMacabGroups();
+
+ MacabGroup *getMacabGroup(std::u16string_view _groupName);
+ MacabRecords *getMacabRecords(std::u16string_view _tableName);
+
+ MacabGroup *getMacabGroupMatch(const OUString& _groupName);
+ MacabRecords *getMacabRecordsMatch(const OUString& _tableName);
+ };
}
diff --git a/connectivity/source/drivers/macab/MacabCatalog.cxx b/connectivity/source/drivers/macab/MacabCatalog.cxx
index 96ff62fd5b6a..d6485ab1c971 100644
--- a/connectivity/source/drivers/macab/MacabCatalog.cxx
+++ b/connectivity/source/drivers/macab/MacabCatalog.cxx
@@ -80,7 +80,7 @@ void MacabCatalog::refreshUsers()
const OUString& MacabCatalog::getDot()
{
- static const OUString sDot = ".";
+ static constexpr OUString sDot = u"."_ustr;
return sDot;
}
diff --git a/connectivity/source/drivers/macab/MacabCatalog.hxx b/connectivity/source/drivers/macab/MacabCatalog.hxx
index 1757bb908851..8a12125b1284 100644
--- a/connectivity/source/drivers/macab/MacabCatalog.hxx
+++ b/connectivity/source/drivers/macab/MacabCatalog.hxx
@@ -23,29 +23,29 @@
namespace connectivity::macab
{
- class MacabConnection;
+ class MacabConnection;
- class MacabCatalog : public connectivity::sdbcx::OCatalog
- {
- MacabConnection* m_pConnection; // used to get the metadata
+ class MacabCatalog : public connectivity::sdbcx::OCatalog
+ {
+ MacabConnection* m_pConnection; // used to get the metadata
- public:
- explicit MacabCatalog(MacabConnection* _pCon);
+ public:
+ explicit MacabCatalog(MacabConnection* _pCon);
- MacabConnection* getConnection() const { return m_pConnection; }
+ MacabConnection* getConnection() const { return m_pConnection; }
- static const OUString& getDot();
+ static const OUString& getDot();
- // implementation of the pure virtual methods
- virtual void refreshTables() override;
- virtual void refreshViews() override;
- virtual void refreshGroups() override;
- virtual void refreshUsers() override;
+ // implementation of the pure virtual methods
+ virtual void refreshTables() override;
+ virtual void refreshViews() override;
+ virtual void refreshGroups() override;
+ virtual void refreshUsers() override;
- // XTablesSupplier
- virtual css::uno::Reference< css::container::XNameAccess > SAL_CALL getTables(
- ) override;
- };
+ // XTablesSupplier
+ virtual css::uno::Reference< css::container::XNameAccess > SAL_CALL getTables(
+ ) override;
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/macab/MacabColumns.cxx b/connectivity/source/drivers/macab/MacabColumns.cxx
index 6a49ad1d066c..ef6c0a6d255f 100644
--- a/connectivity/source/drivers/macab/MacabColumns.cxx
+++ b/connectivity/source/drivers/macab/MacabColumns.cxx
@@ -36,7 +36,7 @@ using namespace ::com::sun::star::container;
using namespace ::com::sun::star::lang;
-sdbcx::ObjectType MacabColumns::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > MacabColumns::createObject(const OUString& _rName)
{
const Any aCatalog;
const OUString sCatalogName;
@@ -45,7 +45,7 @@ sdbcx::ObjectType MacabColumns::createObject(const OUString& _rName)
Reference< XResultSet > xResult = m_pTable->getConnection()->getMetaData()->getColumns(
aCatalog, sSchemaName, sTableName, _rName);
- sdbcx::ObjectType xRet;
+ css::uno::Reference< css::beans::XPropertySet > xRet;
if (xResult.is())
{
Reference< XRow > xRow(xResult,UNO_QUERY);
diff --git a/connectivity/source/drivers/macab/MacabColumns.hxx b/connectivity/source/drivers/macab/MacabColumns.hxx
index 7123af89d30a..1da4021734c3 100644
--- a/connectivity/source/drivers/macab/MacabColumns.hxx
+++ b/connectivity/source/drivers/macab/MacabColumns.hxx
@@ -24,19 +24,19 @@
namespace connectivity::macab
{
- class MacabColumns : public sdbcx::OCollection
- {
- protected:
- MacabTable* m_pTable;
+ class MacabColumns : public sdbcx::OCollection
+ {
+ protected:
+ MacabTable* m_pTable;
- virtual sdbcx::ObjectType createObject(const OUString& _rName) override;
- virtual void impl_refresh() override;
+ virtual css::uno::Reference< css::beans::XPropertySet > createObject(const OUString& _rName) override;
+ virtual void impl_refresh() override;
- public:
- MacabColumns( MacabTable* _pTable,
- ::osl::Mutex& _rMutex,
- const ::std::vector< OUString> &_rVector);
- };
+ public:
+ MacabColumns( MacabTable* _pTable,
+ ::osl::Mutex& _rMutex,
+ const ::std::vector< OUString> &_rVector);
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/macab/MacabConnection.hxx b/connectivity/source/drivers/macab/MacabConnection.hxx
index b18d4778e2da..b9fa3c58e23e 100644
--- a/connectivity/source/drivers/macab/MacabConnection.hxx
+++ b/connectivity/source/drivers/macab/MacabConnection.hxx
@@ -19,10 +19,8 @@
#pragma once
-#include <map>
#include <connectivity/CommonTools.hxx>
#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/sdbc/SQLWarning.hpp>
#include <com/sun/star/sdbc/XWarningsSupplier.hpp>
#include <com/sun/star/sdbc/XConnection.hpp>
#include <com/sun/star/sdbcx/XTablesSupplier.hpp>
@@ -32,81 +30,79 @@
namespace connectivity::macab
{
- typedef ::cppu::WeakComponentImplHelper<css::sdbc::XConnection,
- css::sdbc::XWarningsSupplier,
- css::lang::XServiceInfo
- > OMetaConnection_BASE;
-
- class MacabDriver;
- class MacabAddressBook;
-
- typedef std::vector< css::uno::WeakReferenceHelper > OWeakRefArray;
-
- typedef connectivity::OMetaConnection MacabConnection_BASE;
-
- class MacabConnection : public MacabConnection_BASE
- {
- protected:
-
- // Data attributes
-
- MacabAddressBook* m_pAddressBook; // the address book
- MacabDriver* m_pDriver; // pointer to the owning driver object
- css::uno::Reference< css::sdbcx::XTablesSupplier>
- m_xCatalog; // needed for the SQL interpreter
-
- private:
- bool doIsClosed();
-
- void doClose();
-
- public:
- /// @throws css::sdbc::SQLException
- virtual void construct( const OUString& url,const css::uno::Sequence< css::beans::PropertyValue >& info);
-
- explicit MacabConnection(MacabDriver* _pDriver);
- virtual ~MacabConnection() override;
-
- // OComponentHelper
- virtual void SAL_CALL disposing() override;
-
- // XServiceInfo
- DECLARE_SERVICE_INFO();
-
- // XConnection
- virtual css::uno::Reference< css::sdbc::XStatement > SAL_CALL createStatement( ) override;
- virtual css::uno::Reference< css::sdbc::XPreparedStatement > SAL_CALL prepareStatement( const OUString& sql ) override;
- virtual css::uno::Reference< css::sdbc::XPreparedStatement > SAL_CALL prepareCall( const OUString& sql ) override;
- virtual OUString SAL_CALL nativeSQL( const OUString& sql ) override;
- virtual void SAL_CALL setAutoCommit( sal_Bool autoCommit ) override;
- virtual sal_Bool SAL_CALL getAutoCommit( ) override;
- virtual void SAL_CALL commit( ) override;
- virtual void SAL_CALL rollback( ) override;
- virtual sal_Bool SAL_CALL isClosed( ) override;
- virtual css::uno::Reference< css::sdbc::XDatabaseMetaData > SAL_CALL getMetaData( ) override;
- virtual void SAL_CALL setReadOnly( sal_Bool readOnly ) override;
- virtual sal_Bool SAL_CALL isReadOnly( ) override;
- virtual void SAL_CALL setCatalog( const OUString& catalog ) override;
- virtual OUString SAL_CALL getCatalog( ) override;
- virtual void SAL_CALL setTransactionIsolation( sal_Int32 level ) override;
- virtual sal_Int32 SAL_CALL getTransactionIsolation( ) override;
- virtual css::uno::Reference< css::container::XNameAccess > SAL_CALL getTypeMap( ) override;
- virtual void SAL_CALL setTypeMap( const css::uno::Reference< css::container::XNameAccess >& typeMap ) override;
-
- // XCloseable
- virtual void SAL_CALL close( ) override;
-
- // XWarningsSupplier
- virtual css::uno::Any SAL_CALL getWarnings( ) override;
- virtual void SAL_CALL clearWarnings( ) override;
-
- // needed for the SQL interpreter
- css::uno::Reference< css::sdbcx::XTablesSupplier > createCatalog();
-
- // accessors
- MacabDriver* getDriver() const { return m_pDriver;}
- MacabAddressBook* getAddressBook() const;
- };
+ typedef ::cppu::WeakComponentImplHelper<css::sdbc::XConnection,
+ css::sdbc::XWarningsSupplier,
+ css::lang::XServiceInfo
+ > OMetaConnection_BASE;
+
+ class MacabDriver;
+ class MacabAddressBook;
+
+ typedef connectivity::OMetaConnection MacabConnection_BASE;
+
+ class MacabConnection : public MacabConnection_BASE
+ {
+ protected:
+
+ // Data attributes
+
+ MacabAddressBook* m_pAddressBook; // the address book
+ MacabDriver* m_pDriver; // pointer to the owning driver object
+ css::uno::Reference< css::sdbcx::XTablesSupplier>
+ m_xCatalog; // needed for the SQL interpreter
+
+ private:
+ bool doIsClosed();
+
+ void doClose();
+
+ public:
+ /// @throws css::sdbc::SQLException
+ virtual void construct( const OUString& url,const css::uno::Sequence< css::beans::PropertyValue >& info);
+
+ explicit MacabConnection(MacabDriver* _pDriver);
+ virtual ~MacabConnection() override;
+
+ // OComponentHelper
+ virtual void SAL_CALL disposing() override;
+
+ // XServiceInfo
+ DECLARE_SERVICE_INFO();
+
+ // XConnection
+ virtual css::uno::Reference< css::sdbc::XStatement > SAL_CALL createStatement( ) override;
+ virtual css::uno::Reference< css::sdbc::XPreparedStatement > SAL_CALL prepareStatement( const OUString& sql ) override;
+ virtual css::uno::Reference< css::sdbc::XPreparedStatement > SAL_CALL prepareCall( const OUString& sql ) override;
+ virtual OUString SAL_CALL nativeSQL( const OUString& sql ) override;
+ virtual void SAL_CALL setAutoCommit( sal_Bool autoCommit ) override;
+ virtual sal_Bool SAL_CALL getAutoCommit( ) override;
+ virtual void SAL_CALL commit( ) override;
+ virtual void SAL_CALL rollback( ) override;
+ virtual sal_Bool SAL_CALL isClosed( ) override;
+ virtual css::uno::Reference< css::sdbc::XDatabaseMetaData > SAL_CALL getMetaData( ) override;
+ virtual void SAL_CALL setReadOnly( sal_Bool readOnly ) override;
+ virtual sal_Bool SAL_CALL isReadOnly( ) override;
+ virtual void SAL_CALL setCatalog( const OUString& catalog ) override;
+ virtual OUString SAL_CALL getCatalog( ) override;
+ virtual void SAL_CALL setTransactionIsolation( sal_Int32 level ) override;
+ virtual sal_Int32 SAL_CALL getTransactionIsolation( ) override;
+ virtual css::uno::Reference< css::container::XNameAccess > SAL_CALL getTypeMap( ) override;
+ virtual void SAL_CALL setTypeMap( const css::uno::Reference< css::container::XNameAccess >& typeMap ) override;
+
+ // XCloseable
+ virtual void SAL_CALL close( ) override;
+
+ // XWarningsSupplier
+ virtual css::uno::Any SAL_CALL getWarnings( ) override;
+ virtual void SAL_CALL clearWarnings( ) override;
+
+ // needed for the SQL interpreter
+ css::uno::Reference< css::sdbcx::XTablesSupplier > createCatalog();
+
+ // accessors
+ MacabDriver* getDriver() const { return m_pDriver;}
+ MacabAddressBook* getAddressBook() const;
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/macab/MacabDatabaseMetaData.cxx b/connectivity/source/drivers/macab/MacabDatabaseMetaData.cxx
index 5c55fa60d54b..b0b04fc08f21 100644
--- a/connectivity/source/drivers/macab/MacabDatabaseMetaData.cxx
+++ b/connectivity/source/drivers/macab/MacabDatabaseMetaData.cxx
@@ -30,6 +30,7 @@
#include <com/sun/star/sdbc/ColumnSearch.hpp>
#include <com/sun/star/sdbc/ColumnValue.hpp>
#include <com/sun/star/sdbc/ResultSetType.hpp>
+#include <com/sun/star/sdbc/SQLException.hpp>
#include <com/sun/star/sdbc/TransactionIsolation.hpp>
#include <rtl/ref.hxx>
@@ -922,7 +923,7 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTables(
// check whether we have tables in the requested types
// for the moment, we answer only the "TABLE" table type
// when no types are given at all, we return all the tables
- static constexpr OUStringLiteral aTable = u"TABLE";
+ static constexpr OUString aTable = u"TABLE"_ustr;
bool bTableFound = false;
const OUString* p = types.getConstArray(),
* pEnd = p + types.getLength();
@@ -957,7 +958,7 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTables(
aRow[1] = ODatabaseMetaDataResultSet::getEmptyValue();
aRow[2] = ODatabaseMetaDataResultSet::getEmptyValue();
aRow[3] = new ORowSetValueDecorator(xRecords->getName());
- aRow[4] = new ORowSetValueDecorator(OUString(aTable));
+ aRow[4] = new ORowSetValueDecorator(aTable);
aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue();
tmp.push_back(aRow);
diff --git a/connectivity/source/drivers/macab/MacabDatabaseMetaData.hxx b/connectivity/source/drivers/macab/MacabDatabaseMetaData.hxx
index 662be1c018ce..d5d127fa1025 100644
--- a/connectivity/source/drivers/macab/MacabDatabaseMetaData.hxx
+++ b/connectivity/source/drivers/macab/MacabDatabaseMetaData.hxx
@@ -26,170 +26,170 @@
namespace connectivity::macab
{
- class MacabDatabaseMetaData : public ::cppu::WeakImplHelper< css::sdbc::XDatabaseMetaData>
- {
- rtl::Reference< MacabConnection > m_xConnection;
- bool m_bUseCatalog;
+ class MacabDatabaseMetaData : public ::cppu::WeakImplHelper< css::sdbc::XDatabaseMetaData>
+ {
+ rtl::Reference< MacabConnection > m_xConnection;
+ bool m_bUseCatalog;
- public:
+ public:
- MacabConnection* getOwnConnection() const { return m_xConnection.get(); }
+ MacabConnection* getOwnConnection() const { return m_xConnection.get(); }
- explicit MacabDatabaseMetaData(MacabConnection* _pCon);
- virtual ~MacabDatabaseMetaData() override;
+ explicit MacabDatabaseMetaData(MacabConnection* _pCon);
+ virtual ~MacabDatabaseMetaData() override;
- // this interface is really BIG
- // XDatabaseMetaData
- virtual sal_Bool SAL_CALL allProceduresAreCallable( ) override;
- virtual sal_Bool SAL_CALL allTablesAreSelectable( ) override;
- virtual OUString SAL_CALL getURL( ) override;
- virtual OUString SAL_CALL getUserName( ) override;
- virtual sal_Bool SAL_CALL isReadOnly( ) override;
- virtual sal_Bool SAL_CALL nullsAreSortedHigh( ) override;
- virtual sal_Bool SAL_CALL nullsAreSortedLow( ) override;
- virtual sal_Bool SAL_CALL nullsAreSortedAtStart( ) override;
- virtual sal_Bool SAL_CALL nullsAreSortedAtEnd( ) override;
- virtual OUString SAL_CALL getDatabaseProductName( ) override;
- virtual OUString SAL_CALL getDatabaseProductVersion( ) override;
- virtual OUString SAL_CALL getDriverName( ) override;
- virtual OUString SAL_CALL getDriverVersion( ) override;
- virtual sal_Int32 SAL_CALL getDriverMajorVersion( ) override;
- virtual sal_Int32 SAL_CALL getDriverMinorVersion( ) override;
- virtual sal_Bool SAL_CALL usesLocalFiles( ) override;
- virtual sal_Bool SAL_CALL usesLocalFilePerTable( ) override;
- virtual sal_Bool SAL_CALL supportsMixedCaseIdentifiers( ) override;
- virtual sal_Bool SAL_CALL storesUpperCaseIdentifiers( ) override;
- virtual sal_Bool SAL_CALL storesLowerCaseIdentifiers( ) override;
- virtual sal_Bool SAL_CALL storesMixedCaseIdentifiers( ) override;
- virtual sal_Bool SAL_CALL supportsMixedCaseQuotedIdentifiers( ) override;
- virtual sal_Bool SAL_CALL storesUpperCaseQuotedIdentifiers( ) override;
- virtual sal_Bool SAL_CALL storesLowerCaseQuotedIdentifiers( ) override;
- virtual sal_Bool SAL_CALL storesMixedCaseQuotedIdentifiers( ) override;
- virtual OUString SAL_CALL getIdentifierQuoteString( ) override;
- virtual OUString SAL_CALL getSQLKeywords( ) override;
- virtual OUString SAL_CALL getNumericFunctions( ) override;
- virtual OUString SAL_CALL getStringFunctions( ) override;
- virtual OUString SAL_CALL getSystemFunctions( ) override;
- virtual OUString SAL_CALL getTimeDateFunctions( ) override;
- virtual OUString SAL_CALL getSearchStringEscape( ) override;
- virtual OUString SAL_CALL getExtraNameCharacters( ) override;
- virtual sal_Bool SAL_CALL supportsAlterTableWithAddColumn( ) override;
- virtual sal_Bool SAL_CALL supportsAlterTableWithDropColumn( ) override;
- virtual sal_Bool SAL_CALL supportsColumnAliasing( ) override;
- virtual sal_Bool SAL_CALL nullPlusNonNullIsNull( ) override;
- virtual sal_Bool SAL_CALL supportsTypeConversion( ) override;
- virtual sal_Bool SAL_CALL supportsConvert( sal_Int32 fromType, sal_Int32 toType ) override;
- virtual sal_Bool SAL_CALL supportsTableCorrelationNames( ) override;
- virtual sal_Bool SAL_CALL supportsDifferentTableCorrelationNames( ) override;
- virtual sal_Bool SAL_CALL supportsExpressionsInOrderBy( ) override;
- virtual sal_Bool SAL_CALL supportsOrderByUnrelated( ) override;
- virtual sal_Bool SAL_CALL supportsGroupBy( ) override;
- virtual sal_Bool SAL_CALL supportsGroupByUnrelated( ) override;
- virtual sal_Bool SAL_CALL supportsGroupByBeyondSelect( ) override;
- virtual sal_Bool SAL_CALL supportsLikeEscapeClause( ) override;
- virtual sal_Bool SAL_CALL supportsMultipleResultSets( ) override;
- virtual sal_Bool SAL_CALL supportsMultipleTransactions( ) override;
- virtual sal_Bool SAL_CALL supportsNonNullableColumns( ) override;
- virtual sal_Bool SAL_CALL supportsMinimumSQLGrammar( ) override;
- virtual sal_Bool SAL_CALL supportsCoreSQLGrammar( ) override;
- virtual sal_Bool SAL_CALL supportsExtendedSQLGrammar( ) override;
- virtual sal_Bool SAL_CALL supportsANSI92EntryLevelSQL( ) override;
- virtual sal_Bool SAL_CALL supportsANSI92IntermediateSQL( ) override;
- virtual sal_Bool SAL_CALL supportsANSI92FullSQL( ) override;
- virtual sal_Bool SAL_CALL supportsIntegrityEnhancementFacility( ) override;
- virtual sal_Bool SAL_CALL supportsOuterJoins( ) override;
- virtual sal_Bool SAL_CALL supportsFullOuterJoins( ) override;
- virtual sal_Bool SAL_CALL supportsLimitedOuterJoins( ) override;
- virtual OUString SAL_CALL getSchemaTerm( ) override;
- virtual OUString SAL_CALL getProcedureTerm( ) override;
- virtual OUString SAL_CALL getCatalogTerm( ) override;
- virtual sal_Bool SAL_CALL isCatalogAtStart( ) override;
- virtual OUString SAL_CALL getCatalogSeparator( ) override;
- virtual sal_Bool SAL_CALL supportsSchemasInDataManipulation( ) override;
- virtual sal_Bool SAL_CALL supportsSchemasInProcedureCalls( ) override;
- virtual sal_Bool SAL_CALL supportsSchemasInTableDefinitions( ) override;
- virtual sal_Bool SAL_CALL supportsSchemasInIndexDefinitions( ) override;
- virtual sal_Bool SAL_CALL supportsSchemasInPrivilegeDefinitions( ) override;
- virtual sal_Bool SAL_CALL supportsCatalogsInDataManipulation( ) override;
- virtual sal_Bool SAL_CALL supportsCatalogsInProcedureCalls( ) override;
- virtual sal_Bool SAL_CALL supportsCatalogsInTableDefinitions( ) override;
- virtual sal_Bool SAL_CALL supportsCatalogsInIndexDefinitions( ) override;
- virtual sal_Bool SAL_CALL supportsCatalogsInPrivilegeDefinitions( ) override;
- virtual sal_Bool SAL_CALL supportsPositionedDelete( ) override;
- virtual sal_Bool SAL_CALL supportsPositionedUpdate( ) override;
- virtual sal_Bool SAL_CALL supportsSelectForUpdate( ) override;
- virtual sal_Bool SAL_CALL supportsStoredProcedures( ) override;
- virtual sal_Bool SAL_CALL supportsSubqueriesInComparisons( ) override;
- virtual sal_Bool SAL_CALL supportsSubqueriesInExists( ) override;
- virtual sal_Bool SAL_CALL supportsSubqueriesInIns( ) override;
- virtual sal_Bool SAL_CALL supportsSubqueriesInQuantifieds( ) override;
- virtual sal_Bool SAL_CALL supportsCorrelatedSubqueries( ) override;
- virtual sal_Bool SAL_CALL supportsUnion( ) override;
- virtual sal_Bool SAL_CALL supportsUnionAll( ) override;
- virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossCommit( ) override;
- virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossRollback( ) override;
- virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossCommit( ) override;
- virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossRollback( ) override;
- virtual sal_Int32 SAL_CALL getMaxBinaryLiteralLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxCharLiteralLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnsInGroupBy( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnsInIndex( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnsInOrderBy( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnsInSelect( ) override;
- virtual sal_Int32 SAL_CALL getMaxColumnsInTable( ) override;
- virtual sal_Int32 SAL_CALL getMaxConnections( ) override;
- virtual sal_Int32 SAL_CALL getMaxCursorNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxIndexLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxSchemaNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxProcedureNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxCatalogNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxRowSize( ) override;
- virtual sal_Bool SAL_CALL doesMaxRowSizeIncludeBlobs( ) override;
- virtual sal_Int32 SAL_CALL getMaxStatementLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxStatements( ) override;
- virtual sal_Int32 SAL_CALL getMaxTableNameLength( ) override;
- virtual sal_Int32 SAL_CALL getMaxTablesInSelect( ) override;
- virtual sal_Int32 SAL_CALL getMaxUserNameLength( ) override;
- virtual sal_Int32 SAL_CALL getDefaultTransactionIsolation( ) override;
- virtual sal_Bool SAL_CALL supportsTransactions( ) override;
- virtual sal_Bool SAL_CALL supportsTransactionIsolationLevel( sal_Int32 level ) override;
- virtual sal_Bool SAL_CALL supportsDataDefinitionAndDataManipulationTransactions( ) override;
- virtual sal_Bool SAL_CALL supportsDataManipulationTransactionsOnly( ) override;
- virtual sal_Bool SAL_CALL dataDefinitionCausesTransactionCommit( ) override;
- virtual sal_Bool SAL_CALL dataDefinitionIgnoredInTransactions( ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getProcedures( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& procedureNamePattern ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getProcedureColumns( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& procedureNamePattern, const OUString& columnNamePattern ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTables( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const css::uno::Sequence< OUString >& types ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getSchemas( ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getCatalogs( ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTableTypes( ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getColumns( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const OUString& columnNamePattern ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getColumnPrivileges( const css::uno::Any& catalog, const OUString& schema, const OUString& table, const OUString& columnNamePattern ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTablePrivileges( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getBestRowIdentifier( const css::uno::Any& catalog, const OUString& schema, const OUString& table, sal_Int32 scope, sal_Bool nullable ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getVersionColumns( const css::uno::Any& catalog, const OUString& schema, const OUString& table ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getPrimaryKeys( const css::uno::Any& catalog, const OUString& schema, const OUString& table ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getImportedKeys( const css::uno::Any& catalog, const OUString& schema, const OUString& table ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getExportedKeys( const css::uno::Any& catalog, const OUString& schema, const OUString& table ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getCrossReference( const css::uno::Any& primaryCatalog, const OUString& primarySchema, const OUString& primaryTable, const css::uno::Any& foreignCatalog, const OUString& foreignSchema, const OUString& foreignTable ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTypeInfo( ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getIndexInfo( const css::uno::Any& catalog, const OUString& schema, const OUString& table, sal_Bool unique, sal_Bool approximate ) override;
- virtual sal_Bool SAL_CALL supportsResultSetType( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL supportsResultSetConcurrency( sal_Int32 setType, sal_Int32 concurrency ) override;
- virtual sal_Bool SAL_CALL ownUpdatesAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL ownDeletesAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL ownInsertsAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL othersUpdatesAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL othersDeletesAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL othersInsertsAreVisible( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL updatesAreDetected( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL deletesAreDetected( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL insertsAreDetected( sal_Int32 setType ) override;
- virtual sal_Bool SAL_CALL supportsBatchUpdates( ) override;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getUDTs( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& typeNamePattern, const css::uno::Sequence< sal_Int32 >& types ) override;
- virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL getConnection( ) override;
- };
+ // this interface is really BIG
+ // XDatabaseMetaData
+ virtual sal_Bool SAL_CALL allProceduresAreCallable( ) override;
+ virtual sal_Bool SAL_CALL allTablesAreSelectable( ) override;
+ virtual OUString SAL_CALL getURL( ) override;
+ virtual OUString SAL_CALL getUserName( ) override;
+ virtual sal_Bool SAL_CALL isReadOnly( ) override;
+ virtual sal_Bool SAL_CALL nullsAreSortedHigh( ) override;
+ virtual sal_Bool SAL_CALL nullsAreSortedLow( ) override;
+ virtual sal_Bool SAL_CALL nullsAreSortedAtStart( ) override;
+ virtual sal_Bool SAL_CALL nullsAreSortedAtEnd( ) override;
+ virtual OUString SAL_CALL getDatabaseProductName( ) override;
+ virtual OUString SAL_CALL getDatabaseProductVersion( ) override;
+ virtual OUString SAL_CALL getDriverName( ) override;
+ virtual OUString SAL_CALL getDriverVersion( ) override;
+ virtual sal_Int32 SAL_CALL getDriverMajorVersion( ) override;
+ virtual sal_Int32 SAL_CALL getDriverMinorVersion( ) override;
+ virtual sal_Bool SAL_CALL usesLocalFiles( ) override;
+ virtual sal_Bool SAL_CALL usesLocalFilePerTable( ) override;
+ virtual sal_Bool SAL_CALL supportsMixedCaseIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL storesUpperCaseIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL storesLowerCaseIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL storesMixedCaseIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL supportsMixedCaseQuotedIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL storesUpperCaseQuotedIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL storesLowerCaseQuotedIdentifiers( ) override;
+ virtual sal_Bool SAL_CALL storesMixedCaseQuotedIdentifiers( ) override;
+ virtual OUString SAL_CALL getIdentifierQuoteString( ) override;
+ virtual OUString SAL_CALL getSQLKeywords( ) override;
+ virtual OUString SAL_CALL getNumericFunctions( ) override;
+ virtual OUString SAL_CALL getStringFunctions( ) override;
+ virtual OUString SAL_CALL getSystemFunctions( ) override;
+ virtual OUString SAL_CALL getTimeDateFunctions( ) override;
+ virtual OUString SAL_CALL getSearchStringEscape( ) override;
+ virtual OUString SAL_CALL getExtraNameCharacters( ) override;
+ virtual sal_Bool SAL_CALL supportsAlterTableWithAddColumn( ) override;
+ virtual sal_Bool SAL_CALL supportsAlterTableWithDropColumn( ) override;
+ virtual sal_Bool SAL_CALL supportsColumnAliasing( ) override;
+ virtual sal_Bool SAL_CALL nullPlusNonNullIsNull( ) override;
+ virtual sal_Bool SAL_CALL supportsTypeConversion( ) override;
+ virtual sal_Bool SAL_CALL supportsConvert( sal_Int32 fromType, sal_Int32 toType ) override;
+ virtual sal_Bool SAL_CALL supportsTableCorrelationNames( ) override;
+ virtual sal_Bool SAL_CALL supportsDifferentTableCorrelationNames( ) override;
+ virtual sal_Bool SAL_CALL supportsExpressionsInOrderBy( ) override;
+ virtual sal_Bool SAL_CALL supportsOrderByUnrelated( ) override;
+ virtual sal_Bool SAL_CALL supportsGroupBy( ) override;
+ virtual sal_Bool SAL_CALL supportsGroupByUnrelated( ) override;
+ virtual sal_Bool SAL_CALL supportsGroupByBeyondSelect( ) override;
+ virtual sal_Bool SAL_CALL supportsLikeEscapeClause( ) override;
+ virtual sal_Bool SAL_CALL supportsMultipleResultSets( ) override;
+ virtual sal_Bool SAL_CALL supportsMultipleTransactions( ) override;
+ virtual sal_Bool SAL_CALL supportsNonNullableColumns( ) override;
+ virtual sal_Bool SAL_CALL supportsMinimumSQLGrammar( ) override;
+ virtual sal_Bool SAL_CALL supportsCoreSQLGrammar( ) override;
+ virtual sal_Bool SAL_CALL supportsExtendedSQLGrammar( ) override;
+ virtual sal_Bool SAL_CALL supportsANSI92EntryLevelSQL( ) override;
+ virtual sal_Bool SAL_CALL supportsANSI92IntermediateSQL( ) override;
+ virtual sal_Bool SAL_CALL supportsANSI92FullSQL( ) override;
+ virtual sal_Bool SAL_CALL supportsIntegrityEnhancementFacility( ) override;
+ virtual sal_Bool SAL_CALL supportsOuterJoins( ) override;
+ virtual sal_Bool SAL_CALL supportsFullOuterJoins( ) override;
+ virtual sal_Bool SAL_CALL supportsLimitedOuterJoins( ) override;
+ virtual OUString SAL_CALL getSchemaTerm( ) override;
+ virtual OUString SAL_CALL getProcedureTerm( ) override;
+ virtual OUString SAL_CALL getCatalogTerm( ) override;
+ virtual sal_Bool SAL_CALL isCatalogAtStart( ) override;
+ virtual OUString SAL_CALL getCatalogSeparator( ) override;
+ virtual sal_Bool SAL_CALL supportsSchemasInDataManipulation( ) override;
+ virtual sal_Bool SAL_CALL supportsSchemasInProcedureCalls( ) override;
+ virtual sal_Bool SAL_CALL supportsSchemasInTableDefinitions( ) override;
+ virtual sal_Bool SAL_CALL supportsSchemasInIndexDefinitions( ) override;
+ virtual sal_Bool SAL_CALL supportsSchemasInPrivilegeDefinitions( ) override;
+ virtual sal_Bool SAL_CALL supportsCatalogsInDataManipulation( ) override;
+ virtual sal_Bool SAL_CALL supportsCatalogsInProcedureCalls( ) override;
+ virtual sal_Bool SAL_CALL supportsCatalogsInTableDefinitions( ) override;
+ virtual sal_Bool SAL_CALL supportsCatalogsInIndexDefinitions( ) override;
+ virtual sal_Bool SAL_CALL supportsCatalogsInPrivilegeDefinitions( ) override;
+ virtual sal_Bool SAL_CALL supportsPositionedDelete( ) override;
+ virtual sal_Bool SAL_CALL supportsPositionedUpdate( ) override;
+ virtual sal_Bool SAL_CALL supportsSelectForUpdate( ) override;
+ virtual sal_Bool SAL_CALL supportsStoredProcedures( ) override;
+ virtual sal_Bool SAL_CALL supportsSubqueriesInComparisons( ) override;
+ virtual sal_Bool SAL_CALL supportsSubqueriesInExists( ) override;
+ virtual sal_Bool SAL_CALL supportsSubqueriesInIns( ) override;
+ virtual sal_Bool SAL_CALL supportsSubqueriesInQuantifieds( ) override;
+ virtual sal_Bool SAL_CALL supportsCorrelatedSubqueries( ) override;
+ virtual sal_Bool SAL_CALL supportsUnion( ) override;
+ virtual sal_Bool SAL_CALL supportsUnionAll( ) override;
+ virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossCommit( ) override;
+ virtual sal_Bool SAL_CALL supportsOpenCursorsAcrossRollback( ) override;
+ virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossCommit( ) override;
+ virtual sal_Bool SAL_CALL supportsOpenStatementsAcrossRollback( ) override;
+ virtual sal_Int32 SAL_CALL getMaxBinaryLiteralLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxCharLiteralLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnsInGroupBy( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnsInIndex( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnsInOrderBy( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnsInSelect( ) override;
+ virtual sal_Int32 SAL_CALL getMaxColumnsInTable( ) override;
+ virtual sal_Int32 SAL_CALL getMaxConnections( ) override;
+ virtual sal_Int32 SAL_CALL getMaxCursorNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxIndexLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxSchemaNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxProcedureNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxCatalogNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxRowSize( ) override;
+ virtual sal_Bool SAL_CALL doesMaxRowSizeIncludeBlobs( ) override;
+ virtual sal_Int32 SAL_CALL getMaxStatementLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxStatements( ) override;
+ virtual sal_Int32 SAL_CALL getMaxTableNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getMaxTablesInSelect( ) override;
+ virtual sal_Int32 SAL_CALL getMaxUserNameLength( ) override;
+ virtual sal_Int32 SAL_CALL getDefaultTransactionIsolation( ) override;
+ virtual sal_Bool SAL_CALL supportsTransactions( ) override;
+ virtual sal_Bool SAL_CALL supportsTransactionIsolationLevel( sal_Int32 level ) override;
+ virtual sal_Bool SAL_CALL supportsDataDefinitionAndDataManipulationTransactions( ) override;
+ virtual sal_Bool SAL_CALL supportsDataManipulationTransactionsOnly( ) override;
+ virtual sal_Bool SAL_CALL dataDefinitionCausesTransactionCommit( ) override;
+ virtual sal_Bool SAL_CALL dataDefinitionIgnoredInTransactions( ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getProcedures( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& procedureNamePattern ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getProcedureColumns( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& procedureNamePattern, const OUString& columnNamePattern ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTables( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const css::uno::Sequence< OUString >& types ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getSchemas( ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getCatalogs( ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTableTypes( ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getColumns( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const OUString& columnNamePattern ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getColumnPrivileges( const css::uno::Any& catalog, const OUString& schema, const OUString& table, const OUString& columnNamePattern ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTablePrivileges( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getBestRowIdentifier( const css::uno::Any& catalog, const OUString& schema, const OUString& table, sal_Int32 scope, sal_Bool nullable ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getVersionColumns( const css::uno::Any& catalog, const OUString& schema, const OUString& table ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getPrimaryKeys( const css::uno::Any& catalog, const OUString& schema, const OUString& table ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getImportedKeys( const css::uno::Any& catalog, const OUString& schema, const OUString& table ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getExportedKeys( const css::uno::Any& catalog, const OUString& schema, const OUString& table ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getCrossReference( const css::uno::Any& primaryCatalog, const OUString& primarySchema, const OUString& primaryTable, const css::uno::Any& foreignCatalog, const OUString& foreignSchema, const OUString& foreignTable ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getTypeInfo( ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getIndexInfo( const css::uno::Any& catalog, const OUString& schema, const OUString& table, sal_Bool unique, sal_Bool approximate ) override;
+ virtual sal_Bool SAL_CALL supportsResultSetType( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL supportsResultSetConcurrency( sal_Int32 setType, sal_Int32 concurrency ) override;
+ virtual sal_Bool SAL_CALL ownUpdatesAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL ownDeletesAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL ownInsertsAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL othersUpdatesAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL othersDeletesAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL othersInsertsAreVisible( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL updatesAreDetected( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL deletesAreDetected( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL insertsAreDetected( sal_Int32 setType ) override;
+ virtual sal_Bool SAL_CALL supportsBatchUpdates( ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL getUDTs( const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& typeNamePattern, const css::uno::Sequence< sal_Int32 >& types ) override;
+ virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL getConnection( ) override;
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/macab/MacabDriver.cxx b/connectivity/source/drivers/macab/MacabDriver.cxx
index 4667c690a8b1..04caae0609a9 100644
--- a/connectivity/source/drivers/macab/MacabDriver.cxx
+++ b/connectivity/source/drivers/macab/MacabDriver.cxx
@@ -25,7 +25,7 @@
#include <com/sun/star/lang/NullPointerException.hpp>
#include <com/sun/star/frame/Desktop.hpp>
#include <sal/log.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <strings.hrc>
#include <cppuhelper/supportsservice.hxx>
@@ -115,7 +115,7 @@ bool MacabImplModule::impl_loadModule()
OSL_ENSURE( !m_hConnectorModule && !m_pConnectionFactoryFunc,
"MacabImplModule::impl_loadModule: inconsistence: inconsistency (never attempted load before, but some values already set)!");
- const OUString sModuleName( SAL_MODULENAME( "macabdrv1" ) );
+ static constexpr OUString sModuleName( u"" SAL_MODULENAME( "macabdrv1" ) ""_ustr );
m_hConnectorModule = osl_loadModuleRelative( &thisModule, sModuleName.pData, SAL_LOADMODULE_NOW ); // LAZY! #i61335#
OSL_ENSURE( m_hConnectorModule, "MacabImplModule::impl_loadModule: could not load the implementation library!" );
if ( !m_hConnectorModule )
diff --git a/connectivity/source/drivers/macab/MacabDriver.hxx b/connectivity/source/drivers/macab/MacabDriver.hxx
index f75391dedb46..f12db3514acd 100644
--- a/connectivity/source/drivers/macab/MacabDriver.hxx
+++ b/connectivity/source/drivers/macab/MacabDriver.hxx
@@ -21,7 +21,6 @@
#include <com/sun/star/sdbc/XDriver.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <com/sun/star/frame/XTerminateListener.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <cppuhelper/compbase.hxx>
@@ -34,128 +33,128 @@
namespace connectivity::macab
{
- class MacabConnection;
- class MacabDriver;
+ class MacabConnection;
+ class MacabDriver;
- typedef void* (SAL_CALL * ConnectionFactoryFunction)( void* _pDriver );
-
- typedef std::vector< css::uno::WeakReferenceHelper > OWeakRefArray;
+ typedef void* (SAL_CALL * ConnectionFactoryFunction)( void* _pDriver );
+
+ typedef std::vector< css::uno::WeakReferenceHelper > OWeakRefArray;
- // = MacabImplModule
-
- class MacabImplModule
- {
- private:
- /// Did we already attempt to load the module and to retrieve the symbols?
- bool m_bAttemptedLoadModule;
- oslModule m_hConnectorModule;
- ConnectionFactoryFunction m_pConnectionFactoryFunc;
+ // = MacabImplModule
+
+ class MacabImplModule
+ {
+ private:
+ /// Did we already attempt to load the module and to retrieve the symbols?
+ bool m_bAttemptedLoadModule;
+ oslModule m_hConnectorModule;
+ ConnectionFactoryFunction m_pConnectionFactoryFunc;
- public:
- MacabImplModule();
+ public:
+ MacabImplModule();
- /** determines whether there is a mac OS present in the environment
- */
- bool isMacOSPresent();
+ /** determines whether there is a mac OS present in the environment
+ */
+ bool isMacOSPresent();
- /** initializes the implementation module.
+ /** initializes the implementation module.
- @throws css::uno::RuntimeException
- if the module could be loaded, but required symbols are missing
- @throws css::sdbc::SQLException
- if no Mac OS was found at all
- */
- void init();
+ @throws css::uno::RuntimeException
+ if the module could be loaded, but required symbols are missing
+ @throws css::sdbc::SQLException
+ if no Mac OS was found at all
+ */
+ void init();
- /** shuts down the impl module
- */
- void shutdown();
+ /** shuts down the impl module
+ */
+ void shutdown();
- /** creates a new connection
- @precond
- <member>init</member> has been called before
- @throws css::uno::RuntimeException
- if no connection object could be created (which is a severe error, normally impossible)
- */
- MacabConnection* createConnection( MacabDriver* _pDriver ) const;
+ /** creates a new connection
+ @precond
+ <member>init</member> has been called before
+ @throws css::uno::RuntimeException
+ if no connection object could be created (which is a severe error, normally impossible)
+ */
+ MacabConnection* createConnection( MacabDriver* _pDriver ) const;
- private:
- /** loads the implementation module and retrieves the needed symbols
+ private:
+ /** loads the implementation module and retrieves the needed symbols
- Save against being called multiple times.
+ Save against being called multiple times.
- @return <TRUE/> if the module could be loaded successfully.
+ @return <TRUE/> if the module could be loaded successfully.
- @throws css::uno::RuntimeException
- if the module could be loaded, but required symbols are missing
- */
- bool impl_loadModule();
+ @throws css::uno::RuntimeException
+ if the module could be loaded, but required symbols are missing
+ */
+ bool impl_loadModule();
- /** unloads the implementation module, and resets all function pointers to <NULL/>
- @precond m_hConnectorModule is not <NULL/>
- */
- void impl_unloadModule();
- };
+ /** unloads the implementation module, and resets all function pointers to <NULL/>
+ @precond m_hConnectorModule is not <NULL/>
+ */
+ void impl_unloadModule();
+ };
- // = MacabDriver
+ // = MacabDriver
- typedef ::cppu::WeakComponentImplHelper< css::sdbc::XDriver,
- css::lang::XServiceInfo,
- css::frame::XTerminateListener > MacabDriver_BASE;
- class MacabDriver : public MacabDriver_BASE
- {
- protected:
- ::osl::Mutex m_aMutex; // mutex is need to control member access
- OWeakRefArray m_xConnections; // vector containing a list of all the
- // MacabConnection objects for this Driver
- css::uno::Reference< css::uno::XComponentContext >
- m_xContext; // the multi-service factory
- MacabImplModule m_aImplModule;
+ typedef ::cppu::WeakComponentImplHelper< css::sdbc::XDriver,
+ css::lang::XServiceInfo,
+ css::frame::XTerminateListener > MacabDriver_BASE;
+ class MacabDriver : public MacabDriver_BASE
+ {
+ protected:
+ ::osl::Mutex m_aMutex; // mutex is need to control member access
+ OWeakRefArray m_xConnections; // vector containing a list of all the
+ // MacabConnection objects for this Driver
+ css::uno::Reference< css::uno::XComponentContext >
+ m_xContext; // the multi-service factory
+ MacabImplModule m_aImplModule;
- public:
- css::uno::Reference< css::uno::XComponentContext > const &
- getComponentContext() const { return m_xContext; }
+ public:
+ css::uno::Reference< css::uno::XComponentContext > const &
+ getComponentContext() const { return m_xContext; }
- /** returns the path of our configuration settings
- */
- static OUString impl_getConfigurationSettingsPath();
+ /** returns the path of our configuration settings
+ */
+ static OUString impl_getConfigurationSettingsPath();
- explicit MacabDriver(const css::uno::Reference< css::uno::XComponentContext >& _rxContext);
- protected:
+ explicit MacabDriver(const css::uno::Reference< css::uno::XComponentContext >& _rxContext);
+ protected:
- // OComponentHelper
- virtual void SAL_CALL disposing() override;
+ // OComponentHelper
+ virtual void SAL_CALL disposing() override;
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName( ) override;
- virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
- virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override;
+ // XServiceInfo
+ virtual OUString SAL_CALL getImplementationName( ) override;
+ virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override;
- // XDriver
- virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL connect( const OUString& url, const css::uno::Sequence< css::beans::PropertyValue >& info ) override;
- virtual sal_Bool SAL_CALL acceptsURL( const OUString& url ) override;
- virtual css::uno::Sequence< css::sdbc::DriverPropertyInfo > SAL_CALL getPropertyInfo( const OUString& url, const css::uno::Sequence< css::beans::PropertyValue >& info ) override;
- virtual sal_Int32 SAL_CALL getMajorVersion() override;
- virtual sal_Int32 SAL_CALL getMinorVersion() override;
-
- // XTerminateListener
- virtual void SAL_CALL queryTermination( const css::lang::EventObject& Event ) override;
- virtual void SAL_CALL notifyTermination( const css::lang::EventObject& Event ) override;
-
- // XEventListener
- virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
-
- private:
- /** shuts down the library which contains the real implementations
-
- This method is safe against being called multiple times
-
- @precond our mutex is locked
- */
- void impl_shutdownImplementationModule();
- };
+ // XDriver
+ virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL connect( const OUString& url, const css::uno::Sequence< css::beans::PropertyValue >& info ) override;
+ virtual sal_Bool SAL_CALL acceptsURL( const OUString& url ) override;
+ virtual css::uno::Sequence< css::sdbc::DriverPropertyInfo > SAL_CALL getPropertyInfo( const OUString& url, const css::uno::Sequence< css::beans::PropertyValue >& info ) override;
+ virtual sal_Int32 SAL_CALL getMajorVersion() override;
+ virtual sal_Int32 SAL_CALL getMinorVersion() override;
+
+ // XTerminateListener
+ virtual void SAL_CALL queryTermination( const css::lang::EventObject& Event ) override;
+ virtual void SAL_CALL notifyTermination( const css::lang::EventObject& Event ) override;
+
+ // XEventListener
+ virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
+
+ private:
+ /** shuts down the library which contains the real implementations
+
+ This method is safe against being called multiple times
+
+ @precond our mutex is locked
+ */
+ void impl_shutdownImplementationModule();
+ };
}
diff --git a/connectivity/source/drivers/macab/MacabGroup.hxx b/connectivity/source/drivers/macab/MacabGroup.hxx
index ddcd47b46423..a6379dda2a57 100644
--- a/connectivity/source/drivers/macab/MacabGroup.hxx
+++ b/connectivity/source/drivers/macab/MacabGroup.hxx
@@ -29,10 +29,10 @@
namespace connectivity::macab
{
- class MacabGroup: public MacabRecords {
- public:
- MacabGroup(const ABAddressBookRef _addressBook, const MacabRecords *_allRecords, const ABGroupRef _xGroup);
- };
+ class MacabGroup: public MacabRecords {
+ public:
+ MacabGroup(const ABAddressBookRef _addressBook, const MacabRecords *_allRecords, const ABGroupRef _xGroup);
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/macab/MacabHeader.cxx b/connectivity/source/drivers/macab/MacabHeader.cxx
index 46f0c177d3fc..da270dd05ac8 100644
--- a/connectivity/source/drivers/macab/MacabHeader.cxx
+++ b/connectivity/source/drivers/macab/MacabHeader.cxx
@@ -290,10 +290,6 @@ MacabHeader::iterator::iterator ()
}
-MacabHeader::iterator::~iterator ()
-{
-}
-
MacabHeader::iterator& MacabHeader::iterator::operator= (MacabHeader *_record)
{
id = 0;
diff --git a/connectivity/source/drivers/macab/MacabHeader.hxx b/connectivity/source/drivers/macab/MacabHeader.hxx
index a230d237ab72..2c110990e985 100644
--- a/connectivity/source/drivers/macab/MacabHeader.hxx
+++ b/connectivity/source/drivers/macab/MacabHeader.hxx
@@ -27,36 +27,35 @@
namespace connectivity::macab
{
- class MacabHeader: public MacabRecord{
- protected:
- macabfield **sortRecord(sal_Int32 _start, sal_Int32 _length);
- public:
- MacabHeader();
- MacabHeader(const sal_Int32 _size, macabfield **_fields);
- virtual ~MacabHeader() override;
- void operator+= (const MacabHeader *r);
- OUString getString(const sal_Int32 i) const;
- void sortRecord();
- sal_Int32 getColumnNumber(std::u16string_view s) const;
-
- static sal_Int32 compareFields(const macabfield *_field1, const macabfield *_field2);
-
- MacabHeader *begin();
- sal_Int32 end() const;
- class iterator{
- protected:
- sal_Int32 id;
- MacabHeader *record;
- public:
- iterator& operator= (MacabHeader *_record);
- iterator();
- ~iterator();
- void operator++ ();
- bool operator!= (const sal_Int32 i) const;
- bool operator== (const sal_Int32 i) const;
- macabfield *operator* () const;
- };
- };
+ class MacabHeader: public MacabRecord{
+ protected:
+ macabfield **sortRecord(sal_Int32 _start, sal_Int32 _length);
+ public:
+ MacabHeader();
+ MacabHeader(const sal_Int32 _size, macabfield **_fields);
+ virtual ~MacabHeader() override;
+ void operator+= (const MacabHeader *r);
+ OUString getString(const sal_Int32 i) const;
+ void sortRecord();
+ sal_Int32 getColumnNumber(std::u16string_view s) const;
+
+ static sal_Int32 compareFields(const macabfield *_field1, const macabfield *_field2);
+
+ MacabHeader *begin();
+ sal_Int32 end() const;
+ class iterator{
+ protected:
+ sal_Int32 id;
+ MacabHeader *record;
+ public:
+ iterator& operator= (MacabHeader *_record);
+ iterator();
+ void operator++ ();
+ bool operator!= (const sal_Int32 i) const;
+ bool operator== (const sal_Int32 i) const;
+ macabfield *operator* () const;
+ };
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/macab/MacabPreparedStatement.hxx b/connectivity/source/drivers/macab/MacabPreparedStatement.hxx
index 6e649bf647f3..1a759800b509 100644
--- a/connectivity/source/drivers/macab/MacabPreparedStatement.hxx
+++ b/connectivity/source/drivers/macab/MacabPreparedStatement.hxx
@@ -28,84 +28,84 @@
namespace connectivity::macab
{
- typedef ::cppu::ImplInheritanceHelper< MacabCommonStatement,
- css::sdbc::XPreparedStatement,
- css::sdbc::XParameters,
- css::sdbc::XResultSetMetaDataSupplier,
- css::lang::XServiceInfo> MacabPreparedStatement_BASE;
+ typedef ::cppu::ImplInheritanceHelper< MacabCommonStatement,
+ css::sdbc::XPreparedStatement,
+ css::sdbc::XParameters,
+ css::sdbc::XResultSetMetaDataSupplier,
+ css::lang::XServiceInfo> MacabPreparedStatement_BASE;
- class MacabPreparedStatement : public MacabPreparedStatement_BASE
- {
- protected:
- OUString m_sSqlStatement;
- ::rtl::Reference< MacabResultSetMetaData >
- m_xMetaData;
- bool m_bPrepared;
- mutable sal_Int32 m_nParameterIndex;
- OValueRow m_aParameterRow;
+ class MacabPreparedStatement : public MacabPreparedStatement_BASE
+ {
+ protected:
+ OUString m_sSqlStatement;
+ ::rtl::Reference< MacabResultSetMetaData >
+ m_xMetaData;
+ bool m_bPrepared;
+ mutable sal_Int32 m_nParameterIndex;
+ OValueRow m_aParameterRow;
- /// @throws css::sdbc::SQLException
- void checkAndResizeParameters(sal_Int32 nParams);
- /// @throws css::sdbc::SQLException
- void setMacabFields() const;
+ /// @throws css::sdbc::SQLException
+ void checkAndResizeParameters(sal_Int32 nParams);
+ /// @throws css::sdbc::SQLException
+ void setMacabFields() const;
- protected:
- virtual void SAL_CALL setFastPropertyValue_NoBroadcast(
- sal_Int32 nHandle,
- const css::uno::Any& rValue) override;
+ protected:
+ virtual void SAL_CALL setFastPropertyValue_NoBroadcast(
+ sal_Int32 nHandle,
+ const css::uno::Any& rValue) override;
- virtual void resetParameters() const override;
- virtual void getNextParameter(OUString &rParameter) const override;
- virtual ~MacabPreparedStatement() override;
+ virtual void resetParameters() const override;
+ virtual void getNextParameter(OUString &rParameter) const override;
+ virtual ~MacabPreparedStatement() override;
- public:
- DECLARE_SERVICE_INFO();
- MacabPreparedStatement(MacabConnection* _pConnection, const OUString& sql);
+ public:
+ DECLARE_SERVICE_INFO();
+ MacabPreparedStatement(MacabConnection* _pConnection, const OUString& sql);
- // OComponentHelper
- virtual void SAL_CALL disposing() override;
+ // OComponentHelper
+ virtual void SAL_CALL disposing() override;
- // XPreparedStatement
- using MacabCommonStatement::executeQuery;
- using MacabCommonStatement::executeUpdate;
- using MacabCommonStatement::execute;
+ // XPreparedStatement
+ using MacabCommonStatement::executeQuery;
+ using MacabCommonStatement::executeUpdate;
+ using MacabCommonStatement::execute;
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL executeQuery( ) override;
- virtual sal_Int32 SAL_CALL executeUpdate( ) override;
- virtual sal_Bool SAL_CALL execute( ) override;
- virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL getConnection( ) override;
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL executeQuery( ) override;
+ virtual sal_Int32 SAL_CALL executeUpdate( ) override;
+ virtual sal_Bool SAL_CALL execute( ) override;
+ virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL getConnection( ) override;
- // XParameters
- virtual void SAL_CALL setNull( sal_Int32 parameterIndex, sal_Int32 sqlType ) override;
- virtual void SAL_CALL setObjectNull( sal_Int32 parameterIndex, sal_Int32 sqlType, const OUString& typeName ) override;
- virtual void SAL_CALL setBoolean( sal_Int32 parameterIndex, sal_Bool x ) override;
- virtual void SAL_CALL setByte( sal_Int32 parameterIndex, sal_Int8 x ) override;
- virtual void SAL_CALL setShort( sal_Int32 parameterIndex, sal_Int16 x ) override;
- virtual void SAL_CALL setInt( sal_Int32 parameterIndex, sal_Int32 x ) override;
- virtual void SAL_CALL setLong( sal_Int32 parameterIndex, sal_Int64 x ) override;
- virtual void SAL_CALL setFloat( sal_Int32 parameterIndex, float x ) override;
- virtual void SAL_CALL setDouble( sal_Int32 parameterIndex, double x ) override;
- virtual void SAL_CALL setString( sal_Int32 parameterIndex, const OUString& x ) override;
- virtual void SAL_CALL setBytes( sal_Int32 parameterIndex, const css::uno::Sequence< sal_Int8 >& x ) override;
- virtual void SAL_CALL setDate( sal_Int32 parameterIndex, const css::util::Date& x ) override;
- virtual void SAL_CALL setTime( sal_Int32 parameterIndex, const css::util::Time& x ) override;
- virtual void SAL_CALL setTimestamp( sal_Int32 parameterIndex, const css::util::DateTime& x ) override;
- virtual void SAL_CALL setBinaryStream( sal_Int32 parameterIndex, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length ) override;
- virtual void SAL_CALL setCharacterStream( sal_Int32 parameterIndex, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length ) override;
- virtual void SAL_CALL setObject( sal_Int32 parameterIndex, const css::uno::Any& x ) override;
- virtual void SAL_CALL setObjectWithInfo( sal_Int32 parameterIndex, const css::uno::Any& x, sal_Int32 targetSqlType, sal_Int32 scale ) override;
- virtual void SAL_CALL setRef( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XRef >& x ) override;
- virtual void SAL_CALL setBlob( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XBlob >& x ) override;
- virtual void SAL_CALL setClob( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XClob >& x ) override;
- virtual void SAL_CALL setArray( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XArray >& x ) override;
- virtual void SAL_CALL clearParameters( ) override;
+ // XParameters
+ virtual void SAL_CALL setNull( sal_Int32 parameterIndex, sal_Int32 sqlType ) override;
+ virtual void SAL_CALL setObjectNull( sal_Int32 parameterIndex, sal_Int32 sqlType, const OUString& typeName ) override;
+ virtual void SAL_CALL setBoolean( sal_Int32 parameterIndex, sal_Bool x ) override;
+ virtual void SAL_CALL setByte( sal_Int32 parameterIndex, sal_Int8 x ) override;
+ virtual void SAL_CALL setShort( sal_Int32 parameterIndex, sal_Int16 x ) override;
+ virtual void SAL_CALL setInt( sal_Int32 parameterIndex, sal_Int32 x ) override;
+ virtual void SAL_CALL setLong( sal_Int32 parameterIndex, sal_Int64 x ) override;
+ virtual void SAL_CALL setFloat( sal_Int32 parameterIndex, float x ) override;
+ virtual void SAL_CALL setDouble( sal_Int32 parameterIndex, double x ) override;
+ virtual void SAL_CALL setString( sal_Int32 parameterIndex, const OUString& x ) override;
+ virtual void SAL_CALL setBytes( sal_Int32 parameterIndex, const css::uno::Sequence< sal_Int8 >& x ) override;
+ virtual void SAL_CALL setDate( sal_Int32 parameterIndex, const css::util::Date& x ) override;
+ virtual void SAL_CALL setTime( sal_Int32 parameterIndex, const css::util::Time& x ) override;
+ virtual void SAL_CALL setTimestamp( sal_Int32 parameterIndex, const css::util::DateTime& x ) override;
+ virtual void SAL_CALL setBinaryStream( sal_Int32 parameterIndex, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length ) override;
+ virtual void SAL_CALL setCharacterStream( sal_Int32 parameterIndex, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length ) override;
+ virtual void SAL_CALL setObject( sal_Int32 parameterIndex, const css::uno::Any& x ) override;
+ virtual void SAL_CALL setObjectWithInfo( sal_Int32 parameterIndex, const css::uno::Any& x, sal_Int32 targetSqlType, sal_Int32 scale ) override;
+ virtual void SAL_CALL setRef( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XRef >& x ) override;
+ virtual void SAL_CALL setBlob( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XBlob >& x ) override;
+ virtual void SAL_CALL setClob( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XClob >& x ) override;
+ virtual void SAL_CALL setArray( sal_Int32 parameterIndex, const css::uno::Reference< css::sdbc::XArray >& x ) override;
+ virtual void SAL_CALL clearParameters( ) override;
- // XCloseable
- virtual void SAL_CALL close( ) override;
+ // XCloseable
+ virtual void SAL_CALL close( ) override;
- // XResultSetMetaDataSupplier
- virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) override;
- };
+ // XResultSetMetaDataSupplier
+ virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) override;
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/macab/MacabRecord.hxx b/connectivity/source/drivers/macab/MacabRecord.hxx
index 5184eefc8ab4..93d41ee92c35 100644
--- a/connectivity/source/drivers/macab/MacabRecord.hxx
+++ b/connectivity/source/drivers/macab/MacabRecord.hxx
@@ -34,38 +34,38 @@
namespace connectivity::macab
{
- /* a MacabRecord is at root a list of macabfields (which is just
- * something to hold both a CFTypeRef (a CoreFoundation object) and
- * its Address Book type.
- */
- struct macabfield
- {
- CFTypeRef value;
- ABPropertyType type;
- };
+ /* a MacabRecord is at root a list of macabfields (which is just
+ * something to hold both a CFTypeRef (a CoreFoundation object) and
+ * its Address Book type.
+ */
+ struct macabfield
+ {
+ CFTypeRef value;
+ ABPropertyType type;
+ };
- class MacabRecord{
- protected:
- sal_Int32 size;
- std::unique_ptr<macabfield *[]> fields;
- protected:
- void releaseFields();
- public:
- MacabRecord();
- explicit MacabRecord(const sal_Int32 _size);
- virtual ~MacabRecord();
- void insertAtColumn (CFTypeRef _value, ABPropertyType _type, const sal_Int32 _column);
- bool contains(const macabfield *_field) const;
- bool contains(const CFTypeRef _value) const;
- sal_Int32 getSize() const;
- macabfield *copy(const sal_Int32 i) const;
- macabfield *get(const sal_Int32 i) const;
+ class MacabRecord{
+ protected:
+ sal_Int32 size;
+ std::unique_ptr<macabfield *[]> fields;
+ protected:
+ void releaseFields();
+ public:
+ MacabRecord();
+ explicit MacabRecord(const sal_Int32 _size);
+ virtual ~MacabRecord();
+ void insertAtColumn (CFTypeRef _value, ABPropertyType _type, const sal_Int32 _column);
+ bool contains(const macabfield *_field) const;
+ bool contains(const CFTypeRef _value) const;
+ sal_Int32 getSize() const;
+ macabfield *copy(const sal_Int32 i) const;
+ macabfield *get(const sal_Int32 i) const;
- static sal_Int32 compareFields(const macabfield *_field1, const macabfield *_field2);
- static macabfield *createMacabField(const OUString& _newFieldString, const ABPropertyType _abtype);
- static OUString fieldToString(const macabfield *_aField);
+ static sal_Int32 compareFields(const macabfield *_field1, const macabfield *_field2);
+ static macabfield *createMacabField(const OUString& _newFieldString, const ABPropertyType _abtype);
+ static OUString fieldToString(const macabfield *_aField);
- };
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/macab/MacabRecords.cxx b/connectivity/source/drivers/macab/MacabRecords.cxx
index 4c2d4aed8fa1..07d462425e65 100644
--- a/connectivity/source/drivers/macab/MacabRecords.cxx
+++ b/connectivity/source/drivers/macab/MacabRecords.cxx
@@ -344,7 +344,7 @@ MacabHeader *MacabRecords::createHeaderForRecordType(const CFArrayRef _records,
/* While searching through the properties for required properties, these
* sal_Bools will keep track of what we have found.
*/
- bool bFoundRequiredProperties[requiredProperties.size()];
+ auto const bFoundRequiredProperties = std::make_unique<bool[]>(requiredProperties.size());
/* We have three MacabHeaders: headerDataForProperty is where we
@@ -1099,11 +1099,6 @@ MacabRecords::iterator::iterator ()
}
-MacabRecords::iterator::~iterator ()
-{
-}
-
-
MacabRecords::iterator& MacabRecords::iterator::operator= (MacabRecords *_records)
{
id = 0;
diff --git a/connectivity/source/drivers/macab/MacabRecords.hxx b/connectivity/source/drivers/macab/MacabRecords.hxx
index 004d10b1b6d2..f38705a12e86 100644
--- a/connectivity/source/drivers/macab/MacabRecords.hxx
+++ b/connectivity/source/drivers/macab/MacabRecords.hxx
@@ -35,92 +35,91 @@
namespace connectivity::macab
{
- /* This struct is for converting CF types to AB types (Core Foundation
- * types to Address Book types).
- */
- struct lcl_CFType {
- CFTypeID cf;
- sal_Int32 ab;
- };
-
- class MacabRecords{
- protected:
- /* MacabRecords is, at its core, a table of macabfields, in the
- * form of a header and a list of objects of type MacabRecord.
- * It also has a unique name that refers to the name of the table.
- */
- sal_Int32 recordsSize;
- sal_Int32 currentRecord;
- CFStringRef recordType;
- MacabHeader *header;
- MacabRecord **records;
- ABAddressBookRef addressBook;
- OUString m_sName;
-
- /* For converting CF types to AB types */
- std::vector<lcl_CFType> lcl_CFTypes;
-
- /* For required properties */
- std::vector<CFStringRef> requiredProperties;
-
- private:
- /* All of the private methods are for creating a MacabHeader or a
- * MacabRecord. They are used by the initialize method that goes
- * about filling a MacabRecords using all of the records in the
- * macOS Address Book.
- */
- void bootstrap_CF_types();
- void bootstrap_requiredProperties();
- MacabHeader *createHeaderForProperty(const ABRecordRef _record, const CFStringRef _propertyName, const CFStringRef _recordType, const bool _isPropertyRequired) const;
- MacabHeader *createHeaderForProperty(const ABPropertyType _propertyType, const CFTypeRef _propertyValue, const CFStringRef _propertyName) const;
- ABPropertyType getABTypeFromCFType(const CFTypeID cf_type ) const;
- void insertPropertyIntoMacabRecord(MacabRecord *_abrecord, const MacabHeader *_header, const OUString& _propertyName, const CFTypeRef _propertyValue) const;
- void insertPropertyIntoMacabRecord(const ABPropertyType _propertyType, MacabRecord *_abrecord, const MacabHeader *_header, const OUString& _propertyName, const CFTypeRef _propertyValue) const;
- public:
- MacabRecords(const ABAddressBookRef _addressBook, MacabHeader *_header, MacabRecord **_records, sal_Int32 _numRecords);
- explicit MacabRecords(const MacabRecords *_copy);
- explicit MacabRecords(const ABAddressBookRef _addressBook);
- ~MacabRecords();
-
- void initialize();
-
- void setHeader(MacabHeader *_header);
- MacabHeader *getHeader() const;
-
- void setName(const OUString& _sName);
- OUString const & getName() const;
-
- MacabRecord *insertRecord(MacabRecord *_newRecord, const sal_Int32 _location);
- void insertRecord(MacabRecord *_newRecord);
- MacabRecord *getRecord(const sal_Int32 _location) const;
- void swap(const sal_Int32 _id1, const sal_Int32 _id2);
-
- macabfield *getField(const sal_Int32 _recordNumber, const sal_Int32 _columnNumber) const;
- macabfield *getField(const sal_Int32 _recordNumber, std::u16string_view _columnName) const;
- sal_Int32 getFieldNumber(std::u16string_view _columnName) const;
-
- sal_Int32 size() const;
-
- MacabHeader *createHeaderForRecordType(const CFArrayRef _records, const CFStringRef _recordType) const;
- MacabRecord *createMacabRecord(const ABRecordRef _abrecord, const MacabHeader *_header, const CFStringRef _recordType) const;
-
- MacabRecords *begin();
- sal_Int32 end() const;
- class iterator{
- protected:
- MacabRecords *records;
- public:
- sal_Int32 id;
- iterator& operator= (MacabRecords *_records);
- iterator();
- ~iterator();
- void operator++ ();
- bool operator!= (const sal_Int32 i) const;
- bool operator== (const sal_Int32 i) const;
- MacabRecord *operator* () const;
- };
-
- };
+ /* This struct is for converting CF types to AB types (Core Foundation
+ * types to Address Book types).
+ */
+ struct lcl_CFType {
+ CFTypeID cf;
+ sal_Int32 ab;
+ };
+
+ class MacabRecords{
+ protected:
+ /* MacabRecords is, at its core, a table of macabfields, in the
+ * form of a header and a list of objects of type MacabRecord.
+ * It also has a unique name that refers to the name of the table.
+ */
+ sal_Int32 recordsSize;
+ sal_Int32 currentRecord;
+ CFStringRef recordType;
+ MacabHeader *header;
+ MacabRecord **records;
+ ABAddressBookRef addressBook;
+ OUString m_sName;
+
+ /* For converting CF types to AB types */
+ std::vector<lcl_CFType> lcl_CFTypes;
+
+ /* For required properties */
+ std::vector<CFStringRef> requiredProperties;
+
+ private:
+ /* All of the private methods are for creating a MacabHeader or a
+ * MacabRecord. They are used by the initialize method that goes
+ * about filling a MacabRecords using all of the records in the
+ * macOS Address Book.
+ */
+ void bootstrap_CF_types();
+ void bootstrap_requiredProperties();
+ MacabHeader *createHeaderForProperty(const ABRecordRef _record, const CFStringRef _propertyName, const CFStringRef _recordType, const bool _isPropertyRequired) const;
+ MacabHeader *createHeaderForProperty(const ABPropertyType _propertyType, const CFTypeRef _propertyValue, const CFStringRef _propertyName) const;
+ ABPropertyType getABTypeFromCFType(const CFTypeID cf_type ) const;
+ void insertPropertyIntoMacabRecord(MacabRecord *_abrecord, const MacabHeader *_header, const OUString& _propertyName, const CFTypeRef _propertyValue) const;
+ void insertPropertyIntoMacabRecord(const ABPropertyType _propertyType, MacabRecord *_abrecord, const MacabHeader *_header, const OUString& _propertyName, const CFTypeRef _propertyValue) const;
+ public:
+ MacabRecords(const ABAddressBookRef _addressBook, MacabHeader *_header, MacabRecord **_records, sal_Int32 _numRecords);
+ explicit MacabRecords(const MacabRecords *_copy);
+ explicit MacabRecords(const ABAddressBookRef _addressBook);
+ ~MacabRecords();
+
+ void initialize();
+
+ void setHeader(MacabHeader *_header);
+ MacabHeader *getHeader() const;
+
+ void setName(const OUString& _sName);
+ OUString const & getName() const;
+
+ MacabRecord *insertRecord(MacabRecord *_newRecord, const sal_Int32 _location);
+ void insertRecord(MacabRecord *_newRecord);
+ MacabRecord *getRecord(const sal_Int32 _location) const;
+ void swap(const sal_Int32 _id1, const sal_Int32 _id2);
+
+ macabfield *getField(const sal_Int32 _recordNumber, const sal_Int32 _columnNumber) const;
+ macabfield *getField(const sal_Int32 _recordNumber, std::u16string_view _columnName) const;
+ sal_Int32 getFieldNumber(std::u16string_view _columnName) const;
+
+ sal_Int32 size() const;
+
+ MacabHeader *createHeaderForRecordType(const CFArrayRef _records, const CFStringRef _recordType) const;
+ MacabRecord *createMacabRecord(const ABRecordRef _abrecord, const MacabHeader *_header, const CFStringRef _recordType) const;
+
+ MacabRecords *begin();
+ sal_Int32 end() const;
+ class iterator{
+ protected:
+ MacabRecords *records;
+ public:
+ sal_Int32 id;
+ iterator& operator= (MacabRecords *_records);
+ iterator();
+ void operator++ ();
+ bool operator!= (const sal_Int32 i) const;
+ bool operator== (const sal_Int32 i) const;
+ MacabRecord *operator* () const;
+ };
+
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/macab/MacabResultSet.cxx b/connectivity/source/drivers/macab/MacabResultSet.cxx
index ecb4ea79e417..e8784ba3a8a8 100644
--- a/connectivity/source/drivers/macab/MacabResultSet.cxx
+++ b/connectivity/source/drivers/macab/MacabResultSet.cxx
@@ -394,8 +394,7 @@ Date SAL_CALL MacabResultSet::getDate(sal_Int32)
::dbtools::throwFunctionNotSupportedSQLException("getDate", nullptr);
- Date aRet;
- return aRet;
+ return Date();
}
Time SAL_CALL MacabResultSet::getTime(sal_Int32)
@@ -405,8 +404,7 @@ Time SAL_CALL MacabResultSet::getTime(sal_Int32)
::dbtools::throwFunctionNotSupportedSQLException("getTime", nullptr);
- css::util::Time nRet;
- return nRet;
+ return css::util::Time();
}
DateTime SAL_CALL MacabResultSet::getTimestamp(sal_Int32 columnIndex)
@@ -885,7 +883,7 @@ Any SAL_CALL MacabResultSet::getBookmark()
{
if(uidField->type == kABStringProperty)
{
- return makeAny(CFStringToOUString( static_cast<CFStringRef>(uidField->value) ));
+ return Any(CFStringToOUString( static_cast<CFStringRef>(uidField->value) ));
}
}
}
@@ -981,28 +979,47 @@ Sequence< sal_Int32 > SAL_CALL MacabResultSet::deleteRows(const Sequence< Any
IPropertyArrayHelper* MacabResultSet::createArrayHelper() const
{
- Sequence< Property > aProps(6);
- Property* pProperties = aProps.getArray();
- sal_Int32 nPos = 0;
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
- PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), PropertyAttribute::READONLY);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
- PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
- PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISBOOKMARKABLE),
- PROPERTY_ID_ISBOOKMARKABLE, cppu::UnoType<bool>::get(), PropertyAttribute::READONLY);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
- PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
- PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY);
-
- return new OPropertyArrayHelper(aProps);
+ return new OPropertyArrayHelper
+ {
+ {
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
+ PROPERTY_ID_CURSORNAME,
+ cppu::UnoType<OUString>::get(),
+ PropertyAttribute::READONLY
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
+ PROPERTY_ID_FETCHDIRECTION,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
+ PROPERTY_ID_FETCHSIZE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISBOOKMARKABLE),
+ PROPERTY_ID_ISBOOKMARKABLE,
+ cppu::UnoType<bool>::get(),
+ PropertyAttribute::READONLY
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
+ PROPERTY_ID_RESULTSETCONCURRENCY,
+ cppu::UnoType<sal_Int32>::get(),
+ PropertyAttribute::READONLY
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
+ PROPERTY_ID_RESULTSETTYPE,
+ cppu::UnoType<sal_Int32>::get(),
+ PropertyAttribute::READONLY
+ }
+ }
+ };
}
IPropertyArrayHelper & MacabResultSet::getInfoHelper()
diff --git a/connectivity/source/drivers/macab/MacabResultSet.hxx b/connectivity/source/drivers/macab/MacabResultSet.hxx
index 306ef562d3b4..c3c949afc414 100644
--- a/connectivity/source/drivers/macab/MacabResultSet.hxx
+++ b/connectivity/source/drivers/macab/MacabResultSet.hxx
@@ -33,181 +33,181 @@
namespace connectivity::macab
{
- /*
- ** MacabResultSet
- */
- typedef ::cppu::WeakComponentImplHelper< css::sdbc::XResultSet,
- css::sdbc::XRow,
- css::sdbc::XResultSetMetaDataSupplier,
- css::util::XCancellable,
- css::sdbc::XWarningsSupplier,
- css::sdbc::XResultSetUpdate,
- css::sdbc::XRowUpdate,
- css::sdbcx::XRowLocate,
- css::sdbcx::XDeleteRows,
- css::sdbc::XCloseable,
- css::sdbc::XColumnLocate,
- css::lang::XServiceInfo> MacabResultSet_BASE;
- class MacabRecords;
-
- class MacabResultSet : public cppu::BaseMutex,
- public MacabResultSet_BASE,
- public ::cppu::OPropertySetHelper,
- public comphelper::OPropertyArrayUsageHelper<MacabResultSet>
+ /*
+ ** MacabResultSet
+ */
+ typedef ::cppu::WeakComponentImplHelper< css::sdbc::XResultSet,
+ css::sdbc::XRow,
+ css::sdbc::XResultSetMetaDataSupplier,
+ css::util::XCancellable,
+ css::sdbc::XWarningsSupplier,
+ css::sdbc::XResultSetUpdate,
+ css::sdbc::XRowUpdate,
+ css::sdbcx::XRowLocate,
+ css::sdbcx::XDeleteRows,
+ css::sdbc::XCloseable,
+ css::sdbc::XColumnLocate,
+ css::lang::XServiceInfo> MacabResultSet_BASE;
+ class MacabRecords;
+
+ class MacabResultSet : public cppu::BaseMutex,
+ public MacabResultSet_BASE,
+ public ::cppu::OPropertySetHelper,
+ public comphelper::OPropertyArrayUsageHelper<MacabResultSet>
+ {
+ protected:
+ ::rtl::Reference< MacabCommonStatement > m_xStatement; // the statement that has created this result set
+ ::rtl::Reference< MacabResultSetMetaData > m_xMetaData; // the description of the columns in this result set
+ MacabRecords * m_aMacabRecords; // address book entries matching the query
+ sal_Int32 m_nRowPos; // the current row within the result set
+ bool m_bWasNull; // last entry retrieved from this result set was NULL
+ OUString m_sTableName;
+
+ // OPropertyArrayUsageHelper
+ virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const override;
+
+ // OPropertySetHelper
+ virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
+
+ virtual sal_Bool SAL_CALL convertFastPropertyValue(
+ css::uno::Any & rConvertedValue,
+ css::uno::Any & rOldValue,
+ sal_Int32 nHandle,
+ const css::uno::Any& rValue) override;
+ virtual void SAL_CALL setFastPropertyValue_NoBroadcast(
+ sal_Int32 nHandle,
+ const css::uno::Any& rValue) override;
+ virtual void SAL_CALL getFastPropertyValue(
+ css::uno::Any& rValue,
+ sal_Int32 nHandle) const override;
+
+ // you can't delete objects of this type
+ virtual ~MacabResultSet() override;
+
+ public:
+ DECLARE_SERVICE_INFO();
+
+ explicit MacabResultSet(MacabCommonStatement *pStmt);
+
+ css::uno::Reference< css::uno::XInterface > operator *()
{
- protected:
- ::rtl::Reference< MacabCommonStatement > m_xStatement; // the statement that has created this result set
- ::rtl::Reference< MacabResultSetMetaData > m_xMetaData; // the description of the columns in this result set
- MacabRecords * m_aMacabRecords; // address book entries matching the query
- sal_Int32 m_nRowPos; // the current row within the result set
- bool m_bWasNull; // last entry retrieved from this result set was NULL
- OUString m_sTableName;
-
- // OPropertyArrayUsageHelper
- virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const override;
-
- // OPropertySetHelper
- virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
-
- virtual sal_Bool SAL_CALL convertFastPropertyValue(
- css::uno::Any & rConvertedValue,
- css::uno::Any & rOldValue,
- sal_Int32 nHandle,
- const css::uno::Any& rValue) override;
- virtual void SAL_CALL setFastPropertyValue_NoBroadcast(
- sal_Int32 nHandle,
- const css::uno::Any& rValue) override;
- virtual void SAL_CALL getFastPropertyValue(
- css::uno::Any& rValue,
- sal_Int32 nHandle) const override;
-
- // you can't delete objects of this type
- virtual ~MacabResultSet() override;
-
- public:
- DECLARE_SERVICE_INFO();
-
- explicit MacabResultSet(MacabCommonStatement *pStmt);
-
- css::uno::Reference< css::uno::XInterface > operator *()
- {
- return css::uno::Reference< css::uno::XInterface >(*static_cast<MacabResultSet_BASE*>(this));
- }
-
- void allMacabRecords();
- void someMacabRecords(const class MacabCondition *pCondition);
- void sortMacabRecords(const class MacabOrder *pOrder);
- void setTableName(const OUString& _sTableName);
-
- // ::cppu::OComponentHelper
- virtual void SAL_CALL disposing() override;
-
- // XInterface
- virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
- virtual void SAL_CALL acquire() noexcept override;
- virtual void SAL_CALL release() noexcept override;
-
- // XTypeProvider
- virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
-
- // XPropertySet
- virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) override;
-
- // XResultSet
- virtual sal_Bool SAL_CALL isBeforeFirst( ) override;
- virtual sal_Bool SAL_CALL isAfterLast( ) override;
- virtual sal_Bool SAL_CALL isFirst( ) override;
- virtual sal_Bool SAL_CALL isLast( ) override;
- virtual void SAL_CALL beforeFirst( ) override;
- virtual void SAL_CALL afterLast( ) override;
- virtual sal_Bool SAL_CALL first( ) override;
- virtual sal_Bool SAL_CALL last( ) override;
- virtual sal_Int32 SAL_CALL getRow( ) override;
- virtual sal_Bool SAL_CALL absolute( sal_Int32 row ) override;
- virtual sal_Bool SAL_CALL relative( sal_Int32 rows ) override;
- virtual sal_Bool SAL_CALL next( ) override;
- virtual sal_Bool SAL_CALL previous( ) override;
- virtual void SAL_CALL refreshRow( ) override;
- virtual sal_Bool SAL_CALL rowUpdated( ) override;
- virtual sal_Bool SAL_CALL rowInserted( ) override;
- virtual sal_Bool SAL_CALL rowDeleted( ) override;
- virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getStatement( ) override;
-
- // XRow
- virtual sal_Bool SAL_CALL wasNull( ) override;
- virtual OUString SAL_CALL getString( sal_Int32 columnIndex ) override;
- virtual sal_Bool SAL_CALL getBoolean( sal_Int32 columnIndex ) override;
- virtual sal_Int8 SAL_CALL getByte( sal_Int32 columnIndex ) override;
- virtual sal_Int16 SAL_CALL getShort( sal_Int32 columnIndex ) override;
- virtual sal_Int32 SAL_CALL getInt( sal_Int32 columnIndex ) override;
- virtual sal_Int64 SAL_CALL getLong( sal_Int32 columnIndex ) override;
- virtual float SAL_CALL getFloat( sal_Int32 columnIndex ) override;
- virtual double SAL_CALL getDouble( sal_Int32 columnIndex ) override;
- virtual css::uno::Sequence< sal_Int8 > SAL_CALL getBytes( sal_Int32 columnIndex ) override;
- virtual css::util::Date SAL_CALL getDate( sal_Int32 columnIndex ) override;
- virtual css::util::Time SAL_CALL getTime( sal_Int32 columnIndex ) override;
- virtual css::util::DateTime SAL_CALL getTimestamp( sal_Int32 columnIndex ) override;
- virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getBinaryStream( sal_Int32 columnIndex ) override;
- virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getCharacterStream( sal_Int32 columnIndex ) override;
- virtual css::uno::Any SAL_CALL getObject( sal_Int32 columnIndex, const css::uno::Reference< css::container::XNameAccess >& typeMap ) override;
- virtual css::uno::Reference< css::sdbc::XRef > SAL_CALL getRef( sal_Int32 columnIndex ) override;
- virtual css::uno::Reference< css::sdbc::XBlob > SAL_CALL getBlob( sal_Int32 columnIndex ) override;
- virtual css::uno::Reference< css::sdbc::XClob > SAL_CALL getClob( sal_Int32 columnIndex ) override;
- virtual css::uno::Reference< css::sdbc::XArray > SAL_CALL getArray( sal_Int32 columnIndex ) override;
-
- // XResultSetMetaDataSupplier
- virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) override;
-
- // XCancellable
- virtual void SAL_CALL cancel( ) override;
-
- // XCloseable
- virtual void SAL_CALL close( ) override;
-
- // XWarningsSupplier
- virtual css::uno::Any SAL_CALL getWarnings( ) override;
- virtual void SAL_CALL clearWarnings( ) override;
-
- // XResultSetUpdate
- virtual void SAL_CALL insertRow( ) override;
- virtual void SAL_CALL updateRow( ) override;
- virtual void SAL_CALL deleteRow( ) override;
- virtual void SAL_CALL cancelRowUpdates( ) override;
- virtual void SAL_CALL moveToInsertRow( ) override;
- virtual void SAL_CALL moveToCurrentRow( ) override;
- // XRowUpdate
- virtual void SAL_CALL updateNull( sal_Int32 columnIndex ) override;
- virtual void SAL_CALL updateBoolean( sal_Int32 columnIndex, sal_Bool x ) override;
- virtual void SAL_CALL updateByte( sal_Int32 columnIndex, sal_Int8 x ) override;
- virtual void SAL_CALL updateShort( sal_Int32 columnIndex, sal_Int16 x ) override;
- virtual void SAL_CALL updateInt( sal_Int32 columnIndex, sal_Int32 x ) override;
- virtual void SAL_CALL updateLong( sal_Int32 columnIndex, sal_Int64 x ) override;
- virtual void SAL_CALL updateFloat( sal_Int32 columnIndex, float x ) override;
- virtual void SAL_CALL updateDouble( sal_Int32 columnIndex, double x ) override;
- virtual void SAL_CALL updateString( sal_Int32 columnIndex, const OUString& x ) override;
- virtual void SAL_CALL updateBytes( sal_Int32 columnIndex, const css::uno::Sequence< sal_Int8 >& x ) override;
- virtual void SAL_CALL updateDate( sal_Int32 columnIndex, const css::util::Date& x ) override;
- virtual void SAL_CALL updateTime( sal_Int32 columnIndex, const css::util::Time& x ) override;
- virtual void SAL_CALL updateTimestamp( sal_Int32 columnIndex, const css::util::DateTime& x ) override;
- virtual void SAL_CALL updateBinaryStream( sal_Int32 columnIndex, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length ) override;
- virtual void SAL_CALL updateCharacterStream( sal_Int32 columnIndex, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length ) override;
- virtual void SAL_CALL updateObject( sal_Int32 columnIndex, const css::uno::Any& x ) override;
- virtual void SAL_CALL updateNumericObject( sal_Int32 columnIndex, const css::uno::Any& x, sal_Int32 scale ) override;
-
- // XColumnLocate
- virtual sal_Int32 SAL_CALL findColumn( const OUString& columnName ) override;
-
- // XRowLocate
- virtual css::uno::Any SAL_CALL getBookmark( ) override;
- virtual sal_Bool SAL_CALL moveToBookmark( const css::uno::Any& bookmark ) override;
- virtual sal_Bool SAL_CALL moveRelativeToBookmark( const css::uno::Any& bookmark, sal_Int32 rows ) override;
- virtual sal_Int32 SAL_CALL compareBookmarks( const css::uno::Any& firstItem, const css::uno::Any& secondItem ) override;
- virtual sal_Bool SAL_CALL hasOrderedBookmarks( ) override;
- virtual sal_Int32 SAL_CALL hashBookmark( const css::uno::Any& bookmark ) override;
-
- // XDeleteRows
- virtual css::uno::Sequence< sal_Int32 > SAL_CALL deleteRows( const css::uno::Sequence< css::uno::Any >& rows ) override;
- };
+ return css::uno::Reference< css::uno::XInterface >(*static_cast<MacabResultSet_BASE*>(this));
+ }
+
+ void allMacabRecords();
+ void someMacabRecords(const class MacabCondition *pCondition);
+ void sortMacabRecords(const class MacabOrder *pOrder);
+ void setTableName(const OUString& _sTableName);
+
+ // ::cppu::OComponentHelper
+ virtual void SAL_CALL disposing() override;
+
+ // XInterface
+ virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
+ virtual void SAL_CALL acquire() noexcept override;
+ virtual void SAL_CALL release() noexcept override;
+
+ // XTypeProvider
+ virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
+
+ // XPropertySet
+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) override;
+
+ // XResultSet
+ virtual sal_Bool SAL_CALL isBeforeFirst( ) override;
+ virtual sal_Bool SAL_CALL isAfterLast( ) override;
+ virtual sal_Bool SAL_CALL isFirst( ) override;
+ virtual sal_Bool SAL_CALL isLast( ) override;
+ virtual void SAL_CALL beforeFirst( ) override;
+ virtual void SAL_CALL afterLast( ) override;
+ virtual sal_Bool SAL_CALL first( ) override;
+ virtual sal_Bool SAL_CALL last( ) override;
+ virtual sal_Int32 SAL_CALL getRow( ) override;
+ virtual sal_Bool SAL_CALL absolute( sal_Int32 row ) override;
+ virtual sal_Bool SAL_CALL relative( sal_Int32 rows ) override;
+ virtual sal_Bool SAL_CALL next( ) override;
+ virtual sal_Bool SAL_CALL previous( ) override;
+ virtual void SAL_CALL refreshRow( ) override;
+ virtual sal_Bool SAL_CALL rowUpdated( ) override;
+ virtual sal_Bool SAL_CALL rowInserted( ) override;
+ virtual sal_Bool SAL_CALL rowDeleted( ) override;
+ virtual css::uno::Reference< css::uno::XInterface > SAL_CALL getStatement( ) override;
+
+ // XRow
+ virtual sal_Bool SAL_CALL wasNull( ) override;
+ virtual OUString SAL_CALL getString( sal_Int32 columnIndex ) override;
+ virtual sal_Bool SAL_CALL getBoolean( sal_Int32 columnIndex ) override;
+ virtual sal_Int8 SAL_CALL getByte( sal_Int32 columnIndex ) override;
+ virtual sal_Int16 SAL_CALL getShort( sal_Int32 columnIndex ) override;
+ virtual sal_Int32 SAL_CALL getInt( sal_Int32 columnIndex ) override;
+ virtual sal_Int64 SAL_CALL getLong( sal_Int32 columnIndex ) override;
+ virtual float SAL_CALL getFloat( sal_Int32 columnIndex ) override;
+ virtual double SAL_CALL getDouble( sal_Int32 columnIndex ) override;
+ virtual css::uno::Sequence< sal_Int8 > SAL_CALL getBytes( sal_Int32 columnIndex ) override;
+ virtual css::util::Date SAL_CALL getDate( sal_Int32 columnIndex ) override;
+ virtual css::util::Time SAL_CALL getTime( sal_Int32 columnIndex ) override;
+ virtual css::util::DateTime SAL_CALL getTimestamp( sal_Int32 columnIndex ) override;
+ virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getBinaryStream( sal_Int32 columnIndex ) override;
+ virtual css::uno::Reference< css::io::XInputStream > SAL_CALL getCharacterStream( sal_Int32 columnIndex ) override;
+ virtual css::uno::Any SAL_CALL getObject( sal_Int32 columnIndex, const css::uno::Reference< css::container::XNameAccess >& typeMap ) override;
+ virtual css::uno::Reference< css::sdbc::XRef > SAL_CALL getRef( sal_Int32 columnIndex ) override;
+ virtual css::uno::Reference< css::sdbc::XBlob > SAL_CALL getBlob( sal_Int32 columnIndex ) override;
+ virtual css::uno::Reference< css::sdbc::XClob > SAL_CALL getClob( sal_Int32 columnIndex ) override;
+ virtual css::uno::Reference< css::sdbc::XArray > SAL_CALL getArray( sal_Int32 columnIndex ) override;
+
+ // XResultSetMetaDataSupplier
+ virtual css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL getMetaData( ) override;
+
+ // XCancellable
+ virtual void SAL_CALL cancel( ) override;
+
+ // XCloseable
+ virtual void SAL_CALL close( ) override;
+
+ // XWarningsSupplier
+ virtual css::uno::Any SAL_CALL getWarnings( ) override;
+ virtual void SAL_CALL clearWarnings( ) override;
+
+ // XResultSetUpdate
+ virtual void SAL_CALL insertRow( ) override;
+ virtual void SAL_CALL updateRow( ) override;
+ virtual void SAL_CALL deleteRow( ) override;
+ virtual void SAL_CALL cancelRowUpdates( ) override;
+ virtual void SAL_CALL moveToInsertRow( ) override;
+ virtual void SAL_CALL moveToCurrentRow( ) override;
+ // XRowUpdate
+ virtual void SAL_CALL updateNull( sal_Int32 columnIndex ) override;
+ virtual void SAL_CALL updateBoolean( sal_Int32 columnIndex, sal_Bool x ) override;
+ virtual void SAL_CALL updateByte( sal_Int32 columnIndex, sal_Int8 x ) override;
+ virtual void SAL_CALL updateShort( sal_Int32 columnIndex, sal_Int16 x ) override;
+ virtual void SAL_CALL updateInt( sal_Int32 columnIndex, sal_Int32 x ) override;
+ virtual void SAL_CALL updateLong( sal_Int32 columnIndex, sal_Int64 x ) override;
+ virtual void SAL_CALL updateFloat( sal_Int32 columnIndex, float x ) override;
+ virtual void SAL_CALL updateDouble( sal_Int32 columnIndex, double x ) override;
+ virtual void SAL_CALL updateString( sal_Int32 columnIndex, const OUString& x ) override;
+ virtual void SAL_CALL updateBytes( sal_Int32 columnIndex, const css::uno::Sequence< sal_Int8 >& x ) override;
+ virtual void SAL_CALL updateDate( sal_Int32 columnIndex, const css::util::Date& x ) override;
+ virtual void SAL_CALL updateTime( sal_Int32 columnIndex, const css::util::Time& x ) override;
+ virtual void SAL_CALL updateTimestamp( sal_Int32 columnIndex, const css::util::DateTime& x ) override;
+ virtual void SAL_CALL updateBinaryStream( sal_Int32 columnIndex, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length ) override;
+ virtual void SAL_CALL updateCharacterStream( sal_Int32 columnIndex, const css::uno::Reference< css::io::XInputStream >& x, sal_Int32 length ) override;
+ virtual void SAL_CALL updateObject( sal_Int32 columnIndex, const css::uno::Any& x ) override;
+ virtual void SAL_CALL updateNumericObject( sal_Int32 columnIndex, const css::uno::Any& x, sal_Int32 scale ) override;
+
+ // XColumnLocate
+ virtual sal_Int32 SAL_CALL findColumn( const OUString& columnName ) override;
+
+ // XRowLocate
+ virtual css::uno::Any SAL_CALL getBookmark( ) override;
+ virtual sal_Bool SAL_CALL moveToBookmark( const css::uno::Any& bookmark ) override;
+ virtual sal_Bool SAL_CALL moveRelativeToBookmark( const css::uno::Any& bookmark, sal_Int32 rows ) override;
+ virtual sal_Int32 SAL_CALL compareBookmarks( const css::uno::Any& firstItem, const css::uno::Any& secondItem ) override;
+ virtual sal_Bool SAL_CALL hasOrderedBookmarks( ) override;
+ virtual sal_Int32 SAL_CALL hashBookmark( const css::uno::Any& bookmark ) override;
+
+ // XDeleteRows
+ virtual css::uno::Sequence< sal_Int32 > SAL_CALL deleteRows( const css::uno::Sequence< css::uno::Any >& rows ) override;
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/macab/MacabResultSetMetaData.cxx b/connectivity/source/drivers/macab/MacabResultSetMetaData.cxx
index d0ed7298f92b..e08d92cfceb6 100644
--- a/connectivity/source/drivers/macab/MacabResultSetMetaData.cxx
+++ b/connectivity/source/drivers/macab/MacabResultSetMetaData.cxx
@@ -23,6 +23,7 @@
#include "MacabRecords.hxx"
#include "MacabAddressBook.hxx"
#include "macabutilities.hxx"
+#include <connectivity/dbexception.hxx>
#include <strings.hrc>
using namespace connectivity::macab;
diff --git a/connectivity/source/drivers/macab/MacabResultSetMetaData.hxx b/connectivity/source/drivers/macab/MacabResultSetMetaData.hxx
index a7afdf4a094a..16dc1d34ea8d 100644
--- a/connectivity/source/drivers/macab/MacabResultSetMetaData.hxx
+++ b/connectivity/source/drivers/macab/MacabResultSetMetaData.hxx
@@ -23,59 +23,58 @@
#include <connectivity/CommonTools.hxx>
#include <com/sun/star/sdbc/XResultSetMetaData.hpp>
#include <cppuhelper/implbase.hxx>
-#include <connectivity/dbexception.hxx>
#include <rtl/ref.hxx>
namespace connectivity::macab
{
- /*
- ** MacabResultSetMetaData
- */
- class MacabResultSetMetaData : public ::cppu::WeakImplHelper< css::sdbc::XResultSetMetaData>
- {
- MacabConnection* m_pConnection;
- OUString m_sTableName;
- std::vector<sal_Int32> m_aMacabFields; // for each selected column, contains the number
- // of the corresponding AddressBook field
+ /*
+ ** MacabResultSetMetaData
+ */
+ class MacabResultSetMetaData : public ::cppu::WeakImplHelper< css::sdbc::XResultSetMetaData>
+ {
+ MacabConnection* m_pConnection;
+ OUString m_sTableName;
+ std::vector<sal_Int32> m_aMacabFields; // for each selected column, contains the number
+ // of the corresponding AddressBook field
- protected:
- virtual ~MacabResultSetMetaData() override;
+ protected:
+ virtual ~MacabResultSetMetaData() override;
- public:
- MacabResultSetMetaData(MacabConnection* _pConnection, OUString const & _sTableName);
+ public:
+ MacabResultSetMetaData(MacabConnection* _pConnection, OUString const & _sTableName);
- // avoid ambiguous cast error from the compiler
- operator css::uno::Reference< css::sdbc::XResultSetMetaData > () noexcept
- { return this; }
+ // avoid ambiguous cast error from the compiler
+ operator css::uno::Reference< css::sdbc::XResultSetMetaData > () noexcept
+ { return this; }
- /// @throws css::sdbc::SQLException
- void setMacabFields(
- const ::rtl::Reference<connectivity::OSQLColumns> &xColumns);
- sal_uInt32 fieldAtColumn(sal_Int32 columnIndex) const
- { return m_aMacabFields[columnIndex - 1]; }
+ /// @throws css::sdbc::SQLException
+ void setMacabFields(
+ const ::rtl::Reference<connectivity::OSQLColumns> &xColumns);
+ sal_uInt32 fieldAtColumn(sal_Int32 columnIndex) const
+ { return m_aMacabFields[columnIndex - 1]; }
- virtual sal_Int32 SAL_CALL getColumnCount( ) override;
- virtual sal_Bool SAL_CALL isAutoIncrement( sal_Int32 column ) override;
- virtual sal_Bool SAL_CALL isCaseSensitive( sal_Int32 column ) override;
- virtual sal_Bool SAL_CALL isSearchable( sal_Int32 column ) override;
- virtual sal_Bool SAL_CALL isCurrency( sal_Int32 column ) override;
- virtual sal_Int32 SAL_CALL isNullable( sal_Int32 column ) override;
- virtual sal_Bool SAL_CALL isSigned( sal_Int32 column ) override;
- virtual sal_Int32 SAL_CALL getColumnDisplaySize( sal_Int32 column ) override;
- virtual OUString SAL_CALL getColumnLabel( sal_Int32 column ) override;
- virtual OUString SAL_CALL getColumnName( sal_Int32 column ) override;
- virtual OUString SAL_CALL getSchemaName( sal_Int32 column ) override;
- virtual sal_Int32 SAL_CALL getPrecision( sal_Int32 column ) override;
- virtual sal_Int32 SAL_CALL getScale( sal_Int32 column ) override;
- virtual OUString SAL_CALL getTableName( sal_Int32 column ) override;
- virtual OUString SAL_CALL getCatalogName( sal_Int32 column ) override;
- virtual sal_Int32 SAL_CALL getColumnType( sal_Int32 column ) override;
- virtual OUString SAL_CALL getColumnTypeName( sal_Int32 column ) override;
- virtual sal_Bool SAL_CALL isReadOnly( sal_Int32 column ) override;
- virtual sal_Bool SAL_CALL isWritable( sal_Int32 column ) override;
- virtual sal_Bool SAL_CALL isDefinitelyWritable( sal_Int32 column ) override;
- virtual OUString SAL_CALL getColumnServiceName( sal_Int32 column ) override;
- };
+ virtual sal_Int32 SAL_CALL getColumnCount( ) override;
+ virtual sal_Bool SAL_CALL isAutoIncrement( sal_Int32 column ) override;
+ virtual sal_Bool SAL_CALL isCaseSensitive( sal_Int32 column ) override;
+ virtual sal_Bool SAL_CALL isSearchable( sal_Int32 column ) override;
+ virtual sal_Bool SAL_CALL isCurrency( sal_Int32 column ) override;
+ virtual sal_Int32 SAL_CALL isNullable( sal_Int32 column ) override;
+ virtual sal_Bool SAL_CALL isSigned( sal_Int32 column ) override;
+ virtual sal_Int32 SAL_CALL getColumnDisplaySize( sal_Int32 column ) override;
+ virtual OUString SAL_CALL getColumnLabel( sal_Int32 column ) override;
+ virtual OUString SAL_CALL getColumnName( sal_Int32 column ) override;
+ virtual OUString SAL_CALL getSchemaName( sal_Int32 column ) override;
+ virtual sal_Int32 SAL_CALL getPrecision( sal_Int32 column ) override;
+ virtual sal_Int32 SAL_CALL getScale( sal_Int32 column ) override;
+ virtual OUString SAL_CALL getTableName( sal_Int32 column ) override;
+ virtual OUString SAL_CALL getCatalogName( sal_Int32 column ) override;
+ virtual sal_Int32 SAL_CALL getColumnType( sal_Int32 column ) override;
+ virtual OUString SAL_CALL getColumnTypeName( sal_Int32 column ) override;
+ virtual sal_Bool SAL_CALL isReadOnly( sal_Int32 column ) override;
+ virtual sal_Bool SAL_CALL isWritable( sal_Int32 column ) override;
+ virtual sal_Bool SAL_CALL isDefinitelyWritable( sal_Int32 column ) override;
+ virtual OUString SAL_CALL getColumnServiceName( sal_Int32 column ) override;
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/macab/MacabStatement.cxx b/connectivity/source/drivers/macab/MacabStatement.cxx
index 6c8a02cd7391..95b922ce6bc7 100644
--- a/connectivity/source/drivers/macab/MacabStatement.cxx
+++ b/connectivity/source/drivers/macab/MacabStatement.cxx
@@ -472,7 +472,7 @@ Any SAL_CALL MacabCommonStatement::getWarnings( )
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(rBHelper.bDisposed);
- return makeAny(m_aLastWarning);
+ return Any(m_aLastWarning);
}
void SAL_CALL MacabCommonStatement::clearWarnings( )
@@ -487,31 +487,71 @@ void SAL_CALL MacabCommonStatement::clearWarnings( )
{
// this properties are defined by the service statement
// they must be in alphabetic order
- Sequence< Property > aProps(10);
- Property* pProperties = aProps.getArray();
- sal_Int32 nPos = 0;
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
- PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING),
- PROPERTY_ID_ESCAPEPROCESSING, cppu::UnoType<bool>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
- PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
- PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE),
- PROPERTY_ID_MAXFIELDSIZE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS),
- PROPERTY_ID_MAXROWS, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT),
- PROPERTY_ID_QUERYTIMEOUT, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
- PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
- PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS),
- PROPERTY_ID_USEBOOKMARKS, cppu::UnoType<bool>::get(), 0);
-
- return new ::cppu::OPropertyArrayHelper(aProps);
+ return new ::cppu::OPropertyArrayHelper
+ {
+ {
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
+ PROPERTY_ID_CURSORNAME,
+ cppu::UnoType<OUString>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING),
+ PROPERTY_ID_ESCAPEPROCESSING,
+ cppu::UnoType<bool>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
+ PROPERTY_ID_FETCHDIRECTION,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
+ PROPERTY_ID_FETCHSIZE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE),
+ PROPERTY_ID_MAXFIELDSIZE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS),
+ PROPERTY_ID_MAXROWS,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT),
+ PROPERTY_ID_QUERYTIMEOUT,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
+ PROPERTY_ID_RESULTSETCONCURRENCY,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
+ PROPERTY_ID_RESULTSETTYPE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS),
+ PROPERTY_ID_USEBOOKMARKS,
+ cppu::UnoType<bool>::get(),
+ 0
+ }
+ }
+ };
}
::cppu::IPropertyArrayHelper & MacabCommonStatement::getInfoHelper()
diff --git a/connectivity/source/drivers/macab/MacabStatement.hxx b/connectivity/source/drivers/macab/MacabStatement.hxx
index 6b0c53c234ad..8c72bd55974b 100644
--- a/connectivity/source/drivers/macab/MacabStatement.hxx
+++ b/connectivity/source/drivers/macab/MacabStatement.hxx
@@ -24,6 +24,7 @@
#include <connectivity/sqliterator.hxx>
#include <connectivity/sqlparse.hxx>
#include <com/sun/star/sdbc/XStatement.hpp>
+#include <com/sun/star/sdbc/SQLWarning.hpp>
#include <com/sun/star/util/XCancellable.hpp>
#include <cppuhelper/compbase.hxx>
#include <cppuhelper/implbase.hxx>
@@ -32,137 +33,137 @@
namespace connectivity::macab
{
- typedef ::cppu::WeakComponentImplHelper< css::sdbc::XStatement,
- css::sdbc::XWarningsSupplier,
- css::util::XCancellable,
- css::sdbc::XCloseable> MacabCommonStatement_BASE;
-
-
- // Class MacabCommonStatement
- // is a base class for the normal statement and for the prepared statement
-
- class MacabCommonStatement : public cppu::BaseMutex,
- public MacabCommonStatement_BASE,
- public ::cppu::OPropertySetHelper,
- public comphelper::OPropertyArrayUsageHelper<MacabCommonStatement>
-
- {
- css::sdbc::SQLWarning m_aLastWarning;
-
- protected:
- connectivity::OSQLParser m_aParser;
- connectivity::OSQLParseTreeIterator m_aSQLIterator;
- connectivity::OSQLParseNode* m_pParseTree;
- MacabConnection* m_pConnection; // The owning Connection object
- MacabHeader* m_pHeader; // The header of the address book on which to run queries (provided by m_pConnection)
- css::uno::WeakReference< css::sdbc::XResultSet> m_xResultSet; // The last ResultSet created
-
-
- protected:
- /// @throws css::sdbc::SQLException
- class MacabCondition *analyseWhereClause(
- const OSQLParseNode *pParseNode) const;
- /// @throws css::sdbc::SQLException
- class MacabOrder *analyseOrderByClause(
- const OSQLParseNode *pParseNode) const;
- OUString getTableName( ) const;
- /// @throws css::sdbc::SQLException
- void setMacabFields(class MacabResultSet *pResult) const;
- /// @throws css::sdbc::SQLException
- void selectRecords(MacabResultSet *pResult) const;
- /// @throws css::sdbc::SQLException
- void sortRecords(MacabResultSet *pResult) const;
-
- // OPropertyArrayUsageHelper
- virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const override;
-
- // OPropertySetHelper
- virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
- virtual sal_Bool SAL_CALL convertFastPropertyValue(
- css::uno::Any & rConvertedValue,
- css::uno::Any & rOldValue,
- sal_Int32 nHandle,
- const css::uno::Any& rValue) override;
- virtual void SAL_CALL setFastPropertyValue_NoBroadcast(
- sal_Int32 nHandle,
- const css::uno::Any& rValue) override;
- virtual void SAL_CALL getFastPropertyValue(
- css::uno::Any& rValue,
- sal_Int32 nHandle) const override;
-
- /// @throws css::sdbc::SQLException
- virtual void resetParameters() const;
- /// @throws css::sdbc::SQLException
- virtual void getNextParameter(OUString &rParameter) const;
- virtual ~MacabCommonStatement() override;
-
- public:
- using MacabCommonStatement_BASE::rBHelper;
-
- explicit MacabCommonStatement(MacabConnection *_pConnection);
- using MacabCommonStatement_BASE::operator css::uno::Reference< css::uno::XInterface >;
-
- // OComponentHelper
- using MacabCommonStatement_BASE::disposing;
-
- // XInterface
- virtual void SAL_CALL release() noexcept override;
- virtual void SAL_CALL acquire() noexcept override;
- virtual css::uno::Any SAL_CALL queryInterface(
- const css::uno::Type & rType
- ) override;
-
- // XTypeProvider
- virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes(
- ) override;
-
- // XPropertySet
- virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(
- ) override;
-
- // XStatement
- virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL executeQuery(
- const OUString& sql ) override;
- virtual sal_Int32 SAL_CALL executeUpdate(
- const OUString& sql ) override;
- virtual sal_Bool SAL_CALL execute(
- const OUString& sql ) override;
- virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL getConnection(
- ) override;
-
- // XWarningsSupplier
- virtual css::uno::Any SAL_CALL getWarnings(
- ) override;
- virtual void SAL_CALL clearWarnings(
- ) override;
-
- // XCancellable
- virtual void SAL_CALL cancel(
- ) override;
-
- // XCloseable
- virtual void SAL_CALL close(
- ) override;
-
- // other methods
- MacabConnection* getOwnConnection() const { return m_pConnection; }
- };
-
-
- // Class MacabStatement
-
- typedef ::cppu::ImplInheritanceHelper<
- MacabCommonStatement, css::lang::XServiceInfo > MacabStatement_BASE;
-
- class MacabStatement : public MacabStatement_BASE
- {
- protected:
- virtual ~MacabStatement() override { }
-
- public:
- explicit MacabStatement(MacabConnection* _pConnection);
- DECLARE_SERVICE_INFO();
- };
+ typedef ::cppu::WeakComponentImplHelper< css::sdbc::XStatement,
+ css::sdbc::XWarningsSupplier,
+ css::util::XCancellable,
+ css::sdbc::XCloseable> MacabCommonStatement_BASE;
+
+
+ // Class MacabCommonStatement
+ // is a base class for the normal statement and for the prepared statement
+
+ class MacabCommonStatement : public cppu::BaseMutex,
+ public MacabCommonStatement_BASE,
+ public ::cppu::OPropertySetHelper,
+ public comphelper::OPropertyArrayUsageHelper<MacabCommonStatement>
+
+ {
+ css::sdbc::SQLWarning m_aLastWarning;
+
+ protected:
+ connectivity::OSQLParser m_aParser;
+ connectivity::OSQLParseTreeIterator m_aSQLIterator;
+ connectivity::OSQLParseNode* m_pParseTree;
+ MacabConnection* m_pConnection; // The owning Connection object
+ MacabHeader* m_pHeader; // The header of the address book on which to run queries (provided by m_pConnection)
+ css::uno::WeakReference< css::sdbc::XResultSet> m_xResultSet; // The last ResultSet created
+
+
+ protected:
+ /// @throws css::sdbc::SQLException
+ class MacabCondition *analyseWhereClause(
+ const OSQLParseNode *pParseNode) const;
+ /// @throws css::sdbc::SQLException
+ class MacabOrder *analyseOrderByClause(
+ const OSQLParseNode *pParseNode) const;
+ OUString getTableName( ) const;
+ /// @throws css::sdbc::SQLException
+ void setMacabFields(class MacabResultSet *pResult) const;
+ /// @throws css::sdbc::SQLException
+ void selectRecords(MacabResultSet *pResult) const;
+ /// @throws css::sdbc::SQLException
+ void sortRecords(MacabResultSet *pResult) const;
+
+ // OPropertyArrayUsageHelper
+ virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const override;
+
+ // OPropertySetHelper
+ virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
+ virtual sal_Bool SAL_CALL convertFastPropertyValue(
+ css::uno::Any & rConvertedValue,
+ css::uno::Any & rOldValue,
+ sal_Int32 nHandle,
+ const css::uno::Any& rValue) override;
+ virtual void SAL_CALL setFastPropertyValue_NoBroadcast(
+ sal_Int32 nHandle,
+ const css::uno::Any& rValue) override;
+ virtual void SAL_CALL getFastPropertyValue(
+ css::uno::Any& rValue,
+ sal_Int32 nHandle) const override;
+
+ /// @throws css::sdbc::SQLException
+ virtual void resetParameters() const;
+ /// @throws css::sdbc::SQLException
+ virtual void getNextParameter(OUString &rParameter) const;
+ virtual ~MacabCommonStatement() override;
+
+ public:
+ using MacabCommonStatement_BASE::rBHelper;
+
+ explicit MacabCommonStatement(MacabConnection *_pConnection);
+ using MacabCommonStatement_BASE::operator css::uno::Reference< css::uno::XInterface >;
+
+ // OComponentHelper
+ using MacabCommonStatement_BASE::disposing;
+
+ // XInterface
+ virtual void SAL_CALL release() noexcept override;
+ virtual void SAL_CALL acquire() noexcept override;
+ virtual css::uno::Any SAL_CALL queryInterface(
+ const css::uno::Type & rType
+ ) override;
+
+ // XTypeProvider
+ virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes(
+ ) override;
+
+ // XPropertySet
+ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(
+ ) override;
+
+ // XStatement
+ virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL executeQuery(
+ const OUString& sql ) override;
+ virtual sal_Int32 SAL_CALL executeUpdate(
+ const OUString& sql ) override;
+ virtual sal_Bool SAL_CALL execute(
+ const OUString& sql ) override;
+ virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL getConnection(
+ ) override;
+
+ // XWarningsSupplier
+ virtual css::uno::Any SAL_CALL getWarnings(
+ ) override;
+ virtual void SAL_CALL clearWarnings(
+ ) override;
+
+ // XCancellable
+ virtual void SAL_CALL cancel(
+ ) override;
+
+ // XCloseable
+ virtual void SAL_CALL close(
+ ) override;
+
+ // other methods
+ MacabConnection* getOwnConnection() const { return m_pConnection; }
+ };
+
+
+ // Class MacabStatement
+
+ typedef ::cppu::ImplInheritanceHelper<
+ MacabCommonStatement, css::lang::XServiceInfo > MacabStatement_BASE;
+
+ class MacabStatement : public MacabStatement_BASE
+ {
+ protected:
+ virtual ~MacabStatement() override { }
+
+ public:
+ explicit MacabStatement(MacabConnection* _pConnection);
+ DECLARE_SERVICE_INFO();
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/macab/MacabTable.hxx b/connectivity/source/drivers/macab/MacabTable.hxx
index 897d589cc697..ac57c49c7f0c 100644
--- a/connectivity/source/drivers/macab/MacabTable.hxx
+++ b/connectivity/source/drivers/macab/MacabTable.hxx
@@ -24,31 +24,31 @@
namespace connectivity::macab
{
- typedef connectivity::sdbcx::OTable MacabTable_TYPEDEF;
-
- class MacabTable : public MacabTable_TYPEDEF
- {
- css::uno::Reference< css::sdbc::XDatabaseMetaData > m_xMetaData;
- MacabConnection* m_pConnection;
-
- public:
- MacabTable( sdbcx::OCollection* _pTables, MacabConnection* _pConnection);
- MacabTable( sdbcx::OCollection* _pTables,
- MacabConnection* _pConnection,
- const OUString& Name,
- const OUString& Type,
- const OUString& Description = OUString(),
- const OUString& SchemaName = OUString(),
- const OUString& CatalogName = OUString()
- );
-
- MacabConnection* getConnection() { return m_pConnection;}
-
- virtual void refreshColumns() override;
-
- OUString const & getTableName() const { return m_Name; }
- OUString const & getSchema() const { return m_SchemaName; }
- };
+ typedef connectivity::sdbcx::OTable MacabTable_TYPEDEF;
+
+ class MacabTable : public MacabTable_TYPEDEF
+ {
+ css::uno::Reference< css::sdbc::XDatabaseMetaData > m_xMetaData;
+ MacabConnection* m_pConnection;
+
+ public:
+ MacabTable( sdbcx::OCollection* _pTables, MacabConnection* _pConnection);
+ MacabTable( sdbcx::OCollection* _pTables,
+ MacabConnection* _pConnection,
+ const OUString& Name,
+ const OUString& Type,
+ const OUString& Description = OUString(),
+ const OUString& SchemaName = OUString(),
+ const OUString& CatalogName = OUString()
+ );
+
+ MacabConnection* getConnection() { return m_pConnection;}
+
+ virtual void refreshColumns() override;
+
+ OUString const & getTableName() const { return m_Name; }
+ OUString const & getSchema() const { return m_SchemaName; }
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/macab/MacabTables.cxx b/connectivity/source/drivers/macab/MacabTables.cxx
index e7149d2646c1..e7aba053a48a 100644
--- a/connectivity/source/drivers/macab/MacabTables.cxx
+++ b/connectivity/source/drivers/macab/MacabTables.cxx
@@ -36,7 +36,7 @@ using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
using namespace ::com::sun::star::lang;
-sdbcx::ObjectType MacabTables::createObject(const OUString& _rName)
+css::uno::Reference< css::beans::XPropertySet > MacabTables::createObject(const OUString& _rName)
{
OUString aName,aSchema;
aSchema = "%";
@@ -46,7 +46,7 @@ sdbcx::ObjectType MacabTables::createObject(const OUString& _rName)
Reference< XResultSet > xResult = m_xMetaData->getTables(Any(), aSchema, aName, aTypes);
- sdbcx::ObjectType xRet;
+ css::uno::Reference< css::beans::XPropertySet > xRet;
if (xResult.is())
{
Reference< XRow > xRow(xResult, UNO_QUERY);
diff --git a/connectivity/source/drivers/macab/MacabTables.hxx b/connectivity/source/drivers/macab/MacabTables.hxx
index 0b0d841b7a43..d9ccad86da13 100644
--- a/connectivity/source/drivers/macab/MacabTables.hxx
+++ b/connectivity/source/drivers/macab/MacabTables.hxx
@@ -24,26 +24,26 @@
namespace connectivity::macab
{
- class MacabTables : public sdbcx::OCollection
- {
- css::uno::Reference< css::sdbc::XDatabaseMetaData > m_xMetaData;
+ class MacabTables : public sdbcx::OCollection
+ {
+ css::uno::Reference< css::sdbc::XDatabaseMetaData > m_xMetaData;
- protected:
- virtual sdbcx::ObjectType createObject(const OUString& _rName) override;
- virtual void impl_refresh() override;
+ protected:
+ virtual css::uno::Reference< css::beans::XPropertySet > createObject(const OUString& _rName) override;
+ virtual void impl_refresh() override;
- public:
- MacabTables(
- const css::uno::Reference< css::sdbc::XDatabaseMetaData >& _rMetaData,
- ::cppu::OWeakObject& _rParent,
- ::osl::Mutex& _rMutex,
- const ::std::vector< OUString> &_rVector)
- : sdbcx::OCollection(_rParent,true,_rMutex,_rVector),
- m_xMetaData(_rMetaData)
- { }
+ public:
+ MacabTables(
+ const css::uno::Reference< css::sdbc::XDatabaseMetaData >& _rMetaData,
+ ::cppu::OWeakObject& _rParent,
+ ::osl::Mutex& _rMutex,
+ const ::std::vector< OUString> &_rVector)
+ : sdbcx::OCollection(_rParent,true,_rMutex,_rVector),
+ m_xMetaData(_rMetaData)
+ { }
- virtual void disposing() override;
- };
+ virtual void disposing() override;
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/macab/macaborder.hxx b/connectivity/source/drivers/macab/macaborder.hxx
index e5eb6c987ce2..36151cb76ea6 100644
--- a/connectivity/source/drivers/macab/macaborder.hxx
+++ b/connectivity/source/drivers/macab/macaborder.hxx
@@ -29,36 +29,36 @@
namespace connectivity::macab
{
- class MacabOrder
- {
- public:
- virtual ~MacabOrder();
+ class MacabOrder
+ {
+ public:
+ virtual ~MacabOrder();
- virtual sal_Int32 compare(const MacabRecord *record1, const MacabRecord *record2) const = 0;
- };
+ virtual sal_Int32 compare(const MacabRecord *record1, const MacabRecord *record2) const = 0;
+ };
- class MacabSimpleOrder : public MacabOrder
- {
- sal_Int32 m_nFieldNumber;
- bool m_bAscending;
+ class MacabSimpleOrder : public MacabOrder
+ {
+ sal_Int32 m_nFieldNumber;
+ bool m_bAscending;
- public:
- MacabSimpleOrder(MacabHeader const *header, std::u16string_view sColumnName, bool bAscending);
+ public:
+ MacabSimpleOrder(MacabHeader const *header, std::u16string_view sColumnName, bool bAscending);
- virtual sal_Int32 compare(const MacabRecord *record1, const MacabRecord *record2) const override;
- };
+ virtual sal_Int32 compare(const MacabRecord *record1, const MacabRecord *record2) const override;
+ };
- class MacabComplexOrder : public MacabOrder
- {
- std::vector<std::unique_ptr<MacabOrder>> m_aOrders;
+ class MacabComplexOrder : public MacabOrder
+ {
+ std::vector<std::unique_ptr<MacabOrder>> m_aOrders;
- public:
- MacabComplexOrder();
- virtual ~MacabComplexOrder() override;
+ public:
+ MacabComplexOrder();
+ virtual ~MacabComplexOrder() override;
- void addOrder(MacabOrder *pOrder);
- virtual sal_Int32 compare(const MacabRecord *record1, const MacabRecord *record2) const override;
- };
+ void addOrder(MacabOrder *pOrder);
+ virtual sal_Int32 compare(const MacabRecord *record1, const MacabRecord *record2) const override;
+ };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/macab/macabutilities.hxx b/connectivity/source/drivers/macab/macabutilities.hxx
index cfe46f37f286..f89553c9ea27 100644
--- a/connectivity/source/drivers/macab/macabutilities.hxx
+++ b/connectivity/source/drivers/macab/macabutilities.hxx
@@ -19,6 +19,10 @@
#pragma once
+#include <sal/config.h>
+
+#include <memory>
+
#include <com/sun/star/util/DateTime.hpp>
#include <com/sun/star/sdbc/DataType.hpp>
#include <unotools/resmgr.hxx>
@@ -32,107 +36,107 @@
namespace connectivity::macab
{
- inline OUString CFStringToOUString(const CFStringRef sOrig)
- {
- /* Copied all-but directly from code by Florian Heckl in
- * cws_src680_aquafilepicker01
- * File was: fpicker/source/aqua/CFStringUtilities
- * I only removed commented debugging lines and changed variable
- * names.
- */
- if (nullptr == sOrig) {
- return OUString();
- }
+ inline OUString CFStringToOUString(const CFStringRef sOrig)
+ {
+ /* Copied all-but directly from code by Florian Heckl in
+ * cws_src680_aquafilepicker01
+ * File was: fpicker/source/aqua/CFStringUtilities
+ * I only removed commented debugging lines and changed variable
+ * names.
+ */
+ if (nullptr == sOrig) {
+ return OUString();
+ }
- CFRetain(sOrig);
- CFIndex nStringLength = CFStringGetLength(sOrig);
+ CFRetain(sOrig);
+ CFIndex nStringLength = CFStringGetLength(sOrig);
- UniChar unichars[nStringLength+1];
+ auto const unichars = std::make_unique<UniChar[]>(nStringLength+1);
- //'close' the string buffer correctly
- unichars[nStringLength] = '\0';
+ //'close' the string buffer correctly
+ unichars[nStringLength] = '\0';
- CFStringGetCharacters (sOrig, CFRangeMake(0,nStringLength), unichars);
- CFRelease(sOrig);
+ CFStringGetCharacters (sOrig, CFRangeMake(0,nStringLength), unichars.get());
+ CFRelease(sOrig);
- return OUString(reinterpret_cast<sal_Unicode *>(unichars));
- }
+ return OUString(reinterpret_cast<sal_Unicode *>(unichars.get()));
+ }
- inline CFStringRef OUStringToCFString(const OUString& aString)
- {
- /* Copied directly from code by Florian Heckl in
- * cws_src680_aquafilepicker01
- * File was: fpicker/source/aqua/CFStringUtilities
- */
+ inline CFStringRef OUStringToCFString(const OUString& aString)
+ {
+ /* Copied directly from code by Florian Heckl in
+ * cws_src680_aquafilepicker01
+ * File was: fpicker/source/aqua/CFStringUtilities
+ */
- CFStringRef ref = CFStringCreateWithCharacters(kCFAllocatorDefault, reinterpret_cast<UniChar const *>(aString.getStr()), aString.getLength());
+ CFStringRef ref = CFStringCreateWithCharacters(kCFAllocatorDefault, reinterpret_cast<UniChar const *>(aString.getStr()), aString.getLength());
- return ref;
- }
+ return ref;
+ }
- inline css::util::DateTime CFDateToDateTime(const CFDateRef _cfDate)
+ inline css::util::DateTime CFDateToDateTime(const CFDateRef _cfDate)
+ {
+ /* Carbon can give us the time since 2001 of any CFDateRef,
+ * and it also stores the time since 1970 as a constant,
+ * basically allowing us to get the unixtime of any
+ * CFDateRef. From there, it is just a matter of choosing what
+ * we want to do with it.
+ */
+ css::util::DateTime nRet;
+ double timeSince2001 = CFDateGetAbsoluteTime(_cfDate);
+ time_t unixtime = timeSince2001+kCFAbsoluteTimeIntervalSince1970;
+ struct tm *ptm = localtime(&unixtime);
+ nRet.Year = ptm->tm_year+1900;
+ nRet.Month = ptm->tm_mon+1;
+ nRet.Day = ptm->tm_mday;
+ nRet.Hours = ptm->tm_hour;
+ nRet.Minutes = ptm->tm_min;
+ nRet.Seconds = ptm->tm_sec;
+ nRet.NanoSeconds = 0;
+ return nRet;
+ }
+
+
+ inline OUString fixLabel(const OUString& _originalLabel)
+ {
+ /* Get the length, and make sure that there is actually a string
+ * here.
+ */
+ if(_originalLabel.startsWith("_$!<"))
{
- /* Carbon can give us the time since 2001 of any CFDateRef,
- * and it also stores the time since 1970 as a constant,
- * basically allowing us to get the unixtime of any
- * CFDateRef. From there, it is just a matter of choosing what
- * we want to do with it.
- */
- css::util::DateTime nRet;
- double timeSince2001 = CFDateGetAbsoluteTime(_cfDate);
- time_t unixtime = timeSince2001+kCFAbsoluteTimeIntervalSince1970;
- struct tm *ptm = localtime(&unixtime);
- nRet.Year = ptm->tm_year+1900;
- nRet.Month = ptm->tm_mon+1;
- nRet.Day = ptm->tm_mday;
- nRet.Hours = ptm->tm_hour;
- nRet.Minutes = ptm->tm_min;
- nRet.Seconds = ptm->tm_sec;
- nRet.NanoSeconds = 0;
- return nRet;
+ return _originalLabel.copy(4,_originalLabel.getLength()-8);
}
-
- inline OUString fixLabel(const OUString& _originalLabel)
- {
- /* Get the length, and make sure that there is actually a string
- * here.
- */
- if(_originalLabel.startsWith("_$!<"))
- {
- return _originalLabel.copy(4,_originalLabel.getLength()-8);
- }
-
- return _originalLabel;
- }
+ return _originalLabel;
+ }
- inline sal_Int32 ABTypeToDataType(const ABPropertyType _abType)
+ inline sal_Int32 ABTypeToDataType(const ABPropertyType _abType)
+ {
+ sal_Int32 dataType;
+ switch(_abType)
{
- sal_Int32 dataType;
- switch(_abType)
- {
- case kABStringProperty:
- dataType = css::sdbc::DataType::CHAR;
- break;
- case kABDateProperty:
- dataType = css::sdbc::DataType::TIMESTAMP;
- break;
- case kABIntegerProperty:
- dataType = css::sdbc::DataType::INTEGER;
- break;
- case kABRealProperty:
- dataType = css::sdbc::DataType::FLOAT;
- break;
- default:
- dataType = -1;
- }
- return dataType;
+ case kABStringProperty:
+ dataType = css::sdbc::DataType::CHAR;
+ break;
+ case kABDateProperty:
+ dataType = css::sdbc::DataType::TIMESTAMP;
+ break;
+ case kABIntegerProperty:
+ dataType = css::sdbc::DataType::INTEGER;
+ break;
+ case kABRealProperty:
+ dataType = css::sdbc::DataType::FLOAT;
+ break;
+ default:
+ dataType = -1;
}
+ return dataType;
+ }
- void impl_throwError(TranslateId pErrorId);
+ void impl_throwError(TranslateId pErrorId);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.cxx b/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.cxx
index faa2063b27b8..37cfb087a70f 100644
--- a/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.cxx
+++ b/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.cxx
@@ -32,8 +32,6 @@ using namespace connectivity::mozab;
using ::com::sun::star::uno::Reference;
using ::com::sun::star::uno::Sequence;
-using ::com::sun::star::lang::XSingleServiceFactory;
-using ::com::sun::star::lang::XMultiServiceFactory;
MozillaBootstrap::MozillaBootstrap()
: OMozillaBootstrap_BASE(m_aMutex)
@@ -54,7 +52,7 @@ void MozillaBootstrap::disposing()
OUString SAL_CALL MozillaBootstrap::getImplementationName( )
{
- return "com.sun.star.comp.mozilla.MozillaBootstrap";
+ return u"com.sun.star.comp.mozilla.MozillaBootstrap"_ustr;
}
sal_Bool SAL_CALL MozillaBootstrap::supportsService( const OUString& _rServiceName )
@@ -66,7 +64,7 @@ Sequence< OUString > SAL_CALL MozillaBootstrap::getSupportedServiceNames( )
{
// which service is supported
// for more information @see com.sun.star.mozilla.MozillaBootstrap
- return { "com.sun.star.mozilla.MozillaBootstrap" };
+ return { u"com.sun.star.mozilla.MozillaBootstrap"_ustr };
}
diff --git a/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.hxx b/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.hxx
index e01a2bb9612c..7c040554137a 100644
--- a/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.hxx
+++ b/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.hxx
@@ -29,49 +29,48 @@
namespace connectivity::mozab
{
- typedef ::cppu::WeakComponentImplHelper< css::mozilla::XMozillaBootstrap,
- css::lang::XServiceInfo > OMozillaBootstrap_BASE;
- class ProfileAccess;
- class ProfileManager;
- class MozillaBootstrap : public OMozillaBootstrap_BASE
- {
- private:
- ::osl::Mutex m_aMutex; // mutex is need to control member access
- virtual ~MozillaBootstrap() override;
- std::unique_ptr<ProfileAccess> m_ProfileAccess;
- public:
+ typedef ::cppu::WeakComponentImplHelper< css::mozilla::XMozillaBootstrap,
+ css::lang::XServiceInfo > OMozillaBootstrap_BASE;
+ class ProfileAccess;
+ class MozillaBootstrap : public OMozillaBootstrap_BASE
+ {
+ private:
+ ::osl::Mutex m_aMutex; // mutex is need to control member access
+ virtual ~MozillaBootstrap() override;
+ std::unique_ptr<ProfileAccess> m_ProfileAccess;
+ public:
- MozillaBootstrap();
+ MozillaBootstrap();
- // OComponentHelper
- virtual void SAL_CALL disposing() override;
+ // OComponentHelper
+ virtual void SAL_CALL disposing() override;
- // XServiceInfo
- virtual OUString SAL_CALL getImplementationName( ) override;
- virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
- virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override;
+ // XServiceInfo
+ virtual OUString SAL_CALL getImplementationName( ) override;
+ virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
+ virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override;
- // XMozillaBootstrap
+ // XMozillaBootstrap
- // XProfileDiscover
- virtual ::sal_Int32 SAL_CALL getProfileCount( css::mozilla::MozillaProductType product) override;
- virtual ::sal_Int32 SAL_CALL getProfileList( css::mozilla::MozillaProductType product, css::uno::Sequence< OUString >& list ) override;
- virtual OUString SAL_CALL getDefaultProfile( css::mozilla::MozillaProductType product ) override;
- virtual OUString SAL_CALL getProfilePath( css::mozilla::MozillaProductType product, const OUString& profileName ) override;
- virtual sal_Bool SAL_CALL isProfileLocked( css::mozilla::MozillaProductType product, const OUString& profileName ) override;
- virtual sal_Bool SAL_CALL getProfileExists( css::mozilla::MozillaProductType product, const OUString& profileName ) override;
+ // XProfileDiscover
+ virtual ::sal_Int32 SAL_CALL getProfileCount( css::mozilla::MozillaProductType product) override;
+ virtual ::sal_Int32 SAL_CALL getProfileList( css::mozilla::MozillaProductType product, css::uno::Sequence< OUString >& list ) override;
+ virtual OUString SAL_CALL getDefaultProfile( css::mozilla::MozillaProductType product ) override;
+ virtual OUString SAL_CALL getProfilePath( css::mozilla::MozillaProductType product, const OUString& profileName ) override;
+ virtual sal_Bool SAL_CALL isProfileLocked( css::mozilla::MozillaProductType product, const OUString& profileName ) override;
+ virtual sal_Bool SAL_CALL getProfileExists( css::mozilla::MozillaProductType product, const OUString& profileName ) override;
- // XProfileManager
- virtual ::sal_Int32 SAL_CALL bootupProfile( css::mozilla::MozillaProductType product, const OUString& profileName ) override;
- virtual ::sal_Int32 SAL_CALL shutdownProfile( ) override;
- virtual css::mozilla::MozillaProductType SAL_CALL getCurrentProduct( ) override;
- virtual OUString SAL_CALL getCurrentProfile( ) override;
- virtual sal_Bool SAL_CALL isCurrentProfileLocked( ) override;
- virtual OUString SAL_CALL setCurrentProfile( css::mozilla::MozillaProductType product, const OUString& profileName ) override;
+ // XProfileManager
+ virtual ::sal_Int32 SAL_CALL bootupProfile( css::mozilla::MozillaProductType product, const OUString& profileName ) override;
+ virtual ::sal_Int32 SAL_CALL shutdownProfile( ) override;
+ virtual css::mozilla::MozillaProductType SAL_CALL getCurrentProduct( ) override;
+ virtual OUString SAL_CALL getCurrentProfile( ) override;
+ virtual sal_Bool SAL_CALL isCurrentProfileLocked( ) override;
+ virtual OUString SAL_CALL setCurrentProfile( css::mozilla::MozillaProductType product, const OUString& profileName ) override;
- // XProxyRunner
- virtual ::sal_Int32 SAL_CALL Run( const css::uno::Reference< css::mozilla::XCodeProxy >& aCode ) override;
- };
+ // XProxyRunner
+ virtual ::sal_Int32 SAL_CALL Run( const css::uno::Reference< css::mozilla::XCodeProxy >& aCode ) override;
+ };
}
diff --git a/connectivity/source/drivers/mozab/bootstrap/MNSFolders.cxx b/connectivity/source/drivers/mozab/bootstrap/MNSFolders.cxx
index 71c70c641b30..8b8bf0939a5b 100644
--- a/connectivity/source/drivers/mozab/bootstrap/MNSFolders.cxx
+++ b/connectivity/source/drivers/mozab/bootstrap/MNSFolders.cxx
@@ -148,10 +148,10 @@ namespace
}
-OUString getRegistryDir(MozillaProductType product)
+const OUString & getRegistryDir(MozillaProductType product)
{
if (product == MozillaProductType_Default)
- return OUString();
+ return EMPTY_OUSTRING;
return lcl_guessProfileRoot( product );
}
diff --git a/connectivity/source/drivers/mozab/bootstrap/MNSFolders.hxx b/connectivity/source/drivers/mozab/bootstrap/MNSFolders.hxx
index 90674a0f4e62..f61b808223a9 100644
--- a/connectivity/source/drivers/mozab/bootstrap/MNSFolders.hxx
+++ b/connectivity/source/drivers/mozab/bootstrap/MNSFolders.hxx
@@ -23,6 +23,6 @@
#include <rtl/ustring.hxx>
-OUString getRegistryDir(css::mozilla::MozillaProductType product);
+const OUString& getRegistryDir(css::mozilla::MozillaProductType product);
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mozab/bootstrap/MNSINIParser.cxx b/connectivity/source/drivers/mozab/bootstrap/MNSINIParser.cxx
index ae775b6fca01..98a1b6ff64bc 100644
--- a/connectivity/source/drivers/mozab/bootstrap/MNSINIParser.cxx
+++ b/connectivity/source/drivers/mozab/bootstrap/MNSINIParser.cxx
@@ -22,6 +22,7 @@
#include <osl/file.h>
#include <rtl/byteseq.hxx>
#include <sal/log.hxx>
+#include <o3tl/string_view.hxx>
IniParser::IniParser(OUString const & rIniName)
{
@@ -47,7 +48,7 @@ IniParser::IniParser(OUString const & rIniName)
sal_uInt64 nSize = 0;
osl_getFileSize(handle, &nSize);
- OUString sectionName( "no name section" );
+ OUString sectionName( u"no name section"_ustr );
while (true)
{
sal_uInt64 nPos;
@@ -62,9 +63,9 @@ IniParser::IniParser(OUString const & rIniName)
ini_Section *aSection = &mAllSection[sectionName];
struct ini_NameValue nameValue;
nameValue.sName = OStringToOUString(
- line.copy(0,nIndex).trim(), RTL_TEXTENCODING_ASCII_US );
+ o3tl::trim(line.subView(0,nIndex)), RTL_TEXTENCODING_ASCII_US );
nameValue.sValue = OStringToOUString(
- line.copy(nIndex+1).trim(), RTL_TEXTENCODING_UTF8 );
+ o3tl::trim(line.subView(nIndex+1)), RTL_TEXTENCODING_UTF8 );
aSection->vVector.push_back(nameValue);
@@ -76,7 +77,7 @@ IniParser::IniParser(OUString const & rIniName)
if ( nIndexEnd > nIndexStart && nIndexStart >=0)
{
sectionName = OStringToOUString(
- line.copy(nIndexStart + 1,nIndexEnd - nIndexStart -1).trim(), RTL_TEXTENCODING_ASCII_US );
+ o3tl::trim(line.subView(nIndexStart + 1,nIndexEnd - nIndexStart -1)), RTL_TEXTENCODING_ASCII_US );
if (sectionName.isEmpty())
sectionName = "no name section";
}
diff --git a/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx b/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx
index 18d95cdbdb81..804c8ccc66d8 100644
--- a/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx
+++ b/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx
@@ -18,6 +18,8 @@
*/
+#include <utility>
+
#include "MNSProfileDiscover.hxx"
#include "MNSFolders.hxx"
#include "MNSINIParser.hxx"
@@ -28,10 +30,10 @@ namespace connectivity::mozab
{
}
- ProfileStruct::ProfileStruct(const OUString& aProfileName,
- const OUString& aProfilePath)
- : profileName(aProfileName)
- , profilePath(aProfilePath)
+ ProfileStruct::ProfileStruct(OUString aProfileName,
+ OUString aProfilePath)
+ : profileName(std::move(aProfileName))
+ , profilePath(std::move(aProfilePath))
{
}
diff --git a/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx b/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx
index a5f271183b27..5c60dc87e544 100644
--- a/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx
+++ b/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx
@@ -32,47 +32,47 @@ namespace connectivity::mozab { class ProfileStruct; }
typedef std::map<OUString, ::connectivity::mozab::ProfileStruct> ProfileList;
namespace connectivity::mozab
+{
+ class ProfileStruct
{
- class ProfileStruct
- {
- public:
- ProfileStruct();
- ProfileStruct(const OUString& aProfileName, const OUString &aProfilePath);
- const OUString& getProfileName() const { return profileName;}
- const OUString& getProfilePath() const;
- private:
- OUString profileName;
- OUString profilePath;
- };
+ public:
+ ProfileStruct();
+ ProfileStruct(OUString aProfileName, OUString aProfilePath);
+ const OUString& getProfileName() const { return profileName;}
+ const OUString& getProfilePath() const;
+ private:
+ OUString profileName;
+ OUString profilePath;
+ };
- class ProductStruct
- {
- public:
- OUString mCurrentProfileName;
- ProfileList mProfileList;
- };
+ class ProductStruct
+ {
+ public:
+ OUString mCurrentProfileName;
+ ProfileList mProfileList;
+ };
- //Used to query profiles information
- class ProfileAccess final
- {
- public:
- ~ProfileAccess();
- ProfileAccess();
- /// @throws css::uno::RuntimeException
- OUString getProfilePath( css::mozilla::MozillaProductType product, const OUString& profileName );
- /// @throws css::uno::RuntimeException
- ::sal_Int32 getProfileCount( css::mozilla::MozillaProductType product );
- /// @throws css::uno::RuntimeException
- ::sal_Int32 getProfileList( css::mozilla::MozillaProductType product, css::uno::Sequence< OUString >& list );
- /// @throws css::uno::RuntimeException
- OUString getDefaultProfile( css::mozilla::MozillaProductType product );
- /// @throws css::uno::RuntimeException
- bool getProfileExists( css::mozilla::MozillaProductType product, const OUString& profileName );
- private:
- ProductStruct m_ProductProfileList[4];
- void LoadProductsInfo();
- void LoadXPToolkitProfiles(MozillaProductType product);
- };
+ //Used to query profiles information
+ class ProfileAccess final
+ {
+ public:
+ ~ProfileAccess();
+ ProfileAccess();
+ /// @throws css::uno::RuntimeException
+ OUString getProfilePath( css::mozilla::MozillaProductType product, const OUString& profileName );
+ /// @throws css::uno::RuntimeException
+ ::sal_Int32 getProfileCount( css::mozilla::MozillaProductType product );
+ /// @throws css::uno::RuntimeException
+ ::sal_Int32 getProfileList( css::mozilla::MozillaProductType product, css::uno::Sequence< OUString >& list );
+ /// @throws css::uno::RuntimeException
+ OUString getDefaultProfile( css::mozilla::MozillaProductType product );
+ /// @throws css::uno::RuntimeException
+ bool getProfileExists( css::mozilla::MozillaProductType product, const OUString& profileName );
+ private:
+ ProductStruct m_ProductProfileList[4];
+ void LoadProductsInfo();
+ void LoadXPToolkitProfiles(MozillaProductType product);
+ };
}
diff --git a/connectivity/source/drivers/mysql_jdbc/YCatalog.cxx b/connectivity/source/drivers/mysql_jdbc/YCatalog.cxx
index 9c0afb55abd5..7f4b0232e0c8 100644
--- a/connectivity/source/drivers/mysql_jdbc/YCatalog.cxx
+++ b/connectivity/source/drivers/mysql_jdbc/YCatalog.cxx
@@ -29,11 +29,8 @@ using namespace connectivity;
using namespace connectivity::mysql;
using namespace connectivity::sdbcx;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
OMySQLCatalog::OMySQLCatalog(const Reference<XConnection>& _xConnection)
: OCatalog(_xConnection)
@@ -44,7 +41,8 @@ OMySQLCatalog::OMySQLCatalog(const Reference<XConnection>& _xConnection)
void OMySQLCatalog::refreshObjects(const Sequence<OUString>& _sKindOfObject,
::std::vector<OUString>& _rNames)
{
- Reference<XResultSet> xResult = m_xMetaData->getTables(Any(), "%", "%", _sKindOfObject);
+ Reference<XResultSet> xResult
+ = m_xMetaData->getTables(Any(), u"%"_ustr, u"%"_ustr, _sKindOfObject);
fillNames(xResult, _rNames);
}
@@ -53,7 +51,7 @@ void OMySQLCatalog::refreshTables()
::std::vector<OUString> aVector;
Sequence<OUString> sTableTypes{
- "VIEW", "TABLE", "%"
+ u"VIEW"_ustr, u"TABLE"_ustr, u"%"_ustr
}; // this last one just to be sure to include anything else...
refreshObjects(sTableTypes, aVector);
@@ -66,7 +64,7 @@ void OMySQLCatalog::refreshTables()
void OMySQLCatalog::refreshViews()
{
- Sequence<OUString> aTypes{ "VIEW" };
+ Sequence<OUString> aTypes{ u"VIEW"_ustr };
// let's simply assume the server is new enough to support views. Current drivers
// as of this writing might not return the proper information in getTableTypes, so
@@ -88,7 +86,7 @@ void OMySQLCatalog::refreshUsers()
::std::vector<OUString> aVector;
Reference<XStatement> xStmt = m_xConnection->createStatement();
Reference<XResultSet> xResult = xStmt->executeQuery(
- "SELECT grantee FROM information_schema.user_privileges GROUP BY grantee");
+ u"SELECT grantee FROM information_schema.user_privileges GROUP BY grantee"_ustr);
if (xResult.is())
{
Reference<XRow> xRow(xResult, UNO_QUERY);
diff --git a/connectivity/source/drivers/mysql_jdbc/YColumns.cxx b/connectivity/source/drivers/mysql_jdbc/YColumns.cxx
index 54beb77ca061..8861037e9a0d 100644
--- a/connectivity/source/drivers/mysql_jdbc/YColumns.cxx
+++ b/connectivity/source/drivers/mysql_jdbc/YColumns.cxx
@@ -26,10 +26,6 @@ using namespace connectivity::sdbcx;
using namespace connectivity;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbcx;
-using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
OMySQLColumns::OMySQLColumns(::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex,
const ::std::vector<OUString>& _rVector)
@@ -66,7 +62,7 @@ void OMySQLColumn::construct()
Sequence<OUString> SAL_CALL OMySQLColumn::getSupportedServiceNames()
{
- return { "com.sun.star.sdbcx.Column" };
+ return { u"com.sun.star.sdbcx.Column"_ustr };
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mysql_jdbc/YDriver.cxx b/connectivity/source/drivers/mysql_jdbc/YDriver.cxx
index 7ee501d42e81..2707ddf7f8e8 100644
--- a/connectivity/source/drivers/mysql_jdbc/YDriver.cxx
+++ b/connectivity/source/drivers/mysql_jdbc/YDriver.cxx
@@ -49,8 +49,8 @@ namespace
{
OUString getJavaDriverClass(css::uno::Sequence<css::beans::PropertyValue> const& info)
{
- return comphelper::NamedValueCollection(info).getOrDefault("JavaDriverClass",
- OUString("com.mysql.jdbc.Driver"));
+ return comphelper::NamedValueCollection::getOrDefault(info, u"JavaDriverClass",
+ u"com.mysql.jdbc.Driver"_ustr);
}
}
@@ -80,11 +80,10 @@ void ODriverDelegator::disposing()
for (auto const& connection : m_aConnections)
{
- Reference<XInterface> xTemp = connection.first.get();
+ Reference<XConnection> xTemp(connection.xConn);
::comphelper::disposeComponent(xTemp);
}
m_aConnections.clear();
- TWeakPairVector().swap(m_aConnections);
ODriverDelegator_BASE::disposing();
}
@@ -115,9 +114,9 @@ T_DRIVERTYPE lcl_getDriverType(std::u16string_view _sUrl)
return eRet;
}
-OUString transformUrl(const OUString& _sUrl)
+OUString transformUrl(std::u16string_view _sUrl)
{
- OUString sNewUrl = _sUrl.copy(11);
+ OUString sNewUrl(_sUrl.substr(11));
if (isOdbcUrl(_sUrl))
sNewUrl = "sdbc:" + sNewUrl;
else if (isNativeUrl(_sUrl))
@@ -158,36 +157,30 @@ Sequence<PropertyValue> lcl_convertProperties(T_DRIVERTYPE _eType,
if (_eType == T_DRIVERTYPE::Odbc)
{
- aProps.push_back(PropertyValue("Silent", 0, makeAny(true), PropertyState_DIRECT_VALUE));
- aProps.push_back(PropertyValue("PreventGetVersionColumns", 0, makeAny(true),
- PropertyState_DIRECT_VALUE));
+ aProps.emplace_back("Silent", 0, Any(true), PropertyState_DIRECT_VALUE);
+ aProps.emplace_back("PreventGetVersionColumns", 0, Any(true), PropertyState_DIRECT_VALUE);
}
else if (_eType == T_DRIVERTYPE::Jdbc)
{
if (!jdc)
{
- aProps.push_back(PropertyValue("JavaDriverClass", 0,
- makeAny(OUString("com.mysql.jdbc.Driver")),
- PropertyState_DIRECT_VALUE));
+ aProps.emplace_back("JavaDriverClass", 0, Any(u"com.mysql.jdbc.Driver"_ustr),
+ PropertyState_DIRECT_VALUE);
}
}
else
{
- aProps.push_back(
- PropertyValue("PublicConnectionURL", 0, makeAny(_sUrl), PropertyState_DIRECT_VALUE));
+ aProps.emplace_back("PublicConnectionURL", 0, Any(_sUrl), PropertyState_DIRECT_VALUE);
}
- aProps.push_back(
- PropertyValue("IsAutoRetrievingEnabled", 0, makeAny(true), PropertyState_DIRECT_VALUE));
- aProps.push_back(PropertyValue("AutoRetrievingStatement", 0,
- makeAny(OUString("SELECT LAST_INSERT_ID()")),
- PropertyState_DIRECT_VALUE));
- aProps.push_back(
- PropertyValue("ParameterNameSubstitution", 0, makeAny(true), PropertyState_DIRECT_VALUE));
+ aProps.emplace_back("IsAutoRetrievingEnabled", 0, Any(true), PropertyState_DIRECT_VALUE);
+ aProps.emplace_back("AutoRetrievingStatement", 0, Any(u"SELECT LAST_INSERT_ID()"_ustr),
+ PropertyState_DIRECT_VALUE);
+ aProps.emplace_back("ParameterNameSubstitution", 0, Any(true), PropertyState_DIRECT_VALUE);
return Sequence<PropertyValue>(aProps.data(), aProps.size());
}
}
-Reference<XDriver> ODriverDelegator::loadDriver(const OUString& url,
+Reference<XDriver> ODriverDelegator::loadDriver(std::u16string_view url,
const Sequence<PropertyValue>& info)
{
Reference<XDriver> xDriver;
@@ -232,8 +225,8 @@ Reference<XConnection> SAL_CALL ODriverDelegator::connect(const OUString& url,
Sequence<PropertyValue> aConvertedProperties = lcl_convertProperties(eType, info, url);
if (eType == T_DRIVERTYPE::Jdbc)
{
- ::comphelper::NamedValueCollection aSettings(info);
- OUString sIanaName = aSettings.getOrDefault("CharSet", OUString());
+ OUString sIanaName = ::comphelper::NamedValueCollection::getOrDefault(
+ info, u"CharSet", OUString());
if (!sIanaName.isEmpty())
{
::dbtools::OCharsetMap aLookupIanaName;
@@ -244,7 +237,7 @@ Reference<XConnection> SAL_CALL ODriverDelegator::connect(const OUString& url,
OUString sAdd;
if (RTL_TEXTENCODING_UTF8 == (*aLookup).getEncoding())
{
- static constexpr OUStringLiteral s_sCharSetOp = u"useUnicode=true&";
+ static constexpr OUString s_sCharSetOp = u"useUnicode=true&"_ustr;
if (!sCuttedUrl.matchIgnoreAsciiCase(s_sCharSetOp))
{
sAdd = s_sCharSetOp;
@@ -266,9 +259,7 @@ Reference<XConnection> SAL_CALL ODriverDelegator::connect(const OUString& url,
auto pMetaConnection = comphelper::getFromUnoTunnel<OMetaConnection>(xConnection);
if (pMetaConnection)
pMetaConnection->setURL(url);
- m_aConnections.push_back(
- TWeakPair(WeakReferenceHelper(xConnection),
- TWeakConnectionPair(WeakReferenceHelper(), pMetaConnection)));
+ m_aConnections.push_back({ xConnection, nullptr, pMetaConnection });
}
}
}
@@ -290,28 +281,27 @@ ODriverDelegator::getPropertyInfo(const OUString& url, const Sequence<PropertyVa
if (!acceptsURL(url))
return Sequence<DriverPropertyInfo>();
- Sequence<OUString> aBoolean{ "0", "1" };
+ Sequence<OUString> aBoolean{ u"0"_ustr, u"1"_ustr };
std::vector<DriverPropertyInfo> aDriverInfo{
- { "CharSet", "CharSet of the database.", false, {}, {} },
- { "SuppressVersionColumns", "Display version columns (when available).", false, "0",
- aBoolean }
+ { u"CharSet"_ustr, u"CharSet of the database."_ustr, false, {}, {} },
+ { u"SuppressVersionColumns"_ustr, u"Display version columns (when available)."_ustr, false,
+ u"0"_ustr, aBoolean }
};
const T_DRIVERTYPE eType = lcl_getDriverType(url);
if (eType == T_DRIVERTYPE::Jdbc)
{
- aDriverInfo.push_back(DriverPropertyInfo("JavaDriverClass", "The JDBC driver class name.",
- true, getJavaDriverClass(info),
- Sequence<OUString>()));
+ aDriverInfo.emplace_back("JavaDriverClass", "The JDBC driver class name.", true,
+ getJavaDriverClass(info), Sequence<OUString>());
}
else if (eType == T_DRIVERTYPE::Native)
{
- aDriverInfo.push_back(DriverPropertyInfo(
- "LocalSocket", "The file path of a socket to connect to a local MySQL server.", false,
- OUString(), Sequence<OUString>()));
- aDriverInfo.push_back(DriverPropertyInfo(
- "NamedPipe", "The name of a pipe to connect to a local MySQL server.", false,
- OUString(), Sequence<OUString>()));
+ aDriverInfo.emplace_back("LocalSocket",
+ "The file path of a socket to connect to a local MySQL server.",
+ false, OUString(), Sequence<OUString>());
+ aDriverInfo.emplace_back("NamedPipe",
+ "The name of a pipe to connect to a local MySQL server.", false,
+ OUString(), Sequence<OUString>());
}
return Sequence<DriverPropertyInfo>(aDriverInfo.data(), aDriverInfo.size());
@@ -327,40 +317,38 @@ ODriverDelegator::getDataDefinitionByConnection(const Reference<XConnection>& co
::osl::MutexGuard aGuard(m_aMutex);
checkDisposed(ODriverDelegator_BASE::rBHelper.bDisposed);
- Reference<XTablesSupplier> xTab;
+ rtl::Reference<OMySQLCatalog> xTab;
auto pConnection = comphelper::getFromUnoTunnel<OMetaConnection>(connection);
if (pConnection)
{
- TWeakPairVector::iterator i
- = std::find_if(m_aConnections.begin(), m_aConnections.end(),
- [&pConnection](const TWeakPairVector::value_type& rConnection) {
- return rConnection.second.second == pConnection;
- });
+ auto i = std::find_if(m_aConnections.begin(), m_aConnections.end(),
+ [&pConnection](const TConnectionInfo& rConnection) {
+ return rConnection.pMetaConn == pConnection;
+ });
if (i != m_aConnections.end())
{
- xTab.set(i->second.first.get(), UNO_QUERY);
+ xTab = i->xCatalog.get();
if (!xTab.is())
{
xTab = new OMySQLCatalog(connection);
- i->second.first = WeakReferenceHelper(xTab);
+ i->xCatalog = xTab.get();
}
}
} // if (pConnection)
if (!xTab.is())
{
- TWeakPairVector::iterator i
- = std::find_if(m_aConnections.begin(), m_aConnections.end(),
- [&connection](const TWeakPairVector::value_type& rConnection) {
- Reference<XConnection> xTemp(rConnection.first.get(), UNO_QUERY);
- return xTemp == connection;
- });
+ auto i = std::find_if(m_aConnections.begin(), m_aConnections.end(),
+ [&connection](const TConnectionInfo& rConnection) {
+ Reference<XConnection> xTemp(rConnection.xConn);
+ return xTemp == connection;
+ });
if (i != m_aConnections.end())
{
- xTab.set(i->second.first.get(), UNO_QUERY);
+ xTab = i->xCatalog.get();
if (!xTab.is())
{
xTab = new OMySQLCatalog(connection);
- i->second.first = WeakReferenceHelper(xTab);
+ i->xCatalog = xTab.get();
}
}
}
@@ -384,7 +372,7 @@ ODriverDelegator::getDataDefinitionByURL(const OUString& url, const Sequence<Pro
OUString SAL_CALL ODriverDelegator::getImplementationName()
{
- return "org.openoffice.comp.drivers.MySQL.Driver";
+ return u"org.openoffice.comp.drivers.MySQL.Driver"_ustr;
}
sal_Bool SAL_CALL ODriverDelegator::supportsService(const OUString& _rServiceName)
@@ -394,7 +382,7 @@ sal_Bool SAL_CALL ODriverDelegator::supportsService(const OUString& _rServiceNam
Sequence<OUString> SAL_CALL ODriverDelegator::getSupportedServiceNames()
{
- return { "com.sun.star.sdbc.Driver", "com.sun.star.sdbcx.Driver" };
+ return { u"com.sun.star.sdbc.Driver"_ustr, u"com.sun.star.sdbcx.Driver"_ustr };
}
} // namespace connectivity
diff --git a/connectivity/source/drivers/mysql_jdbc/YTable.cxx b/connectivity/source/drivers/mysql_jdbc/YTable.cxx
index b5b02fefc1bc..dfb3e37a186f 100644
--- a/connectivity/source/drivers/mysql_jdbc/YTable.cxx
+++ b/connectivity/source/drivers/mysql_jdbc/YTable.cxx
@@ -48,7 +48,7 @@ namespace
class OMySQLKeysHelper : public OKeysHelper
{
protected:
- virtual OUString getDropForeignKey() const override { return " DROP FOREIGN KEY "; }
+ virtual OUString getDropForeignKey() const override { return u" DROP FOREIGN KEY "_ustr; }
public:
OMySQLKeysHelper(OTableHelper* _pTable, ::osl::Mutex& _rMutex,
@@ -116,20 +116,6 @@ sdbcx::OCollection* OMySQLTable::createIndexes(const ::std::vector<OUString>& _r
return new OIndexesHelper(this, m_aMutex, _rNames);
}
-Sequence<sal_Int8> OMySQLTable::getUnoTunnelId()
-{
- static const comphelper::UnoIdInit implId;
- return implId.getSeq();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OMySQLTable::getSomething(const Sequence<sal_Int8>& rId)
-{
- return comphelper::getSomethingImpl(rId, this,
- comphelper::FallbackToGetSomethingOf<OTable_TYPEDEF>{});
-}
-
// XAlterTable
void SAL_CALL OMySQLTable::alterColumnByName(const OUString& colName,
const Reference<XPropertySet>& descriptor)
@@ -198,7 +184,7 @@ void SAL_CALL OMySQLTable::alterColumnByName(const OUString& colName,
{
sTypeName += OUString::Concat(" ") + s_sAutoIncrement;
descriptor->setPropertyValue(rProp.getNameByIndex(PROPERTY_ID_TYPENAME),
- makeAny(sTypeName));
+ Any(sTypeName));
}
}
else
@@ -210,7 +196,7 @@ void SAL_CALL OMySQLTable::alterColumnByName(const OUString& colName,
{
sTypeName = sTypeName.copy(0, nIndex);
descriptor->setPropertyValue(rProp.getNameByIndex(PROPERTY_ID_TYPENAME),
- makeAny(sTypeName));
+ Any(sTypeName));
}
}
}
@@ -269,14 +255,14 @@ void OMySQLTable::alterColumnType(sal_Int32 nNewType, const OUString& _rColName,
rtl::Reference<OColumn> pColumn = new OColumn(true);
::comphelper::copyProperties(_xDescriptor, pColumn);
pColumn->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE),
- makeAny(nNewType));
+ Any(nNewType));
sSql += OTables::adjustSQL(::dbtools::createStandardColumnPart(
pColumn, getConnection(), static_cast<OTables*>(m_pTables), getTypeCreatePattern()));
executeStatement(sSql);
}
-OUString OMySQLTable::getTypeCreatePattern() const { return "(M,D)"; }
+OUString OMySQLTable::getTypeCreatePattern() const { return u"(M,D)"_ustr; }
void OMySQLTable::alterDefaultValue(std::u16string_view _sNewDefault, const OUString& _rColName)
{
@@ -298,7 +284,7 @@ void OMySQLTable::dropDefaultValue(const OUString& _rColName)
OUString OMySQLTable::getAlterTableColumnPart() const
{
- OUString sSql("ALTER TABLE ");
+ OUString sSql(u"ALTER TABLE "_ustr);
OUString sComposedName(
::dbtools::composeTableName(getMetaData(), m_CatalogName, m_SchemaName, m_Name, true,
@@ -322,6 +308,6 @@ void OMySQLTable::executeStatement(const OUString& _rStatement)
}
}
-OUString OMySQLTable::getRenameStart() const { return "RENAME TABLE "; }
+OUString OMySQLTable::getRenameStart() const { return u"RENAME TABLE "_ustr; }
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mysql_jdbc/YTables.cxx b/connectivity/source/drivers/mysql_jdbc/YTables.cxx
index f1ab3ee1e7b3..b333db670623 100644
--- a/connectivity/source/drivers/mysql_jdbc/YTables.cxx
+++ b/connectivity/source/drivers/mysql_jdbc/YTables.cxx
@@ -37,17 +37,16 @@ using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
using namespace dbtools;
-sdbcx::ObjectType OTables::createObject(const OUString& _rName)
+css::uno::Reference<css::beans::XPropertySet> OTables::createObject(const OUString& _rName)
{
OUString sCatalog, sSchema, sTable;
::dbtools::qualifiedNameComponents(m_xMetaData, _rName, sCatalog, sSchema, sTable,
::dbtools::EComposeRule::InDataManipulation);
Sequence<OUString> sTableTypes{
- "VIEW", "TABLE", "%"
+ u"VIEW"_ustr, u"TABLE"_ustr, u"%"_ustr
}; // this last one just to be sure to include anything else...
Any aCatalog;
@@ -55,7 +54,7 @@ sdbcx::ObjectType OTables::createObject(const OUString& _rName)
aCatalog <<= sCatalog;
Reference<XResultSet> xResult = m_xMetaData->getTables(aCatalog, sSchema, sTable, sTableTypes);
- sdbcx::ObjectType xRet;
+ rtl::Reference<OMySQLTable> xRet;
if (xResult.is())
{
Reference<XRow> xRow(xResult, UNO_QUERY);
@@ -90,8 +89,8 @@ Reference<XPropertySet> OTables::createDescriptor()
}
// XAppend
-sdbcx::ObjectType OTables::appendObject(const OUString& _rForName,
- const Reference<XPropertySet>& descriptor)
+css::uno::Reference<css::beans::XPropertySet>
+OTables::appendObject(const OUString& _rForName, const Reference<XPropertySet>& descriptor)
{
createTable(descriptor);
return createObject(_rForName);
@@ -111,7 +110,7 @@ void OTables::dropObject(sal_Int32 _nPos, const OUString& _sElementName)
::dbtools::qualifiedNameComponents(m_xMetaData, _sElementName, sCatalog, sSchema, sTable,
::dbtools::EComposeRule::InDataManipulation);
- OUString aSql("DROP ");
+ OUString aSql(u"DROP "_ustr);
Reference<XPropertySet> xProp(xObject, UNO_QUERY);
bool bIsView = xProp.is()
@@ -153,7 +152,7 @@ OUString OTables::adjustSQL(const OUString& _sSql)
sal_Int32 nPos = nIndex + strlen(s_sUNSIGNED);
OUString sNewUnsigned(sSQL.copy(nPos, nParen - nPos + 1));
sSQL = sSQL.replaceAt(nIndex, strlen(s_sUNSIGNED) + sNewUnsigned.getLength(),
- rtl::OUStringConcatenation(sNewUnsigned + s_sUNSIGNED));
+ rtl::Concat2View(sNewUnsigned + s_sUNSIGNED));
nIndex = sSQL.indexOf(s_sUNSIGNED, nIndex + strlen(s_sUNSIGNED) + sNewUnsigned.getLength());
}
return sSQL;
@@ -178,13 +177,13 @@ void OTables::appendNew(const OUString& _rsNewTable)
insertElement(_rsNewTable, nullptr);
// notify our container listeners
- ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_rsNewTable), Any(), Any());
+ ContainerEvent aEvent(static_cast<XContainer*>(this), Any(_rsNewTable), Any(), Any());
OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners);
while (aListenerLoop.hasMoreElements())
aListenerLoop.next()->elementInserted(aEvent);
}
-OUString OTables::getNameForObject(const sdbcx::ObjectType& _xObject)
+OUString OTables::getNameForObject(const css::uno::Reference<css::beans::XPropertySet>& _xObject)
{
OSL_ENSURE(_xObject.is(), "OTables::getNameForObject: Object is NULL!");
return ::dbtools::composeTableName(m_xMetaData, _xObject,
diff --git a/connectivity/source/drivers/mysql_jdbc/YUser.cxx b/connectivity/source/drivers/mysql_jdbc/YUser.cxx
index b683fe2b2757..6944aa7e4c3f 100644
--- a/connectivity/source/drivers/mysql_jdbc/YUser.cxx
+++ b/connectivity/source/drivers/mysql_jdbc/YUser.cxx
@@ -27,6 +27,7 @@
#include <TConnection.hxx>
#include <strings.hrc>
#include <comphelper/types.hxx>
+#include <utility>
using namespace connectivity;
using namespace connectivity::mysql;
@@ -37,17 +38,17 @@ using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::container;
using namespace ::com::sun::star::lang;
-OMySQLUser::OMySQLUser(const css::uno::Reference<css::sdbc::XConnection>& _xConnection)
+OMySQLUser::OMySQLUser(css::uno::Reference<css::sdbc::XConnection> _xConnection)
: connectivity::sdbcx::OUser(true)
- , m_xConnection(_xConnection)
+ , m_xConnection(std::move(_xConnection))
{
construct();
}
-OMySQLUser::OMySQLUser(const css::uno::Reference<css::sdbc::XConnection>& _xConnection,
+OMySQLUser::OMySQLUser(css::uno::Reference<css::sdbc::XConnection> _xConnection,
const OUString& Name)
: connectivity::sdbcx::OUser(Name, true)
- , m_xConnection(_xConnection)
+ , m_xConnection(std::move(_xConnection))
{
construct();
}
@@ -116,7 +117,7 @@ void OMySQLUser::findPrivilegesAndGrantPrivileges(const OUString& objName, sal_I
Any aCatalog;
if (!sCatalog.isEmpty())
aCatalog <<= sCatalog;
- xRes = xMeta->getColumnPrivileges(aCatalog, sSchema, sTable, "%");
+ xRes = xMeta->getColumnPrivileges(aCatalog, sSchema, sTable, u"%"_ustr);
}
break;
}
diff --git a/connectivity/source/drivers/mysql_jdbc/YUsers.cxx b/connectivity/source/drivers/mysql_jdbc/YUsers.cxx
index ed33cb0e2d7c..43a032d35ff0 100644
--- a/connectivity/source/drivers/mysql_jdbc/YUsers.cxx
+++ b/connectivity/source/drivers/mysql_jdbc/YUsers.cxx
@@ -23,6 +23,7 @@
#include <comphelper/types.hxx>
#include <connectivity/dbtools.hxx>
#include <TConnection.hxx>
+#include <utility>
using namespace ::comphelper;
using namespace connectivity;
@@ -30,20 +31,18 @@ using namespace connectivity::mysql;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
OUsers::OUsers(::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex,
const ::std::vector<OUString>& _rVector,
- const css::uno::Reference<css::sdbc::XConnection>& _xConnection,
+ css::uno::Reference<css::sdbc::XConnection> _xConnection,
connectivity::sdbcx::IRefreshableUsers* _pParent)
: sdbcx::OCollection(_rParent, true, _rMutex, _rVector)
- , m_xConnection(_xConnection)
+ , m_xConnection(std::move(_xConnection))
, m_pParent(_pParent)
{
}
-sdbcx::ObjectType OUsers::createObject(const OUString& _rName)
+css::uno::Reference<css::beans::XPropertySet> OUsers::createObject(const OUString& _rName)
{
return new OMySQLUser(m_xConnection, _rName);
}
@@ -53,10 +52,10 @@ void OUsers::impl_refresh() { m_pParent->refreshUsers(); }
Reference<XPropertySet> OUsers::createDescriptor() { return new OUserExtend(m_xConnection); }
// XAppend
-sdbcx::ObjectType OUsers::appendObject(const OUString& _rForName,
- const Reference<XPropertySet>& descriptor)
+css::uno::Reference<css::beans::XPropertySet>
+OUsers::appendObject(const OUString& _rForName, const Reference<XPropertySet>& descriptor)
{
- OUString aSql("GRANT USAGE ON * TO ");
+ OUString aSql(u"GRANT USAGE ON * TO "_ustr);
OUString aQuote = m_xConnection->getMetaData()->getIdentifierQuoteString();
aSql += ::dbtools::quoteName(aQuote, _rForName) + " @\"%\" ";
OUString sPassword;
@@ -78,7 +77,7 @@ sdbcx::ObjectType OUsers::appendObject(const OUString& _rForName,
// XDrop
void OUsers::dropObject(sal_Int32 /*_nPos*/, const OUString& _sElementName)
{
- OUString aSql("DROP USER ");
+ OUString aSql(u"DROP USER "_ustr);
OUString aQuote = m_xConnection->getMetaData()->getIdentifierQuoteString();
aSql += ::dbtools::quoteName(aQuote, _sElementName);
diff --git a/connectivity/source/drivers/mysql_jdbc/YViews.cxx b/connectivity/source/drivers/mysql_jdbc/YViews.cxx
index 3dba721c0c86..6fbeaeef25ba 100644
--- a/connectivity/source/drivers/mysql_jdbc/YViews.cxx
+++ b/connectivity/source/drivers/mysql_jdbc/YViews.cxx
@@ -32,14 +32,11 @@ using namespace connectivity;
using namespace connectivity::mysql;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
-using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::container;
-using namespace ::com::sun::star::lang;
using namespace dbtools;
typedef connectivity::sdbcx::OCollection OCollection_TYPE;
-sdbcx::ObjectType OViews::createObject(const OUString& _rName)
+css::uno::Reference<css::beans::XPropertySet> OViews::createObject(const OUString& _rName)
{
OUString sCatalog, sSchema, sTable;
::dbtools::qualifiedNameComponents(m_xMetaData, _rName, sCatalog, sSchema, sTable,
@@ -65,8 +62,8 @@ Reference<XPropertySet> OViews::createDescriptor()
}
// XAppend
-sdbcx::ObjectType OViews::appendObject(const OUString& _rForName,
- const Reference<XPropertySet>& descriptor)
+css::uno::Reference<css::beans::XPropertySet>
+OViews::appendObject(const OUString& _rForName, const Reference<XPropertySet>& descriptor)
{
createView(descriptor);
return createObject(_rForName);
@@ -83,7 +80,7 @@ void OViews::dropObject(sal_Int32 _nPos, const OUString& /*_sElementName*/)
if (bIsNew)
return;
- OUString aSql("DROP VIEW");
+ OUString aSql(u"DROP VIEW"_ustr);
Reference<XPropertySet> xProp(xObject, UNO_QUERY);
aSql += ::dbtools::composeTableName(m_xMetaData, xProp,
@@ -106,7 +103,7 @@ void OViews::createView(const Reference<XPropertySet>& descriptor)
{
Reference<XConnection> xConnection = static_cast<OMySQLCatalog&>(m_rParent).getConnection();
- OUString aSql("CREATE VIEW ");
+ OUString aSql(u"CREATE VIEW "_ustr);
OUString sCommand;
aSql += ::dbtools::composeTableName(m_xMetaData, descriptor,
diff --git a/connectivity/source/drivers/mysqlc/DataAccess.xcu b/connectivity/source/drivers/mysqlc/DataAccess.xcu
deleted file mode 100644
index 2b652ec87649..000000000000
--- a/connectivity/source/drivers/mysqlc/DataAccess.xcu
+++ /dev/null
@@ -1,35 +0,0 @@
-<!--
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- -->
-<oor:node xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="DataAccess" oor:package="org.openoffice.Office">
- <node oor:name="UserDefinedDriverSettings">
- <node oor:name="org.openoffice.comp.connectivity.mysql_native.Driver" oor:op="replace">
- <prop oor:name="DriverName">
- <value>org.openoffice.comp.connectivity.mysql_native.Driver</value>
- </prop>
- <prop oor:name="DriverPageDisplayName">
- <value>MySQL native driver</value>
- </prop>
- <prop oor:name="DriverTypeDisplayName">
- <value>MySQL native driver</value>
- </prop>
- <prop oor:name="DriverDsnPrefix">
- <value>sdbc:mysqlc:</value>
- </prop>
- </node>
- </node>
-</oor:node>
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_catalog.cxx b/connectivity/source/drivers/mysqlc/mysqlc_catalog.cxx
new file mode 100644
index 000000000000..dfe88d9b4b17
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_catalog.cxx
@@ -0,0 +1,93 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "mysqlc_catalog.hxx"
+#include "mysqlc_tables.hxx"
+#include "mysqlc_views.hxx"
+#include "mysqlc_users.hxx"
+#include <com/sun/star/sdbc/XRow.hpp>
+#include <comphelper/types.hxx>
+
+connectivity::mysqlc::Catalog::Catalog(
+ const css::uno::Reference<css::sdbc::XConnection>& rConnection)
+ : OCatalog(rConnection)
+ , m_xConnection(rConnection)
+{
+}
+
+//----- OCatalog -------------------------------------------------------------
+void connectivity::mysqlc::Catalog::refreshTables()
+{
+ css::uno::Reference<css::sdbc::XResultSet> xTables
+ = m_xMetaData->getTables(css::uno::Any(), u"%"_ustr, u"%"_ustr, {});
+
+ if (!xTables.is())
+ return;
+
+ ::std::vector<OUString> aTableNames;
+
+ fillNames(xTables, aTableNames);
+
+ if (!m_pTables)
+ m_pTables.reset(new Tables(m_xConnection->getMetaData(), *this, m_aMutex, aTableNames));
+ else
+ m_pTables->reFill(aTableNames);
+}
+
+void connectivity::mysqlc::Catalog::refreshViews()
+{
+ css::uno::Reference<css::sdbc::XResultSet> xViews
+ = m_xMetaData->getTables(css::uno::Any(), u"%"_ustr, u"%"_ustr, { u"VIEW"_ustr });
+
+ if (!xViews.is())
+ return;
+
+ ::std::vector<OUString> aViewNames;
+
+ fillNames(xViews, aViewNames);
+
+ if (!m_pViews)
+ m_pViews.reset(new Views(m_xConnection, *this, m_aMutex, aViewNames));
+ else
+ m_pViews->reFill(aViewNames);
+}
+
+//----- IRefreshableGroups ---------------------------------------------------
+void connectivity::mysqlc::Catalog::refreshGroups()
+{
+ // TODO: implement me
+}
+
+//----- IRefreshableUsers ----------------------------------------------------
+void connectivity::mysqlc::Catalog::refreshUsers()
+{
+ css::uno::Reference<css::sdbc::XStatement> statement = m_xConnection->createStatement();
+ css::uno::Reference<css::sdbc::XResultSet> xUsers = statement->executeQuery(
+ u"SELECT grantee FROM information_schema.user_privileges GROUP BY grantee"_ustr);
+
+ if (!xUsers.is())
+ return;
+
+ ::std::vector<OUString> aUserNames;
+
+ css::uno::Reference<css::sdbc::XRow> xRow(xUsers, css::uno::UNO_QUERY);
+ while (xUsers->next())
+ {
+ aUserNames.push_back(xRow->getString(1));
+ }
+ xRow.clear();
+ ::comphelper::disposeComponent(xUsers);
+
+ if (!m_pUsers)
+ m_pUsers.reset(new Users(m_xConnection->getMetaData(), *this, m_aMutex, aUserNames));
+ else
+ m_pUsers->reFill(aUserNames);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_catalog.hxx b/connectivity/source/drivers/mysqlc/mysqlc_catalog.hxx
new file mode 100644
index 000000000000..1bea18c7667b
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_catalog.hxx
@@ -0,0 +1,38 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include <sdbcx/VCatalog.hxx>
+
+namespace connectivity::mysqlc
+{
+class Catalog : public ::connectivity::sdbcx::OCatalog
+{
+ css::uno::Reference<css::sdbc::XConnection> m_xConnection;
+
+public:
+ explicit Catalog(const css::uno::Reference<css::sdbc::XConnection>& rConnection);
+
+ // OCatalog
+ virtual void refreshTables() override;
+ virtual void refreshViews() override;
+
+ // IRefreshableGroups
+ virtual void refreshGroups() override;
+
+ // IRefreshableUsers
+ virtual void refreshUsers() override;
+
+ sdbcx::OCollection* getPrivateTables() const { return m_pTables.get(); }
+};
+
+} // namespace connectivity::mysqlc
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_column.cxx b/connectivity/source/drivers/mysqlc/mysqlc_column.cxx
new file mode 100644
index 000000000000..953d4117c247
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_column.cxx
@@ -0,0 +1,45 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "mysqlc_column.hxx"
+
+#include <TConnection.hxx>
+
+connectivity::mysqlc::Column::Column()
+ : OColumn(true) // case sensitive
+{
+ construct();
+}
+
+void connectivity::mysqlc::Column::construct()
+{
+ m_sAutoIncrement = "auto_increment";
+ registerProperty(
+ OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_AUTOINCREMENTCREATION),
+ PROPERTY_ID_AUTOINCREMENTCREATION, 0, &m_sAutoIncrement,
+ cppu::UnoType<decltype(m_sAutoIncrement)>::get());
+}
+
+::cppu::IPropertyArrayHelper*
+ connectivity::mysqlc::Column::createArrayHelper(sal_Int32 /*_nId*/) const
+{
+ return doCreateArrayHelper();
+}
+
+::cppu::IPropertyArrayHelper& SAL_CALL connectivity::mysqlc::Column::getInfoHelper()
+{
+ return *Column_PROP::getArrayHelper(isNew() ? 1 : 0);
+}
+
+css::uno::Sequence<OUString> SAL_CALL connectivity::mysqlc::Column::getSupportedServiceNames()
+{
+ return { u"com.sun.star.sdbcx.Column"_ustr };
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_column.hxx b/connectivity/source/drivers/mysqlc/mysqlc_column.hxx
new file mode 100644
index 000000000000..f69ef1afcea7
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_column.hxx
@@ -0,0 +1,32 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+#pragma once
+
+#include <connectivity/sdbcx/VColumn.hxx>
+
+namespace connectivity::mysqlc
+{
+class Column;
+typedef ::comphelper::OIdPropertyArrayUsageHelper<Column> Column_PROP;
+class Column : public sdbcx::OColumn, public Column_PROP
+{
+ OUString m_sAutoIncrement;
+
+protected:
+ virtual ::cppu::IPropertyArrayHelper* createArrayHelper(sal_Int32 _nId) const override;
+ virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() override;
+
+public:
+ Column();
+ virtual void construct() override;
+ virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
+};
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_columns.cxx b/connectivity/source/drivers/mysqlc/mysqlc_columns.cxx
new file mode 100644
index 000000000000..b34b36b45cbe
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_columns.cxx
@@ -0,0 +1,28 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "mysqlc_columns.hxx"
+#include "mysqlc_column.hxx"
+
+connectivity::mysqlc::Columns::Columns(Table& rTable, osl::Mutex& rMutex,
+ const ::std::vector<OUString>& rVector)
+ : OColumnsHelper(rTable,
+ true, // case sensitivity
+ rMutex, rVector,
+ /*bUseHardRef*/ true)
+{
+ OColumnsHelper::setParent(&rTable);
+}
+
+css::uno::Reference<css::beans::XPropertySet> connectivity::mysqlc::Columns::createDescriptor()
+{
+ return new Column;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_columns.hxx b/connectivity/source/drivers/mysqlc/mysqlc_columns.hxx
new file mode 100644
index 000000000000..34230db37bb5
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_columns.hxx
@@ -0,0 +1,29 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include "mysqlc_table.hxx"
+
+#include <connectivity/TColumnsHelper.hxx>
+
+namespace connectivity::mysqlc
+{
+class Columns : public ::connectivity::OColumnsHelper
+{
+protected:
+ virtual css::uno::Reference<css::beans::XPropertySet> createDescriptor() override;
+
+public:
+ Columns(Table& rTable, ::osl::Mutex& rMutex, const ::std::vector<OUString>& _rVector);
+};
+
+} // namespace connectivity::mysqlc
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_connection.cxx b/connectivity/source/drivers/mysqlc/mysqlc_connection.cxx
index 4cf9e916f3df..631208f70293 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_connection.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_connection.cxx
@@ -17,8 +17,10 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include "mysqlc_catalog.hxx"
#include "mysqlc_connection.hxx"
#include "mysqlc_databasemetadata.hxx"
+#include <com/sun/star/sdbc/SQLException.hpp>
#include "mysqlc_driver.hxx"
#include "mysqlc_statement.hxx"
@@ -27,20 +29,17 @@
#include <com/sun/star/beans/NamedValue.hpp>
-#include <osl/diagnose.h>
-#include <cppuhelper/supportsservice.hxx>
+#include <comphelper/servicehelper.hxx>
using namespace connectivity::mysqlc;
using namespace com::sun::star::uno;
using namespace com::sun::star::container;
-using namespace com::sun::star::lang;
using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
+using namespace com::sun::star::sdbcx;
using ::osl::MutexGuard;
-#define MYSQLC_URI_PREFIX "sdbc:mysqlc:"
-
namespace
{
void lcl_executeUpdate(MYSQL* pMySql, const OString& sql)
@@ -53,6 +52,7 @@ void lcl_executeUpdate(MYSQL* pMySql, const OString& sql)
OConnection::OConnection(MysqlCDriver& _rDriver)
: OMetaConnection_BASE(m_aMutex)
, m_mysql()
+ , m_xCatalog(nullptr)
, m_xMetaData(nullptr)
, m_xDriver(&_rDriver)
{
@@ -73,15 +73,12 @@ void OConnection::construct(const OUString& url, const Sequence<PropertyValue>&
mysql_library_init(0, nullptr, nullptr);
mysql_init(&m_mysql);
- // use TCP as connection
- mysql_protocol_type protocol = MYSQL_PROTOCOL_TCP;
- mysql_options(&m_mysql, MYSQL_OPT_PROTOCOL, &protocol);
- OString charset_name{ "utf8mb4" };
+ OString charset_name{ "utf8mb4"_ostr };
mysql_options(&m_mysql, MYSQL_SET_CHARSET_NAME, charset_name.getStr());
sal_Int32 nIndex;
OUString token;
- OUString aHostName("localhost");
+ OUString aHostName(u"localhost"_ustr);
sal_Int32 nPort = 3306;
OUString aDbName;
@@ -90,7 +87,7 @@ void OConnection::construct(const OUString& url, const Sequence<PropertyValue>&
// parse url. Url has the following format:
// external server: sdbc:mysqlc:[hostname]:[port]/[dbname]
- if (url.startsWith(MYSQLC_URI_PREFIX))
+ if (url.startsWith("sdbc:mysqlc:"))
{
nIndex = 12;
}
@@ -164,15 +161,22 @@ void OConnection::construct(const OUString& url, const Sequence<PropertyValue>&
OString pass_str = OUStringToOString(aPass, m_settings.encoding);
OString schema_str = OUStringToOString(aDbName, m_settings.encoding);
OString socket_str;
+
+ // use TCP as connection by default
+ mysql_protocol_type protocol = MYSQL_PROTOCOL_TCP;
if (unixSocketPassed)
{
socket_str = OUStringToOString(sUnixSocket, m_settings.encoding);
+ protocol = MYSQL_PROTOCOL_SOCKET;
}
else if (namedPipePassed)
{
socket_str = OUStringToOString(sNamedPipe, m_settings.encoding);
+ protocol = MYSQL_PROTOCOL_PIPE;
}
+ mysql_options(&m_mysql, MYSQL_OPT_PROTOCOL, &protocol);
+
// flags can also be passed as last parameter
if (!mysql_real_connect(&m_mysql, host_str.getStr(), user_str.getStr(), pass_str.getStr(),
schema_str.getStr(), nPort, socket_str.getStr(),
@@ -184,23 +188,22 @@ void OConnection::construct(const OUString& url, const Sequence<PropertyValue>&
// Check if the server is 4.1 or above
if (getMysqlVersion() < 40100)
{
- throw SQLException("MariaDB LibreOffice Connector requires MySQL Server 4.1 or above",
+ throw SQLException(u"MariaDB LibreOffice Connector requires MySQL Server 4.1 or above"_ustr,
*this, OUString(), 0, Any());
}
- lcl_executeUpdate(&m_mysql,
- OString{ "SET session sql_mode='ANSI_QUOTES,NO_AUTO_VALUE_ON_ZERO'" });
- lcl_executeUpdate(&m_mysql, OString{ "SET NAMES utf8mb4" });
+ lcl_executeUpdate(&m_mysql, "SET session sql_mode='ANSI_QUOTES,NO_AUTO_VALUE_ON_ZERO'"_ostr);
+ lcl_executeUpdate(&m_mysql, "SET NAMES utf8mb4"_ostr);
}
OUString OConnection::getImplementationName()
{
- return "com.sun.star.sdbc.drivers.mysqlc.OConnection";
+ return u"com.sun.star.sdbc.drivers.mysqlc.OConnection"_ustr;
}
css::uno::Sequence<OUString> OConnection::getSupportedServiceNames()
{
- return { "com.sun.star.sdbc.Connection" };
+ return { u"com.sun.star.sdbc.Connection"_ustr };
}
sal_Bool OConnection::supportsService(OUString const& ServiceName)
@@ -215,8 +218,8 @@ Reference<XStatement> SAL_CALL OConnection::createStatement()
// create a statement
// the statement can only be executed once
- Reference<XStatement> xReturn = new OStatement(this);
- m_aStatements.push_back(WeakReferenceHelper(xReturn));
+ rtl::Reference<OStatement> xReturn = new OStatement(this);
+ m_aStatements.push_back(xReturn.get());
return xReturn;
}
@@ -237,8 +240,8 @@ Reference<XPreparedStatement> SAL_CALL OConnection::prepareStatement(const OUStr
mysql_sqlstate(&m_mysql), nErrorNum, *this,
getConnectionEncoding());
- Reference<XPreparedStatement> xStatement = new OPreparedStatement(this, pStmt);
- m_aStatements.push_back(WeakReferenceHelper(xStatement));
+ rtl::Reference<OPreparedStatement> xStatement = new OPreparedStatement(this, pStmt);
+ m_aStatements.push_back(xStatement.get());
return xStatement;
}
@@ -253,8 +256,6 @@ Reference<XPreparedStatement> SAL_CALL OConnection::prepareCall(const OUString&
OUString SAL_CALL OConnection::nativeSQL(const OUString& /*_sSql*/)
{
- MutexGuard aGuard(m_aMutex);
-
// const OUString sSqlStatement = transFormPreparedStatement( _sSql );
// TODO
return OUString();
@@ -431,7 +432,7 @@ void OConnection::disposing()
for (auto const& statement : m_aStatements)
{
- Reference<XComponent> xComp(statement.get(), UNO_QUERY);
+ rtl::Reference<OCommonStatement> xComp(statement.get());
if (xComp.is())
{
xComp->dispose();
@@ -461,11 +462,11 @@ OUString OConnection::transFormPreparedStatement(const OUString& _sSQL)
try
{
Reference<XConnection> xCon = this;
- Sequence<Any> aArgs{ Any(NamedValue("ActiveConnection", makeAny(xCon))) };
+ Sequence<Any> aArgs{ Any(NamedValue(u"ActiveConnection"_ustr, Any(xCon))) };
m_xParameterSubstitution.set(
m_xDriver->getFactory()->createInstanceWithArguments(
- "org.openoffice.comp.helper.ParameterSubstitution", aArgs),
+ u"org.openoffice.comp.helper.ParameterSubstitution"_ustr, aArgs),
UNO_QUERY);
}
catch (const Exception&)
@@ -485,4 +486,36 @@ OUString OConnection::transFormPreparedStatement(const OUString& _sSQL)
return sSqlStatement;
}
+//----- XUnoTunnel ----------------------------------------------------------
+// virtual
+sal_Int64 SAL_CALL OConnection::getSomething(const css::uno::Sequence<sal_Int8>& rId)
+{
+ return comphelper::getSomethingImpl(rId, this);
+}
+
+// static
+const Sequence<sal_Int8>& OConnection::getUnoTunnelId()
+{
+ static const comphelper::UnoIdInit implId;
+ return implId.getSeq();
+}
+
+Reference<XTablesSupplier> OConnection::createCatalog()
+{
+ MutexGuard aGuard(m_aMutex);
+
+ // m_xCatalog is a weak reference. Reuse it if it still exists.
+ Reference<XTablesSupplier> xCatalog = m_xCatalog;
+ if (xCatalog.is())
+ {
+ return xCatalog;
+ }
+ else
+ {
+ xCatalog = new Catalog(this);
+ m_xCatalog = xCatalog;
+ return m_xCatalog;
+ }
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_connection.hxx b/connectivity/source/drivers/mysqlc/mysqlc_connection.hxx
index c75be4724654..dd7138fff464 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_connection.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_connection.hxx
@@ -24,21 +24,20 @@
#include "mysqlc_types.hxx"
#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/lang/DisposedException.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/lang/XUnoTunnel.hpp>
-#include <com/sun/star/sdbc/ColumnSearch.hpp>
#include <com/sun/star/sdbc/ColumnValue.hpp>
-#include <com/sun/star/sdbc/DataType.hpp>
#include <com/sun/star/sdbc/SQLWarning.hpp>
#include <com/sun/star/sdbc/XConnection.hpp>
#include <com/sun/star/sdbc/XWarningsSupplier.hpp>
#include <com/sun/star/util/XStringSubstitution.hpp>
-#include <cppuhelper/compbase3.hxx>
-#include <cppuhelper/weakref.hxx>
-#include <rtl/string.hxx>
+#include <com/sun/star/sdbcx/XTablesSupplier.hpp>
+
+#include <cppuhelper/basemutex.hxx>
+#include <cppuhelper/compbase.hxx>
#include <rtl/ref.hxx>
+#include <unotools/weakref.hxx>
#include <mysql.h>
@@ -56,12 +55,10 @@ class ODatabaseMetaData;
namespace mysqlc
{
-using ::com::sun::star::sdbc::SQLException;
-using ::com::sun::star::sdbc::SQLWarning;
-using ::com::sun::star::uno::RuntimeException;
+class OCommonStatement;
-typedef ::cppu::WeakComponentImplHelper3<css::sdbc::XConnection, css::sdbc::XWarningsSupplier,
- css::lang::XServiceInfo>
+typedef ::cppu::WeakComponentImplHelper<css::sdbc::XConnection, css::sdbc::XWarningsSupplier,
+ css::lang::XUnoTunnel, css::lang::XServiceInfo>
OMetaConnection_BASE;
struct ConnectionSettings
@@ -80,9 +77,7 @@ class MysqlCDriver;
typedef OMetaConnection_BASE OConnection_BASE;
-typedef std::vector<css::uno::WeakReferenceHelper> OWeakRefArray;
-
-class OConnection final : public OBase_Mutex, public OConnection_BASE
+class OConnection final : public cppu::BaseMutex, public OConnection_BASE
{
private:
MYSQL m_mysql;
@@ -92,11 +87,11 @@ private:
// Data attributes
+ css::uno::WeakReference<css::sdbcx::XTablesSupplier> m_xCatalog;
css::uno::WeakReference<css::sdbc::XDatabaseMetaData> m_xMetaData;
- OWeakRefArray m_aStatements; // vector containing a list
- // of all the Statement objects
- // for this Connection
+ // vector containing a list of all the Statement objects for this Connection.
+ std::vector<unotools::WeakReference<OCommonStatement>> m_aStatements;
rtl::Reference<MysqlCDriver> m_xDriver; // Pointer to the owning driver object
public:
@@ -114,6 +109,12 @@ public:
rtl_TextEncoding getConnectionEncoding() const { return m_settings.encoding; }
+ /**
+ * Create and/or connect to the sdbcx Catalog. This is completely
+ * unrelated to the SQL "Catalog".
+ */
+ css::uno::Reference<css::sdbcx::XTablesSupplier> createCatalog();
+
// OComponentHelper
virtual void SAL_CALL disposing() override;
@@ -124,6 +125,10 @@ public:
virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
+ // XUnoTunnel
+ virtual sal_Int64 SAL_CALL getSomething(const css::uno::Sequence<sal_Int8>& rId) override;
+ static const css::uno::Sequence<sal_Int8>& getUnoTunnelId();
+
// XConnection
css::uno::Reference<css::sdbc::XStatement> SAL_CALL createStatement() override;
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx
index a96d70f3461e..c3c073f276b2 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx
@@ -22,6 +22,7 @@
#include <com/sun/star/sdbc/Deferrability.hpp>
#include <com/sun/star/lang/XInitialization.hpp>
#include <comphelper/sequence.hxx>
+#include <o3tl/string_view.hxx>
#include <sal/log.hxx>
#include <rtl/ustrbuf.hxx>
@@ -32,7 +33,6 @@
using namespace connectivity::mysqlc;
using namespace com::sun::star::uno;
using namespace com::sun::star::lang;
-using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
static std::string wild("%");
@@ -158,11 +158,11 @@ sal_Int32 SAL_CALL ODatabaseMetaData::getMaxIndexLength() { return 256; }
sal_Bool SAL_CALL ODatabaseMetaData::supportsNonNullableColumns() { return true; }
-OUString SAL_CALL ODatabaseMetaData::getCatalogTerm() { return "n/a"; }
+OUString SAL_CALL ODatabaseMetaData::getCatalogTerm() { return u"n/a"_ustr; }
-OUString SAL_CALL ODatabaseMetaData::getIdentifierQuoteString() { return "\""; }
+OUString SAL_CALL ODatabaseMetaData::getIdentifierQuoteString() { return u"`"_ustr; }
-OUString SAL_CALL ODatabaseMetaData::getExtraNameCharacters() { return "#@"; }
+OUString SAL_CALL ODatabaseMetaData::getExtraNameCharacters() { return u"#@"_ustr; }
sal_Bool SAL_CALL ODatabaseMetaData::supportsDifferentTableCorrelationNames() { return true; }
@@ -349,7 +349,7 @@ OUString SAL_CALL ODatabaseMetaData::getURL()
OUString SAL_CALL ODatabaseMetaData::getUserName()
{
Reference<XStatement> statement = m_rConnection.createStatement();
- Reference<XResultSet> rs = statement->executeQuery("select user()");
+ Reference<XResultSet> rs = statement->executeQuery(u"select user()"_ustr);
Reference<XRow> xRow(rs, UNO_QUERY_THROW);
(void)rs->next(); // the first and only result
// e.g. root@localhost
@@ -363,9 +363,9 @@ OUString SAL_CALL ODatabaseMetaData::getUserName()
return userWithConnection;
}
-OUString SAL_CALL ODatabaseMetaData::getDriverName() { return "MySQL Connector/OO.org"; }
+OUString SAL_CALL ODatabaseMetaData::getDriverName() { return u"MySQL Connector/OO.org"_ustr; }
-OUString SAL_CALL ODatabaseMetaData::getDriverVersion() { return "0.9.2"; }
+OUString SAL_CALL ODatabaseMetaData::getDriverVersion() { return u"0.9.2"_ustr; }
OUString SAL_CALL ODatabaseMetaData::getDatabaseProductVersion()
{
@@ -373,11 +373,11 @@ OUString SAL_CALL ODatabaseMetaData::getDatabaseProductVersion()
m_rConnection.getConnectionEncoding());
}
-OUString SAL_CALL ODatabaseMetaData::getDatabaseProductName() { return "MySQL"; }
+OUString SAL_CALL ODatabaseMetaData::getDatabaseProductName() { return u"MySQL"_ustr; }
-OUString SAL_CALL ODatabaseMetaData::getProcedureTerm() { return "procedure"; }
+OUString SAL_CALL ODatabaseMetaData::getProcedureTerm() { return u"procedure"_ustr; }
-OUString SAL_CALL ODatabaseMetaData::getSchemaTerm() { return "database"; }
+OUString SAL_CALL ODatabaseMetaData::getSchemaTerm() { return u"database"_ustr; }
sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMajorVersion()
{
@@ -400,7 +400,7 @@ sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMinorVersion()
OUString SAL_CALL ODatabaseMetaData::getSQLKeywords()
{
- return "ACCESSIBLE, ADD, ALL,"
+ return u"ACCESSIBLE, ADD, ALL,"
"ALTER, ANALYZE, AND, AS, ASC, ASENSITIVE, BEFORE,"
"BETWEEN, BIGINT, BINARY, BLOB, BOTH, BY, CALL,"
"CASCADE, CASE, CHANGE, CHAR, CHARACTER, CHECK,"
@@ -442,43 +442,43 @@ OUString SAL_CALL ODatabaseMetaData::getSQLKeywords()
"VARCHARACTER, VARYING, WHEN, WHERE, WHILE, WITH,"
"WRITE, X509, XOR, YEAR_MONTH, ZEROFILL"
"GENERAL, IGNORE_SERVER_IDS, MASTER_HEARTBEAT_PERIOD,"
- "MAXVALUE, RESIGNAL, SIGNAL, SLOW";
+ "MAXVALUE, RESIGNAL, SIGNAL, SLOW"_ustr;
}
-OUString SAL_CALL ODatabaseMetaData::getSearchStringEscape() { return "\\"; }
+OUString SAL_CALL ODatabaseMetaData::getSearchStringEscape() { return u"\\"_ustr; }
OUString SAL_CALL ODatabaseMetaData::getStringFunctions()
{
- return "ASCII,BIN,BIT_LENGTH,CHAR,CHARACTER_LENGTH,CHAR_LENGTH,CONCAT,"
+ return u"ASCII,BIN,BIT_LENGTH,CHAR,CHARACTER_LENGTH,CHAR_LENGTH,CONCAT,"
"CONCAT_WS,CONV,ELT,EXPORT_SET,FIELD,FIND_IN_SET,HEX,INSERT,"
"INSTR,LCASE,LEFT,LENGTH,LOAD_FILE,LOCATE,LOCATE,LOWER,LPAD,"
"LTRIM,MAKE_SET,MATCH,MID,OCT,OCTET_LENGTH,ORD,POSITION,"
"QUOTE,REPEAT,REPLACE,REVERSE,RIGHT,RPAD,RTRIM,SOUNDEX,"
"SPACE,STRCMP,SUBSTRING,SUBSTRING,SUBSTRING,SUBSTRING,"
- "SUBSTRING_INDEX,TRIM,UCASE,UPPER";
+ "SUBSTRING_INDEX,TRIM,UCASE,UPPER"_ustr;
}
OUString SAL_CALL ODatabaseMetaData::getTimeDateFunctions()
{
- return "DAYOFWEEK,WEEKDAY,DAYOFMONTH,DAYOFYEAR,MONTH,DAYNAME,"
+ return u"DAYOFWEEK,WEEKDAY,DAYOFMONTH,DAYOFYEAR,MONTH,DAYNAME,"
"MONTHNAME,QUARTER,WEEK,YEAR,HOUR,MINUTE,SECOND,PERIOD_ADD,"
"PERIOD_DIFF,TO_DAYS,FROM_DAYS,DATE_FORMAT,TIME_FORMAT,"
"CURDATE,CURRENT_DATE,CURTIME,CURRENT_TIME,NOW,SYSDATE,"
"CURRENT_TIMESTAMP,UNIX_TIMESTAMP,FROM_UNIXTIME,"
- "SEC_TO_TIME,TIME_TO_SEC";
+ "SEC_TO_TIME,TIME_TO_SEC"_ustr;
}
OUString SAL_CALL ODatabaseMetaData::getSystemFunctions()
{
- return "DATABASE,USER,SYSTEM_USER,"
- "SESSION_USER,PASSWORD,ENCRYPT,LAST_INSERT_ID,VERSION";
+ return u"DATABASE,USER,SYSTEM_USER,"
+ "SESSION_USER,PASSWORD,ENCRYPT,LAST_INSERT_ID,VERSION"_ustr;
}
OUString SAL_CALL ODatabaseMetaData::getNumericFunctions()
{
- return "ABS,ACOS,ASIN,ATAN,ATAN2,BIT_COUNT,CEILING,COS,"
+ return u"ABS,ACOS,ASIN,ATAN,ATAN2,BIT_COUNT,CEILING,COS,"
"COT,DEGREES,EXP,FLOOR,LOG,LOG10,MAX,MIN,MOD,PI,POW,"
- "POWER,RADIANS,RAND,ROUND,SIN,SQRT,TAN,TRUNCATE";
+ "POWER,RADIANS,RAND,ROUND,SIN,SQRT,TAN,TRUNCATE"_ustr;
}
sal_Bool SAL_CALL ODatabaseMetaData::supportsExtendedSQLGrammar() { return false; }
@@ -553,9 +553,10 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTableTypes()
const char* const table_types[] = { "TABLE", "VIEW" };
sal_Int32 const requiredVersion[] = { 0, 50000 };
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
rtl_TextEncoding encoding = m_rConnection.getConnectionEncoding();
@@ -564,7 +565,7 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTableTypes()
if (m_rConnection.getMysqlVersion() >= requiredVersion[i])
{
rRows.push_back(
- { { Any(), makeAny(mysqlc_sdbc_driver::convert(table_types[i], encoding)) } });
+ { { Any(), Any(mysqlc_sdbc_driver::convert(table_types[i], encoding)) } });
}
}
lcl_setRows_throw(xResultSet, 5, rRows);
@@ -573,9 +574,10 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTableTypes()
Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTypeInfo()
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
@@ -584,17 +586,17 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTypeInfo()
while (mysqlc_types[i].typeName)
{
rRows.push_back(
- { { Any(), makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].typeName, encoding)),
- makeAny(mysqlc_types[i].dataType), makeAny(mysqlc_types[i].precision),
- makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalPrefix, encoding)),
- makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalSuffix, encoding)),
- makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].createParams, encoding)),
- makeAny(mysqlc_types[i].nullable), makeAny(mysqlc_types[i].caseSensitive),
- makeAny(mysqlc_types[i].searchable), makeAny(mysqlc_types[i].isUnsigned),
- makeAny(mysqlc_types[i].fixedPrecScale), makeAny(mysqlc_types[i].autoIncrement),
- makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].localTypeName, encoding)),
- makeAny(mysqlc_types[i].minScale), makeAny(mysqlc_types[i].maxScale),
- makeAny(sal_Int32(0)), makeAny(sal_Int32(0)), makeAny(sal_Int32(10)) } });
+ { { Any(), Any(mysqlc_sdbc_driver::convert(mysqlc_types[i].typeName, encoding)),
+ Any(mysqlc_types[i].dataType), Any(mysqlc_types[i].precision),
+ Any(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalPrefix, encoding)),
+ Any(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalSuffix, encoding)),
+ Any(mysqlc_sdbc_driver::convert(mysqlc_types[i].createParams, encoding)),
+ Any(mysqlc_types[i].nullable), Any(mysqlc_types[i].caseSensitive),
+ Any(mysqlc_types[i].searchable), Any(mysqlc_types[i].isUnsigned),
+ Any(mysqlc_types[i].fixedPrecScale), Any(mysqlc_types[i].autoIncrement),
+ Any(mysqlc_sdbc_driver::convert(mysqlc_types[i].localTypeName, encoding)),
+ Any(mysqlc_types[i].minScale), Any(mysqlc_types[i].maxScale), Any(sal_Int32(0)),
+ Any(sal_Int32(0)), Any(sal_Int32(10)) } });
i++;
}
@@ -605,27 +607,26 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTypeInfo()
Reference<XResultSet> SAL_CALL ODatabaseMetaData::getCatalogs()
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
return xResultSet;
}
Reference<XResultSet> SAL_CALL ODatabaseMetaData::getSchemas()
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
- OUString sSql
- = m_rConnection.getMysqlVersion() > 49999
- ? OUString{ "SELECT SCHEMA_NAME AS TABLE_SCHEM, CATALOG_NAME AS TABLE_CATALOG "
- "FROM INFORMATION_SCHEMA.SCHEMATA ORDER BY SCHEMA_NAME" }
- : OUString{ "SHOW DATABASES" };
-
Reference<XStatement> statement = m_rConnection.createStatement();
- Reference<XInterface> executed = statement->executeQuery(sSql);
+ Reference<XInterface> executed = statement->executeQuery(
+ u"SELECT SCHEMA_NAME AS TABLE_SCHEM, CATALOG_NAME AS TABLE_CATALOG FROM INFORMATION_SCHEMA.SCHEMATA \
+ WHERE SCHEMA_NAME NOT IN ('information_schema', 'mysql', 'performance_schema') \
+ ORDER BY SCHEMA_NAME"_ustr);
Reference<XResultSet> rs(executed, UNO_QUERY_THROW);
Reference<XResultSetMetaDataSupplier> supp(executed, UNO_QUERY_THROW);
Reference<XResultSetMetaData> rs_meta = supp->getMetaData();
@@ -635,20 +636,12 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getSchemas()
while (rs->next())
{
std::vector<Any> aRow{ Any() };
- bool informationSchema = false;
for (sal_uInt32 i = 1; i <= columns; i++)
{
OUString columnStringValue = xRow->getString(i);
- if (i == 1)
- { // TABLE_SCHEM
- informationSchema = columnStringValue.equalsIgnoreAsciiCase("information_schema");
- }
- aRow.push_back(makeAny(columnStringValue));
- }
- if (!informationSchema)
- {
- rRows.push_back(aRow);
+ aRow.push_back(Any(columnStringValue));
}
+ rRows.push_back(aRow);
}
lcl_setRows_throw(xResultSet, 1, rRows);
@@ -660,12 +653,12 @@ Reference<XResultSet>
const OUString& table,
const OUString& columnNamePattern)
{
- OUString query("SELECT TABLE_CATALOG AS TABLE_CAT, TABLE_SCHEMA AS "
+ OUString query(u"SELECT TABLE_CATALOG AS TABLE_CAT, TABLE_SCHEMA AS "
"TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, NULL AS GRANTOR, "
"GRANTEE, PRIVILEGE_TYPE AS PRIVILEGE, IS_GRANTABLE FROM "
"INFORMATION_SCHEMA.COLUMN_PRIVILEGES WHERE TABLE_SCHEMA LIKE "
"'?' AND TABLE_NAME='?' AND COLUMN_NAME LIKE '?' ORDER BY "
- "COLUMN_NAME, PRIVILEGE_TYPE");
+ "COLUMN_NAME, PRIVILEGE_TYPE"_ustr);
query = query.replaceFirst("?", schema);
query = query.replaceFirst("?", table);
@@ -734,34 +727,35 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getColumns(const Any& /*catalo
Reference<XResultSet> rs = statement->executeQuery(query);
Reference<XRow> xRow(rs, UNO_QUERY_THROW);
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> aRows;
while (rs->next())
{
std::vector<Any> aRow{ Any() }; // 0. element is unused
// catalog name
- aRow.push_back(makeAny(xRow->getString(1)));
+ aRow.emplace_back(xRow->getString(1));
// schema name
- aRow.push_back(makeAny(xRow->getString(2)));
+ aRow.emplace_back(xRow->getString(2));
// table name
- aRow.push_back(makeAny(xRow->getString(3)));
+ aRow.emplace_back(xRow->getString(3));
// column name
- aRow.push_back(makeAny(xRow->getString(4)));
+ aRow.emplace_back(xRow->getString(4));
// data type
OUString sDataType = xRow->getString(5);
- aRow.push_back(makeAny(mysqlc_sdbc_driver::mysqlStrToOOOType(sDataType)));
+ aRow.emplace_back(mysqlc_sdbc_driver::mysqlStrToOOOType(sDataType));
// type name
- aRow.push_back(makeAny(sDataType)); // TODO
+ aRow.emplace_back(sDataType); // TODO
// column size
sal_Int32 nColumnSize = 0;
OUString sColumnType = xRow->getString(14);
sal_Int32 nCharMaxLen = xRow->getShort(6);
bool bIsCharMax = !xRow->wasNull();
if (sDataType.equalsIgnoreAsciiCase("year"))
- nColumnSize = sColumnType.copy(6, 1).toInt32(); // 'year(' length is 5
+ nColumnSize = o3tl::toInt32(sColumnType.subView(6, 1)); // 'year(' length is 5
else if (sDataType.equalsIgnoreAsciiCase("date"))
nColumnSize = 10;
else if (sDataType.equalsIgnoreAsciiCase("time"))
@@ -773,34 +767,34 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getColumns(const Any& /*catalo
nColumnSize = xRow->getShort(7); // numeric precision
else
nColumnSize = nCharMaxLen;
- aRow.push_back(makeAny(nColumnSize));
- aRow.push_back(Any()); // buffer length - unused
+ aRow.emplace_back(nColumnSize);
+ aRow.emplace_back(); // buffer length - unused
// decimal digits (scale)
- aRow.push_back(makeAny(xRow->getShort(8)));
+ aRow.emplace_back(xRow->getShort(8));
// num_prec_radix
- aRow.push_back(makeAny(sal_Int32(10)));
+ aRow.emplace_back(sal_Int32(10));
// nullable
OUString sIsNullable = xRow->getString(13);
if (xRow->wasNull())
- aRow.push_back(makeAny(ColumnValue::NULLABLE_UNKNOWN));
+ aRow.emplace_back(ColumnValue::NULLABLE_UNKNOWN);
else if (sIsNullable.equalsIgnoreAsciiCase("YES"))
- aRow.push_back(makeAny(ColumnValue::NULLABLE));
+ aRow.emplace_back(ColumnValue::NULLABLE);
else
- aRow.push_back(makeAny(ColumnValue::NO_NULLS));
+ aRow.emplace_back(ColumnValue::NO_NULLS);
// remarks
- aRow.push_back(makeAny(xRow->getString(9)));
+ aRow.emplace_back(xRow->getString(9));
// default
- aRow.push_back(makeAny(xRow->getString(10)));
+ aRow.emplace_back(xRow->getString(10));
- aRow.push_back(Any{}); // sql_data_type - unused
- aRow.push_back(Any{}); // sql_datetime_sub - unused
+ aRow.emplace_back(); // sql_data_type - unused
+ aRow.emplace_back(); // sql_datetime_sub - unused
// character octet length
- aRow.push_back(makeAny(xRow->getString(11)));
+ aRow.emplace_back(xRow->getString(11));
// ordinal position
- aRow.push_back(makeAny(xRow->getString(12)));
+ aRow.emplace_back(xRow->getString(12));
// is nullable
- aRow.push_back(makeAny(sIsNullable));
+ aRow.emplace_back(sIsNullable);
aRows.push_back(aRow);
}
lcl_setRows_throw(xResultSet, 1, aRows);
@@ -816,25 +810,20 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTables(const Any& /*catalog
"SELECT TABLE_CATALOG AS TABLE_CAT, TABLE_SCHEMA AS TABLE_SCHEM, TABLE_NAME,"
"IF(STRCMP(TABLE_TYPE,'BASE TABLE'), TABLE_TYPE, 'TABLE') AS TABLE_TYPE, TABLE_COMMENT AS "
"REMARKS "
- "FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA LIKE '?' AND TABLE_NAME LIKE '?' "
+ "FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA NOT IN ('information_schema', 'mysql', "
+ "'performance_schema') AND TABLE_SCHEMA LIKE '?' AND TABLE_NAME LIKE '?' "
};
if (types.getLength() == 1)
{
- buffer.append("AND TABLE_TYPE LIKE '");
- buffer.append(types[0]);
- buffer.append("'");
+ buffer.append("AND TABLE_TYPE LIKE '" + types[0] + "'");
}
else if (types.getLength() > 1)
{
- buffer.append("AND (TABLE_TYPE LIKE '");
- buffer.append(types[0]);
- buffer.append("'");
+ buffer.append("AND (TABLE_TYPE LIKE '" + types[0] + "'");
for (sal_Int32 i = 1; i < types.getLength(); ++i)
{
- buffer.append(" OR TABLE_TYPE LIKE '");
- buffer.append(types[i]);
- buffer.append("'");
+ buffer.append(" OR TABLE_TYPE LIKE '" + types[i] + "'");
}
buffer.append(")");
}
@@ -865,9 +854,10 @@ Reference<XResultSet>
const OUString& /*schemaPattern*/,
const OUString& /*procedureNamePattern*/)
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
// TODO IMPL
SAL_WARN("connectivity.mysqlc", "method not implemented");
@@ -879,9 +869,10 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getVersionColumns(const Any& /
const OUString& /* schema */,
const OUString& /* table */)
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
lcl_setRows_throw(xResultSet, 16, rRows);
return xResultSet;
@@ -891,9 +882,10 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getExportedKeys(const Any& /*c
const OUString& /*schema */,
const OUString& /*table */)
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
// TODO implement
SAL_WARN("connectivity.mysqlc", "method not implemented");
@@ -905,11 +897,12 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getImportedKeys(const Any& /*c
const OUString& schema,
const OUString& table)
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
- OUString query("SELECT refi.CONSTRAINT_CATALOG," // 1: foreign catalog
+ OUString query(u"SELECT refi.CONSTRAINT_CATALOG," // 1: foreign catalog
" k.COLUMN_NAME," // 2: foreign column name
" refi.UNIQUE_CONSTRAINT_CATALOG," // 3: primary catalog FIXME
" k.REFERENCED_TABLE_SCHEMA," // 4: primary schema
@@ -924,7 +917,7 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getImportedKeys(const Any& /*c
"refi.CONSTRAINT_NAME "
" and k.TABLE_NAME = refi.TABLE_NAME "
" WHERE k.REFERENCED_TABLE_SCHEMA LIKE "
- "'?' AND refi.TABLE_NAME='?'");
+ "'?' AND refi.TABLE_NAME='?'"_ustr);
query = query.replaceFirst("?", schema); // TODO what if schema is NULL?
query = query.replaceFirst("?", table);
@@ -938,34 +931,34 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getImportedKeys(const Any& /*c
std::vector<Any> aRow{ Any() }; // 0. element is unused
// primary key catalog
- aRow.push_back(makeAny(xRow->getString(3)));
+ aRow.push_back(Any(xRow->getString(3)));
// primary key schema
- aRow.push_back(makeAny(xRow->getString(4)));
+ aRow.push_back(Any(xRow->getString(4)));
// primary key table
- aRow.push_back(makeAny(xRow->getString(5)));
+ aRow.push_back(Any(xRow->getString(5)));
// primary column name
- aRow.push_back(makeAny(xRow->getString(6)));
+ aRow.push_back(Any(xRow->getString(6)));
// fk table catalog
- aRow.push_back(makeAny(xRow->getString(1)));
+ aRow.push_back(Any(xRow->getString(1)));
// fk schema
- aRow.push_back(makeAny(xRow->getString(11)));
+ aRow.push_back(Any(xRow->getString(11)));
// fk table
- aRow.push_back(makeAny(xRow->getString(10)));
+ aRow.push_back(Any(xRow->getString(10)));
// fk column name
- aRow.push_back(makeAny(xRow->getString(2)));
+ aRow.push_back(Any(xRow->getString(2)));
// KEY_SEQ
- aRow.push_back(makeAny(sal_Int32{ 0 })); // TODO
+ aRow.push_back(Any(sal_Int32{ 0 })); // TODO
// update rule
- aRow.push_back(makeAny(xRow->getShort(7)));
+ aRow.push_back(Any(xRow->getShort(7)));
// delete rule
- aRow.push_back(makeAny(xRow->getShort(8)));
+ aRow.push_back(Any(xRow->getShort(8)));
// foreign key name
- aRow.push_back(makeAny(xRow->getString(9)));
+ aRow.push_back(Any(xRow->getString(9)));
// primary key name
- aRow.push_back(makeAny(OUString{})); // TODO
+ aRow.push_back(Any(OUString{})); // TODO
// deferrability
- aRow.push_back(makeAny(Deferrability::NONE));
+ aRow.push_back(Any(Deferrability::NONE));
aRows.push_back(aRow);
}
lcl_setRows_throw(xResultSet, 1, aRows);
@@ -976,12 +969,12 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getPrimaryKeys(const Any& /*ca
const OUString& schema,
const OUString& table)
{
- OUString query("SELECT TABLE_CATALOG AS TABLE_CAT, TABLE_SCHEMA "
+ OUString query(u"SELECT TABLE_CATALOG AS TABLE_CAT, TABLE_SCHEMA "
"AS TABLE_SCHEM, TABLE_NAME, "
"COLUMN_NAME, SEQ_IN_INDEX AS KEY_SEQ,"
"INDEX_NAME AS PK_NAME FROM INFORMATION_SCHEMA.STATISTICS "
"WHERE TABLE_SCHEMA LIKE '?' AND TABLE_NAME LIKE '?' AND INDEX_NAME='PRIMARY' "
- "ORDER BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX");
+ "ORDER BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, SEQ_IN_INDEX"_ustr);
// TODO use prepared stmt instead
// TODO escape schema, table name ?
@@ -999,9 +992,10 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getIndexInfo(const Any& /*cata
sal_Bool /*unique*/,
sal_Bool /*approximate*/)
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
// TODO
SAL_WARN("connectivity.mysqlc", "method not implemented");
@@ -1015,9 +1009,10 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getBestRowIdentifier(const Any
sal_Int32 /*scope*/,
sal_Bool /*nullable*/)
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
// TODO
SAL_WARN("connectivity.mysqlc", "method not implemented");
@@ -1026,11 +1021,23 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getBestRowIdentifier(const Any
}
Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTablePrivileges(
- const Any& /*catalog*/, const OUString& /*schemaPattern*/, const OUString& /*tableNamePattern*/)
+ const Any& /* catalog */, const OUString& schemaPattern, const OUString& tableNamePattern)
{
- // TODO
- SAL_WARN("connectivity.mysqlc", "method not implemented");
- throw SQLException("getTablePrivileges method not implemented", *this, "IM001", 0, Any());
+ OUString query(u"SELECT TABLE_SCHEMA TABLE_CAT, "
+ "NULL TABLE_SCHEM, "
+ "TABLE_NAME, "
+ "NULL GRANTOR,"
+ "GRANTEE, "
+ "PRIVILEGE_TYPE PRIVILEGE, "
+ "IS_GRANTABLE "
+ "FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES "
+ "WHERE TABLE_SCHEMA LIKE '?' "
+ "AND TABLE_NAME='?'"_ustr);
+ query = query.replaceFirst("?", schemaPattern);
+ query = query.replaceFirst("?", tableNamePattern);
+ Reference<XStatement> statement = m_rConnection.createStatement();
+ Reference<XResultSet> rs = statement->executeQuery(query);
+ return rs;
}
Reference<XResultSet> SAL_CALL ODatabaseMetaData::getCrossReference(
@@ -1038,9 +1045,10 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getCrossReference(
const OUString& /*primaryTable_*/, const Any& /*foreignCatalog*/,
const OUString& /*foreignSchema*/, const OUString& /*foreignTable*/)
{
- Reference<XResultSet> xResultSet(getOwnConnection().getDriver().getFactory()->createInstance(
- "org.openoffice.comp.helper.DatabaseMetaDataResultSet"),
- UNO_QUERY);
+ Reference<XResultSet> xResultSet(
+ getOwnConnection().getDriver().getFactory()->createInstance(
+ u"org.openoffice.comp.helper.DatabaseMetaDataResultSet"_ustr),
+ UNO_QUERY);
std::vector<std::vector<Any>> rRows;
// TODO
SAL_WARN("connectivity.mysqlc", "method not implemented");
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.hxx b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.hxx
index b56a460e0843..caed92f20e80 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.hxx
@@ -177,7 +177,7 @@ public:
css::uno::Reference<css::sdbc::XResultSet> SAL_CALL getSchemas() override;
css::uno::Reference<css::sdbc::XResultSet> SAL_CALL getCatalogs() override;
css::uno::Reference<css::sdbc::XResultSet> SAL_CALL getTableTypes() override;
- css::uno::Reference<css::sdbc::XResultSet>
+ virtual css::uno::Reference<css::sdbc::XResultSet>
SAL_CALL getColumns(const Any& catalog, const OUString& schemaPattern,
const OUString& tableNamePattern,
const OUString& columnNamePattern) override;
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_driver.cxx b/connectivity/source/drivers/mysqlc/mysqlc_driver.cxx
index 5e5b83625e90..e8b1d5c0cf70 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_driver.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_driver.cxx
@@ -18,15 +18,16 @@
*/
#include "mysqlc_driver.hxx"
#include "mysqlc_connection.hxx"
+#include <cppuhelper/supportsservice.hxx>
+#include <comphelper/servicehelper.hxx>
using namespace css::uno;
using namespace css::lang;
using namespace css::beans;
using namespace css::sdbc;
+using namespace css::sdbcx;
using namespace connectivity::mysqlc;
-#include <cppuhelper/supportsservice.hxx>
-
MysqlCDriver::MysqlCDriver(const Reference<XMultiServiceFactory>& _rxFactory)
: ODriver_BASE(m_aMutex)
, m_xFactory(_rxFactory)
@@ -40,7 +41,7 @@ void MysqlCDriver::disposing()
// when driver will be destroyed so all our connections have to be destroyed as well
for (auto const& connection : m_xConnections)
{
- Reference<XComponent> xComp(connection.get(), UNO_QUERY);
+ rtl::Reference<OConnection> xComp(connection);
if (xComp.is())
{
xComp->dispose();
@@ -54,12 +55,12 @@ void MysqlCDriver::disposing()
// static ServiceInfo
OUString MysqlCDriver::getImplementationName_Static()
{
- return "com.sun.star.comp.sdbc.mysqlc.MysqlCDriver";
+ return u"com.sun.star.comp.sdbc.mysqlc.MysqlCDriver"_ustr;
}
Sequence<OUString> MysqlCDriver::getSupportedServiceNames_Static()
{
- return { "com.sun.star.sdbc.Driver" };
+ return { u"com.sun.star.sdbc.Driver"_ustr, u"com.sun.star.sdbcx.Driver"_ustr };
}
OUString SAL_CALL MysqlCDriver::getImplementationName() { return getImplementationName_Static(); }
@@ -84,12 +85,11 @@ Reference<XConnection> SAL_CALL MysqlCDriver::connect(const OUString& url,
return nullptr;
}
- Reference<XConnection> xConn;
// create a new connection with the given properties and append it to our vector
rtl::Reference<OConnection> pCon = new OConnection(*this);
pCon->construct(url, info);
- m_xConnections.push_back(WeakReferenceHelper(*pCon));
+ m_xConnections.push_back(pCon);
return pCon;
}
@@ -103,8 +103,8 @@ MysqlCDriver::getPropertyInfo(const OUString& url, const Sequence<PropertyValue>
{
if (acceptsURL(url))
{
- return { { "Hostname", "Name of host", true, "localhost", {} },
- { "Port", "Port", true, "3306", {} } };
+ return { { u"Hostname"_ustr, u"Name of host"_ustr, true, u"localhost"_ustr, {} },
+ { u"Port"_ustr, u"Port"_ustr, true, u"3306"_ustr, {} } };
}
return Sequence<DriverPropertyInfo>();
@@ -114,6 +114,21 @@ sal_Int32 SAL_CALL MysqlCDriver::getMajorVersion() { return MARIADBC_VERSION_MAJ
sal_Int32 SAL_CALL MysqlCDriver::getMinorVersion() { return MARIADBC_VERSION_MINOR; }
+Reference<XTablesSupplier>
+ SAL_CALL MysqlCDriver::getDataDefinitionByConnection(const Reference<XConnection>& rConnection)
+{
+ if (OConnection* pConnection = comphelper::getFromUnoTunnel<OConnection>(rConnection))
+ return pConnection->createCatalog();
+ return {};
+}
+
+Reference<XTablesSupplier> SAL_CALL
+MysqlCDriver::getDataDefinitionByURL(const OUString& rURL, const Sequence<PropertyValue>& rInfo)
+{
+ Reference<XConnection> xConnection = connect(rURL, rInfo);
+ return getDataDefinitionByConnection(xConnection);
+}
+
namespace connectivity::mysqlc
{
Reference<XInterface> MysqlCDriver_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory)
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_driver.hxx b/connectivity/source/drivers/mysqlc/mysqlc_driver.hxx
index fec80288b59a..5479132a4cf6 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_driver.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_driver.hxx
@@ -21,24 +21,21 @@
#include "mysqlc_connection.hxx"
#include <com/sun/star/sdbc/XDriver.hpp>
-#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-
-#include <cppuhelper/compbase2.hxx>
-#include <osl/module.h>
+#include <com/sun/star/sdbcx/XDataDefinitionSupplier.hpp>
+#include <cppuhelper/compbase.hxx>
namespace connectivity::mysqlc
{
-using css::sdbc::SQLException;
-using css::uno::Exception;
using css::uno::Reference;
-using css::uno::RuntimeException;
using css::uno::Sequence;
Reference<css::uno::XInterface>
MysqlCDriver_CreateInstance(const Reference<css::lang::XMultiServiceFactory>& _rxFactory);
-typedef ::cppu::WeakComponentImplHelper2<css::sdbc::XDriver, css::lang::XServiceInfo> ODriver_BASE;
+typedef ::cppu::WeakComponentImplHelper<css::sdbc::XDriver, css::sdbcx::XDataDefinitionSupplier,
+ css::lang::XServiceInfo>
+ ODriver_BASE;
typedef void* (*OMysqlCConnection_CreateInstanceFunction)(void* _pDriver);
@@ -47,13 +44,9 @@ class MysqlCDriver : public ODriver_BASE
protected:
Reference<css::lang::XMultiServiceFactory> m_xFactory;
::osl::Mutex m_aMutex; // mutex is need to control member access
- OWeakRefArray m_xConnections; // vector containing a list
+ std::vector<unotools::WeakReference<OConnection>> m_xConnections; // vector containing a list
// of all the Connection objects
// for this Driver
-#ifdef BUNDLE_MARIADB
- oslModule m_hCConnModule;
- bool m_bAttemptedLoadCConn;
-#endif
public:
explicit MysqlCDriver(const Reference<css::lang::XMultiServiceFactory>& _rxFactory);
@@ -82,6 +75,12 @@ public:
const Reference<css::lang::XMultiServiceFactory>& getFactory() const { return m_xFactory; }
static rtl_TextEncoding getDefaultEncoding() { return RTL_TEXTENCODING_UTF8; }
+
+ // XDataDefinitionSupplier
+ virtual css::uno::Reference<css::sdbcx::XTablesSupplier> SAL_CALL getDataDefinitionByConnection(
+ const css::uno::Reference<css::sdbc::XConnection>& rxConnection) override;
+ virtual css::uno::Reference<css::sdbcx::XTablesSupplier> SAL_CALL getDataDefinitionByURL(
+ const OUString& rsURL, const css::uno::Sequence<css::beans::PropertyValue>& rInfo) override;
};
} /* connectivity::mysqlc */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_general.cxx b/connectivity/source/drivers/mysqlc/mysqlc_general.cxx
index 35ecfee84750..58409e454e7a 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_general.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_general.cxx
@@ -20,6 +20,7 @@
#include <sal/log.hxx>
#include <rtl/ustring.hxx>
+#include <o3tl/string_view.hxx>
#include <com/sun/star/sdbc/DataType.hpp>
@@ -93,7 +94,7 @@ void throwFeatureNotImplementedException(const char* _pAsciiFeatureName,
{
const OUString sMessage
= OUString::createFromAscii(_pAsciiFeatureName) + ": feature not implemented.";
- throw SQLException(sMessage, _rxContext, "HYC00", 0, Any());
+ throw SQLException(sMessage, _rxContext, u"HYC00"_ustr, 0, Any());
}
void throwInvalidArgumentException(const char* _pAsciiFeatureName,
@@ -101,7 +102,7 @@ void throwInvalidArgumentException(const char* _pAsciiFeatureName,
{
const OUString sMessage
= OUString::createFromAscii(_pAsciiFeatureName) + ": invalid arguments.";
- throw SQLException(sMessage, _rxContext, "HYC00", 0, Any());
+ throw SQLException(sMessage, _rxContext, u"HYC00"_ustr, 0, Any());
}
void throwSQLExceptionWithMsg(const char* msg, const char* SQLSTATE, unsigned int errorNum,
@@ -164,6 +165,9 @@ sal_Int32 mysqlToOOOType(int eType, int charsetnr) noexcept
return css::sdbc::DataType::VARCHAR;
case MYSQL_TYPE_BLOB:
+ case MYSQL_TYPE_TINY_BLOB:
+ case MYSQL_TYPE_MEDIUM_BLOB:
+ case MYSQL_TYPE_LONG_BLOB:
if (charsetnr == 63)
return css::sdbc::DataType::LONGVARBINARY;
return css::sdbc::DataType::LONGVARCHAR;
@@ -189,50 +193,58 @@ sal_Int32 mysqlToOOOType(int eType, int charsetnr) noexcept
return css::sdbc::DataType::VARCHAR;
}
-sal_Int32 mysqlStrToOOOType(const OUString& sType)
+sal_Int32 mysqlStrToOOOType(std::u16string_view sType)
{
// TODO other types.
- if (sType.equalsIgnoreAsciiCase("tiny") || sType.equalsIgnoreAsciiCase("tinyint"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"tiny")
+ || o3tl::equalsIgnoreAsciiCase(sType, u"tinyint"))
return css::sdbc::DataType::TINYINT;
- if (sType.equalsIgnoreAsciiCase("smallint") || sType.equalsIgnoreAsciiCase("year"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"smallint")
+ || o3tl::equalsIgnoreAsciiCase(sType, u"year"))
return css::sdbc::DataType::SMALLINT;
- if (sType.equalsIgnoreAsciiCase("int") || sType.equalsIgnoreAsciiCase("mediumint"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"int")
+ || o3tl::equalsIgnoreAsciiCase(sType, u"mediumint"))
return css::sdbc::DataType::INTEGER;
- if (sType.equalsIgnoreAsciiCase("varchar") || sType.equalsIgnoreAsciiCase("set")
- || sType.equalsIgnoreAsciiCase("enum"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"varchar") || o3tl::equalsIgnoreAsciiCase(sType, u"set")
+ || o3tl::equalsIgnoreAsciiCase(sType, u"enum"))
return css::sdbc::DataType::VARCHAR;
- if (sType.equalsIgnoreAsciiCase("bigint"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"bigint"))
return css::sdbc::DataType::BIGINT;
- if (sType.equalsIgnoreAsciiCase("blob") || sType.equalsIgnoreAsciiCase("longblob")
- || sType.equalsIgnoreAsciiCase("tinyblob") || sType.equalsIgnoreAsciiCase("mediumblob"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"blob")
+ || o3tl::equalsIgnoreAsciiCase(sType, u"longblob")
+ || o3tl::equalsIgnoreAsciiCase(sType, u"tinyblob")
+ || o3tl::equalsIgnoreAsciiCase(sType, u"mediumblob"))
return css::sdbc::DataType::BLOB;
- if (sType.equalsIgnoreAsciiCase("varbinary"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"varbinary"))
return css::sdbc::DataType::VARBINARY;
- if (sType.equalsIgnoreAsciiCase("char"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"char"))
return css::sdbc::DataType::CHAR;
- if (sType.equalsIgnoreAsciiCase("tinytext"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"tinytext"))
return css::sdbc::DataType::VARCHAR;
- if (sType.equalsIgnoreAsciiCase("text"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"text"))
return css::sdbc::DataType::LONGVARCHAR;
- if (sType.equalsIgnoreAsciiCase("mediumtext") || sType.equalsIgnoreAsciiCase("longtext"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"mediumtext")
+ || o3tl::equalsIgnoreAsciiCase(sType, u"longtext"))
return css::sdbc::DataType::CLOB;
- if (sType.equalsIgnoreAsciiCase("binary"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"binary"))
return css::sdbc::DataType::BINARY;
- if (sType.equalsIgnoreAsciiCase("time"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"time"))
return css::sdbc::DataType::TIME;
- if (sType.equalsIgnoreAsciiCase("date"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"date"))
return css::sdbc::DataType::DATE;
- if (sType.equalsIgnoreAsciiCase("datetime") || sType.equalsIgnoreAsciiCase("timestamp"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"datetime")
+ || o3tl::equalsIgnoreAsciiCase(sType, u"timestamp"))
return css::sdbc::DataType::TIMESTAMP;
- if (sType.equalsIgnoreAsciiCase("decimal"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"decimal"))
return css::sdbc::DataType::DECIMAL;
- if (sType.equalsIgnoreAsciiCase("real") || sType.equalsIgnoreAsciiCase("float"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"real") || o3tl::equalsIgnoreAsciiCase(sType, u"float"))
return css::sdbc::DataType::REAL;
- if (sType.equalsIgnoreAsciiCase("double"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"double"))
return css::sdbc::DataType::DOUBLE;
- if (sType.equalsIgnoreAsciiCase("bit"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"bit"))
return css::sdbc::DataType::BIT;
- if (sType.equalsIgnoreAsciiCase("bool") || sType.equalsIgnoreAsciiCase("boolean"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"bool")
+ || o3tl::equalsIgnoreAsciiCase(sType, u"boolean"))
return css::sdbc::DataType::BOOLEAN;
OSL_FAIL("Unknown type name from string, failing back to varchar.");
return css::sdbc::DataType::VARCHAR;
@@ -245,93 +257,92 @@ OUString mysqlTypeToStr(unsigned type, unsigned flags)
switch (type)
{
case MYSQL_TYPE_BIT:
- return OUString{ "BIT" };
+ return u"BIT"_ustr;
case MYSQL_TYPE_DECIMAL:
case MYSQL_TYPE_NEWDECIMAL:
- return isUnsigned ? (isZerofill ? OUString{ "DECIMAL UNSIGNED ZEROFILL" }
- : OUString{ "DECIMAL UNSIGNED" })
- : OUString{ "DECIMAL" };
+ return isUnsigned
+ ? (isZerofill ? u"DECIMAL UNSIGNED ZEROFILL"_ustr : u"DECIMAL UNSIGNED"_ustr)
+ : u"DECIMAL"_ustr;
case MYSQL_TYPE_TINY:
- return isUnsigned ? (isZerofill ? OUString{ "TINYINT UNSIGNED ZEROFILL" }
- : OUString{ "TINYINT UNSIGNED" })
- : OUString{ "TINYINT" };
+ return isUnsigned
+ ? (isZerofill ? u"TINYINT UNSIGNED ZEROFILL"_ustr : u"TINYINT UNSIGNED"_ustr)
+ : u"TINYINT"_ustr;
case MYSQL_TYPE_SHORT:
- return isUnsigned ? (isZerofill ? OUString{ "SMALLINT UNSIGNED ZEROFILL" }
- : OUString{ "SMALLINT UNSIGNED" })
- : OUString{ "SMALLINT" };
+ return isUnsigned ? (isZerofill ? u"SMALLINT UNSIGNED ZEROFILL"_ustr
+ : u"SMALLINT UNSIGNED"_ustr)
+ : u"SMALLINT"_ustr;
case MYSQL_TYPE_LONG:
- return isUnsigned ? (isZerofill ? OUString{ "INT UNSIGNED ZEROFILL" }
- : OUString{ "INT UNSIGNED" })
- : OUString{ "INT" };
+ return isUnsigned ? (isZerofill ? u"INT UNSIGNED ZEROFILL"_ustr : u"INT UNSIGNED"_ustr)
+ : u"INT"_ustr;
case MYSQL_TYPE_FLOAT:
- return isUnsigned ? (isZerofill ? OUString{ "FLOAT UNSIGNED ZEROFILL" }
- : OUString{ "FLOAT UNSIGNED" })
- : OUString{ "FLOAT" };
+ return isUnsigned
+ ? (isZerofill ? u"FLOAT UNSIGNED ZEROFILL"_ustr : u"FLOAT UNSIGNED"_ustr)
+ : u"FLOAT"_ustr;
case MYSQL_TYPE_DOUBLE:
- return isUnsigned ? (isZerofill ? OUString{ "DOUBLE UNSIGNED ZEROFILL" }
- : OUString{ "DOUBLE UNSIGNED" })
- : OUString{ "DOUBLE" };
+ return isUnsigned
+ ? (isZerofill ? u"DOUBLE UNSIGNED ZEROFILL"_ustr : u"DOUBLE UNSIGNED"_ustr)
+ : u"DOUBLE"_ustr;
case MYSQL_TYPE_NULL:
- return OUString{ "NULL" };
+ return u"NULL"_ustr;
case MYSQL_TYPE_TIMESTAMP:
- return OUString{ "TIMESTAMP" };
+ return u"TIMESTAMP"_ustr;
case MYSQL_TYPE_LONGLONG:
- return isUnsigned ? (isZerofill ? OUString{ "BIGINT UNSIGNED ZEROFILL" }
- : OUString{ "BIGINT UNSIGNED" })
- : OUString{ "BIGINT" };
+ return isUnsigned
+ ? (isZerofill ? u"BIGINT UNSIGNED ZEROFILL"_ustr : u"BIGINT UNSIGNED"_ustr)
+ : u"BIGINT"_ustr;
case MYSQL_TYPE_INT24:
- return isUnsigned ? (isZerofill ? OUString{ "MEDIUMINT UNSIGNED ZEROFILL" }
- : OUString{ "MEDIUMINT UNSIGNED" })
- : OUString{ "MEDIUMINT" };
+ return isUnsigned ? (isZerofill ? u"MEDIUMINT UNSIGNED ZEROFILL"_ustr
+ : u"MEDIUMINT UNSIGNED"_ustr)
+ : u"MEDIUMINT"_ustr;
case MYSQL_TYPE_DATE:
- return OUString{ "DATE" };
+ return u"DATE"_ustr;
case MYSQL_TYPE_TIME:
- return OUString{ "TIME" };
+ return u"TIME"_ustr;
case MYSQL_TYPE_DATETIME:
- return OUString{ "DATETIME" };
+ return u"DATETIME"_ustr;
case MYSQL_TYPE_TINY_BLOB:
{
- return OUString{ "TINYBLOB" };
+ return u"TINYBLOB"_ustr;
}
case MYSQL_TYPE_MEDIUM_BLOB:
{
- return OUString{ "MEDIUMBLOB" };
+ return u"MEDIUMBLOB"_ustr;
}
case MYSQL_TYPE_LONG_BLOB:
{
- return OUString{ "LONGBLOB" };
+ return u"LONGBLOB"_ustr;
}
case MYSQL_TYPE_BLOB:
{
- return OUString{ "BLOB" };
+ return u"BLOB"_ustr;
}
case MYSQL_TYPE_VARCHAR:
case MYSQL_TYPE_VAR_STRING:
if (flags & ENUM_FLAG)
{
- return OUString{ "ENUM" };
+ return u"ENUM"_ustr;
}
if (flags & SET_FLAG)
{
- return OUString{ "SET" };
+ return u"SET"_ustr;
}
- return OUString{ "VARCHAR" };
+ return u"VARCHAR"_ustr;
case MYSQL_TYPE_STRING:
if (flags & ENUM_FLAG)
{
- return OUString{ "ENUM" };
+ return u"ENUM"_ustr;
}
if (flags & SET_FLAG)
{
- return OUString{ "SET" };
+ return u"SET"_ustr;
}
- return OUString{ "CHAR" };
+ return u"CHAR"_ustr;
case MYSQL_TYPE_YEAR:
- return OUString{ "YEAR" };
+ return u"YEAR"_ustr;
case MYSQL_TYPE_GEOMETRY:
- return OUString{ "GEOMETRY" };
+ return u"GEOMETRY"_ustr;
default:
- return OUString{ "UNKNOWN" };
+ return u"UNKNOWN"_ustr;
}
}
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_general.hxx b/connectivity/source/drivers/mysqlc/mysqlc_general.hxx
index 2a78c7628879..16236e1530ed 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_general.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_general.hxx
@@ -108,7 +108,7 @@ sal_Int32 mysqlToOOOType(int eType, int charsetnr) noexcept;
OUString mysqlTypeToStr(unsigned mysql_type, unsigned mysql_flags);
-sal_Int32 mysqlStrToOOOType(const OUString& sType);
+sal_Int32 mysqlStrToOOOType(std::u16string_view sType);
OUString convert(const ::std::string& _string, const rtl_TextEncoding encoding);
}
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_indexes.cxx b/connectivity/source/drivers/mysqlc/mysqlc_indexes.cxx
new file mode 100644
index 000000000000..c496f9c21cde
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_indexes.cxx
@@ -0,0 +1,25 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "mysqlc_indexes.hxx"
+
+connectivity::mysqlc::Indexes::Indexes(Table* pTable, osl::Mutex& rMutex,
+ const std::vector<OUString>& rVector)
+ : OIndexesHelper(pTable, rMutex, rVector)
+{
+}
+
+// XDrop
+void connectivity::mysqlc::Indexes::dropObject(sal_Int32 /*nPosition*/,
+ const OUString& /* sIndexName */)
+{
+ // TODO: implement
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_indexes.hxx b/connectivity/source/drivers/mysqlc/mysqlc_indexes.hxx
new file mode 100644
index 000000000000..4c918d1846fd
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_indexes.hxx
@@ -0,0 +1,34 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include "mysqlc_table.hxx"
+
+#include <connectivity/TIndexes.hxx>
+
+namespace connectivity::mysqlc
+{
+class Indexes : public ::connectivity::OIndexesHelper
+{
+private:
+ // TODO: useful?
+ // Table* m_pTable;
+
+protected:
+ // XDrop
+ void dropObject(sal_Int32 nPosition, const OUString& sIndexName);
+
+public:
+ Indexes(Table* pTable, ::osl::Mutex& rMutex, const std::vector<OUString>& rVector);
+};
+
+} // namespace connectivity::mysqlc
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_keys.cxx b/connectivity/source/drivers/mysqlc/mysqlc_keys.cxx
new file mode 100644
index 000000000000..7706844f238c
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_keys.cxx
@@ -0,0 +1,19 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "mysqlc_keys.hxx"
+#include "mysqlc_table.hxx"
+
+connectivity::mysqlc::Keys::Keys(Table* pTable, osl::Mutex& rMutex,
+ const ::std::vector<OUString>& rNames)
+ : OKeysHelper(pTable, rMutex, rNames)
+{
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_keys.hxx b/connectivity/source/drivers/mysqlc/mysqlc_keys.hxx
new file mode 100644
index 000000000000..9d0a9ef1cc43
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_keys.hxx
@@ -0,0 +1,25 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include <connectivity/TKeys.hxx>
+
+namespace connectivity::mysqlc
+{
+class Table;
+
+class Keys : public ::connectivity::OKeysHelper
+{
+public:
+ Keys(Table* pTable, ::osl::Mutex& rMutex, const ::std::vector<OUString>& rNames);
+};
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.cxx b/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.cxx
index 8360700434fc..6fd5d67823d5 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.cxx
@@ -31,10 +31,10 @@
#include <cppuhelper/typeprovider.hxx>
#include <sal/log.hxx>
-using namespace rtl;
-
#include <cstdlib>
+#include <typeindex>
+using namespace rtl;
using namespace connectivity::mysqlc;
using namespace connectivity;
using namespace cppu;
@@ -46,11 +46,8 @@ using namespace com::sun::star::sdbcx;
using namespace com::sun::star::container;
using namespace com::sun::star::io;
using namespace com::sun::star::util;
-using namespace ::comphelper;
using ::osl::MutexGuard;
-#include <typeindex>
-
namespace
{
std::type_index getTypeFromMysqlType(enum_field_types type)
@@ -107,12 +104,24 @@ bool OPreparedResultSet::fetchResult()
}
for (sal_Int32 i = 0; i < m_nColumnCount; ++i)
{
+ bool bIsBlobType = false;
+ switch (m_aFields[i].type)
+ {
+ case MYSQL_TYPE_BLOB:
+ case MYSQL_TYPE_TINY_BLOB:
+ case MYSQL_TYPE_MEDIUM_BLOB:
+ case MYSQL_TYPE_LONG_BLOB:
+ bIsBlobType = true;
+ break;
+ default:
+ bIsBlobType = false;
+ }
m_aMetaData[i].is_null = false;
m_aMetaData[i].length = 0l;
m_aMetaData[i].error = false;
m_aData[i].is_null = &m_aMetaData[i].is_null;
- m_aData[i].buffer_length = m_aFields[i].type == MYSQL_TYPE_BLOB ? 0 : m_aFields[i].length;
+ m_aData[i].buffer_length = bIsBlobType ? 0 : m_aFields[i].length;
m_aData[i].length = &m_aMetaData[i].length;
m_aData[i].error = &m_aMetaData[i].error;
m_aData[i].buffer = nullptr;
@@ -154,12 +163,12 @@ bool OPreparedResultSet::fetchResult()
OUString SAL_CALL OPreparedResultSet::getImplementationName()
{
- return "com.sun.star.sdbcx.mysqlc.ResultSet";
+ return u"com.sun.star.sdbcx.mysqlc.ResultSet"_ustr;
}
uno::Sequence<OUString> SAL_CALL OPreparedResultSet::getSupportedServiceNames()
{
- return { "com.sun.star.sdbc.ResultSet", "com.sun.star.sdbcx.ResultSet" };
+ return { u"com.sun.star.sdbc.ResultSet"_ustr, u"com.sun.star.sdbcx.ResultSet"_ustr };
}
sal_Bool SAL_CALL OPreparedResultSet::supportsService(const OUString& _rServiceName)
@@ -171,7 +180,7 @@ OPreparedResultSet::OPreparedResultSet(OConnection& rConn, OPreparedStatement* p
: OPreparedResultSet_BASE(m_aMutex)
, OPropertySetHelper(OPreparedResultSet_BASE::rBHelper)
, m_rConnection(rConn)
- , m_aStatement(static_cast<OWeakObject*>(pStmt))
+ , m_xStatement(pStmt)
, m_pStmt(pMyStmt)
, m_encoding(rConn.getConnectionEncoding())
, m_nColumnCount(mysql_stmt_field_count(pMyStmt))
@@ -189,7 +198,7 @@ void OPreparedResultSet::disposing()
MutexGuard aGuard(m_aMutex);
- m_aStatement = nullptr;
+ m_xStatement.clear();
m_xMetaData = nullptr;
}
@@ -224,8 +233,8 @@ sal_Int32 SAL_CALL OPreparedResultSet::findColumn(const OUString& columnName)
return i + 1; // sdbc indexes from 1
}
- throw SQLException("The column name '" + columnName + "' is not valid.", *this, "42S22", 0,
- Any());
+ throw SQLException("The column name '" + columnName + "' is not valid.", *this, u"42S22"_ustr,
+ 0, Any());
}
template <typename T> T OPreparedResultSet::safelyRetrieveValue(sal_Int32 nColumnIndex)
@@ -249,7 +258,7 @@ template <typename T> T OPreparedResultSet::retrieveValue(sal_Int32 nColumnIndex
return *static_cast<T*>(m_aData[nColumnIndex - 1].buffer);
else
{
- auto const& row = getRowSetValue(nColumnIndex);
+ auto const row = getRowSetValue(nColumnIndex);
if constexpr (std::is_same_v<sal_Int64, T>)
return row.getLong();
else if constexpr (std::is_same_v<sal_Int32, T>)
@@ -322,8 +331,21 @@ template <> OUString OPreparedResultSet::retrieveValue(sal_Int32 column)
{
// redirect call to the appropriate method if needed
// BLOB can be simply read out as string
+ bool bIsBlobType = false;
+ switch (m_aFields[column - 1].type)
+ {
+ case MYSQL_TYPE_BLOB:
+ case MYSQL_TYPE_TINY_BLOB:
+ case MYSQL_TYPE_MEDIUM_BLOB:
+ case MYSQL_TYPE_LONG_BLOB:
+ bIsBlobType = true;
+ break;
+ default:
+ bIsBlobType = false;
+ }
+
if (getTypeFromMysqlType(m_aFields[column - 1].type) != std::type_index(typeid(OUString))
- && m_aFields[column - 1].type != MYSQL_TYPE_BLOB)
+ && !bIsBlobType)
return getRowSetValue(column).getString();
const char* sStr = static_cast<const char*>(m_aData[column - 1].buffer);
@@ -363,13 +385,16 @@ ORowSetValue OPreparedResultSet::getRowSetValue(sal_Int32 nColumnIndex)
case MYSQL_TYPE_NEWDECIMAL:
return getString(nColumnIndex);
case MYSQL_TYPE_BLOB:
- throw SQLException("Column with type BLOB cannot be converted", *this, "22000", 1,
- Any());
+ case MYSQL_TYPE_TINY_BLOB:
+ case MYSQL_TYPE_MEDIUM_BLOB:
+ case MYSQL_TYPE_LONG_BLOB:
+ throw SQLException(u"Column with type BLOB cannot be converted"_ustr, *this,
+ u"22000"_ustr, 1, Any());
default:
SAL_WARN("connectivity.mysqlc", "OPreparedResultSet::getRowSetValue: unknown type: "
<< m_aFields[nColumnIndex - 1].type);
- throw SQLException("Unknown column type when fetching result", *this, "22000", 1,
- Any());
+ throw SQLException(u"Unknown column type when fetching result"_ustr, *this,
+ u"22000"_ustr, 1, Any());
}
}
@@ -664,7 +689,7 @@ uno::Reference<uno::XInterface> SAL_CALL OPreparedResultSet::getStatement()
MutexGuard aGuard(m_aMutex);
checkDisposed(OPreparedResultSet_BASE::rBHelper.bDisposed);
- return m_aStatement.get();
+ return cppu::getXWeak(m_xStatement.get().get());
}
sal_Bool SAL_CALL OPreparedResultSet::rowDeleted()
@@ -1002,21 +1027,17 @@ uno::Sequence<sal_Int32>
IPropertyArrayHelper* OPreparedResultSet::createArrayHelper() const
{
- uno::Sequence<Property> aProps(5);
- Property* pProperties = aProps.getArray();
- sal_Int32 nPos = 0;
- pProperties[nPos++] = Property("FetchDirection", PROPERTY_ID_FETCHDIRECTION,
- cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++]
- = Property("FetchSize", PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = Property("IsBookmarkable", PROPERTY_ID_ISBOOKMARKABLE,
- cppu::UnoType<bool>::get(), PropertyAttribute::READONLY);
- pProperties[nPos++] = Property("ResultSetConcurrency", PROPERTY_ID_RESULTSETCONCURRENCY,
- cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY);
- pProperties[nPos++] = Property("ResultSetType", PROPERTY_ID_RESULTSETTYPE,
- cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY);
-
- return new OPropertyArrayHelper(aProps);
+ return new OPropertyArrayHelper{
+ { { u"FetchDirection"_ustr, PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(),
+ 0 },
+ { u"FetchSize"_ustr, PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0 },
+ { u"IsBookmarkable"_ustr, PROPERTY_ID_ISBOOKMARKABLE, cppu::UnoType<bool>::get(),
+ PropertyAttribute::READONLY },
+ { u"ResultSetConcurrency"_ustr, PROPERTY_ID_RESULTSETCONCURRENCY,
+ cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY },
+ { u"ResultSetType"_ustr, PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(),
+ PropertyAttribute::READONLY } }
+ };
}
IPropertyArrayHelper& OPreparedResultSet::getInfoHelper() { return *getArrayHelper(); }
@@ -1095,11 +1116,11 @@ css::uno::Reference<css::beans::XPropertySetInfo> SAL_CALL OPreparedResultSet::g
void OPreparedResultSet::checkColumnIndex(sal_Int32 index)
{
if (!m_aData)
- throw SQLException("Cursor out of range", *this, "HY109", 1, Any());
+ throw SQLException(u"Cursor out of range"_ustr, *this, u"HY109"_ustr, 1, Any());
if (index < 1 || index > static_cast<int>(m_nColumnCount))
{
/* static object for efficiency or thread safety is a problem ? */
- throw SQLException("index out of range", *this, "42S22", 1, Any());
+ throw SQLException(u"index out of range"_ustr, *this, u"42S22"_ustr, 1, Any());
}
}
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx b/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx
index 018595b770ba..3f79ddcd1e73 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx
@@ -41,9 +41,7 @@
namespace connectivity::mysqlc
{
-using ::com::sun::star::sdbc::SQLException;
using ::com::sun::star::uno::Any;
-using ::com::sun::star::uno::RuntimeException;
typedef ::cppu::WeakComponentImplHelper12<
css::sdbc::XResultSet, css::sdbc::XRow, css::sdbc::XResultSetMetaDataSupplier,
@@ -52,14 +50,14 @@ typedef ::cppu::WeakComponentImplHelper12<
css::sdbc::XColumnLocate, css::lang::XServiceInfo>
OPreparedResultSet_BASE;
-class OPreparedResultSet final : public OBase_Mutex,
+class OPreparedResultSet final : public cppu::BaseMutex,
public OPreparedResultSet_BASE,
public ::cppu::OPropertySetHelper,
public OPropertyArrayUsageHelper<OPreparedResultSet>
{
OConnection& m_rConnection;
- css::uno::WeakReferenceHelper m_aStatement;
- css::uno::Reference<css::sdbc::XResultSetMetaData> m_xMetaData;
+ unotools::WeakReference<OPreparedStatement> m_xStatement;
+ rtl::Reference<OResultSetMetaData> m_xMetaData;
// non-owning pointers
MYSQL_RES* m_pResult;
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.cxx b/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.cxx
index a50b14bbb3b4..0c54630f25f2 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.cxx
@@ -23,6 +23,7 @@
#include "mysqlc_propertyids.hxx"
#include "mysqlc_resultsetmetadata.hxx"
+#include <o3tl/safeint.hxx>
#include <sal/log.hxx>
#include <com/sun/star/sdbc/DataType.hpp>
@@ -31,8 +32,6 @@
using namespace connectivity::mysqlc;
using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
using namespace com::sun::star::container;
using namespace com::sun::star::io;
@@ -41,12 +40,12 @@ using ::osl::MutexGuard;
OUString OPreparedStatement::getImplementationName()
{
- return "com.sun.star.sdbcx.mysqlc.PreparedStatement";
+ return u"com.sun.star.sdbcx.mysqlc.PreparedStatement"_ustr;
}
css::uno::Sequence<OUString> OPreparedStatement::getSupportedServiceNames()
{
- return { "com.sun.star.sdbc.PreparedStatement" };
+ return { u"com.sun.star.sdbc.PreparedStatement"_ustr };
}
sal_Bool OPreparedStatement::supportsService(OUString const& ServiceName)
@@ -432,7 +431,7 @@ void SAL_CALL OPreparedStatement::setObjectWithInfo(sal_Int32 parameterIndex, co
{
OString sAscii
= OUStringToOString(sValue, getOwnConnection()->getConnectionEncoding());
- std::stringstream sStream{ sAscii.getStr() };
+ std::stringstream sStream{ std::string(sAscii) };
sStream >> nValue;
m_binds[nIndex].buffer_type = MYSQL_TYPE_DOUBLE;
mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &nValue, MYSQL_TYPE_DOUBLE,
@@ -492,9 +491,10 @@ void SAL_CALL OPreparedStatement::setBytes(sal_Int32 parameter, const Sequence<s
checkParameterIndex(parameter);
const sal_Int32 nIndex = parameter - 1;
- m_binds[nIndex].buffer_type = MYSQL_TYPE_BLOB; // FIXME
- mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &x, MYSQL_TYPE_BLOB);
+ m_binds[nIndex].buffer_type = MYSQL_TYPE_BLOB;
+ mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &x[0], MYSQL_TYPE_BLOB, x.getLength());
m_bindMetas[nIndex].is_null = false;
+ m_bindMetas[nIndex].length = x.getLength();
}
void SAL_CALL OPreparedStatement::setCharacterStream(sal_Int32 parameter,
@@ -569,9 +569,9 @@ void OPreparedStatement::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, con
void OPreparedStatement::checkParameterIndex(sal_Int32 column)
{
- if (column < 1 || column > static_cast<sal_Int32>(m_paramCount))
+ if (column < 1 || o3tl::make_unsigned(column) > m_paramCount)
{
- throw SQLException("Parameter index out of range", *this, OUString(), 1, Any());
+ throw SQLException(u"Parameter index out of range"_ustr, *this, OUString(), 1, Any());
}
}
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx b/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx
index d280bd935ae3..d61f616372b0 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx
@@ -30,11 +30,9 @@
namespace connectivity::mysqlc
{
-using ::com::sun::star::sdbc::SQLException;
using ::com::sun::star::sdbc::XResultSetMetaData;
using ::com::sun::star::uno::Any;
using ::com::sun::star::uno::Reference;
-using ::com::sun::star::uno::RuntimeException;
using ::com::sun::star::uno::Type;
#if defined MYSQL_VERSION_ID && (MYSQL_VERSION_ID >= 80000) && !defined MARIADB_BASE_VERSION
@@ -43,6 +41,8 @@ using my_bool = bool;
using my_bool = char;
#endif
+class OResultSetMetaData;
+
struct BindMetaData
{
my_bool is_null = false;
@@ -57,7 +57,7 @@ typedef ::cppu::ImplHelper4<css::sdbc::XPreparedStatement, css::sdbc::XParameter
class OPreparedStatement final : public OCommonStatement, public OPreparedStatement_BASE
{
unsigned int m_paramCount = 0; // number of placeholders
- Reference<XResultSetMetaData> m_xMetaData;
+ rtl::Reference<OResultSetMetaData> m_xMetaData;
MYSQL_STMT* m_pStmt;
std::vector<MYSQL_BIND> m_binds;
std::vector<BindMetaData> m_bindMetas;
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx b/connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx
index 7a11020ea8e0..ac07b862dc9f 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx
@@ -30,6 +30,8 @@
#include <cppuhelper/supportsservice.hxx>
#include <cppuhelper/typeprovider.hxx>
#include <comphelper/seqstream.hxx>
+#include <o3tl/safeint.hxx>
+#include <o3tl/string_view.hxx>
using namespace rtl;
@@ -51,14 +53,13 @@ namespace
{
// copied from string misc, it should be replaced when library is not an
// extension anymore
-std::vector<OString> lcl_split(const OString& rStr, char cSeparator)
+std::vector<OString> lcl_split(std::string_view rStr, char cSeparator)
{
std::vector<OString> vec;
sal_Int32 idx = 0;
do
{
- OString kw = rStr.getToken(0, cSeparator, idx);
- kw = kw.trim();
+ OString kw(o3tl::trim(o3tl::getToken(rStr, 0, cSeparator, idx)));
if (!kw.isEmpty())
{
vec.push_back(kw);
@@ -72,7 +73,7 @@ void OResultSet::checkRowIndex()
{
if (m_nRowPosition < 0 || m_nRowPosition >= m_nRowCount)
{
- throw SQLException("Cursor position out of range", *this, OUString(), 1, Any());
+ throw SQLException(u"Cursor position out of range"_ustr, *this, OUString(), 1, Any());
}
}
@@ -89,12 +90,12 @@ bool OResultSet::checkNull(sal_Int32 column)
OUString SAL_CALL OResultSet::getImplementationName()
{
- return "com.sun.star.sdbcx.mysqlc.ResultSet";
+ return u"com.sun.star.sdbcx.mysqlc.ResultSet"_ustr;
}
uno::Sequence<OUString> SAL_CALL OResultSet::getSupportedServiceNames()
{
- return { "com.sun.star.sdbc.ResultSet", "com.sun.star.sdbcx.ResultSet" };
+ return { u"com.sun.star.sdbc.ResultSet"_ustr, u"com.sun.star.sdbcx.ResultSet"_ustr };
}
sal_Bool SAL_CALL OResultSet::supportsService(const OUString& _rServiceName)
@@ -107,7 +108,7 @@ OResultSet::OResultSet(OConnection& rConn, OCommonStatement* pStmt, MYSQL_RES* p
: OResultSet_BASE(m_aMutex)
, OPropertySetHelper(OResultSet_BASE::rBHelper)
, m_pMysql(rConn.getMysqlConnection())
- , m_aStatement(static_cast<OWeakObject*>(pStmt))
+ , m_aStatement(pStmt)
, m_pResult(pResult)
, m_encoding(_encoding)
{
@@ -138,8 +139,8 @@ void OResultSet::ensureFieldInfoFetched()
MYSQL_FIELD* pFields = mysql_fetch_fields(m_pResult);
m_aFields.reserve(nFieldCount);
for (unsigned i = 0; i < nFieldCount; ++i)
- m_aFields.push_back(OUString{
- pFields[i].name, static_cast<sal_Int32>(strlen(pFields[i].name)), m_encoding });
+ m_aFields.emplace_back(pFields[i].name, static_cast<sal_Int32>(strlen(pFields[i].name)),
+ m_encoding);
}
void OResultSet::fetchResult()
@@ -155,11 +156,11 @@ void OResultSet::fetchResult()
{
MYSQL_ROW data = mysql_fetch_row(m_pResult);
unsigned long* lengths = mysql_fetch_lengths(m_pResult);
- m_aRows.push_back(DataFields{});
+ m_aRows.emplace_back();
// MYSQL_ROW is char**, array of strings
for (std::size_t col = 0; col < m_aFields.size(); ++col)
{
- m_aRows.back().push_back(OString{ data[col], static_cast<sal_Int32>(lengths[col]) });
+ m_aRows.back().emplace_back(data[col], static_cast<sal_Int32>(lengths[col]));
}
}
unsigned errorNum = mysql_errno(m_pMysql);
@@ -181,7 +182,7 @@ void OResultSet::disposing()
mysql_free_result(m_pResult);
m_pResult = nullptr;
}
- m_aStatement = nullptr;
+ m_aStatement.clear();
m_xMetaData = nullptr;
}
@@ -216,8 +217,8 @@ sal_Int32 SAL_CALL OResultSet::findColumn(const OUString& columnName)
return static_cast<sal_Int32>(i) + 1; // sdbc indexes from 1
}
- throw SQLException("The column name '" + columnName + "' is not valid.", *this, "42S22", 0,
- Any());
+ throw SQLException("The column name '" + columnName + "' is not valid.", *this, u"42S22"_ustr,
+ 0, Any());
}
uno::Reference<XInputStream> SAL_CALL OResultSet::getBinaryStream(sal_Int32 column)
@@ -292,24 +293,23 @@ Date SAL_CALL OResultSet::getDate(sal_Int32 column)
if (checkNull(column))
return d;
- OString dateStr = m_aRows[m_nRowPosition][column - 1];
+ const OString& dateStr = m_aRows[m_nRowPosition][column - 1];
- OString dateString(dateStr);
- OString token;
+ std::string_view dateString(dateStr);
sal_Int32 nIndex = 0, i = 0;
do
{
- token = dateString.getToken(0, '-', nIndex);
+ std::string_view token = o3tl::getToken(dateString, 0, '-', nIndex);
switch (i)
{
case 0:
- d.Year = static_cast<sal_uInt16>(token.toUInt32());
+ d.Year = static_cast<sal_uInt16>(o3tl::toUInt32(token));
break;
case 1:
- d.Month = static_cast<sal_uInt16>(token.toUInt32());
+ d.Month = static_cast<sal_uInt16>(o3tl::toUInt32(token));
break;
case 2:
- d.Day = static_cast<sal_uInt16>(token.toUInt32());
+ d.Day = static_cast<sal_uInt16>(o3tl::toUInt32(token));
break;
default:;
}
@@ -467,25 +467,28 @@ Time SAL_CALL OResultSet::getTime(sal_Int32 column)
if (checkNull(column))
return t;
- OString sVal = m_aRows[m_nRowPosition][column - 1];
- OString timeString{ sVal.getStr(), getDataLength(column) };
- OString token;
+ const OString& sVal = m_aRows[m_nRowPosition][column - 1];
+ std::string_view timeString{ sVal.getStr(), o3tl::make_unsigned(getDataLength(column)) };
sal_Int32 nIndex, i = 0;
- nIndex = timeString.indexOf(' ') + 1;
+ size_t idx = timeString.find(' ');
+ if (idx == std::string_view::npos)
+ nIndex = 0;
+ else
+ nIndex = idx + 1;
do
{
- token = timeString.getToken(0, ':', nIndex);
+ std::string_view token = o3tl::getToken(timeString, 0, ':', nIndex);
switch (i)
{
case 0:
- t.Hours = static_cast<sal_uInt16>(token.toUInt32());
+ t.Hours = static_cast<sal_uInt16>(o3tl::toUInt32(token));
break;
case 1:
- t.Minutes = static_cast<sal_uInt16>(token.toUInt32());
+ t.Minutes = static_cast<sal_uInt16>(o3tl::toUInt32(token));
break;
case 2:
- t.Seconds = static_cast<sal_uInt16>(token.toUInt32());
+ t.Seconds = static_cast<sal_uInt16>(o3tl::toUInt32(token));
break;
}
i++;
@@ -506,14 +509,13 @@ DateTime SAL_CALL OResultSet::getTimestamp(sal_Int32 column)
OString sVal = m_aRows[m_nRowPosition][column - 1];
// YY-MM-DD HH:MM:SS
- std::vector<OString> dateAndTime
- = lcl_split(OString{ sVal.getStr(), getDataLength(column) }, ' ');
+ std::vector<OString> dateAndTime = lcl_split(sVal.subView(0, getDataLength(column)), ' ');
auto dateParts = lcl_split(dateAndTime.at(0), '-');
auto timeParts = lcl_split(dateAndTime.at(1), ':');
if (dateParts.size() < 2 || timeParts.size() < 2)
- throw SQLException("Timestamp has a wrong format", *this, OUString(), 1, Any());
+ throw SQLException(u"Timestamp has a wrong format"_ustr, *this, OUString(), 1, Any());
DateTime dt;
@@ -670,7 +672,7 @@ uno::Reference<uno::XInterface> SAL_CALL OResultSet::getStatement()
MutexGuard aGuard(m_aMutex);
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- return m_aStatement.get();
+ return cppu::getXWeak(m_aStatement.get().get());
}
sal_Bool SAL_CALL OResultSet::rowDeleted()
@@ -1007,21 +1009,17 @@ uno::Sequence<sal_Int32> SAL_CALL OResultSet::deleteRows(const uno::Sequence<Any
IPropertyArrayHelper* OResultSet::createArrayHelper() const
{
- uno::Sequence<Property> aProps(5);
- Property* pProperties = aProps.getArray();
- sal_Int32 nPos = 0;
- pProperties[nPos++] = Property("FetchDirection", PROPERTY_ID_FETCHDIRECTION,
- cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++]
- = Property("FetchSize", PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = Property("IsBookmarkable", PROPERTY_ID_ISBOOKMARKABLE,
- cppu::UnoType<bool>::get(), PropertyAttribute::READONLY);
- pProperties[nPos++] = Property("ResultSetConcurrency", PROPERTY_ID_RESULTSETCONCURRENCY,
- cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY);
- pProperties[nPos++] = Property("ResultSetType", PROPERTY_ID_RESULTSETTYPE,
- cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY);
-
- return new OPropertyArrayHelper(aProps);
+ return new OPropertyArrayHelper{
+ { { u"FetchDirection"_ustr, PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(),
+ 0 },
+ { u"FetchSize"_ustr, PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0 },
+ { u"IsBookmarkable"_ustr, PROPERTY_ID_ISBOOKMARKABLE, cppu::UnoType<bool>::get(),
+ PropertyAttribute::READONLY },
+ { u"ResultSetConcurrency"_ustr, PROPERTY_ID_RESULTSETCONCURRENCY,
+ cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY },
+ { u"ResultSetType"_ustr, PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(),
+ PropertyAttribute::READONLY } }
+ };
}
IPropertyArrayHelper& OResultSet::getInfoHelper() { return *getArrayHelper(); }
@@ -1097,10 +1095,10 @@ css::uno::Reference<css::beans::XPropertySetInfo> SAL_CALL OResultSet::getProper
void OResultSet::checkColumnIndex(sal_Int32 index)
{
- if (index < 1 || index > static_cast<int>(m_aFields.size()))
+ if (index < 1 || o3tl::make_unsigned(index) > m_aFields.size())
{
/* static object for efficiency or thread safety is a problem ? */
- throw SQLException("index out of range", *this, OUString(), 1, Any());
+ throw SQLException(u"index out of range"_ustr, *this, OUString(), 1, Any());
}
}
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx b/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx
index 461e81286cb6..baa65be07cc0 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx
@@ -37,12 +37,12 @@
#include <com/sun/star/util/XCancellable.hpp>
#include <cppuhelper/compbase12.hxx>
+#include <unotools/weakref.hxx>
namespace connectivity::mysqlc
{
-using ::com::sun::star::sdbc::SQLException;
using ::com::sun::star::uno::Any;
-using ::com::sun::star::uno::RuntimeException;
+class OResultSetMetaData;
/*
** OResultSet
@@ -54,7 +54,7 @@ typedef ::cppu::WeakComponentImplHelper12<
css::sdbc::XColumnLocate, css::lang::XServiceInfo>
OResultSet_BASE;
-class OResultSet final : public OBase_Mutex,
+class OResultSet final : public cppu::BaseMutex,
public OResultSet_BASE,
public ::cppu::OPropertySetHelper,
public OPropertyArrayUsageHelper<OResultSet>
@@ -63,8 +63,8 @@ class OResultSet final : public OBase_Mutex,
std::vector<DataFields> m_aRows;
std::vector<OUString> m_aFields;
MYSQL* m_pMysql = nullptr;
- css::uno::WeakReferenceHelper m_aStatement;
- css::uno::Reference<css::sdbc::XResultSetMetaData> m_xMetaData;
+ unotools::WeakReference<OCommonStatement> m_aStatement;
+ rtl::Reference<OResultSetMetaData> m_xMetaData;
MYSQL_RES* m_pResult;
rtl_TextEncoding m_encoding;
bool m_bWasNull = false; // did the last getXXX result null?
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.cxx b/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.cxx
index 3d0ac9ce8411..21dd0fafc686 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.cxx
@@ -21,11 +21,11 @@
#include "mysqlc_general.hxx"
#include <com/sun/star/sdbc/XRow.hpp>
-#include <rtl/ustrbuf.hxx>
+#include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
+#include <o3tl/safeint.hxx>
using namespace connectivity::mysqlc;
using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
using namespace com::sun::star::sdbc;
OResultSetMetaData::OResultSetMetaData(OConnection& rConn, MYSQL_RES* pResult)
@@ -199,7 +199,7 @@ sal_Bool SAL_CALL OResultSetMetaData::isWritable(sal_Int32 column)
void OResultSetMetaData::checkColumnIndex(sal_Int32 columnIndex)
{
auto nColCount = m_fields.size();
- if (columnIndex < 1 || columnIndex > static_cast<sal_Int32>(nColCount))
+ if (columnIndex < 1 || o3tl::make_unsigned(columnIndex) > nColCount)
{
OUString str = "Column index out of range (expected 1 to "
+ OUString::number(sal_Int32(nColCount)) + ", got "
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.hxx b/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.hxx
index c2e5db5f3375..aa84ac05586c 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.hxx
@@ -30,10 +30,6 @@
namespace connectivity::mysqlc
{
-using ::com::sun::star::sdbc::SQLException;
-using ::com::sun::star::uno::RuntimeException;
-using ::com::sun::star::uno::RuntimeException;
-
struct MySqlFieldInfo
{
OUString columnName;
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_statement.cxx b/connectivity/source/drivers/mysqlc/mysqlc_statement.cxx
index 6e14d9ec60bc..2d8deaebdec1 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_statement.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_statement.cxx
@@ -34,9 +34,7 @@ using namespace com::sun::star::uno;
using namespace com::sun::star::lang;
using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
-using namespace com::sun::star::sdbcx;
using namespace com::sun::star::container;
-using namespace com::sun::star::io;
using namespace com::sun::star::util;
using ::osl::MutexGuard;
@@ -53,8 +51,7 @@ void OCommonStatement::closeResultSet()
{
if (m_xResultSet.is())
{
- css::uno::Reference<css::sdbc::XCloseable> xClose(m_xResultSet, UNO_QUERY_THROW);
- xClose->close();
+ m_xResultSet->close();
m_xResultSet.clear();
}
}
@@ -149,11 +146,11 @@ Reference<XResultSet> SAL_CALL OStatement::executeQuery(const OUString& sql)
assert(isRS == m_xResultSet.is());
if (!isRS)
mysqlc_sdbc_driver::throwSQLExceptionWithMsg(
- "executeQuery called on SQL command that does not return a ResultSet", "02000", 0,
+ u"executeQuery called on SQL command that does not return a ResultSet"_ustr, "02000", 0,
*this);
if (!m_xResultSet.is())
mysqlc_sdbc_driver::throwSQLExceptionWithMsg(
- "internal MySQL-SDBC error: executeQuery: no ResultSet after execute() returned true.",
+ u"internal MySQL-SDBC error: executeQuery: no ResultSet after execute() returned true."_ustr,
"02000", 0, *this);
return m_xResultSet;
@@ -238,8 +235,8 @@ bool OStatement::getResult()
else
{
mysqlc_sdbc_driver::throwSQLExceptionWithMsg(
- "mysql_store_result indicated success and SQL command was supposed to return a "
- "ResultSet, but did not.",
+ u"mysql_store_result indicated success and SQL command was supposed to return a "
+ "ResultSet, but did not."_ustr,
"02000", 0, *this);
}
//unreachable
@@ -282,7 +279,7 @@ Any SAL_CALL OCommonStatement::getWarnings()
MutexGuard aGuard(m_aMutex);
checkDisposed(rBHelper.bDisposed);
- return makeAny(m_aLastWarning);
+ return Any(m_aLastWarning);
}
void SAL_CALL OCommonStatement::clearWarnings()
@@ -297,31 +294,20 @@ void SAL_CALL OCommonStatement::clearWarnings()
{
// this properties are define by the service statement
// they must in alphabetic order
- Sequence<Property> aProps(10);
- Property* pProperties = aProps.getArray();
- sal_Int32 nPos = 0;
- pProperties[nPos++]
- = Property("CursorName", PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0);
- pProperties[nPos++]
- = Property("EscapeProcessing", PROPERTY_ID_ESCAPEPROCESSING, cppu::UnoType<bool>::get(), 0);
- pProperties[nPos++] = Property("FetchDirection", PROPERTY_ID_FETCHDIRECTION,
- cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++]
- = Property("FetchSize", PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++]
- = Property("MaxFieldSize", PROPERTY_ID_MAXFIELDSIZE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++]
- = Property("MaxRows", PROPERTY_ID_MAXROWS, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++]
- = Property("QueryTimeOut", PROPERTY_ID_QUERYTIMEOUT, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = Property("ResultSetConcurrency", PROPERTY_ID_RESULTSETCONCURRENCY,
- cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++]
- = Property("ResultSetType", PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++]
- = Property("UseBookmarks", PROPERTY_ID_USEBOOKMARKS, cppu::UnoType<bool>::get(), 0);
-
- return new ::cppu::OPropertyArrayHelper(aProps);
+ return new ::cppu::OPropertyArrayHelper{
+ { { u"CursorName"_ustr, PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0 },
+ { u"EscapeProcessing"_ustr, PROPERTY_ID_ESCAPEPROCESSING, cppu::UnoType<bool>::get(), 0 },
+ { u"FetchDirection"_ustr, PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(),
+ 0 },
+ { u"FetchSize"_ustr, PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0 },
+ { u"MaxFieldSize"_ustr, PROPERTY_ID_MAXFIELDSIZE, cppu::UnoType<sal_Int32>::get(), 0 },
+ { u"MaxRows"_ustr, PROPERTY_ID_MAXROWS, cppu::UnoType<sal_Int32>::get(), 0 },
+ { u"QueryTimeOut"_ustr, PROPERTY_ID_QUERYTIMEOUT, cppu::UnoType<sal_Int32>::get(), 0 },
+ { u"ResultSetConcurrency"_ustr, PROPERTY_ID_RESULTSETCONCURRENCY,
+ cppu::UnoType<sal_Int32>::get(), 0 },
+ { u"ResultSetType"_ustr, PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0 },
+ { u"UseBookmarks"_ustr, PROPERTY_ID_USEBOOKMARKS, cppu::UnoType<bool>::get(), 0 } }
+ };
}
::cppu::IPropertyArrayHelper& OCommonStatement::getInfoHelper() { return *getArrayHelper(); }
@@ -374,11 +360,11 @@ void OCommonStatement::getFastPropertyValue(Any& _rValue, sal_Int32 nHandle) con
}
}
-OUString OStatement::getImplementationName() { return "com.sun.star.sdbcx.OStatement"; }
+OUString OStatement::getImplementationName() { return u"com.sun.star.sdbcx.OStatement"_ustr; }
css::uno::Sequence<OUString> OStatement::getSupportedServiceNames()
{
- return { "com.sun.star.sdbc.Statement" };
+ return { u"com.sun.star.sdbc.Statement"_ustr };
}
sal_Bool OStatement::supportsService(OUString const& ServiceName)
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx b/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx
index 14750309ad87..7e260fe8b144 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx
@@ -36,11 +36,10 @@
namespace connectivity::mysqlc
{
-using ::com::sun::star::sdbc::SQLException;
using ::com::sun::star::sdbc::SQLWarning;
using ::com::sun::star::uno::Any;
-using ::com::sun::star::uno::RuntimeException;
using ::com::sun::star::uno::Type;
+class OResultSet;
typedef ::cppu::WeakComponentImplHelper3<css::sdbc::XWarningsSupplier, css::util::XCancellable,
css::sdbc::XCloseable>
@@ -49,7 +48,7 @@ typedef ::cppu::WeakComponentImplHelper3<css::sdbc::XWarningsSupplier, css::util
//************ Class: OCommonStatement
// is a base class for the normal statement and for the prepared statement
-class OCommonStatement : public OBase_Mutex,
+class OCommonStatement : public cppu::BaseMutex,
public OCommonStatement_IBase,
public ::cppu::OPropertySetHelper,
public OPropertyArrayUsageHelper<OCommonStatement>
@@ -61,7 +60,7 @@ private:
protected:
rtl::Reference<OConnection> m_xConnection; // The owning Connection object
- css::uno::Reference<css::sdbc::XResultSet> m_xResultSet;
+ rtl::Reference<OResultSet> m_xResultSet;
// number of rows affected by an UPDATE, DELETE or INSERT statement.
sal_Int32 m_nAffectedRows = 0;
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx b/connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx
index d0847aedc5d6..87978b03bd2f 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx
@@ -23,15 +23,6 @@
#include <osl/diagnose.h>
#include <osl/mutex.hxx>
-namespace cppu
-{
-class IPropertyArrayHelper;
-}
-namespace com::sun::star::lang
-{
-class XComponent;
-}
-
namespace connectivity::mysqlc
{
/// @throws css::lang::DisposedException
@@ -106,12 +97,6 @@ template <class TYPE>::cppu::IPropertyArrayHelper* OPropertyArrayUsageHelper<TYP
return s_pProps;
}
-class OBase_Mutex
-{
-public:
- ::osl::Mutex m_aMutex;
-};
-
namespace internal
{
template <class T> void implCopySequence(const T* _pSource, T*& _pDest, sal_Int32 _nSourceLen)
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_table.cxx b/connectivity/source/drivers/mysqlc/mysqlc_table.cxx
new file mode 100644
index 000000000000..3c621f9d375d
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_table.cxx
@@ -0,0 +1,168 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "mysqlc_columns.hxx"
+#include "mysqlc_indexes.hxx"
+#include "mysqlc_keys.hxx"
+#include "mysqlc_table.hxx"
+
+#include <TConnection.hxx>
+
+#include <comphelper/types.hxx>
+#include <connectivity/dbtools.hxx>
+
+#include <com/sun/star/sdbcx/Privilege.hpp>
+#include <com/sun/star/beans/PropertyAttribute.hpp>
+
+connectivity::mysqlc::Table::Table(
+ Tables* pTables, osl::Mutex& rMutex,
+ const css::uno::Reference<OMetaConnection::XConnection>& rConnection)
+ : OTableHelper(pTables, rConnection, true)
+ , m_rMutex(rMutex)
+ , m_nPrivileges(0)
+{
+ construct();
+}
+
+connectivity::mysqlc::Table::Table(
+ Tables* pTables, osl::Mutex& rMutex,
+ const css::uno::Reference<OMetaConnection::XConnection>& rConnection, const OUString& rCatalog,
+ const OUString& rSchema, const OUString& rName, const OUString& rType,
+ const OUString& rDescription)
+ : OTableHelper(pTables, rConnection, true, rName, rType, rDescription, rSchema, rCatalog)
+ , m_rMutex(rMutex)
+ , m_nPrivileges(0)
+{
+ construct();
+}
+
+void connectivity::mysqlc::Table::construct()
+{
+ OTableHelper::construct();
+ if (isNew())
+ return;
+
+ // TODO: get privileges when in non-embedded mode.
+ m_nPrivileges = css::sdbcx::Privilege::DROP | css::sdbcx::Privilege::REFERENCE
+ | css::sdbcx::Privilege::ALTER | css::sdbcx::Privilege::CREATE
+ | css::sdbcx::Privilege::READ | css::sdbcx::Privilege::DELETE
+ | css::sdbcx::Privilege::UPDATE | css::sdbcx::Privilege::INSERT
+ | css::sdbcx::Privilege::SELECT;
+ registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PRIVILEGES),
+ PROPERTY_ID_PRIVILEGES, css::beans::PropertyAttribute::READONLY,
+ &m_nPrivileges, cppu::UnoType<decltype(m_nPrivileges)>::get());
+}
+//----- OTableHelper ---------------------------------------------------------
+connectivity::sdbcx::OCollection*
+connectivity::mysqlc::Table::createColumns(const ::std::vector<OUString>& rNames)
+{
+ return new Columns(*this, m_rMutex, rNames);
+}
+
+connectivity::sdbcx::OCollection*
+connectivity::mysqlc::Table::createKeys(const ::std::vector<OUString>& rNames)
+{
+ return new Keys(this, m_rMutex, rNames);
+}
+
+connectivity::sdbcx::OCollection*
+connectivity::mysqlc::Table::createIndexes(const ::std::vector<OUString>& rNames)
+{
+ return new Indexes(this, m_rMutex, rNames);
+}
+
+//----- XAlterTable -----------------------------------------------------------
+void SAL_CALL connectivity::mysqlc::Table::alterColumnByName(
+ const OUString& rColName, const css::uno::Reference<XPropertySet>& rDescriptor)
+{
+ osl::MutexGuard aGuard(m_rMutex);
+ checkDisposed(WeakComponentImplHelperBase::rBHelper.bDisposed);
+
+ css::uno::Reference<XPropertySet> xColumn(m_xColumns->getByName(rColName), css::uno::UNO_QUERY);
+
+ // sdbcx::Descriptor
+ const bool bNameChanged
+ = xColumn->getPropertyValue(u"Name"_ustr) != rDescriptor->getPropertyValue(u"Name"_ustr);
+ // sdbcx::ColumnDescriptor
+ const bool bTypeChanged
+ = xColumn->getPropertyValue(u"Type"_ustr) != rDescriptor->getPropertyValue(u"Type"_ustr);
+ const bool bTypeNameChanged
+ = !comphelper::getString(xColumn->getPropertyValue(u"TypeName"_ustr))
+ .equalsIgnoreAsciiCase(
+ comphelper::getString(rDescriptor->getPropertyValue(u"TypeName"_ustr)));
+ const bool bPrecisionChanged = xColumn->getPropertyValue(u"Precision"_ustr)
+ != rDescriptor->getPropertyValue(u"Precision"_ustr);
+ const bool bScaleChanged
+ = xColumn->getPropertyValue(u"Scale"_ustr) != rDescriptor->getPropertyValue(u"Scale"_ustr);
+
+ const bool bIsNullableChanged = xColumn->getPropertyValue(u"IsNullable"_ustr)
+ != rDescriptor->getPropertyValue(u"IsNullable"_ustr);
+
+ const bool bIsAutoIncrementChanged = xColumn->getPropertyValue(u"IsAutoIncrement"_ustr)
+ != rDescriptor->getPropertyValue(u"IsAutoIncrement"_ustr);
+
+ // there's also DefaultValue but not related to database directly, it seems completely internal to LO
+ // so no need to test it
+ // TODO: remainder -- these are all "optional" so have to detect presence and change.
+ if (bTypeChanged || bTypeNameChanged || bPrecisionChanged || bScaleChanged || bIsNullableChanged
+ || bIsAutoIncrementChanged)
+ {
+ // If bPrecisionChanged this will only succeed if we have increased the
+ // precision, otherwise an exception is thrown -- however the base
+ // gui then offers to delete and recreate the column.
+ OUStringBuffer sSql(300);
+ sSql.append(getAlterTableColumnPart() + " MODIFY COLUMN `" + rColName + "` "
+ + ::dbtools::createStandardTypePart(rDescriptor, getConnection()));
+
+ if (comphelper::getBOOL(rDescriptor->getPropertyValue(u"IsAutoIncrement"_ustr)))
+ sSql.append(" auto_increment");
+
+ // see ColumnValue: NO_NULLS = 0, NULLABLE = 1, NULLABLE_UNKNOWN
+ // so entry required = yes corresponds to NO_NULLS = 0 and only in this case
+ // NOT NULL
+ if (comphelper::getINT32(rDescriptor->getPropertyValue(u"IsNullable"_ustr)) == 0)
+ sSql.append(" NOT NULL");
+
+ getConnection()->createStatement()->execute(sSql.makeStringAndClear());
+ }
+
+ if (bNameChanged)
+ {
+ OUString sNewColName;
+ rDescriptor->getPropertyValue(u"Name"_ustr) >>= sNewColName;
+ OUString sSql(getAlterTableColumnPart() + " RENAME COLUMN `" + rColName + "` TO `"
+ + sNewColName + "`");
+
+ getConnection()->createStatement()->execute(sSql);
+ }
+
+ m_xColumns->refresh();
+}
+
+void SAL_CALL connectivity::mysqlc::Table::alterColumnByIndex(
+ sal_Int32 index, const css::uno::Reference<css::beans::XPropertySet>& descriptor)
+{
+ osl::MutexGuard aGuard(m_rMutex);
+ css::uno::Reference<XPropertySet> xColumn(m_xColumns->getByIndex(index),
+ css::uno::UNO_QUERY_THROW);
+ alterColumnByName(comphelper::getString(xColumn->getPropertyValue(
+ OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME))),
+ descriptor);
+}
+
+OUString connectivity::mysqlc::Table::getAlterTableColumnPart() const
+{
+ return "ALTER TABLE "
+ + ::dbtools::composeTableName(getMetaData(), m_CatalogName, m_SchemaName, m_Name, true,
+ ::dbtools::EComposeRule::InTableDefinitions);
+}
+
+OUString connectivity::mysqlc::Table::getRenameStart() const { return u"RENAME TABLE "_ustr; }
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_table.hxx b/connectivity/source/drivers/mysqlc/mysqlc_table.hxx
new file mode 100644
index 000000000000..7487f1bc7b34
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_table.hxx
@@ -0,0 +1,69 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include "mysqlc_tables.hxx"
+
+#include <connectivity/TTableHelper.hxx>
+
+namespace connectivity::mysqlc
+{
+class Table : public OTableHelper
+{
+private:
+ ::osl::Mutex& m_rMutex;
+ sal_Int32 m_nPrivileges;
+
+protected:
+ void construct() override;
+
+public:
+ Table(Tables* pTables, ::osl::Mutex& rMutex,
+ const css::uno::Reference<css::sdbc::XConnection>& _xConnection);
+ Table(Tables* pTables, ::osl::Mutex& rMutex,
+ const css::uno::Reference<css::sdbc::XConnection>& _xConnection, const OUString& rCatalog,
+ const OUString& rSchema, const OUString& rName, const OUString& rType,
+ const OUString& rDescription);
+
+ // OTableHelper
+ virtual ::connectivity::sdbcx::OCollection*
+ createColumns(const ::std::vector<OUString>& rNames) override;
+ virtual ::connectivity::sdbcx::OCollection*
+ createKeys(const ::std::vector<OUString>& rNames) override;
+ virtual ::connectivity::sdbcx::OCollection*
+ createIndexes(const ::std::vector<OUString>& rNames) override;
+
+ /** Returns always "RENAME TABLE " even for views.
+ *
+ * \return The start of the rename statement.
+ * @see http://dev.mysql.com/doc/refman/5.1/de/rename-table.html
+ */
+ virtual OUString getRenameStart() const override;
+
+ // XAlterTable
+ /**
+ * See css::sdbcx::ColumnDescriptor for details of
+ * rDescriptor.
+ */
+ virtual void SAL_CALL
+ alterColumnByName(const OUString& rColName,
+ const css::uno::Reference<css::beans::XPropertySet>& rDescriptor) override;
+
+ virtual void SAL_CALL alterColumnByIndex(
+ sal_Int32 index, const css::uno::Reference<css::beans::XPropertySet>& descriptor) override;
+
+ /** returns the ALTER TABLE XXX statement
+ */
+ OUString getAlterTableColumnPart() const;
+};
+
+} // namespace connectivity::mysqlc
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_tables.cxx b/connectivity/source/drivers/mysqlc/mysqlc_tables.cxx
new file mode 100644
index 000000000000..dd59963075ea
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_tables.cxx
@@ -0,0 +1,165 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "mysqlc_table.hxx"
+#include "mysqlc_tables.hxx"
+#include "mysqlc_catalog.hxx"
+
+#include <TConnection.hxx>
+
+#include <connectivity/dbtools.hxx>
+
+#include <com/sun/star/sdbc/XRow.hpp>
+#include <com/sun/star/sdbc/ColumnValue.hpp>
+#include <comphelper/types.hxx>
+
+//----- OCollection -----------------------------------------------------------
+void connectivity::mysqlc::Tables::impl_refresh()
+{
+ static_cast<Catalog&>(m_rParent).refreshTables();
+}
+
+static void lcl_unescape(OUString& rName)
+{
+ // Remove ending ` if there's one
+ sal_Int32 nLastIndexBacktick = rName.lastIndexOf("`");
+ if ((nLastIndexBacktick > 0) && (nLastIndexBacktick == (rName.getLength() - 1)))
+ {
+ rName = rName.copy(0, nLastIndexBacktick);
+ }
+
+ // Remove beginning `
+ nLastIndexBacktick = rName.indexOf("`");
+ if (nLastIndexBacktick == 0)
+ {
+ rName = rName.copy(1, rName.getLength() - 1);
+ }
+
+ // Replace double ` by simple `
+ rName = rName.replaceAll("``", "`");
+}
+
+css::uno::Reference<css::beans::XPropertySet>
+connectivity::mysqlc::Tables::createObject(const OUString& rName)
+{
+ OUString sCatalog, sSchema, sTable;
+ ::dbtools::qualifiedNameComponents(m_xMetaData, rName, sCatalog, sSchema, sTable,
+ ::dbtools::EComposeRule::InDataManipulation);
+
+ css::uno::Any aCatalog;
+ if (!sCatalog.isEmpty())
+ {
+ lcl_unescape(sCatalog);
+ aCatalog <<= sCatalog;
+ }
+
+ lcl_unescape(sSchema);
+ lcl_unescape(sTable);
+
+ // Only retrieving a single table, so table type is irrelevant (param 4)
+ css::uno::Reference<css::sdbc::XResultSet> xTables
+ = m_xMetaData->getTables(aCatalog, sSchema, sTable, css::uno::Sequence<OUString>());
+
+ if (!xTables.is())
+ throw css::uno::RuntimeException(u"Could not acquire table."_ustr);
+
+ css::uno::Reference<css::sdbc::XRow> xRow(xTables, css::uno::UNO_QUERY_THROW);
+
+ if (!xTables->next())
+ throw css::uno::RuntimeException();
+
+ css::uno::Reference<css::beans::XPropertySet> xRet(
+ new Table(this, m_rMutex, m_xMetaData->getConnection(),
+ xRow->getString(1), // Catalog
+ xRow->getString(2), // Schema
+ xRow->getString(3), // Name
+ xRow->getString(4), // Type
+ xRow->getString(5))); // Description / Remarks / Comments
+
+ if (xTables->next())
+ throw css::uno::RuntimeException(u"Found more tables than expected."_ustr);
+
+ return xRet;
+}
+
+css::uno::Reference<css::beans::XPropertySet> connectivity::mysqlc::Tables::createDescriptor()
+{
+ // There is some internal magic so that the same class can be used as either
+ // a descriptor or as a normal table. See VTable.cxx for the details. In our
+ // case we just need to ensure we use the correct constructor.
+ return new Table(this, m_rMutex, m_xMetaData->getConnection());
+}
+
+//----- XAppend ---------------------------------------------------------------
+void connectivity::mysqlc::Tables::createTable(
+ const css::uno::Reference<css::beans::XPropertySet>& descriptor)
+{
+ const css::uno::Reference<css::sdbc::XConnection> xConnection = m_xMetaData->getConnection();
+ OUString aSql = ::dbtools::createSqlCreateTableStatement(descriptor, xConnection);
+
+ css::uno::Reference<css::sdbc::XStatement> xStmt = xConnection->createStatement();
+ if (xStmt.is())
+ {
+ xStmt->execute(aSql);
+ ::comphelper::disposeComponent(xStmt);
+ }
+}
+
+// XAppend
+css::uno::Reference<css::beans::XPropertySet> connectivity::mysqlc::Tables::appendObject(
+ const OUString& _rForName, const css::uno::Reference<css::beans::XPropertySet>& descriptor)
+{
+ createTable(descriptor);
+ return createObject(_rForName);
+}
+
+void connectivity::mysqlc::Tables::appendNew(const OUString& _rsNewTable)
+{
+ insertElement(_rsNewTable, nullptr);
+
+ // notify our container listeners
+ css::container::ContainerEvent aEvent(static_cast<XContainer*>(this),
+ css::uno::Any(_rsNewTable), css::uno::Any(),
+ css::uno::Any());
+ comphelper::OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners);
+ while (aListenerLoop.hasMoreElements())
+ aListenerLoop.next()->elementInserted(aEvent);
+}
+
+OUString connectivity::mysqlc::Tables::getNameForObject(
+ const css::uno::Reference<css::beans::XPropertySet>& _xObject)
+{
+ OSL_ENSURE(_xObject.is(), "OTables::getNameForObject: Object is NULL!");
+ return ::dbtools::composeTableName(m_xMetaData, _xObject,
+ ::dbtools::EComposeRule::InDataManipulation, false)
+ .replaceAll(u"`", u"Ì€ `");
+}
+
+//----- XDrop -----------------------------------------------------------------
+void connectivity::mysqlc::Tables::dropObject(sal_Int32 nPosition, const OUString& sName)
+{
+ css::uno::Reference<css::beans::XPropertySet> xTable(getObject(nPosition));
+
+ if (connectivity::sdbcx::ODescriptor::isNew(xTable))
+ return;
+
+ OUString sType;
+ xTable->getPropertyValue(u"Type"_ustr) >>= sType;
+
+ OUString sCatalog, sSchema, sTable;
+ ::dbtools::qualifiedNameComponents(m_xMetaData, sName, sCatalog, sSchema, sTable,
+ ::dbtools::EComposeRule::InDataManipulation);
+
+ OUString sComposedName(::dbtools::composeTableName(
+ m_xMetaData, sCatalog, sSchema, sTable, true, ::dbtools::EComposeRule::InDataManipulation));
+
+ m_xMetaData->getConnection()->createStatement()->execute("DROP " + sType + " " + sComposedName);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_tables.hxx b/connectivity/source/drivers/mysqlc/mysqlc_tables.hxx
new file mode 100644
index 000000000000..0dff83f247f5
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_tables.hxx
@@ -0,0 +1,59 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
+
+#include <connectivity/sdbcx/VCollection.hxx>
+#include <utility>
+
+namespace connectivity::mysqlc
+{
+/**
+* This implements com.sun.star.sdbcx.Container, which seems to be
+* also known by the name of Tables and Collection.
+*/
+class Tables : public ::connectivity::sdbcx::OCollection
+{
+protected:
+ css::uno::Reference<css::sdbc::XDatabaseMetaData> m_xMetaData;
+
+ // OCollection
+ virtual void impl_refresh() override;
+ virtual ::css::uno::Reference<css::beans::XPropertySet>
+ createObject(const OUString& rName) override;
+ virtual css::uno::Reference<css::beans::XPropertySet> createDescriptor() override;
+ virtual ::css::uno::Reference<css::beans::XPropertySet>
+ appendObject(const OUString& rName,
+ const css::uno::Reference<css::beans::XPropertySet>& rDescriptor) override;
+
+ void createTable(const css::uno::Reference<css::beans::XPropertySet>& descriptor);
+ virtual OUString
+ getNameForObject(const css::uno::Reference<css::beans::XPropertySet>& _xObject) override;
+ // XDrop
+ virtual void dropObject(sal_Int32 nPosition, const OUString& rName) override;
+
+public:
+ Tables(css::uno::Reference<css::sdbc::XDatabaseMetaData> xMetaData,
+ ::cppu::OWeakObject& rParent, ::osl::Mutex& rMutex,
+ ::std::vector<OUString> const& rNames)
+ : sdbcx::OCollection(rParent, true, rMutex, rNames)
+ , m_xMetaData(std::move(xMetaData))
+ {
+ }
+
+ void appendNew(const OUString& _rsNewTable);
+ // TODO: should we also implement XDataDescriptorFactory, XRefreshable,
+ // XAppend, etc. ?
+};
+
+} // namespace connectivity::mysqlc
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_types.cxx b/connectivity/source/drivers/mysqlc/mysqlc_types.cxx
index ca473cebd84f..b29360c59077 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_types.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_types.cxx
@@ -29,14 +29,14 @@ TypeInfoDef const mysqlc_types[] = {
// ------------- MySQL-Type: BIT. SDBC-Type: Bit -------------
{
"BIT", // Typename
- com::sun::star::sdbc::DataType::BIT, // sdbc-type
+ css::sdbc::DataType::BIT, // sdbc-type
1, // Precision
"", // Literal prefix
"", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
true, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -48,14 +48,14 @@ TypeInfoDef const mysqlc_types[] = {
// ------------ MySQL-Type: BOOL. SDBC-Type: Bit -------------
{
"BOOL", // Typename
- com::sun::star::sdbc::DataType::BIT, // sdbc-type
+ css::sdbc::DataType::BIT, // sdbc-type
1, // Precision
"", // Literal prefix
"", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
true, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -67,14 +67,14 @@ TypeInfoDef const mysqlc_types[] = {
// --------- MySQL-Type: TINYINT SDBC-Type: TINYINT ----------
{
"TINYINT", // Typename
- com::sun::star::sdbc::DataType::TINYINT, // sdbc-type
+ css::sdbc::DataType::TINYINT, // sdbc-type
3, // Precision
"", // Literal prefix
"", // Literal suffix
"[(M)] [UNSIGNED] [ZEROFILL]", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
true, // unsignable
false, // fixed_prec_scale
true, // auto_increment
@@ -86,14 +86,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: BIGINT SDBC-Type: BIGINT ----------
{
"BIGINT", // Typename
- com::sun::star::sdbc::DataType::BIGINT, // sdbc-type
+ css::sdbc::DataType::BIGINT, // sdbc-type
19, // Precision
"", // Literal prefix
"", // Literal suffix
"[(M)] [UNSIGNED] [ZEROFILL]", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
true, // unsignable
false, // fixed_prec_scale
true, // auto_increment
@@ -105,14 +105,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: LONG VARBINARY SDBC-Type: LONGVARBINARY ----------
{
"LONG VARBINARY", // Typename
- com::sun::star::sdbc::DataType::LONGVARBINARY, // sdbc-type
+ css::sdbc::DataType::LONGVARBINARY, // sdbc-type
16777215, // Precision
"'", // Literal prefix
"'", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
true, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -124,14 +124,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: MEDIUMBLOB SDBC-Type: LONGVARBINARY ----------
{
"MEDIUMBLOB", // Typename
- com::sun::star::sdbc::DataType::LONGVARBINARY, // sdbc-type
+ css::sdbc::DataType::LONGVARBINARY, // sdbc-type
16777215, // Precision
"'", // Literal prefix
"'", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
true, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -143,14 +143,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: LONGBLOB SDBC-Type: LONGVARBINARY ----------
{
"LONGBLOB", // Typename
- com::sun::star::sdbc::DataType::LONGVARBINARY, // sdbc-type
+ css::sdbc::DataType::LONGVARBINARY, // sdbc-type
-1, // Precision
"'", // Literal prefix
"'", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
true, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -162,14 +162,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: BLOB SDBC-Type: LONGVARBINARY ----------
{
"BLOB", // Typename
- com::sun::star::sdbc::DataType::LONGVARBINARY, // sdbc-type
+ css::sdbc::DataType::LONGVARBINARY, // sdbc-type
0xFFFF, // Precision
"'", // Literal prefix
"'", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
true, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -181,14 +181,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: TINYBLOB SDBC-Type: LONGVARBINARY ----------
{
"TINYBLOB", // Typename
- com::sun::star::sdbc::DataType::LONGVARBINARY, // sdbc-type
+ css::sdbc::DataType::LONGVARBINARY, // sdbc-type
0xFF, // Precision
"'", // Literal prefix
"'", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
true, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -200,14 +200,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: VARBINARY SDBC-Type: VARBINARY ----------
{
"VARBINARY", // Typename
- com::sun::star::sdbc::DataType::VARBINARY, // sdbc-type
+ css::sdbc::DataType::VARBINARY, // sdbc-type
0xFF, // Precision
"'", // Literal prefix
"'", // Literal suffix
"(M)", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
true, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -219,14 +219,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: BINARY SDBC-Type: BINARY ----------
{
"BINARY", // Typename
- com::sun::star::sdbc::DataType::BINARY, // sdbc-type
+ css::sdbc::DataType::BINARY, // sdbc-type
0xFF, // Precision
"'", // Literal prefix
"'", // Literal suffix
"(M)", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
true, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -238,14 +238,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: LONG VARCHAR SDBC-Type: LONG VARCHAR ----------
{
"LONG VARCHAR", // Typename
- com::sun::star::sdbc::DataType::LONGVARCHAR, // sdbc-type
+ css::sdbc::DataType::LONGVARCHAR, // sdbc-type
0xFFFFFF, // Precision
"'", // Literal prefix
"'", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -257,14 +257,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: MEDIUMTEXT SDBC-Type: LONG VARCHAR ----------
{
"MEDIUMTEXT", // Typename
- com::sun::star::sdbc::DataType::LONGVARCHAR, // sdbc-type
+ css::sdbc::DataType::LONGVARCHAR, // sdbc-type
0xFFFFFF, // Precision
"'", // Literal prefix
"'", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -276,14 +276,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: LONGTEXT SDBC-Type: LONG VARCHAR ----------
{
"LONGTEXT", // Typename
- com::sun::star::sdbc::DataType::LONGVARCHAR, // sdbc-type
+ css::sdbc::DataType::LONGVARCHAR, // sdbc-type
0xFFFFFF, // Precision
"'", // Literal prefix
"'", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -295,14 +295,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: TEXT SDBC-Type: LONG VARCHAR ----------
{
"TEXT", // Typename
- com::sun::star::sdbc::DataType::LONGVARCHAR, // sdbc-type
+ css::sdbc::DataType::LONGVARCHAR, // sdbc-type
0xFFFF, // Precision
"'", // Literal prefix
"'", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -314,14 +314,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: TINYTEXT SDBC-Type: LONG VARCHAR ----------
{
"TINYTEXT", // Typename
- com::sun::star::sdbc::DataType::LONGVARCHAR, // sdbc-type
+ css::sdbc::DataType::LONGVARCHAR, // sdbc-type
0xFF, // Precision
"'", // Literal prefix
"'", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -333,14 +333,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: CHAR SDBC-Type: CHAR ----------
{
"CHAR", // Typename
- com::sun::star::sdbc::DataType::CHAR, // sdbc-type
+ css::sdbc::DataType::CHAR, // sdbc-type
0xFF, // Precision
"'", // Literal prefix
"'", // Literal suffix
"(M)", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -352,14 +352,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: DECIMAL SDBC-Type: DECIMAL ----------
{
"DECIMAL", // Typename
- com::sun::star::sdbc::DataType::DECIMAL, // sdbc-type
+ css::sdbc::DataType::DECIMAL, // sdbc-type
17, // Precision
"", // Literal prefix
"", // Literal suffix
"[(M[,D])] [ZEROFILL]", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
true, // auto_increment
@@ -371,14 +371,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: NUMERIC SDBC-Type: NUMERIC ----------
{
"NUMERIC", // Typename
- com::sun::star::sdbc::DataType::NUMERIC, // sdbc-type
+ css::sdbc::DataType::NUMERIC, // sdbc-type
17, // Precision
"", // Literal prefix
"", // Literal suffix
"[(M[,D])] [ZEROFILL]", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
true, // auto_increment
@@ -390,14 +390,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: INTEGER SDBC-Type: INTEGER ----------
{
"INTEGER", // Typename
- com::sun::star::sdbc::DataType::INTEGER, // sdbc-type
+ css::sdbc::DataType::INTEGER, // sdbc-type
10, // Precision
"", // Literal prefix
"", // Literal suffix
"[(M)] [UNSIGNED] [ZEROFILL]", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
true, // unsignable
false, // fixed_prec_scale
true, // auto_increment
@@ -409,14 +409,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: INT SDBC-Type: INTEGER ----------
{
"INT", // Typename
- com::sun::star::sdbc::DataType::INTEGER, // sdbc-type
+ css::sdbc::DataType::INTEGER, // sdbc-type
10, // Precision
"", // Literal prefix
"", // Literal suffix
"[(M)] [UNSIGNED] [ZEROFILL]", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
true, // unsignable
false, // fixed_prec_scale
true, // auto_increment
@@ -428,14 +428,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: MEDIUMINT SDBC-Type: INTEGER ----------
{
"MEDIUMINT", // Typename
- com::sun::star::sdbc::DataType::INTEGER, // sdbc-type
+ css::sdbc::DataType::INTEGER, // sdbc-type
7, // Precision
"", // Literal prefix
"", // Literal suffix
"[(M)] [UNSIGNED] [ZEROFILL]", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
true, // unsignable
false, // fixed_prec_scale
true, // auto_increment
@@ -447,14 +447,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: SMALLINT SDBC-Type: INTEGER ----------
{
"SMALLINT", // Typename
- com::sun::star::sdbc::DataType::SMALLINT, // sdbc-type
+ css::sdbc::DataType::SMALLINT, // sdbc-type
5, // Precision
"", // Literal prefix
"", // Literal suffix
"[(M)] [UNSIGNED] [ZEROFILL]", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
true, // unsignable
false, // fixed_prec_scale
true, // auto_increment
@@ -466,14 +466,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: FLOAT SDBC-Type: REAL ----------
{
"FLOAT", // Typename
- com::sun::star::sdbc::DataType::REAL, // sdbc-type
+ css::sdbc::DataType::REAL, // sdbc-type
10, // Precision
"", // Literal prefix
"", // Literal suffix
"[(M,D)] [ZEROFILL]", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
true, // auto_increment
@@ -485,14 +485,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: DOUBLE SDBC-Type: DOUBLE ----------
{
"DOUBLE", // Typename
- com::sun::star::sdbc::DataType::DOUBLE, // sdbc-type
+ css::sdbc::DataType::DOUBLE, // sdbc-type
17, // Precision
"", // Literal prefix
"", // Literal suffix
"[(M,D)] [ZEROFILL]", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
true, // auto_increment
@@ -504,14 +504,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: DOUBLE PRECISION SDBC-Type: DOUBLE ----------
{
"DOUBLE PRECISION", // Typename
- com::sun::star::sdbc::DataType::DOUBLE, // sdbc-type
+ css::sdbc::DataType::DOUBLE, // sdbc-type
17, // Precision
"", // Literal prefix
"", // Literal suffix
"[(M,D)] [ZEROFILL]", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
true, // auto_increment
@@ -523,14 +523,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: REAL SDBC-Type: DOUBLE ----------
{
"REAL", // Typename
- com::sun::star::sdbc::DataType::DOUBLE, // sdbc-type
+ css::sdbc::DataType::DOUBLE, // sdbc-type
17, // Precision
"", // Literal prefix
"", // Literal suffix
"[(M,D)] [ZEROFILL]", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
true, // auto_increment
@@ -542,14 +542,22 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: VARCHAR SDBC-Type: VARCHAR ----------
{
"VARCHAR", // Typename
- com::sun::star::sdbc::DataType::VARCHAR, // sdbc-type
- 255, // Precision
+ css::sdbc::DataType::VARCHAR, // sdbc-type
+ // tdf#165928: a VARCHAR should be more than 255 characters
+ // Mysql/MariaDB accepts 65535 bytes
+ // see https://mariadb.com/docs/skysql-dbaas/ref/xpand/data-types/VARCHAR/
+ // but precision corresponds to the number of characters and not the number of bytes:
+ // see https://docs.oracle.com/javase/8/docs/api/java/sql/DatabaseMetaData.html
+ // Knowing that Unicode can use until 4 bytes, it means a varchar field can contain:
+ // 65535 / 4, so 16383 characters
+ // TODO if there's a way to retrieve the encoding, we could be more precise
+ 16383, // Precision
"'", // Literal prefix
"'", // Literal suffix
"(M)", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -561,14 +569,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: ENUM SDBC-Type: VARCHAR ----------
{
"ENUM", // Typename
- com::sun::star::sdbc::DataType::VARCHAR, // sdbc-type
+ css::sdbc::DataType::VARCHAR, // sdbc-type
0xFFFF, // Precision
"'", // Literal prefix
"'", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -580,14 +588,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: SET SDBC-Type: VARCHAR ----------
{
"SET", // Typename
- com::sun::star::sdbc::DataType::VARCHAR, // sdbc-type
+ css::sdbc::DataType::VARCHAR, // sdbc-type
64, // Precision
"'", // Literal prefix
"'", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -599,14 +607,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: DATE SDBC-Type: DATE ----------
{
"DATE", // Typename
- com::sun::star::sdbc::DataType::DATE, // sdbc-type
+ css::sdbc::DataType::DATE, // sdbc-type
0, // Precision
"'", // Literal prefix
"'", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -618,14 +626,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: TIME SDBC-Type: TIME ----------
{
"TIME", // Typename
- com::sun::star::sdbc::DataType::TIME, // sdbc-type
+ css::sdbc::DataType::TIME, // sdbc-type
0, // Precision
"'", // Literal prefix
"'", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -637,14 +645,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: DATETIME SDBC-Type: TIMESTAMP ----------
{
"DATETIME", // Typename
- com::sun::star::sdbc::DataType::TIMESTAMP, // sdbc-type
+ css::sdbc::DataType::TIMESTAMP, // sdbc-type
0, // Precision
"'", // Literal prefix
"'", // Literal suffix
"", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -656,14 +664,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: TIMESTAMP SDBC-Type: TIMESTAMP ----------
{
"TIMESTAMP", // Typename
- com::sun::star::sdbc::DataType::TIMESTAMP, // sdbc-type
+ css::sdbc::DataType::TIMESTAMP, // sdbc-type
0, // Precision
"'", // Literal prefix
"'", // Literal suffix
"[(M)]", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
false, // unsignable
false, // fixed_prec_scale
false, // auto_increment
@@ -677,14 +685,14 @@ TypeInfoDef const mysqlc_types[] = {
// ----------- MySQL-Type: YEAR SDBC-Type: INTEGER ----------
{
"YEAR", // Typename
- com::sun::star::sdbc::DataType::SMALLINT, // sdbc-type
+ css::sdbc::DataType::SMALLINT, // sdbc-type
10, // Precision
"", // Literal prefix
"", // Literal suffix
"[(M)] [UNSIGNED] [ZEROFILL]", // Create params
- com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ css::sdbc::ColumnValue::NULLABLE, // nullable
false, // case sensitive
- com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ css::sdbc::ColumnSearch::FULL, // searchable
true, // unsignable
false, // fixed_prec_scale
true, // auto_increment
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_user.cxx b/connectivity/source/drivers/mysqlc/mysqlc_user.cxx
new file mode 100644
index 000000000000..d4f6bdad8b25
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_user.cxx
@@ -0,0 +1,211 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <utility>
+
+#include "mysqlc_user.hxx"
+#include <comphelper/types.hxx>
+#include <connectivity/dbtools.hxx>
+#include <com/sun/star/sdbc/XRow.hpp>
+#include <com/sun/star/sdbcx/Privilege.hpp>
+#include <com/sun/star/sdbcx/PrivilegeObject.hpp>
+#include <TConnection.hxx>
+
+using namespace ::connectivity;
+using namespace ::connectivity::mysqlc;
+using namespace ::connectivity::sdbcx;
+
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::sdbc;
+using namespace ::com::sun::star::sdbcx;
+
+User::User(css::uno::Reference<css::sdbc::XConnection> xConnection)
+ : OUser(true) // Case Sensitive
+ , m_xConnection(std::move(xConnection))
+{
+}
+
+User::User(css::uno::Reference<css::sdbc::XConnection> xConnection, const OUString& rName)
+ : OUser(rName,
+ true) // Case Sensitive
+ , m_xConnection(std::move(xConnection))
+{
+}
+
+OUserExtend::OUserExtend(const css::uno::Reference<css::sdbc::XConnection>& xConnection,
+ const OUString& rName)
+ : User(xConnection, rName)
+{
+ construct();
+}
+
+void OUserExtend::construct()
+{
+ registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),
+ PROPERTY_ID_NAME, 0, &m_Name, ::cppu::UnoType<OUString>::get());
+
+ registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PASSWORD),
+ PROPERTY_ID_PASSWORD, 0, &m_Password, ::cppu::UnoType<OUString>::get());
+}
+
+void User::changePassword(const OUString& /* oldPassword */, const OUString& newPassword)
+{
+ css::uno::Reference<XStatement> statement = m_xConnection->createStatement();
+ statement->execute("SET PASSWORD FOR " + m_Name + " = PASSWORD('" + newPassword + "')");
+ ::comphelper::disposeComponent(statement);
+}
+
+cppu::IPropertyArrayHelper* OUserExtend::createArrayHelper() const
+{
+ css::uno::Sequence<css::beans::Property> aProps;
+ describeProperties(aProps);
+ return new cppu::OPropertyArrayHelper(aProps);
+}
+
+cppu::IPropertyArrayHelper& OUserExtend::getInfoHelper()
+{
+ return *OUserExtend_PROP::getArrayHelper();
+}
+
+typedef connectivity::sdbcx::OUser_BASE OUser_BASE_RBHELPER;
+
+sal_Int32 SAL_CALL User::getPrivileges(const OUString& objName, sal_Int32 objType)
+{
+ ::osl::MutexGuard aGuard(m_aMutex);
+ checkDisposed(OUser_BASE_RBHELPER::rBHelper.bDisposed);
+
+ sal_Int32 nRights, nRightsWithGrant;
+ findPrivilegesAndGrantPrivileges(objName, objType, nRights, nRightsWithGrant);
+ return nRights;
+}
+
+void User::findPrivilegesAndGrantPrivileges(const OUString& objName, sal_Int32 objType,
+ sal_Int32& nRights, sal_Int32& nRightsWithGrant)
+{
+ nRightsWithGrant = nRights = 0;
+ // first we need to create the sql stmt to select the privs
+ css::uno::Reference<XDatabaseMetaData> xMeta = m_xConnection->getMetaData();
+ OUString sCatalog, sSchema, sTable;
+ ::dbtools::qualifiedNameComponents(xMeta, objName, sCatalog, sSchema, sTable,
+ ::dbtools::EComposeRule::InDataManipulation);
+ css::uno::Reference<XResultSet> xRes;
+ switch (objType)
+ {
+ case css::sdbcx::PrivilegeObject::TABLE:
+ case css::sdbcx::PrivilegeObject::VIEW:
+ {
+ css::uno::Any aCatalog;
+ if (!sCatalog.isEmpty())
+ aCatalog <<= sCatalog;
+ xRes = xMeta->getTablePrivileges(aCatalog, sSchema, sTable);
+ }
+ break;
+
+ case css::sdbcx::PrivilegeObject::COLUMN:
+ {
+ css::uno::Any aCatalog;
+ if (!sCatalog.isEmpty())
+ aCatalog <<= sCatalog;
+ xRes = xMeta->getColumnPrivileges(aCatalog, sSchema, sTable, u"%"_ustr);
+ }
+ break;
+ }
+
+ if (!xRes.is())
+ return;
+
+ static const char sYes[] = "YES";
+
+ nRightsWithGrant = nRights = 0;
+
+ css::uno::Reference<XRow> xCurrentRow(xRes, css::uno::UNO_QUERY);
+ while (xCurrentRow.is() && xRes->next())
+ {
+ OUString sGrantee = xCurrentRow->getString(5);
+ OUString sPrivilege = xCurrentRow->getString(6);
+ OUString sGrantable = xCurrentRow->getString(7);
+
+ if (!m_Name.equalsIgnoreAsciiCase(sGrantee))
+ continue;
+
+ if (sPrivilege.equalsIgnoreAsciiCase("SELECT"))
+ {
+ nRights |= Privilege::SELECT;
+ if (sGrantable.equalsIgnoreAsciiCase(sYes))
+ nRightsWithGrant |= Privilege::SELECT;
+ }
+ else if (sPrivilege.equalsIgnoreAsciiCase("INSERT"))
+ {
+ nRights |= Privilege::INSERT;
+ if (sGrantable.equalsIgnoreAsciiCase(sYes))
+ nRightsWithGrant |= Privilege::INSERT;
+ }
+ else if (sPrivilege.equalsIgnoreAsciiCase("UPDATE"))
+ {
+ nRights |= Privilege::UPDATE;
+ if (sGrantable.equalsIgnoreAsciiCase(sYes))
+ nRightsWithGrant |= Privilege::UPDATE;
+ }
+ else if (sPrivilege.equalsIgnoreAsciiCase("DELETE"))
+ {
+ nRights |= Privilege::DELETE;
+ if (sGrantable.equalsIgnoreAsciiCase(sYes))
+ nRightsWithGrant |= Privilege::DELETE;
+ }
+ else if (sPrivilege.equalsIgnoreAsciiCase("READ"))
+ {
+ nRights |= Privilege::READ;
+ if (sGrantable.equalsIgnoreAsciiCase(sYes))
+ nRightsWithGrant |= Privilege::READ;
+ }
+ else if (sPrivilege.equalsIgnoreAsciiCase("CREATE"))
+ {
+ nRights |= Privilege::CREATE;
+ if (sGrantable.equalsIgnoreAsciiCase(sYes))
+ nRightsWithGrant |= Privilege::CREATE;
+ }
+ else if (sPrivilege.equalsIgnoreAsciiCase("ALTER"))
+ {
+ nRights |= Privilege::ALTER;
+ if (sGrantable.equalsIgnoreAsciiCase(sYes))
+ nRightsWithGrant |= Privilege::ALTER;
+ }
+ else if (sPrivilege.equalsIgnoreAsciiCase("REFERENCES"))
+ {
+ nRights |= Privilege::REFERENCE;
+ if (sGrantable.equalsIgnoreAsciiCase(sYes))
+ nRightsWithGrant |= Privilege::REFERENCE;
+ }
+ else if (sPrivilege.equalsIgnoreAsciiCase("DROP"))
+ {
+ nRights |= Privilege::DROP;
+ if (sGrantable.equalsIgnoreAsciiCase(sYes))
+ nRightsWithGrant |= Privilege::DROP;
+ }
+ }
+ ::comphelper::disposeComponent(xRes);
+}
+
+sal_Int32 SAL_CALL User::getGrantablePrivileges(const OUString& objName, sal_Int32 objType)
+{
+ ::osl::MutexGuard aGuard(m_aMutex);
+ checkDisposed(OUser_BASE_RBHELPER::rBHelper.bDisposed);
+
+ sal_Int32 nRights, nRightsWithGrant;
+ findPrivilegesAndGrantPrivileges(objName, objType, nRights, nRightsWithGrant);
+ return nRightsWithGrant;
+}
+
+//----- IRefreshableGroups ----------------------------------------------------
+void User::refreshGroups()
+{
+ // TODO: implement.
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_user.hxx b/connectivity/source/drivers/mysqlc/mysqlc_user.hxx
new file mode 100644
index 000000000000..6bebbaa64a11
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_user.hxx
@@ -0,0 +1,71 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include <sdbcx/VUser.hxx>
+#include <com/sun/star/sdbc/XConnection.hpp>
+
+namespace connectivity::mysqlc
+{
+/**
+* This implements com.sun.star.sdbcx.Container.
+*/
+class User : public ::connectivity::sdbcx::OUser
+{
+ css::uno::Reference<css::sdbc::XConnection> m_xConnection;
+
+public:
+ /**
+ * Create a "new" descriptor, which isn't yet in the database.
+ */
+ User(css::uno::Reference<css::sdbc::XConnection> xConnection);
+ /**
+ * For a user that already exists in the db.
+ */
+ User(css::uno::Reference<css::sdbc::XConnection> xConnection, const OUString& rName);
+
+ // XAuthorizable
+ virtual void SAL_CALL changePassword(const OUString&, const OUString& newPassword) override;
+ virtual sal_Int32 SAL_CALL getPrivileges(const OUString&, sal_Int32) override;
+ // return the privileges and additional the grant rights
+ /// @throws css::sdbc::SQLException
+ /// @throws css::uno::RuntimeException
+ void findPrivilegesAndGrantPrivileges(const OUString& objName, sal_Int32 objType,
+ sal_Int32& nRights, sal_Int32& nRightsWithGrant);
+
+ virtual sal_Int32 SAL_CALL getGrantablePrivileges(const OUString&, sal_Int32) override;
+
+ // IRefreshableGroups::
+ virtual void refreshGroups() override;
+};
+
+class OUserExtend;
+typedef ::comphelper::OPropertyArrayUsageHelper<OUserExtend> OUserExtend_PROP;
+
+class OUserExtend : public User, public OUserExtend_PROP
+{
+ OUString m_Password;
+
+protected:
+ // OPropertyArrayUsageHelper
+ virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const override;
+ // OPropertySetHelper
+ virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() override;
+
+public:
+ OUserExtend(const css::uno::Reference<css::sdbc::XConnection>& _xConnection,
+ const OUString& rName);
+
+ virtual void construct() override;
+};
+
+} // namespace connectivity::mysqlc
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_users.cxx b/connectivity/source/drivers/mysqlc/mysqlc_users.cxx
new file mode 100644
index 000000000000..e2149d532d04
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_users.cxx
@@ -0,0 +1,93 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <utility>
+
+#include "mysqlc_user.hxx"
+#include "mysqlc_users.hxx"
+#include <comphelper/types.hxx>
+#include <connectivity/dbtools.hxx>
+#include <TConnection.hxx>
+
+using namespace ::connectivity;
+using namespace ::connectivity::mysqlc;
+using namespace ::connectivity::sdbcx;
+using namespace ::cppu;
+using namespace ::osl;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::sdbc;
+using namespace ::com::sun::star::uno;
+
+Users::Users(const uno::Reference<XDatabaseMetaData>& rMetaData, OWeakObject& rParent,
+ Mutex& rMutex, ::std::vector<OUString> const& rNames)
+ : OCollection(rParent, true, rMutex, rNames)
+ , m_xMetaData(rMetaData)
+{
+}
+
+//----- OCollection -----------------------------------------------------------
+void Users::impl_refresh()
+{
+ // TODO: IMPLEMENT ME
+}
+
+css::uno::Reference<css::beans::XPropertySet> Users::createObject(const OUString& rName)
+{
+ return new OUserExtend(m_xMetaData->getConnection(), rName);
+}
+
+uno::Reference<XPropertySet> Users::createDescriptor()
+{
+ // There is some internal magic so that the same class can be used as either
+ // a descriptor or as a normal user. See VUser.cxx for the details. In our
+ // case we just need to ensure we use the correct constructor.
+ return new OUserExtend(m_xMetaData->getConnection(), u""_ustr);
+}
+
+//----- XAppend ---------------------------------------------------------------
+css::uno::Reference<css::beans::XPropertySet>
+Users::appendObject(const OUString& rName, const uno::Reference<XPropertySet>& descriptor)
+{
+ OUString aSql(u"GRANT USAGE ON * TO "_ustr);
+ OUString aQuote = m_xMetaData->getIdentifierQuoteString();
+ aSql += ::dbtools::quoteName(aQuote, rName) + " @\"%\" ";
+ OUString sPassword;
+ descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PASSWORD))
+ >>= sPassword;
+ if (!sPassword.isEmpty())
+ {
+ aSql += " IDENTIFIED BY '" + sPassword + "'";
+ }
+
+ Reference<XStatement> statement = m_xMetaData->getConnection()->createStatement();
+ if (statement.is())
+ statement->execute(aSql);
+ ::comphelper::disposeComponent(statement);
+
+ return createObject(rName);
+}
+
+//----- XDrop -----------------------------------------------------------------
+void Users::dropObject(sal_Int32 nPosition, const OUString& rName)
+{
+ uno::Reference<XPropertySet> xUser(getObject(nPosition));
+
+ if (!ODescriptor::isNew(xUser))
+ {
+ Reference<XStatement> statement = m_xMetaData->getConnection()->createStatement();
+ if (statement.is())
+ {
+ statement->execute("DROP USER " + rName);
+ ::comphelper::disposeComponent(statement);
+ }
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_users.hxx b/connectivity/source/drivers/mysqlc/mysqlc_users.hxx
new file mode 100644
index 000000000000..42a1b8319ca8
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_users.hxx
@@ -0,0 +1,44 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#pragma once
+
+#include <connectivity/sdbcx/VCollection.hxx>
+#include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
+
+namespace connectivity::mysqlc
+{
+class Users : public ::connectivity::sdbcx::OCollection
+{
+ css::uno::Reference<css::sdbc::XDatabaseMetaData> m_xMetaData;
+
+protected:
+ // OCollection
+ virtual void impl_refresh() override;
+ virtual ::css::uno::Reference<css::beans::XPropertySet>
+ createObject(const OUString& rName) override;
+ virtual css::uno::Reference<css::beans::XPropertySet> createDescriptor() override;
+ virtual ::css::uno::Reference<css::beans::XPropertySet>
+ appendObject(const OUString& rName,
+ const css::uno::Reference<css::beans::XPropertySet>& rDescriptor) override;
+
+public:
+ Users(const css::uno::Reference<css::sdbc::XDatabaseMetaData>& rMetaData,
+ ::cppu::OWeakObject& rParent, ::osl::Mutex& rMutex,
+ ::std::vector<OUString> const& rNames);
+
+ // TODO: we should also implement XDataDescriptorFactory, XRefreshable,
+ // XAppend, etc., but all are optional.
+
+ // XDrop
+ virtual void dropObject(sal_Int32 nPosition, const OUString& rName) override;
+};
+} // namespace connectivity::mysqlc
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_view.cxx b/connectivity/source/drivers/mysqlc/mysqlc_view.cxx
new file mode 100644
index 000000000000..86837381d2bc
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_view.cxx
@@ -0,0 +1,98 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "mysqlc_view.hxx"
+
+#include <propertyids.hxx>
+
+#include <com/sun/star/sdbc/XRow.hpp>
+
+namespace connectivity::mysqlc
+{
+View::View(const css::uno::Reference<css::sdbc::XConnection>& _rxConnection, bool _bCaseSensitive,
+ const OUString& _rSchemaName, const OUString& _rName)
+ : View_Base(_bCaseSensitive, _rName, _rxConnection->getMetaData(), OUString(), _rSchemaName,
+ OUString())
+ , m_xConnection(_rxConnection)
+{
+}
+
+View::~View() {}
+
+void SAL_CALL View::acquire() noexcept { View_Base::acquire(); };
+void SAL_CALL View::release() noexcept { View_Base::release(); };
+css::uno::Any SAL_CALL View::queryInterface(const css::uno::Type& _rType)
+{
+ css::uno::Any aReturn = View_Base::queryInterface(_rType);
+ if (!aReturn.hasValue())
+ aReturn = View_IBASE::queryInterface(_rType);
+ return aReturn;
+}
+
+css::uno::Sequence<css::uno::Type> SAL_CALL View::getTypes()
+{
+ return ::comphelper::concatSequences(View_Base::getTypes(), View_IBASE::getTypes());
+}
+
+css::uno::Sequence<sal_Int8> SAL_CALL View::getImplementationId()
+{
+ return css::uno::Sequence<sal_Int8>();
+}
+
+void SAL_CALL View::alterCommand(const OUString& _rNewCommand)
+{
+ OUString aCommand = "ALTER VIEW " + m_SchemaName + "." + m_Name + " AS " + _rNewCommand;
+ m_xMetaData->getConnection()->createStatement()->execute(aCommand);
+}
+
+void SAL_CALL View::getFastPropertyValue(css::uno::Any& _rValue, sal_Int32 _nHandle) const
+{
+ if (_nHandle == PROPERTY_ID_COMMAND)
+ {
+ // retrieve the very current command, don't rely on the base classes cached value
+ // (which we initialized empty, anyway)
+ _rValue <<= impl_getCommand();
+ return;
+ }
+
+ View_Base::getFastPropertyValue(_rValue, _nHandle);
+}
+
+OUString View::impl_getCommand() const
+{
+ OUString aCommand("SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = '"
+ + m_SchemaName + "' AND TABLE_NAME = '" + m_Name + "'");
+ //::utl::SharedUNOComponent< XStatement > xStatement; xStatement.set( m_xConnection->createStatement(), UNO_QUERY_THROW );
+ css::uno::Reference<css::sdbc::XResultSet> xResult(
+ m_xMetaData->getConnection()->createStatement()->executeQuery(aCommand),
+ css::uno::UNO_SET_THROW);
+ if (!xResult->next())
+ {
+ // hmm. There is no view the name as we know it. Can only mean some other instance
+ // dropped this view meanwhile...
+ std::abort();
+ }
+
+ css::uno::Reference<css::sdbc::XRow> xRow(xResult, css::uno::UNO_QUERY_THROW);
+ return xRow->getString(1);
+}
+
+} // namespace connectivity::mysqlc
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_view.hxx b/connectivity/source/drivers/mysqlc/mysqlc_view.hxx
new file mode 100644
index 000000000000..8450152499c0
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_view.hxx
@@ -0,0 +1,72 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <connectivity/sdbcx/VView.hxx>
+
+#include <com/sun/star/sdbcx/XAlterView.hpp>
+#include <com/sun/star/sdbc/XConnection.hpp>
+
+#include <comphelper/sequence.hxx>
+#include <cppuhelper/implbase1.hxx>
+
+namespace connectivity::mysqlc
+{
+typedef ::connectivity::sdbcx::OView View_Base;
+typedef ::cppu::ImplHelper1<css::sdbcx::XAlterView> View_IBASE;
+
+class View : public View_Base, public View_IBASE
+{
+public:
+ View(const css::uno::Reference<css::sdbc::XConnection>& _rxConnection, bool _bCaseSensitive,
+ const OUString& _rSchemaName, const OUString& _rName);
+
+ // UNO
+ virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& aType) override;
+ virtual void SAL_CALL acquire() noexcept override;
+ virtual void SAL_CALL release() noexcept override;
+
+ virtual css::uno::Sequence<css::uno::Type> SAL_CALL getTypes() override;
+ virtual css::uno::Sequence<sal_Int8> SAL_CALL getImplementationId() override;
+
+ // XAlterView
+ virtual void SAL_CALL alterCommand(const OUString& NewCommand) override;
+
+protected:
+ virtual ~View() override;
+
+protected:
+ // OPropertyContainer
+ virtual void SAL_CALL getFastPropertyValue(css::uno::Any& _rValue,
+ sal_Int32 _nHandle) const override;
+
+private:
+ /** retrieves the current command of the View */
+ OUString impl_getCommand() const;
+
+private:
+ css::uno::Reference<css::sdbc::XConnection> m_xConnection;
+
+ using View_Base::getFastPropertyValue;
+};
+
+} // namespace connectivity::mysqlc
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_views.cxx b/connectivity/source/drivers/mysqlc/mysqlc_views.cxx
new file mode 100644
index 000000000000..a603b84d04d1
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_views.cxx
@@ -0,0 +1,114 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include "mysqlc_tables.hxx"
+#include "mysqlc_views.hxx"
+#include "mysqlc_view.hxx"
+#include "mysqlc_catalog.hxx"
+#include <connectivity/dbtools.hxx>
+#include <comphelper/types.hxx>
+#include <TConnection.hxx>
+
+connectivity::mysqlc::Views::Views(const css::uno::Reference<css::sdbc::XConnection>& _rxConnection,
+ ::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex,
+ const ::std::vector<OUString>& _rVector)
+ : sdbcx::OCollection(_rParent, true, _rMutex, _rVector)
+ , m_xConnection(_rxConnection)
+ , m_xMetaData(_rxConnection->getMetaData())
+{
+}
+
+css::uno::Reference<css::beans::XPropertySet>
+connectivity::mysqlc::Views::createObject(const OUString& _rName)
+{
+ OUString sCatalog, sSchema, sTable;
+ ::dbtools::qualifiedNameComponents(m_xMetaData, _rName, sCatalog, sSchema, sTable,
+ ::dbtools::EComposeRule::InDataManipulation);
+ return new View(m_xConnection, isCaseSensitive(), sSchema, sTable);
+}
+
+void connectivity::mysqlc::Views::impl_refresh()
+{
+ static_cast<Catalog&>(m_rParent).refreshViews();
+}
+
+css::uno::Reference<css::beans::XPropertySet> connectivity::mysqlc::Views::createDescriptor()
+{
+ return new connectivity::sdbcx::OView(true, m_xMetaData);
+}
+
+// XAppend
+css::uno::Reference<css::beans::XPropertySet> connectivity::mysqlc::Views::appendObject(
+ const OUString& _rForName, const css::uno::Reference<css::beans::XPropertySet>& descriptor)
+{
+ createView(descriptor);
+ return createObject(_rForName);
+}
+
+// XDrop
+void connectivity::mysqlc::Views::dropObject(sal_Int32 _nPos, const OUString& /*_sElementName*/)
+{
+ css::uno::Reference<XInterface> xObject(getObject(_nPos));
+ bool bIsNew = connectivity::sdbcx::ODescriptor::isNew(xObject);
+ if (!bIsNew)
+ {
+ OUString aSql(u"DROP VIEW"_ustr);
+
+ css::uno::Reference<css::beans::XPropertySet> xProp(xObject, css::uno::UNO_QUERY);
+ aSql += ::dbtools::composeTableName(m_xMetaData, xProp,
+ ::dbtools::EComposeRule::InTableDefinitions, true);
+
+ css::uno::Reference<css::sdbc::XConnection> xConnection = m_xMetaData->getConnection();
+ css::uno::Reference<css::sdbc::XStatement> xStmt = xConnection->createStatement();
+ xStmt->execute(aSql);
+ ::comphelper::disposeComponent(xStmt);
+ }
+}
+
+void connectivity::mysqlc::Views::createView(
+ const css::uno::Reference<css::beans::XPropertySet>& descriptor)
+{
+ css::uno::Reference<css::sdbc::XConnection> xConnection = m_xMetaData->getConnection();
+
+ OUString sCommand;
+ descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_COMMAND))
+ >>= sCommand;
+
+ OUString aSql = "CREATE VIEW "
+ + ::dbtools::composeTableName(m_xMetaData, descriptor,
+ ::dbtools::EComposeRule::InTableDefinitions, true)
+ + " AS " + sCommand;
+
+ css::uno::Reference<css::sdbc::XStatement> xStmt = xConnection->createStatement();
+ if (xStmt.is())
+ {
+ xStmt->execute(aSql);
+ ::comphelper::disposeComponent(xStmt);
+ }
+ connectivity::mysqlc::Tables* pTables = static_cast<connectivity::mysqlc::Tables*>(
+ static_cast<connectivity::mysqlc::Catalog&>(m_rParent).getPrivateTables());
+ if (pTables)
+ {
+ OUString sName = ::dbtools::composeTableName(
+ m_xMetaData, descriptor, ::dbtools::EComposeRule::InDataManipulation, false);
+ pTables->appendNew(sName);
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_views.hxx b/connectivity/source/drivers/mysqlc/mysqlc_views.hxx
new file mode 100644
index 000000000000..f55d6a032184
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_views.hxx
@@ -0,0 +1,51 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#pragma once
+
+#include <connectivity/sdbcx/VCollection.hxx>
+#include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
+namespace connectivity::mysqlc
+{
+class Views final : public connectivity::sdbcx::OCollection
+{
+ css::uno::Reference<css::sdbc::XConnection> m_xConnection;
+ css::uno::Reference<css::sdbc::XDatabaseMetaData> m_xMetaData;
+
+ // OCollection
+ virtual css::uno::Reference<css::beans::XPropertySet>
+ createObject(const OUString& _rName) override;
+ virtual void impl_refresh() override;
+ virtual css::uno::Reference<css::beans::XPropertySet> createDescriptor() override;
+ virtual css::uno::Reference<css::beans::XPropertySet>
+ appendObject(const OUString& _rForName,
+ const css::uno::Reference<css::beans::XPropertySet>& descriptor) override;
+
+ void createView(const css::uno::Reference<css::beans::XPropertySet>& descriptor);
+
+public:
+ Views(const css::uno::Reference<css::sdbc::XConnection>& _rxConnection,
+ ::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex,
+ const ::std::vector<OUString>& _rVector);
+
+ // XDrop
+ virtual void dropObject(sal_Int32 _nPos, const OUString& _sElementName) override;
+};
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/odbc/OConnection.cxx b/connectivity/source/drivers/odbc/OConnection.cxx
index 7ae8c46802e2..57b3891958fa 100644
--- a/connectivity/source/drivers/odbc/OConnection.cxx
+++ b/connectivity/source/drivers/odbc/OConnection.cxx
@@ -37,7 +37,6 @@ using namespace dbtools;
using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
@@ -67,20 +66,20 @@ OConnection::~OConnection()
if (!m_bClosed)
{
- rc = N3SQLDisconnect( m_aConnectionHandle );
+ rc = functions().Disconnect(m_aConnectionHandle);
OSL_ENSURE( rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO, "Failure from SQLDisconnect" );
}
- rc = N3SQLFreeHandle( SQL_HANDLE_DBC, m_aConnectionHandle );
+ rc = functions().FreeHandle(SQL_HANDLE_DBC, m_aConnectionHandle);
OSL_ENSURE( rc == SQL_SUCCESS , "Failure from SQLFreeHandle for connection");
m_aConnectionHandle = SQL_NULL_HANDLE;
}
-oslGenericFunction OConnection::getOdbcFunction(ODBC3SQLFunctionId _nIndex) const
+const Functions& OConnection::functions() const
{
OSL_ENSURE(m_xDriver, "OConnection::getOdbcFunction: m_xDriver is null!");
- return m_xDriver->getOdbcFunction(_nIndex);
+ return m_xDriver->functions();
}
SQLRETURN OConnection::OpenConnection(const OUString& aConnectStr, sal_Int32 nTimeOut, bool bSilent)
@@ -91,48 +90,55 @@ SQLRETURN OConnection::OpenConnection(const OUString& aConnectStr, sal_Int32 nTi
return -1;
SQLRETURN nSQLRETURN = 0;
- SDB_ODBC_CHAR szConnStrOut[4096] = {};
- SDB_ODBC_CHAR szConnStrIn[2048] = {};
- SQLSMALLINT cbConnStrOut;
- OString aConStr(OUStringToOString(aConnectStr,getTextEncoding()));
- memcpy(szConnStrIn, aConStr.getStr(), std::min<sal_Int32>(sal_Int32(2048),aConStr.getLength()));
#ifndef MACOSX
- N3SQLSetConnectAttr(m_aConnectionHandle,SQL_ATTR_LOGIN_TIMEOUT,reinterpret_cast<SQLPOINTER>(nTimeOut),SQL_IS_UINTEGER);
+ functions().SetConnectAttr(m_aConnectionHandle,SQL_ATTR_LOGIN_TIMEOUT,reinterpret_cast<SQLPOINTER>(static_cast<sal_IntPtr>(nTimeOut)),SQL_IS_UINTEGER);
#else
(void)nTimeOut; /* WaE */
#endif
#ifdef LINUX
- (void) bSilent;
- nSQLRETURN = N3SQLDriverConnect(m_aConnectionHandle,
- nullptr,
- szConnStrIn,
- static_cast<SQLSMALLINT>(std::min(sal_Int32(2048),aConStr.getLength())),
- szConnStrOut,
- SQLSMALLINT(sizeof(szConnStrOut)/sizeof(SDB_ODBC_CHAR)) -1,
- &cbConnStrOut,
- SQL_DRIVER_NOPROMPT);
+ bSilent = true;
+#endif //LINUX
+ SQLUSMALLINT nSilent = bSilent ? SQL_DRIVER_NOPROMPT : SQL_DRIVER_COMPLETE;
+
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::DriverConnectW))
+ {
+ SQLWChars sqlConnectStr(aConnectStr);
+ SQLWCHAR szConnStrOut[4096] = {};
+ SQLSMALLINT cchConnStrOut;
+ nSQLRETURN = functions().DriverConnectW(m_aConnectionHandle,
+ nullptr,
+ sqlConnectStr.get(),
+ sqlConnectStr.cch(),
+ szConnStrOut,
+ std::size(szConnStrOut) - 1,
+ &cchConnStrOut,
+ nSilent);
+ }
+ else
+ {
+ SQLChars sqlConnectStr(aConnectStr, getTextEncoding());
+ SQLCHAR szConnStrOut[4096] = {};
+ SQLSMALLINT cbConnStrOut;
+ nSQLRETURN = functions().DriverConnect(m_aConnectionHandle,
+ nullptr,
+ sqlConnectStr.get(),
+ sqlConnectStr.cch(),
+ szConnStrOut,
+ std::size(szConnStrOut) - 1,
+ &cbConnStrOut,
+ nSilent);
+ }
+#ifdef LINUX
if (nSQLRETURN == SQL_ERROR || nSQLRETURN == SQL_NO_DATA || SQL_SUCCESS_WITH_INFO == nSQLRETURN)
- return nSQLRETURN;
#else
-
- SQLUSMALLINT nSilent = bSilent ? SQL_DRIVER_NOPROMPT : SQL_DRIVER_COMPLETE;
- nSQLRETURN = N3SQLDriverConnect(m_aConnectionHandle,
- nullptr,
- szConnStrIn,
- static_cast<SQLSMALLINT>(std::min<sal_Int32>(sal_Int32(2048),aConStr.getLength())),
- szConnStrOut,
- SQLSMALLINT(sizeof szConnStrOut),
- &cbConnStrOut,
- nSilent);
if (nSQLRETURN == SQL_ERROR || nSQLRETURN == SQL_NO_DATA)
+#endif
return nSQLRETURN;
m_bClosed = false;
-#endif //LINUX
-
try
{
OUString aVal;
@@ -157,7 +163,7 @@ SQLRETURN OConnection::OpenConnection(const OUString& aConnectStr, sal_Int32 nTi
// autocommit is always default
if (!m_bReadOnly)
- N3SQLSetConnectAttr(m_aConnectionHandle,SQL_ATTR_AUTOCOMMIT, reinterpret_cast<SQLPOINTER>(SQL_AUTOCOMMIT_ON),SQL_IS_INTEGER);
+ functions().SetConnectAttr(m_aConnectionHandle,SQL_ATTR_AUTOCOMMIT, reinterpret_cast<SQLPOINTER>(SQL_AUTOCOMMIT_ON),SQL_IS_INTEGER);
return nSQLRETURN;
}
@@ -168,13 +174,13 @@ SQLRETURN OConnection::Construct(const OUString& url,const Sequence< PropertyVal
m_sURL = url;
setConnectionInfo(info);
- N3SQLAllocHandle(SQL_HANDLE_DBC,m_pDriverHandleCopy,&m_aConnectionHandle);
+ functions().AllocHandle(SQL_HANDLE_DBC,m_pDriverHandleCopy,&m_aConnectionHandle);
if(m_aConnectionHandle == SQL_NULL_HANDLE)
throw SQLException();
sal_Int32 nLen = url.indexOf(':');
nLen = url.indexOf(':',nLen+2);
- OUString aDSN("DSN="), aUID, aPWD, aSysDrvSettings;
+ OUString aDSN(u"DSN="_ustr), aUID, aPWD, aSysDrvSettings;
aDSN += url.subView(nLen+1);
sal_Int32 nTimeout = 20;
@@ -267,7 +273,7 @@ SQLRETURN OConnection::Construct(const OUString& url,const Sequence< PropertyVal
}
// XServiceInfo
-IMPLEMENT_SERVICE_INFO(OConnection, "com.sun.star.sdbc.drivers.odbc.OConnection", "com.sun.star.sdbc.Connection")
+IMPLEMENT_SERVICE_INFO(OConnection, u"com.sun.star.sdbc.drivers.odbc.OConnection"_ustr, u"com.sun.star.sdbc.Connection"_ustr)
Reference< XStatement > SAL_CALL OConnection::createStatement( )
@@ -292,19 +298,34 @@ Reference< XPreparedStatement > SAL_CALL OConnection::prepareStatement( const OU
Reference< XPreparedStatement > SAL_CALL OConnection::prepareCall( const OUString& /*sql*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XConnection::prepareCall", *this );
- return nullptr;
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XConnection::prepareCall"_ustr, *this );
}
OUString SAL_CALL OConnection::nativeSQL( const OUString& sql )
{
::osl::MutexGuard aGuard( m_aMutex );
- OString aSql(OUStringToOString(sql,getTextEncoding()));
- char pOut[2048];
SQLINTEGER nOutLen;
- OTools::ThrowException(this,N3SQLNativeSql(m_aConnectionHandle,reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(aSql.getStr())),aSql.getLength(),reinterpret_cast<SDB_ODBC_CHAR*>(pOut),sizeof pOut - 1,&nOutLen),m_aConnectionHandle,SQL_HANDLE_DBC,*this);
- return OUString(pOut,nOutLen,getTextEncoding());
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::NativeSqlW))
+ {
+ SQLWChars nativeSQL(sql);
+ SQLWCHAR pOut[2048];
+ SQLRETURN ret = functions().NativeSqlW(m_aConnectionHandle,
+ nativeSQL.get(), nativeSQL.cch(),
+ pOut, std::size(pOut) - 1, &nOutLen);
+ OTools::ThrowException(this, ret, m_aConnectionHandle, SQL_HANDLE_DBC, *this);
+ return toUString(pOut, nOutLen);
+ }
+ else
+ {
+ SQLChars nativeSQL(sql, getTextEncoding());
+ SQLCHAR pOut[2048];
+ SQLRETURN ret = functions().NativeSql(m_aConnectionHandle,
+ nativeSQL.get(), nativeSQL.cch(),
+ pOut, std::size(pOut) - 1, &nOutLen);
+ OTools::ThrowException(this, ret, m_aConnectionHandle, SQL_HANDLE_DBC, *this);
+ return toUString(pOut, nOutLen, getTextEncoding());
+ }
}
void SAL_CALL OConnection::setAutoCommit( sal_Bool autoCommit )
@@ -312,10 +333,10 @@ void SAL_CALL OConnection::setAutoCommit( sal_Bool autoCommit )
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
- OTools::ThrowException(this,N3SQLSetConnectAttr(m_aConnectionHandle,
+ const sal_IntPtr nAutocommit = autoCommit ? SQL_AUTOCOMMIT_ON : SQL_AUTOCOMMIT_OFF;
+ OTools::ThrowException(this,functions().SetConnectAttr(m_aConnectionHandle,
SQL_ATTR_AUTOCOMMIT,
- reinterpret_cast<SQLPOINTER>((autoCommit) ? SQL_AUTOCOMMIT_ON : SQL_AUTOCOMMIT_OFF) ,SQL_IS_INTEGER),
+ reinterpret_cast<SQLPOINTER>(nAutocommit) ,SQL_IS_INTEGER),
m_aConnectionHandle,SQL_HANDLE_DBC,*this);
}
@@ -326,7 +347,7 @@ sal_Bool SAL_CALL OConnection::getAutoCommit( )
sal_uInt32 nOption = 0;
- OTools::ThrowException(this,N3SQLGetConnectAttr(m_aConnectionHandle,
+ OTools::ThrowException(this,functions().GetConnectAttr(m_aConnectionHandle,
SQL_ATTR_AUTOCOMMIT, &nOption,0,nullptr),m_aConnectionHandle,SQL_HANDLE_DBC,*this);
return nOption == SQL_AUTOCOMMIT_ON ;
}
@@ -337,7 +358,7 @@ void SAL_CALL OConnection::commit( )
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- OTools::ThrowException(this,N3SQLEndTran(SQL_HANDLE_DBC,m_aConnectionHandle,SQL_COMMIT),m_aConnectionHandle,SQL_HANDLE_DBC,*this);
+ OTools::ThrowException(this,functions().EndTran(SQL_HANDLE_DBC,m_aConnectionHandle,SQL_COMMIT),m_aConnectionHandle,SQL_HANDLE_DBC,*this);
}
void SAL_CALL OConnection::rollback( )
@@ -346,7 +367,7 @@ void SAL_CALL OConnection::rollback( )
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- OTools::ThrowException(this,N3SQLEndTran(SQL_HANDLE_DBC,m_aConnectionHandle,SQL_ROLLBACK),m_aConnectionHandle,SQL_HANDLE_DBC,*this);
+ OTools::ThrowException(this,functions().EndTran(SQL_HANDLE_DBC,m_aConnectionHandle,SQL_ROLLBACK),m_aConnectionHandle,SQL_HANDLE_DBC,*this);
}
sal_Bool SAL_CALL OConnection::isClosed( )
@@ -378,7 +399,7 @@ void SAL_CALL OConnection::setReadOnly( sal_Bool readOnly )
OTools::ThrowException(this,
- N3SQLSetConnectAttr(m_aConnectionHandle,SQL_ATTR_ACCESS_MODE,reinterpret_cast< SQLPOINTER >( readOnly ),SQL_IS_INTEGER),
+ functions().SetConnectAttr(m_aConnectionHandle,SQL_ATTR_ACCESS_MODE,reinterpret_cast< SQLPOINTER >( readOnly ),SQL_IS_INTEGER),
m_aConnectionHandle,SQL_HANDLE_DBC,*this);
}
@@ -393,11 +414,20 @@ void SAL_CALL OConnection::setCatalog( const OUString& catalog )
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
- OString aCat(OUStringToOString(catalog,getTextEncoding()));
- OTools::ThrowException(this,
- N3SQLSetConnectAttr(m_aConnectionHandle,SQL_ATTR_CURRENT_CATALOG,const_cast<char *>(aCat.getStr()),SQL_NTS),
- m_aConnectionHandle,SQL_HANDLE_DBC,*this);
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::SetConnectAttrW))
+ {
+ SQLWChars sqlCatalog(catalog);
+ OTools::ThrowException(this,
+ functions().SetConnectAttrW(m_aConnectionHandle, SQL_ATTR_CURRENT_CATALOG, sqlCatalog.get(), SQL_NTSL),
+ m_aConnectionHandle,SQL_HANDLE_DBC,*this);
+ }
+ else
+ {
+ SQLChars sqlCatalog(catalog, getTextEncoding());
+ OTools::ThrowException(this,
+ functions().SetConnectAttr(m_aConnectionHandle,SQL_ATTR_CURRENT_CATALOG,sqlCatalog.get(),SQL_NTS),
+ m_aConnectionHandle,SQL_HANDLE_DBC,*this);
+ }
}
OUString SAL_CALL OConnection::getCatalog( )
@@ -405,14 +435,25 @@ OUString SAL_CALL OConnection::getCatalog( )
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
SQLINTEGER nValueLen;
- char pCat[1024];
- OTools::ThrowException(this,
- N3SQLGetConnectAttr(m_aConnectionHandle,SQL_ATTR_CURRENT_CATALOG,pCat,(sizeof pCat)-1,&nValueLen),
- m_aConnectionHandle,SQL_HANDLE_DBC,*this);
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::GetConnectAttrW))
+ {
+ SQLWCHAR pCat[1024];
+ // SQLGetConnectAttrW gets/returns count of bytes, not characters
+ OTools::ThrowException(this,
+ functions().GetConnectAttrW(m_aConnectionHandle,SQL_ATTR_CURRENT_CATALOG,pCat,sizeof(pCat)-sizeof(SQLWCHAR),&nValueLen),
+ m_aConnectionHandle,SQL_HANDLE_DBC,*this);
+ return toUString(pCat, nValueLen / sizeof(SQLWCHAR));
+ }
+ else
+ {
+ SQLCHAR pCat[1024];
+ OTools::ThrowException(this,
+ functions().GetConnectAttr(m_aConnectionHandle,SQL_ATTR_CURRENT_CATALOG,pCat,sizeof(pCat)-1,&nValueLen),
+ m_aConnectionHandle,SQL_HANDLE_DBC,*this);
- return OUString(pCat,nValueLen,getTextEncoding());
+ return toUString(pCat, nValueLen, getTextEncoding());
+ }
}
void SAL_CALL OConnection::setTransactionIsolation( sal_Int32 level )
@@ -421,9 +462,9 @@ void SAL_CALL OConnection::setTransactionIsolation( sal_Int32 level )
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- OTools::ThrowException(this,N3SQLSetConnectAttr(m_aConnectionHandle,
+ OTools::ThrowException(this,functions().SetConnectAttr(m_aConnectionHandle,
SQL_ATTR_TXN_ISOLATION,
- reinterpret_cast<SQLPOINTER>(level),SQL_IS_INTEGER),
+ reinterpret_cast<SQLPOINTER>(static_cast<sal_IntPtr>(level)),SQL_IS_INTEGER),
m_aConnectionHandle,SQL_HANDLE_DBC,*this);
}
@@ -436,7 +477,7 @@ sal_Int32 SAL_CALL OConnection::getTransactionIsolation( )
sal_Int32 nTxn = 0;
SQLINTEGER nValueLen;
OTools::ThrowException(this,
- N3SQLGetConnectAttr(m_aConnectionHandle,SQL_ATTR_TXN_ISOLATION,&nTxn,sizeof nTxn,&nValueLen),
+ functions().GetConnectAttr(m_aConnectionHandle,SQL_ATTR_TXN_ISOLATION,&nTxn,sizeof nTxn,&nValueLen),
m_aConnectionHandle,SQL_HANDLE_DBC,*this);
return nTxn;
}
@@ -452,7 +493,7 @@ Reference< css::container::XNameAccess > SAL_CALL OConnection::getTypeMap( )
void SAL_CALL OConnection::setTypeMap( const Reference< css::container::XNameAccess >& /*typeMap*/ )
{
- ::dbtools::throwFeatureNotImplementedSQLException( "XConnection::setTypeMap", *this );
+ ::dbtools::throwFeatureNotImplementedSQLException( u"XConnection::setTypeMap"_ustr, *this );
}
// XCloseable
@@ -488,7 +529,7 @@ void OConnection::disposing()
m_aConnections.clear();
if(!m_bClosed)
- N3SQLDisconnect(m_aConnectionHandle);
+ functions().Disconnect(m_aConnectionHandle);
m_bClosed = true;
}
@@ -503,7 +544,7 @@ SQLHANDLE OConnection::createStatementHandle()
{
rtl::Reference xConnection(new OConnection(m_pDriverHandleCopy,m_xDriver.get()));
xConnection->Construct(m_sURL,getConnectionInfo());
- xConnectionTemp = xConnection;
+ xConnectionTemp = std::move(xConnection);
bNew = true;
}
}
@@ -512,7 +553,7 @@ SQLHANDLE OConnection::createStatementHandle()
}
SQLHANDLE aStatementHandle = SQL_NULL_HANDLE;
- N3SQLAllocHandle(SQL_HANDLE_STMT,xConnectionTemp->getConnection(),&aStatementHandle);
+ functions().AllocHandle(SQL_HANDLE_STMT,xConnectionTemp->getConnection(),&aStatementHandle);
++m_nStatementCount;
if(bNew)
m_aConnections.emplace(aStatementHandle,xConnectionTemp);
@@ -528,10 +569,10 @@ void OConnection::freeStatementHandle(SQLHANDLE& _pHandle)
auto aFind = m_aConnections.find(_pHandle);
- N3SQLFreeStmt(_pHandle,SQL_RESET_PARAMS);
- N3SQLFreeStmt(_pHandle,SQL_UNBIND);
- N3SQLFreeStmt(_pHandle,SQL_CLOSE);
- N3SQLFreeHandle(SQL_HANDLE_STMT,_pHandle);
+ functions().FreeStmt(_pHandle,SQL_RESET_PARAMS);
+ functions().FreeStmt(_pHandle,SQL_UNBIND);
+ functions().FreeStmt(_pHandle,SQL_CLOSE);
+ functions().FreeHandle(SQL_HANDLE_STMT,_pHandle);
_pHandle = SQL_NULL_HANDLE;
diff --git a/connectivity/source/drivers/odbc/ODatabaseMetaData.cxx b/connectivity/source/drivers/odbc/ODatabaseMetaData.cxx
index 957142027182..97cd0b1b33d9 100644
--- a/connectivity/source/drivers/odbc/ODatabaseMetaData.cxx
+++ b/connectivity/source/drivers/odbc/ODatabaseMetaData.cxx
@@ -28,11 +28,10 @@
#include <TPrivilegesResultSet.hxx>
#include <rtl/ustrbuf.hxx>
#include <sal/log.hxx>
+#include <o3tl/string_view.hxx>
using namespace connectivity::odbc;
using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
-using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
ODatabaseMetaData::ODatabaseMetaData(const SQLHANDLE _pHandle,OConnection* _pCon)
@@ -41,7 +40,7 @@ ODatabaseMetaData::ODatabaseMetaData(const SQLHANDLE _pHandle,OConnection* _pCon
,m_pConnection(_pCon)
,m_bUseCatalog(true)
{
- OSL_ENSURE(m_pConnection,"ODatabaseMetaData::ODatabaseMetaData: No connection set!");
+ assert(m_pConnection && "ODatabaseMetaData::ODatabaseMetaData: No connection set!");
if(!m_pConnection->isCatalogUsed())
{
osl_atomic_increment( &m_refCount );
@@ -1241,7 +1240,7 @@ sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMajorVersion( ) try
{
OUString aValue;
OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_DRIVER_VER,aValue,*this,m_pConnection->getTextEncoding());
- return aValue.copy(0,aValue.indexOf('.')).toInt32();
+ return o3tl::toInt32(aValue.subView(0,aValue.indexOf('.')));
}
catch (const SQLException &)
{
@@ -1277,7 +1276,7 @@ sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMinorVersion( ) try
{
OUString aValue;
OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_DRIVER_VER,aValue,*this,m_pConnection->getTextEncoding());
- return aValue.copy(0,aValue.lastIndexOf('.')).toInt32();
+ return o3tl::toInt32(aValue.subView(0,aValue.lastIndexOf('.')));
}
catch (const SQLException &)
{
diff --git a/connectivity/source/drivers/odbc/ODatabaseMetaDataResultSet.cxx b/connectivity/source/drivers/odbc/ODatabaseMetaDataResultSet.cxx
index ae6eeb4fddeb..bc5b08f5550d 100644
--- a/connectivity/source/drivers/odbc/ODatabaseMetaDataResultSet.cxx
+++ b/connectivity/source/drivers/odbc/ODatabaseMetaDataResultSet.cxx
@@ -24,6 +24,7 @@
#include <comphelper/property.hxx>
#include <cppuhelper/typeprovider.hxx>
#include <comphelper/sequence.hxx>
+#include <comphelper/stl_types.hxx>
#include <odbc/OResultSetMetaData.hxx>
#include <odbc/OTools.hxx>
#include <comphelper/types.hxx>
@@ -47,7 +48,6 @@ ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet(OConnection* _pConnection
,OPropertySetHelper(ODatabaseMetaDataResultSet_BASE::rBHelper)
,m_aStatementHandle(_pConnection->createStatementHandle())
- ,m_aStatement(nullptr)
,m_pConnection(_pConnection)
,m_nTextEncoding(_pConnection->getTextEncoding())
,m_nRowPos(-1)
@@ -84,7 +84,6 @@ void ODatabaseMetaDataResultSet::disposing()
m_pConnection->freeStatementHandle(m_aStatementHandle);
- m_aStatement = nullptr;
m_xMetaData.clear();
m_pConnection.clear();
}
@@ -151,8 +150,6 @@ sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::findColumn( const OUString& colum
}
::dbtools::throwInvalidColumnException( columnName, *this );
- assert(false);
- return 0; // Never reached
}
template < typename T, SQLSMALLINT sqlTypeId > T ODatabaseMetaDataResultSet::getInteger ( sal_Int32 columnIndex )
@@ -182,17 +179,14 @@ template < typename T, SQLSMALLINT sqlTypeId > T ODatabaseMetaDataResultSet::get
Reference< css::io::XInputStream > SAL_CALL ODatabaseMetaDataResultSet::getBinaryStream( sal_Int32 /*columnIndex*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getBinaryStream", *this );
- return nullptr;
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getBinaryStream"_ustr, *this );
}
Reference< css::io::XInputStream > SAL_CALL ODatabaseMetaDataResultSet::getCharacterStream( sal_Int32 /*columnIndex*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getCharacterStream", *this );
- return nullptr;
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getCharacterStream"_ustr, *this );
}
-
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::getBoolean( sal_Int32 columnIndex )
{
@@ -245,7 +239,7 @@ Sequence< sal_Int8 > SAL_CALL ODatabaseMetaDataResultSet::getBytes( sal_Int32 co
case DataType::VARCHAR:
case DataType::LONGVARCHAR:
{
- OUString const & aRet = OTools::getStringValue(m_pConnection.get(),m_aStatementHandle,columnIndex,SQL_C_BINARY,m_bWasNull,**this,m_nTextEncoding);
+ OUString const aRet = OTools::getStringValue(m_pConnection.get(),m_aStatementHandle,columnIndex,SQL_C_BINARY,m_bWasNull,**this,m_nTextEncoding);
return Sequence<sal_Int8>(reinterpret_cast<const sal_Int8*>(aRet.getStr()),sizeof(sal_Unicode)*aRet.getLength());
}
}
@@ -342,34 +336,29 @@ Reference< XResultSetMetaData > SAL_CALL ODatabaseMetaDataResultSet::getMetaData
Reference< XArray > SAL_CALL ODatabaseMetaDataResultSet::getArray( sal_Int32 /*columnIndex*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getArray", *this );
- return nullptr;
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getArray"_ustr, *this );
}
Reference< XClob > SAL_CALL ODatabaseMetaDataResultSet::getClob( sal_Int32 /*columnIndex*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getClob", *this );
- return nullptr;
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getClob"_ustr, *this );
}
Reference< XBlob > SAL_CALL ODatabaseMetaDataResultSet::getBlob( sal_Int32 /*columnIndex*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getBlob", *this );
- return nullptr;
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getBlob"_ustr, *this );
}
Reference< XRef > SAL_CALL ODatabaseMetaDataResultSet::getRef( sal_Int32 /*columnIndex*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getRef", *this );
- return nullptr;
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getRef"_ustr, *this );
}
Any SAL_CALL ODatabaseMetaDataResultSet::getObject( sal_Int32 /*columnIndex*/, const Reference< css::container::XNameAccess >& /*typeMap*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getObject", *this );
- return Any();
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getObject"_ustr, *this );
}
@@ -506,7 +495,7 @@ sal_Bool SAL_CALL ODatabaseMetaDataResultSet::first( )
m_bEOF = false;
- m_nCurrentFetchState = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_FIRST,0);
+ m_nCurrentFetchState = functions().FetchScroll(m_aStatementHandle,SQL_FETCH_FIRST,0);
OTools::ThrowException(m_pConnection.get(),m_nCurrentFetchState,m_aStatementHandle,SQL_HANDLE_STMT,*this);
bool bRet = ( m_nCurrentFetchState == SQL_SUCCESS || m_nCurrentFetchState == SQL_SUCCESS_WITH_INFO );
if( bRet )
@@ -521,7 +510,7 @@ sal_Bool SAL_CALL ODatabaseMetaDataResultSet::last( )
::osl::MutexGuard aGuard( m_aMutex );
- m_nCurrentFetchState = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_LAST,0);
+ m_nCurrentFetchState = functions().FetchScroll(m_aStatementHandle,SQL_FETCH_LAST,0);
OTools::ThrowException(m_pConnection.get(),m_nCurrentFetchState,m_aStatementHandle,SQL_HANDLE_STMT,*this);
// here I know definitely that I stand on the last record
bool bRet = ( m_nCurrentFetchState == SQL_SUCCESS || m_nCurrentFetchState == SQL_SUCCESS_WITH_INFO );
@@ -538,7 +527,7 @@ sal_Bool SAL_CALL ODatabaseMetaDataResultSet::absolute( sal_Int32 row )
m_bEOF = false;
- m_nCurrentFetchState = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_ABSOLUTE,row);
+ m_nCurrentFetchState = functions().FetchScroll(m_aStatementHandle,SQL_FETCH_ABSOLUTE,row);
OTools::ThrowException(m_pConnection.get(),m_nCurrentFetchState,m_aStatementHandle,SQL_HANDLE_STMT,*this);
bool bRet = m_nCurrentFetchState == SQL_SUCCESS || m_nCurrentFetchState == SQL_SUCCESS_WITH_INFO;
if(bRet)
@@ -554,7 +543,7 @@ sal_Bool SAL_CALL ODatabaseMetaDataResultSet::relative( sal_Int32 row )
m_bEOF = false;
- m_nCurrentFetchState = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_RELATIVE,row);
+ m_nCurrentFetchState = functions().FetchScroll(m_aStatementHandle,SQL_FETCH_RELATIVE,row);
OTools::ThrowException(m_pConnection.get(),m_nCurrentFetchState,m_aStatementHandle,SQL_HANDLE_STMT,*this);
bool bRet = m_nCurrentFetchState == SQL_SUCCESS || m_nCurrentFetchState == SQL_SUCCESS_WITH_INFO;
if(bRet)
@@ -570,7 +559,7 @@ sal_Bool SAL_CALL ODatabaseMetaDataResultSet::previous( )
m_bEOF = false;
- m_nCurrentFetchState = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_PRIOR,0);
+ m_nCurrentFetchState = functions().FetchScroll(m_aStatementHandle,SQL_FETCH_PRIOR,0);
OTools::ThrowException(m_pConnection.get(),m_nCurrentFetchState,m_aStatementHandle,SQL_HANDLE_STMT,*this);
bool bRet = m_nCurrentFetchState == SQL_SUCCESS || m_nCurrentFetchState == SQL_SUCCESS_WITH_INFO;
if(bRet)
@@ -636,8 +625,8 @@ sal_Bool SAL_CALL ODatabaseMetaDataResultSet::next( )
m_bEOF = false;
SQLRETURN nOldFetchStatus = m_nCurrentFetchState;
- // m_nCurrentFetchState = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_NEXT,0);
- m_nCurrentFetchState = N3SQLFetch(m_aStatementHandle);
+ // m_nCurrentFetchState = functions().FetchScroll(m_aStatementHandle,SQL_FETCH_NEXT,0);
+ m_nCurrentFetchState = functions().Fetch(m_aStatementHandle);
OTools::ThrowException(m_pConnection.get(),m_nCurrentFetchState,m_aStatementHandle,SQL_HANDLE_STMT,*this);
bool bRet = m_nCurrentFetchState == SQL_SUCCESS || m_nCurrentFetchState == SQL_SUCCESS_WITH_INFO;
if(bRet || ( m_nCurrentFetchState == SQL_NO_DATA && nOldFetchStatus != SQL_NO_DATA ) )
@@ -672,7 +661,7 @@ void SAL_CALL ODatabaseMetaDataResultSet::cancel( )
::osl::MutexGuard aGuard( m_aMutex );
- N3SQLCancel(m_aStatementHandle);
+ functions().Cancel(m_aStatementHandle);
}
void SAL_CALL ODatabaseMetaDataResultSet::clearWarnings( )
@@ -689,30 +678,50 @@ sal_Int32 ODatabaseMetaDataResultSet::getFetchSize()
return 1;
}
-OUString ODatabaseMetaDataResultSet::getCursorName()
+const OUString & ODatabaseMetaDataResultSet::getCursorName()
{
- return OUString();
+ return EMPTY_OUSTRING;
}
::cppu::IPropertyArrayHelper* ODatabaseMetaDataResultSet::createArrayHelper( ) const
{
- Sequence< css::beans::Property > aProps(5);
- css::beans::Property* pProperties = aProps.getArray();
- sal_Int32 nPos = 0;
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
- PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
- PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
- PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
- PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
- PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0);
-
- return new ::cppu::OPropertyArrayHelper(aProps);
+ return new ::cppu::OPropertyArrayHelper
+ {
+ {
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
+ PROPERTY_ID_CURSORNAME,
+ cppu::UnoType<OUString>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
+ PROPERTY_ID_FETCHDIRECTION,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
+ PROPERTY_ID_FETCHSIZE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
+ PROPERTY_ID_RESULTSETCONCURRENCY,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
+ PROPERTY_ID_RESULTSETTYPE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ }
+ }
+ };
}
::cppu::IPropertyArrayHelper & ODatabaseMetaDataResultSet::getInfoHelper()
@@ -815,55 +824,59 @@ void ODatabaseMetaDataResultSet::openTypeInfo()
aMap[SQL_GUID] = DataType::VARBINARY;
- m_aValueRange[2] = aMap;
+ m_aValueRange[2] = std::move(aMap);
- OTools::ThrowException(m_pConnection.get(),N3SQLGetTypeInfo(m_aStatementHandle, SQL_ALL_TYPES),m_aStatementHandle,SQL_HANDLE_STMT,*this);
+ OTools::ThrowException(m_pConnection.get(),functions().GetTypeInfo(m_aStatementHandle, SQL_ALL_TYPES),m_aStatementHandle,SQL_HANDLE_STMT,*this);
checkColumnCount();
}
void ODatabaseMetaDataResultSet::openTables(const Any& catalog, const OUString& schemaPattern,
- std::u16string_view tableNamePattern,
+ const OUString& tableNamePattern,
const Sequence< OUString >& types )
{
- OString aPKQ,aPKO,aPKN,aCOL;
- const OUString *pSchemaPat = nullptr;
-
- if(schemaPattern != "%")
- pSchemaPat = &schemaPattern;
- else
- pSchemaPat = nullptr;
-
- if ( catalog.hasValue() )
- aPKQ = OUStringToOString(comphelper::getString(catalog),m_nTextEncoding);
- aPKO = OUStringToOString(schemaPattern,m_nTextEncoding);
- aPKN = OUStringToOString(tableNamePattern,m_nTextEncoding);
-
- const char *pPKQ = catalog.hasValue() && !aPKQ.isEmpty() ? aPKQ.getStr() : nullptr,
- *pPKO = pSchemaPat && !pSchemaPat->isEmpty() && !aPKO.isEmpty() ? aPKO.getStr() : nullptr,
- *pPKN = aPKN.getStr();
-
-
- const char *pCOL = nullptr;
- const char* const pComma = ",";
- const OUString* pBegin = types.getConstArray();
- const OUString* pEnd = pBegin + types.getLength();
- for(;pBegin != pEnd;++pBegin)
+ OUString uPKQ;
+ catalog >>= uPKQ;
+ OUStringBuffer uCOL;
+ comphelper::intersperse(types.begin(), types.end(), comphelper::OUStringBufferAppender(uCOL), u",");
+ SQLRETURN nRetcode;
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::TablesW))
{
- aCOL += OUStringToOString(*pBegin,m_nTextEncoding) + pComma;
+ SQLWChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLWChars(uPKQ);
+ if (!schemaPattern.isEmpty() && schemaPattern != "%")
+ aPKO = SQLWChars(schemaPattern);
+ SQLWChars aPKN(tableNamePattern);
+ SQLWChars aCOL = !uCOL.isEmpty() ? SQLWChars(uCOL.makeStringAndClear()) : SQLWChars(u"" SQL_ALL_TABLE_TYPES ""_ustr);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().TablesW(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTSL : 0,
+ pPKO, pPKO ? SQL_NTSL : 0,
+ aPKN.get(), SQL_NTSL,
+ aCOL.get(), SQL_NTSL);
}
- if ( !aCOL.isEmpty() )
+ else
{
- aCOL = aCOL.replaceAt(aCOL.getLength()-1,1,pComma);
- pCOL = aCOL.getStr();
+ SQLChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLChars(uPKQ, m_nTextEncoding);
+ if (!schemaPattern.isEmpty() && schemaPattern != "%")
+ aPKO = SQLChars(schemaPattern, m_nTextEncoding);
+ SQLChars aPKN(tableNamePattern, m_nTextEncoding);
+ SQLChars aCOL = !uCOL.isEmpty() ? SQLChars(uCOL, m_nTextEncoding) : SQLChars(SQL_ALL_TABLE_TYPES ""_ostr);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().Tables(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTS : 0,
+ pPKO, pPKO ? SQL_NTS : 0,
+ aPKN.get(), SQL_NTS,
+ aCOL.get(), SQL_NTS);
}
- else
- pCOL = SQL_ALL_TABLE_TYPES;
-
- SQLRETURN nRetcode = N3SQLTables(m_aStatementHandle,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKQ)), (catalog.hasValue() && !aPKQ.isEmpty()) ? SQL_NTS : 0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKO)), pPKO ? SQL_NTS : 0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKN)), SQL_NTS,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pCOL)), pCOL ? SQL_NTS : 0);
OTools::ThrowException(m_pConnection.get(),nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this);
checkColumnCount();
@@ -871,11 +884,23 @@ void ODatabaseMetaDataResultSet::openTables(const Any& catalog, const OUString&
void ODatabaseMetaDataResultSet::openTablesTypes( )
{
- SQLRETURN nRetcode = N3SQLTables(m_aStatementHandle,
- nullptr,0,
- nullptr,0,
- nullptr,0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(SQL_ALL_TABLE_TYPES)),SQL_NTS);
+ SQLRETURN nRetcode;
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::TablesW))
+ {
+ nRetcode = functions().TablesW(m_aStatementHandle,
+ nullptr, 0,
+ nullptr, 0,
+ nullptr, 0,
+ SQLWChars(u"" SQL_ALL_TABLE_TYPES ""_ustr).get(), SQL_NTSL);
+ }
+ else
+ {
+ nRetcode = functions().Tables(m_aStatementHandle,
+ nullptr,0,
+ nullptr,0,
+ nullptr,0,
+ SQLChars(SQL_ALL_TABLE_TYPES ""_ostr).get(), SQL_NTS);
+ }
OTools::ThrowException(m_pConnection.get(),nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this);
m_aColMapping.clear();
@@ -887,12 +912,23 @@ void ODatabaseMetaDataResultSet::openTablesTypes( )
void ODatabaseMetaDataResultSet::openCatalogs()
{
- SQLRETURN nRetcode = N3SQLTables(m_aStatementHandle,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(SQL_ALL_CATALOGS)),SQL_NTS,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>("")),SQL_NTS,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>("")),SQL_NTS,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>("")),SQL_NTS);
-
+ SQLRETURN nRetcode;
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::TablesW))
+ {
+ nRetcode = functions().TablesW(m_aStatementHandle,
+ SQLWChars(u"" SQL_ALL_CATALOGS ""_ustr).get(), SQL_NTSL,
+ SQLWChars(u""_ustr).get(), SQL_NTSL,
+ SQLWChars(u""_ustr).get(), SQL_NTSL,
+ SQLWChars(u""_ustr).get(), SQL_NTSL);
+ }
+ else
+ {
+ nRetcode = functions().Tables(m_aStatementHandle,
+ SQLChars(SQL_ALL_CATALOGS ""_ostr).get(), SQL_NTS,
+ SQLChars(""_ostr).get(), SQL_NTS,
+ SQLChars(""_ostr).get(), SQL_NTS,
+ SQLChars(""_ostr).get(), SQL_NTS);
+ }
OTools::ThrowException(m_pConnection.get(),nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this);
m_aColMapping.clear();
@@ -904,11 +940,23 @@ void ODatabaseMetaDataResultSet::openCatalogs()
void ODatabaseMetaDataResultSet::openSchemas()
{
- SQLRETURN nRetcode = N3SQLTables(m_aStatementHandle,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>("")),SQL_NTS,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(SQL_ALL_SCHEMAS)),SQL_NTS,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>("")),SQL_NTS,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>("")),SQL_NTS);
+ SQLRETURN nRetcode;
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::TablesW))
+ {
+ nRetcode = functions().TablesW(m_aStatementHandle,
+ SQLWChars(u""_ustr).get(), SQL_NTSL,
+ SQLWChars(u"" SQL_ALL_SCHEMAS ""_ustr).get(), SQL_NTSL,
+ SQLWChars(u""_ustr).get(),SQL_NTSL,
+ SQLWChars(u""_ustr).get(),SQL_NTSL);
+ }
+ else
+ {
+ nRetcode = functions().Tables(m_aStatementHandle,
+ SQLChars(""_ostr).get(), SQL_NTS,
+ SQLChars(SQL_ALL_SCHEMAS ""_ostr).get(), SQL_NTS,
+ SQLChars(""_ostr).get(), SQL_NTS,
+ SQLChars(""_ostr).get(), SQL_NTS);
+ }
OTools::ThrowException(m_pConnection.get(),nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this);
m_aColMapping.clear();
@@ -919,69 +967,99 @@ void ODatabaseMetaDataResultSet::openSchemas()
}
void ODatabaseMetaDataResultSet::openColumnPrivileges( const Any& catalog, const OUString& schema,
- std::u16string_view table,
- std::u16string_view columnNamePattern )
+ const OUString& table,
+ const OUString& columnNamePattern )
{
- const OUString *pSchemaPat = nullptr;
-
- if(schema != "%")
- pSchemaPat = &schema;
+ OUString uPKQ;
+ catalog >>= uPKQ;
+ SQLRETURN nRetcode;
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::ColumnPrivilegesW))
+ {
+ SQLWChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLWChars(uPKQ);
+ if (!schema.isEmpty() && schema != "%")
+ aPKO = SQLWChars(schema);
+ SQLWChars aPKN(table);
+ SQLWChars aCOL(columnNamePattern);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().ColumnPrivilegesW(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTSL : 0,
+ pPKO, pPKO ? SQL_NTSL : 0,
+ aPKN.get(), SQL_NTSL,
+ aCOL.get(), SQL_NTSL);
+ }
else
- pSchemaPat = nullptr;
-
- OString aPKQ,aPKO,aPKN,aCOL;
-
- if ( catalog.hasValue() )
- aPKQ = OUStringToOString(comphelper::getString(catalog),m_nTextEncoding);
- aPKO = OUStringToOString(schema,m_nTextEncoding);
- aPKN = OUStringToOString(table,m_nTextEncoding);
- aCOL = OUStringToOString(columnNamePattern,m_nTextEncoding);
-
- const char *pPKQ = catalog.hasValue() && !aPKQ.isEmpty() ? aPKQ.getStr() : nullptr,
- *pPKO = pSchemaPat && !pSchemaPat->isEmpty() && !aPKO.isEmpty() ? aPKO.getStr() : nullptr,
- *pPKN = aPKN.getStr(),
- *pCOL = aCOL.getStr();
-
-
- SQLRETURN nRetcode = N3SQLColumnPrivileges(m_aStatementHandle,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKQ)), (catalog.hasValue() && !aPKQ.isEmpty()) ? SQL_NTS : 0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKO)), pPKO ? SQL_NTS : 0 ,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKN)), SQL_NTS,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pCOL)), SQL_NTS);
+ {
+ SQLChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLChars(uPKQ, m_nTextEncoding);
+ if (!schema.isEmpty() && schema != "%")
+ aPKO = SQLChars(schema, m_nTextEncoding);
+ SQLChars aPKN(table, m_nTextEncoding);
+ SQLChars aCOL(columnNamePattern, m_nTextEncoding);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().ColumnPrivileges(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTS : 0,
+ pPKO, pPKO ? SQL_NTS : 0,
+ aPKN.get(), SQL_NTS,
+ aCOL.get(), SQL_NTS);
+ }
OTools::ThrowException(m_pConnection.get(),nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this);
checkColumnCount();
}
void ODatabaseMetaDataResultSet::openColumns( const Any& catalog, const OUString& schemaPattern,
- std::u16string_view tableNamePattern, std::u16string_view columnNamePattern )
+ const OUString& tableNamePattern, const OUString& columnNamePattern )
{
- const OUString *pSchemaPat = nullptr;
-
- if(schemaPattern != "%")
- pSchemaPat = &schemaPattern;
+ OUString uPKQ;
+ catalog >>= uPKQ;
+ SQLRETURN nRetcode;
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::ColumnsW))
+ {
+ SQLWChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLWChars(uPKQ);
+ if (!schemaPattern.isEmpty() && schemaPattern != "%")
+ aPKO = SQLWChars(schemaPattern);
+ SQLWChars aPKN(tableNamePattern);
+ SQLWChars aCOL(columnNamePattern);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().ColumnsW(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTSL : 0,
+ pPKO, pPKO ? SQL_NTSL : 0,
+ aPKN.get(), SQL_NTSL,
+ aCOL.get(), SQL_NTSL);
+ }
else
- pSchemaPat = nullptr;
-
- OString aPKQ,aPKO,aPKN,aCOL;
- if ( catalog.hasValue() )
- aPKQ = OUStringToOString(comphelper::getString(catalog),m_nTextEncoding);
- aPKO = OUStringToOString(schemaPattern,m_nTextEncoding);
- aPKN = OUStringToOString(tableNamePattern,m_nTextEncoding);
- aCOL = OUStringToOString(columnNamePattern,m_nTextEncoding);
-
- const char *pPKQ = catalog.hasValue() && !aPKQ.isEmpty() ? aPKQ.getStr() : nullptr,
- *pPKO = pSchemaPat && !pSchemaPat->isEmpty() && !aPKO.isEmpty() ? aPKO.getStr() : nullptr,
- *pPKN = aPKN.getStr(),
- *pCOL = aCOL.getStr();
-
-
- SQLRETURN nRetcode = N3SQLColumns(m_aStatementHandle,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKQ)), (catalog.hasValue() && !aPKQ.isEmpty()) ? SQL_NTS : 0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKO)), pPKO ? SQL_NTS : 0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKN)), SQL_NTS,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pCOL)), SQL_NTS);
-
+ {
+ SQLChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLChars(uPKQ, m_nTextEncoding);
+ if (!schemaPattern.isEmpty() && schemaPattern != "%")
+ aPKO = SQLChars(schemaPattern, m_nTextEncoding);
+ SQLChars aPKN(tableNamePattern, m_nTextEncoding);
+ SQLChars aCOL(columnNamePattern, m_nTextEncoding);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().Columns(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTS : 0,
+ pPKO, pPKO ? SQL_NTS : 0,
+ aPKN.get(), SQL_NTS,
+ aCOL.get(), SQL_NTS);
+ }
OTools::ThrowException(m_pConnection.get(),nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this);
::std::map<sal_Int32,sal_Int32> aMap;
aMap[SQL_BIT] = DataType::BIT;
@@ -1016,79 +1094,108 @@ void ODatabaseMetaDataResultSet::openColumns( const Any& catalog,
aMap[SQL_GUID] = DataType::VARBINARY;
- m_aValueRange[5] = aMap;
+ m_aValueRange[5] = std::move(aMap);
checkColumnCount();
}
void ODatabaseMetaDataResultSet::openProcedureColumns( const Any& catalog, const OUString& schemaPattern,
- std::u16string_view procedureNamePattern,std::u16string_view columnNamePattern )
+ const OUString& procedureNamePattern,const OUString& columnNamePattern )
{
- const OUString *pSchemaPat = nullptr;
-
- if(schemaPattern != "%")
- pSchemaPat = &schemaPattern;
+ OUString uPKQ;
+ catalog >>= uPKQ;
+ SQLRETURN nRetcode;
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::ProcedureColumnsW))
+ {
+ SQLWChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLWChars(uPKQ);
+ if (!schemaPattern.isEmpty() && schemaPattern != "%")
+ aPKO = SQLWChars(schemaPattern);
+ SQLWChars aPKN(procedureNamePattern);
+ SQLWChars aCOL(columnNamePattern);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().ProcedureColumnsW(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTSL : 0,
+ pPKO, pPKO ? SQL_NTSL : 0,
+ aPKN.get(), SQL_NTSL,
+ aCOL.get(), SQL_NTSL);
+ }
else
- pSchemaPat = nullptr;
-
- OString aPKQ,aPKO,aPKN,aCOL;
- if ( catalog.hasValue() )
- aPKQ = OUStringToOString(comphelper::getString(catalog),m_nTextEncoding);
- aPKO = OUStringToOString(schemaPattern,m_nTextEncoding);
- aPKN = OUStringToOString(procedureNamePattern,m_nTextEncoding);
- aCOL = OUStringToOString(columnNamePattern,m_nTextEncoding);
-
- const char *pPKQ = catalog.hasValue() && !aPKQ.isEmpty() ? aPKQ.getStr() : nullptr,
- *pPKO = pSchemaPat && !pSchemaPat->isEmpty() && !aPKO.isEmpty() ? aPKO.getStr() : nullptr,
- *pPKN = aPKN.getStr(),
- *pCOL = aCOL.getStr();
-
-
- SQLRETURN nRetcode = N3SQLProcedureColumns(m_aStatementHandle,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKQ)), (catalog.hasValue() && !aPKQ.isEmpty()) ? SQL_NTS : 0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKO)), pPKO ? SQL_NTS : 0 ,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKN)), SQL_NTS,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pCOL)), SQL_NTS);
-
+ {
+ SQLChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLChars(uPKQ, m_nTextEncoding);
+ if (!schemaPattern.isEmpty() && schemaPattern != "%")
+ aPKO = SQLChars(schemaPattern, m_nTextEncoding);
+ SQLChars aPKN(procedureNamePattern, m_nTextEncoding);
+ SQLChars aCOL(columnNamePattern, m_nTextEncoding);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().ProcedureColumns(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTS : 0,
+ pPKO, pPKO ? SQL_NTS : 0,
+ aPKN.get(), SQL_NTS,
+ aCOL.get(), SQL_NTS);
+ }
OTools::ThrowException(m_pConnection.get(),nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this);
checkColumnCount();
}
void ODatabaseMetaDataResultSet::openProcedures(const Any& catalog, const OUString& schemaPattern,
- std::u16string_view procedureNamePattern)
+ const OUString& procedureNamePattern)
{
- const OUString *pSchemaPat = nullptr;
-
- if(schemaPattern != "%")
- pSchemaPat = &schemaPattern;
+ OUString uPKQ;
+ catalog >>= uPKQ;
+ SQLRETURN nRetcode;
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::ProceduresW))
+ {
+ SQLWChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLWChars(uPKQ);
+ if (!schemaPattern.isEmpty() && schemaPattern != "%")
+ aPKO = SQLWChars(schemaPattern);
+ SQLWChars aPKN(procedureNamePattern);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().ProceduresW(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTSL : 0,
+ pPKO, pPKO ? SQL_NTSL : 0,
+ aPKN.get(), SQL_NTSL);
+ }
else
- pSchemaPat = nullptr;
-
- OString aPKQ,aPKO,aPKN;
-
- if ( catalog.hasValue() )
- aPKQ = OUStringToOString(comphelper::getString(catalog),m_nTextEncoding);
- aPKO = OUStringToOString(schemaPattern,m_nTextEncoding);
- aPKN = OUStringToOString(procedureNamePattern,m_nTextEncoding);
-
- const char *pPKQ = catalog.hasValue() && !aPKQ.isEmpty() ? aPKQ.getStr() : nullptr,
- *pPKO = pSchemaPat && !pSchemaPat->isEmpty() && !aPKO.isEmpty() ? aPKO.getStr() : nullptr,
- *pPKN = aPKN.getStr();
-
-
- SQLRETURN nRetcode = N3SQLProcedures(m_aStatementHandle,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKQ)), (catalog.hasValue() && !aPKQ.isEmpty()) ? SQL_NTS : 0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKO)), pPKO ? SQL_NTS : 0 ,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKN)), SQL_NTS);
+ {
+ SQLChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLChars(uPKQ, m_nTextEncoding);
+ if (!schemaPattern.isEmpty() && schemaPattern != "%")
+ aPKO = SQLChars(schemaPattern, m_nTextEncoding);
+ SQLChars aPKN(procedureNamePattern, m_nTextEncoding);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().Procedures(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTS : 0,
+ pPKO, pPKO ? SQL_NTS : 0,
+ aPKN.get(), SQL_NTS);
+ }
OTools::ThrowException(m_pConnection.get(),nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this);
checkColumnCount();
}
void ODatabaseMetaDataResultSet::openSpecialColumns(bool _bRowVer,const Any& catalog, const OUString& schema,
- std::u16string_view table,sal_Int32 scope, bool nullable )
+ const OUString& table,sal_Int32 scope, bool nullable )
{
// Some ODBC drivers really don't like getting an empty string as tableName
// E.g. psqlodbc up to at least version 09.01.0100 segfaults
- if (table.empty())
+ if (table.isEmpty())
{
static constexpr OUStringLiteral errMsg
= u"ODBC: Trying to get special columns of empty table name";
@@ -1096,42 +1203,59 @@ void ODatabaseMetaDataResultSet::openSpecialColumns(bool _bRowVer,const Any& cat
throw SQLException( errMsg, *this, SQLState, -1, Any() );
}
- const OUString *pSchemaPat = nullptr;
-
- if(schema != "%")
- pSchemaPat = &schema;
+ OUString uPKQ;
+ catalog >>= uPKQ;
+ SQLRETURN nRetcode;
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::SpecialColumnsW))
+ {
+ SQLWChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLWChars(uPKQ);
+ if (!schema.isEmpty() && schema != "%")
+ aPKO = SQLWChars(schema);
+ SQLWChars aPKN(table);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().SpecialColumnsW(m_aStatementHandle, _bRowVer ? SQL_ROWVER : SQL_BEST_ROWID,
+ pPKQ, pPKQ ? SQL_NTSL : 0,
+ pPKO, pPKO ? SQL_NTSL : 0,
+ aPKN.get(), SQL_NTSL,
+ scope,
+ nullable ? SQL_NULLABLE : SQL_NO_NULLS);
+ }
else
- pSchemaPat = nullptr;
-
- OString aPKQ,aPKO,aPKN;
- if ( catalog.hasValue() )
- aPKQ = OUStringToOString(comphelper::getString(catalog),m_nTextEncoding);
- aPKO = OUStringToOString(schema,m_nTextEncoding);
- aPKN = OUStringToOString(table,m_nTextEncoding);
-
- const char *pPKQ = catalog.hasValue() && !aPKQ.isEmpty() ? aPKQ.getStr() : nullptr,
- *pPKO = pSchemaPat && !pSchemaPat->isEmpty() && !aPKO.isEmpty() ? aPKO.getStr() : nullptr,
- *pPKN = aPKN.getStr();
-
-
- SQLRETURN nRetcode = N3SQLSpecialColumns(m_aStatementHandle,_bRowVer ? SQL_ROWVER : SQL_BEST_ROWID,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKQ)), (catalog.hasValue() && !aPKQ.isEmpty()) ? SQL_NTS : 0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKO)), pPKO ? SQL_NTS : 0 ,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKN)), SQL_NTS,
- static_cast<SQLSMALLINT>(scope),
- nullable ? SQL_NULLABLE : SQL_NO_NULLS);
+ {
+ SQLChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLChars(uPKQ, m_nTextEncoding);
+ if (!schema.isEmpty() && schema != "%")
+ aPKO = SQLChars(schema, m_nTextEncoding);
+ SQLChars aPKN(table, m_nTextEncoding);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().SpecialColumns(m_aStatementHandle, _bRowVer ? SQL_ROWVER : SQL_BEST_ROWID,
+ pPKQ, pPKQ ? SQL_NTS : 0,
+ pPKO, pPKO ? SQL_NTS : 0,
+ aPKN.get(), SQL_NTS,
+ static_cast<SQLSMALLINT>(scope),
+ nullable ? SQL_NULLABLE : SQL_NO_NULLS);
+ }
OTools::ThrowException(m_pConnection.get(),nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this);
checkColumnCount();
}
void ODatabaseMetaDataResultSet::openVersionColumns(const Any& catalog, const OUString& schema,
- std::u16string_view table)
+ const OUString& table)
{
openSpecialColumns(true,catalog,schema,table,SQL_SCOPE_TRANSACTION,false);
}
void ODatabaseMetaDataResultSet::openBestRowIdentifier( const Any& catalog, const OUString& schema,
- std::u16string_view table,sal_Int32 scope,bool nullable )
+ const OUString& table,sal_Int32 scope,bool nullable )
{
openSpecialColumns(false,catalog,schema,table,scope,nullable);
}
@@ -1141,47 +1265,72 @@ void ODatabaseMetaDataResultSet::openForeignKeys( const Any& catalog, const OUSt
const Any& catalog2, const OUString* schema2,
const OUString* table2)
{
- OString aPKQ, aPKO, aPKN, aFKQ, aFKO, aFKN;
- if ( catalog.hasValue() )
- aPKQ = OUStringToOString(comphelper::getString(catalog),m_nTextEncoding);
- if ( catalog2.hasValue() )
- aFKQ = OUStringToOString(comphelper::getString(catalog2),m_nTextEncoding);
-
- const char *pPKQ = catalog.hasValue() && !aPKQ.isEmpty() ? aPKQ.getStr() : nullptr;
- const char *pPKO = nullptr;
- if (schema && !schema->isEmpty())
- {
- aPKO = OUStringToOString(*schema,m_nTextEncoding);
- pPKO = aPKO.getStr();
- }
- const char *pPKN = nullptr;
- if (table)
- {
- aPKN = OUStringToOString(*table,m_nTextEncoding);
- pPKN = aPKN.getStr();
- }
- const char *pFKQ = catalog2.hasValue() && !aFKQ.isEmpty() ? aFKQ.getStr() : nullptr;
- const char *pFKO = nullptr;
- if (schema2 && !schema2->isEmpty())
+ OUString uPKQ, uFKQ;
+ catalog >>= uPKQ;
+ catalog2 >>= uFKQ;
+ SQLRETURN nRetcode;
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::ForeignKeysW))
{
- aFKO = OUStringToOString(*schema2,m_nTextEncoding);
- pFKO = aFKO.getStr();
+ SQLWChars aPKQ, aPKO, aPKN, aFKQ, aFKO, aFKN;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLWChars(uPKQ);
+ if (!uFKQ.isEmpty())
+ aFKQ = SQLWChars(uFKQ);
+ if (schema && !schema->isEmpty())
+ aPKO = SQLWChars(*schema);
+ if (table)
+ aPKN = SQLWChars(*table);
+ if (schema2 && !schema2->isEmpty())
+ aFKO = SQLWChars(*schema2);
+ if (table2)
+ aFKN = SQLWChars(*table2);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr;
+ auto pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+ auto pPKN = !aPKN.empty() ? aPKN.get() : nullptr;
+ auto pFKQ = !aFKQ.empty() ? aFKQ.get() : nullptr;
+ auto pFKO = !aFKO.empty() ? aFKO.get() : nullptr;
+ auto pFKN = !aFKN.empty() ? aFKN.get() : nullptr;
+
+ nRetcode = functions().ForeignKeysW(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTSL : 0,
+ pPKO, pPKO ? SQL_NTSL : 0,
+ pPKN, pPKN ? SQL_NTSL : 0,
+ pFKQ, pFKQ ? SQL_NTSL : 0,
+ pFKO, pFKO ? SQL_NTSL : 0,
+ pFKN, pFKN ? SQL_NTSL : 0);
}
- const char *pFKN = nullptr;
- if (table2)
+ else
{
- aFKN = OUStringToOString(*table2,m_nTextEncoding);
- pFKN = aFKN.getStr();
+ SQLChars aPKQ, aPKO, aPKN, aFKQ, aFKO, aFKN;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLChars(uPKQ, m_nTextEncoding);
+ if (!uFKQ.isEmpty())
+ aFKQ = SQLChars(uFKQ, m_nTextEncoding);
+ if (schema && !schema->isEmpty())
+ aPKO = SQLChars(*schema, m_nTextEncoding);
+ if (table)
+ aPKN = SQLChars(*table, m_nTextEncoding);
+ if (schema2 && !schema2->isEmpty())
+ aFKO = SQLChars(*schema2, m_nTextEncoding);
+ if (table2)
+ aFKN = SQLChars(*table2, m_nTextEncoding);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr;
+ auto pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+ auto pPKN = !aPKN.empty() ? aPKN.get() : nullptr;
+ auto pFKQ = !aFKQ.empty() ? aFKQ.get() : nullptr;
+ auto pFKO = !aFKO.empty() ? aFKO.get() : nullptr;
+ auto pFKN = !aFKN.empty() ? aFKN.get() : nullptr;
+
+ nRetcode = functions().ForeignKeys(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTS : 0,
+ pPKO, pPKO ? SQL_NTS : 0,
+ pPKN, pPKN ? SQL_NTS : 0,
+ pFKQ, pFKQ ? SQL_NTS : 0,
+ pFKO, pFKO ? SQL_NTS : 0,
+ pFKN, pFKN ? SQL_NTS : 0);
}
-
- SQLRETURN nRetcode = N3SQLForeignKeys(m_aStatementHandle,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKQ)), (catalog.hasValue() && !aPKQ.isEmpty()) ? SQL_NTS : 0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKO)), pPKO ? SQL_NTS : 0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKN)), pPKN ? SQL_NTS : 0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pFKQ)), (catalog2.hasValue() && !aFKQ.isEmpty()) ? SQL_NTS : 0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pFKO)), pFKO ? SQL_NTS : 0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pFKN)), SQL_NTS
- );
OTools::ThrowException(m_pConnection.get(),nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this);
checkColumnCount();
}
@@ -1200,91 +1349,137 @@ void ODatabaseMetaDataResultSet::openExportedKeys(const Any& catalog, const OUSt
}
void ODatabaseMetaDataResultSet::openPrimaryKeys(const Any& catalog, const OUString& schema,
- std::u16string_view table)
+ const OUString& table)
{
- const OUString *pSchemaPat = nullptr;
-
- if(schema != "%")
- pSchemaPat = &schema;
+ OUString uPKQ;
+ catalog >>= uPKQ;
+ SQLRETURN nRetcode;
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::PrimaryKeysW))
+ {
+ SQLWChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLWChars(uPKQ);
+ if (!schema.isEmpty() && schema != "%")
+ aPKO = SQLWChars(schema);
+ SQLWChars aPKN(table);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().PrimaryKeysW(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTSL : 0,
+ pPKO, pPKO ? SQL_NTSL : 0,
+ aPKN.get(), SQL_NTSL);
+ }
else
- pSchemaPat = nullptr;
-
- OString aPKQ,aPKO,aPKN;
-
- if ( catalog.hasValue() )
- aPKQ = OUStringToOString(comphelper::getString(catalog),m_nTextEncoding);
- aPKO = OUStringToOString(schema,m_nTextEncoding);
- aPKN = OUStringToOString(table,m_nTextEncoding);
-
- const char *pPKQ = catalog.hasValue() && !aPKQ.isEmpty() ? aPKQ.getStr() : nullptr,
- *pPKO = pSchemaPat && !pSchemaPat->isEmpty() && !aPKO.isEmpty() ? aPKO.getStr() : nullptr,
- *pPKN = aPKN.getStr();
-
-
- SQLRETURN nRetcode = N3SQLPrimaryKeys(m_aStatementHandle,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKQ)), (catalog.hasValue() && !aPKQ.isEmpty()) ? SQL_NTS : 0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKO)), pPKO ? SQL_NTS : 0 ,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKN)), SQL_NTS);
+ {
+ SQLChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLChars(uPKQ, m_nTextEncoding);
+ if (!schema.isEmpty() && schema != "%")
+ aPKO = SQLChars(schema, m_nTextEncoding);
+ SQLChars aPKN(table, m_nTextEncoding);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().PrimaryKeys(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTS : 0,
+ pPKO, pPKO ? SQL_NTS : 0,
+ aPKN.get(), SQL_NTS);
+ }
OTools::ThrowException(m_pConnection.get(),nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this);
checkColumnCount();
}
void ODatabaseMetaDataResultSet::openTablePrivileges(const Any& catalog, const OUString& schemaPattern,
- std::u16string_view tableNamePattern)
+ const OUString& tableNamePattern)
{
- const OUString *pSchemaPat = nullptr;
-
- if(schemaPattern != "%")
- pSchemaPat = &schemaPattern;
+ OUString uPKQ;
+ catalog >>= uPKQ;
+ SQLRETURN nRetcode;
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::TablePrivilegesW))
+ {
+ SQLWChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLWChars(uPKQ);
+ if (!schemaPattern.isEmpty() && schemaPattern != "%")
+ aPKO = SQLWChars(schemaPattern);
+ SQLWChars aPKN(tableNamePattern);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().TablePrivilegesW(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTSL : 0,
+ pPKO, pPKO ? SQL_NTSL : 0,
+ aPKN.get(), SQL_NTSL);
+ }
else
- pSchemaPat = nullptr;
-
- OString aPKQ,aPKO,aPKN;
-
- if ( catalog.hasValue() )
- aPKQ = OUStringToOString(comphelper::getString(catalog),m_nTextEncoding);
- aPKO = OUStringToOString(schemaPattern,m_nTextEncoding);
- aPKN = OUStringToOString(tableNamePattern,m_nTextEncoding);
-
- const char *pPKQ = catalog.hasValue() && !aPKQ.isEmpty() ? aPKQ.getStr() : nullptr,
- *pPKO = pSchemaPat && !pSchemaPat->isEmpty() && !aPKO.isEmpty() ? aPKO.getStr() : nullptr,
- *pPKN = aPKN.getStr();
-
- SQLRETURN nRetcode = N3SQLTablePrivileges(m_aStatementHandle,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKQ)), (catalog.hasValue() && !aPKQ.isEmpty()) ? SQL_NTS : 0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKO)), pPKO ? SQL_NTS : 0 ,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKN)), SQL_NTS);
+ {
+ SQLChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLChars(uPKQ, m_nTextEncoding);
+ if (!schemaPattern.isEmpty() && schemaPattern != "%")
+ aPKO = SQLChars(schemaPattern, m_nTextEncoding);
+ SQLChars aPKN(tableNamePattern, m_nTextEncoding);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().TablePrivileges(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTS : 0,
+ pPKO, pPKO ? SQL_NTS : 0,
+ aPKN.get(), SQL_NTS);
+ }
OTools::ThrowException(m_pConnection.get(),nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this);
checkColumnCount();
}
void ODatabaseMetaDataResultSet::openIndexInfo( const Any& catalog, const OUString& schema,
- std::u16string_view table, bool unique, bool approximate )
+ const OUString& table, bool unique, bool approximate )
{
- const OUString *pSchemaPat = nullptr;
-
- if(schema != "%")
- pSchemaPat = &schema;
+ OUString uPKQ;
+ catalog >>= uPKQ;
+ SQLRETURN nRetcode;
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::StatisticsW))
+ {
+ SQLWChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLWChars(uPKQ);
+ if (!schema.isEmpty() && schema != "%")
+ aPKO = SQLWChars(schema);
+ SQLWChars aPKN(table);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().StatisticsW(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTSL : 0,
+ pPKO, pPKO ? SQL_NTSL : 0,
+ aPKN.get(), SQL_NTSL,
+ unique ? SQL_INDEX_UNIQUE : SQL_INDEX_ALL,
+ approximate ? 1 : 0);
+ }
else
- pSchemaPat = nullptr;
-
- OString aPKQ,aPKO,aPKN;
-
- if ( catalog.hasValue() )
- aPKQ = OUStringToOString(comphelper::getString(catalog),m_nTextEncoding);
- aPKO = OUStringToOString(schema,m_nTextEncoding);
- aPKN = OUStringToOString(table,m_nTextEncoding);
-
- const char *pPKQ = catalog.hasValue() && !aPKQ.isEmpty() ? aPKQ.getStr() : nullptr,
- *pPKO = pSchemaPat && !pSchemaPat->isEmpty() && !aPKO.isEmpty() ? aPKO.getStr() : nullptr,
- *pPKN = aPKN.getStr();
-
- SQLRETURN nRetcode = N3SQLStatistics(m_aStatementHandle,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKQ)), (catalog.hasValue() && !aPKQ.isEmpty()) ? SQL_NTS : 0,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKO)), pPKO ? SQL_NTS : 0 ,
- reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(pPKN)), SQL_NTS,
- unique ? SQL_INDEX_UNIQUE : SQL_INDEX_ALL,
- approximate ? 1 : 0);
+ {
+ SQLChars aPKQ, aPKO;
+ if (!uPKQ.isEmpty())
+ aPKQ = SQLChars(uPKQ, m_nTextEncoding);
+ if (!schema.isEmpty() && schema != "%")
+ aPKO = SQLChars(schema, m_nTextEncoding);
+ SQLChars aPKN(table, m_nTextEncoding);
+
+ auto pPKQ = !aPKQ.empty() ? aPKQ.get() : nullptr,
+ pPKO = !aPKO.empty() ? aPKO.get() : nullptr;
+
+ nRetcode = functions().Statistics(m_aStatementHandle,
+ pPKQ, pPKQ ? SQL_NTS : 0,
+ pPKO, pPKO ? SQL_NTS : 0,
+ aPKN.get(), SQL_NTS,
+ unique ? SQL_INDEX_UNIQUE : SQL_INDEX_ALL,
+ approximate ? 1 : 0);
+ }
OTools::ThrowException(m_pConnection.get(),nRetcode,m_aStatementHandle,SQL_HANDLE_STMT,*this);
checkColumnCount();
}
@@ -1292,7 +1487,7 @@ void ODatabaseMetaDataResultSet::openIndexInfo( const Any& catalog, const OUStri
void ODatabaseMetaDataResultSet::checkColumnCount()
{
sal_Int16 nNumResultCols=0;
- OTools::ThrowException(m_pConnection.get(),N3SQLNumResultCols(m_aStatementHandle,&nNumResultCols),m_aStatementHandle,SQL_HANDLE_STMT,*this);
+ OTools::ThrowException(m_pConnection.get(),functions().NumResultCols(m_aStatementHandle,&nNumResultCols),m_aStatementHandle,SQL_HANDLE_STMT,*this);
m_nDriverColumnCount = nNumResultCols;
}
diff --git a/connectivity/source/drivers/odbc/ODriver.cxx b/connectivity/source/drivers/odbc/ODriver.cxx
index df7b3fd206b8..6e9b28082c11 100644
--- a/connectivity/source/drivers/odbc/ODriver.cxx
+++ b/connectivity/source/drivers/odbc/ODriver.cxx
@@ -17,13 +17,18 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <odbc/ODriver.hxx>
+#include <sal/config.h>
+
#include <odbc/OConnection.hxx>
-#include <odbc/OTools.hxx>
+#include <odbc/ODriver.hxx>
+#include <resource/sharedresources.hxx>
+#include <strings.hrc>
+
#include <connectivity/dbexception.hxx>
#include <cppuhelper/supportsservice.hxx>
-#include <strings.hrc>
-#include <resource/sharedresources.hxx>
+#include <osl/module.h>
+
+#include <utility>
using namespace connectivity::odbc;
using namespace com::sun::star::uno;
@@ -31,10 +36,9 @@ using namespace com::sun::star::lang;
using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
-ODBCDriver::ODBCDriver(const css::uno::Reference< css::uno::XComponentContext >& _rxContext)
+ODBCDriver::ODBCDriver(css::uno::Reference< css::uno::XComponentContext > _xContext)
:ODriver_BASE(m_aMutex)
- ,m_xContext(_rxContext)
- ,m_pDriverHandle(SQL_NULL_HANDLE)
+ ,m_xContext(std::move(_xContext))
{
}
@@ -45,7 +49,7 @@ void ODBCDriver::disposing()
for (auto const& connection : m_xConnections)
{
- Reference< XComponent > xComp(connection.get(), UNO_QUERY);
+ rtl::Reference< OConnection > xComp(connection);
if (xComp.is())
xComp->dispose();
}
@@ -58,7 +62,7 @@ void ODBCDriver::disposing()
OUString ODBCDriver::getImplementationName( )
{
- return "com.sun.star.comp.sdbc.ODBCDriver";
+ return u"com.sun.star.comp.sdbc.ODBCDriver"_ustr;
// this name is referenced in the configuration and in the odbc.xml
// Please take care when changing it.
}
@@ -66,7 +70,7 @@ OUString ODBCDriver::getImplementationName( )
Sequence< OUString > ODBCDriver::getSupportedServiceNames( )
{
- return { "com.sun.star.sdbc.Driver" };
+ return { u"com.sun.star.sdbc.Driver"_ustr };
}
@@ -81,15 +85,9 @@ Reference< XConnection > SAL_CALL ODBCDriver::connect( const OUString& url, cons
if ( ! acceptsURL(url) )
return nullptr;
- if(!m_pDriverHandle)
- {
- OUString aPath;
- if(!EnvironmentHandle(aPath))
- throw SQLException(aPath,*this,OUString(),1000,Any());
- }
- rtl::Reference<OConnection> pCon = new OConnection(m_pDriverHandle,this);
+ rtl::Reference<OConnection> pCon = new OConnection(EnvironmentHandle(), this);
pCon->Construct(url,info);
- m_xConnections.push_back(WeakReferenceHelper(*pCon));
+ m_xConnections.push_back(pCon);
return pCon;
}
@@ -103,71 +101,71 @@ Sequence< DriverPropertyInfo > SAL_CALL ODBCDriver::getPropertyInfo( const OUStr
{
if ( acceptsURL(url) )
{
- Sequence< OUString > aBooleanValues{ "false", "true" };
+ Sequence< OUString > aBooleanValues{ u"false"_ustr, u"true"_ustr };
return
{
{
- "CharSet",
- "CharSet of the database.",
+ u"CharSet"_ustr,
+ u"CharSet of the database."_ustr,
false,
{},
{}
},
{
- "UseCatalog",
- "Use catalog for file-based databases.",
+ u"UseCatalog"_ustr,
+ u"Use catalog for file-based databases."_ustr,
false,
- "false",
+ u"false"_ustr,
aBooleanValues
},
{
- "SystemDriverSettings",
- "Driver settings.",
+ u"SystemDriverSettings"_ustr,
+ u"Driver settings."_ustr,
false,
{},
{}
},
{
- "ParameterNameSubstitution",
- "Change named parameters with '?'.",
+ u"ParameterNameSubstitution"_ustr,
+ u"Change named parameters with '?'."_ustr,
false,
- "false",
+ u"false"_ustr,
aBooleanValues
},
{
- "IgnoreDriverPrivileges",
- "Ignore the privileges from the database driver.",
+ u"IgnoreDriverPrivileges"_ustr,
+ u"Ignore the privileges from the database driver."_ustr,
false,
- "false",
+ u"false"_ustr,
aBooleanValues
},
{
- "IsAutoRetrievingEnabled",
- "Retrieve generated values.",
+ u"IsAutoRetrievingEnabled"_ustr,
+ u"Retrieve generated values."_ustr,
false,
- "false",
+ u"false"_ustr,
aBooleanValues
},
{
- "AutoRetrievingStatement",
- "Auto-increment statement.",
+ u"AutoRetrievingStatement"_ustr,
+ u"Auto-increment statement."_ustr,
false,
{},
{}
},
{
- "GenerateASBeforeCorrelationName",
- "Generate AS before table correlation names.",
+ u"GenerateASBeforeCorrelationName"_ustr,
+ u"Generate AS before table correlation names."_ustr,
false,
- "false",
+ u"false"_ustr,
aBooleanValues
},
{
- "EscapeDateTime",
- "Escape date time format.",
+ u"EscapeDateTime"_ustr,
+ u"Escape date time format."_ustr,
false,
- "true",
+ u"true"_ustr,
aBooleanValues
}
};
@@ -175,7 +173,6 @@ Sequence< DriverPropertyInfo > SAL_CALL ODBCDriver::getPropertyInfo( const OUStr
::connectivity::SharedResources aResources;
const OUString sMessage = aResources.getResourceString(STR_URI_SYNTAX_ERROR);
::dbtools::throwGenericSQLException(sMessage ,*this);
- return Sequence< DriverPropertyInfo >();
}
sal_Int32 SAL_CALL ODBCDriver::getMajorVersion( )
@@ -188,5 +185,728 @@ sal_Int32 SAL_CALL ODBCDriver::getMinorVersion( )
return 0;
}
+// Implib definitions for ODBC-DLL/shared library:
+
+namespace
+{
+constinit oslGenericFunction pODBC3SQLFunctions[static_cast<size_t>(ODBC3SQLFunctionId::LAST)]{};
+
+bool LoadFunctions(oslModule pODBCso)
+{
+ auto load = [pODBCso](ODBC3SQLFunctionId id, const OUString& name)
+ {
+ assert(id > ODBC3SQLFunctionId::FIRST && id < ODBC3SQLFunctionId::LAST);
+ auto& rpFunc = pODBC3SQLFunctions[static_cast<size_t>(id)];
+ assert(rpFunc == nullptr);
+ rpFunc = osl_getFunctionSymbol(pODBCso, name.pData);
+ return rpFunc != nullptr;
+ };
+
+ // Optional functions for Unicode support
+ if (bUseWChar)
+ {
+ load(ODBC3SQLFunctionId::DriverConnectW, u"SQLDriverConnectW"_ustr);
+ load(ODBC3SQLFunctionId::GetInfoW, u"SQLGetInfoW"_ustr);
+ load(ODBC3SQLFunctionId::SetConnectAttrW, u"SQLSetConnectAttrW"_ustr);
+ load(ODBC3SQLFunctionId::GetConnectAttrW, u"SQLGetConnectAttrW"_ustr);
+ load(ODBC3SQLFunctionId::PrepareW, u"SQLPrepareW"_ustr);
+ load(ODBC3SQLFunctionId::SetCursorNameW, u"SQLSetCursorNameW"_ustr);
+ load(ODBC3SQLFunctionId::ExecDirectW, u"SQLExecDirectW"_ustr);
+ load(ODBC3SQLFunctionId::ColAttributeW, u"SQLColAttributeW"_ustr);
+ load(ODBC3SQLFunctionId::GetDiagRecW, u"SQLGetDiagRecW"_ustr);
+ load(ODBC3SQLFunctionId::ColumnPrivilegesW, u"SQLColumnPrivilegesW"_ustr);
+ load(ODBC3SQLFunctionId::ColumnsW, u"SQLColumnsW"_ustr);
+ load(ODBC3SQLFunctionId::ForeignKeysW, u"SQLForeignKeysW"_ustr);
+ load(ODBC3SQLFunctionId::PrimaryKeysW, u"SQLPrimaryKeysW"_ustr);
+ load(ODBC3SQLFunctionId::ProcedureColumnsW, u"SQLProcedureColumnsW"_ustr);
+ load(ODBC3SQLFunctionId::ProceduresW, u"SQLProceduresW"_ustr);
+ load(ODBC3SQLFunctionId::SpecialColumnsW, u"SQLSpecialColumnsW"_ustr);
+ load(ODBC3SQLFunctionId::StatisticsW, u"SQLStatisticsW"_ustr);
+ load(ODBC3SQLFunctionId::TablePrivilegesW, u"SQLTablePrivilegesW"_ustr);
+ load(ODBC3SQLFunctionId::TablesW, u"SQLTablesW"_ustr);
+ load(ODBC3SQLFunctionId::GetCursorNameW, u"SQLGetCursorNameW"_ustr);
+ load(ODBC3SQLFunctionId::NativeSqlW, u"SQLNativeSqlW"_ustr);
+ }
+
+ return load(ODBC3SQLFunctionId::AllocHandle, u"SQLAllocHandle"_ustr)
+ && load(ODBC3SQLFunctionId::DriverConnect, u"SQLDriverConnect"_ustr)
+ && load(ODBC3SQLFunctionId::GetInfo, u"SQLGetInfo"_ustr)
+ && load(ODBC3SQLFunctionId::GetFunctions, u"SQLGetFunctions"_ustr)
+ && load(ODBC3SQLFunctionId::GetTypeInfo, u"SQLGetTypeInfo"_ustr)
+ && load(ODBC3SQLFunctionId::SetConnectAttr, u"SQLSetConnectAttr"_ustr)
+ && load(ODBC3SQLFunctionId::GetConnectAttr, u"SQLGetConnectAttr"_ustr)
+ && load(ODBC3SQLFunctionId::SetEnvAttr, u"SQLSetEnvAttr"_ustr)
+ && load(ODBC3SQLFunctionId::GetEnvAttr, u"SQLGetEnvAttr"_ustr)
+ && load(ODBC3SQLFunctionId::SetStmtAttr, u"SQLSetStmtAttr"_ustr)
+ && load(ODBC3SQLFunctionId::GetStmtAttr, u"SQLGetStmtAttr"_ustr)
+ && load(ODBC3SQLFunctionId::Prepare, u"SQLPrepare"_ustr)
+ && load(ODBC3SQLFunctionId::BindParameter, u"SQLBindParameter"_ustr)
+ && load(ODBC3SQLFunctionId::SetCursorName, u"SQLSetCursorName"_ustr)
+ && load(ODBC3SQLFunctionId::Execute, u"SQLExecute"_ustr)
+ && load(ODBC3SQLFunctionId::ExecDirect, u"SQLExecDirect"_ustr)
+ && load(ODBC3SQLFunctionId::DescribeParam, u"SQLDescribeParam"_ustr)
+ && load(ODBC3SQLFunctionId::NumParams, u"SQLNumParams"_ustr)
+ && load(ODBC3SQLFunctionId::ParamData, u"SQLParamData"_ustr)
+ && load(ODBC3SQLFunctionId::PutData, u"SQLPutData"_ustr)
+ && load(ODBC3SQLFunctionId::RowCount, u"SQLRowCount"_ustr)
+ && load(ODBC3SQLFunctionId::NumResultCols, u"SQLNumResultCols"_ustr)
+ && load(ODBC3SQLFunctionId::ColAttribute, u"SQLColAttribute"_ustr)
+ && load(ODBC3SQLFunctionId::BindCol, u"SQLBindCol"_ustr)
+ && load(ODBC3SQLFunctionId::Fetch, u"SQLFetch"_ustr)
+ && load(ODBC3SQLFunctionId::FetchScroll, u"SQLFetchScroll"_ustr)
+ && load(ODBC3SQLFunctionId::GetData, u"SQLGetData"_ustr)
+ && load(ODBC3SQLFunctionId::SetPos, u"SQLSetPos"_ustr)
+ && load(ODBC3SQLFunctionId::BulkOperations, u"SQLBulkOperations"_ustr)
+ && load(ODBC3SQLFunctionId::MoreResults, u"SQLMoreResults"_ustr)
+ && load(ODBC3SQLFunctionId::GetDiagRec, u"SQLGetDiagRec"_ustr)
+ && load(ODBC3SQLFunctionId::ColumnPrivileges, u"SQLColumnPrivileges"_ustr)
+ && load(ODBC3SQLFunctionId::Columns, u"SQLColumns"_ustr)
+ && load(ODBC3SQLFunctionId::ForeignKeys, u"SQLForeignKeys"_ustr)
+ && load(ODBC3SQLFunctionId::PrimaryKeys, u"SQLPrimaryKeys"_ustr)
+ && load(ODBC3SQLFunctionId::ProcedureColumns, u"SQLProcedureColumns"_ustr)
+ && load(ODBC3SQLFunctionId::Procedures, u"SQLProcedures"_ustr)
+ && load(ODBC3SQLFunctionId::SpecialColumns, u"SQLSpecialColumns"_ustr)
+ && load(ODBC3SQLFunctionId::Statistics, u"SQLStatistics"_ustr)
+ && load(ODBC3SQLFunctionId::TablePrivileges, u"SQLTablePrivileges"_ustr)
+ && load(ODBC3SQLFunctionId::Tables, u"SQLTables"_ustr)
+ && load(ODBC3SQLFunctionId::FreeStmt, u"SQLFreeStmt"_ustr)
+ && load(ODBC3SQLFunctionId::CloseCursor, u"SQLCloseCursor"_ustr)
+ && load(ODBC3SQLFunctionId::Cancel, u"SQLCancel"_ustr)
+ && load(ODBC3SQLFunctionId::EndTran, u"SQLEndTran"_ustr)
+ && load(ODBC3SQLFunctionId::Disconnect, u"SQLDisconnect"_ustr)
+ && load(ODBC3SQLFunctionId::FreeHandle, u"SQLFreeHandle"_ustr)
+ && load(ODBC3SQLFunctionId::GetCursorName, u"SQLGetCursorName"_ustr)
+ && load(ODBC3SQLFunctionId::NativeSql, u"SQLNativeSql"_ustr);
+}
+
+// Take care of Dynamically loading of the DLL/shared lib and Addresses:
+// Returns sal_True at success
+bool LoadLibrary_ODBC3(OUString &_rPath)
+{
+ static bool bLoaded = false;
+ static oslModule pODBCso = nullptr;
+
+ if (bLoaded)
+ return true;
+#ifdef DISABLE_DYNLOADING
+ (void)_rPath;
+#else
+#ifdef _WIN32
+ _rPath = "ODBC32.DLL";
+#endif
+#ifdef UNX
+ #ifdef MACOSX
+ _rPath = "libiodbc.dylib";
+ #else
+ _rPath = "libodbc.so.2";
+ pODBCso = osl_loadModule( _rPath.pData,SAL_LOADMODULE_NOW );
+ if ( !pODBCso )
+ {
+ _rPath = "libodbc.so.1";
+ pODBCso = osl_loadModule( _rPath.pData,SAL_LOADMODULE_NOW );
+ }
+ if ( !pODBCso )
+ _rPath = "libodbc.so";
+
+ #endif /* MACOSX */
+#endif
+
+ if ( !pODBCso )
+ pODBCso = osl_loadModule( _rPath.pData,SAL_LOADMODULE_NOW );
+#endif // DISABLE_DYNLOADING
+ if( !pODBCso)
+ return false;
+
+ bLoaded = LoadFunctions(pODBCso);
+ return bLoaded;
+}
+
+class ORealOdbcDriver : public connectivity::odbc::ODBCDriver, public connectivity::odbc::Functions
+{
+public:
+ explicit ORealOdbcDriver(const css::uno::Reference<css::uno::XComponentContext>& _rxContext)
+ : ODBCDriver(_rxContext)
+ {
+ }
+ const Functions& functions() const override { return *this; }
+
+ // Functions
+
+ bool has(ODBC3SQLFunctionId id) const override
+ {
+ assert(id > ODBC3SQLFunctionId::FIRST && id < ODBC3SQLFunctionId::LAST);
+ return pODBC3SQLFunctions[static_cast<size_t>(id)] != nullptr;
+ }
+
+ SQLRETURN AllocHandle(SQLSMALLINT HandleType, SQLHANDLE InputHandle,
+ SQLHANDLE* OutputHandlePtr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::AllocHandle, HandleType, InputHandle, OutputHandlePtr);
+ }
+
+ SQLRETURN DriverConnect(SQLHDBC ConnectionHandle, HWND WindowHandle,
+ SQLCHAR* InConnectionString, SQLSMALLINT StringLength1,
+ SQLCHAR* OutConnectionString, SQLSMALLINT BufferLength,
+ SQLSMALLINT* StringLength2Ptr,
+ SQLUSMALLINT DriverCompletion) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::DriverConnect, ConnectionHandle, WindowHandle,
+ InConnectionString, StringLength1, OutConnectionString, BufferLength,
+ StringLength2Ptr, DriverCompletion);
+ }
+
+ SQLRETURN DriverConnectW(SQLHDBC ConnectionHandle, HWND WindowHandle,
+ SQLWCHAR* InConnectionString, SQLSMALLINT StringLength1,
+ SQLWCHAR* OutConnectionString, SQLSMALLINT BufferLength,
+ SQLSMALLINT* StringLength2Ptr,
+ SQLUSMALLINT DriverCompletion) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::DriverConnectW, ConnectionHandle, WindowHandle,
+ InConnectionString, StringLength1, OutConnectionString, BufferLength,
+ StringLength2Ptr, DriverCompletion);
+ }
+
+ SQLRETURN GetInfo(SQLHDBC ConnectionHandle, SQLUSMALLINT InfoType, SQLPOINTER InfoValuePtr,
+ SQLSMALLINT BufferLength, SQLSMALLINT* StringLengthPtr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::GetInfo, ConnectionHandle, InfoType, InfoValuePtr,
+ BufferLength, StringLengthPtr);
+ }
+
+ SQLRETURN GetInfoW(SQLHDBC ConnectionHandle, SQLUSMALLINT InfoType, SQLPOINTER InfoValuePtr,
+ SQLSMALLINT BufferLength, SQLSMALLINT* StringLengthPtr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::GetInfoW, ConnectionHandle, InfoType, InfoValuePtr,
+ BufferLength, StringLengthPtr);
+ }
+
+ SQLRETURN GetFunctions(SQLHDBC ConnectionHandle, SQLUSMALLINT FunctionId,
+ SQLUSMALLINT* SupportedPtr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::GetFunctions, ConnectionHandle, FunctionId,
+ SupportedPtr);
+ }
+
+ SQLRETURN GetTypeInfo(SQLHSTMT StatementHandle, SQLSMALLINT DataType) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::GetTypeInfo, StatementHandle, DataType);
+ }
+
+ SQLRETURN SetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr,
+ SQLINTEGER StringLength) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::SetConnectAttr, ConnectionHandle, Attribute, ValuePtr,
+ StringLength);
+ }
+
+ SQLRETURN SetConnectAttrW(SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr,
+ SQLINTEGER StringLength) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::SetConnectAttrW, ConnectionHandle, Attribute, ValuePtr,
+ StringLength);
+ }
+
+ SQLRETURN GetConnectAttr(SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr,
+ SQLINTEGER BufferLength, SQLINTEGER* StringLength) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::GetConnectAttr, ConnectionHandle, Attribute, ValuePtr,
+ BufferLength, StringLength);
+ }
+
+ SQLRETURN GetConnectAttrW(SQLHDBC ConnectionHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr,
+ SQLINTEGER BufferLength, SQLINTEGER* StringLength) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::GetConnectAttrW, ConnectionHandle, Attribute, ValuePtr,
+ BufferLength, StringLength);
+ }
+
+ SQLRETURN SetEnvAttr(SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr,
+ SQLINTEGER StringLength) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::SetEnvAttr, EnvironmentHandle, Attribute, ValuePtr,
+ StringLength);
+ }
+
+ SQLRETURN GetEnvAttr(SQLHENV EnvironmentHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr,
+ SQLINTEGER BufferLength, SQLINTEGER* StringLength) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::GetEnvAttr, EnvironmentHandle, Attribute, ValuePtr,
+ BufferLength, StringLength);
+ }
+
+ SQLRETURN SetStmtAttr(SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr,
+ SQLINTEGER StringLength) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::SetStmtAttr, StatementHandle, Attribute, ValuePtr,
+ StringLength);
+ }
+
+ SQLRETURN GetStmtAttr(SQLHSTMT StatementHandle, SQLINTEGER Attribute, SQLPOINTER ValuePtr,
+ SQLINTEGER BufferLength, SQLINTEGER* StringLength) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::GetStmtAttr, StatementHandle, Attribute, ValuePtr,
+ BufferLength, StringLength);
+ }
+
+ SQLRETURN Prepare(SQLHSTMT StatementHandle, SQLCHAR* StatementText,
+ SQLINTEGER TextLength) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::Prepare, StatementHandle, StatementText, TextLength);
+ }
+
+ SQLRETURN PrepareW(SQLHSTMT StatementHandle, SQLWCHAR* StatementText,
+ SQLINTEGER TextLength) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::PrepareW, StatementHandle, StatementText, TextLength);
+ }
+
+ SQLRETURN BindParameter(SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber,
+ SQLSMALLINT InputOutputType, SQLSMALLINT ValueType,
+ SQLSMALLINT ParameterType, SQLULEN ColumnSize,
+ SQLSMALLINT DecimalDigits, SQLPOINTER ParameterValuePtr,
+ SQLLEN BufferLength, SQLLEN* StrLen_or_IndPtr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::BindParameter, StatementHandle, ParameterNumber,
+ InputOutputType, ValueType, ParameterType, ColumnSize, DecimalDigits,
+ ParameterValuePtr, BufferLength, StrLen_or_IndPtr);
+ }
+
+ SQLRETURN SetCursorName(SQLHSTMT StatementHandle, SQLCHAR* CursorName,
+ SQLSMALLINT NameLength) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::SetCursorName, StatementHandle, CursorName, NameLength);
+ }
+
+ SQLRETURN SetCursorNameW(SQLHSTMT StatementHandle, SQLWCHAR* CursorName,
+ SQLSMALLINT NameLength) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::SetCursorNameW, StatementHandle, CursorName, NameLength);
+ }
+
+ SQLRETURN Execute(SQLHSTMT StatementHandle) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::Execute, StatementHandle);
+ }
+
+ SQLRETURN ExecDirect(SQLHSTMT StatementHandle, SQLCHAR* StatementText,
+ SQLINTEGER TextLength) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::ExecDirect, StatementHandle, StatementText, TextLength);
+ }
+
+ SQLRETURN ExecDirectW(SQLHSTMT StatementHandle, SQLWCHAR* StatementText,
+ SQLINTEGER TextLength) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::ExecDirectW, StatementHandle, StatementText, TextLength);
+ }
+
+ SQLRETURN DescribeParam(SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber,
+ SQLSMALLINT* DataTypePtr, SQLULEN* ParameterSizePtr,
+ SQLSMALLINT* DecimalDigitsPtr, SQLSMALLINT* NullablePtr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::DescribeParam, StatementHandle, ParameterNumber,
+ DataTypePtr, ParameterSizePtr, DecimalDigitsPtr, NullablePtr);
+ }
+
+ SQLRETURN NumParams(SQLHSTMT StatementHandle, SQLSMALLINT* ParameterCountPtr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::NumParams, StatementHandle, ParameterCountPtr);
+ }
+
+ SQLRETURN ParamData(SQLHSTMT StatementHandle, SQLPOINTER* ValuePtrPtr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::ParamData, StatementHandle, ValuePtrPtr);
+ }
+
+ SQLRETURN PutData(SQLHSTMT StatementHandle, SQLPOINTER DataPtr,
+ SQLLEN StrLen_or_Ind) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::PutData, StatementHandle, DataPtr, StrLen_or_Ind);
+ }
+
+ SQLRETURN RowCount(SQLHSTMT StatementHandle, SQLLEN* RowCountPtr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::RowCount, StatementHandle, RowCountPtr);
+ }
+
+ SQLRETURN NumResultCols(SQLHSTMT StatementHandle, SQLSMALLINT* ColumnCountPtr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::NumResultCols, StatementHandle, ColumnCountPtr);
+ }
+
+ SQLRETURN ColAttribute(SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber,
+ SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttributePtr,
+ SQLSMALLINT BufferLength, SQLSMALLINT* StringLengthPtr,
+ SQLLEN* NumericAttributePtr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::ColAttribute, StatementHandle, ColumnNumber,
+ FieldIdentifier, CharacterAttributePtr, BufferLength, StringLengthPtr,
+ NumericAttributePtr);
+ }
+
+ SQLRETURN ColAttributeW(SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber,
+ SQLUSMALLINT FieldIdentifier, SQLPOINTER CharacterAttributePtr,
+ SQLSMALLINT BufferLength, SQLSMALLINT* StringLengthPtr,
+ SQLLEN* NumericAttributePtr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::ColAttributeW, StatementHandle, ColumnNumber,
+ FieldIdentifier, CharacterAttributePtr, BufferLength, StringLengthPtr,
+ NumericAttributePtr);
+ }
+
+ SQLRETURN BindCol(SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
+ SQLPOINTER TargetValuePtr, SQLLEN BufferLength,
+ SQLLEN* StrLen_or_IndPtr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::BindCol, StatementHandle, ColumnNumber, TargetType,
+ TargetValuePtr, BufferLength, StrLen_or_IndPtr);
+ }
+
+ SQLRETURN Fetch(SQLHSTMT StatementHandle) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::Fetch, StatementHandle);
+ }
+
+ SQLRETURN FetchScroll(SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation,
+ SQLLEN FetchOffset) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::FetchScroll, StatementHandle, FetchOrientation,
+ FetchOffset);
+ }
+
+ SQLRETURN GetData(SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType,
+ SQLPOINTER TargetValuePtr, SQLLEN BufferLength,
+ SQLLEN* StrLen_or_IndPtr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::GetData, StatementHandle, ColumnNumber, TargetType,
+ TargetValuePtr, BufferLength, StrLen_or_IndPtr);
+ }
+
+ SQLRETURN SetPos(SQLHSTMT StatementHandle, SQLSETPOSIROW RowNumber, SQLUSMALLINT Operation,
+ SQLUSMALLINT LockType) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::SetPos, StatementHandle, RowNumber, Operation,
+ LockType);
+ }
+
+ SQLRETURN BulkOperations(SQLHSTMT StatementHandle, SQLSMALLINT Operation) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::BulkOperations, StatementHandle, Operation);
+ }
+
+ SQLRETURN MoreResults(SQLHSTMT StatementHandle) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::MoreResults, StatementHandle);
+ }
+
+ SQLRETURN GetDiagRec(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber,
+ SQLCHAR* Sqlstate, SQLINTEGER* NativeErrorPtr, SQLCHAR* MessageText,
+ SQLSMALLINT BufferLength, SQLSMALLINT* TextLengthPtr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::GetDiagRec, HandleType, Handle, RecNumber, Sqlstate,
+ NativeErrorPtr, MessageText, BufferLength, TextLengthPtr);
+ }
+
+ SQLRETURN GetDiagRecW(SQLSMALLINT HandleType, SQLHANDLE Handle, SQLSMALLINT RecNumber,
+ SQLWCHAR* Sqlstate, SQLINTEGER* NativeErrorPtr, SQLWCHAR* MessageText,
+ SQLSMALLINT BufferLength, SQLSMALLINT* TextLengthPtr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::GetDiagRecW, HandleType, Handle, RecNumber, Sqlstate,
+ NativeErrorPtr, MessageText, BufferLength, TextLengthPtr);
+ }
+
+ SQLRETURN ColumnPrivileges(SQLHSTMT StatementHandle, SQLCHAR* CatalogName,
+ SQLSMALLINT NameLength1, SQLCHAR* SchemaName,
+ SQLSMALLINT NameLength2, SQLCHAR* TableName, SQLSMALLINT NameLength3,
+ SQLCHAR* ColumnName, SQLSMALLINT NameLength4) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::ColumnPrivileges, StatementHandle, CatalogName,
+ NameLength1, SchemaName, NameLength2, TableName, NameLength3, ColumnName,
+ NameLength4);
+ }
+
+ SQLRETURN ColumnPrivilegesW(SQLHSTMT StatementHandle, SQLWCHAR* CatalogName,
+ SQLSMALLINT NameLength1, SQLWCHAR* SchemaName,
+ SQLSMALLINT NameLength2, SQLWCHAR* TableName, SQLSMALLINT NameLength3,
+ SQLWCHAR* ColumnName, SQLSMALLINT NameLength4) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::ColumnPrivilegesW, StatementHandle, CatalogName,
+ NameLength1, SchemaName, NameLength2, TableName, NameLength3, ColumnName,
+ NameLength4);
+ }
+
+ SQLRETURN Columns(SQLHSTMT StatementHandle, SQLCHAR* CatalogName, SQLSMALLINT NameLength1,
+ SQLCHAR* SchemaName, SQLSMALLINT NameLength2, SQLCHAR* TableName,
+ SQLSMALLINT NameLength3, SQLCHAR* ColumnName,
+ SQLSMALLINT NameLength4) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::Columns, StatementHandle, CatalogName, NameLength1,
+ SchemaName, NameLength2, TableName, NameLength3, ColumnName, NameLength4);
+ }
+
+ SQLRETURN ColumnsW(SQLHSTMT StatementHandle, SQLWCHAR* CatalogName, SQLSMALLINT NameLength1,
+ SQLWCHAR* SchemaName, SQLSMALLINT NameLength2, SQLWCHAR* TableName,
+ SQLSMALLINT NameLength3, SQLWCHAR* ColumnName,
+ SQLSMALLINT NameLength4) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::ColumnsW, StatementHandle, CatalogName, NameLength1,
+ SchemaName, NameLength2, TableName, NameLength3, ColumnName, NameLength4);
+ }
+
+ SQLRETURN ForeignKeys(SQLHSTMT StatementHandle, SQLCHAR* PKCatalogName, SQLSMALLINT NameLength1,
+ SQLCHAR* PKSchemaName, SQLSMALLINT NameLength2, SQLCHAR* PKTableName,
+ SQLSMALLINT NameLength3, SQLCHAR* FKCatalogName, SQLSMALLINT NameLength4,
+ SQLCHAR* FKSchemaName, SQLSMALLINT NameLength5, SQLCHAR* FKTableName,
+ SQLSMALLINT NameLength6) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::ForeignKeys, StatementHandle, PKCatalogName,
+ NameLength1, PKSchemaName, NameLength2, PKTableName, NameLength3,
+ FKCatalogName, NameLength4, FKSchemaName, NameLength5, FKTableName,
+ NameLength6);
+ }
+
+ SQLRETURN ForeignKeysW(SQLHSTMT StatementHandle, SQLWCHAR* PKCatalogName, SQLSMALLINT NameLength1,
+ SQLWCHAR* PKSchemaName, SQLSMALLINT NameLength2, SQLWCHAR* PKTableName,
+ SQLSMALLINT NameLength3, SQLWCHAR* FKCatalogName, SQLSMALLINT NameLength4,
+ SQLWCHAR* FKSchemaName, SQLSMALLINT NameLength5, SQLWCHAR* FKTableName,
+ SQLSMALLINT NameLength6) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::ForeignKeysW, StatementHandle, PKCatalogName,
+ NameLength1, PKSchemaName, NameLength2, PKTableName, NameLength3,
+ FKCatalogName, NameLength4, FKSchemaName, NameLength5, FKTableName,
+ NameLength6);
+ }
+
+ SQLRETURN PrimaryKeys(SQLHSTMT StatementHandle, SQLCHAR* CatalogName, SQLSMALLINT NameLength1,
+ SQLCHAR* SchemaName, SQLSMALLINT NameLength2, SQLCHAR* TableName,
+ SQLSMALLINT NameLength3) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::PrimaryKeys, StatementHandle, CatalogName, NameLength1,
+ SchemaName, NameLength2, TableName, NameLength3);
+ }
+
+ SQLRETURN PrimaryKeysW(SQLHSTMT StatementHandle, SQLWCHAR* CatalogName, SQLSMALLINT NameLength1,
+ SQLWCHAR* SchemaName, SQLSMALLINT NameLength2, SQLWCHAR* TableName,
+ SQLSMALLINT NameLength3) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::PrimaryKeysW, StatementHandle, CatalogName, NameLength1,
+ SchemaName, NameLength2, TableName, NameLength3);
+ }
+
+ SQLRETURN ProcedureColumns(SQLHSTMT StatementHandle, SQLCHAR* CatalogName,
+ SQLSMALLINT NameLength1, SQLCHAR* SchemaName,
+ SQLSMALLINT NameLength2, SQLCHAR* ProcName, SQLSMALLINT NameLength3,
+ SQLCHAR* ColumnName, SQLSMALLINT NameLength4) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::ProcedureColumns, StatementHandle, CatalogName,
+ NameLength1, SchemaName, NameLength2, ProcName, NameLength3, ColumnName,
+ NameLength4);
+ }
+
+ SQLRETURN ProcedureColumnsW(SQLHSTMT StatementHandle, SQLWCHAR* CatalogName,
+ SQLSMALLINT NameLength1, SQLWCHAR* SchemaName,
+ SQLSMALLINT NameLength2, SQLWCHAR* ProcName, SQLSMALLINT NameLength3,
+ SQLWCHAR* ColumnName, SQLSMALLINT NameLength4) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::ProcedureColumnsW, StatementHandle, CatalogName,
+ NameLength1, SchemaName, NameLength2, ProcName, NameLength3, ColumnName,
+ NameLength4);
+ }
+
+ SQLRETURN Procedures(SQLHSTMT StatementHandle, SQLCHAR* CatalogName, SQLSMALLINT NameLength1,
+ SQLCHAR* SchemaName, SQLSMALLINT NameLength2, SQLCHAR* ProcName,
+ SQLSMALLINT NameLength3) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::Procedures, StatementHandle, CatalogName, NameLength1,
+ SchemaName, NameLength2, ProcName, NameLength3);
+ }
+
+ SQLRETURN ProceduresW(SQLHSTMT StatementHandle, SQLWCHAR* CatalogName, SQLSMALLINT NameLength1,
+ SQLWCHAR* SchemaName, SQLSMALLINT NameLength2, SQLWCHAR* ProcName,
+ SQLSMALLINT NameLength3) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::ProceduresW, StatementHandle, CatalogName, NameLength1,
+ SchemaName, NameLength2, ProcName, NameLength3);
+ }
+
+ SQLRETURN SpecialColumns(SQLHSTMT StatementHandle, SQLUSMALLINT IdentifierType,
+ SQLCHAR* CatalogName, SQLSMALLINT NameLength1, SQLCHAR* SchemaName,
+ SQLSMALLINT NameLength2, SQLCHAR* TableName, SQLSMALLINT NameLength3,
+ SQLUSMALLINT Scope, SQLUSMALLINT Nullable) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::SpecialColumns, StatementHandle, IdentifierType,
+ CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3,
+ Scope, Nullable);
+ }
+
+ SQLRETURN SpecialColumnsW(SQLHSTMT StatementHandle, SQLUSMALLINT IdentifierType,
+ SQLWCHAR* CatalogName, SQLSMALLINT NameLength1, SQLWCHAR* SchemaName,
+ SQLSMALLINT NameLength2, SQLWCHAR* TableName, SQLSMALLINT NameLength3,
+ SQLUSMALLINT Scope, SQLUSMALLINT Nullable) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::SpecialColumnsW, StatementHandle, IdentifierType,
+ CatalogName, NameLength1, SchemaName, NameLength2, TableName, NameLength3,
+ Scope, Nullable);
+ }
+
+ SQLRETURN Statistics(SQLHSTMT StatementHandle, SQLCHAR* CatalogName, SQLSMALLINT NameLength1,
+ SQLCHAR* SchemaName, SQLSMALLINT NameLength2, SQLCHAR* TableName,
+ SQLSMALLINT NameLength3, SQLUSMALLINT Unique,
+ SQLUSMALLINT Reserved) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::Statistics, StatementHandle, CatalogName, NameLength1,
+ SchemaName, NameLength2, TableName, NameLength3, Unique, Reserved);
+ }
+
+ SQLRETURN StatisticsW(SQLHSTMT StatementHandle, SQLWCHAR* CatalogName, SQLSMALLINT NameLength1,
+ SQLWCHAR* SchemaName, SQLSMALLINT NameLength2, SQLWCHAR* TableName,
+ SQLSMALLINT NameLength3, SQLUSMALLINT Unique,
+ SQLUSMALLINT Reserved) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::StatisticsW, StatementHandle, CatalogName, NameLength1,
+ SchemaName, NameLength2, TableName, NameLength3, Unique, Reserved);
+ }
+
+ SQLRETURN TablePrivileges(SQLHSTMT StatementHandle, SQLCHAR* CatalogName,
+ SQLSMALLINT NameLength1, SQLCHAR* SchemaName, SQLSMALLINT NameLength2,
+ SQLCHAR* TableName, SQLSMALLINT NameLength3) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::TablePrivileges, StatementHandle, CatalogName,
+ NameLength1, SchemaName, NameLength2, TableName, NameLength3);
+ }
+
+ SQLRETURN TablePrivilegesW(SQLHSTMT StatementHandle, SQLWCHAR* CatalogName,
+ SQLSMALLINT NameLength1, SQLWCHAR* SchemaName, SQLSMALLINT NameLength2,
+ SQLWCHAR* TableName, SQLSMALLINT NameLength3) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::TablePrivilegesW, StatementHandle, CatalogName,
+ NameLength1, SchemaName, NameLength2, TableName, NameLength3);
+ }
+
+ SQLRETURN Tables(SQLHSTMT StatementHandle, SQLCHAR* CatalogName, SQLSMALLINT NameLength1,
+ SQLCHAR* SchemaName, SQLSMALLINT NameLength2, SQLCHAR* TableName,
+ SQLSMALLINT NameLength3, SQLCHAR* TableType,
+ SQLSMALLINT NameLength4) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::Tables, StatementHandle, CatalogName, NameLength1,
+ SchemaName, NameLength2, TableName, NameLength3, TableType, NameLength4);
+ }
+
+ SQLRETURN TablesW(SQLHSTMT StatementHandle, SQLWCHAR* CatalogName, SQLSMALLINT NameLength1,
+ SQLWCHAR* SchemaName, SQLSMALLINT NameLength2, SQLWCHAR* TableName,
+ SQLSMALLINT NameLength3, SQLWCHAR* TableType,
+ SQLSMALLINT NameLength4) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::TablesW, StatementHandle, CatalogName, NameLength1,
+ SchemaName, NameLength2, TableName, NameLength3, TableType, NameLength4);
+ }
+
+ SQLRETURN FreeStmt(SQLHSTMT StatementHandle, SQLUSMALLINT Option) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::FreeStmt, StatementHandle, Option);
+ }
+
+ SQLRETURN CloseCursor(SQLHSTMT StatementHandle) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::CloseCursor, StatementHandle);
+ }
+
+ SQLRETURN Cancel(SQLHSTMT StatementHandle) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::Cancel, StatementHandle);
+ }
+
+ SQLRETURN EndTran(SQLSMALLINT HandleType, SQLHANDLE Handle,
+ SQLSMALLINT CompletionType) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::EndTran, HandleType, Handle, CompletionType);
+ }
+
+ SQLRETURN Disconnect(SQLHDBC ConnectionHandle) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::Disconnect, ConnectionHandle);
+ }
+
+ SQLRETURN FreeHandle(SQLSMALLINT HandleType, SQLHANDLE Handle) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::FreeHandle, HandleType, Handle);
+ }
+
+ SQLRETURN GetCursorName(SQLHSTMT StatementHandle, SQLCHAR* CursorName, SQLSMALLINT BufferLength,
+ SQLSMALLINT* NameLength2) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::GetCursorName, StatementHandle, CursorName,
+ BufferLength, NameLength2);
+ }
+
+ SQLRETURN GetCursorNameW(SQLHSTMT StatementHandle, SQLWCHAR* CursorName, SQLSMALLINT BufferLength,
+ SQLSMALLINT* NameLength2) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::GetCursorNameW, StatementHandle, CursorName,
+ BufferLength, NameLength2);
+ }
+
+ SQLRETURN NativeSql(SQLHDBC ConnectionHandle, SQLCHAR* InStatementText, SQLINTEGER TextLength1,
+ SQLCHAR* OutStatementText, SQLINTEGER BufferLength,
+ SQLINTEGER* TextLength2Ptr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::NativeSql, ConnectionHandle, InStatementText,
+ TextLength1, OutStatementText, BufferLength, TextLength2Ptr);
+ }
+
+ SQLRETURN NativeSqlW(SQLHDBC ConnectionHandle, SQLWCHAR* InStatementText, SQLINTEGER TextLength1,
+ SQLWCHAR* OutStatementText, SQLINTEGER BufferLength,
+ SQLINTEGER* TextLength2Ptr) const override
+ {
+ return ODBCFunc(ODBC3SQLFunctionId::NativeSqlW, ConnectionHandle, InStatementText,
+ TextLength1, OutStatementText, BufferLength, TextLength2Ptr);
+ }
+
+protected:
+ virtual SQLHANDLE EnvironmentHandle() override;
+
+private:
+ template <typename... Args> static SQLRETURN ODBCFunc(ODBC3SQLFunctionId id, Args... args)
+ {
+ assert(id > ODBC3SQLFunctionId::FIRST && id < ODBC3SQLFunctionId::LAST);
+ assert(pODBC3SQLFunctions[static_cast<size_t>(id)]);
+ using Func_t = SQLRETURN(SQL_API*)(Args...);
+ return (*reinterpret_cast<Func_t>(pODBC3SQLFunctions[static_cast<size_t>(id)]))(args...);
+ }
+
+ SQLHANDLE m_pDriverHandle = SQL_NULL_HANDLE;
+};
+
+// ODBC Environment (common for all Connections):
+SQLHANDLE ORealOdbcDriver::EnvironmentHandle()
+{
+ // Is (for this instance) already an Environment made?
+ if (m_pDriverHandle == SQL_NULL_HANDLE)
+ {
+ OUString aPath;
+ SQLHANDLE h = SQL_NULL_HANDLE;
+ // allocate Environment
+ // load ODBC-DLL now:
+ if (!LoadLibrary_ODBC3(aPath)
+ || AllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &h) != SQL_SUCCESS)
+ dbtools::throwSQLException(aPath, OUString(), *this, 1000);
+
+ // Save in global Structure
+ m_pDriverHandle = h;
+ SetEnvAttr(h, SQL_ATTR_ODBC_VERSION, reinterpret_cast<SQLPOINTER>(SQL_OV_ODBC3),
+ SQL_IS_UINTEGER);
+ //N3SQLSetEnvAttr(h, SQL_ATTR_CONNECTION_POOLING,(SQLPOINTER) SQL_CP_ONE_PER_HENV, SQL_IS_INTEGER);
+ }
+
+ return m_pDriverHandle;
+}
+}
+
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
+connectivity_odbc_ORealOdbcDriver_get_implementation(css::uno::XComponentContext* context,
+ css::uno::Sequence<css::uno::Any> const&)
+{
+ return cppu::acquire(new ORealOdbcDriver(context));
+}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/odbc/OFunctions.cxx b/connectivity/source/drivers/odbc/OFunctions.cxx
deleted file mode 100644
index 951eb8b36bff..000000000000
--- a/connectivity/source/drivers/odbc/OFunctions.cxx
+++ /dev/null
@@ -1,245 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <odbc/OFunctions.hxx>
-
-// Implib definitions for ODBC-DLL/shared library:
-
-namespace connectivity
-{
- T3SQLAllocHandle pODBC3SQLAllocHandle;
-T3SQLConnect pODBC3SQLConnect;
-T3SQLDriverConnect pODBC3SQLDriverConnect;
-T3SQLBrowseConnect pODBC3SQLBrowseConnect;
-T3SQLDataSources pODBC3SQLDataSources;
-T3SQLDrivers pODBC3SQLDrivers;
-T3SQLGetInfo pODBC3SQLGetInfo;
-T3SQLGetFunctions pODBC3SQLGetFunctions;
-T3SQLGetTypeInfo pODBC3SQLGetTypeInfo;
-T3SQLSetConnectAttr pODBC3SQLSetConnectAttr;
-T3SQLGetConnectAttr pODBC3SQLGetConnectAttr;
-T3SQLSetEnvAttr pODBC3SQLSetEnvAttr;
-T3SQLGetEnvAttr pODBC3SQLGetEnvAttr;
-T3SQLSetStmtAttr pODBC3SQLSetStmtAttr;
-T3SQLGetStmtAttr pODBC3SQLGetStmtAttr;
-T3SQLPrepare pODBC3SQLPrepare;
-T3SQLBindParameter pODBC3SQLBindParameter;
-T3SQLSetCursorName pODBC3SQLSetCursorName;
-T3SQLExecute pODBC3SQLExecute;
-T3SQLExecDirect pODBC3SQLExecDirect;
-T3SQLDescribeParam pODBC3SQLDescribeParam;
-T3SQLNumParams pODBC3SQLNumParams;
-T3SQLParamData pODBC3SQLParamData;
-T3SQLPutData pODBC3SQLPutData;
-T3SQLRowCount pODBC3SQLRowCount;
-T3SQLNumResultCols pODBC3SQLNumResultCols;
-T3SQLDescribeCol pODBC3SQLDescribeCol;
-T3SQLColAttribute pODBC3SQLColAttribute;
-T3SQLBindCol pODBC3SQLBindCol;
-T3SQLFetch pODBC3SQLFetch;
-T3SQLFetchScroll pODBC3SQLFetchScroll;
-T3SQLGetData pODBC3SQLGetData;
-T3SQLSetPos pODBC3SQLSetPos;
-T3SQLBulkOperations pODBC3SQLBulkOperations;
-T3SQLMoreResults pODBC3SQLMoreResults;
-T3SQLGetDiagRec pODBC3SQLGetDiagRec;
-T3SQLColumnPrivileges pODBC3SQLColumnPrivileges;
-T3SQLColumns pODBC3SQLColumns;
-T3SQLForeignKeys pODBC3SQLForeignKeys;
-T3SQLPrimaryKeys pODBC3SQLPrimaryKeys;
-T3SQLProcedureColumns pODBC3SQLProcedureColumns;
-T3SQLProcedures pODBC3SQLProcedures;
-T3SQLSpecialColumns pODBC3SQLSpecialColumns;
-T3SQLStatistics pODBC3SQLStatistics;
-T3SQLTablePrivileges pODBC3SQLTablePrivileges;
-T3SQLTables pODBC3SQLTables;
-T3SQLFreeStmt pODBC3SQLFreeStmt;
-T3SQLCloseCursor pODBC3SQLCloseCursor;
-T3SQLCancel pODBC3SQLCancel;
-T3SQLEndTran pODBC3SQLEndTran;
-T3SQLDisconnect pODBC3SQLDisconnect;
-T3SQLFreeHandle pODBC3SQLFreeHandle;
-T3SQLGetCursorName pODBC3SQLGetCursorName;
-T3SQLNativeSql pODBC3SQLNativeSql;
-
-static bool LoadFunctions(oslModule pODBCso);
-
-// Take care of Dynamically loading of the DLL/shared lib and Addresses:
-// Returns sal_True at success
-bool LoadLibrary_ODBC3(OUString &_rPath)
-{
- static bool bLoaded = false;
- static oslModule pODBCso = nullptr;
-
- if (bLoaded)
- return true;
-#ifdef DISABLE_DYNLOADING
- (void)_rPath;
-#else
-#ifdef _WIN32
- _rPath = "ODBC32.DLL";
-#endif
-#ifdef UNX
- #ifdef MACOSX
- _rPath = "libiodbc.dylib";
- #else
- _rPath = "libodbc.so.2";
- pODBCso = osl_loadModule( _rPath.pData,SAL_LOADMODULE_NOW );
- if ( !pODBCso )
- {
- _rPath = "libodbc.so.1";
- pODBCso = osl_loadModule( _rPath.pData,SAL_LOADMODULE_NOW );
- }
- if ( !pODBCso )
- _rPath = "libodbc.so";
-
- #endif /* MACOSX */
-#endif
-
- if ( !pODBCso )
- pODBCso = osl_loadModule( _rPath.pData,SAL_LOADMODULE_NOW );
-#endif // DISABLE_DYNLOADING
- if( !pODBCso)
- return false;
-
- bLoaded = LoadFunctions(pODBCso);
- return bLoaded;
-}
-
-
-bool LoadFunctions(oslModule pODBCso)
-{
-
- if( ( pODBC3SQLAllocHandle = reinterpret_cast<T3SQLAllocHandle>(osl_getFunctionSymbol(pODBCso, OUString("SQLAllocHandle").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLConnect = reinterpret_cast<T3SQLConnect>(osl_getFunctionSymbol(pODBCso, OUString("SQLConnect").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLDriverConnect = reinterpret_cast<T3SQLDriverConnect>(osl_getFunctionSymbol(pODBCso, OUString("SQLDriverConnect").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLBrowseConnect = reinterpret_cast<T3SQLBrowseConnect>(osl_getFunctionSymbol(pODBCso, OUString("SQLBrowseConnect").pData ))) == nullptr )
- return false;
- if(( pODBC3SQLDataSources = reinterpret_cast<T3SQLDataSources>(osl_getFunctionSymbol(pODBCso, OUString("SQLDataSources").pData ))) == nullptr )
- return false;
- if(( pODBC3SQLDrivers = reinterpret_cast<T3SQLDrivers>(osl_getFunctionSymbol(pODBCso, OUString("SQLDrivers").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLGetInfo = reinterpret_cast<T3SQLGetInfo>(osl_getFunctionSymbol(pODBCso, OUString("SQLGetInfo").pData ))) == nullptr )
- return false;
- if(( pODBC3SQLGetFunctions = reinterpret_cast<T3SQLGetFunctions>(osl_getFunctionSymbol(pODBCso, OUString("SQLGetFunctions").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLGetTypeInfo = reinterpret_cast<T3SQLGetTypeInfo>(osl_getFunctionSymbol(pODBCso, OUString("SQLGetTypeInfo").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLSetConnectAttr = reinterpret_cast<T3SQLSetConnectAttr>(osl_getFunctionSymbol(pODBCso, OUString("SQLSetConnectAttr").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLGetConnectAttr = reinterpret_cast<T3SQLGetConnectAttr>(osl_getFunctionSymbol(pODBCso, OUString("SQLGetConnectAttr").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLSetEnvAttr = reinterpret_cast<T3SQLSetEnvAttr>(osl_getFunctionSymbol(pODBCso, OUString("SQLSetEnvAttr").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLGetEnvAttr = reinterpret_cast<T3SQLGetEnvAttr>(osl_getFunctionSymbol(pODBCso, OUString("SQLGetEnvAttr").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLSetStmtAttr = reinterpret_cast<T3SQLSetStmtAttr>(osl_getFunctionSymbol(pODBCso, OUString("SQLSetStmtAttr").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLGetStmtAttr = reinterpret_cast<T3SQLGetStmtAttr>(osl_getFunctionSymbol(pODBCso, OUString("SQLGetStmtAttr").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLPrepare = reinterpret_cast<T3SQLPrepare>(osl_getFunctionSymbol(pODBCso, OUString("SQLPrepare").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLBindParameter = reinterpret_cast<T3SQLBindParameter>(osl_getFunctionSymbol(pODBCso, OUString("SQLBindParameter").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLSetCursorName = reinterpret_cast<T3SQLSetCursorName>(osl_getFunctionSymbol(pODBCso, OUString("SQLSetCursorName").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLExecute = reinterpret_cast<T3SQLExecute>(osl_getFunctionSymbol(pODBCso, OUString("SQLExecute").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLExecDirect = reinterpret_cast<T3SQLExecDirect>(osl_getFunctionSymbol(pODBCso, OUString("SQLExecDirect").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLDescribeParam = reinterpret_cast<T3SQLDescribeParam>(osl_getFunctionSymbol(pODBCso, OUString("SQLDescribeParam").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLNumParams = reinterpret_cast<T3SQLNumParams>(osl_getFunctionSymbol(pODBCso, OUString("SQLNumParams").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLParamData = reinterpret_cast<T3SQLParamData>(osl_getFunctionSymbol(pODBCso, OUString("SQLParamData").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLPutData = reinterpret_cast<T3SQLPutData>(osl_getFunctionSymbol(pODBCso, OUString("SQLPutData").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLRowCount = reinterpret_cast<T3SQLRowCount>(osl_getFunctionSymbol(pODBCso, OUString("SQLRowCount").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLNumResultCols = reinterpret_cast<T3SQLNumResultCols>(osl_getFunctionSymbol(pODBCso, OUString("SQLNumResultCols").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLDescribeCol = reinterpret_cast<T3SQLDescribeCol>(osl_getFunctionSymbol(pODBCso, OUString("SQLDescribeCol").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLColAttribute = reinterpret_cast<T3SQLColAttribute>(osl_getFunctionSymbol(pODBCso, OUString("SQLColAttribute").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLBindCol = reinterpret_cast<T3SQLBindCol>(osl_getFunctionSymbol(pODBCso, OUString("SQLBindCol").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLFetch = reinterpret_cast<T3SQLFetch>(osl_getFunctionSymbol(pODBCso, OUString("SQLFetch").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLFetchScroll = reinterpret_cast<T3SQLFetchScroll>(osl_getFunctionSymbol(pODBCso, OUString("SQLFetchScroll").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLGetData = reinterpret_cast<T3SQLGetData>(osl_getFunctionSymbol(pODBCso, OUString("SQLGetData").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLSetPos = reinterpret_cast<T3SQLSetPos>(osl_getFunctionSymbol(pODBCso, OUString("SQLSetPos").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLBulkOperations = reinterpret_cast<T3SQLBulkOperations>(osl_getFunctionSymbol(pODBCso, OUString("SQLBulkOperations").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLMoreResults = reinterpret_cast<T3SQLMoreResults>(osl_getFunctionSymbol(pODBCso, OUString("SQLMoreResults").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLGetDiagRec = reinterpret_cast<T3SQLGetDiagRec>(osl_getFunctionSymbol(pODBCso, OUString("SQLGetDiagRec").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLColumnPrivileges = reinterpret_cast<T3SQLColumnPrivileges>(osl_getFunctionSymbol(pODBCso, OUString("SQLColumnPrivileges").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLColumns = reinterpret_cast<T3SQLColumns>(osl_getFunctionSymbol(pODBCso, OUString("SQLColumns").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLForeignKeys = reinterpret_cast<T3SQLForeignKeys>(osl_getFunctionSymbol(pODBCso, OUString("SQLForeignKeys").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLPrimaryKeys = reinterpret_cast<T3SQLPrimaryKeys>(osl_getFunctionSymbol(pODBCso, OUString("SQLPrimaryKeys").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLProcedureColumns = reinterpret_cast<T3SQLProcedureColumns>(osl_getFunctionSymbol(pODBCso, OUString("SQLProcedureColumns").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLProcedures = reinterpret_cast<T3SQLProcedures>(osl_getFunctionSymbol(pODBCso, OUString("SQLProcedures").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLSpecialColumns = reinterpret_cast<T3SQLSpecialColumns>(osl_getFunctionSymbol(pODBCso, OUString("SQLSpecialColumns").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLStatistics = reinterpret_cast<T3SQLStatistics>(osl_getFunctionSymbol(pODBCso, OUString("SQLStatistics").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLTablePrivileges = reinterpret_cast<T3SQLTablePrivileges>(osl_getFunctionSymbol(pODBCso, OUString("SQLTablePrivileges").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLTables = reinterpret_cast<T3SQLTables>(osl_getFunctionSymbol(pODBCso, OUString("SQLTables").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLFreeStmt = reinterpret_cast<T3SQLFreeStmt>(osl_getFunctionSymbol(pODBCso, OUString("SQLFreeStmt").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLCloseCursor = reinterpret_cast<T3SQLCloseCursor>(osl_getFunctionSymbol(pODBCso, OUString("SQLCloseCursor").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLCancel = reinterpret_cast<T3SQLCancel>(osl_getFunctionSymbol(pODBCso, OUString("SQLCancel").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLEndTran = reinterpret_cast<T3SQLEndTran>(osl_getFunctionSymbol(pODBCso, OUString("SQLEndTran").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLDisconnect = reinterpret_cast<T3SQLDisconnect>(osl_getFunctionSymbol(pODBCso, OUString("SQLDisconnect").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLFreeHandle = reinterpret_cast<T3SQLFreeHandle>(osl_getFunctionSymbol(pODBCso, OUString("SQLFreeHandle").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLGetCursorName = reinterpret_cast<T3SQLGetCursorName>(osl_getFunctionSymbol(pODBCso, OUString("SQLGetCursorName").pData ))) == nullptr )
- return false;
- if( ( pODBC3SQLNativeSql = reinterpret_cast<T3SQLNativeSql>(osl_getFunctionSymbol(pODBCso, OUString("SQLNativeSql").pData ))) == nullptr )
- return false;
-
- return true;
-}
-
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/odbc/OPreparedStatement.cxx b/connectivity/source/drivers/odbc/OPreparedStatement.cxx
index 507a52d872a2..e0225e0f6407 100644
--- a/connectivity/source/drivers/odbc/OPreparedStatement.cxx
+++ b/connectivity/source/drivers/odbc/OPreparedStatement.cxx
@@ -40,22 +40,12 @@ using namespace connectivity;
using namespace connectivity::odbc;
using namespace com::sun::star::uno;
using namespace com::sun::star::lang;
-using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
-using namespace com::sun::star::sdbcx;
using namespace com::sun::star::container;
using namespace com::sun::star::io;
using namespace com::sun::star::util;
-IMPLEMENT_SERVICE_INFO(OPreparedStatement,"com.sun.star.sdbcx.OPreparedStatement","com.sun.star.sdbc.PreparedStatement");
-
-namespace
-{
- // for now, never use wchar,
- // but most of code is prepared to handle it
- // in case we make this configurable
- const bool bUseWChar = false;
-}
+IMPLEMENT_SERVICE_INFO(OPreparedStatement,u"com.sun.star.sdbcx.OPreparedStatement"_ustr,u"com.sun.star.sdbc.PreparedStatement"_ustr);
OPreparedStatement::OPreparedStatement( OConnection* _pConnection,const OUString& sql)
:OStatement_BASE2(_pConnection)
@@ -93,6 +83,11 @@ css::uno::Sequence< css::uno::Type > SAL_CALL OPreparedStatement::getTypes( )
Reference< XResultSetMetaData > SAL_CALL OPreparedStatement::getMetaData( )
{
+ return getMetaDataImpl();
+}
+
+const rtl::Reference< OResultSetMetaData > & OPreparedStatement::getMetaDataImpl()
+{
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
@@ -149,7 +144,7 @@ sal_Bool SAL_CALL OPreparedStatement::execute( )
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
try
{
- SQLRETURN nReturn = N3SQLExecute(m_aStatementHandle);
+ SQLRETURN nReturn = functions().Execute(m_aStatementHandle);
OTools::ThrowException(m_pConnection.get(),nReturn,m_aStatementHandle,SQL_HANDLE_STMT,*this);
bool needData = nReturn == SQL_NEED_DATA;
@@ -163,7 +158,7 @@ sal_Bool SAL_CALL OPreparedStatement::execute( )
// Get the parameter number that requires data
sal_Int32* paramIndex = nullptr;
- N3SQLParamData(m_aStatementHandle, reinterpret_cast<SQLPOINTER*>(&paramIndex));
+ functions().ParamData(m_aStatementHandle, reinterpret_cast<SQLPOINTER*>(&paramIndex));
// If the parameter index is -1, there is no
// more data required
@@ -236,7 +231,7 @@ Reference< XResultSet > SAL_CALL OPreparedStatement::executeQuery( )
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- Reference< XResultSet > rs;
+ rtl::Reference< OResultSet > rs;
prepareStatement();
@@ -316,36 +311,21 @@ void OPreparedStatement::setParameter(const sal_Int32 parameterIndex, const sal_
*
* Our internal OUString storage is always UTF-16, so no conversion to do here.
*/
- static_assert(sizeof (SQLWCHAR) == 2 || sizeof (SQLWCHAR) == 4, "must be 2 or 4");
- if (sizeof (SQLWCHAR) == 2)
- {
- nCharLen = _sData.getLength();
- nByteLen = 2 * nCharLen;
- pData = allocBindBuf(parameterIndex, nByteLen);
- memcpy(pData, _sData.getStr(), nByteLen);
- }
- else
- {
- pData = allocBindBuf(parameterIndex, _sData.getLength() * 4);
- sal_uInt32* pCursor = static_cast<sal_uInt32*>(pData);
- nCharLen = 0;
- for (sal_Int32 i = 0; i != _sData.getLength();)
- {
- *pCursor++ = _sData.iterateCodePoints(&i);
- nCharLen += 1;
- }
- nByteLen = 4 * nCharLen;
- }
+ SQLWChars data(_sData);
+ nCharLen = data.cch();
+ nByteLen = data.cb();
+ pData = allocBindBuf(parameterIndex, nByteLen);
+ memcpy(pData, data.get(), nByteLen);
}
else
{
assert(getOwnConnection()->getTextEncoding() != RTL_TEXTENCODING_UCS2 &&
getOwnConnection()->getTextEncoding() != RTL_TEXTENCODING_UCS4);
- OString sOData(
- OUStringToOString(_sData, getOwnConnection()->getTextEncoding()));
- nCharLen = nByteLen = sOData.getLength();
+ SQLChars data(_sData, getOwnConnection()->getTextEncoding());
+ nCharLen = data.cch();
+ nByteLen = data.cb();
pData = allocBindBuf(parameterIndex, nByteLen);
- memcpy(pData, sOData.getStr(), nByteLen);
+ memcpy(pData, data.get(), nByteLen);
}
setParameter( parameterIndex, _nType, nCharLen, _nScale, pData, nByteLen, nByteLen );
@@ -369,13 +349,13 @@ void OPreparedStatement::setParameter(const sal_Int32 parameterIndex, const sal_
void OPreparedStatement::setParameter(const sal_Int32 parameterIndex, const sal_Int32 _nType, const SQLULEN _nColumnSize, const sal_Int32 _nScale, const void* const _pData, const SQLULEN _nDataLen, const SQLLEN _nDataAllocLen)
{
SQLSMALLINT fCType, fSqlType;
- OTools::getBindTypes(bUseWChar, m_pConnection->useOldDateFormat(), OTools::jdbcTypeToOdbc(_nType), fCType, fSqlType);
+ OTools::getBindTypes(m_pConnection->useOldDateFormat(), OTools::jdbcTypeToOdbc(_nType), fCType, fSqlType);
SQLLEN& rDataLen = boundParams[parameterIndex-1].getBindLengthBuffer();
rDataLen = _nDataLen;
SQLRETURN nRetcode;
- nRetcode = (*reinterpret_cast<T3SQLBindParameter>(m_pConnection->getOdbcFunction(ODBC3SQLFunctionId::BindParameter)))(
+ nRetcode = functions().BindParameter(
m_aStatementHandle,
// checkParameterIndex guarantees this is safe
static_cast<SQLUSMALLINT>(parameterIndex),
@@ -509,13 +489,12 @@ void SAL_CALL OPreparedStatement::setNull( sal_Int32 parameterIndex, const sal_I
SQLSMALLINT fCType;
SQLSMALLINT fSqlType;
- OTools::getBindTypes( bUseWChar,
- m_pConnection->useOldDateFormat(),
+ OTools::getBindTypes( m_pConnection->useOldDateFormat(),
OTools::jdbcTypeToOdbc(_nType),
fCType,
fSqlType);
- SQLRETURN nReturn = N3SQLBindParameter( m_aStatementHandle,
+ SQLRETURN nReturn = functions().BindParameter( m_aStatementHandle,
static_cast<SQLUSMALLINT>(parameterIndex),
SQL_PARAM_INPUT,
fCType,
@@ -546,13 +525,13 @@ void SAL_CALL OPreparedStatement::setBlob( sal_Int32 parameterIndex, const Refer
void SAL_CALL OPreparedStatement::setArray( sal_Int32 /*parameterIndex*/, const Reference< XArray >& /*x*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setArray", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setArray"_ustr, *this );
}
void SAL_CALL OPreparedStatement::setRef( sal_Int32 /*parameterIndex*/, const Reference< XRef >& /*x*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XParameters::setRef", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XParameters::setRef"_ustr, *this );
}
void SAL_CALL OPreparedStatement::setObjectWithInfo( sal_Int32 parameterIndex, const Any& x, sal_Int32 sqlType, sal_Int32 scale )
@@ -582,9 +561,21 @@ void SAL_CALL OPreparedStatement::setObjectWithInfo( sal_Int32 parameterIndex, c
case DataType::NUMERIC:
if(x.hasValue())
{
+ // NB: sqlType and scale are not to be sent to the database, but to be used here.
+ // XParameters::setObjectWithInfo is required to convert the given object to the
+ // required type before being sent to the database; and scale may be needed for
+ // that conversion. But here we convert any object to a decimal string; and ODBC
+ // (or at least some drivers - see tdf#162219) needs DecimalDigits value passed
+ // to SQLBindParameter equal to the number of decimals in the string, otherwise
+ // the conversion from string to decimal fails. It may be not equal to the scale
+ // of the target parameter; ODBC driver handles that. Therefore, here we ignore
+ // the originally passed value of scale.
ORowSetValue aValue;
aValue.fill(x);
- setParameter(parameterIndex, sqlType, scale, aValue.getString());
+ OUString number(aValue.getString());
+ sal_Int32 nIndex = number.indexOf('.');
+ sal_Int32 decimals = nIndex < 0 ? 0 : (number.getLength() - nIndex - 1);
+ setParameter(parameterIndex, sqlType, decimals, number);
}
else
setNull(parameterIndex,sqlType);
@@ -641,13 +632,13 @@ void SAL_CALL OPreparedStatement::clearParameters( )
::osl::MutexGuard aGuard( m_aMutex );
prepareStatement();
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
- N3SQLFreeStmt (m_aStatementHandle, SQL_RESET_PARAMS);
- N3SQLFreeStmt (m_aStatementHandle, SQL_UNBIND);
+ functions().FreeStmt (m_aStatementHandle, SQL_RESET_PARAMS);
+ functions().FreeStmt (m_aStatementHandle, SQL_UNBIND);
}
void SAL_CALL OPreparedStatement::clearBatch( )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XPreparedBatchExecution::clearBatch", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XPreparedBatchExecution::clearBatch"_ustr, *this );
// clearParameters( );
// m_aBatchVector.erase();
}
@@ -655,18 +646,14 @@ void SAL_CALL OPreparedStatement::clearBatch( )
void SAL_CALL OPreparedStatement::addBatch( )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XPreparedBatchExecution::addBatch", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XPreparedBatchExecution::addBatch"_ustr, *this );
}
-
Sequence< sal_Int32 > SAL_CALL OPreparedStatement::executeBatch( )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XPreparedBatchExecution::executeBatch", *this );
- // not reached, but keep -Werror happy
- return Sequence< sal_Int32 > ();
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XPreparedBatchExecution::executeBatch"_ustr, *this );
}
-
// methods
@@ -679,7 +666,7 @@ void OPreparedStatement::initBoundParam ()
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
// Get the number of parameters
numParams = 0;
- N3SQLNumParams (m_aStatementHandle,&numParams);
+ functions().NumParams (m_aStatementHandle,&numParams);
// There are parameter markers, allocate the bound
// parameter objects
@@ -778,7 +765,7 @@ void OPreparedStatement::putParamData (sal_Int32 index)
// Put the data
OSL_ENSURE( m_aStatementHandle, "OPreparedStatement::putParamData: StatementHandle is null!" );
- N3SQLPutData ( m_aStatementHandle, buf.getArray(), buf.getLength() );
+ functions().PutData ( m_aStatementHandle, buf.getArray(), buf.getLength() );
// decrement the number of bytes still needed
maxBytesLeft -= haveRead;
@@ -825,11 +812,11 @@ void OPreparedStatement::setStream(
*lenBuf = SQL_LEN_DATA_AT_EXEC (length);
SQLSMALLINT fCType, fSqlType;
- OTools::getBindTypes(bUseWChar, m_pConnection->useOldDateFormat(), OTools::jdbcTypeToOdbc(_nType), fCType, fSqlType);
+ OTools::getBindTypes(m_pConnection->useOldDateFormat(), OTools::jdbcTypeToOdbc(_nType), fCType, fSqlType);
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
- N3SQLBindParameter(m_aStatementHandle,
+ functions().BindParameter(m_aStatementHandle,
static_cast<SQLUSMALLINT>(ParameterIndex),
SQL_PARAM_INPUT,
fCType,
@@ -888,8 +875,17 @@ void OPreparedStatement::prepareStatement()
if(!isPrepared())
{
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
- OString aSql(OUStringToOString(m_sSqlStatement,getOwnConnection()->getTextEncoding()));
- SQLRETURN nReturn = N3SQLPrepare(m_aStatementHandle, reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(aSql.getStr())), aSql.getLength());
+ SQLRETURN nReturn;
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::PrepareW))
+ {
+ SQLWChars aSql(m_sSqlStatement);
+ nReturn = functions().PrepareW(m_aStatementHandle, aSql.get(), aSql.cch());
+ }
+ else
+ {
+ SQLChars aSql(m_sSqlStatement, getOwnConnection()->getTextEncoding());
+ nReturn = functions().Prepare(m_aStatementHandle, aSql.get(), aSql.cch());
+ }
OTools::ThrowException(m_pConnection.get(),nReturn,m_aStatementHandle,SQL_HANDLE_STMT,*this);
m_bPrepared = true;
initBoundParam();
@@ -909,14 +905,14 @@ void OPreparedStatement::checkParameterIndex(sal_Int32 _parameterIndex)
));
SQLException aNext(sError,*this, OUString(),0,Any());
- ::dbtools::throwInvalidIndexException(*this,makeAny(aNext));
+ ::dbtools::throwInvalidIndexException(*this,Any(aNext));
}
}
rtl::Reference<OResultSet> OPreparedStatement::createResultSet()
{
rtl::Reference<OResultSet> pReturn = new OResultSet(m_aStatementHandle,this);
- pReturn->setMetaData(getMetaData());
+ pReturn->setMetaData(getMetaDataImpl());
return pReturn;
}
diff --git a/connectivity/source/drivers/odbc/ORealDriver.cxx b/connectivity/source/drivers/odbc/ORealDriver.cxx
deleted file mode 100644
index 28c054b45f7c..000000000000
--- a/connectivity/source/drivers/odbc/ORealDriver.cxx
+++ /dev/null
@@ -1,291 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <odbc/ODriver.hxx>
-#include <odbc/OTools.hxx>
-#include <odbc/OFunctions.hxx>
-
-namespace connectivity::odbc
-{
- namespace {
-
- class ORealOdbcDriver : public ODBCDriver
- {
- protected:
- virtual oslGenericFunction getOdbcFunction(ODBC3SQLFunctionId _nIndex) const override;
- virtual SQLHANDLE EnvironmentHandle(OUString &_rPath) override;
- public:
- explicit ORealOdbcDriver(const css::uno::Reference< css::uno::XComponentContext >& _rxContext) : ODBCDriver(_rxContext) {}
- };
-
- }
-
-oslGenericFunction ORealOdbcDriver::getOdbcFunction(ODBC3SQLFunctionId _nIndex) const
-{
- oslGenericFunction pFunction = nullptr;
- switch(_nIndex)
- {
- case ODBC3SQLFunctionId::AllocHandle:
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLAllocHandle);
- break;
- case ODBC3SQLFunctionId::Connect:
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLConnect);
- break;
- case ODBC3SQLFunctionId::DriverConnect:
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLDriverConnect);
- break;
- case ODBC3SQLFunctionId::BrowseConnect:
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLBrowseConnect);
- break;
- case ODBC3SQLFunctionId::DataSources:
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLDataSources);
- break;
- case ODBC3SQLFunctionId::Drivers:
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLDrivers);
- break;
- case ODBC3SQLFunctionId::GetInfo:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLGetInfo);
- break;
- case ODBC3SQLFunctionId::GetFunctions:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLGetFunctions);
- break;
- case ODBC3SQLFunctionId::GetTypeInfo:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLGetTypeInfo);
- break;
- case ODBC3SQLFunctionId::SetConnectAttr:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLSetConnectAttr);
- break;
- case ODBC3SQLFunctionId::GetConnectAttr:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLGetConnectAttr);
- break;
- case ODBC3SQLFunctionId::SetEnvAttr:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLSetEnvAttr);
- break;
- case ODBC3SQLFunctionId::GetEnvAttr:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLGetEnvAttr);
- break;
- case ODBC3SQLFunctionId::SetStmtAttr:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLSetStmtAttr);
- break;
- case ODBC3SQLFunctionId::GetStmtAttr:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLGetStmtAttr);
- break;
- case ODBC3SQLFunctionId::Prepare:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLPrepare);
- break;
- case ODBC3SQLFunctionId::BindParameter:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLBindParameter);
- break;
- case ODBC3SQLFunctionId::SetCursorName:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLSetCursorName);
- break;
- case ODBC3SQLFunctionId::Execute:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLExecute);
- break;
- case ODBC3SQLFunctionId::ExecDirect:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLExecDirect);
- break;
- case ODBC3SQLFunctionId::DescribeParam:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLDescribeParam);
- break;
- case ODBC3SQLFunctionId::NumParams:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLNumParams);
- break;
- case ODBC3SQLFunctionId::ParamData:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLParamData);
- break;
- case ODBC3SQLFunctionId::PutData:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLPutData);
- break;
- case ODBC3SQLFunctionId::RowCount:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLRowCount);
- break;
- case ODBC3SQLFunctionId::NumResultCols:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLNumResultCols);
- break;
- case ODBC3SQLFunctionId::DescribeCol:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLDescribeCol);
- break;
- case ODBC3SQLFunctionId::ColAttribute:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLColAttribute);
- break;
- case ODBC3SQLFunctionId::BindCol:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLBindCol);
- break;
- case ODBC3SQLFunctionId::Fetch:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLFetch);
- break;
- case ODBC3SQLFunctionId::FetchScroll:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLFetchScroll);
- break;
- case ODBC3SQLFunctionId::GetData:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLGetData);
- break;
- case ODBC3SQLFunctionId::SetPos:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLSetPos);
- break;
- case ODBC3SQLFunctionId::BulkOperations:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLBulkOperations);
- break;
- case ODBC3SQLFunctionId::MoreResults:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLMoreResults);
- break;
- case ODBC3SQLFunctionId::GetDiagRec:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLGetDiagRec);
- break;
- case ODBC3SQLFunctionId::ColumnPrivileges:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLColumnPrivileges);
- break;
- case ODBC3SQLFunctionId::Columns:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLColumns);
- break;
- case ODBC3SQLFunctionId::ForeignKeys:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLForeignKeys);
- break;
- case ODBC3SQLFunctionId::PrimaryKeys:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLPrimaryKeys);
- break;
- case ODBC3SQLFunctionId::ProcedureColumns:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLProcedureColumns);
- break;
- case ODBC3SQLFunctionId::Procedures:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLProcedures);
- break;
- case ODBC3SQLFunctionId::SpecialColumns:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLSpecialColumns);
- break;
- case ODBC3SQLFunctionId::Statistics:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLStatistics);
- break;
- case ODBC3SQLFunctionId::TablePrivileges:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLTablePrivileges);
- break;
- case ODBC3SQLFunctionId::Tables:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLTables);
- break;
- case ODBC3SQLFunctionId::FreeStmt:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLFreeStmt);
- break;
- case ODBC3SQLFunctionId::CloseCursor:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLCloseCursor);
- break;
- case ODBC3SQLFunctionId::Cancel:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLCancel);
- break;
- case ODBC3SQLFunctionId::EndTran:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLEndTran);
- break;
- case ODBC3SQLFunctionId::Disconnect:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLDisconnect);
- break;
- case ODBC3SQLFunctionId::FreeHandle:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLFreeHandle);
- break;
- case ODBC3SQLFunctionId::GetCursorName:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLGetCursorName);
- break;
- case ODBC3SQLFunctionId::NativeSql:
-
- pFunction = reinterpret_cast<oslGenericFunction>(pODBC3SQLNativeSql);
- break;
- default:
- OSL_FAIL("Function unknown!");
- }
- return pFunction;
-}
-
-
-// ODBC Environment (common for all Connections):
-SQLHANDLE ORealOdbcDriver::EnvironmentHandle(OUString &_rPath)
-{
- // Is (for this instance) already an Environment made?
- if (!m_pDriverHandle)
- {
- SQLHANDLE h = SQL_NULL_HANDLE;
- // allocate Environment
-
- // load ODBC-DLL now:
- if (!LoadLibrary_ODBC3(_rPath) || N3SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&h) != SQL_SUCCESS)
- return SQL_NULL_HANDLE;
-
- // Save in global Structure
- m_pDriverHandle = h;
- N3SQLSetEnvAttr(h, SQL_ATTR_ODBC_VERSION, reinterpret_cast<SQLPOINTER>(SQL_OV_ODBC3), SQL_IS_UINTEGER);
- //N3SQLSetEnvAttr(h, SQL_ATTR_CONNECTION_POOLING,(SQLPOINTER) SQL_CP_ONE_PER_HENV, SQL_IS_INTEGER);
- }
-
- return m_pDriverHandle;
-}
-
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
-connectivity_odbc_ORealOdbcDriver_get_implementation(
- css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> const&)
-{
- return cppu::acquire(new connectivity::odbc::ORealOdbcDriver(context));
-}
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/odbc/OResultSet.cxx b/connectivity/source/drivers/odbc/OResultSet.cxx
index b38d81b3a4eb..1603f4396749 100644
--- a/connectivity/source/drivers/odbc/OResultSet.cxx
+++ b/connectivity/source/drivers/odbc/OResultSet.cxx
@@ -31,6 +31,7 @@
#include <cppuhelper/typeprovider.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <comphelper/types.hxx>
+#include <comphelper/scopeguard.hxx>
#include <connectivity/dbtools.hxx>
#include <connectivity/dbexception.hxx>
#include <o3tl/safeint.hxx>
@@ -55,21 +56,87 @@ static_assert(ODBC_SQL_NOT_DEFINED != SQL_UB_ON, "ODBC_SQL_NOT_DEFINED must be u
static_assert(ODBC_SQL_NOT_DEFINED != SQL_UB_FIXED, "ODBC_SQL_NOT_DEFINED must be unique");
static_assert(ODBC_SQL_NOT_DEFINED != SQL_UB_VARIABLE, "ODBC_SQL_NOT_DEFINED must be unique");
+class connectivity::odbc::BindData
+{
+public:
+ virtual void* data() = 0;
+ virtual SQLLEN len() const = 0;
+
+ virtual ~BindData() {}
+};
+
namespace
{
- const SQLLEN nMaxBookmarkLen = 20;
-}
+const SQLLEN nMaxBookmarkLen = 20;
+
+template <typename T> class SimpleBindData : public connectivity::odbc::BindData
+{
+public:
+ SimpleBindData(const void* p)
+ : value(*static_cast<const T*>(p))
+ {
+ }
+ void* data() override { return &value; }
+ SQLLEN len() const override { return sizeof(T); }
+private:
+ T value;
+};
+
+template <class CHARS_t> class CharsBindData : public connectivity::odbc::BindData
+{
+public:
+ template <typename... Args>
+ CharsBindData(const void* p, Args... args)
+ : value(*static_cast<const OUString*>(p), args...)
+ {
+ }
+ template <class S> requires std::is_class_v<S>
+ CharsBindData(const S& val)
+ : value(val)
+ {
+ }
+ void* data() override { return value.get(); }
+ SQLLEN len() const override { return SQL_NTS; } // input data needs to tell it's null-terminated
+
+private:
+ CHARS_t value;
+};
+
+class NullBindData : public connectivity::odbc::BindData
+{
+public:
+ void* data() override { return &value; }
+ SQLLEN len() const override { return SQL_NULL_DATA; }
+
+private:
+ char value[2] = {};
+};
+
+class BinaryBindData : public connectivity::odbc::BindData
+{
+public:
+ BinaryBindData(const void* p)
+ : value(*static_cast<const css::uno::Sequence<sal_Int8>*>(p))
+ {
+ }
+ void* data() override { return const_cast<sal_Int8*>(value.getConstArray()); }
+ SQLLEN len() const override { return value.getLength(); }
+
+private:
+ css::uno::Sequence<sal_Int8> value; // ref-counted CoW
+};
+}
// IMPLEMENT_SERVICE_INFO(OResultSet,"com.sun.star.sdbcx.OResultSet","com.sun.star.sdbc.ResultSet");
OUString SAL_CALL OResultSet::getImplementationName( )
{
- return "com.sun.star.sdbcx.odbc.ResultSet";
+ return u"com.sun.star.sdbcx.odbc.ResultSet"_ustr;
}
Sequence< OUString > SAL_CALL OResultSet::getSupportedServiceNames( )
{
- return { "com.sun.star.sdbc.ResultSet", "com.sun.star.sdbcx.ResultSet" };
+ return { u"com.sun.star.sdbc.ResultSet"_ustr, u"com.sun.star.sdbcx.ResultSet"_ustr };
}
sal_Bool SAL_CALL OResultSet::supportsService( const OUString& _rServiceName )
@@ -142,10 +209,10 @@ OResultSet::OResultSet(SQLHANDLE _pStatementHandle ,OStatement_Base* pStmt) :
// We use SQLFetchScroll unconditionally in several places
// the *only* difference this makes is whether ::next() uses SQLFetchScroll or SQLFetch
// so this test seems pointless
- if ( getOdbcFunction(ODBC3SQLFunctionId::GetFunctions) )
+ if (functions().has(ODBC3SQLFunctionId::GetFunctions))
{
SQLUSMALLINT nSupported = 0;
- m_bUseFetchScroll = ( N3SQLGetFunctions(m_aConnectionHandle,SQL_API_SQLFETCHSCROLL,&nSupported) == SQL_SUCCESS && nSupported == 1 );
+ m_bUseFetchScroll = ( functions().GetFunctions(m_aConnectionHandle,SQL_API_SQLFETCHSCROLL,&nSupported) == SQL_SUCCESS && nSupported == 1 );
}
}
catch(const Exception&)
@@ -169,7 +236,7 @@ void OResultSet::construct()
void OResultSet::disposing()
{
- N3SQLCloseCursor(m_aStatementHandle);
+ functions().CloseCursor(m_aStatementHandle);
OPropertySetHelper::disposing();
::osl::MutexGuard aGuard(m_aMutex);
@@ -180,135 +247,17 @@ void OResultSet::disposing()
m_xMetaData.clear();
}
+// See OResultSet::updateValue
SQLRETURN OResultSet::unbind(bool _bUnbindHandle)
{
SQLRETURN nRet = 0;
if ( _bUnbindHandle )
- nRet = N3SQLFreeStmt(m_aStatementHandle,SQL_UNBIND);
+ nRet = functions().FreeStmt(m_aStatementHandle,SQL_UNBIND);
- if ( !m_aBindVector.empty() )
- {
- for(auto& [rPtrAddr, rType] : m_aBindVector)
- {
- switch (rType)
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- delete static_cast< OString* >(reinterpret_cast< void * >(rPtrAddr));
- break;
- case DataType::BIGINT:
- delete static_cast< sal_Int64* >(reinterpret_cast< void * >(rPtrAddr));
- break;
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- delete static_cast< OString* >(reinterpret_cast< void * >(rPtrAddr));
- break;
- case DataType::REAL:
- case DataType::DOUBLE:
- delete static_cast< double* >(reinterpret_cast< void * >(rPtrAddr));
- break;
- case DataType::LONGVARCHAR:
- case DataType::CLOB:
- delete [] static_cast< char* >(reinterpret_cast< void * >(rPtrAddr));
- break;
- case DataType::LONGVARBINARY:
- case DataType::BLOB:
- delete [] static_cast< char* >(reinterpret_cast< void * >(rPtrAddr));
- break;
- case DataType::DATE:
- delete static_cast< DATE_STRUCT* >(reinterpret_cast< void * >(rPtrAddr));
- break;
- case DataType::TIME:
- delete static_cast< TIME_STRUCT* >(reinterpret_cast< void * >(rPtrAddr));
- break;
- case DataType::TIMESTAMP:
- delete static_cast< TIMESTAMP_STRUCT* >(reinterpret_cast< void * >(rPtrAddr));
- break;
- case DataType::BIT:
- case DataType::TINYINT:
- delete static_cast< sal_Int8* >(reinterpret_cast< void * >(rPtrAddr));
- break;
- case DataType::SMALLINT:
- delete static_cast< sal_Int16* >(reinterpret_cast< void * >(rPtrAddr));
- break;
- case DataType::INTEGER:
- delete static_cast< sal_Int32* >(reinterpret_cast< void * >(rPtrAddr));
- break;
- case DataType::FLOAT:
- delete static_cast< float* >(reinterpret_cast< void * >(rPtrAddr));
- break;
- case DataType::BINARY:
- case DataType::VARBINARY:
- delete static_cast< sal_Int8* >(reinterpret_cast< void * >(rPtrAddr));
- break;
- }
- }
- m_aBindVector.clear();
- }
+ m_aBindVector.clear();
return nRet;
}
-TVoidPtr OResultSet::allocBindColumn(sal_Int32 _nType,sal_Int32 _nColumnIndex)
-{
- TVoidPtr aPair;
- switch (_nType)
- {
- case DataType::CHAR:
- case DataType::VARCHAR:
- aPair = TVoidPtr(reinterpret_cast< sal_Int64 >(new OString()),_nType);
- break;
- case DataType::BIGINT:
- aPair = TVoidPtr(reinterpret_cast< sal_Int64 >(new sal_Int64(0)),_nType);
- break;
- case DataType::DECIMAL:
- case DataType::NUMERIC:
- aPair = TVoidPtr(reinterpret_cast< sal_Int64 >(new OString()),_nType);
- break;
- case DataType::REAL:
- case DataType::DOUBLE:
- aPair = TVoidPtr(reinterpret_cast< sal_Int64 >(new double(0.0)),_nType);
- break;
- case DataType::LONGVARCHAR:
- case DataType::CLOB:
- aPair = TVoidPtr(reinterpret_cast< sal_Int64 >(new char[2]),_nType); // only for finding
- break;
- case DataType::LONGVARBINARY:
- case DataType::BLOB:
- aPair = TVoidPtr(reinterpret_cast< sal_Int64 >(new char[2]),_nType); // only for finding
- break;
- case DataType::DATE:
- aPair = TVoidPtr(reinterpret_cast< sal_Int64 >(new DATE_STRUCT),_nType);
- break;
- case DataType::TIME:
- aPair = TVoidPtr(reinterpret_cast< sal_Int64 >(new TIME_STRUCT),_nType);
- break;
- case DataType::TIMESTAMP:
- aPair = TVoidPtr(reinterpret_cast< sal_Int64 >(new TIMESTAMP_STRUCT),_nType);
- break;
- case DataType::BIT:
- case DataType::TINYINT:
- aPair = TVoidPtr(reinterpret_cast< sal_Int64 >(new sal_Int8(0)),_nType);
- break;
- case DataType::SMALLINT:
- aPair = TVoidPtr(reinterpret_cast< sal_Int64 >(new sal_Int16(0)),_nType);
- break;
- case DataType::INTEGER:
- aPair = TVoidPtr(reinterpret_cast< sal_Int64 >(new sal_Int32(0)),_nType);
- break;
- case DataType::FLOAT:
- aPair = TVoidPtr(reinterpret_cast< sal_Int64 >(new float(0)),_nType);
- break;
- case DataType::BINARY:
- case DataType::VARBINARY:
- aPair = TVoidPtr(reinterpret_cast< sal_Int64 >(new sal_Int8[m_aRow[_nColumnIndex].getSequence().getLength()]),_nType);
- break;
- default:
- SAL_WARN( "connectivity.odbc", "Unknown type");
- aPair = TVoidPtr(0,_nType);
- }
- return aPair;
-}
-
void OResultSet::allocBuffer()
{
Reference< XResultSetMetaData > xMeta = getMetaData();
@@ -369,8 +318,6 @@ sal_Int32 SAL_CALL OResultSet::findColumn( const OUString& columnName )
}
::dbtools::throwInvalidColumnException( columnName, *this );
- assert(false);
- return 0; // Never reached
}
void OResultSet::ensureCacheForColumn(sal_Int32 columnIndex)
@@ -407,9 +354,7 @@ Reference< XInputStream > SAL_CALL OResultSet::getBinaryStream( sal_Int32 /*colu
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getBinaryStream", *this );
-
- return nullptr;
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getBinaryStream"_ustr, *this );
}
Reference< XInputStream > SAL_CALL OResultSet::getCharacterStream( sal_Int32 /*columnIndex*/ )
@@ -417,9 +362,7 @@ Reference< XInputStream > SAL_CALL OResultSet::getCharacterStream( sal_Int32 /*c
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getBinaryStream", *this );
-
- return nullptr;
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getBinaryStream"_ustr, *this );
}
template < typename T > T OResultSet::impl_getValue( const sal_Int32 _nColumnIndex, SQLSMALLINT nType )
@@ -498,7 +441,7 @@ Sequence< sal_Int8 > SAL_CALL OResultSet::getBytes( sal_Int32 columnIndex )
break;
default:
{
- OUString const & sRet = m_aRow[columnIndex].getString();
+ OUString const sRet = m_aRow[columnIndex].getString();
nRet = Sequence<sal_Int8>(reinterpret_cast<const sal_Int8*>(sRet.getStr()),sizeof(sal_Unicode)*sRet.getLength());
}
}
@@ -517,7 +460,7 @@ Sequence< sal_Int8 > OResultSet::impl_getBytes( sal_Int32 columnIndex )
case SQL_CHAR:
case SQL_LONGVARCHAR:
{
- OUString const & aRet = OTools::getStringValue(m_pStatement->getOwnConnection(),m_aStatementHandle,columnIndex,nColumnType,m_bWasNull,**this,m_nTextEncoding);
+ OUString const aRet = OTools::getStringValue(m_pStatement->getOwnConnection(),m_aStatementHandle,columnIndex,nColumnType,m_bWasNull,**this,m_nTextEncoding);
return Sequence<sal_Int8>(reinterpret_cast<const sal_Int8*>(aRet.getStr()),sizeof(sal_Unicode)*aRet.getLength());
}
default:
@@ -597,31 +540,24 @@ Reference< XResultSetMetaData > SAL_CALL OResultSet::getMetaData( )
Reference< XArray > SAL_CALL OResultSet::getArray( sal_Int32 /*columnIndex*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getArray", *this );
- return nullptr;
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getArray"_ustr, *this );
}
-
Reference< XClob > SAL_CALL OResultSet::getClob( sal_Int32 /*columnIndex*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getClob", *this );
- return nullptr;
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getClob"_ustr, *this );
}
Reference< XBlob > SAL_CALL OResultSet::getBlob( sal_Int32 /*columnIndex*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getBlob", *this );
- return nullptr;
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getBlob"_ustr, *this );
}
-
Reference< XRef > SAL_CALL OResultSet::getRef( sal_Int32 /*columnIndex*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRow::getRef", *this );
- return nullptr;
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRow::getRef"_ustr, *this );
}
-
Any SAL_CALL OResultSet::getObject( sal_Int32 columnIndex, const Reference< css::container::XNameAccess >& /*typeMap*/ )
{
return getValue<ORowSetValue>( columnIndex ).makeAny();
@@ -821,7 +757,7 @@ void SAL_CALL OResultSet::cancel( )
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- N3SQLCancel(m_aStatementHandle);
+ functions().Cancel(m_aStatementHandle);
}
void SAL_CALL OResultSet::clearWarnings( )
@@ -843,7 +779,7 @@ void SAL_CALL OResultSet::insertRow( )
Sequence<sal_Int8> aBookmark(nMaxBookmarkLen);
static_assert(o3tl::make_unsigned(nMaxBookmarkLen) >= sizeof(SQLLEN), "must be larger");
- SQLRETURN nRet = N3SQLBindCol(m_aStatementHandle,
+ SQLRETURN nRet = functions().BindCol(m_aStatementHandle,
0,
SQL_C_VARBOOKMARK,
aBookmark.getArray(),
@@ -851,47 +787,38 @@ void SAL_CALL OResultSet::insertRow( )
&nRealLen
);
- bool bPositionByBookmark = ( nullptr != getOdbcFunction( ODBC3SQLFunctionId::BulkOperations ) );
+ bool bPositionByBookmark = functions().has(ODBC3SQLFunctionId::BulkOperations);
if ( bPositionByBookmark )
{
- nRet = N3SQLBulkOperations( m_aStatementHandle, SQL_ADD );
+ nRet = functions().BulkOperations( m_aStatementHandle, SQL_ADD );
fillNeededData( nRet );
}
else
{
if(isBeforeFirst())
next(); // must be done
- nRet = N3SQLSetPos( m_aStatementHandle, 1, SQL_ADD, SQL_LOCK_NO_CHANGE );
+ nRet = functions().SetPos( m_aStatementHandle, 1, SQL_ADD, SQL_LOCK_NO_CHANGE );
fillNeededData( nRet );
}
aBookmark.realloc(nRealLen);
- try
- {
- OTools::ThrowException(m_pStatement->getOwnConnection(),nRet,m_aStatementHandle,SQL_HANDLE_STMT,*this);
- }
- catch(const SQLException&)
- {
- nRet = unbind();
- throw;
- }
-
- nRet = unbind();
+ SQLRETURN nRet2 = unbind();
OTools::ThrowException(m_pStatement->getOwnConnection(),nRet,m_aStatementHandle,SQL_HANDLE_STMT,*this);
+ OTools::ThrowException(m_pStatement->getOwnConnection(),nRet2,m_aStatementHandle,SQL_HANDLE_STMT,*this);
if ( bPositionByBookmark )
{
setStmtOption<SQLLEN*, SQL_IS_POINTER>(SQL_ATTR_FETCH_BOOKMARK_PTR, reinterpret_cast<SQLLEN*>(aBookmark.getArray()));
- nRet = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_BOOKMARK,0);
+ nRet = functions().FetchScroll(m_aStatementHandle,SQL_FETCH_BOOKMARK,0);
}
else
- nRet = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_RELATIVE,0); // OJ 06.03.2004
+ nRet = functions().FetchScroll(m_aStatementHandle,SQL_FETCH_RELATIVE,0); // OJ 06.03.2004
// sometimes we got an error but we are not interested in anymore #106047# OJ
// OTools::ThrowException(m_pStatement->getOwnConnection(),nRet,m_aStatementHandle,SQL_HANDLE_STMT,*this);
if(m_pSkipDeletedSet)
{
- if(moveToBookmark(makeAny(aBookmark)))
+ if(moveToBookmark(Any(aBookmark)))
{
sal_Int32 nRowPos = getDriverPos();
if ( -1 == m_nRowPos )
@@ -918,14 +845,16 @@ void SAL_CALL OResultSet::updateRow( )
try
{
- bool bPositionByBookmark = ( nullptr != getOdbcFunction( ODBC3SQLFunctionId::BulkOperations ) );
+ /* tdf#148367 this block is commented out, because SQLBulkOperations fails
+ with Access ODBC 64-bit drivers on Windows
+ bool bPositionByBookmark = functions().has(ODBC3SQLFunctionId::BulkOperations);
if ( bPositionByBookmark )
{
getBookmark();
assert(m_aRow[0].isBound());
Sequence<sal_Int8> aBookmark(m_aRow[0].getSequence());
SQLLEN nRealLen = aBookmark.getLength();
- nRet = N3SQLBindCol(m_aStatementHandle,
+ nRet = functions().BindCol(m_aStatementHandle,
0,
SQL_C_VARBOOKMARK,
aBookmark.getArray(),
@@ -933,15 +862,15 @@ void SAL_CALL OResultSet::updateRow( )
&nRealLen
);
OTools::ThrowException(m_pStatement->getOwnConnection(),nRet,m_aStatementHandle,SQL_HANDLE_STMT,*this);
- nRet = N3SQLBulkOperations(m_aStatementHandle, SQL_UPDATE_BY_BOOKMARK);
+ nRet = functions().BulkOperations(m_aStatementHandle, SQL_UPDATE_BY_BOOKMARK);
fillNeededData(nRet);
// the driver should not have touched this
// (neither the contents of aBookmark FWIW)
assert(nRealLen == aBookmark.getLength());
}
- else
+ else */
{
- nRet = N3SQLSetPos(m_aStatementHandle,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
+ nRet = functions().SetPos(m_aStatementHandle,1,SQL_UPDATE,SQL_LOCK_NO_CHANGE);
fillNeededData(nRet);
}
OTools::ThrowException(m_pStatement->getOwnConnection(),nRet,m_aStatementHandle,SQL_HANDLE_STMT,*this);
@@ -965,7 +894,7 @@ void SAL_CALL OResultSet::deleteRow( )
{
SQLRETURN nRet = SQL_SUCCESS;
sal_Int32 nPos = getDriverPos();
- nRet = N3SQLSetPos(m_aStatementHandle,1,SQL_DELETE,SQL_LOCK_NO_CHANGE);
+ nRet = functions().SetPos(m_aStatementHandle,1,SQL_DELETE,SQL_LOCK_NO_CHANGE);
OTools::ThrowException(m_pStatement->getOwnConnection(),nRet,m_aStatementHandle,SQL_HANDLE_STMT,*this);
m_bRowDeleted = ( m_pRowStatusArray[0] == SQL_ROW_DELETED );
@@ -995,7 +924,7 @@ void SAL_CALL OResultSet::moveToInsertRow( )
invalidateCache();
// first unbound all columns
OSL_VERIFY( unbind() == SQL_SUCCESS );
- // SQLRETURN nRet = N3SQLSetStmtAttr(m_aStatementHandle,SQL_ATTR_ROW_ARRAY_SIZE ,(SQLPOINTER)1,SQL_IS_INTEGER);
+ // SQLRETURN nRet = functions().SetStmtAttr(m_aStatementHandle,SQL_ATTR_ROW_ARRAY_SIZE ,(SQLPOINTER)1,SQL_IS_INTEGER);
}
@@ -1009,30 +938,115 @@ void OResultSet::updateValue(sal_Int32 columnIndex, SQLSMALLINT _nType, void con
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- m_aBindVector.push_back(allocBindColumn(OTools::MapOdbcType2Jdbc(_nType),columnIndex));
- void* pData = reinterpret_cast<void*>(m_aBindVector.rbegin()->first);
- OSL_ENSURE(pData != nullptr,"Data for update is NULL!");
- OTools::bindValue( m_pStatement->getOwnConnection(),
- m_aStatementHandle,
- columnIndex,
- _nType,
- 0,
- _pValue,
- pData,
- &m_aLengthVector[columnIndex],
- **this,
- m_nTextEncoding,
- m_pStatement->getOwnConnection()->useOldDateFormat());
+ SQLSMALLINT fCType, dummy;
+ OTools::getBindTypes(m_pStatement->getOwnConnection()->useOldDateFormat(), _nType, fCType,
+ dummy);
+
+ SQLLEN* const pLen = &m_aLengthVector[columnIndex];
+ *pLen = 0;
+ std::unique_ptr<BindData> bindData;
+ void* pData = nullptr;
+
+ if (columnIndex != 0 && !_pValue)
+ {
+ bindData = std::make_unique<NullBindData>();
+ }
+ else
+ {
+ assert(_pValue);
+
+ switch (_nType)
+ {
+ case SQL_CHAR:
+ case SQL_VARCHAR:
+ case SQL_WCHAR:
+ case SQL_WVARCHAR:
+ if (fCType == SQL_C_CHAR)
+ bindData = std::make_unique<CharsBindData<SQLChars>>(_pValue, m_nTextEncoding);
+ else
+ bindData = std::make_unique<CharsBindData<SQLWChars>>(_pValue);
+ break;
+ case SQL_DECIMAL:
+ case SQL_NUMERIC:
+ if (fCType == SQL_C_CHAR)
+ bindData = std::make_unique<CharsBindData<SQLChars>>(
+ OString::number(*static_cast<const double*>(_pValue)));
+ else
+ bindData = std::make_unique<CharsBindData<SQLWChars>>(
+ OUString::number(*static_cast<const double*>(_pValue)));
+ break;
+ case SQL_BIT:
+ case SQL_TINYINT:
+ bindData = std::make_unique<SimpleBindData<sal_Int8>>(_pValue);
+ break;
+ case SQL_SMALLINT:
+ bindData = std::make_unique<SimpleBindData<sal_Int16>>(_pValue);
+ break;
+ case SQL_INTEGER:
+ bindData = std::make_unique<SimpleBindData<sal_Int32>>(_pValue);
+ break;
+ case SQL_BIGINT:
+ bindData = std::make_unique<SimpleBindData<sal_Int64>>(_pValue);
+ break;
+ case SQL_FLOAT:
+ bindData = std::make_unique<SimpleBindData<float>>(_pValue);
+ break;
+ case SQL_REAL:
+ case SQL_DOUBLE:
+ bindData = std::make_unique<SimpleBindData<double>>(_pValue);
+ break;
+ case SQL_BINARY:
+ case SQL_VARBINARY:
+ bindData = std::make_unique<BinaryBindData>(_pValue);
+ break;
+ case SQL_LONGVARBINARY:
+ {
+ /* see https://msdn.microsoft.com/en-us/library/ms716238%28v=vs.85%29.aspx
+ * for an explanation of that apparently weird cast */
+ pData = reinterpret_cast<void*>(static_cast<sal_uIntPtr>(columnIndex));
+ sal_Int32 nLen
+ = static_cast<const css::uno::Sequence<sal_Int8>*>(_pValue)->getLength();
+ *pLen = SQL_LEN_DATA_AT_EXEC(nLen);
+ }
+ break;
+ case SQL_LONGVARCHAR:
+ case SQL_WLONGVARCHAR:
+ {
+ /* see https://msdn.microsoft.com/en-us/library/ms716238%28v=vs.85%29.aspx
+ * for an explanation of that apparently weird cast */
+ pData = reinterpret_cast<void*>(static_cast<sal_uIntPtr>(columnIndex));
+ sal_Int32 nLen = static_cast<const OUString*>(_pValue)->getLength();
+ *pLen = SQL_LEN_DATA_AT_EXEC(nLen);
+ }
+ break;
+ case SQL_DATE:
+ bindData = std::make_unique<SimpleBindData<DATE_STRUCT>>(_pValue);
+ break;
+ case SQL_TIME:
+ bindData = std::make_unique<SimpleBindData<TIME_STRUCT>>(_pValue);
+ break;
+ case SQL_TIMESTAMP:
+ bindData = std::make_unique<SimpleBindData<TIMESTAMP_STRUCT>>(_pValue);
+ break;
+ }
+ }
+
+ if (bindData)
+ {
+ pData = bindData->data();
+ *pLen = bindData->len();
+ m_aBindVector.push_back(std::move(bindData));
+ }
+
+ SQLRETURN nRetcode
+ = functions().BindCol(m_aStatementHandle, columnIndex, fCType, pData, 0, pLen);
+ OTools::ThrowException(m_pStatement->getOwnConnection(), nRetcode, m_aStatementHandle,
+ SQL_HANDLE_STMT, **this);
}
void SAL_CALL OResultSet::updateNull( sal_Int32 columnIndex )
{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
-
- m_aBindVector.push_back(allocBindColumn(DataType::CHAR,columnIndex));
- void* pData = reinterpret_cast<void*>(m_aBindVector.rbegin()->first);
- OTools::bindValue(m_pStatement->getOwnConnection(),m_aStatementHandle,columnIndex,SQL_CHAR,0,nullptr,pData,&m_aLengthVector[columnIndex],**this,m_nTextEncoding,m_pStatement->getOwnConnection()->useOldDateFormat());
+ updateValue(columnIndex, SQL_CHAR, nullptr);
}
@@ -1059,7 +1073,7 @@ void SAL_CALL OResultSet::updateInt( sal_Int32 columnIndex, sal_Int32 x )
void SAL_CALL OResultSet::updateLong( sal_Int32 /*columnIndex*/, sal_Int64 /*x*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRowUpdate::updateLong", *this );
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRowUpdate::updateLong"_ustr, *this );
}
void SAL_CALL OResultSet::updateFloat( sal_Int32 columnIndex, float x )
@@ -1135,8 +1149,8 @@ void SAL_CALL OResultSet::refreshRow( )
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- // SQLRETURN nRet = N3SQLSetPos(m_aStatementHandle,1,SQL_REFRESH,SQL_LOCK_NO_CHANGE);
- m_nCurrentFetchState = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_RELATIVE,0);
+ // SQLRETURN nRet = functions().SetPos(m_aStatementHandle,1,SQL_REFRESH,SQL_LOCK_NO_CHANGE);
+ m_nCurrentFetchState = functions().FetchScroll(m_aStatementHandle,SQL_FETCH_RELATIVE,0);
OTools::ThrowException(m_pStatement->getOwnConnection(),m_nCurrentFetchState,m_aStatementHandle,SQL_HANDLE_STMT,*this);
}
@@ -1205,7 +1219,7 @@ sal_Bool SAL_CALL OResultSet::moveToBookmark( const Any& bookmark )
if ( SQL_INVALID_HANDLE != nReturn && SQL_ERROR != nReturn )
{
- m_nCurrentFetchState = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_BOOKMARK,0);
+ m_nCurrentFetchState = functions().FetchScroll(m_aStatementHandle,SQL_FETCH_BOOKMARK,0);
OTools::ThrowException(m_pStatement->getOwnConnection(),m_nCurrentFetchState,m_aStatementHandle,SQL_HANDLE_STMT,*this);
TBookmarkPosMap::const_iterator aFind = m_aPosToBookmarks.find(aBookmark);
if(aFind != m_aPosToBookmarks.end())
@@ -1229,7 +1243,7 @@ sal_Bool SAL_CALL OResultSet::moveRelativeToBookmark( const Any& bookmark, sal_
bookmark >>= aBookmark;
setStmtOption<SQLLEN*, SQL_IS_POINTER>(SQL_ATTR_FETCH_BOOKMARK_PTR, reinterpret_cast<SQLLEN*>(aBookmark.getArray()));
- m_nCurrentFetchState = N3SQLFetchScroll(m_aStatementHandle,SQL_FETCH_BOOKMARK,rows);
+ m_nCurrentFetchState = functions().FetchScroll(m_aStatementHandle,SQL_FETCH_BOOKMARK,rows);
OTools::ThrowException(m_pStatement->getOwnConnection(),m_nCurrentFetchState,m_aStatementHandle,SQL_HANDLE_STMT,*this);
return m_nCurrentFetchState == SQL_SUCCESS || m_nCurrentFetchState == SQL_SUCCESS_WITH_INFO;
}
@@ -1249,8 +1263,7 @@ sal_Bool SAL_CALL OResultSet::hasOrderedBookmarks( )
sal_Int32 SAL_CALL OResultSet::hashBookmark( const Any& /*bookmark*/ )
{
- ::dbtools::throwFunctionNotSupportedSQLException( "XRowLocate::hashBookmark", *this );
- return 0;
+ ::dbtools::throwFunctionNotSupportedSQLException( u"XRowLocate::hashBookmark"_ustr, *this );
}
// XDeleteRows
@@ -1284,14 +1297,14 @@ template < typename T, SQLINTEGER BufferLength > T OResultSet::getStmtOption (SQ
{
T result (0);
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
- N3SQLGetStmtAttr(m_aStatementHandle, fOption, &result, BufferLength, nullptr);
+ functions().GetStmtAttr(m_aStatementHandle, fOption, &result, BufferLength, nullptr);
return result;
}
template < typename T, SQLINTEGER BufferLength > SQLRETURN OResultSet::setStmtOption (SQLINTEGER fOption, T value) const
{
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
SQLPOINTER sv = reinterpret_cast<SQLPOINTER>(value);
- return N3SQLSetStmtAttr(m_aStatementHandle, fOption, sv, BufferLength);
+ return functions().SetStmtAttr(m_aStatementHandle, fOption, sv, BufferLength);
}
sal_Int32 OResultSet::getResultSetConcurrency() const
@@ -1334,10 +1347,19 @@ sal_Int32 OResultSet::getFetchSize() const
OUString OResultSet::getCursorName() const
{
- SQLCHAR pName[258];
SQLSMALLINT nRealLen = 0;
- N3SQLGetCursorName(m_aStatementHandle,pName,256,&nRealLen);
- return OUString::createFromAscii(reinterpret_cast<char*>(pName));
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::GetCursorNameW))
+ {
+ SQLWCHAR pName[258]{};
+ functions().GetCursorNameW(m_aStatementHandle, pName, 256, &nRealLen);
+ return toUString(pName, nRealLen);
+ }
+ else
+ {
+ SQLCHAR pName[258]{};
+ functions().GetCursorName(m_aStatementHandle, pName, 256, &nRealLen);
+ return toUString(pName);
+ }
}
bool OResultSet::isBookmarkable() const
@@ -1378,15 +1400,9 @@ bool OResultSet::isBookmarkable() const
return (m_nUseBookmarks != SQL_UB_OFF) && (nAttr & SQL_CA1_BOOKMARK) == SQL_CA1_BOOKMARK;
}
-void OResultSet::setFetchDirection(sal_Int32 _par0)
+void OResultSet::setFetchDirection(sal_Int32 /*_par0*/)
{
- ::dbtools::throwFunctionNotSupportedSQLException( "setFetchDirection", *this );
-
- OSL_ENSURE(_par0>0,"Illegal fetch direction!");
- if ( _par0 > 0 )
- {
- setStmtOption<SQLULEN, SQL_IS_UINTEGER>(SQL_ATTR_CURSOR_TYPE, _par0);
- }
+ ::dbtools::throwFunctionNotSupportedSQLException( u"setFetchDirection"_ustr, *this );
}
void OResultSet::setFetchSize(sal_Int32 _par0)
@@ -1394,7 +1410,7 @@ void OResultSet::setFetchSize(sal_Int32 _par0)
OSL_ENSURE(_par0>0,"Illegal fetch size!");
if ( _par0 != 1 )
{
- throw css::beans::PropertyVetoException("SDBC/ODBC layer not prepared for fetchSize > 1", *this);
+ throw css::beans::PropertyVetoException(u"SDBC/ODBC layer not prepared for fetchSize > 1"_ustr, *this);
}
setStmtOption<SQLULEN, SQL_IS_UINTEGER>(SQL_ATTR_ROW_ARRAY_SIZE, _par0);
m_pRowStatusArray.reset( new SQLUSMALLINT[_par0] );
@@ -1403,28 +1419,47 @@ void OResultSet::setFetchSize(sal_Int32 _par0)
IPropertyArrayHelper* OResultSet::createArrayHelper( ) const
{
- Sequence< Property > aProps(6);
- Property* pProperties = aProps.getArray();
- sal_Int32 nPos = 0;
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
- PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), PropertyAttribute::READONLY);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
- PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
- PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISBOOKMARKABLE),
- PROPERTY_ID_ISBOOKMARKABLE, cppu::UnoType<bool>::get(), PropertyAttribute::READONLY);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
- PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY);
-
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
- PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY);
-
- return new OPropertyArrayHelper(aProps);
+ return new OPropertyArrayHelper
+ {
+ {
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
+ PROPERTY_ID_CURSORNAME,
+ cppu::UnoType<OUString>::get(),
+ PropertyAttribute::READONLY
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
+ PROPERTY_ID_FETCHDIRECTION,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
+ PROPERTY_ID_FETCHSIZE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISBOOKMARKABLE),
+ PROPERTY_ID_ISBOOKMARKABLE,
+ cppu::UnoType<bool>::get(),
+ PropertyAttribute::READONLY
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
+ PROPERTY_ID_RESULTSETCONCURRENCY,
+ cppu::UnoType<sal_Int32>::get(),
+ PropertyAttribute::READONLY
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
+ PROPERTY_ID_RESULTSETTYPE,
+ cppu::UnoType<sal_Int32>::get(),
+ PropertyAttribute::READONLY
+ }
+ }
+ };
}
IPropertyArrayHelper & OResultSet::getInfoHelper()
@@ -1667,7 +1702,7 @@ bool OResultSet::move(IResultSetHelper::Movement _eCursorPosition, sal_Int32 _nO
TBookmarkPosMap::const_iterator aIter = std::find_if(m_aPosToBookmarks.begin(), m_aPosToBookmarks.end(),
[&_nOffset](const TBookmarkPosMap::value_type& rEntry) { return rEntry.second == _nOffset; });
if (aIter != m_aPosToBookmarks.end())
- return moveToBookmark(makeAny(aIter->first));
+ return moveToBookmark(Any(aIter->first));
SAL_WARN( "connectivity.odbc", "Bookmark not found!");
}
return false;
@@ -1681,9 +1716,9 @@ bool OResultSet::move(IResultSetHelper::Movement _eCursorPosition, sal_Int32 _nO
// _eCursorPosition == IResultSetHelper::NEXT/PREVIOUS
// when fetchSize > 1
if ( !m_bUseFetchScroll && _eCursorPosition == IResultSetHelper::NEXT )
- m_nCurrentFetchState = N3SQLFetch(m_aStatementHandle);
+ m_nCurrentFetchState = functions().Fetch(m_aStatementHandle);
else
- m_nCurrentFetchState = N3SQLFetchScroll(m_aStatementHandle,nFetchOrientation,_nOffset);
+ m_nCurrentFetchState = functions().FetchScroll(m_aStatementHandle,nFetchOrientation,_nOffset);
SAL_INFO(
"connectivity.odbc",
@@ -1774,7 +1809,7 @@ void OResultSet::fillNeededData(SQLRETURN _nRet)
return;
void* pColumnIndex = nullptr;
- nRet = N3SQLParamData(m_aStatementHandle,&pColumnIndex);
+ nRet = functions().ParamData(m_aStatementHandle,&pColumnIndex);
do
{
@@ -1790,26 +1825,25 @@ void OResultSet::fillNeededData(SQLRETURN _nRet)
case DataType::LONGVARBINARY:
case DataType::BLOB:
aSeq = m_aRow[nColumnIndex].getSequence();
- N3SQLPutData (m_aStatementHandle, aSeq.getArray(), aSeq.getLength());
+ functions().PutData (m_aStatementHandle, aSeq.getArray(), aSeq.getLength());
break;
case SQL_WLONGVARCHAR:
{
- OUString const & sRet = m_aRow[nColumnIndex].getString();
- N3SQLPutData (m_aStatementHandle, static_cast<SQLPOINTER>(const_cast<sal_Unicode *>(sRet.getStr())), sizeof(sal_Unicode)*sRet.getLength());
+ SQLWChars data(m_aRow[nColumnIndex].getString());
+ functions().PutData(m_aStatementHandle, data.get(), data.cb());
break;
}
case DataType::LONGVARCHAR:
case DataType::CLOB:
{
- OUString sRet = m_aRow[nColumnIndex].getString();
- OString aString(OUStringToOString(sRet,m_nTextEncoding));
- N3SQLPutData (m_aStatementHandle, static_cast<SQLPOINTER>(const_cast<char *>(aString.getStr())), aString.getLength());
+ SQLChars data(m_aRow[nColumnIndex].getString(), m_nTextEncoding);
+ functions().PutData(m_aStatementHandle, data.get(), data.cb());
break;
}
default:
SAL_WARN( "connectivity.odbc", "Not supported at the moment!");
}
- nRet = N3SQLParamData(m_aStatementHandle,&pColumnIndex);
+ nRet = functions().ParamData(m_aStatementHandle,&pColumnIndex);
}
while (nRet == SQL_NEED_DATA);
}
diff --git a/connectivity/source/drivers/odbc/OResultSetMetaData.cxx b/connectivity/source/drivers/odbc/OResultSetMetaData.cxx
index 21b95c6a7b29..260c2111fbfc 100644
--- a/connectivity/source/drivers/odbc/OResultSetMetaData.cxx
+++ b/connectivity/source/drivers/odbc/OResultSetMetaData.cxx
@@ -22,7 +22,6 @@
using namespace connectivity::odbc;
using namespace com::sun::star::uno;
-using namespace com::sun::star::lang;
using namespace com::sun::star::sdbc;
@@ -36,40 +35,77 @@ OUString OResultSetMetaData::getCharColAttrib(sal_Int32 _column,sal_Int32 ident)
if(_column <static_cast<sal_Int32>(m_vMapping.size())) // use mapping
column = m_vMapping[_column];
- SQLSMALLINT BUFFER_LEN = 128;
- std::unique_ptr<char[]> pName(new char[BUFFER_LEN+1]);
- SQLSMALLINT nRealLen=0;
- SQLRETURN nRet = N3SQLColAttribute(m_aStatementHandle,
- static_cast<SQLUSMALLINT>(column),
- static_cast<SQLUSMALLINT>(ident),
- static_cast<SQLPOINTER>(pName.get()),
- BUFFER_LEN,
- &nRealLen,
- nullptr
- );
OUString sValue;
- if ( nRet == SQL_SUCCESS )
+ SQLSMALLINT cbRealLen = 0;
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::ColAttributeW))
{
- if ( nRealLen < 0 )
- nRealLen = BUFFER_LEN;
- sValue = OUString(pName.get(),nRealLen,m_pConnection->getTextEncoding());
+ // SQLColAttributeW gets/returns count of bytes, not characters
+ SQLSMALLINT cbBufferLen = 128 * sizeof(SQLWCHAR);
+ auto pName = std::make_unique<SQLWCHAR[]>(cbBufferLen / sizeof(SQLWCHAR) + 1);
+ SQLRETURN nRet = functions().ColAttributeW(m_aStatementHandle,
+ column,
+ ident,
+ pName.get(),
+ cbBufferLen,
+ &cbRealLen,
+ nullptr);
+ OTools::ThrowException(m_pConnection, nRet, m_aStatementHandle, SQL_HANDLE_STMT, *this);
+ if (nRet == SQL_SUCCESS)
+ {
+ if (cbRealLen < 0)
+ cbRealLen = cbBufferLen;
+ sValue = toUString(pName.get(), cbRealLen / sizeof(SQLWCHAR));
+ }
+ if (cbRealLen > cbBufferLen)
+ {
+ cbBufferLen = (cbRealLen + 1) & ~1; // Make sure it's even
+ pName = std::make_unique<SQLWCHAR[]>(cbBufferLen / sizeof(SQLWCHAR) + 1);
+ nRet = functions().ColAttributeW(m_aStatementHandle,
+ column,
+ ident,
+ pName.get(),
+ cbBufferLen,
+ &cbRealLen,
+ nullptr);
+ OTools::ThrowException(m_pConnection, nRet, m_aStatementHandle, SQL_HANDLE_STMT, *this);
+ if (nRet == SQL_SUCCESS && cbRealLen > 0)
+ sValue = toUString(pName.get(), cbRealLen / sizeof(SQLWCHAR));
+ }
}
- pName.reset();
- OTools::ThrowException(m_pConnection,nRet,m_aStatementHandle,SQL_HANDLE_STMT,*this);
- if(nRealLen > BUFFER_LEN)
+ else
{
- pName.reset(new char[nRealLen+1]);
- nRet = N3SQLColAttribute(m_aStatementHandle,
- static_cast<SQLUSMALLINT>(column),
- static_cast<SQLUSMALLINT>(ident),
- static_cast<SQLPOINTER>(pName.get()),
- nRealLen,
- &nRealLen,
- nullptr
- );
- if ( nRet == SQL_SUCCESS && nRealLen > 0)
- sValue = OUString(pName.get(),nRealLen,m_pConnection->getTextEncoding());
+ SQLSMALLINT BUFFER_LEN = 128;
+ auto pName = std::make_unique<SQLCHAR[]>(BUFFER_LEN + 1);
+ SQLRETURN nRet = functions().ColAttribute(m_aStatementHandle,
+ static_cast<SQLUSMALLINT>(column),
+ static_cast<SQLUSMALLINT>(ident),
+ static_cast<SQLPOINTER>(pName.get()),
+ BUFFER_LEN,
+ &cbRealLen,
+ nullptr
+ );
+ if ( nRet == SQL_SUCCESS )
+ {
+ if ( cbRealLen < 0 )
+ cbRealLen = BUFFER_LEN;
+ sValue = toUString(pName.get(), cbRealLen, m_pConnection->getTextEncoding());
+ }
OTools::ThrowException(m_pConnection,nRet,m_aStatementHandle,SQL_HANDLE_STMT,*this);
+ if(cbRealLen > BUFFER_LEN)
+ {
+ pName = std::make_unique<SQLCHAR[]>(cbRealLen + 1);
+ nRet = functions().ColAttribute(m_aStatementHandle,
+ static_cast<SQLUSMALLINT>(column),
+ static_cast<SQLUSMALLINT>(ident),
+ static_cast<SQLPOINTER>(pName.get()),
+ cbRealLen,
+ &cbRealLen,
+ nullptr
+ );
+ if ( nRet == SQL_SUCCESS && cbRealLen > 0)
+ sValue = toUString(pName.get(), cbRealLen, m_pConnection->getTextEncoding());
+ OTools::ThrowException(m_pConnection,nRet,m_aStatementHandle,SQL_HANDLE_STMT,*this);
+ }
}
return sValue;
@@ -82,7 +118,7 @@ SQLLEN OResultSetMetaData::getNumColAttrib(OConnection const * _pConnection
,sal_Int32 _ident)
{
SQLLEN nValue=0;
- OTools::ThrowException(_pConnection,(*reinterpret_cast<T3SQLColAttribute>(_pConnection->getOdbcFunction(ODBC3SQLFunctionId::ColAttribute)))(_aStatementHandle,
+ OTools::ThrowException(_pConnection,_pConnection->functions().ColAttribute(_aStatementHandle,
static_cast<SQLUSMALLINT>(_column),
static_cast<SQLUSMALLINT>(_ident),
nullptr,
@@ -144,11 +180,10 @@ sal_Int32 SAL_CALL OResultSetMetaData::getColumnType( sal_Int32 column )
catch(SQLException& ) // in this case we have an odbc 2.0 driver
{
m_bUseODBC2Types = true;
- nType = OTools::MapOdbcType2Jdbc(getNumColAttrib(column,SQL_DESC_CONCISE_TYPE ));
}
}
- else
- nType = OTools::MapOdbcType2Jdbc(getNumColAttrib(column,SQL_DESC_CONCISE_TYPE ));
+ if (m_bUseODBC2Types)
+ nType = OTools::MapOdbcType2Jdbc(getNumColAttrib(column, SQL_DESC_CONCISE_TYPE));
aFind = m_aColumnTypes.emplace(column,nType).first;
}
@@ -162,7 +197,7 @@ sal_Int32 SAL_CALL OResultSetMetaData::getColumnCount( )
if(m_nColCount != -1)
return m_nColCount;
sal_Int16 nNumResultCols=0;
- OTools::ThrowException(m_pConnection,N3SQLNumResultCols(m_aStatementHandle,&nNumResultCols),m_aStatementHandle,SQL_HANDLE_STMT,*this);
+ OTools::ThrowException(m_pConnection,functions().NumResultCols(m_aStatementHandle,&nNumResultCols),m_aStatementHandle,SQL_HANDLE_STMT,*this);
m_nColCount = nNumResultCols;
return m_nColCount;
}
@@ -231,30 +266,38 @@ sal_Bool SAL_CALL OResultSetMetaData::isSigned( sal_Int32 column )
sal_Int32 SAL_CALL OResultSetMetaData::getPrecision( sal_Int32 column )
{
sal_Int32 nType = 0;
- try
- {
- nType = getNumColAttrib(column,SQL_DESC_PRECISION);
- }
- catch(const SQLException& ) // in this case we have an odbc 2.0 driver
+ if (!m_bUseODBC2Types)
{
- m_bUseODBC2Types = true;
- nType = getNumColAttrib(column,SQL_COLUMN_PRECISION );
+ try
+ {
+ nType = getNumColAttrib(column, SQL_DESC_PRECISION);
+ }
+ catch (const SQLException&) // in this case we have an odbc 2.0 driver
+ {
+ m_bUseODBC2Types = true;
+ }
}
+ if (m_bUseODBC2Types)
+ nType = getNumColAttrib(column, SQL_COLUMN_PRECISION);
return nType;
}
sal_Int32 SAL_CALL OResultSetMetaData::getScale( sal_Int32 column )
{
sal_Int32 nType = 0;
- try
+ if (!m_bUseODBC2Types)
{
- nType = getNumColAttrib(column,SQL_DESC_SCALE);
- }
- catch(const SQLException& ) // in this case we have an odbc 2.0 driver
- {
- m_bUseODBC2Types = true;
- nType = getNumColAttrib(column,SQL_COLUMN_SCALE );
+ try
+ {
+ nType = getNumColAttrib(column, SQL_DESC_SCALE);
+ }
+ catch (const SQLException&) // in this case we have an odbc 2.0 driver
+ {
+ m_bUseODBC2Types = true;
+ }
}
+ if (m_bUseODBC2Types)
+ nType = getNumColAttrib(column, SQL_COLUMN_SCALE);
return nType;
}
diff --git a/connectivity/source/drivers/odbc/OStatement.cxx b/connectivity/source/drivers/odbc/OStatement.cxx
index d44f86e58469..989db77ce462 100644
--- a/connectivity/source/drivers/odbc/OStatement.cxx
+++ b/connectivity/source/drivers/odbc/OStatement.cxx
@@ -49,9 +49,7 @@ using namespace com::sun::star::uno;
using namespace com::sun::star::lang;
using namespace com::sun::star::beans;
using namespace com::sun::star::sdbc;
-using namespace com::sun::star::sdbcx;
using namespace com::sun::star::container;
-using namespace com::sun::star::io;
using namespace com::sun::star::util;
OStatement_Base::OStatement_Base(OConnection* _pConnection )
@@ -79,16 +77,18 @@ OStatement_Base::OStatement_Base(OConnection* _pConnection )
OStatement_Base::~OStatement_Base()
{
- OSL_ENSURE(!m_aStatementHandle,"Sohould ne null here!");
+ OSL_ENSURE(!m_aStatementHandle,"Should be null here!");
}
void OStatement_Base::disposeResultSet()
{
// free the cursor if alive
- Reference< XComponent > xComp(m_xResultSet.get(), UNO_QUERY);
+ rtl::Reference< OResultSet > xComp(m_xResultSet.get());
if (xComp.is())
+ {
xComp->dispose();
- m_xResultSet.clear();
+ m_xResultSet.clear();
+ }
}
void SAL_CALL OStatement_Base::disposing()
@@ -104,7 +104,7 @@ void SAL_CALL OStatement_Base::disposing()
m_pConnection->freeStatementHandle(m_aStatementHandle);
m_pConnection.clear();
}
- OSL_ENSURE(!m_aStatementHandle,"Sohould ne null here!");
+ OSL_ENSURE(!m_aStatementHandle,"Should be null here!");
OStatement_BASE::disposing();
}
@@ -163,7 +163,7 @@ void SAL_CALL OStatement_Base::cancel( )
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
- N3SQLCancel(m_aStatementHandle);
+ functions().Cancel(m_aStatementHandle);
}
@@ -197,7 +197,7 @@ void OStatement_Base::reset()
}
if(m_aStatementHandle)
{
- THROW_SQL(N3SQLFreeStmt(m_aStatementHandle, SQL_CLOSE));
+ THROW_SQL(functions().FreeStmt(m_aStatementHandle, SQL_CLOSE));
}
}
@@ -210,8 +210,7 @@ void OStatement_Base::clearMyResultSet()
try
{
- Reference<XCloseable> xCloseable(
- m_xResultSet.get(), css::uno::UNO_QUERY);
+ rtl::Reference<OResultSet> xCloseable(m_xResultSet.get());
if ( xCloseable.is() )
xCloseable->close();
}
@@ -229,7 +228,7 @@ SQLLEN OStatement_Base::getRowCount()
SQLLEN numRows = 0;
try {
- THROW_SQL(N3SQLRowCount(m_aStatementHandle,&numRows));
+ THROW_SQL(functions().RowCount(m_aStatementHandle,&numRows));
}
catch (const SQLException&)
{
@@ -301,7 +300,7 @@ sal_Int32 OStatement_Base::getColumnCount()
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
try {
- THROW_SQL(N3SQLNumResultCols(m_aStatementHandle,&numCols));
+ THROW_SQL(functions().NumResultCols(m_aStatementHandle,&numCols));
}
catch (const SQLException&)
{
@@ -316,9 +315,6 @@ sal_Bool SAL_CALL OStatement_Base::execute( const OUString& sql )
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
m_sSqlStatement = sql;
-
- OString aSql(OUStringToOString(sql,getOwnConnection()->getTextEncoding()));
-
bool hasResultSet = false;
// Reset the statement handle and warning
@@ -334,15 +330,24 @@ sal_Bool SAL_CALL OStatement_Base::execute( const OUString& sql )
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
try {
- THROW_SQL(N3SQLExecDirect(m_aStatementHandle, reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(aSql.getStr())), aSql.getLength()));
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::ExecDirectW))
+ {
+ SQLWChars directSQL(sql);
+ THROW_SQL(functions().ExecDirectW(m_aStatementHandle, directSQL.get(), directSQL.cch()));
+ }
+ else
+ {
+ SQLChars directSQL(sql, getOwnConnection()->getTextEncoding());
+ THROW_SQL(functions().ExecDirect(m_aStatementHandle, directSQL.get(), directSQL.cch()));
+ }
}
- catch (const SQLWarning&) {
-
+ catch (const SQLWarning&)
+ {
//TODO: Save pointer to warning and save with ResultSet
// object once it is created.
}
- // Now determine if there is a result set associated with
+ // Now determine if there is a result set associated with
// the SQL statement that was executed. Get the column
// count, and if it is not zero, there is a result set.
@@ -358,7 +363,7 @@ sal_Bool SAL_CALL OStatement_Base::execute( const OUString& sql )
// getResultSet returns the current result as a ResultSet. It
// returns NULL if the current result is not a ResultSet.
-Reference< XResultSet > OStatement_Base::getResultSet(bool checkCount)
+rtl::Reference< OResultSet > OStatement_Base::getResultSet(bool checkCount)
{
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
@@ -406,14 +411,14 @@ template < typename T, SQLINTEGER BufferLength > T OStatement_Base::getStmtOptio
{
T result (0);
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
- N3SQLGetStmtAttr(m_aStatementHandle, fOption, &result, BufferLength, nullptr);
+ functions().GetStmtAttr(m_aStatementHandle, fOption, &result, BufferLength, nullptr);
return result;
}
template < typename T, SQLINTEGER BufferLength > SQLRETURN OStatement_Base::setStmtOption (SQLINTEGER fOption, T value) const
{
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
SQLPOINTER sv = reinterpret_cast<SQLPOINTER>(value);
- return N3SQLSetStmtAttr(m_aStatementHandle, fOption, sv, BufferLength);
+ return functions().SetStmtAttr(m_aStatementHandle, fOption, sv, BufferLength);
}
@@ -423,15 +428,15 @@ Reference< XResultSet > SAL_CALL OStatement_Base::executeQuery( const OUString&
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- Reference< XResultSet > xRS;
+ rtl::Reference< OResultSet > xRS;
// Execute the statement. If execute returns true, a result
// set exists.
if (execute (sql))
{
- xRS = getResultSet (false);
- m_xResultSet = xRS;
+ xRS = getResultSet(false);
+ m_xResultSet = xRS.get();
}
else
{
@@ -472,28 +477,31 @@ Sequence< sal_Int32 > SAL_CALL OStatement::executeBatch( )
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- OStringBuffer aBatchSql;
sal_Int32 nLen = m_aBatchVector.size();
- for (auto const& elem : m_aBatchVector)
- {
- aBatchSql.append(OUStringToOString(elem,getOwnConnection()->getTextEncoding()));
- aBatchSql.append(";");
- }
-
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
- auto s = aBatchSql.makeStringAndClear();
- THROW_SQL(N3SQLExecDirect(m_aStatementHandle, reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(s.getStr())), s.getLength()));
+ OUStringBuffer uSql;
+ comphelper::intersperse(m_aBatchVector.begin(), m_aBatchVector.end(), comphelper::OUStringBufferAppender(uSql), u";");
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::ExecDirectW))
+ {
+ SQLWChars statement(uSql.makeStringAndClear());
+ THROW_SQL(functions().ExecDirectW(m_aStatementHandle, statement.get(), statement.cch()));
+ }
+ else
+ {
+ SQLChars statement(uSql, getOwnConnection()->getTextEncoding());
+ THROW_SQL(functions().ExecDirect(m_aStatementHandle, statement.get(), statement.cch()));
+ }
Sequence< sal_Int32 > aRet(nLen);
sal_Int32* pArray = aRet.getArray();
for(sal_Int32 j=0;j<nLen;++j)
{
- SQLRETURN nError = N3SQLMoreResults(m_aStatementHandle);
+ SQLRETURN nError = functions().MoreResults(m_aStatementHandle);
if(nError == SQL_SUCCESS)
{
SQLLEN nRowCount=0;
- N3SQLRowCount(m_aStatementHandle,&nRowCount);
+ functions().RowCount(m_aStatementHandle,&nRowCount);
pArray[j] = nRowCount;
}
}
@@ -535,8 +543,9 @@ Reference< XResultSet > SAL_CALL OStatement_Base::getResultSet( )
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- m_xResultSet = getResultSet(true);
- return m_xResultSet;
+ rtl::Reference<OResultSet> xRS = getResultSet(true);
+ m_xResultSet = xRS.get();
+ return xRS;
}
@@ -575,7 +584,7 @@ sal_Bool SAL_CALL OStatement_Base::getMoreResults( )
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
try {
- hasResultSet = N3SQLMoreResults(m_aStatementHandle) == SQL_SUCCESS;
+ hasResultSet = functions().MoreResults(m_aStatementHandle) == SQL_SUCCESS;
}
catch (const SQLWarning &ex) {
@@ -615,7 +624,7 @@ Any SAL_CALL OStatement_Base::getWarnings( )
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- return makeAny(m_aLastWarning);
+ return Any(m_aLastWarning);
}
@@ -704,10 +713,19 @@ sal_Int64 OStatement_Base::getMaxFieldSize() const
OUString OStatement_Base::getCursorName() const
{
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
- SQLCHAR pName[258];
SQLSMALLINT nRealLen = 0;
- N3SQLGetCursorName(m_aStatementHandle,pName,256,&nRealLen);
- return OUString::createFromAscii(reinterpret_cast<char*>(pName));
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::GetCursorNameW))
+ {
+ SQLWCHAR pName[258]{};
+ functions().GetCursorNameW(m_aStatementHandle, pName, 256, &nRealLen);
+ return toUString(pName, nRealLen);
+ }
+ else
+ {
+ SQLCHAR pName[258]{};
+ functions().GetCursorName(m_aStatementHandle, pName, 256, &nRealLen);
+ return toUString(pName);
+ }
}
void OStatement_Base::setQueryTimeOut(sal_Int64 seconds)
@@ -831,11 +849,19 @@ void OStatement_Base::setMaxFieldSize(sal_Int64 _par0)
setStmtOption<SQLULEN, SQL_IS_UINTEGER>(SQL_ATTR_MAX_LENGTH, _par0);
}
-void OStatement_Base::setCursorName(std::u16string_view _par0)
+void OStatement_Base::setCursorName(const OUString& _par0)
{
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
- OString aName(OUStringToOString(_par0,getOwnConnection()->getTextEncoding()));
- N3SQLSetCursorName(m_aStatementHandle, reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(aName.getStr())), static_cast<SQLSMALLINT>(aName.getLength()));
+ if (bUseWChar && functions().has(ODBC3SQLFunctionId::SetCursorNameW))
+ {
+ SQLWChars name(_par0);
+ functions().SetCursorNameW(m_aStatementHandle, name.get(), name.cch());
+ }
+ else
+ {
+ SQLChars name(_par0, getOwnConnection()->getTextEncoding());
+ functions().SetCursorName(m_aStatementHandle, name.get(), name.cch());
+ }
}
bool OStatement_Base::isUsingBookmarks() const
@@ -859,31 +885,71 @@ void OStatement_Base::setUsingBookmarks(bool _bUseBookmark)
::cppu::IPropertyArrayHelper* OStatement_Base::createArrayHelper( ) const
{
- Sequence< Property > aProps(10);
- Property* pProperties = aProps.getArray();
- sal_Int32 nPos = 0;
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
- PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING),
- PROPERTY_ID_ESCAPEPROCESSING, cppu::UnoType<bool>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
- PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
- PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE),
- PROPERTY_ID_MAXFIELDSIZE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS),
- PROPERTY_ID_MAXROWS, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT),
- PROPERTY_ID_QUERYTIMEOUT, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
- PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
- PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0);
- pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS),
- PROPERTY_ID_USEBOOKMARKS, cppu::UnoType<bool>::get(), 0);
-
- return new ::cppu::OPropertyArrayHelper(aProps);
+ return new ::cppu::OPropertyArrayHelper
+ {
+ {
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
+ PROPERTY_ID_CURSORNAME,
+ cppu::UnoType<OUString>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING),
+ PROPERTY_ID_ESCAPEPROCESSING,
+ cppu::UnoType<bool>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
+ PROPERTY_ID_FETCHDIRECTION,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
+ PROPERTY_ID_FETCHSIZE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE),
+ PROPERTY_ID_MAXFIELDSIZE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS),
+ PROPERTY_ID_MAXROWS,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT),
+ PROPERTY_ID_QUERYTIMEOUT,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
+ PROPERTY_ID_RESULTSETCONCURRENCY,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
+ PROPERTY_ID_RESULTSETTYPE,
+ cppu::UnoType<sal_Int32>::get(),
+ 0
+ },
+ {
+ ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS),
+ PROPERTY_ID_USEBOOKMARKS,
+ cppu::UnoType<bool>::get(),
+ 0
+ }
+ }
+ };
}
@@ -1039,7 +1105,7 @@ void OStatement_Base::getFastPropertyValue(Any& rValue,sal_Int32 nHandle) const
}
}
-IMPLEMENT_SERVICE_INFO(OStatement,"com.sun.star.sdbcx.OStatement","com.sun.star.sdbc.Statement");
+IMPLEMENT_SERVICE_INFO(OStatement,u"com.sun.star.sdbcx.OStatement"_ustr,u"com.sun.star.sdbc.Statement"_ustr);
void SAL_CALL OStatement_Base::acquire() noexcept
{
diff --git a/connectivity/source/drivers/odbc/OTools.cxx b/connectivity/source/drivers/odbc/OTools.cxx
index 4781415de474..0909b03f14b2 100644
--- a/connectivity/source/drivers/odbc/OTools.cxx
+++ b/connectivity/source/drivers/odbc/OTools.cxx
@@ -115,7 +115,7 @@ void appendSQLWCHARs(OUStringBuffer & s, SQLWCHAR const * d, sal_Int32 n)
if (sizeof (SQLWCHAR) == sizeof (sal_Unicode)) {
s.append(reinterpret_cast<sal_Unicode const *>(d), n);
} else {
- for (sal_Int32 i = 0; i != n; ++i) {
+ for (sal_Int32 i = 0; i < n; ++i) {
s.appendUtf32(d[i]);
}
}
@@ -151,7 +151,7 @@ void OTools::getValue( OConnection const * _pConnection,
OSL_ENSURE(o3tl::make_unsigned(_nSize) >= properSize, "memory region is too small");
SQLLEN pcbValue = SQL_NULL_DATA;
OTools::ThrowException(_pConnection,
- (*reinterpret_cast<T3SQLGetData>(_pConnection->getOdbcFunction(ODBC3SQLFunctionId::GetData)))(_aStatementHandle,
+ _pConnection->functions().GetData(_aStatementHandle,
static_cast<SQLUSMALLINT>(columnIndex),
_nType,
_pValue,
@@ -161,144 +161,6 @@ void OTools::getValue( OConnection const * _pConnection,
_bWasNull = pcbValue == SQL_NULL_DATA;
}
-void OTools::bindValue( OConnection const * _pConnection,
- SQLHANDLE _aStatementHandle,
- sal_Int32 columnIndex,
- SQLSMALLINT _nType,
- SQLSMALLINT _nMaxLen,
- const void* _pValue,
- void* _pData,
- SQLLEN * const pLen,
- const css::uno::Reference< css::uno::XInterface >& _xInterface,
- rtl_TextEncoding _nTextEncoding,
- bool _bUseOldTimeDate)
-{
- SQLRETURN nRetcode;
- SQLSMALLINT fSqlType;
- SQLSMALLINT fCType;
-
- OTools::getBindTypes( false,
- _bUseOldTimeDate,
- _nType,
- fCType,
- fSqlType);
-
- if (columnIndex != 0 && !_pValue)
- {
- *pLen = SQL_NULL_DATA;
- nRetcode = (*reinterpret_cast<T3SQLBindCol>(_pConnection->getOdbcFunction(ODBC3SQLFunctionId::BindCol)))(_aStatementHandle,
- static_cast<SQLUSMALLINT>(columnIndex),
- fCType,
- _pData,
- _nMaxLen,
- pLen
- );
- }
- else
- {
- try
- {
- switch (_nType)
- {
- case SQL_CHAR:
- case SQL_VARCHAR:
- {
- OString aString(OUStringToOString(*static_cast<OUString const *>(_pValue),_nTextEncoding));
- *pLen = SQL_NTS;
- *static_cast<OString*>(_pData) = aString;
-
- // Pointer on Char*
- _pData = const_cast<char *>(aString.getStr());
- } break;
- case SQL_BIGINT:
- *static_cast<sal_Int64*>(_pData) = *static_cast<sal_Int64 const *>(_pValue);
- *pLen = sizeof(sal_Int64);
- break;
- case SQL_DECIMAL:
- case SQL_NUMERIC:
- {
- OString aString = OString::number(*static_cast<double const *>(_pValue));
- *pLen = static_cast<SQLSMALLINT>(aString.getLength());
- *static_cast<OString*>(_pData) = aString;
- // Pointer on Char*
- _pData = const_cast<char *>(static_cast<OString*>(_pData)->getStr());
- } break;
- case SQL_BIT:
- case SQL_TINYINT:
- *static_cast<sal_Int8*>(_pData) = *static_cast<sal_Int8 const *>(_pValue);
- *pLen = sizeof(sal_Int8);
- break;
-
- case SQL_SMALLINT:
- *static_cast<sal_Int16*>(_pData) = *static_cast<sal_Int16 const *>(_pValue);
- *pLen = sizeof(sal_Int16);
- break;
- case SQL_INTEGER:
- *static_cast<sal_Int32*>(_pData) = *static_cast<sal_Int32 const *>(_pValue);
- *pLen = sizeof(sal_Int32);
- break;
- case SQL_FLOAT:
- *static_cast<float*>(_pData) = *static_cast<float const *>(_pValue);
- *pLen = sizeof(float);
- break;
- case SQL_REAL:
- case SQL_DOUBLE:
- *static_cast<double*>(_pData) = *static_cast<double const *>(_pValue);
- *pLen = sizeof(double);
- break;
- case SQL_BINARY:
- case SQL_VARBINARY:
- {
- _pData = const_cast<sal_Int8 *>(static_cast<const css::uno::Sequence< sal_Int8 > *>(_pValue)->getConstArray());
- *pLen = static_cast<const css::uno::Sequence< sal_Int8 > *>(_pValue)->getLength();
- } break;
- case SQL_LONGVARBINARY:
- {
- /* see https://msdn.microsoft.com/en-us/library/ms716238%28v=vs.85%29.aspx
- * for an explanation of that apparently weird cast */
- _pData = reinterpret_cast<void*>(static_cast<uintptr_t>(columnIndex));
- sal_Int32 nLen = static_cast<const css::uno::Sequence< sal_Int8 > *>(_pValue)->getLength();
- *pLen = static_cast<SQLLEN>(SQL_LEN_DATA_AT_EXEC(nLen));
- }
- break;
- case SQL_LONGVARCHAR:
- {
- /* see https://msdn.microsoft.com/en-us/library/ms716238%28v=vs.85%29.aspx
- * for an explanation of that apparently weird cast */
- _pData = reinterpret_cast<void*>(static_cast<uintptr_t>(columnIndex));
- sal_Int32 nLen = static_cast<OUString const *>(_pValue)->getLength();
- *pLen = static_cast<SQLLEN>(SQL_LEN_DATA_AT_EXEC(nLen));
- } break;
- case SQL_DATE:
- *pLen = sizeof(DATE_STRUCT);
- *static_cast<DATE_STRUCT*>(_pData) = *static_cast<DATE_STRUCT const *>(_pValue);
- break;
- case SQL_TIME:
- *pLen = sizeof(TIME_STRUCT);
- *static_cast<TIME_STRUCT*>(_pData) = *static_cast<TIME_STRUCT const *>(_pValue);
- break;
- case SQL_TIMESTAMP:
- *pLen = sizeof(TIMESTAMP_STRUCT);
- *static_cast<TIMESTAMP_STRUCT*>(_pData) = *static_cast<TIMESTAMP_STRUCT const *>(_pValue);
- break;
- }
- }
- catch ( ... )
- {
- }
-
- nRetcode = (*reinterpret_cast<T3SQLBindCol>(_pConnection->getOdbcFunction(ODBC3SQLFunctionId::BindCol)))(_aStatementHandle,
- static_cast<SQLUSMALLINT>(columnIndex),
- fCType,
- _pData,
- _nMaxLen,
- pLen
- );
- }
-
- OTools::ThrowException(_pConnection,nRetcode,_aStatementHandle,SQL_HANDLE_STMT,_xInterface);
-}
-
void OTools::ThrowException(const OConnection* _pConnection,
const SQLRETURN _rRetCode,
const SQLHANDLE _pContext,
@@ -328,11 +190,10 @@ void OTools::ThrowException(const OConnection* _pConnection,
// Additional Information on the latest ODBC-functioncall available
// SQLError provides this Information.
- SDB_ODBC_CHAR szSqlState[5];
+ OUString errorMessage;
+ OUString sqlState;
SQLINTEGER pfNativeError;
- SDB_ODBC_CHAR szErrorMessage[SQL_MAX_MESSAGE_LENGTH];
- szErrorMessage[0] = '\0';
- SQLSMALLINT pcbErrorMsg = 0;
+ SQLRETURN n;
// Information for latest operation:
// when hstmt != SQL_NULL_HSTMT is (Used from SetStatus in SdbCursor, SdbTable, ...),
@@ -340,22 +201,46 @@ void OTools::ThrowException(const OConnection* _pConnection,
// statements of this connection [what in this case will probably be the same, but the Reference
// Manual isn't totally clear in this...].
// corresponding for hdbc.
- SQLRETURN n = (*reinterpret_cast<T3SQLGetDiagRec>(_pConnection->getOdbcFunction(ODBC3SQLFunctionId::GetDiagRec)))(_nHandleType,_pContext,1,
+ if (bUseWChar && _pConnection->functions().has(ODBC3SQLFunctionId::GetDiagRecW))
+ {
+ SQLWCHAR szSqlState[6];
+ SQLWCHAR szErrorMessage[SQL_MAX_MESSAGE_LENGTH];
+ szErrorMessage[0] = '\0';
+ SQLSMALLINT cchErrorMsg = 0;
+
+ n = _pConnection->functions().GetDiagRecW(_nHandleType,_pContext,1,
+ szSqlState,
+ &pfNativeError,
+ szErrorMessage, std::size(szErrorMessage) - 1, &cchErrorMsg);
+ if (SQL_SUCCEEDED(n))
+ {
+ errorMessage = toUString(szErrorMessage, cchErrorMsg);
+ sqlState = toUString(szSqlState, 5);
+ }
+ }
+ else
+ {
+ SQLCHAR szSqlState[6];
+ SQLCHAR szErrorMessage[SQL_MAX_MESSAGE_LENGTH];
+ szErrorMessage[0] = '\0';
+ SQLSMALLINT pcbErrorMsg = 0;
+
+ n = _pConnection->functions().GetDiagRec(_nHandleType,_pContext,1,
szSqlState,
&pfNativeError,
szErrorMessage,sizeof szErrorMessage - 1,&pcbErrorMsg);
+ if (SQL_SUCCEEDED(n))
+ {
+ rtl_TextEncoding _nTextEncoding = osl_getThreadTextEncoding();
+ errorMessage = toUString(szErrorMessage, pcbErrorMsg, _nTextEncoding);
+ sqlState = toUString(szSqlState, 5, _nTextEncoding);
+ }
+ }
OSL_ENSURE(n != SQL_INVALID_HANDLE,"SdbODBC3_SetStatus: SQLError returned SQL_INVALID_HANDLE");
OSL_ENSURE(n == SQL_SUCCESS || n == SQL_SUCCESS_WITH_INFO || n == SQL_NO_DATA_FOUND || n == SQL_ERROR,"SdbODBC3_SetStatus: SQLError failed");
- rtl_TextEncoding _nTextEncoding = osl_getThreadTextEncoding();
// For the Return Code of SQLError see ODBC 2.0 Programmer's Reference Page 287ff
- throw SQLException( OUString(reinterpret_cast<char *>(szErrorMessage), pcbErrorMsg, _nTextEncoding),
- _xInterface,
- OUString(reinterpret_cast<char *>(szSqlState), 5, _nTextEncoding),
- pfNativeError,
- Any()
- );
-
+ throw SQLException(errorMessage, _xInterface, sqlState, pfNativeError, Any());
}
Sequence<sal_Int8> OTools::getBytesValue(const OConnection* _pConnection,
@@ -378,7 +263,7 @@ Sequence<sal_Int8> OTools::getBytesValue(const OConnection* _pConnection,
while (pcbValue == SQL_NO_TOTAL || pcbValue > nMaxLen)
{
OTools::ThrowException(_pConnection,
- (*reinterpret_cast<T3SQLGetData>(_pConnection->getOdbcFunction(ODBC3SQLFunctionId::GetData)))(
+ _pConnection->functions().GetData(
_aStatementHandle,
static_cast<SQLUSMALLINT>(columnIndex),
_fSqlType,
@@ -438,7 +323,7 @@ OUString OTools::getStringValue(OConnection const * _pConnection,
while ((pcbValue == SQL_NO_TOTAL ) || (pcbValue >= nMaxSize) )
{
OTools::ThrowException(_pConnection,
- (*reinterpret_cast<T3SQLGetData>(_pConnection->getOdbcFunction(ODBC3SQLFunctionId::GetData)))(
+ _pConnection->functions().GetData(
_aStatementHandle,
static_cast<SQLUSMALLINT>(columnIndex),
SQL_C_WCHAR,
@@ -482,7 +367,7 @@ OUString OTools::getStringValue(OConnection const * _pConnection,
while ((pcbValue == SQL_NO_TOTAL ) || (pcbValue >= nMaxLen) )
{
OTools::ThrowException(_pConnection,
- (*reinterpret_cast<T3SQLGetData>(_pConnection->getOdbcFunction(ODBC3SQLFunctionId::GetData)))(
+ _pConnection->functions().GetData(
_aStatementHandle,
static_cast<SQLUSMALLINT>(columnIndex),
SQL_C_CHAR,
@@ -527,13 +412,27 @@ void OTools::GetInfo(OConnection const * _pConnection,
const Reference< XInterface >& _xInterface,
rtl_TextEncoding _nTextEncoding)
{
- char aValue[512];
- SQLSMALLINT nValueLen=0;
- OTools::ThrowException(_pConnection,
- (*reinterpret_cast<T3SQLGetInfo>(_pConnection->getOdbcFunction(ODBC3SQLFunctionId::GetInfo)))(_aConnectionHandle,_nInfo,aValue,(sizeof aValue)-1,&nValueLen),
- _aConnectionHandle,SQL_HANDLE_DBC,_xInterface);
+ if (bUseWChar && _pConnection->functions().has(ODBC3SQLFunctionId::GetInfoW))
+ {
+ SQLWCHAR aValue[512];
+ SQLSMALLINT nValueLen=0;
+ // SQLGetInfoW takes / outputs count of bytes, not characters
+ OTools::ThrowException(_pConnection,
+ _pConnection->functions().GetInfoW(_aConnectionHandle,_nInfo,aValue,sizeof(aValue)-sizeof(SQLWCHAR),&nValueLen),
+ _aConnectionHandle,SQL_HANDLE_DBC,_xInterface);
- _rValue = OUString(aValue,nValueLen,_nTextEncoding);
+ _rValue = toUString(aValue, nValueLen / sizeof(SQLWCHAR));
+ }
+ else
+ {
+ SQLCHAR aValue[512];
+ SQLSMALLINT nValueLen=0;
+ OTools::ThrowException(_pConnection,
+ _pConnection->functions().GetInfo(_aConnectionHandle,_nInfo,aValue,sizeof(aValue)-1,&nValueLen),
+ _aConnectionHandle,SQL_HANDLE_DBC,_xInterface);
+
+ _rValue = toUString(aValue, nValueLen, _nTextEncoding);
+ }
}
void OTools::GetInfo(OConnection const * _pConnection,
@@ -545,7 +444,7 @@ void OTools::GetInfo(OConnection const * _pConnection,
SQLSMALLINT nValueLen;
_rValue = 0; // in case the driver uses only 16 of the 32 bits (as it does, for example, for SQL_CATALOG_LOCATION)
OTools::ThrowException(_pConnection,
- (*reinterpret_cast<T3SQLGetInfo>(_pConnection->getOdbcFunction(ODBC3SQLFunctionId::GetInfo)))(_aConnectionHandle,_nInfo,&_rValue,sizeof _rValue,&nValueLen),
+ _pConnection->functions().GetInfo(_aConnectionHandle,_nInfo,&_rValue,sizeof _rValue,&nValueLen),
_aConnectionHandle,SQL_HANDLE_DBC,_xInterface);
}
@@ -558,7 +457,7 @@ void OTools::GetInfo(OConnection const * _pConnection,
SQLSMALLINT nValueLen;
_rValue = 0; // in case the driver uses only 16 of the 32 bits (as it does, for example, for SQL_CATALOG_LOCATION)
OTools::ThrowException(_pConnection,
- (*reinterpret_cast<T3SQLGetInfo>(_pConnection->getOdbcFunction(ODBC3SQLFunctionId::GetInfo)))(_aConnectionHandle,_nInfo,&_rValue,sizeof _rValue,&nValueLen),
+ _pConnection->functions().GetInfo(_aConnectionHandle,_nInfo,&_rValue,sizeof _rValue,&nValueLen),
_aConnectionHandle,SQL_HANDLE_DBC,_xInterface);
}
@@ -571,7 +470,7 @@ void OTools::GetInfo(OConnection const * _pConnection,
SQLSMALLINT nValueLen;
_rValue = 0; // in case the driver uses only 16 of the 32 bits (as it does, for example, for SQL_CATALOG_LOCATION)
OTools::ThrowException(_pConnection,
- (*reinterpret_cast<T3SQLGetInfo>(_pConnection->getOdbcFunction(ODBC3SQLFunctionId::GetInfo)))(_aConnectionHandle,_nInfo,&_rValue,sizeof _rValue,&nValueLen),
+ _pConnection->functions().GetInfo(_aConnectionHandle,_nInfo,&_rValue,sizeof _rValue,&nValueLen),
_aConnectionHandle,SQL_HANDLE_DBC,_xInterface);
}
@@ -683,8 +582,7 @@ SQLSMALLINT OTools::jdbcTypeToOdbc(sal_Int32 jdbcType)
return odbcType;
}
-void OTools::getBindTypes(bool _bUseWChar,
- bool _bUseOldTimeDate,
+void OTools::getBindTypes(bool _bUseOldTimeDate,
SQLSMALLINT _nOdbcType,
SQLSMALLINT& fCType,
SQLSMALLINT& fSqlType
@@ -692,42 +590,36 @@ void OTools::getBindTypes(bool _bUseWChar,
{
switch(_nOdbcType)
{
- case SQL_CHAR: if(_bUseWChar)
- {
- fCType = SQL_C_WCHAR;
- fSqlType = SQL_WCHAR;
- }
- else
+ case SQL_CHAR: if (!bUseWChar)
{
fCType = SQL_C_CHAR;
fSqlType = SQL_CHAR;
+ break;
}
- break;
- case SQL_VARCHAR: if(_bUseWChar)
- {
- fCType = SQL_C_WCHAR;
- fSqlType = SQL_WVARCHAR;
- }
- else
+ [[fallthrough]];
+ case SQL_WCHAR: fCType = SQL_C_WCHAR;
+ fSqlType = SQL_WCHAR; break;
+ case SQL_VARCHAR: if (!bUseWChar)
{
fCType = SQL_C_CHAR;
fSqlType = SQL_VARCHAR;
+ break;
}
- break;
- case SQL_LONGVARCHAR: if(_bUseWChar)
- {
- fCType = SQL_C_WCHAR;
- fSqlType = SQL_WLONGVARCHAR;
- }
- else
+ [[fallthrough]];
+ case SQL_WVARCHAR: fCType = SQL_C_WCHAR;
+ fSqlType = SQL_WVARCHAR; break;
+ case SQL_LONGVARCHAR: if (!bUseWChar)
{
fCType = SQL_C_CHAR;
fSqlType = SQL_LONGVARCHAR;
+ break;
}
- break;
- case SQL_DECIMAL: fCType = _bUseWChar ? SQL_C_WCHAR : SQL_C_CHAR;
+ [[fallthrough]];
+ case SQL_WLONGVARCHAR: fCType = SQL_C_WCHAR;
+ fSqlType = SQL_WLONGVARCHAR; break;
+ case SQL_DECIMAL: fCType = bUseWChar ? SQL_C_WCHAR : SQL_C_CHAR;
fSqlType = SQL_DECIMAL; break;
- case SQL_NUMERIC: fCType = _bUseWChar ? SQL_C_WCHAR : SQL_C_CHAR;
+ case SQL_NUMERIC: fCType = bUseWChar ? SQL_C_WCHAR : SQL_C_CHAR;
fSqlType = SQL_NUMERIC; break;
case SQL_BIT: fCType = SQL_C_TINYINT;
fSqlType = SQL_INTEGER; break;
diff --git a/connectivity/source/drivers/postgresql/pq_array.cxx b/connectivity/source/drivers/postgresql/pq_array.cxx
index 841ed70c6cb2..2b7ab3c9491f 100644
--- a/connectivity/source/drivers/postgresql/pq_array.cxx
+++ b/connectivity/source/drivers/postgresql/pq_array.cxx
@@ -54,7 +54,7 @@ namespace pq_sdbc_driver
OUString Array::getBaseTypeName( )
{
- return "varchar";
+ return u"varchar"_ustr;
}
sal_Int32 Array::getBaseType( )
@@ -96,7 +96,7 @@ css::uno::Reference< css::sdbc::XResultSet > Array::getResultSetAtIndex(
std::vector< Any > row( 2 );
row[0] <<= static_cast<sal_Int32>( i + index );
row[1] = m_data[i+index-1];
- ret[i] = row;
+ ret[i] = std::move(row);
}
return new SequenceResultSet(
diff --git a/connectivity/source/drivers/postgresql/pq_array.hxx b/connectivity/source/drivers/postgresql/pq_array.hxx
index b847d646a913..589fe063d234 100644
--- a/connectivity/source/drivers/postgresql/pq_array.hxx
+++ b/connectivity/source/drivers/postgresql/pq_array.hxx
@@ -39,6 +39,7 @@
#include <com/sun/star/sdbc/XArray.hpp>
#include "pq_connection.hxx"
+#include <utility>
#include <vector>
namespace pq_sdbc_driver
@@ -53,14 +54,14 @@ class Array : public cppu::WeakImplHelper< css::sdbc::XArray >
public:
Array(
- const rtl::Reference< comphelper::RefCountedMutex > & mutex,
+ rtl::Reference< comphelper::RefCountedMutex > mutex,
std::vector< css::uno::Any > && data,
- const css::uno::Reference< css::uno::XInterface > & owner,
- const css::uno::Reference< css::script::XTypeConverter > &tc) :
+ css::uno::Reference< css::uno::XInterface > owner,
+ css::uno::Reference< css::script::XTypeConverter > tc) :
m_data( std::move(data) ),
- m_owner( owner ),
- m_tc( tc ),
- m_xMutex( mutex )
+ m_owner(std::move( owner )),
+ m_tc(std::move( tc )),
+ m_xMutex(std::move( mutex ))
{}
public: // XArray
diff --git a/connectivity/source/drivers/postgresql/pq_baseresultset.cxx b/connectivity/source/drivers/postgresql/pq_baseresultset.cxx
index 9ff5e01e098a..274a0a209a17 100644
--- a/connectivity/source/drivers/postgresql/pq_baseresultset.cxx
+++ b/connectivity/source/drivers/postgresql/pq_baseresultset.cxx
@@ -74,25 +74,25 @@ static ::cppu::IPropertyArrayHelper & getResultSetPropertyArrayHelper()
static ::cppu::OPropertyArrayHelper arrayHelper(
Sequence<Property>{
Property(
- "CursorName", 0,
+ u"CursorName"_ustr, 0,
::cppu::UnoType<OUString>::get() , 0 ),
Property(
- "EscapeProcessing", 1,
+ u"EscapeProcessing"_ustr, 1,
cppu::UnoType<bool>::get() , 0 ),
Property(
- "FetchDirection", 2,
+ u"FetchDirection"_ustr, 2,
::cppu::UnoType<sal_Int32>::get() , 0 ),
Property(
- "FetchSize", 3,
+ u"FetchSize"_ustr, 3,
::cppu::UnoType<sal_Int32>::get() , 0 ),
Property(
- "IsBookmarkable", 4,
+ u"IsBookmarkable"_ustr, 4,
cppu::UnoType<bool>::get() , 0 ),
Property(
- "ResultSetConcurrency", 5,
+ u"ResultSetConcurrency"_ustr, 5,
::cppu::UnoType<sal_Int32>::get() , 0 ),
Property(
- "ResultSetType", 6,
+ u"ResultSetType"_ustr, 6,
::cppu::UnoType<sal_Int32>::get() , 0 )},
true );
return arrayHelper;
diff --git a/connectivity/source/drivers/postgresql/pq_connection.cxx b/connectivity/source/drivers/postgresql/pq_connection.cxx
index 6661a97d5669..74402197a0a5 100644
--- a/connectivity/source/drivers/postgresql/pq_connection.cxx
+++ b/connectivity/source/drivers/postgresql/pq_connection.cxx
@@ -34,6 +34,7 @@
*
************************************************************************/
+#include <utility>
#include <vector>
#include <string.h>
@@ -96,8 +97,8 @@ class ClosableReference : public cppu::WeakImplHelper< css::uno::XReference >
rtl::Reference<Connection> m_conn;
::rtl::ByteSequence m_id;
public:
- ClosableReference( const ::rtl::ByteSequence & id , Connection *that )
- : m_conn( that ), m_id( id )
+ ClosableReference( ::rtl::ByteSequence id , Connection *that )
+ : m_conn( that ), m_id(std::move( id ))
{
}
@@ -115,9 +116,9 @@ public:
Connection::Connection(
const rtl::Reference< comphelper::RefCountedMutex > &refMutex,
- const css::uno::Reference< css::uno::XComponentContext > & ctx )
+ css::uno::Reference< css::uno::XComponentContext > ctx )
: ConnectionBase( refMutex->GetMutex() ),
- m_ctx( ctx ) ,
+ m_ctx(std::move( ctx )) ,
m_xMutex( refMutex )
{
}
@@ -147,7 +148,6 @@ void Connection::close()
vectorDispose.push_back( Reference< XComponent > ( m_settings.users, UNO_QUERY ) );
vectorDispose.push_back( Reference< XComponent > ( m_settings.tables , UNO_QUERY ) );
- vectorDispose.push_back( Reference< XComponent > ( m_meta, UNO_QUERY ) );
m_meta.clear();
m_settings.tables.clear();
m_settings.users.clear();
@@ -191,7 +191,7 @@ Reference< XStatement > Connection::createStatement()
::rtl::ByteSequence id( 16 );
rtl_createUuid( reinterpret_cast<sal_uInt8*>(id.getArray()), nullptr, false );
m_myStatements[ id ] = Reference< XCloseable > ( stmt );
- stmt->queryAdapter()->addReference( new ClosableReference( id, this ) );
+ stmt->queryAdapter()->addReference( new ClosableReference( std::move(id), this ) );
return stmt;
}
@@ -207,14 +207,14 @@ Reference< XPreparedStatement > Connection::prepareStatement( const OUString& sq
::rtl::ByteSequence id( 16 );
rtl_createUuid( reinterpret_cast<sal_uInt8*>(id.getArray()), nullptr, false );
m_myStatements[ id ] = Reference< XCloseable > ( stmt );
- stmt->queryAdapter()->addReference( new ClosableReference( id, this ) );
+ stmt->queryAdapter()->addReference(new ClosableReference(std::move(id), this));
return stmt;
}
Reference< XPreparedStatement > Connection::prepareCall( const OUString& )
{
throw SQLException(
- "pq_driver: Callable statements not supported",
+ u"pq_driver: Callable statements not supported"_ustr,
Reference< XInterface > (), OUString() , 1, Any() );
}
@@ -281,7 +281,7 @@ OUString Connection::getCatalog()
MutexGuard guard( m_xMutex->GetMutex() );
if( m_settings.pConnection == nullptr )
{
- throw SQLException( "pq_connection: connection is closed", *this,
+ throw SQLException( u"pq_connection: connection is closed"_ustr, *this,
OUString(), 1, Any() );
}
char * p = PQdb(m_settings.pConnection );
@@ -330,7 +330,15 @@ class cstr_vector
std::vector<char*> values;
std::vector<bool> acquired;
public:
+#if defined __GNUC__ && !defined __clang__ && __GNUC__ == 14
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Warray-bounds"
+#pragma GCC diagnostic ignored "-Wstringop-overflow"
+#endif
cstr_vector () { values.reserve(8); acquired.reserve(8); }
+#if defined __GNUC__ && !defined __clang__ && __GNUC__ == 14
+#pragma GCC diagnostic pop
+#endif
~cstr_vector ()
{
OSL_ENSURE(values.size() == acquired.size(), "pq_connection: cstr_vector values and acquired size mismatch");
@@ -418,7 +426,7 @@ void Connection::initialize( const Sequence< Any >& aArguments )
if( ! tc.is() )
{
throw RuntimeException(
- "pq_driver: Couldn't instantiate converter service" );
+ u"pq_driver: Couldn't instantiate converter service"_ustr );
}
if( aArguments.getLength() != 2 )
{
@@ -431,7 +439,7 @@ void Connection::initialize( const Sequence< Any >& aArguments )
{
throw IllegalArgumentException(
"pq_driver: expected string as first argument, got "
- + aArguments[0].getValueType().getTypeName(),
+ + aArguments[0].getValueTypeName(),
*this, 0 );
}
@@ -470,7 +478,7 @@ void Connection::initialize( const Sequence< Any >& aArguments )
// Just the most likely error; the error might be HY024 "Invalid attribute value".
throw SQLException(
"Error in database URL '" + url + "':\n" + errorMessage,
- *this, "HY092", 5, Any() );
+ *this, u"HY092"_ustr, 5, Any() );
}
for ( PQconninfoOption * opt = oOpts.get(); opt->keyword != nullptr; ++opt)
@@ -489,7 +497,7 @@ void Connection::initialize( const Sequence< Any >& aArguments )
m_settings.pConnection = PQconnectdbParams( keywords.c_array(), values.c_array(), 0 );
}
if( ! m_settings.pConnection )
- throw RuntimeException("pq_driver: out of memory" );
+ throw RuntimeException(u"pq_driver: out of memory"_ustr );
if( PQstatus( m_settings.pConnection ) == CONNECTION_BAD )
{
const char * error = PQerrorMessage( m_settings.pConnection );
@@ -506,7 +514,7 @@ void Connection::initialize( const Sequence< Any >& aArguments )
m_settings.user = OUString( p, strlen(p), RTL_TEXTENCODING_UTF8);
p = PQdb( m_settings.pConnection );
m_settings.catalog = OUString( p, strlen(p), RTL_TEXTENCODING_UTF8);
- m_settings.tc = tc;
+ m_settings.tc = std::move(tc);
SAL_INFO("connectivity.postgresql", "connection to '" << url << "' successfully opened");
}
@@ -519,7 +527,7 @@ void Connection::disposing()
void Connection::checkClosed()
{
if( !m_settings.pConnection )
- throw SQLException( "pq_connection: Connection already closed",
+ throw SQLException( u"pq_connection: Connection already closed"_ustr,
*this, OUString(), 1, Any() );
}
diff --git a/connectivity/source/drivers/postgresql/pq_connection.hxx b/connectivity/source/drivers/postgresql/pq_connection.hxx
index f30483f70938..2b86ce5882fd 100644
--- a/connectivity/source/drivers/postgresql/pq_connection.hxx
+++ b/connectivity/source/drivers/postgresql/pq_connection.hxx
@@ -66,6 +66,8 @@
namespace pq_sdbc_driver
{
struct ConnectionSettings;
+class DatabaseMetaData;
+
struct ConnectionSettings
{
ConnectionSettings() :
@@ -123,7 +125,7 @@ class Connection : public ConnectionBase
css::uno::Reference< css::container::XNameAccess > m_typeMap;
ConnectionSettings m_settings;
::rtl::Reference< comphelper::RefCountedMutex > m_xMutex;
- css::uno::Reference< css::sdbc::XDatabaseMetaData > m_meta;
+ rtl::Reference< DatabaseMetaData > m_meta;
WeakHashMap m_myStatements;
private:
@@ -134,7 +136,7 @@ private:
public:
Connection(
const rtl::Reference< comphelper::RefCountedMutex > &refMutex,
- const css::uno::Reference< css::uno::XComponentContext > & ctx );
+ css::uno::Reference< css::uno::XComponentContext > ctx );
virtual ~Connection( ) override;
diff --git a/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx b/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx
index c3280e07bf15..76157bc4c305 100644
--- a/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx
+++ b/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx
@@ -84,6 +84,7 @@
#include <com/sun/star/sdbc/IndexType.hpp>
#include <com/sun/star/sdbc/ColumnValue.hpp>
#include <com/sun/star/sdbc/ColumnSearch.hpp>
+#include <utility>
using ::osl::MutexGuard;
@@ -114,13 +115,13 @@ namespace pq_sdbc_driver
#define DEFERRABILITY_NONE 7
DatabaseMetaData::DatabaseMetaData(
- const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
- const css::uno::Reference< css::sdbc::XConnection > & origin,
+ ::rtl::Reference< comphelper::RefCountedMutex > refMutex,
+ css::uno::Reference< css::sdbc::XConnection > origin,
ConnectionSettings *pSettings )
- : m_xMutex( refMutex ),
+ : m_xMutex(std::move( refMutex )),
m_pSettings( pSettings ),
- m_origin( origin ),
- m_getIntSetting_stmt ( m_origin->prepareStatement("SELECT setting FROM pg_catalog.pg_settings WHERE name=?") )
+ m_origin(std::move( origin )),
+ m_getIntSetting_stmt ( m_origin->prepareStatement(u"SELECT setting FROM pg_catalog.pg_settings WHERE name=?"_ustr) )
{
init_getReferences_stmt();
init_getPrivs_stmt();
@@ -180,7 +181,7 @@ sal_Bool DatabaseMetaData::nullsAreSortedAtEnd( )
OUString DatabaseMetaData::getDatabaseProductName( )
{
- return "PostgreSQL";
+ return u"PostgreSQL"_ustr;
}
OUString DatabaseMetaData::getDatabaseProductVersion( )
@@ -189,7 +190,7 @@ OUString DatabaseMetaData::getDatabaseProductVersion( )
}
OUString DatabaseMetaData::getDriverName( )
{
- return "postgresql-sdbc";
+ return u"postgresql-sdbc"_ustr;
}
OUString DatabaseMetaData::getDriverVersion( )
@@ -210,10 +211,10 @@ sal_Int32 DatabaseMetaData::getDriverMinorVersion( )
sal_Bool DatabaseMetaData::usesLocalFiles( )
{
// LEM TODO:
- // http://wiki.openoffice.org/wiki/Documentation/DevGuide/Database/XDatabaseMetaData_Interface
+ // https://wiki.documentfoundation.org/Documentation/DevGuide/Database_Access#XDatabaseMetaData_Interface
// says "Returns true when the catalog name of the
// database should not appear in the DatasourceBrowser
- // of OpenOffice.org API, otherwise false is returned."
+ // of LibreOffice API, otherwise false is returned."
// So, hmmm, think about it.
return false;
}
@@ -270,7 +271,7 @@ sal_Bool DatabaseMetaData::storesMixedCaseQuotedIdentifiers( )
OUString DatabaseMetaData::getIdentifierQuoteString( )
{
- return "\"";
+ return u"\""_ustr;
}
OUString DatabaseMetaData::getSQLKeywords( )
@@ -281,7 +282,7 @@ OUString DatabaseMetaData::getSQLKeywords( )
// See http://www.postgresql.org/docs/current/static/sql-keywords-appendix.html
// LEM TODO: consider using pg_get_keywords(), filter on catcode
return
- "ANALYSE,"
+ u"ANALYSE,"
"ANALYZE,"
"ARRAY," //SQL:1999
"ASYMMETRIC," //SQL:2003
@@ -305,19 +306,19 @@ OUString DatabaseMetaData::getSQLKeywords( )
"SIMILAR," //SQL:2003
"VARIADIC,"
"VERBOSE,"
- "WINDOW" //SQL:2003
+ "WINDOW"_ustr //SQL:2003
;
}
OUString DatabaseMetaData::getNumericFunctions( )
{
- // See http://www.postgresql.org/docs/9.1/static/functions-math.html
- // LEM TODO: Err... http://wiki.openoffice.org/wiki/Documentation/DevGuide/Database/Support_Scalar_Functions
+ // See https://www.postgresql.org/docs/9.1/static/functions-math.html
+ // LEM TODO: Err... https://wiki.documentfoundation.org/Documentation/DevGuide/Database_Access#Support_Scalar_Functions
// says this should be "Open Group CLI" names, not PostgreSQL names.
// Currently this is just a list of supported functions in PostgreSQL, with PostgreSQL names.
// And it is my job to map from Open Group CLI names/syntax to PostgreSQL names/syntax. Where? By parsing the SQL???
// Should look at what the JDBC driver is doing.
return
- "abs,"
+ u"abs,"
"cbrt,"
"ceil,"
"ceiling,"
@@ -345,7 +346,7 @@ OUString DatabaseMetaData::getNumericFunctions( )
"cos,"
"cot,"
"sin,"
- "tan"
+ "tan"_ustr
;
}
@@ -353,7 +354,7 @@ OUString DatabaseMetaData::getStringFunctions( )
{
// See http://www.postgresql.org/docs/9.1/static/functions-string.html
return
- "bit_length,"
+ u"bit_length,"
"char_length,"
"character_length,"
"lower,"
@@ -399,7 +400,7 @@ OUString DatabaseMetaData::getStringFunctions( )
"substr,"
"to_ascii,"
"to_hex,"
- "translate"
+ "translate"_ustr
;
}
@@ -408,7 +409,7 @@ OUString DatabaseMetaData::getSystemFunctions( )
// See http://www.postgresql.org/docs/9.1/static/functions-info.html
// and http://www.postgresql.org/docs/9.1/static/functions-admin.html
return
- "current_catalog,"
+ u"current_catalog,"
"current_database,"
"current_query,"
"current_schema,"
@@ -529,14 +530,14 @@ OUString DatabaseMetaData::getSystemFunctions( )
"pg_try_advisory_lock_shared,"
"pg_try_advisory_xact_lock,"
"pg_try_advisory_xact_lock_shared,"
- "pg_sleep"
+ "pg_sleep"_ustr
;
}
OUString DatabaseMetaData::getTimeDateFunctions( )
{
// TODO
return
- "age,"
+ u"age,"
"age,"
"clock_timestamp,"
"current_date,"
@@ -558,16 +559,16 @@ OUString DatabaseMetaData::getTimeDateFunctions( )
"now,"
"statement_timestamp,"
"timeofday,"
- "transaction_timestamp,"
+ "transaction_timestamp,"_ustr
;
}
OUString DatabaseMetaData::getSearchStringEscape( )
{
- return "\\";
+ return u"\\"_ustr;
}
OUString DatabaseMetaData::getExtraNameCharacters( )
{
- return "$";
+ return u"$"_ustr;
}
sal_Bool DatabaseMetaData::supportsAlterTableWithAddColumn( )
@@ -722,17 +723,17 @@ sal_Bool DatabaseMetaData::supportsLimitedOuterJoins( )
OUString DatabaseMetaData::getSchemaTerm( )
{
- return "SCHEMA";
+ return u"SCHEMA"_ustr;
}
OUString DatabaseMetaData::getProcedureTerm( )
{
- return "function";
+ return u"function"_ustr;
}
OUString DatabaseMetaData::getCatalogTerm( )
{
- return "DATABASE";
+ return u"DATABASE"_ustr;
}
sal_Bool DatabaseMetaData::isCatalogAtStart( )
@@ -742,7 +743,7 @@ sal_Bool DatabaseMetaData::isCatalogAtStart( )
OUString DatabaseMetaData::getCatalogSeparator( )
{
- return ".";
+ return u"."_ustr;
}
sal_Bool DatabaseMetaData::supportsSchemasInDataManipulation( )
@@ -909,7 +910,7 @@ sal_Int32 DatabaseMetaData::getIntSetting(const OUString& settingName)
sal_Int32 DatabaseMetaData::getMaxNameLength()
{
if ( m_pSettings->maxNameLen == 0)
- m_pSettings->maxNameLen = getIntSetting( "max_identifier_length" );
+ m_pSettings->maxNameLen = getIntSetting( u"max_identifier_length"_ustr );
OSL_ENSURE(m_pSettings->maxNameLen, "postgresql-sdbc: maxNameLen is zero");
return m_pSettings->maxNameLen;
}
@@ -917,7 +918,7 @@ sal_Int32 DatabaseMetaData::getMaxNameLength()
sal_Int32 DatabaseMetaData::getMaxIndexKeys()
{
if ( m_pSettings->maxIndexKeys == 0)
- m_pSettings->maxIndexKeys = getIntSetting("max_index_keys");
+ m_pSettings->maxIndexKeys = getIntSetting(u"max_index_keys"_ustr);
OSL_ENSURE(m_pSettings->maxIndexKeys, "postgresql-sdbc: maxIndexKeys is zero");
return m_pSettings->maxIndexKeys;
}
@@ -1123,14 +1124,14 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getTables(
// Take "inspiration" from JDBC driver
// Ah, this is used to create a XResultSet manually... Try to do it directly in SQL
Reference< XPreparedStatement > statement = m_origin->prepareStatement(
- "SELECT "
+ u"SELECT "
"DISTINCT ON (pg_namespace.nspname, relname ) " // avoid duplicates (pg_settings !)
"pg_namespace.nspname, relname, relkind, pg_description.description "
"FROM pg_namespace, pg_class LEFT JOIN pg_description ON pg_class.oid = pg_description.objoid "
"WHERE relnamespace = pg_namespace.oid "
"AND ( relkind = 'r' OR relkind = 'v') "
"AND pg_namespace.nspname LIKE ? "
- "AND relname LIKE ? "
+ "AND relname LIKE ? "_ustr
// "ORDER BY pg_namespace.nspname || relname"
);
@@ -1185,30 +1186,30 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getTables(
namespace
{
// sort no schema first, then "public", then normal schemas, then internal schemas
- int compare_schema(const OUString &nsA, std::u16string_view nsB)
+ int compare_schema(std::u16string_view nsA, std::u16string_view nsB)
{
- if (nsA.isEmpty())
+ if (nsA.empty())
{
return nsB.empty() ? 0 : -1;
}
else if (nsB.empty())
{
- assert(!nsA.isEmpty());
+ assert(!nsA.empty());
return 1;
}
- else if(nsA == "public")
+ else if(nsA == u"public")
{
return (nsB == u"public") ? 0 : -1;
}
else if(nsB == u"public")
{
- assert(nsA != "public");
+ assert(nsA != u"public");
return 1;
}
- else if(nsA.startsWith("pg_"))
+ else if(o3tl::starts_with(nsA, u"pg_"))
{
if(o3tl::starts_with(nsB, u"pg_"))
- return nsA.compareTo(nsB);
+ return nsA.compare(nsB);
else
return 1;
}
@@ -1218,7 +1219,7 @@ namespace
}
else
{
- return nsA.compareTo(nsB);
+ return nsA.compare(nsB);
}
}
@@ -1244,7 +1245,7 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getSchemas( )
// <b>TABLE_SCHEM</b> string =&amp;gt; schema name
Reference< XStatement > statement = m_origin->createStatement();
Reference< XResultSet > rs = statement->executeQuery(
- "SELECT nspname from pg_namespace" );
+ u"SELECT nspname from pg_namespace"_ustr );
// LEM TODO: look at JDBC driver and consider doing the same
// in particular, excluding temporary schemas, but maybe better through pg_is_other_temp_schema(oid) OR == pg_my_temp_schema()
@@ -1364,9 +1365,9 @@ namespace {
{
DatabaseTypeDescription()
{}
- DatabaseTypeDescription( const OUString &name, const OUString & type ) :
- typeName( name ),
- typeType( type )
+ DatabaseTypeDescription( OUString name, OUString type ) :
+ typeName(std::move( name )),
+ typeType(std::move( type ))
{}
DatabaseTypeDescription( const DatabaseTypeDescription &source ) :
typeName( source.typeName ),
@@ -1405,8 +1406,7 @@ static void columnMetaData2DatabaseTypeDescription(
oidMap[row->getInt(12)] = DatabaseTypeDescription();
if( domains )
queryBuf.append( " OR " );
- queryBuf.append( "oid = " );
- queryBuf.append( row->getInt(12 ) );
+ queryBuf.append( "oid = " + OUString::number( row->getInt(12 ) ) );
domains ++;
}
}
@@ -1534,8 +1534,8 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getColumns(
columnMetaData2DatabaseTypeDescription( domainMap, rs, domainTypeStmt );
sal_uInt32 colNum(0);
- OUString sSchema( "#invalid#" );
- OUString sTable( "#invalid#" );
+ OUString sSchema( u"#invalid#"_ustr );
+ OUString sTable( u"#invalid#"_ustr );
while( rs->next() )
{
@@ -1685,14 +1685,14 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getPrimaryKeys(
<< schema << "." << table);
Reference< XPreparedStatement > statement = m_origin->prepareStatement(
- "SELECT nmsp.nspname, "
+ u"SELECT nmsp.nspname, "
"cl.relname, "
"con.conkey, "
"con.conname, "
"con.conrelid "
"FROM pg_constraint as con,pg_class as cl, pg_namespace as nmsp "
"WHERE con.connamespace = nmsp.oid AND con.conrelid = cl.oid AND con.contype = 'p' "
- "AND nmsp.nspname LIKE ? AND cl.relname LIKE ?" );
+ "AND nmsp.nspname LIKE ? AND cl.relname LIKE ?"_ustr );
Reference< XParameters > parameters( statement, UNO_QUERY_THROW );
parameters->setString( 1 , schema );
@@ -1753,9 +1753,9 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getPrimaryKeys(
row[4] >>= tableOid;
row[3] >>= attnum;
statement = m_origin->prepareStatement(
- "SELECT att.attname FROM "
+ u"SELECT att.attname FROM "
"pg_attribute AS att, pg_class AS cl WHERE "
- "att.attrelid = ? AND att.attnum = ?" );
+ "att.attrelid = ? AND att.attnum = ?"_ustr );
parameters.set( statement, UNO_QUERY_THROW );
parameters->setString( 1 , tableOid );
@@ -1778,7 +1778,7 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getPrimaryKeys(
if( closeable.is() )
closeable->close();
}
- ret[elements] = row;
+ ret[elements] = std::move(row);
elements ++;
}
return new SequenceResultSet(
@@ -1826,100 +1826,100 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getPrimaryKeys(
#define SQL_GET_REFERENCES_ORDER_NO_PTABLE "ORDER BY pkn.nspname, pkc.relname, conkeyseq"
#define SQL_GET_REFERENCES_NONE_NONE_NONE_NONE \
- SQL_GET_REFERENCES \
- SQL_GET_REFERENCES_ORDER_NO_PTABLE
+ u"" SQL_GET_REFERENCES \
+ SQL_GET_REFERENCES_ORDER_NO_PTABLE ""_ustr
#define SQL_GET_REFERENCES_SOME_NONE_NONE_NONE \
- SQL_GET_REFERENCES \
+ u"" SQL_GET_REFERENCES \
SQL_GET_REFERENCES_PSCHEMA \
- SQL_GET_REFERENCES_ORDER_NO_PTABLE
+ SQL_GET_REFERENCES_ORDER_NO_PTABLE ""_ustr
#define SQL_GET_REFERENCES_NONE_SOME_NONE_NONE \
- SQL_GET_REFERENCES \
+ u"" SQL_GET_REFERENCES \
SQL_GET_REFERENCES_PTABLE \
- SQL_GET_REFERENCES_ORDER_SOME_PTABLE
+ SQL_GET_REFERENCES_ORDER_SOME_PTABLE ""_ustr
#define SQL_GET_REFERENCES_SOME_SOME_NONE_NONE \
- SQL_GET_REFERENCES \
+ u"" SQL_GET_REFERENCES \
SQL_GET_REFERENCES_PSCHEMA \
SQL_GET_REFERENCES_PTABLE \
- SQL_GET_REFERENCES_ORDER_SOME_PTABLE
+ SQL_GET_REFERENCES_ORDER_SOME_PTABLE ""_ustr
#define SQL_GET_REFERENCES_NONE_NONE_SOME_NONE \
- SQL_GET_REFERENCES \
+ u"" SQL_GET_REFERENCES \
SQL_GET_REFERENCES_FSCHEMA \
- SQL_GET_REFERENCES_ORDER_NO_PTABLE
+ SQL_GET_REFERENCES_ORDER_NO_PTABLE ""_ustr
#define SQL_GET_REFERENCES_NONE_NONE_NONE_SOME \
- SQL_GET_REFERENCES \
+ u"" SQL_GET_REFERENCES \
SQL_GET_REFERENCES_FTABLE \
- SQL_GET_REFERENCES_ORDER_NO_PTABLE
+ SQL_GET_REFERENCES_ORDER_NO_PTABLE ""_ustr
#define SQL_GET_REFERENCES_NONE_NONE_SOME_SOME \
- SQL_GET_REFERENCES \
+ u"" SQL_GET_REFERENCES \
SQL_GET_REFERENCES_FSCHEMA \
SQL_GET_REFERENCES_FTABLE \
- SQL_GET_REFERENCES_ORDER_NO_PTABLE
+ SQL_GET_REFERENCES_ORDER_NO_PTABLE ""_ustr
#define SQL_GET_REFERENCES_SOME_NONE_SOME_NONE \
- SQL_GET_REFERENCES \
+ u"" SQL_GET_REFERENCES \
SQL_GET_REFERENCES_PSCHEMA \
SQL_GET_REFERENCES_FSCHEMA \
- SQL_GET_REFERENCES_ORDER_NO_PTABLE
+ SQL_GET_REFERENCES_ORDER_NO_PTABLE ""_ustr
#define SQL_GET_REFERENCES_SOME_NONE_NONE_SOME \
- SQL_GET_REFERENCES \
+ u"" SQL_GET_REFERENCES \
SQL_GET_REFERENCES_PSCHEMA \
SQL_GET_REFERENCES_FTABLE \
- SQL_GET_REFERENCES_ORDER_NO_PTABLE
+ SQL_GET_REFERENCES_ORDER_NO_PTABLE ""_ustr
#define SQL_GET_REFERENCES_SOME_NONE_SOME_SOME \
- SQL_GET_REFERENCES \
+ u"" SQL_GET_REFERENCES \
SQL_GET_REFERENCES_PSCHEMA \
SQL_GET_REFERENCES_FSCHEMA \
SQL_GET_REFERENCES_FTABLE \
- SQL_GET_REFERENCES_ORDER_NO_PTABLE
+ SQL_GET_REFERENCES_ORDER_NO_PTABLE ""_ustr
#define SQL_GET_REFERENCES_NONE_SOME_SOME_NONE \
- SQL_GET_REFERENCES \
+ u"" SQL_GET_REFERENCES \
SQL_GET_REFERENCES_PTABLE \
SQL_GET_REFERENCES_FSCHEMA \
- SQL_GET_REFERENCES_ORDER_SOME_PTABLE
+ SQL_GET_REFERENCES_ORDER_SOME_PTABLE ""_ustr
#define SQL_GET_REFERENCES_NONE_SOME_NONE_SOME \
- SQL_GET_REFERENCES \
+ u"" SQL_GET_REFERENCES \
SQL_GET_REFERENCES_PTABLE \
SQL_GET_REFERENCES_FTABLE \
- SQL_GET_REFERENCES_ORDER_SOME_PTABLE
+ SQL_GET_REFERENCES_ORDER_SOME_PTABLE ""_ustr
#define SQL_GET_REFERENCES_NONE_SOME_SOME_SOME \
- SQL_GET_REFERENCES \
+ u"" SQL_GET_REFERENCES \
SQL_GET_REFERENCES_PTABLE \
SQL_GET_REFERENCES_FSCHEMA \
SQL_GET_REFERENCES_FTABLE \
- SQL_GET_REFERENCES_ORDER_SOME_PTABLE
+ SQL_GET_REFERENCES_ORDER_SOME_PTABLE ""_ustr
#define SQL_GET_REFERENCES_SOME_SOME_SOME_NONE \
- SQL_GET_REFERENCES \
+ u"" SQL_GET_REFERENCES \
SQL_GET_REFERENCES_PSCHEMA \
SQL_GET_REFERENCES_PTABLE \
SQL_GET_REFERENCES_FSCHEMA \
- SQL_GET_REFERENCES_ORDER_SOME_PTABLE
+ SQL_GET_REFERENCES_ORDER_SOME_PTABLE ""_ustr
#define SQL_GET_REFERENCES_SOME_SOME_NONE_SOME \
- SQL_GET_REFERENCES \
+ u"" SQL_GET_REFERENCES \
SQL_GET_REFERENCES_PSCHEMA \
SQL_GET_REFERENCES_PTABLE \
SQL_GET_REFERENCES_FTABLE \
- SQL_GET_REFERENCES_ORDER_SOME_PTABLE
+ SQL_GET_REFERENCES_ORDER_SOME_PTABLE ""_ustr
#define SQL_GET_REFERENCES_SOME_SOME_SOME_SOME \
- SQL_GET_REFERENCES \
+ u"" SQL_GET_REFERENCES \
SQL_GET_REFERENCES_PSCHEMA \
SQL_GET_REFERENCES_PTABLE \
SQL_GET_REFERENCES_FSCHEMA \
SQL_GET_REFERENCES_FTABLE \
- SQL_GET_REFERENCES_ORDER_SOME_PTABLE
+ SQL_GET_REFERENCES_ORDER_SOME_PTABLE ""_ustr
void DatabaseMetaData::init_getReferences_stmt ()
{
@@ -2086,45 +2086,45 @@ namespace
OUString nameB;
a[0 /*TYPE_NAME*/] >>= nameA;
b[0 /*TYPE_NAME*/] >>= nameB;
- OUString nsA, tnA, nsB, tnB;
+ std::u16string_view nsA, tnA, nsB, tnB;
// parse typename into schema and typename
sal_Int32 nIndex=0;
- nsA = nameA.getToken(0, '.', nIndex);
+ nsA = o3tl::getToken(nameA, 0, '.', nIndex);
if (nIndex<0)
{
tnA = nsA;
- nsA.clear();
+ nsA = std::u16string_view();
}
else
{
- tnA = nameA.getToken(0, '.', nIndex);
+ tnA = o3tl::getToken(nameA, 0, '.', nIndex);
assert(nIndex < 0);
}
nIndex=0;
- nsB = nameB.getToken(0, '.', nIndex);
+ nsB = o3tl::getToken(nameB, 0, '.', nIndex);
if (nIndex<0)
{
tnB = nsB;
- nsB.clear();
+ nsB = std::u16string_view();
}
else
{
- tnB = nameB.getToken(0, '.', nIndex);
+ tnB = o3tl::getToken(nameB, 0, '.', nIndex);
assert(nIndex < 0);
}
const int ns_comp = compare_schema(nsA, nsB);
if(ns_comp == 0)
{
- if(nsA.isEmpty())
+ if(nsA.empty())
{
- assert(nsB.isEmpty());
+ assert(nsB.empty());
// within each type category, sort privileged choice first
- if( tnA == "int4" || tnA == "varchar" || tnA == "char" || tnA == "text")
+ if( tnA == u"int4" || tnA == u"varchar" || tnA == u"char" || tnA == u"text")
return true;
- if( tnB == "int4" || tnB == "varchar" || tnB == "char" || tnB == "text")
+ if( tnB == u"int4" || tnB == u"varchar" || tnB == u"char" || tnB == u"text")
return false;
}
return nameA.compareTo( nameB ) < 0;
@@ -2226,12 +2226,12 @@ namespace
// in postgresql the upper limit is optional, no limit means unlimited
// length (=1GB).
precision = 0x40000000; // about 1 GB, see character type docs in postgresql
- row[CREATE_PARAMS] <<= OUString("length");
+ row[CREATE_PARAMS] <<= u"length"_ustr;
}
else if( dataType == css::sdbc::DataType::NUMERIC )
{
precision = 1000;
- row[CREATE_PARAMS] <<= OUString("length, scale");
+ row[CREATE_PARAMS] <<= u"length, scale"_ustr;
}
row[TYPE_NAME] <<= construct_full_typename(xRow->getString(6), xRow->getString(1));
@@ -2243,15 +2243,15 @@ namespace
row[NULLABLE] <<= OUString::number(nullable);
row[CASE_SENSITIVE] <<= OUString::number(1);
row[SEARCHABLE] <<= OUString::number( calcSearchable( dataType ) );
- row[UNSIGNED_ATTRIBUTE] <<= OUString("0");
+ row[UNSIGNED_ATTRIBUTE] <<= u"0"_ustr;
if( css::sdbc::DataType::INTEGER == dataType ||
css::sdbc::DataType::BIGINT == dataType )
- row[AUTO_INCREMENT] <<= OUString("1"); // TODO
+ row[AUTO_INCREMENT] <<= u"1"_ustr; // TODO
else
- row[AUTO_INCREMENT] <<= OUString("0"); // TODO
- row[MINIMUM_SCALE] <<= OUString("0"); // TODO: what is this ?
+ row[AUTO_INCREMENT] <<= u"0"_ustr; // TODO
+ row[MINIMUM_SCALE] <<= u"0"_ustr; // TODO: what is this ?
row[MAXIMUM_SCALE] <<= OUString::number( getMaxScale( dataType ) );
- row[NUM_PREC_RADIX] <<= OUString("10"); // TODO: what is this ?
+ row[NUM_PREC_RADIX] <<= u"10"_ustr; // TODO: what is this ?
vec.push_back( row );
}
}
@@ -2267,7 +2267,7 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getTypeInfo( )
Reference< XStatement > statement = m_origin->createStatement();
Reference< XResultSet > rs = statement->executeQuery(
- "SELECT pg_type.typname AS typname," //1
+ u"SELECT pg_type.typname AS typname," //1
"pg_type.typtype AS typtype," //2
"pg_type.typlen AS typlen," //3
"pg_type.typnotnull AS typnotnull," //4
@@ -2275,7 +2275,7 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getTypeInfo( )
"pg_namespace.nspname as typns " //6
"FROM pg_type LEFT JOIN pg_namespace ON pg_type.typnamespace=pg_namespace.oid "
"WHERE pg_type.typtype = 'b' "
- "OR pg_type.typtype = 'p'"
+ "OR pg_type.typtype = 'p'"_ustr
);
std::vector< std::vector<Any> > vec;
@@ -2283,14 +2283,14 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getTypeInfo( )
// check for domain types
rs = statement->executeQuery(
- "SELECT t1.typname as typname,"
+ u"SELECT t1.typname as typname,"
"t2.typtype AS typtype,"
"t2.typlen AS typlen,"
"t2.typnotnull AS typnotnull,"
"t2.typname as realtypname, "
"pg_namespace.nspname as typns "
"FROM pg_type as t1 LEFT JOIN pg_type AS t2 ON t1.typbasetype=t2.oid LEFT JOIN pg_namespace ON t1.typnamespace=pg_namespace.oid "
- "WHERE t1.typtype = 'd'" );
+ "WHERE t1.typtype = 'd'"_ustr );
pgTypeInfo2ResultSet( vec, rs );
std::sort( vec.begin(), vec.end(), TypeInfoByDataTypeSorter() );
@@ -2362,7 +2362,7 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getIndexInfo(
static const sal_Int32 R_COLUMN_NAME = 8;
Reference< XPreparedStatement > stmt = m_origin->prepareStatement(
- "SELECT nspname, " // 1
+ u"SELECT nspname, " // 1
"pg_class.relname, " // 2
"class2.relname, " // 3
"indisclustered, " // 4
@@ -2372,7 +2372,7 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getIndexInfo(
"FROM pg_index INNER JOIN pg_class ON indrelid = pg_class.oid "
"INNER JOIN pg_namespace ON pg_class.relnamespace = pg_namespace.oid "
"INNER JOIN pg_class as class2 ON pg_index.indexrelid = class2.oid "
- "WHERE nspname = ? AND pg_class.relname = ?" );
+ "WHERE nspname = ? AND pg_class.relname = ?"_ustr );
Reference< XParameters > param ( stmt, UNO_QUERY_THROW );
param->setString( 1, schema );
@@ -2385,11 +2385,11 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getIndexInfo(
{
std::vector< sal_Int32 > columns = parseIntArray( xRow->getString(C_COLUMNS) );
Reference< XPreparedStatement > columnsStmt = m_origin->prepareStatement(
- "SELECT attnum, attname "
+ u"SELECT attnum, attname "
"FROM pg_attribute "
" INNER JOIN pg_class ON attrelid = pg_class.oid "
" INNER JOIN pg_namespace ON pg_class.relnamespace=pg_namespace.oid "
- " WHERE pg_namespace.nspname=? AND pg_class.relname=?" );
+ " WHERE pg_namespace.nspname=? AND pg_class.relname=?"_ustr );
Reference< XParameters > paramColumn ( columnsStmt, UNO_QUERY_THROW );
OUString currentSchema = xRow->getString( C_SCHEMA );
OUString currentTable = xRow->getString( C_TABLENAME );
diff --git a/connectivity/source/drivers/postgresql/pq_databasemetadata.hxx b/connectivity/source/drivers/postgresql/pq_databasemetadata.hxx
index 134f72cf0186..4e8b717a96b2 100644
--- a/connectivity/source/drivers/postgresql/pq_databasemetadata.hxx
+++ b/connectivity/source/drivers/postgresql/pq_databasemetadata.hxx
@@ -74,8 +74,8 @@ class DatabaseMetaData :
public:
DatabaseMetaData(
- const ::rtl::Reference< comphelper::RefCountedMutex > & reMutex,
- const css::uno::Reference< css::sdbc::XConnection > & origin,
+ ::rtl::Reference< comphelper::RefCountedMutex > reMutex,
+ css::uno::Reference< css::sdbc::XConnection > origin,
ConnectionSettings *pSettings
);
diff --git a/connectivity/source/drivers/postgresql/pq_driver.cxx b/connectivity/source/drivers/postgresql/pq_driver.cxx
index 09fe61ab2824..a1025017d8c7 100644
--- a/connectivity/source/drivers/postgresql/pq_driver.cxx
+++ b/connectivity/source/drivers/postgresql/pq_driver.cxx
@@ -40,12 +40,6 @@
#include "pq_driver.hxx"
-using osl::MutexGuard;
-
-using com::sun::star::lang::XSingleComponentFactory;
-using com::sun::star::lang::XServiceInfo;
-using com::sun::star::lang::XComponent;
-
using com::sun::star::uno::Sequence;
using com::sun::star::uno::Reference;
using com::sun::star::uno::XInterface;
@@ -73,7 +67,7 @@ Reference< XConnection > Driver::connect(
Sequence< Any > seq{ Any(url), Any(info) };
return Reference< XConnection> (
m_smgr->createInstanceWithArgumentsAndContext(
- "org.openoffice.comp.connectivity.pq.Connection.noext",
+ u"org.openoffice.comp.connectivity.pq.Connection.noext"_ustr,
seq, m_ctx ),
UNO_QUERY );
}
@@ -103,7 +97,7 @@ sal_Int32 Driver::getMinorVersion( )
// XServiceInfo
OUString SAL_CALL Driver::getImplementationName()
{
- return "org.openoffice.comp.connectivity.pq.Driver.noext";
+ return u"org.openoffice.comp.connectivity.pq.Driver.noext"_ustr;
}
sal_Bool Driver::supportsService(const OUString& ServiceName)
@@ -113,7 +107,7 @@ sal_Bool Driver::supportsService(const OUString& ServiceName)
Sequence< OUString > Driver::getSupportedServiceNames()
{
- return { "com.sun.star.sdbc.Driver" };
+ return { u"com.sun.star.sdbc.Driver"_ustr };
}
// XComponent
diff --git a/connectivity/source/drivers/postgresql/pq_driver.hxx b/connectivity/source/drivers/postgresql/pq_driver.hxx
index 6be6a39484f3..31d407f36965 100644
--- a/connectivity/source/drivers/postgresql/pq_driver.hxx
+++ b/connectivity/source/drivers/postgresql/pq_driver.hxx
@@ -36,9 +36,9 @@
#pragma once
-#include <osl/mutex.hxx>
#include <sal/macros.h>
#include <cppuhelper/compbase.hxx>
+#include <cppuhelper/basemutex.hxx>
#include <com/sun/star/lang/XServiceInfo.hpp>
@@ -54,7 +54,6 @@ namespace pq_sdbc_driver
SAL_STRINGIFY(PQ_SDBC_MINOR) "." \
SAL_STRINGIFY(PQ_SDBC_MICRO)
-struct MutexHolder { osl::Mutex m_mutex; };
// use this to switch off sdbc support !
// typedef cppu::WeakComponentImplHelper<
// css::sdbc::XDriver,
@@ -64,14 +63,14 @@ typedef cppu::WeakComponentImplHelper<
css::sdbc::XDriver,
css::lang::XServiceInfo,
css::sdbcx::XDataDefinitionSupplier > DriverBase ;
-class Driver : public MutexHolder, public DriverBase
+class Driver : public cppu::BaseMutex, public DriverBase
{
css::uno::Reference< css::uno::XComponentContext > m_ctx;
css::uno::Reference< css::lang::XMultiComponentFactory > m_smgr;
public:
explicit Driver ( const css::uno::Reference < css::uno::XComponentContext > & ctx )
- : DriverBase( m_mutex ),
+ : DriverBase( m_aMutex ),
m_ctx( ctx ),
m_smgr( ctx->getServiceManager() )
{}
diff --git a/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.cxx b/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.cxx
index a75897ccb211..216a25220355 100644
--- a/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.cxx
+++ b/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.cxx
@@ -38,6 +38,7 @@
#include <com/sun/star/sdbc/SQLException.hpp>
#include <cppuhelper/typeprovider.hxx>
#include <cppuhelper/queryinterface.hxx>
+#include <utility>
using com::sun::star::uno::Sequence;
@@ -58,9 +59,9 @@ FakedUpdateableResultSet::FakedUpdateableResultSet(
PGresult *result,
const OUString &schema,
const OUString &table,
- const OUString &aReason )
+ OUString aReason )
: ResultSet( mutex, owner, pSettings, result, schema, table ),
- m_aReason( aReason )
+ m_aReason(std::move( aReason ))
{}
diff --git a/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.hxx b/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.hxx
index c2907aeb0290..44e7dc9bcf13 100644
--- a/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.hxx
+++ b/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.hxx
@@ -61,7 +61,7 @@ public:
PGresult *result,
const OUString &schema,
const OUString &table,
- const OUString &aReason );
+ OUString aReason );
public: // XInterface
virtual void SAL_CALL acquire() noexcept override { ResultSet::acquire(); }
diff --git a/connectivity/source/drivers/postgresql/pq_preparedstatement.cxx b/connectivity/source/drivers/postgresql/pq_preparedstatement.cxx
index 344c27175850..0daacfbdc33f 100644
--- a/connectivity/source/drivers/postgresql/pq_preparedstatement.cxx
+++ b/connectivity/source/drivers/postgresql/pq_preparedstatement.cxx
@@ -40,7 +40,7 @@
#include "pq_statics.hxx"
#include "pq_statement.hxx"
-#include <o3tl/deleter.hxx>
+#include <o3tl/safeint.hxx>
#include <rtl/strbuf.hxx>
#include <rtl/ustrbuf.hxx>
@@ -57,6 +57,7 @@
#include <string_view>
#include <connectivity/dbconversion.hxx>
+#include <utility>
using osl::MutexGuard;
@@ -90,31 +91,31 @@ static ::cppu::IPropertyArrayHelper & getPreparedStatementPropertyArrayHelper()
static ::cppu::OPropertyArrayHelper arrayHelper(
Sequence<Property>{
Property(
- "CursorName", 0,
+ u"CursorName"_ustr, 0,
::cppu::UnoType<OUString>::get() , 0 ),
Property(
- "EscapeProcessing", 1,
+ u"EscapeProcessing"_ustr, 1,
cppu::UnoType<bool>::get() , 0 ),
Property(
- "FetchDirection", 2,
+ u"FetchDirection"_ustr, 2,
::cppu::UnoType<sal_Int32>::get() , 0 ),
Property(
- "FetchSize", 3,
+ u"FetchSize"_ustr, 3,
::cppu::UnoType<sal_Int32>::get() , 0 ),
Property(
- "MaxFieldSize", 4,
+ u"MaxFieldSize"_ustr, 4,
::cppu::UnoType<sal_Int32>::get() , 0 ),
Property(
- "MaxRows", 5,
+ u"MaxRows"_ustr, 5,
::cppu::UnoType<sal_Int32>::get() , 0 ),
Property(
- "QueryTimeOut", 6,
+ u"QueryTimeOut"_ustr, 6,
::cppu::UnoType<sal_Int32>::get() , 0 ),
Property(
- "ResultSetConcurrency", 7,
+ u"ResultSetConcurrency"_ustr, 7,
::cppu::UnoType<sal_Int32>::get() , 0 ),
Property(
- "ResultSetType", 8,
+ u"ResultSetType"_ustr, 8,
::cppu::UnoType<sal_Int32>::get() , 0 )},
true );
static ::cppu::IPropertyArrayHelper *pArrayHelper = &arrayHelper;
@@ -149,12 +150,12 @@ PreparedStatement::PreparedStatement(
const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const Reference< XConnection > & conn,
struct ConnectionSettings *pSettings,
- const OString & stmt )
+ OString stmt )
: PreparedStatement_BASE(refMutex->GetMutex())
, OPropertySetHelper(PreparedStatement_BASE::rBHelper)
, m_connection(conn)
, m_pSettings(pSettings)
- , m_stmt(stmt)
+ , m_stmt(std::move(stmt))
, m_xMutex(refMutex)
, m_multipleResultAvailable(false)
, m_multipleResultUpdateCount(0)
@@ -198,7 +199,7 @@ PreparedStatement::~PreparedStatement()
void PreparedStatement::checkColumnIndex( sal_Int32 parameterIndex )
{
- if( parameterIndex < 1 || parameterIndex > static_cast<sal_Int32>(m_vars.size()) )
+ if( parameterIndex < 1 || o3tl::make_unsigned(parameterIndex) > m_vars.size() )
{
throw SQLException(
"pq_preparedstatement: parameter index out of range (expected 1 to "
@@ -213,7 +214,7 @@ void PreparedStatement::checkClosed()
{
if( ! m_pSettings || ! m_pSettings->pConnection )
throw SQLException(
- "pq_driver: PreparedStatement or connection has already been closed !",
+ u"pq_driver: PreparedStatement or connection has already been closed !"_ustr,
*this, OUString(),1,Any());
}
@@ -262,10 +263,9 @@ void PreparedStatement::close( )
void PreparedStatement::raiseSQLException( const char * errorMsg )
{
OUStringBuffer buf(128);
- buf.append( "pq_driver: ");
- buf.append(
- OUString( errorMsg, strlen(errorMsg) , ConnectionSettings::encoding ) );
- buf.append( " (caused by statement '" );
+ buf.append( "pq_driver: "
+ + OUString( errorMsg, strlen(errorMsg) , ConnectionSettings::encoding )
+ + " (caused by statement '" );
buf.appendAscii( m_executedStatement.getStr() );
buf.append( "')" );
OUString error = buf.makeStringAndClear();
@@ -390,7 +390,7 @@ void PreparedStatement::setNull( sal_Int32 parameterIndex, sal_Int32 )
MutexGuard guard( m_xMutex->GetMutex() );
checkClosed();
checkColumnIndex( parameterIndex );
- m_vars[parameterIndex-1] = OString( "NULL" );
+ m_vars[parameterIndex-1] = "NULL"_ostr;
}
void PreparedStatement::setObjectNull(
@@ -399,7 +399,7 @@ void PreparedStatement::setObjectNull(
MutexGuard guard( m_xMutex->GetMutex() );
checkClosed();
checkColumnIndex( parameterIndex );
- m_vars[parameterIndex-1] = OString( "NULL" );
+ m_vars[parameterIndex-1] = "NULL"_ostr;
}
@@ -409,9 +409,9 @@ void PreparedStatement::setBoolean( sal_Int32 parameterIndex, sal_Bool x )
checkClosed();
checkColumnIndex( parameterIndex );
if( x )
- m_vars[parameterIndex-1] = OString( "'t'" );
+ m_vars[parameterIndex-1] = "'t'"_ostr;
else
- m_vars[parameterIndex-1] = OString( "'f'" );
+ m_vars[parameterIndex-1] = "'f'"_ostr;
}
void PreparedStatement::setByte( sal_Int32 parameterIndex, sal_Int8 x )
@@ -486,7 +486,7 @@ void PreparedStatement::setBytes(
if( ! escapedString )
{
throw SQLException(
- "pq_preparedstatement.setBytes: Error during converting bytesequence to an SQL conform string",
+ u"pq_preparedstatement.setBytes: Error during converting bytesequence to an SQL conform string"_ustr,
*this, OUString(), 1, Any() );
}
m_vars[parameterIndex-1]
@@ -516,7 +516,7 @@ void PreparedStatement::setBinaryStream(
sal_Int32 )
{
throw SQLException(
- "pq_preparedstatement: setBinaryStream not implemented",
+ u"pq_preparedstatement: setBinaryStream not implemented"_ustr,
*this, OUString(), 1, Any () );
}
@@ -526,7 +526,7 @@ void PreparedStatement::setCharacterStream(
sal_Int32 )
{
throw SQLException(
- "pq_preparedstatement: setCharacterStream not implemented",
+ u"pq_preparedstatement: setCharacterStream not implemented"_ustr,
*this, OUString(), 1, Any () );
}
@@ -581,7 +581,7 @@ void PreparedStatement::setRef(
const Reference< XRef >& )
{
throw SQLException(
- "pq_preparedstatement: setRef not implemented",
+ u"pq_preparedstatement: setRef not implemented"_ustr,
*this, OUString(), 1, Any () );
}
@@ -590,7 +590,7 @@ void PreparedStatement::setBlob(
const Reference< XBlob >& )
{
throw SQLException(
- "pq_preparedstatement: setBlob not implemented",
+ u"pq_preparedstatement: setBlob not implemented"_ustr,
*this, OUString(), 1, Any () );
}
@@ -599,7 +599,7 @@ void PreparedStatement::setClob(
const Reference< XClob >& )
{
throw SQLException(
- "pq_preparedstatement: setClob not implemented",
+ u"pq_preparedstatement: setClob not implemented"_ustr,
*this, OUString(), 1, Any () );
}
diff --git a/connectivity/source/drivers/postgresql/pq_preparedstatement.hxx b/connectivity/source/drivers/postgresql/pq_preparedstatement.hxx
index 4755efbe0368..ed81420cec7d 100644
--- a/connectivity/source/drivers/postgresql/pq_preparedstatement.hxx
+++ b/connectivity/source/drivers/postgresql/pq_preparedstatement.hxx
@@ -98,7 +98,7 @@ public:
PreparedStatement( const rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const css::uno::Reference< css::sdbc::XConnection> & con,
struct ConnectionSettings *pSettings,
- const OString &stmt );
+ OString stmt );
virtual ~PreparedStatement() override;
public: // XInterface
diff --git a/connectivity/source/drivers/postgresql/pq_resultset.cxx b/connectivity/source/drivers/postgresql/pq_resultset.cxx
index 556bae92d5be..62b33fa10ba9 100644
--- a/connectivity/source/drivers/postgresql/pq_resultset.cxx
+++ b/connectivity/source/drivers/postgresql/pq_resultset.cxx
@@ -44,6 +44,7 @@
#include <com/sun/star/sdbc/ResultSetType.hpp>
#include <com/sun/star/sdbc/DataType.hpp>
#include <com/sun/star/sdbc/SQLException.hpp>
+#include <utility>
using osl::MutexGuard;
@@ -63,13 +64,13 @@ void ResultSet::checkClosed()
{
if( ! m_result )
{
- throw SQLException( "pq_resultset: already closed",
+ throw SQLException( u"pq_resultset: already closed"_ustr,
*this, OUString(), 1, Any() );
}
if( ! m_ppSettings || ! *m_ppSettings || ! (*m_ppSettings)->pConnection )
{
- throw SQLException( "pq_resultset: statement has been closed already",
+ throw SQLException( u"pq_resultset: statement has been closed already"_ustr,
*this, OUString(), 1, Any() );
}
@@ -79,14 +80,14 @@ ResultSet::ResultSet( const ::rtl::Reference< comphelper::RefCountedMutex > & re
const Reference< XInterface > & owner,
ConnectionSettings **ppSettings,
PGresult * result,
- const OUString &schema,
- const OUString &table)
+ OUString schema,
+ OUString table)
: BaseResultSet(
refMutex, owner, PQntuples( result ),
PQnfields( result ),(*ppSettings)->tc ),
m_result( result ),
- m_schema( schema ),
- m_table( table ),
+ m_schema(std::move( schema )),
+ m_table(std::move( table )),
m_ppSettings( ppSettings )
{
// LEM TODO: shouldn't these things be inherited from the statement or something like that?
@@ -164,7 +165,6 @@ sal_Int32 ResultSet::findColumn( const OUString& columnName )
else
{
::dbtools::throwInvalidColumnException( columnName, *this );
- assert(false);
}
return res;
}
diff --git a/connectivity/source/drivers/postgresql/pq_resultset.hxx b/connectivity/source/drivers/postgresql/pq_resultset.hxx
index 340e34b70c3b..cf2888bf5b93 100644
--- a/connectivity/source/drivers/postgresql/pq_resultset.hxx
+++ b/connectivity/source/drivers/postgresql/pq_resultset.hxx
@@ -72,8 +72,8 @@ public:
const css::uno::Reference< css::uno::XInterface > &owner,
ConnectionSettings **pSettings,
PGresult *result,
- const OUString &schema,
- const OUString &table );
+ OUString schema,
+ OUString table );
virtual ~ResultSet() override;
public: // XCloseable
diff --git a/connectivity/source/drivers/postgresql/pq_resultsetmetadata.cxx b/connectivity/source/drivers/postgresql/pq_resultsetmetadata.cxx
index fbe10f82dacb..26b11de27985 100644
--- a/connectivity/source/drivers/postgresql/pq_resultsetmetadata.cxx
+++ b/connectivity/source/drivers/postgresql/pq_resultsetmetadata.cxx
@@ -46,6 +46,7 @@
#include <com/sun/star/sdbc/DataType.hpp>
#include <com/sun/star/sdbc/SQLException.hpp>
#include <com/sun/star/sdbc/XRow.hpp>
+#include <utility>
#include <string.h>
@@ -113,18 +114,18 @@ static void extractPrecisionAndScale( sal_Int32 atttypmod, sal_Int32 *precision,
}
ResultSetMetaData::ResultSetMetaData(
- const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
- const css::uno::Reference< css::sdbc::XResultSet > & origin,
+ ::rtl::Reference< comphelper::RefCountedMutex > refMutex,
+ css::uno::Reference< css::sdbc::XResultSet > origin,
ResultSet * pResultSet,
ConnectionSettings **ppSettings,
PGresult const *pResult,
- const OUString &schemaName,
- const OUString &tableName ) :
- m_xMutex( refMutex ),
+ OUString schemaName,
+ OUString tableName ) :
+ m_xMutex(std::move( refMutex )),
m_ppSettings( ppSettings ),
- m_origin( origin ),
- m_tableName( tableName ),
- m_schemaName( schemaName ),
+ m_origin(std::move( origin )),
+ m_tableName(std::move( tableName )),
+ m_schemaName(std::move( schemaName )),
m_colDesc( PQnfields( pResult ) ),
m_pResultSet( pResultSet ),
m_checkedForTable( false ),
@@ -166,8 +167,7 @@ void ResultSetMetaData::checkForTypes()
if( i > 0 )
buf.append( " OR " );
int oid = m_colDesc[i].typeOid;
- buf.append( "oid=" );
- buf.append( static_cast<sal_Int32>(oid) );
+ buf.append( "oid=" + OUString::number(static_cast<sal_Int32>(oid)) );
}
Reference< XResultSet > rs = stmt->executeQuery( buf.makeStringAndClear() );
Reference< XRow > xRow( rs, UNO_QUERY );
diff --git a/connectivity/source/drivers/postgresql/pq_resultsetmetadata.hxx b/connectivity/source/drivers/postgresql/pq_resultsetmetadata.hxx
index 67e34d44d257..71c98190ba2b 100644
--- a/connectivity/source/drivers/postgresql/pq_resultsetmetadata.hxx
+++ b/connectivity/source/drivers/postgresql/pq_resultsetmetadata.hxx
@@ -89,13 +89,13 @@ class ResultSetMetaData :
public:
ResultSetMetaData(
- const ::rtl::Reference< comphelper::RefCountedMutex > & reMutex,
- const css::uno::Reference< css::sdbc::XResultSet > & origin,
+ ::rtl::Reference< comphelper::RefCountedMutex > reMutex,
+ css::uno::Reference< css::sdbc::XResultSet > origin,
ResultSet *pResultSet,
ConnectionSettings **pSettings,
PGresult const *pResult,
- const OUString &schemaName,
- const OUString &tableName );
+ OUString schemaName,
+ OUString tableName );
public:
// Methods
diff --git a/connectivity/source/drivers/postgresql/pq_sequenceresultset.cxx b/connectivity/source/drivers/postgresql/pq_sequenceresultset.cxx
index defb99906048..84db1fa63389 100644
--- a/connectivity/source/drivers/postgresql/pq_sequenceresultset.cxx
+++ b/connectivity/source/drivers/postgresql/pq_sequenceresultset.cxx
@@ -95,11 +95,11 @@ Reference< XResultSetMetaData > SAL_CALL SequenceResultSet::getMetaData( )
{
// Oh no, not again
throw css::sdbc::SQLException(
- "pq_sequenceresultset: no meta supported ", *this,
+ u"pq_sequenceresultset: no meta supported "_ustr, *this,
// I did not find "IM001" in a specific standard,
// but it seems to be used by other systems (such as ODBC)
// and some parts of LibreOffice special-case it.
- "IM001", 1, Any() );
+ u"IM001"_ustr, 1, Any() );
}
return m_meta;
}
@@ -117,8 +117,6 @@ sal_Int32 SAL_CALL SequenceResultSet::findColumn(
}
}
::dbtools::throwInvalidColumnException( columnName, *this );
- assert(false);
- return 0; // Never reached
}
}
diff --git a/connectivity/source/drivers/postgresql/pq_statement.cxx b/connectivity/source/drivers/postgresql/pq_statement.cxx
index 7db4b20536e2..5867d5cdbf33 100644
--- a/connectivity/source/drivers/postgresql/pq_statement.cxx
+++ b/connectivity/source/drivers/postgresql/pq_statement.cxx
@@ -59,6 +59,7 @@
#include <com/sun/star/container/XIndexAccess.hpp>
#include <com/sun/star/container/XEnumerationAccess.hpp>
+#include <cstddef>
#include <string.h>
#include <string_view>
@@ -102,31 +103,31 @@ static ::cppu::IPropertyArrayHelper & getStatementPropertyArrayHelper()
static ::cppu::OPropertyArrayHelper arrayHelper(
Sequence<Property>{
Property(
- "CursorName", 0,
+ u"CursorName"_ustr, 0,
::cppu::UnoType<OUString>::get() , 0 ),
Property(
- "EscapeProcessing", 1,
+ u"EscapeProcessing"_ustr, 1,
cppu::UnoType<bool>::get() , 0 ),
Property(
- "FetchDirection", 2,
+ u"FetchDirection"_ustr, 2,
::cppu::UnoType<sal_Int32>::get() , 0 ),
Property(
- "FetchSize", 3,
+ u"FetchSize"_ustr, 3,
::cppu::UnoType<sal_Int32>::get() , 0 ),
Property(
- "MaxFieldSize", 4,
+ u"MaxFieldSize"_ustr, 4,
::cppu::UnoType<sal_Int32>::get() , 0 ),
Property(
- "MaxRows", 5,
+ u"MaxRows"_ustr, 5,
::cppu::UnoType<sal_Int32>::get() , 0 ),
Property(
- "QueryTimeOut", 6,
+ u"QueryTimeOut"_ustr, 6,
::cppu::UnoType<sal_Int32>::get() , 0 ),
Property(
- "ResultSetConcurrency", 7,
+ u"ResultSetConcurrency"_ustr, 7,
::cppu::UnoType<sal_Int32>::get() , 0 ),
Property(
- "ResultSetType", 8,
+ u"ResultSetType"_ustr, 8,
::cppu::UnoType<sal_Int32>::get() , 0 )},
true );
@@ -161,7 +162,7 @@ void Statement::checkClosed()
{
if( ! m_pSettings || ! m_pSettings->pConnection )
throw SQLException(
- "pq_driver: Statement or connection has already been closed !",
+ u"pq_driver: Statement or connection has already been closed !"_ustr,
*this, OUString(),1,Any());
}
@@ -252,10 +253,10 @@ static void raiseSQLException(
buf.append( "]" );
}
buf.append(
- OUString( errorMsg, strlen(errorMsg) , ConnectionSettings::encoding ) );
- buf.append( " (caused by statement '" );
- buf.append( OStringToOUString( sql, ConnectionSettings::encoding ) );
- buf.append( "')" );
+ OUString( errorMsg, strlen(errorMsg) , ConnectionSettings::encoding )
+ + " (caused by statement '"
+ + OStringToOUString( sql, ConnectionSettings::encoding )
+ + "')" );
OUString error = buf.makeStringAndClear();
SAL_WARN("connectivity.postgresql", error);
throw SQLException( error, owner, OUString(), 1, Any() );
@@ -429,8 +430,8 @@ bool executePostgresCommand( const OString & cmd, struct CommandData *data )
&table);
// check, whether the columns are in the result set (required !)
- int i;
- for( i = 0 ; i < static_cast<int>(sourceTableKeys.size()) ; i ++ )
+ std::size_t i;
+ for( i = 0 ; i < sourceTableKeys.size() ; i ++ )
{
if( -1 == PQfnumber(
result,
@@ -441,7 +442,7 @@ bool executePostgresCommand( const OString & cmd, struct CommandData *data )
}
}
- if( !sourceTableKeys.empty() && i == static_cast<int>(sourceTableKeys.size()) )
+ if( !sourceTableKeys.empty() && i == sourceTableKeys.size() )
{
*(data->pLastResultset) =
UpdateableResultSet::createFromPGResultSet(
@@ -530,12 +531,12 @@ static Sequence< OUString > getPrimaryKeyColumnNames(
// retrieve the primary key ...
Reference< XPreparedStatement > stmt = connection->prepareStatement(
- "SELECT conkey " // 7
+ u"SELECT conkey " // 7
"FROM pg_constraint INNER JOIN pg_class ON conrelid = pg_class.oid "
"INNER JOIN pg_namespace ON pg_class.relnamespace = pg_namespace.oid "
"LEFT JOIN pg_class AS class2 ON confrelid = class2.oid "
"LEFT JOIN pg_namespace AS nmsp2 ON class2.relnamespace=nmsp2.oid "
- "WHERE pg_class.relname = ? AND pg_namespace.nspname = ? AND pg_constraint.contype='p'" );
+ "WHERE pg_class.relname = ? AND pg_namespace.nspname = ? AND pg_constraint.contype='p'"_ustr );
DisposeGuard guard( stmt );
Reference< XParameters > paras( stmt, UNO_QUERY );
paras->setString( 1 , tableName );
@@ -589,7 +590,7 @@ Reference< XResultSet > getGeneratedValuesFromLastInsert(
ConnectionSettings *pConnectionSettings,
const Reference< XConnection > &connection,
sal_Int32 nLastOid,
- const OUString & lastTableInserted,
+ std::u16string_view lastTableInserted,
const OString & lastQuery )
{
Reference< XResultSet > ret;
@@ -598,7 +599,7 @@ Reference< XResultSet > getGeneratedValuesFromLastInsert(
splitConcatenatedIdentifier(
lastTableInserted, &schemaName, &tableName );
- if( nLastOid && lastTableInserted.getLength() )
+ if( nLastOid && lastTableInserted.size() )
{
OUStringBuffer buf( 128 );
buf.append( "SELECT * FROM " );
@@ -606,11 +607,10 @@ Reference< XResultSet > getGeneratedValuesFromLastInsert(
bufferQuoteQualifiedIdentifier(buf, schemaName, tableName, pConnectionSettings );
else
bufferQuoteIdentifier( buf, lastTableInserted, pConnectionSettings );
- buf.append( " WHERE oid = " );
- buf.append( nLastOid );
+ buf.append( " WHERE oid = " + OUString::number(nLastOid) );
query = buf.makeStringAndClear();
}
- else if ( lastTableInserted.getLength() && lastQuery.getLength() )
+ else if ( lastTableInserted.size() && lastQuery.getLength() )
{
// extract nameValue Pairs
String2StringMap namedValues;
@@ -699,8 +699,7 @@ Reference< XResultSet > getGeneratedValuesFromLastInsert(
if( bAdditionalCondition )
buf.append( " AND " );
bufferQuoteIdentifier( buf, columnNameUnicode, pConnectionSettings );
- buf.append( " = " );
- buf.append( value );
+ buf.append( " = " + value );
bAdditionalCondition = true;
}
query = buf.makeStringAndClear();
diff --git a/connectivity/source/drivers/postgresql/pq_statement.hxx b/connectivity/source/drivers/postgresql/pq_statement.hxx
index fae6568bb505..816d2a55afaa 100644
--- a/connectivity/source/drivers/postgresql/pq_statement.hxx
+++ b/connectivity/source/drivers/postgresql/pq_statement.hxx
@@ -189,7 +189,7 @@ css::uno::Reference< css::sdbc::XResultSet > getGeneratedValuesFromLastInsert(
ConnectionSettings *pConnectionSettings,
const css::uno::Reference< css::sdbc::XConnection > &connection,
sal_Int32 nLastOid,
- const OUString & lastTableInserted,
+ std::u16string_view lastTableInserted,
const OString & lastQuery );
diff --git a/connectivity/source/drivers/postgresql/pq_statics.cxx b/connectivity/source/drivers/postgresql/pq_statics.cxx
index 7169f4617821..937e8df26686 100644
--- a/connectivity/source/drivers/postgresql/pq_statics.cxx
+++ b/connectivity/source/drivers/postgresql/pq_statics.cxx
@@ -35,9 +35,9 @@
************************************************************************/
#include "pq_statics.hxx"
-#include "pq_updateableresultset.hxx"
#include <com/sun/star/sdbc/DataType.hpp>
#include <com/sun/star/beans/PropertyAttribute.hpp>
+#include <utility>
using com::sun::star::uno::Sequence;
using com::sun::star::uno::Any;
@@ -69,8 +69,8 @@ struct BaseTypeDef { const char * typeName; sal_Int32 value; };
struct PropertyDef
{
- PropertyDef( const OUString &str, const Type &t )
- : name( str ) , type( t ) {}
+ PropertyDef( OUString str, const Type &t )
+ : name(std::move( str )) , type( t ) {}
OUString name;
css::uno::Type type;
};
@@ -186,7 +186,7 @@ Statics & getStatics()
// Table props set
ImplementationStatics &ist = statics.refl.table;
ist.implName = "org.openoffice.comp.pq.sdbcx.Table";
- ist.serviceNames = { "com.sun.star.sdbcx.Table" };
+ ist.serviceNames = { u"com.sun.star.sdbcx.Table"_ustr };
PropertyDef tableDef[] =
{
PropertyDef( statics.CATALOG_NAME , tString ),
@@ -197,11 +197,11 @@ Statics & getStatics()
PropertyDef( statics.TYPE , tString )
};
ist.pProps = createPropertyArrayHelper(
- tableDef, SAL_N_ELEMENTS(tableDef), READONLY );
+ tableDef, std::size(tableDef), READONLY );
statics.refl.tableDescriptor.implName =
"org.openoffice.comp.pq.sdbcx.TableDescriptor";
- statics.refl.tableDescriptor.serviceNames = { "com.sun.star.sdbcx.TableDescriptor" };
+ statics.refl.tableDescriptor.serviceNames = { u"com.sun.star.sdbcx.TableDescriptor"_ustr };
PropertyDef tableDescDef[] =
{
PropertyDef( statics.CATALOG_NAME , tString ),
@@ -211,11 +211,11 @@ Statics & getStatics()
PropertyDef( statics.SCHEMA_NAME , tString )
};
statics.refl.tableDescriptor.pProps = createPropertyArrayHelper(
- tableDescDef, SAL_N_ELEMENTS(tableDescDef), 0 );
+ tableDescDef, std::size(tableDescDef), 0 );
// Column props set
statics.refl.column.implName = "org.openoffice.comp.pq.sdbcx.Column";
- statics.refl.column.serviceNames = { "com.sun.star.sdbcx.Column" };
+ statics.refl.column.serviceNames = { u"com.sun.star.sdbcx.Column"_ustr };
PropertyDefEx columnDef[] =
{
PropertyDefEx( statics.CATALOG_NAME , tString, READONLY ),
@@ -233,11 +233,11 @@ Statics & getStatics()
PropertyDefEx( statics.TYPE_NAME , tString ,READONLY)
};
statics.refl.column.pProps = createPropertyArrayHelper(
- columnDef, SAL_N_ELEMENTS(columnDef) );
+ columnDef, std::size(columnDef) );
statics.refl.columnDescriptor.implName =
"org.openoffice.comp.pq.sdbcx.ColumnDescriptor";
- statics.refl.columnDescriptor.serviceNames = { "com.sun.star.sdbcx.ColumnDescriptor" };
+ statics.refl.columnDescriptor.serviceNames = { u"com.sun.star.sdbcx.ColumnDescriptor"_ustr };
PropertyDef columnDescDef[] =
{
PropertyDef( statics.CATALOG_NAME , tString ),
@@ -256,11 +256,11 @@ Statics & getStatics()
};
statics.refl.columnDescriptor.pProps = createPropertyArrayHelper(
- columnDescDef, SAL_N_ELEMENTS(columnDescDef), 0 );
+ columnDescDef, std::size(columnDescDef), 0 );
// Key properties
statics.refl.key.implName = "org.openoffice.comp.pq.sdbcx.Key";
- statics.refl.key.serviceNames = { "com.sun.star.sdbcx.Key" };
+ statics.refl.key.serviceNames = { u"com.sun.star.sdbcx.Key"_ustr };
PropertyDef keyDef[] =
{
PropertyDef( statics.DELETE_RULE, tInt ),
@@ -272,13 +272,13 @@ Statics & getStatics()
PropertyDef( statics.UPDATE_RULE, tInt )
};
statics.refl.key.pProps = createPropertyArrayHelper(
- keyDef, SAL_N_ELEMENTS(keyDef), READONLY );
+ keyDef, std::size(keyDef), READONLY );
// Key properties
statics.refl.keyDescriptor.implName =
"org.openoffice.comp.pq.sdbcx.KeyDescriptor";
- statics.refl.keyDescriptor.serviceNames = { "com.sun.star.sdbcx.KeyDescriptor" };
+ statics.refl.keyDescriptor.serviceNames = { u"com.sun.star.sdbcx.KeyDescriptor"_ustr };
PropertyDef keyDescDef[] =
{
PropertyDef( statics.DELETE_RULE, tInt ),
@@ -288,12 +288,12 @@ Statics & getStatics()
PropertyDef( statics.UPDATE_RULE, tInt )
};
statics.refl.keyDescriptor.pProps = createPropertyArrayHelper(
- keyDescDef, SAL_N_ELEMENTS(keyDescDef), 0 );
+ keyDescDef, std::size(keyDescDef), 0 );
// KeyColumn props set
statics.refl.keycolumn.implName = "org.openoffice.comp.pq.sdbcx.KeyColumn";
- statics.refl.keycolumn.serviceNames = { "com.sun.star.sdbcx.KeyColumn" };
+ statics.refl.keycolumn.serviceNames = { u"com.sun.star.sdbcx.KeyColumn"_ustr };
PropertyDef keycolumnDef[] =
{
PropertyDef( statics.CATALOG_NAME , tString ),
@@ -311,24 +311,24 @@ Statics & getStatics()
PropertyDef( statics.TYPE_NAME , tString )
};
statics.refl.keycolumn.pProps = createPropertyArrayHelper(
- keycolumnDef, SAL_N_ELEMENTS(keycolumnDef), READONLY );
+ keycolumnDef, std::size(keycolumnDef), READONLY );
// KeyColumn props set
statics.refl.keycolumnDescriptor.implName =
"org.openoffice.comp.pq.sdbcx.KeyColumnDescriptor";
statics.refl.keycolumnDescriptor.serviceNames =
- { "com.sun.star.sdbcx.KeyColumnDescriptor" };
+ { u"com.sun.star.sdbcx.KeyColumnDescriptor"_ustr };
PropertyDef keycolumnDescDef[] =
{
PropertyDef( statics.NAME , tString ),
PropertyDef( statics.RELATED_COLUMN, tString )
};
statics.refl.keycolumnDescriptor.pProps = createPropertyArrayHelper(
- keycolumnDescDef, SAL_N_ELEMENTS(keycolumnDescDef), 0 );
+ keycolumnDescDef, std::size(keycolumnDescDef), 0 );
// view props set
statics.refl.view.implName = "org.openoffice.comp.pq.sdbcx.View";
- statics.refl.view.serviceNames = { "com.sun.star.sdbcx.View" };
+ statics.refl.view.serviceNames = { u"com.sun.star.sdbcx.View"_ustr };
PropertyDef viewDef[] =
{
PropertyDef( statics.CATALOG_NAME , tString ),
@@ -338,38 +338,38 @@ Statics & getStatics()
PropertyDef( statics.SCHEMA_NAME , tString )
};
statics.refl.view.pProps = createPropertyArrayHelper(
- viewDef, SAL_N_ELEMENTS(viewDef), READONLY );
+ viewDef, std::size(viewDef), READONLY );
// view props set
statics.refl.viewDescriptor.implName = "org.openoffice.comp.pq.sdbcx.ViewDescriptor";
- statics.refl.viewDescriptor.serviceNames = { "com.sun.star.sdbcx.ViewDescriptor" };
+ statics.refl.viewDescriptor.serviceNames = { u"com.sun.star.sdbcx.ViewDescriptor"_ustr };
statics.refl.viewDescriptor.pProps = createPropertyArrayHelper(
- viewDef, SAL_N_ELEMENTS(viewDef), 0 ); // reuse view, as it is identical
+ viewDef, std::size(viewDef), 0 ); // reuse view, as it is identical
// user props set
statics.refl.user.implName = "org.openoffice.comp.pq.sdbcx.User";
- statics.refl.user.serviceNames = { "com.sun.star.sdbcx.User" };
+ statics.refl.user.serviceNames = { u"com.sun.star.sdbcx.User"_ustr };
PropertyDef userDefRO[] =
{
PropertyDef( statics.NAME , tString )
};
statics.refl.user.pProps = createPropertyArrayHelper(
- userDefRO, SAL_N_ELEMENTS(userDefRO), READONLY );
+ userDefRO, std::size(userDefRO), READONLY );
// user props set
statics.refl.userDescriptor.implName =
"org.openoffice.comp.pq.sdbcx.UserDescriptor";
- statics.refl.userDescriptor.serviceNames = { "com.sun.star.sdbcx.UserDescriptor" };
+ statics.refl.userDescriptor.serviceNames = { u"com.sun.star.sdbcx.UserDescriptor"_ustr };
PropertyDef userDefWR[] =
{
PropertyDef( statics.NAME , tString ),
PropertyDef( statics.PASSWORD , tString )
};
statics.refl.userDescriptor.pProps = createPropertyArrayHelper(
- userDefWR, SAL_N_ELEMENTS(userDefWR), 0 );
+ userDefWR, std::size(userDefWR), 0 );
// index props set
statics.refl.index.implName = "org.openoffice.comp.pq.sdbcx.Index";
- statics.refl.index.serviceNames = { "com.sun.star.sdbcx.Index" };
+ statics.refl.index.serviceNames = { u"com.sun.star.sdbcx.Index"_ustr };
PropertyDef indexDef[] =
{
PropertyDef( statics.CATALOG , tString ),
@@ -380,18 +380,18 @@ Statics & getStatics()
PropertyDef( statics.PRIVATE_COLUMN_INDEXES, tStringSequence )
};
statics.refl.index.pProps = createPropertyArrayHelper(
- indexDef, SAL_N_ELEMENTS(indexDef), READONLY );
+ indexDef, std::size(indexDef), READONLY );
// index props set
statics.refl.indexDescriptor.implName =
"org.openoffice.comp.pq.sdbcx.IndexDescriptor";
- statics.refl.indexDescriptor.serviceNames = { "com.sun.star.sdbcx.IndexDescriptor" };
+ statics.refl.indexDescriptor.serviceNames = { u"com.sun.star.sdbcx.IndexDescriptor"_ustr };
statics.refl.indexDescriptor.pProps = createPropertyArrayHelper(
- indexDef, SAL_N_ELEMENTS(indexDef), 0 );
+ indexDef, std::size(indexDef), 0 );
// indexColumn props set
statics.refl.indexColumn.implName = "org.openoffice.comp.pq.sdbcx.IndexColumn";
- statics.refl.indexColumn.serviceNames = { "com.sun.star.sdbcx.IndexColumn" };
+ statics.refl.indexColumn.serviceNames = { u"com.sun.star.sdbcx.IndexColumn"_ustr };
PropertyDef indexColumnDef[] =
{
PropertyDef( statics.CATALOG_NAME , tString ),
@@ -409,44 +409,20 @@ Statics & getStatics()
PropertyDef( statics.TYPE_NAME , tString )
};
statics.refl.indexColumn.pProps = createPropertyArrayHelper(
- indexColumnDef, SAL_N_ELEMENTS(indexColumnDef), READONLY );
+ indexColumnDef, std::size(indexColumnDef), READONLY );
// indexColumn props set
statics.refl.indexColumnDescriptor.implName =
"org.openoffice.comp.pq.sdbcx.IndexColumnDescriptor";
statics.refl.indexColumnDescriptor.serviceNames =
- { "com.sun.star.sdbcx.IndexColumnDescriptor" };
+ { u"com.sun.star.sdbcx.IndexColumnDescriptor"_ustr };
PropertyDef indexColumnDescDef[] =
{
PropertyDef( statics.IS_ASCENDING, tBool ),
PropertyDef( statics.NAME , tString )
};
statics.refl.indexColumnDescriptor.pProps = createPropertyArrayHelper(
- indexColumnDescDef, SAL_N_ELEMENTS(indexColumnDescDef), 0 );
-
- // resultset
- statics.refl.resultSet.implName = "org.openoffice.comp.pq.ResultSet";
- statics.refl.resultSet.serviceNames = { "com.sun.star.sdbc.ResultSet" };
- statics.refl.resultSet.types = UpdateableResultSet::getStaticTypes( false /* updateable */ );
- PropertyDef resultSet[] =
- {
- PropertyDef( statics.CURSOR_NAME , tString ),
- PropertyDef( statics.ESCAPE_PROCESSING , tBool ),
- PropertyDef( statics.FETCH_DIRECTION , tInt ),
- PropertyDef( statics.FETCH_SIZE , tInt ),
- PropertyDef( statics.IS_BOOKMARKABLE , tBool ),
- PropertyDef( statics.RESULT_SET_CONCURRENCY , tInt ),
- PropertyDef( statics.RESULT_SET_TYPE , tInt )
- };
- statics.refl.resultSet.pProps = createPropertyArrayHelper(
- resultSet, SAL_N_ELEMENTS(resultSet), 0 );
-
- // updateableResultset
- statics.refl.updateableResultSet.implName = "org.openoffice.comp.pq.UpdateableResultSet";
- statics.refl.updateableResultSet.serviceNames = { "com.sun.star.sdbc.ResultSet" };
- statics.refl.updateableResultSet.types = UpdateableResultSet::getStaticTypes( true /* updateable */ );
- statics.refl.updateableResultSet.pProps = createPropertyArrayHelper(
- resultSet, SAL_N_ELEMENTS(resultSet), 0 );
+ indexColumnDescDef, std::size(indexColumnDescDef), 0 );
// databasemetadata
statics.tablesRowNames = std::vector< OUString > ( 5 );
@@ -497,32 +473,32 @@ Statics & getStatics()
statics.columnRowNames =
{
- "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "COLUMN_NAME",
- "DATA_TYPE", "TYPE_NAME", "COLUMN_SIZE", "BUFFER_LENGTH",
- "DECIMAL_DIGITS", "NUM_PREC_RADIX", "NULLABLE", "REMARKS",
- "COLUMN_DEF", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "CHAR_OCTET_LENGTH",
- "ORDINAL_POSITION", "IS_NULLABLE"
+ u"TABLE_CAT"_ustr, u"TABLE_SCHEM"_ustr, u"TABLE_NAME"_ustr, u"COLUMN_NAME"_ustr,
+ u"DATA_TYPE"_ustr, u"TYPE_NAME"_ustr, u"COLUMN_SIZE"_ustr, u"BUFFER_LENGTH"_ustr,
+ u"DECIMAL_DIGITS"_ustr, u"NUM_PREC_RADIX"_ustr, u"NULLABLE"_ustr, u"REMARKS"_ustr,
+ u"COLUMN_DEF"_ustr, u"SQL_DATA_TYPE"_ustr, u"SQL_DATETIME_SUB"_ustr, u"CHAR_OCTET_LENGTH"_ustr,
+ u"ORDINAL_POSITION"_ustr, u"IS_NULLABLE"_ustr
};
statics.typeinfoColumnNames =
{
- "TYPE_NAME", "DATA_TYPE", "PRECISION", "LITERAL_PREFIX",
- "LITERAL_SUFFIX", "CREATE_PARAMS", "NULLABLE", "CASE_SENSITIVE",
- "SEARCHABLE", "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE",
- "AUTO_INCREMENT", "LOCAL_TYPE_NAME", "MINIMUM_SCALE",
- "MAXIMUM_SCALE", "SQL_DATA_TYPE", "SQL_DATETIME_SUB",
- "NUM_PREC_RADIX"
+ u"TYPE_NAME"_ustr, u"DATA_TYPE"_ustr, u"PRECISION"_ustr, u"LITERAL_PREFIX"_ustr,
+ u"LITERAL_SUFFIX"_ustr, u"CREATE_PARAMS"_ustr, u"NULLABLE"_ustr, u"CASE_SENSITIVE"_ustr,
+ u"SEARCHABLE"_ustr, u"UNSIGNED_ATTRIBUTE"_ustr, u"FIXED_PREC_SCALE"_ustr,
+ u"AUTO_INCREMENT"_ustr, u"LOCAL_TYPE_NAME"_ustr, u"MINIMUM_SCALE"_ustr,
+ u"MAXIMUM_SCALE"_ustr, u"SQL_DATA_TYPE"_ustr, u"SQL_DATETIME_SUB"_ustr,
+ u"NUM_PREC_RADIX"_ustr
};
statics.indexinfoColumnNames =
{
- "TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME",
- "NON_UNIQUE", "INDEX_QUALIFIER", "INDEX_NAME",
- "TYPE", "ORDINAL_POSITION", "COLUMN_NAME",
- "ASC_OR_DESC", "CARDINALITY", "PAGES", "FILTER_CONDITION"
+ u"TABLE_CAT"_ustr, u"TABLE_SCHEM"_ustr, u"TABLE_NAME"_ustr,
+ u"NON_UNIQUE"_ustr, u"INDEX_QUALIFIER"_ustr, u"INDEX_NAME"_ustr,
+ u"TYPE"_ustr, u"ORDINAL_POSITION"_ustr, u"COLUMN_NAME"_ustr,
+ u"ASC_OR_DESC"_ustr, u"CARDINALITY"_ustr, u"PAGES"_ustr, u"FILTER_CONDITION"_ustr
};
- statics.resultSetArrayColumnNames = { "INDEX" , "VALUE" };
+ statics.resultSetArrayColumnNames = { u"INDEX"_ustr , u"VALUE"_ustr };
// LEM TODO see if a refresh is needed; obtain automatically from pg_catalog.pg_type?
BaseTypeDef baseTypeDefs[] =
diff --git a/connectivity/source/drivers/postgresql/pq_statics.hxx b/connectivity/source/drivers/postgresql/pq_statics.hxx
index 7b776ff84308..4e745e4086ee 100644
--- a/connectivity/source/drivers/postgresql/pq_statics.hxx
+++ b/connectivity/source/drivers/postgresql/pq_statics.hxx
@@ -37,6 +37,7 @@
#pragma once
#include <unordered_map>
+#include <utility>
#include <vector>
#include <com/sun/star/uno/Any.hxx>
@@ -50,20 +51,20 @@ namespace pq_sdbc_driver
struct ColumnMetaData
{
ColumnMetaData(
- const OUString &_columnName,
- const OUString &_tableName,
- const OUString &_schemaTableName,
- const OUString &_typeName,
+ OUString _columnName,
+ OUString _tableName,
+ OUString _schemaTableName,
+ OUString _typeName,
sal_Int32 _type,
sal_Int32 _precision,
sal_Int32 _scale,
bool _isCurrency,
bool _isNullable,
bool _isAutoIncrement ) :
- columnName( _columnName ),
- tableName( _tableName ),
- schemaTableName( _schemaTableName ),
- typeName( _typeName ),
+ columnName(std::move( _columnName )),
+ tableName(std::move( _tableName )),
+ schemaTableName(std::move( _schemaTableName )),
+ typeName(std::move( _typeName )),
type( _type ),
precision( _precision ),
scale( _scale ),
@@ -122,9 +123,6 @@ struct ReflectionImplementations
struct ImplementationStatics indexDescriptor;
struct ImplementationStatics indexColumn;
struct ImplementationStatics indexColumnDescriptor;
-
- struct ImplementationStatics updateableResultSet;
- struct ImplementationStatics resultSet;
};
const sal_Int32 TABLE_INDEX_CATALOG = 0;
diff --git a/connectivity/source/drivers/postgresql/pq_tools.cxx b/connectivity/source/drivers/postgresql/pq_tools.cxx
index 9b75d69ba46c..b6e5d28f938e 100644
--- a/connectivity/source/drivers/postgresql/pq_tools.cxx
+++ b/connectivity/source/drivers/postgresql/pq_tools.cxx
@@ -37,6 +37,7 @@
#include <sal/config.h>
#include <o3tl/any.hxx>
+#include <o3tl/string_view.hxx>
#include <rtl/strbuf.hxx>
#include <rtl/ustrbuf.hxx>
#include <sal/log.hxx>
@@ -79,7 +80,6 @@ using com::sun::star::uno::Reference;
using com::sun::star::uno::Sequence;
using com::sun::star::uno::XInterface;
using com::sun::star::uno::Any;
-using com::sun::star::uno::makeAny;
using com::sun::star::container::XEnumeration;
using com::sun::star::container::XEnumerationAccess;
@@ -118,14 +118,14 @@ void bufferEscapeConstant( OUStringBuffer & buf, std::u16string_view value, Conn
// We have no good XInterface Reference to pass here, so just give NULL
throw SQLException(OUString(errstr, strlen(errstr), ConnectionSettings::encoding),
nullptr,
- "22018",
+ u"22018"_ustr,
-1,
Any());
}
strbuf.setLength( len );
// Previously here RTL_TEXTENCODING_ASCII_US; as we set the PostgreSQL client_encoding to UTF8,
// we get UTF8 here, too. I'm not sure why it worked well before...
- buf.append( OStringToOUString( strbuf.makeStringAndClear(), RTL_TEXTENCODING_UTF8 ) );
+ buf.append( OStringToOUString( strbuf, RTL_TEXTENCODING_UTF8 ) );
}
static void ibufferQuoteConstant( OUStringBuffer & buf, std::u16string_view value, ConnectionSettings *settings )
@@ -154,7 +154,7 @@ void bufferQuoteAnyConstant( OUStringBuffer & buf, const Any &val, ConnectionSet
static void ibufferQuoteIdentifier( OUStringBuffer & buf, std::u16string_view toQuote, ConnectionSettings *settings )
{
- OSL_ENSURE(settings, "pgsql-sdbc: bufferQuoteIdentifier got NULL settings");
+ assert(settings && "pgsql-sdbc: bufferQuoteIdentifier got NULL settings");
OString y = iOUStringToOString( toQuote, settings );
char *cstr = PQescapeIdentifier(settings->pConnection, y.getStr(), y.getLength());
@@ -164,7 +164,7 @@ static void ibufferQuoteIdentifier( OUStringBuffer & buf, std::u16string_view to
// Implementation-defined SQLACCESS error
throw SQLException(OUString(errstr, strlen(errstr), ConnectionSettings::encoding),
nullptr,
- "22018",
+ u"22018"_ustr,
-1,
Any());
}
@@ -259,7 +259,7 @@ Reference< XConnection > extractConnectionFromStatement( const Reference< XInter
ret = myowner->getConnection();
if( ! ret.is() )
throw SQLException(
- "PQSDBC: Couldn't retrieve connection from statement",
+ u"PQSDBC: Couldn't retrieve connection from statement"_ustr,
Reference< XInterface > () , OUString(), 0 , css::uno::Any() );
}
@@ -315,30 +315,30 @@ bool isWhitespace( sal_Unicode c )
return ' ' == c || 9 == c || 10 == c || 13 == c;
}
-OUString extractTableFromInsert( const OUString & sql )
+OUString extractTableFromInsert( std::u16string_view sql )
{
OUString ret;
- int i = 0;
- while (i < sql.getLength() && isWhitespace(sql[i])) { i++; }
+ size_t i = 0;
+ while (i < sql.size() && isWhitespace(sql[i])) { i++; }
- if( sql.matchIgnoreAsciiCase("insert", i) )
+ if( o3tl::matchIgnoreAsciiCase(sql, u"insert", i) )
{
i += 6;
- while (i < sql.getLength() && isWhitespace(sql[i])) { i++; }
- if( sql.matchIgnoreAsciiCase("into", i) )
+ while (i < sql.size() && isWhitespace(sql[i])) { i++; }
+ if( o3tl::matchIgnoreAsciiCase(sql, u"into", i) )
{
i +=4;
- while (i < sql.getLength() && isWhitespace(sql[i])) { i++; }
+ while (i < sql.size() && isWhitespace(sql[i])) { i++; }
int start = i;
bool quote = (sql[i] == '"');
- for( i++ ; i < sql.getLength() ; i ++ )
+ for( i++ ; i < sql.size() ; i ++ )
{
if( quote && sql[i] == '"' )
{
- while (i < sql.getLength() && isWhitespace(sql[i])) { i++; }
+ while (i < sql.size() && isWhitespace(sql[i])) { i++; }
if( '.' == sql[i] )
{
- while (i < sql.getLength() && isWhitespace(sql[i])) { i++; }
+ while (i < sql.size() && isWhitespace(sql[i])) { i++; }
if( '"' == sql[i] )
{
// the second part of the table name does not use quotes
@@ -361,7 +361,7 @@ OUString extractTableFromInsert( const OUString & sql )
}
}
}
- ret = sql.copy(start, i - start ).trim();
+ ret = o3tl::trim(sql.substr(start, i - start ));
// printf( "pq_statement: parsed table name %s from insert\n" ,
// OUStringToOString( ret, RTL_TEXTENCODING_ASCII_US).getStr() );
}
@@ -416,7 +416,7 @@ void splitSQL( const OString & sql, std::vector< OString > &vec )
{
if( '"' == c )
{
- vec.push_back( OString( &sql.getStr()[start], i-start+1 ) );
+ vec.emplace_back( &sql.getStr()[start], i-start+1 );
start = i + 1;
doubleQuote = false;
}
@@ -431,7 +431,7 @@ void splitSQL( const OString & sql, std::vector< OString > &vec )
}
else if( '\'' == c )
{
- vec.push_back( OString( &sql.getStr()[start], i - start +1 ) );
+ vec.emplace_back( &sql.getStr()[start], i - start +1 );
start = i + 1; // leave single quotes !
singleQuote = false;
}
@@ -440,20 +440,20 @@ void splitSQL( const OString & sql, std::vector< OString > &vec )
{
if( '"' == c )
{
- vec.push_back( OString( &sql.getStr()[start], i - start ) );
+ vec.emplace_back( &sql.getStr()[start], i - start );
doubleQuote = true;
start = i;
}
else if( '\'' == c )
{
- vec.push_back( OString( &sql.getStr()[start], i - start ) );
+ vec.emplace_back( &sql.getStr()[start], i - start );
singleQuote = true;
start = i;
}
}
}
if( start < i )
- vec.push_back( OString( &sql.getStr()[start] , i - start ) );
+ vec.emplace_back( &sql.getStr()[start] , i - start );
// for( i = 0 ; i < vec.size() ; i ++ )
// printf( "%s!" , vec[i].getStr() );
@@ -476,7 +476,7 @@ void tokenizeSQL( const OString & sql, std::vector< OString > &vec )
{
if( '"' == c )
{
- vec.push_back( OString( &sql.getStr()[start], i-start ) );
+ vec.emplace_back( &sql.getStr()[start], i-start );
start = i + 1;
doubleQuote = false;
}
@@ -485,7 +485,7 @@ void tokenizeSQL( const OString & sql, std::vector< OString > &vec )
{
if( '\'' == c )
{
- vec.push_back( OString( &sql.getStr()[start], i - start +1 ) );
+ vec.emplace_back( &sql.getStr()[start], i - start +1 );
start = i + 1; // leave single quotes !
singleQuote = false;
}
@@ -508,15 +508,15 @@ void tokenizeSQL( const OString & sql, std::vector< OString > &vec )
start ++; // skip additional whitespace
else
{
- vec.push_back( OString( &sql.getStr()[start], i - start ) );
+ vec.emplace_back( &sql.getStr()[start], i - start );
start = i +1;
}
}
else if( ',' == c || isOperator( c ) || '(' == c || ')' == c )
{
if( i - start )
- vec.push_back( OString( &sql.getStr()[start], i - start ) );
- vec.push_back( OString( &sql.getStr()[i], 1 ) );
+ vec.emplace_back( &sql.getStr()[start], i - start );
+ vec.emplace_back( &sql.getStr()[i], 1 );
start = i + 1;
}
else if( '.' == c )
@@ -529,15 +529,15 @@ void tokenizeSQL( const OString & sql, std::vector< OString > &vec )
else
{
if( i - start )
- vec.push_back( OString( &sql.getStr()[start], i - start ) );
- vec.push_back( OString( "." ) );
+ vec.emplace_back( &sql.getStr()[start], i - start );
+ vec.emplace_back( "." );
start = i + 1;
}
}
}
}
if( start < i )
- vec.push_back( OString( &sql.getStr()[start] , i - start ) );
+ vec.emplace_back( &sql.getStr()[start] , i - start );
// for( i = 0 ; i < vec.size() ; i ++ )
// printf( "%s!" , vec[i].getStr() );
@@ -596,12 +596,12 @@ OUString array2String( const css::uno::Sequence< Any > &seq )
}
-std::vector< Any > parseArray( const OUString & str )
+std::vector< Any > parseArray( std::u16string_view str )
{
- int len = str.getLength();
+ size_t len = str.size();
bool doubleQuote = false;
int brackets = 0;
- int i = 0;
+ size_t i = 0;
OUStringBuffer current;
std::vector<Any> elements;
@@ -644,7 +644,7 @@ std::vector< Any > parseArray( const OUString & str )
if( brackets == 0 )
{
if( !current.isEmpty() || doubleQuotedValue )
- elements.push_back( makeAny( current.makeStringAndClear() ) );
+ elements.emplace_back( current.makeStringAndClear() );
}
else
{
@@ -673,7 +673,7 @@ std::vector< Any > parseArray( const OUString & str )
else if( ',' == c && brackets == 1)
{
doubleQuotedValue = false;
- elements.push_back( makeAny( current.makeStringAndClear() ) );
+ elements.emplace_back( current.makeStringAndClear() );
}
else if( isWhitespace( c ) )
{
@@ -711,11 +711,11 @@ void fillAttnum2attnameMap(
const OUString &table )
{
Reference< XPreparedStatement > prep = conn->prepareStatement(
- "SELECT attname,attnum "
+ u"SELECT attname,attnum "
"FROM pg_attribute "
"INNER JOIN pg_class ON attrelid = pg_class.oid "
"INNER JOIN pg_namespace ON pg_class.relnamespace = pg_namespace.oid "
- "WHERE relname=? AND nspname=?" );
+ "WHERE relname=? AND nspname=?"_ustr );
Reference< XParameters > paras( prep, UNO_QUERY_THROW );
paras->setString( 1 , table );
@@ -836,21 +836,21 @@ OString extractSingleTableFromSelect( const std::vector< OString > &vec )
OUString getColExprForDefaultSettingVal(ConnectionSettings const *settings)
{
return (PQserverVersion( settings->pConnection ) < 80000)?
- OUString("pg_attrdef.adsrc"):
- OUString("pg_get_expr(pg_attrdef.adbin, pg_attrdef.adrelid, true)");
+ u"pg_attrdef.adsrc"_ustr:
+ u"pg_get_expr(pg_attrdef.adbin, pg_attrdef.adrelid, true)"_ustr;
}
-css::uno::Sequence< sal_Int32 > string2intarray( const OUString & str )
+css::uno::Sequence< sal_Int32 > string2intarray( std::u16string_view str )
{
css::uno::Sequence< sal_Int32 > ret;
- const sal_Int32 strlen = str.getLength();
- if( str.getLength() > 1 )
+ const sal_Int32 strlen = str.size();
+ if( strlen > 1 )
{
sal_Int32 start = 0;
sal_uInt32 c;
for (;;)
{
- c = str.iterateCodePoints(&start);
+ c = o3tl::iterateCodePoints(str, &start);
if (!iswspace(c))
break;
if ( start == strlen)
@@ -860,7 +860,7 @@ css::uno::Sequence< sal_Int32 > string2intarray( const OUString & str )
return ret;
for (;;)
{
- c = str.iterateCodePoints(&start);
+ c = o3tl::iterateCodePoints(str, &start);
if ( !iswspace(c) )
break;
if ( start == strlen)
@@ -879,7 +879,7 @@ css::uno::Sequence< sal_Int32 > string2intarray( const OUString & str )
break;
if ( start == strlen)
return ret;
- c=str.iterateCodePoints(&start);
+ c = o3tl::iterateCodePoints(str, &start);
} while ( c );
do
{
@@ -888,20 +888,20 @@ css::uno::Sequence< sal_Int32 > string2intarray( const OUString & str )
if ( start == strlen)
return ret;
digits.append(OUString(&c, 1));
- c = str.iterateCodePoints(&start);
+ c = o3tl::iterateCodePoints(str, &start);
} while ( c );
- vec.push_back( digits.makeStringAndClear().toInt32() );
+ vec.push_back( o3tl::toInt32(digits) );
do
{
if(!iswspace(c))
break;
if ( start == strlen)
return ret;
- c = str.iterateCodePoints(&start);
+ c = o3tl::iterateCodePoints(str, &start);
} while ( c );
if ( c == L'}' )
break;
- if ( str.iterateCodePoints(&start) != L',' )
+ if ( o3tl::iterateCodePoints(str, &start) != L',' )
return ret;
if ( start == strlen)
return ret;
@@ -943,19 +943,17 @@ OUString sqltype2string( const Reference< XPropertySet > & desc )
case css::sdbc::DataType::VARCHAR:
case css::sdbc::DataType::CHAR:
{
- typeName.append( "(" );
- typeName.append( precision );
- typeName.append( ")" );
+ typeName.append( "(" + OUString::number(precision) + ")" );
break;
}
case css::sdbc::DataType::DECIMAL:
case css::sdbc::DataType::NUMERIC:
{
- typeName.append( "(" );
- typeName.append( precision );
- typeName.append( "," );
- typeName.append( extractIntProperty( desc, getStatics().SCALE ) );
- typeName.append( ")" );
+ typeName.append( "("
+ + OUString::number(precision)
+ + ","
+ + OUString::number(extractIntProperty( desc, getStatics().SCALE ))
+ + ")" );
break;
}
default:
diff --git a/connectivity/source/drivers/postgresql/pq_tools.hxx b/connectivity/source/drivers/postgresql/pq_tools.hxx
index 1f9356ed41d3..c5f9174111ca 100644
--- a/connectivity/source/drivers/postgresql/pq_tools.hxx
+++ b/connectivity/source/drivers/postgresql/pq_tools.hxx
@@ -106,7 +106,7 @@ bool extractBoolProperty(
void disposeNoThrow( const css::uno::Reference< css::uno::XInterface > & r );
void disposeObject( const css::uno::Reference< css::uno::XInterface > & r );
-OUString extractTableFromInsert( const OUString & sql );
+OUString extractTableFromInsert( std::u16string_view sql );
OString extractSingleTableFromSelect( const std::vector< OString > &vec );
OUString getColExprForDefaultSettingVal(ConnectionSettings const *settings);
@@ -115,7 +115,7 @@ void tokenizeSQL( const OString & sql, std::vector< OString > &vec );
void splitSQL( const OString & sql, std::vector< OString > &vec );
std::vector< sal_Int32 > parseIntArray( const OUString & str );
/// @throws css::sdbc::SQLException
-std::vector< css::uno::Any > parseArray( const OUString & str );
+std::vector< css::uno::Any > parseArray( std::u16string_view str );
OUString array2String( const css::uno::Sequence< css::uno::Any > &seq );
@@ -131,7 +131,7 @@ void fillAttnum2attnameMap(
const OUString &schema,
const OUString &table );
-css::uno::Sequence< sal_Int32 > string2intarray( const OUString & str );
+css::uno::Sequence< sal_Int32 > string2intarray( std::u16string_view str );
css::uno::Sequence< OUString > convertMappedIntArray2StringArray(
const Int2StringMap &map, const css::uno::Sequence< sal_Int32> &source );
diff --git a/connectivity/source/drivers/postgresql/pq_updateableresultset.cxx b/connectivity/source/drivers/postgresql/pq_updateableresultset.cxx
index 5c1b23e82175..d8d2edfc6c04 100644
--- a/connectivity/source/drivers/postgresql/pq_updateableresultset.cxx
+++ b/connectivity/source/drivers/postgresql/pq_updateableresultset.cxx
@@ -116,7 +116,7 @@ css::uno::Reference< css::sdbc::XCloseable > UpdateableResultSet::createFromPGRe
OUString( val, strlen( val ), ConnectionSettings::encoding );
}
}
- data[row] = aRow;
+ data[row] = std::move(aRow);
}
rtl::Reference<UpdateableResultSet> pRS = new UpdateableResultSet(
@@ -187,7 +187,7 @@ void UpdateableResultSet::insertRow( )
if( ! m_insertRow )
throw SQLException(
- "pq_resultset.insertRow: moveToInsertRow has not been called !",
+ u"pq_resultset.insertRow: moveToInsertRow has not been called !"_ustr,
*this, OUString(), 1, Any() );
OUStringBuffer buf( 128 );
@@ -279,7 +279,7 @@ void UpdateableResultSet::updateRow( )
if( m_insertRow )
throw SQLException(
- "pq_resultset.updateRow: moveToCurrentRow has not been called !",
+ u"pq_resultset.updateRow: moveToCurrentRow has not been called !"_ustr,
*this, OUString(), 1, Any() );
OUStringBuffer buf( 128 );
@@ -296,8 +296,8 @@ void UpdateableResultSet::updateRow( )
buf.append( ", " );
columns ++;
- buf.append( m_columnNames[i] );
- buf.append( " = " );
+ buf.append( m_columnNames[i]
+ + " = " );
bufferQuoteAnyConstant( buf, m_updateableField[i].value, *m_ppSettings );
// OUString val;
// m_updateableField[i].value >>= val;
@@ -326,7 +326,7 @@ void UpdateableResultSet::deleteRow( )
if( m_insertRow )
throw SQLException(
- "pq_resultset.deleteRow: deleteRow cannot be called when on insert row !",
+ u"pq_resultset.deleteRow: deleteRow cannot be called when on insert row !"_ustr,
*this, OUString(), 1, Any() );
if( m_row < 0 || m_row >= m_rowCount )
@@ -342,8 +342,8 @@ void UpdateableResultSet::deleteRow( )
OUStringBuffer buf( 128 );
buf.append( "DELETE FROM " );
bufferQuoteQualifiedIdentifier( buf, m_schema, m_table, *m_ppSettings );
- buf.append( " " );
- buf.append( buildWhereClause() );
+ buf.append( " "
+ + buildWhereClause() );
stmt->executeUpdate( buf.makeStringAndClear() );
@@ -473,7 +473,7 @@ void UpdateableResultSet::updateBytes( sal_Int32 columnIndex, const css::uno::Se
if( ! escapedString )
{
throw SQLException(
- "pq_preparedstatement.setBytes: Error during converting bytesequence to an SQL conform string",
+ u"pq_preparedstatement.setBytes: Error during converting bytesequence to an SQL conform string"_ustr,
*this, OUString(), 1, Any() );
}
// buf.append( (const char *)escapedString, len -1 );
diff --git a/connectivity/source/drivers/postgresql/pq_updateableresultset.hxx b/connectivity/source/drivers/postgresql/pq_updateableresultset.hxx
index 1beeadc31e98..52cb513a5856 100644
--- a/connectivity/source/drivers/postgresql/pq_updateableresultset.hxx
+++ b/connectivity/source/drivers/postgresql/pq_updateableresultset.hxx
@@ -44,6 +44,7 @@
#include <com/sun/star/sdbc/ResultSetType.hpp>
#include <com/sun/star/sdbc/XResultSetUpdate.hpp>
#include <com/sun/star/sdbc/XRowUpdate.hpp>
+#include <utility>
namespace pq_sdbc_driver
{
@@ -78,13 +79,13 @@ private:
std::vector< OUString >&& colNames,
std::vector< std::vector< css::uno::Any > >&& data,
ConnectionSettings **ppSettings,
- const OUString &schema,
- const OUString &table,
+ OUString schema,
+ OUString table,
std::vector< OUString >&& primaryKey)
: SequenceResultSet( mutex, owner, std::move(colNames), std::move(data), (*ppSettings)->tc ),
m_ppSettings( ppSettings ),
- m_schema( schema ),
- m_table( table ),
+ m_schema(std::move( schema )),
+ m_table(std::move( table )),
m_primaryKey( std::move(primaryKey) ),
m_insertRow( false )
{
diff --git a/connectivity/source/drivers/postgresql/pq_xbase.cxx b/connectivity/source/drivers/postgresql/pq_xbase.cxx
index 1fec4130a9db..dd9579fce0da 100644
--- a/connectivity/source/drivers/postgresql/pq_xbase.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xbase.cxx
@@ -36,7 +36,9 @@
#include <cppuhelper/supportsservice.hxx>
#include <comphelper/sequence.hxx>
+#include <utility>
+#include "pq_statics.hxx"
#include "pq_tools.hxx"
#include "pq_xbase.hxx"
@@ -55,18 +57,18 @@ namespace pq_sdbc_driver
{
ReflectionBase::ReflectionBase(
- const OUString &implName,
+ OUString implName,
const css::uno::Sequence< OUString > &supportedServices,
const ::rtl::Reference< comphelper::RefCountedMutex >& refMutex,
- const css::uno::Reference< css::sdbc::XConnection > &conn,
+ css::uno::Reference< css::sdbc::XConnection > conn,
ConnectionSettings *pSettings,
cppu::IPropertyArrayHelper & props /* must survive this object !*/ )
: ReflectionBase_BASE( refMutex->GetMutex() ),
OPropertySetHelper( ReflectionBase_BASE::rBHelper ),
- m_implName( implName ),
+ m_implName(std::move( implName )),
m_supportedServices( supportedServices ),
m_xMutex( refMutex ),
- m_conn( conn ),
+ m_conn(std::move( conn )),
m_pSettings( pSettings ),
m_propsDesc( props ),
m_values( props.getProperties().getLength() )
@@ -203,7 +205,7 @@ OUString ReflectionBase::getName( )
void ReflectionBase::setName( const OUString& /* aName */ )
{
throw RuntimeException(
- "pq_sdbc::ReflectionBase::setName not implemented",
+ u"pq_sdbc::ReflectionBase::setName not implemented"_ustr,
*this );
//setPropertyValue( getStatics().NAME , makeAny( aName ) );
}
diff --git a/connectivity/source/drivers/postgresql/pq_xbase.hxx b/connectivity/source/drivers/postgresql/pq_xbase.hxx
index 80e553325c93..e4ca16fd5e6a 100644
--- a/connectivity/source/drivers/postgresql/pq_xbase.hxx
+++ b/connectivity/source/drivers/postgresql/pq_xbase.hxx
@@ -36,7 +36,6 @@
#pragma once
#include <cppuhelper/propshlp.hxx>
-#include <cppuhelper/component.hxx>
#include <cppuhelper/compbase.hxx>
#include <com/sun/star/lang/XServiceInfo.hpp>
@@ -66,10 +65,10 @@ protected:
std::vector< css::uno::Any > m_values;
public:
ReflectionBase(
- const OUString &implName,
+ OUString implName,
const css::uno::Sequence< OUString > &supportedServices,
const ::rtl::Reference< comphelper::RefCountedMutex >& refMutex,
- const css::uno::Reference< css::sdbc::XConnection > &conn,
+ css::uno::Reference< css::sdbc::XConnection > conn,
ConnectionSettings *pSettings,
cppu::IPropertyArrayHelper & props /* must survive this object !*/ );
diff --git a/connectivity/source/drivers/postgresql/pq_xcolumn.cxx b/connectivity/source/drivers/postgresql/pq_xcolumn.cxx
index 33e57a1a5445..b19d95c3c994 100644
--- a/connectivity/source/drivers/postgresql/pq_xcolumn.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xcolumn.cxx
@@ -38,6 +38,7 @@
#include <rtl/ref.hxx>
+#include "pq_statics.hxx"
#include "pq_xcolumn.hxx"
using com::sun::star::uno::Reference;
diff --git a/connectivity/source/drivers/postgresql/pq_xcolumns.cxx b/connectivity/source/drivers/postgresql/pq_xcolumns.cxx
index 82d595628db3..5d98a452bfd7 100644
--- a/connectivity/source/drivers/postgresql/pq_xcolumns.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xcolumns.cxx
@@ -38,6 +38,7 @@
#include <string_view>
+#include <o3tl/safeint.hxx>
#include <o3tl/string_view.hxx>
#include <rtl/ref.hxx>
#include <rtl/ustrbuf.hxx>
@@ -49,6 +50,7 @@
#include <com/sun/star/sdbc/ColumnValue.hpp>
#include <cppuhelper/exc_hlp.hxx>
+#include <utility>
#include "pq_xcolumns.hxx"
#include "pq_xcolumn.hxx"
@@ -61,7 +63,6 @@ using osl::MutexGuard;
using com::sun::star::beans::XPropertySet;
using com::sun::star::uno::Any;
-using com::sun::star::uno::makeAny;
using com::sun::star::uno::UNO_QUERY;
using com::sun::star::uno::Reference;
using com::sun::star::uno::RuntimeException;
@@ -75,9 +76,9 @@ using com::sun::star::sdbc::SQLException;
namespace pq_sdbc_driver
{
-static Any isCurrency( const OUString & typeName )
+static Any isCurrency( std::u16string_view typeName )
{
- return Any( typeName.equalsIgnoreAsciiCase("money") );
+ return Any( o3tl::equalsIgnoreAsciiCase(typeName, u"money") );
}
// static sal_Bool isAutoIncrement8( const OUString & typeName )
@@ -109,11 +110,11 @@ Columns::Columns(
const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const css::uno::Reference< css::sdbc::XConnection > & origin,
ConnectionSettings *pSettings,
- const OUString &schemaName,
- const OUString &tableName)
- : Container( refMutex, origin, pSettings, "COLUMN" ),
- m_schemaName( schemaName ),
- m_tableName( tableName )
+ OUString schemaName,
+ OUString tableName)
+ : Container( refMutex, origin, pSettings, u"COLUMN"_ustr ),
+ m_schemaName(std::move( schemaName )),
+ m_tableName(std::move( tableName ))
{}
Columns::~Columns()
@@ -185,25 +186,25 @@ OUString columnMetaData2SDBCX(
OUString typeName = xRow->getString( TYPE_NAME );
pBase->setPropertyValue_NoBroadcast_public(
- st.NAME, makeAny( name ) );
+ st.NAME, Any( name ) );
pBase->setPropertyValue_NoBroadcast_public(
- st.TYPE, makeAny( xRow->getInt( DATA_TYPE ) ) );
+ st.TYPE, Any( xRow->getInt( DATA_TYPE ) ) );
pBase->setPropertyValue_NoBroadcast_public(
- st.TYPE_NAME, makeAny( typeName ) );
+ st.TYPE_NAME, Any( typeName ) );
pBase->setPropertyValue_NoBroadcast_public(
- st.PRECISION, makeAny( xRow->getInt( COLUMN_SIZE ) ) );
+ st.PRECISION, Any( xRow->getInt( COLUMN_SIZE ) ) );
pBase->setPropertyValue_NoBroadcast_public(
- st.SCALE, makeAny( xRow->getInt( DECIMAL_DIGITS ) ) );
+ st.SCALE, Any( xRow->getInt( DECIMAL_DIGITS ) ) );
pBase->setPropertyValue_NoBroadcast_public(
- st.IS_NULLABLE, makeAny( xRow->getInt( IS_NULLABLE ) ) );
+ st.IS_NULLABLE, Any( xRow->getInt( IS_NULLABLE ) ) );
pBase->setPropertyValue_NoBroadcast_public(
- st.DEFAULT_VALUE, makeAny( xRow->getString( DEFAULT_VALUE ) ) );
+ st.DEFAULT_VALUE, Any( xRow->getString( DEFAULT_VALUE ) ) );
// pBase->setPropertyValue_NoBroadcast_public(
// st.DESCRIPTION, makeAny( xRow->getString( DESCRIPTION ) ) );
@@ -213,7 +214,7 @@ OUString columnMetaData2SDBCX(
// st.HELP_TEXT, makeAny( xRow->getString( DESCRIPTION ) ) );
// else // for key columns, etc. ...
pBase->setPropertyValue_NoBroadcast_public(
- st.DESCRIPTION, makeAny( xRow->getString( DESCRIPTION ) ) );
+ st.DESCRIPTION, Any( xRow->getString( DESCRIPTION ) ) );
// maybe a better criterion than the type name can be found in future
@@ -302,7 +303,6 @@ void Columns::refresh()
{
rtl::Reference<Column> pColumn =
new Column( m_xMutex, m_origin, m_pSettings );
- Reference< css::beans::XPropertySet > prop = pColumn;
OUString name = columnMetaData2SDBCX( pColumn.get(), xRow );
// pColumn->addPropertyChangeListener(
@@ -316,7 +316,7 @@ void Columns::refresh()
// name ) );
{
- m_values.push_back( makeAny( prop ) );
+ m_values.emplace_back(Reference< css::beans::XPropertySet >(pColumn));
map[ name ] = columnIndex;
++columnIndex;
}
@@ -381,7 +381,7 @@ void alterColumnByDescriptor(
if( pastTypeName != futureTypeName )
{
throw RuntimeException(
- "Can't modify column types, drop the column and create a new one" );
+ u"Can't modify column types, drop the column and create a new one"_ustr );
}
if( pastColumnName != futureColumnName )
@@ -405,11 +405,10 @@ void alterColumnByDescriptor(
bufferQuoteQualifiedIdentifier( buf, schemaName, tableName, settings );
buf.append( "ALTER COLUMN" );
bufferQuoteIdentifier( buf, futureColumnName, settings );
- buf.append( "SET DEFAULT " );
// LEM TODO: check out
// default value is not quoted, caller needs to quote himself (otherwise
// how to pass e.g. nextval('something' ) ????
- buf.append( futureDefaultValue );
+ buf.append( "SET DEFAULT " + futureDefaultValue );
// bufferQuoteConstant( buf, defaultValue, encoding );
transaction.executeUpdate( buf.makeStringAndClear() );
}
@@ -461,7 +460,7 @@ void Columns::appendByDescriptor(
osl::MutexGuard guard( m_xMutex->GetMutex() );
Statics & st = getStatics();
Reference< XPropertySet > past = createDataDescriptor();
- past->setPropertyValue( st.IS_NULLABLE, makeAny( css::sdbc::ColumnValue::NULLABLE ) );
+ past->setPropertyValue( st.IS_NULLABLE, Any( css::sdbc::ColumnValue::NULLABLE ) );
alterColumnByDescriptor(
m_schemaName, m_tableName, m_pSettings, m_origin->createStatement() , past, future );
@@ -493,7 +492,7 @@ void Columns::appendByDescriptor(
void Columns::dropByIndex( sal_Int32 index )
{
osl::MutexGuard guard( m_xMutex->GetMutex() );
- if( index < 0 || index >= static_cast<sal_Int32>(m_values.size()) )
+ if( index < 0 || o3tl::make_unsigned(index) >= m_values.size() )
{
throw css::lang::IndexOutOfBoundsException(
"COLUMNS: Index out of range (allowed 0 to "
@@ -546,7 +545,7 @@ ColumnDescriptors::ColumnDescriptors(
const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const css::uno::Reference< css::sdbc::XConnection > & origin,
ConnectionSettings *pSettings )
- : Container( refMutex, origin, pSettings, "COLUMN-DESCRIPTOR" )
+ : Container( refMutex, origin, pSettings, u"COLUMN-DESCRIPTOR"_ustr )
{}
diff --git a/connectivity/source/drivers/postgresql/pq_xcolumns.hxx b/connectivity/source/drivers/postgresql/pq_xcolumns.hxx
index aa91a9754218..8ff8fcfbd95c 100644
--- a/connectivity/source/drivers/postgresql/pq_xcolumns.hxx
+++ b/connectivity/source/drivers/postgresql/pq_xcolumns.hxx
@@ -80,8 +80,8 @@ private:
const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const css::uno::Reference< css::sdbc::XConnection > & origin,
ConnectionSettings *pSettings,
- const OUString &schemaName,
- const OUString &tableName);
+ OUString schemaName,
+ OUString tableName);
virtual ~Columns() override;
diff --git a/connectivity/source/drivers/postgresql/pq_xcontainer.cxx b/connectivity/source/drivers/postgresql/pq_xcontainer.cxx
index d2bcf941a68d..eec72bac8feb 100644
--- a/connectivity/source/drivers/postgresql/pq_xcontainer.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xcontainer.cxx
@@ -36,7 +36,10 @@
#include <com/sun/star/container/ElementExistException.hpp>
#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
+#include <comphelper/diagnose_ex.hxx>
#include <cppuhelper/implbase.hxx>
+#include <o3tl/safeint.hxx>
+#include <utility>
#include "pq_xcontainer.hxx"
#include "pq_statics.hxx"
@@ -47,7 +50,6 @@ using osl::MutexGuard;
using com::sun::star::beans::XPropertySet;
using com::sun::star::uno::Any;
-using com::sun::star::uno::makeAny;
using com::sun::star::uno::Type;
using com::sun::star::uno::XInterface;
using com::sun::star::uno::Reference;
@@ -76,7 +78,7 @@ public:
const OUString & name,
const Any & newElement,
const OUString & oldElement ) :
- m_event( source, makeAny( name ), newElement, makeAny(oldElement) )
+ m_event( source, Any( name ), newElement, Any(oldElement) )
{}
virtual void fire( XEventListener * listener ) const override
@@ -97,7 +99,7 @@ public:
const Reference< XInterface > & source,
const OUString & name,
const Any & newElement ) :
- m_event( source, makeAny( name ), newElement, Any() )
+ m_event( source, Any( name ), newElement, Any() )
{}
virtual void fire( XEventListener * listener ) const override
@@ -118,7 +120,7 @@ public:
RemovedBroadcaster(
const Reference< XInterface > & source,
const OUString & name) :
- m_event( source, makeAny( name ), Any(), Any() )
+ m_event( source, Any( name ), Any(), Any() )
{}
virtual void fire( XEventListener * listener ) const override
@@ -136,14 +138,14 @@ public:
Container::Container(
const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
- const css::uno::Reference< css::sdbc::XConnection > & origin,
+ css::uno::Reference< css::sdbc::XConnection > origin,
ConnectionSettings *pSettings,
- const OUString &type)
+ OUString type)
: ContainerBase( refMutex->GetMutex() ),
m_xMutex( refMutex ),
m_pSettings( pSettings ),
- m_origin( origin ),
- m_type( type )
+ m_origin(std::move( origin )),
+ m_type(std::move( type ))
{
}
@@ -156,7 +158,7 @@ Any Container::getByName( const OUString& aName )
"Element " + aName + " unknown in " + m_type + "-Container",
*this );
}
- OSL_ASSERT( ii->second >= 0 && ii->second < static_cast<int>(m_values.size()) );
+ OSL_ASSERT( ii->second >= 0 && o3tl::make_unsigned(ii->second) < m_values.size() );
return m_values[ ii->second ];
}
@@ -189,7 +191,7 @@ sal_Bool Container::hasElements( )
Any Container::getByIndex( sal_Int32 Index )
{
- if( Index < 0 || Index >= static_cast<sal_Int32>(m_values.size()) )
+ if( Index < 0 || o3tl::make_unsigned(Index) >= m_values.size() )
{
throw IndexOutOfBoundsException(
"Index " + OUString::number( Index )
@@ -236,7 +238,7 @@ css::uno::Any ContainerEnumeration::nextElement()
if( ! hasMoreElements() )
{
throw NoSuchElementException(
- "NoSuchElementException during enumeration", *this );
+ u"NoSuchElementException during enumeration"_ustr, *this );
}
m_index ++;
return m_vec[m_index];
@@ -299,7 +301,7 @@ void Container::dropByName( const OUString& elementName )
void Container::dropByIndex( sal_Int32 index )
{
osl::MutexGuard guard( m_xMutex->GetMutex() );
- if( index < 0 || index >=static_cast<sal_Int32>(m_values.size()) )
+ if( index < 0 || o3tl::make_unsigned(index) >=m_values.size() )
{
throw css::lang::IndexOutOfBoundsException(
"Index out of range (allowed 0 to "
@@ -350,10 +352,10 @@ void Container::append(
}
int index = m_values.size();
- m_values.push_back( makeAny( descriptor ) );
+ m_values.emplace_back(descriptor);
m_name2index[name] = index;
- fire( InsertedBroadcaster( *this, name, makeAny( descriptor ) ) );
+ fire( InsertedBroadcaster( *this, name, Any( descriptor ) ) );
}
void Container::appendByDescriptor(
@@ -391,13 +393,13 @@ void Container::fire( const EventBroadcastHelper &helper )
}
catch ( css::uno::RuntimeException & )
{
- OSL_ENSURE( false, "exception caught" );
+ TOOLS_WARN_EXCEPTION( "connectivity.postgresql", "exception caught" );
// loose coupling, a runtime exception shall not break anything
// TODO: log away as warning !
}
catch( css::uno::Exception & )
{
- OSL_ENSURE( false, "exception from listener flying through" );
+ TOOLS_WARN_EXCEPTION( "connectivity.postgresql", "exception from listener flying through" );
throw;
}
}
diff --git a/connectivity/source/drivers/postgresql/pq_xcontainer.hxx b/connectivity/source/drivers/postgresql/pq_xcontainer.hxx
index 1e17fef28db5..4b6c190b0a59 100644
--- a/connectivity/source/drivers/postgresql/pq_xcontainer.hxx
+++ b/connectivity/source/drivers/postgresql/pq_xcontainer.hxx
@@ -53,8 +53,6 @@
#include <unordered_map>
-#include "pq_statics.hxx"
-
namespace pq_sdbc_driver
{
@@ -119,9 +117,9 @@ protected:
public:
Container(
const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
- const css::uno::Reference< css::sdbc::XConnection > & origin,
+ css::uno::Reference< css::sdbc::XConnection > origin,
ConnectionSettings *pSettings,
- const OUString & type // for exception messages
+ OUString type // for exception messages
);
public: // XIndexAccess
diff --git a/connectivity/source/drivers/postgresql/pq_xindex.cxx b/connectivity/source/drivers/postgresql/pq_xindex.cxx
index 5a96eeeb119d..4753b5fd4e3c 100644
--- a/connectivity/source/drivers/postgresql/pq_xindex.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xindex.cxx
@@ -37,6 +37,7 @@
#include <cppuhelper/typeprovider.hxx>
#include <cppuhelper/queryinterface.hxx>
#include <rtl/ref.hxx>
+#include <utility>
#include "pq_xindex.hxx"
#include "pq_xindexcolumns.hxx"
@@ -58,8 +59,8 @@ namespace pq_sdbc_driver
Index::Index( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const Reference< css::sdbc::XConnection > & connection,
ConnectionSettings *pSettings,
- const OUString & schemaName,
- const OUString & tableName )
+ OUString schemaName,
+ OUString tableName )
: ReflectionBase(
getStatics().refl.index.implName,
getStatics().refl.index.serviceNames,
@@ -67,8 +68,8 @@ Index::Index( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
connection,
pSettings,
* getStatics().refl.index.pProps ),
- m_schemaName( schemaName ),
- m_tableName( tableName )
+ m_schemaName(std::move( schemaName )),
+ m_tableName(std::move( tableName ))
{}
Reference< XPropertySet > Index::createDataDescriptor( )
diff --git a/connectivity/source/drivers/postgresql/pq_xindex.hxx b/connectivity/source/drivers/postgresql/pq_xindex.hxx
index 46275ad3aafa..8ccf45660467 100644
--- a/connectivity/source/drivers/postgresql/pq_xindex.hxx
+++ b/connectivity/source/drivers/postgresql/pq_xindex.hxx
@@ -61,8 +61,8 @@ public:
Index( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const css::uno::Reference< css::sdbc::XConnection > & connection,
ConnectionSettings *pSettings,
- const OUString &schemaName,
- const OUString &tableName);
+ OUString schemaName,
+ OUString tableName);
public: // XInterface
virtual void SAL_CALL acquire() noexcept override { ReflectionBase::acquire(); }
diff --git a/connectivity/source/drivers/postgresql/pq_xindexcolumn.cxx b/connectivity/source/drivers/postgresql/pq_xindexcolumn.cxx
index 58cae851f441..fe72059bc15a 100644
--- a/connectivity/source/drivers/postgresql/pq_xindexcolumn.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xindexcolumn.cxx
@@ -38,6 +38,7 @@
#include <rtl/ref.hxx>
+#include "pq_statics.hxx"
#include "pq_xindexcolumn.hxx"
using com::sun::star::uno::Reference;
diff --git a/connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx b/connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx
index 1e0039ecc6e1..eb004b565c3e 100644
--- a/connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx
@@ -37,6 +37,7 @@
#include <sal/log.hxx>
#include <string_view>
+#include <utility>
#include <vector>
#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
@@ -56,7 +57,6 @@ using osl::MutexGuard;
using com::sun::star::beans::XPropertySet;
using com::sun::star::uno::Any;
-using com::sun::star::uno::makeAny;
using com::sun::star::uno::UNO_QUERY;
using com::sun::star::uno::Reference;
using com::sun::star::uno::Sequence;
@@ -73,14 +73,14 @@ IndexColumns::IndexColumns(
const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const css::uno::Reference< css::sdbc::XConnection > & origin,
ConnectionSettings *pSettings,
- const OUString &schemaName,
- const OUString &tableName,
- const OUString &indexName,
+ OUString schemaName,
+ OUString tableName,
+ OUString indexName,
const css::uno::Sequence< OUString > &columns )
- : Container( refMutex, origin, pSettings, "INDEX_COLUMN" ),
- m_schemaName( schemaName ),
- m_tableName( tableName ),
- m_indexName( indexName ),
+ : Container( refMutex, origin, pSettings, u"INDEX_COLUMN"_ustr ),
+ m_schemaName(std::move( schemaName )),
+ m_tableName(std::move( tableName )),
+ m_indexName(std::move( indexName )),
m_columns( columns )
{}
@@ -127,13 +127,12 @@ void IndexColumns::refresh()
rtl::Reference<IndexColumn> pIndexColumn =
new IndexColumn( m_xMutex, m_origin, m_pSettings );
- Reference< css::beans::XPropertySet > prop = pIndexColumn;
columnMetaData2SDBCX( pIndexColumn.get(), xRow );
pIndexColumn->setPropertyValue_NoBroadcast_public(
- st.IS_ASCENDING , makeAny( false ) );
+ st.IS_ASCENDING , Any( false ) );
- m_values[ index ] <<= prop;
+ m_values[ index ] <<= Reference< css::beans::XPropertySet >(pIndexColumn);
m_name2index[ columnName ] = index;
}
}
@@ -152,7 +151,7 @@ void IndexColumns::appendByDescriptor(
const css::uno::Reference< css::beans::XPropertySet >& /*future*/ )
{
throw css::sdbc::SQLException(
- "SDBC-POSTGRESQL: IndexesColumns.appendByDescriptor not yet implemented",
+ u"SDBC-POSTGRESQL: IndexesColumns.appendByDescriptor not yet implemented"_ustr,
*this, OUString(), 1, Any() );
// osl::MutexGuard guard( m_xMutex->GetMutex() );
// Statics & st = getStatics();
@@ -166,7 +165,7 @@ void IndexColumns::appendByDescriptor(
void IndexColumns::dropByName( const OUString& )
{
throw css::sdbc::SQLException(
- "SDBC-POSTGRESQL: IndexesColumns.dropByName not yet implemented",
+ u"SDBC-POSTGRESQL: IndexesColumns.dropByName not yet implemented"_ustr,
*this, OUString(), 1, Any() );
// String2IntMap::const_iterator ii = m_name2index.find( elementName );
// if( ii == m_name2index.end() )
@@ -188,7 +187,7 @@ void IndexColumns::dropByName( const OUString& )
void IndexColumns::dropByIndex( sal_Int32 )
{
throw css::sdbc::SQLException(
- "SDBC-POSTGRESQL: IndexesColumns.dropByIndex not yet implemented",
+ u"SDBC-POSTGRESQL: IndexesColumns.dropByIndex not yet implemented"_ustr,
*this, OUString(), 1, Any() );
// osl::MutexGuard guard( m_xMutex->GetMutex() );
// if( index < 0 || index >= m_values.getLength() )
diff --git a/connectivity/source/drivers/postgresql/pq_xindexcolumns.hxx b/connectivity/source/drivers/postgresql/pq_xindexcolumns.hxx
index eaaa709e671a..a838d5d66908 100644
--- a/connectivity/source/drivers/postgresql/pq_xindexcolumns.hxx
+++ b/connectivity/source/drivers/postgresql/pq_xindexcolumns.hxx
@@ -63,9 +63,9 @@ private:
const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const css::uno::Reference< css::sdbc::XConnection > & origin,
ConnectionSettings *pSettings,
- const OUString &schemaName,
- const OUString &tableName,
- const OUString &indexName,
+ OUString schemaName,
+ OUString tableName,
+ OUString indexName,
const css::uno::Sequence< OUString > &columns );
virtual ~IndexColumns() override;
diff --git a/connectivity/source/drivers/postgresql/pq_xindexes.cxx b/connectivity/source/drivers/postgresql/pq_xindexes.cxx
index 332a9a9e5311..c74929eab2fa 100644
--- a/connectivity/source/drivers/postgresql/pq_xindexes.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xindexes.cxx
@@ -43,6 +43,8 @@
#include <com/sun/star/sdbc/XRow.hpp>
#include <com/sun/star/sdbc/XParameters.hpp>
#include <cppuhelper/exc_hlp.hxx>
+#include <o3tl/safeint.hxx>
+#include <utility>
#include "pq_xindexes.hxx"
#include "pq_xindex.hxx"
@@ -55,7 +57,6 @@ using osl::MutexGuard;
using com::sun::star::beans::XPropertySet;
using com::sun::star::uno::Any;
-using com::sun::star::uno::makeAny;
using com::sun::star::uno::UNO_QUERY;
using com::sun::star::uno::Reference;
using com::sun::star::uno::Sequence;
@@ -78,11 +79,11 @@ Indexes::Indexes(
const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const css::uno::Reference< css::sdbc::XConnection > & origin,
ConnectionSettings *pSettings,
- const OUString &schemaName,
- const OUString &tableName)
+ OUString schemaName,
+ OUString tableName)
: Container( refMutex, origin, pSettings, getStatics().KEY ),
- m_schemaName( schemaName ),
- m_tableName( tableName )
+ m_schemaName(std::move( schemaName )),
+ m_tableName(std::move( tableName ))
{
}
@@ -103,7 +104,7 @@ void Indexes::refresh()
// see XDatabaseMetaData::getIndexInfo()
Reference< XPreparedStatement > stmt = m_origin->prepareStatement(
- "SELECT nspname, " // 1
+ u"SELECT nspname, " // 1
"pg_class.relname, " // 2
"class2.relname, " // 3
"indisclustered, " // 4
@@ -113,7 +114,7 @@ void Indexes::refresh()
"FROM pg_index INNER JOIN pg_class ON indrelid = pg_class.oid "
"INNER JOIN pg_namespace ON pg_class.relnamespace = pg_namespace.oid "
"INNER JOIN pg_class as class2 ON pg_index.indexrelid = class2.oid "
- "WHERE nspname = ? AND pg_class.relname = ?" );
+ "WHERE nspname = ? AND pg_class.relname = ?"_ustr );
Reference< XParameters > params( stmt, UNO_QUERY);
params->setString( 1, m_schemaName );
@@ -141,7 +142,6 @@ void Indexes::refresh()
bool isUnique = row->getBoolean( C_IS_UNIQUE );
bool isPrimary = row->getBoolean( C_IS_PRIMARY );
bool isClusterd = row->getBoolean( C_IS_CLUSTERED );
- Reference< css::beans::XPropertySet > prop = pIndex;
pIndex->setPropertyValue_NoBroadcast_public(
st.IS_UNIQUE, Any( isUnique ) );
pIndex->setPropertyValue_NoBroadcast_public(
@@ -149,7 +149,7 @@ void Indexes::refresh()
pIndex->setPropertyValue_NoBroadcast_public(
st.IS_CLUSTERED, Any( isClusterd ) );
pIndex->setPropertyValue_NoBroadcast_public(
- st.NAME, makeAny( currentIndexName ) );
+ st.NAME, Any( currentIndexName ) );
std::vector< sal_Int32 > seq = parseIntArray( row->getString( C_COLUMNS ) );
Sequence< OUString > columnNames(seq.size());
@@ -160,10 +160,10 @@ void Indexes::refresh()
}
pIndex->setPropertyValue_NoBroadcast_public(
- st.PRIVATE_COLUMN_INDEXES, makeAny( columnNames ));
+ st.PRIVATE_COLUMN_INDEXES, Any( columnNames ));
{
- m_values.push_back( makeAny( prop ) );
+ m_values.emplace_back(Reference< css::beans::XPropertySet >(pIndex));
map[ currentIndexName ] = index;
++index;
}
@@ -235,7 +235,7 @@ void Indexes::dropByIndex( sal_Int32 index )
osl::MutexGuard guard( m_xMutex->GetMutex() );
- if( index < 0 || index >= static_cast<sal_Int32>(m_values.size()) )
+ if( index < 0 || o3tl::make_unsigned(index) >= m_values.size() )
{
throw css::lang::IndexOutOfBoundsException(
"Indexes: Index out of range (allowed 0 to "
diff --git a/connectivity/source/drivers/postgresql/pq_xindexes.hxx b/connectivity/source/drivers/postgresql/pq_xindexes.hxx
index c2e81f61751f..536d17b96198 100644
--- a/connectivity/source/drivers/postgresql/pq_xindexes.hxx
+++ b/connectivity/source/drivers/postgresql/pq_xindexes.hxx
@@ -58,8 +58,8 @@ private:
const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const css::uno::Reference< css::sdbc::XConnection > & origin,
ConnectionSettings *pSettings,
- const OUString &schemaName,
- const OUString &tableName);
+ OUString schemaName,
+ OUString tableName);
virtual ~Indexes() override;
diff --git a/connectivity/source/drivers/postgresql/pq_xkey.cxx b/connectivity/source/drivers/postgresql/pq_xkey.cxx
index e2777824568f..81d1f7a86eb6 100644
--- a/connectivity/source/drivers/postgresql/pq_xkey.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xkey.cxx
@@ -37,6 +37,7 @@
#include <cppuhelper/typeprovider.hxx>
#include <cppuhelper/queryinterface.hxx>
#include <rtl/ref.hxx>
+#include <utility>
#include "pq_xkey.hxx"
#include "pq_xkeycolumns.hxx"
@@ -57,8 +58,8 @@ namespace pq_sdbc_driver
Key::Key( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const Reference< css::sdbc::XConnection > & connection,
ConnectionSettings *pSettings,
- const OUString & schemaName,
- const OUString & tableName )
+ OUString schemaName,
+ OUString tableName )
: ReflectionBase(
getStatics().refl.key.implName,
getStatics().refl.key.serviceNames,
@@ -66,8 +67,8 @@ Key::Key( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
connection,
pSettings,
* getStatics().refl.key.pProps ),
- m_schemaName( schemaName ),
- m_tableName( tableName )
+ m_schemaName(std::move( schemaName )),
+ m_tableName(std::move( tableName ))
{}
Reference< XPropertySet > Key::createDataDescriptor( )
diff --git a/connectivity/source/drivers/postgresql/pq_xkey.hxx b/connectivity/source/drivers/postgresql/pq_xkey.hxx
index d231e1e89945..d162fde24270 100644
--- a/connectivity/source/drivers/postgresql/pq_xkey.hxx
+++ b/connectivity/source/drivers/postgresql/pq_xkey.hxx
@@ -48,6 +48,7 @@
namespace pq_sdbc_driver
{
+class KeyColumnDescriptors;
class Key : public ReflectionBase,
public css::sdbcx::XColumnsSupplier
@@ -61,8 +62,8 @@ public:
Key( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const css::uno::Reference< css::sdbc::XConnection > & connection,
ConnectionSettings *pSettings,
- const OUString &schemaName,
- const OUString &tableName);
+ OUString schemaName,
+ OUString tableName);
public: // XInterface
virtual void SAL_CALL acquire() noexcept override { ReflectionBase::acquire(); }
@@ -87,7 +88,7 @@ public: // XDataDescriptorFactory
class KeyDescriptor : public ReflectionBase, public css::sdbcx::XColumnsSupplier
{
- css::uno::Reference< css::container::XNameAccess > m_keyColumns;
+ rtl::Reference<KeyColumnDescriptors> m_keyColumns;
public:
KeyDescriptor( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
diff --git a/connectivity/source/drivers/postgresql/pq_xkeycolumn.cxx b/connectivity/source/drivers/postgresql/pq_xkeycolumn.cxx
index 10c3dbb474cd..30eef179716c 100644
--- a/connectivity/source/drivers/postgresql/pq_xkeycolumn.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xkeycolumn.cxx
@@ -38,6 +38,7 @@
#include <rtl/ref.hxx>
+#include "pq_statics.hxx"
#include "pq_xkeycolumn.hxx"
using com::sun::star::uno::Reference;
diff --git a/connectivity/source/drivers/postgresql/pq_xkeycolumns.cxx b/connectivity/source/drivers/postgresql/pq_xkeycolumns.cxx
index 6dcbe07d4117..e53e84605aa8 100644
--- a/connectivity/source/drivers/postgresql/pq_xkeycolumns.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xkeycolumns.cxx
@@ -40,6 +40,7 @@
#include <com/sun/star/sdbc/XRow.hpp>
#include <cppuhelper/exc_hlp.hxx>
#include <rtl/ref.hxx>
+#include <utility>
#include "pq_xcolumns.hxx"
#include "pq_xkeycolumns.hxx"
@@ -52,7 +53,6 @@ using osl::MutexGuard;
using com::sun::star::beans::XPropertySet;
using com::sun::star::uno::Any;
-using com::sun::star::uno::makeAny;
using com::sun::star::uno::UNO_QUERY;
using com::sun::star::uno::Reference;
using com::sun::star::uno::Sequence;
@@ -69,13 +69,13 @@ KeyColumns::KeyColumns(
const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const css::uno::Reference< css::sdbc::XConnection > & origin,
ConnectionSettings *pSettings,
- const OUString &schemaName,
- const OUString &tableName,
+ OUString schemaName,
+ OUString tableName,
const Sequence< OUString > &columnNames,
const Sequence< OUString > &foreignColumnNames )
- : Container( refMutex, origin, pSettings, "KEY_COLUMN" ),
- m_schemaName( schemaName ),
- m_tableName( tableName ),
+ : Container( refMutex, origin, pSettings, u"KEY_COLUMN"_ustr ),
+ m_schemaName(std::move( schemaName )),
+ m_tableName(std::move( tableName )),
m_columnNames( columnNames ),
m_foreignColumnNames( foreignColumnNames )
{}
@@ -120,17 +120,16 @@ void KeyColumns::refresh()
rtl::Reference<KeyColumn> pKeyColumn =
new KeyColumn( m_xMutex, m_origin, m_pSettings );
- Reference< css::beans::XPropertySet > prop = pKeyColumn;
OUString name = columnMetaData2SDBCX( pKeyColumn.get(), xRow );
if( keyindex < m_foreignColumnNames.getLength() )
{
pKeyColumn->setPropertyValue_NoBroadcast_public(
- st.RELATED_COLUMN, makeAny( m_foreignColumnNames[keyindex]) );
+ st.RELATED_COLUMN, Any( m_foreignColumnNames[keyindex]) );
}
{
- m_values.push_back( makeAny( prop ) );
+ m_values.emplace_back(Reference< css::beans::XPropertySet >(pKeyColumn));
map[ name ] = columnIndex;
++columnIndex;
}
@@ -152,7 +151,7 @@ void KeyColumns::appendByDescriptor(
const css::uno::Reference< css::beans::XPropertySet >& )
{
throw css::sdbc::SQLException(
- "KeyColumns::appendByDescriptor not implemented yet",
+ u"KeyColumns::appendByDescriptor not implemented yet"_ustr,
*this, OUString(), 1, Any() );
// osl::MutexGuard guard( m_xMutex->GetMutex() );
@@ -168,7 +167,7 @@ void KeyColumns::appendByDescriptor(
void KeyColumns::dropByIndex( sal_Int32 )
{
throw css::sdbc::SQLException(
- "KeyColumns::dropByIndex not implemented yet",
+ u"KeyColumns::dropByIndex not implemented yet"_ustr,
*this, OUString(), 1, Any() );
// osl::MutexGuard guard( m_xMutex->GetMutex() );
// if( index < 0 || index >= m_values.getLength() )
@@ -227,7 +226,7 @@ KeyColumnDescriptors::KeyColumnDescriptors(
const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const css::uno::Reference< css::sdbc::XConnection > & origin,
ConnectionSettings *pSettings )
- : Container( refMutex, origin, pSettings, "KEY_COLUMN" )
+ : Container( refMutex, origin, pSettings, u"KEY_COLUMN"_ustr )
{}
Reference< css::beans::XPropertySet > KeyColumnDescriptors::createDataDescriptor()
diff --git a/connectivity/source/drivers/postgresql/pq_xkeycolumns.hxx b/connectivity/source/drivers/postgresql/pq_xkeycolumns.hxx
index 0c56fd189e9a..60bbd0c0de36 100644
--- a/connectivity/source/drivers/postgresql/pq_xkeycolumns.hxx
+++ b/connectivity/source/drivers/postgresql/pq_xkeycolumns.hxx
@@ -63,8 +63,8 @@ private:
const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const css::uno::Reference< css::sdbc::XConnection > & origin,
ConnectionSettings *pSettings,
- const OUString &schemaName,
- const OUString &tableName,
+ OUString schemaName,
+ OUString tableName,
const css::uno::Sequence< OUString > &keyColumns,
const css::uno::Sequence< OUString > &foreignColumnNames);
diff --git a/connectivity/source/drivers/postgresql/pq_xkeys.cxx b/connectivity/source/drivers/postgresql/pq_xkeys.cxx
index 84507202fa9a..5dde7d22fdf5 100644
--- a/connectivity/source/drivers/postgresql/pq_xkeys.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xkeys.cxx
@@ -49,6 +49,8 @@
#include <com/sun/star/sdbc/KeyRule.hpp>
#include <com/sun/star/sdbcx/KeyType.hpp>
#include <cppuhelper/exc_hlp.hxx>
+#include <o3tl/safeint.hxx>
+#include <utility>
#include "pq_xkeys.hxx"
#include "pq_xkey.hxx"
@@ -60,7 +62,7 @@ using osl::MutexGuard;
using css::beans::XPropertySet;
-using com::sun::star::uno::makeAny;
+using com::sun::star::uno::Any;
using com::sun::star::uno::UNO_QUERY;
using com::sun::star::uno::Reference;
@@ -78,11 +80,11 @@ Keys::Keys(
const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const css::uno::Reference< css::sdbc::XConnection > & origin,
ConnectionSettings *pSettings,
- const OUString &schemaName,
- const OUString &tableName)
+ OUString schemaName,
+ OUString tableName)
: Container( refMutex, origin, pSettings, getStatics().KEY ),
- m_schemaName( schemaName ),
- m_tableName( tableName )
+ m_schemaName(std::move( schemaName )),
+ m_tableName(std::move( tableName ))
{}
Keys::~Keys()
@@ -125,7 +127,7 @@ void Keys::refresh()
fillAttnum2attnameMap( mainMap, m_origin, m_schemaName, m_tableName );
Reference< XPreparedStatement > stmt = m_origin->prepareStatement(
- "SELECT conname, " // 1
+ u"SELECT conname, " // 1
"contype, " // 2
"confupdtype, " // 3
"confdeltype, " // 4
@@ -137,7 +139,7 @@ void Keys::refresh()
"INNER JOIN pg_namespace ON pg_class.relnamespace = pg_namespace.oid "
"LEFT JOIN pg_class AS class2 ON confrelid = class2.oid "
"LEFT JOIN pg_namespace AS nmsp2 ON class2.relnamespace=nmsp2.oid "
- "WHERE pg_class.relname = ? AND pg_namespace.nspname = ?" );
+ "WHERE pg_class.relname = ? AND pg_namespace.nspname = ?"_ustr );
Reference< XParameters > paras( stmt, UNO_QUERY );
paras->setString( 1 , m_tableName );
@@ -153,19 +155,18 @@ void Keys::refresh()
{
rtl::Reference<Key> pKey =
new Key( m_xMutex, m_origin, m_pSettings , m_schemaName, m_tableName );
- Reference< css::beans::XPropertySet > prop = pKey;
pKey->setPropertyValue_NoBroadcast_public(
- st.NAME, makeAny( xRow->getString( 1 ) ) );
+ st.NAME, Any( xRow->getString( 1 ) ) );
sal_Int32 keyType = string2keytype( xRow->getString(2) );
- pKey->setPropertyValue_NoBroadcast_public( st.TYPE, makeAny( keyType ) );
+ pKey->setPropertyValue_NoBroadcast_public( st.TYPE, Any( keyType ) );
pKey->setPropertyValue_NoBroadcast_public(
- st.UPDATE_RULE, makeAny( string2keyrule( xRow->getString(3) ) ) );
+ st.UPDATE_RULE, Any( string2keyrule( xRow->getString(3) ) ) );
pKey->setPropertyValue_NoBroadcast_public(
- st.DELETE_RULE, makeAny( string2keyrule( xRow->getString(4) ) ) );
+ st.DELETE_RULE, Any( string2keyrule( xRow->getString(4) ) ) );
pKey->setPropertyValue_NoBroadcast_public(
st.PRIVATE_COLUMNS,
- makeAny(
+ Any(
convertMappedIntArray2StringArray(
mainMap,
string2intarray( xRow->getString( 7 ) ) ) ) );
@@ -174,13 +175,13 @@ void Keys::refresh()
{
OUString buf = xRow->getString( 6 ) + "." + xRow->getString( 5 );
pKey->setPropertyValue_NoBroadcast_public(
- st.REFERENCED_TABLE, makeAny( buf ) );
+ st.REFERENCED_TABLE, Any( buf ) );
Int2StringMap foreignMap;
fillAttnum2attnameMap( foreignMap, m_origin, xRow->getString(6), xRow->getString(5));
pKey->setPropertyValue_NoBroadcast_public(
st.PRIVATE_FOREIGN_COLUMNS,
- makeAny(
+ Any(
convertMappedIntArray2StringArray(
foreignMap,
string2intarray( xRow->getString(8) ) ) ) );
@@ -189,7 +190,7 @@ void Keys::refresh()
{
map[ xRow->getString( 1 ) ] = keyIndex;
- m_values.push_back( makeAny( prop ) );
+ m_values.push_back( Any( Reference< css::beans::XPropertySet >(pKey) ) );
++keyIndex;
}
}
@@ -226,7 +227,7 @@ void Keys::appendByDescriptor(
void Keys::dropByIndex( sal_Int32 index )
{
osl::MutexGuard guard( m_xMutex->GetMutex() );
- if( index < 0 || index >= static_cast<sal_Int32>(m_values.size()) )
+ if( index < 0 || o3tl::make_unsigned(index) >= m_values.size() )
{
throw css::lang::IndexOutOfBoundsException(
"TABLES: Index out of range (allowed 0 to " + OUString::number(m_values.size() -1)
diff --git a/connectivity/source/drivers/postgresql/pq_xkeys.hxx b/connectivity/source/drivers/postgresql/pq_xkeys.hxx
index fe1afef35a4b..ef6376d4d780 100644
--- a/connectivity/source/drivers/postgresql/pq_xkeys.hxx
+++ b/connectivity/source/drivers/postgresql/pq_xkeys.hxx
@@ -58,8 +58,8 @@ private:
const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex,
const css::uno::Reference< css::sdbc::XConnection > & origin,
ConnectionSettings *pSettings,
- const OUString &schemaName,
- const OUString &tableName);
+ OUString schemaName,
+ OUString tableName);
virtual ~Keys() override;
diff --git a/connectivity/source/drivers/postgresql/pq_xtable.cxx b/connectivity/source/drivers/postgresql/pq_xtable.cxx
index 9ac52f1df0ff..de8196f9fecd 100644
--- a/connectivity/source/drivers/postgresql/pq_xtable.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xtable.cxx
@@ -60,7 +60,6 @@ using com::sun::star::uno::Reference;
using com::sun::star::uno::UNO_QUERY;
using com::sun::star::uno::Sequence;
using com::sun::star::uno::Any;
-using com::sun::star::uno::makeAny;
using com::sun::star::uno::Type;
using com::sun::star::beans::XPropertySet;
@@ -168,7 +167,7 @@ void Table::rename( const OUString& newName )
if( Xrename.is() )
{
Xrename->rename( newName );
- setPropertyValue_NoBroadcast_public( st.SCHEMA_NAME, makeAny(newSchemaName) );
+ setPropertyValue_NoBroadcast_public( st.SCHEMA_NAME, Any(newSchemaName) );
}
}
else
@@ -185,14 +184,13 @@ void Table::rename( const OUString& newName )
bufferQuoteIdentifier( buf, newSchemaName, m_pSettings );
Reference< XStatement > statement = m_conn->createStatement();
statement->executeUpdate( buf.makeStringAndClear() );
- setPropertyValue_NoBroadcast_public( st.SCHEMA_NAME, makeAny(newSchemaName) );
+ setPropertyValue_NoBroadcast_public( st.SCHEMA_NAME, Any(newSchemaName) );
disposeNoThrow( statement );
schema = newSchemaName;
}
catch( css::sdbc::SQLException &e )
{
- OUString buf( e.Message + "(NOTE: Only postgresql server >= V8.1 support changing a table's schema)" );
- e.Message = buf;
+ e.Message += "(NOTE: Only postgresql server >= V8.1 support changing a table's schema)";
throw;
}
@@ -209,7 +207,7 @@ void Table::rename( const OUString& newName )
disposeNoThrow( statement );
}
}
- setPropertyValue_NoBroadcast_public( st.NAME, makeAny(newTableName) );
+ setPropertyValue_NoBroadcast_public( st.NAME, Any(newTableName) );
// inform the container of the name change !
if( m_pSettings->tables.is() )
{
diff --git a/connectivity/source/drivers/postgresql/pq_xtable.hxx b/connectivity/source/drivers/postgresql/pq_xtable.hxx
index dc1577612db8..178bc9d04888 100644
--- a/connectivity/source/drivers/postgresql/pq_xtable.hxx
+++ b/connectivity/source/drivers/postgresql/pq_xtable.hxx
@@ -36,25 +36,18 @@
#pragma once
-#include <cppuhelper/component.hxx>
-#include <cppuhelper/propshlp.hxx>
-
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp>
#include <com/sun/star/sdbcx/XColumnsSupplier.hpp>
#include <com/sun/star/sdbcx/XIndexesSupplier.hpp>
#include <com/sun/star/sdbcx/XKeysSupplier.hpp>
#include <com/sun/star/sdbcx/XRename.hpp>
#include <com/sun/star/sdbcx/XAlterTable.hpp>
-#include <com/sun/star/container/XNamed.hpp>
#include "pq_xbase.hxx"
+#include "pq_xcolumns.hxx"
namespace pq_sdbc_driver
{
-class Columns;
-
class Table : public ReflectionBase,
public css::sdbcx::XColumnsSupplier,
public css::sdbcx::XIndexesSupplier,
@@ -122,7 +115,7 @@ class TableDescriptor
public css::sdbcx::XIndexesSupplier,
public css::sdbcx::XKeysSupplier
{
- css::uno::Reference< css::container::XNameAccess > m_columns;
+ rtl::Reference<ColumnDescriptors> m_columns;
css::uno::Reference< css::container::XIndexAccess > m_keys;
css::uno::Reference< css::container::XNameAccess > m_indexes;
diff --git a/connectivity/source/drivers/postgresql/pq_xtables.cxx b/connectivity/source/drivers/postgresql/pq_xtables.cxx
index 47606669dd40..6b5214bf9596 100644
--- a/connectivity/source/drivers/postgresql/pq_xtables.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xtables.cxx
@@ -43,6 +43,7 @@
#include <com/sun/star/sdbcx/Privilege.hpp>
#include <com/sun/star/sdbc/DataType.hpp>
#include <cppuhelper/exc_hlp.hxx>
+#include <o3tl/safeint.hxx>
#include "pq_xtables.hxx"
#include "pq_xviews.hxx"
@@ -55,7 +56,6 @@ using osl::MutexGuard;
using com::sun::star::beans::XPropertySet;
using com::sun::star::uno::Any;
-using com::sun::star::uno::makeAny;
using com::sun::star::uno::UNO_QUERY;
using com::sun::star::uno::Reference;
using com::sun::star::uno::Sequence;
@@ -106,21 +106,20 @@ void Tables::refresh()
// instead offer a factory interface
rtl::Reference<Table> pTable =
new Table( m_xMutex, m_origin, m_pSettings );
- Reference< css::beans::XPropertySet > prop = pTable;
OUString name = xRow->getString( TABLE_INDEX_NAME+1);
OUString schema = xRow->getString( TABLE_INDEX_SCHEMA+1);
pTable->setPropertyValue_NoBroadcast_public(
- st.CATALOG_NAME , makeAny(xRow->getString( TABLE_INDEX_CATALOG+1) ) );
- pTable->setPropertyValue_NoBroadcast_public( st.NAME , makeAny( name ) );
- pTable->setPropertyValue_NoBroadcast_public( st.SCHEMA_NAME , makeAny( schema ));
+ st.CATALOG_NAME , Any(xRow->getString( TABLE_INDEX_CATALOG+1) ) );
+ pTable->setPropertyValue_NoBroadcast_public( st.NAME , Any( name ) );
+ pTable->setPropertyValue_NoBroadcast_public( st.SCHEMA_NAME , Any( schema ));
pTable->setPropertyValue_NoBroadcast_public(
- st.TYPE , makeAny( xRow->getString( TABLE_INDEX_TYPE+1) ) );
+ st.TYPE , Any( xRow->getString( TABLE_INDEX_TYPE+1) ) );
pTable->setPropertyValue_NoBroadcast_public(
- st.DESCRIPTION , makeAny( xRow->getString( TABLE_INDEX_REMARKS+1) ) );
+ st.DESCRIPTION , Any( xRow->getString( TABLE_INDEX_REMARKS+1) ) );
pTable->setPropertyValue_NoBroadcast_public(
st.PRIVILEGES ,
- makeAny( sal_Int32( css::sdbcx::Privilege::SELECT |
+ Any( sal_Int32( css::sdbcx::Privilege::SELECT |
css::sdbcx::Privilege::INSERT |
css::sdbcx::Privilege::UPDATE |
css::sdbcx::Privilege::DELETE |
@@ -131,7 +130,7 @@ void Tables::refresh()
css::sdbcx::Privilege::DROP ) ) );
{
- m_values.push_back( makeAny( prop ) );
+ m_values.push_back( Any( Reference< css::beans::XPropertySet >(pTable) ) );
map[ schema + "." + name ] = tableIndex;
++tableIndex;
}
@@ -311,7 +310,7 @@ void Tables::appendByDescriptor(
void Tables::dropByIndex( sal_Int32 index )
{
osl::MutexGuard guard( m_xMutex->GetMutex() );
- if( index < 0 || index >= static_cast<sal_Int32>(m_values.size()) )
+ if( index < 0 || o3tl::make_unsigned(index) >= m_values.size() )
{
throw css::lang::IndexOutOfBoundsException(
"TABLES: Index out of range (allowed 0 to " + OUString::number(m_values.size() -1)
diff --git a/connectivity/source/drivers/postgresql/pq_xuser.cxx b/connectivity/source/drivers/postgresql/pq_xuser.cxx
index 4d0a01f6366f..2165c7e3d528 100644
--- a/connectivity/source/drivers/postgresql/pq_xuser.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xuser.cxx
@@ -134,13 +134,13 @@ sal_Int32 User::getGrantablePrivileges( const OUString&, sal_Int32 )
void User::grantPrivileges( const OUString&, sal_Int32, sal_Int32 )
{
- throw css::sdbc::SQLException("pq_driver: privilege change not implemented yet",
+ throw css::sdbc::SQLException(u"pq_driver: privilege change not implemented yet"_ustr,
*this, OUString(), 1, Any() );
}
void User::revokePrivileges( const OUString&, sal_Int32, sal_Int32 )
{
- throw css::sdbc::SQLException("pq_driver: privilege change not implemented yet",
+ throw css::sdbc::SQLException(u"pq_driver: privilege change not implemented yet"_ustr,
*this, OUString(), 1, Any() );
}
diff --git a/connectivity/source/drivers/postgresql/pq_xuser.hxx b/connectivity/source/drivers/postgresql/pq_xuser.hxx
index 8072cae415bb..702787a67496 100644
--- a/connectivity/source/drivers/postgresql/pq_xuser.hxx
+++ b/connectivity/source/drivers/postgresql/pq_xuser.hxx
@@ -36,11 +36,6 @@
#pragma once
-#include <cppuhelper/component.hxx>
-#include <cppuhelper/propshlp.hxx>
-
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp>
#include <com/sun/star/sdbcx/XUser.hpp>
#include "pq_xbase.hxx"
diff --git a/connectivity/source/drivers/postgresql/pq_xusers.cxx b/connectivity/source/drivers/postgresql/pq_xusers.cxx
index bc8b62b1d5b4..5a80ee8727ab 100644
--- a/connectivity/source/drivers/postgresql/pq_xusers.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xusers.cxx
@@ -41,6 +41,7 @@
#include <com/sun/star/sdbc/SQLException.hpp>
#include <com/sun/star/sdbc/XRow.hpp>
#include <cppuhelper/exc_hlp.hxx>
+#include <o3tl/safeint.hxx>
#include "pq_xusers.hxx"
#include "pq_xuser.hxx"
@@ -51,7 +52,7 @@ using osl::MutexGuard;
using com::sun::star::beans::XPropertySet;
-using com::sun::star::uno::makeAny;
+using com::sun::star::uno::Any;
using com::sun::star::uno::UNO_QUERY;
using com::sun::star::uno::Reference;
@@ -82,7 +83,7 @@ void Users::refresh()
Reference< XStatement > stmt = m_origin->createStatement();
- Reference< XResultSet > rs = stmt->executeQuery( "SELECT usename FROM pg_shadow" );
+ Reference< XResultSet > rs = stmt->executeQuery( u"SELECT usename FROM pg_shadow"_ustr );
Reference< XRow > xRow( rs , UNO_QUERY );
@@ -94,14 +95,13 @@ void Users::refresh()
{
rtl::Reference<User> pUser =
new User( m_xMutex, m_origin, m_pSettings );
- Reference< css::beans::XPropertySet > prop = pUser;
OUString name = xRow->getString( 1);
pUser->setPropertyValue_NoBroadcast_public(
- st.NAME , makeAny(xRow->getString( TABLE_INDEX_CATALOG+1) ) );
+ st.NAME , Any(xRow->getString( TABLE_INDEX_CATALOG+1) ) );
{
- m_values.push_back( makeAny( prop ) );
+ m_values.push_back( Any( Reference< css::beans::XPropertySet >(pUser) ) );
map[ name ] = tableIndex;
++tableIndex;
}
@@ -151,7 +151,7 @@ void Users::dropByIndex( sal_Int32 index )
{
osl::MutexGuard guard( m_xMutex->GetMutex() );
- if( index < 0 || index >= static_cast<sal_Int32>(m_values.size()) )
+ if( index < 0 || o3tl::make_unsigned(index) >= m_values.size() )
{
throw css::lang::IndexOutOfBoundsException(
"USERS: Index out of range (allowed 0 to "
diff --git a/connectivity/source/drivers/postgresql/pq_xview.cxx b/connectivity/source/drivers/postgresql/pq_xview.cxx
index 3652cdee634f..c2e936e9a314 100644
--- a/connectivity/source/drivers/postgresql/pq_xview.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xview.cxx
@@ -52,7 +52,6 @@ using osl::MutexGuard;
using com::sun::star::uno::Reference;
using com::sun::star::uno::Sequence;
using com::sun::star::uno::Any;
-using com::sun::star::uno::makeAny;
using com::sun::star::uno::Type;
using com::sun::star::beans::XPropertySet;
@@ -121,14 +120,13 @@ void View::rename( const OUString& newName )
bufferQuoteIdentifier( buf, newSchemaName, m_pSettings );
Reference< XStatement > statement = m_conn->createStatement();
statement->executeUpdate( buf.makeStringAndClear() );
- setPropertyValue_NoBroadcast_public( st.SCHEMA_NAME, makeAny(newSchemaName) );
+ setPropertyValue_NoBroadcast_public( st.SCHEMA_NAME, Any(newSchemaName) );
disposeNoThrow( statement );
schema = newSchemaName;
}
catch( css::sdbc::SQLException &e )
{
- OUString buf( e.Message + "(NOTE: Only postgresql server >= V8.1 support changing a table's schema)" );
- e.Message = buf;
+ e.Message += "(NOTE: Only postgresql server >= V8.1 support changing a table's schema)";
throw;
}
@@ -142,7 +140,7 @@ void View::rename( const OUString& newName )
bufferQuoteIdentifier( buf, newTableName, m_pSettings );
Reference< XStatement > statement = m_conn->createStatement();
statement->executeUpdate( buf.makeStringAndClear() );
- setPropertyValue_NoBroadcast_public( st.NAME, makeAny(newTableName) );
+ setPropertyValue_NoBroadcast_public( st.NAME, Any(newTableName) );
}
// inform the container of the name change !
diff --git a/connectivity/source/drivers/postgresql/pq_xview.hxx b/connectivity/source/drivers/postgresql/pq_xview.hxx
index 055fd921864f..f68b5535a8d7 100644
--- a/connectivity/source/drivers/postgresql/pq_xview.hxx
+++ b/connectivity/source/drivers/postgresql/pq_xview.hxx
@@ -36,13 +36,7 @@
#pragma once
-#include <cppuhelper/component.hxx>
-#include <cppuhelper/propshlp.hxx>
-
-#include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp>
#include <com/sun/star/sdbcx/XRename.hpp>
-#include <com/sun/star/container/XNamed.hpp>
#include "pq_xbase.hxx"
diff --git a/connectivity/source/drivers/postgresql/pq_xviews.cxx b/connectivity/source/drivers/postgresql/pq_xviews.cxx
index d71219fa6420..9d0d875510ad 100644
--- a/connectivity/source/drivers/postgresql/pq_xviews.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xviews.cxx
@@ -41,6 +41,7 @@
#include <com/sun/star/sdbc/SQLException.hpp>
#include <com/sun/star/sdbc/XRow.hpp>
#include <cppuhelper/exc_hlp.hxx>
+#include <o3tl/safeint.hxx>
#include "pq_xviews.hxx"
#include "pq_xview.hxx"
@@ -52,7 +53,7 @@ using osl::MutexGuard;
using com::sun::star::beans::XPropertySet;
-using com::sun::star::uno::makeAny;
+using com::sun::star::uno::Any;
using com::sun::star::uno::UNO_QUERY;
using com::sun::star::uno::Reference;
@@ -84,7 +85,7 @@ void Views::refresh()
Reference< XStatement > stmt = m_origin->createStatement();
- Reference< XResultSet > rs = stmt->executeQuery("SELECT "
+ Reference< XResultSet > rs = stmt->executeQuery(u"SELECT "
"DISTINCT ON( pg_namespace.nspname, relname) " // needed because of duplicates
"pg_namespace.nspname," // 1
"relname," // 2
@@ -92,7 +93,7 @@ void Views::refresh()
"FROM pg_namespace, pg_class, pg_rewrite "
"WHERE pg_namespace.oid = relnamespace "
"AND pg_class.oid = ev_class "
- "AND relkind=\'v\'" );
+ "AND relkind=\'v\'"_ustr );
Reference< XRow > xRow( rs , UNO_QUERY );
@@ -108,14 +109,13 @@ void Views::refresh()
command = xRow->getString( 3 );
rtl::Reference<View> pView = new View (m_xMutex, m_origin, m_pSettings );
- Reference< css::beans::XPropertySet > prop = pView;
- pView->setPropertyValue_NoBroadcast_public(st.NAME , makeAny(table) );
- pView->setPropertyValue_NoBroadcast_public(st.SCHEMA_NAME, makeAny(schema) );
- pView->setPropertyValue_NoBroadcast_public(st.COMMAND, makeAny(command) );
+ pView->setPropertyValue_NoBroadcast_public(st.NAME , Any(table) );
+ pView->setPropertyValue_NoBroadcast_public(st.SCHEMA_NAME, Any(schema) );
+ pView->setPropertyValue_NoBroadcast_public(st.COMMAND, Any(command) );
{
- m_values.push_back( makeAny( prop ) );
+ m_values.push_back( Any( Reference< css::beans::XPropertySet >(pView) ) );
map[ schema + "." + table ] = viewIndex;
++viewIndex;
}
@@ -175,7 +175,7 @@ void Views::dropByName( const OUString& elementName )
void Views::dropByIndex( sal_Int32 index )
{
osl::MutexGuard guard( m_xMutex->GetMutex() );
- if( index < 0 || index >= static_cast<sal_Int32>(m_values.size()) )
+ if( index < 0 || o3tl::make_unsigned(index) >= m_values.size() )
{
throw css::lang::IndexOutOfBoundsException(
"VIEWS: Index out of range (allowed 0 to " + OUString::number(m_values.size() -1)
diff --git a/connectivity/source/drivers/writer/WCatalog.cxx b/connectivity/source/drivers/writer/WCatalog.cxx
index 8671af7bd5d9..b0e326d96d6f 100644
--- a/connectivity/source/drivers/writer/WCatalog.cxx
+++ b/connectivity/source/drivers/writer/WCatalog.cxx
@@ -41,7 +41,8 @@ void OWriterCatalog::refreshTables()
::std::vector<OUString> aVector;
uno::Sequence<OUString> aTypes;
OWriterConnection::ODocHolder aDocHolder(static_cast<OWriterConnection*>(m_pConnection));
- uno::Reference<sdbc::XResultSet> xResult = m_xMetaData->getTables(uno::Any(), "%", "%", aTypes);
+ uno::Reference<sdbc::XResultSet> xResult
+ = m_xMetaData->getTables(uno::Any(), u"%"_ustr, u"%"_ustr, aTypes);
if (xResult.is())
{
diff --git a/connectivity/source/drivers/writer/WConnection.cxx b/connectivity/source/drivers/writer/WConnection.cxx
index 385692951518..0f23b315beca 100644
--- a/connectivity/source/drivers/writer/WConnection.cxx
+++ b/connectivity/source/drivers/writer/WConnection.cxx
@@ -32,7 +32,7 @@
#include <unotools/pathoptions.hxx>
#include <connectivity/dbexception.hxx>
#include <cppuhelper/exc_hlp.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
using namespace ::com::sun::star;
@@ -42,7 +42,6 @@ namespace connectivity::writer
{
OWriterConnection::OWriterConnection(ODriver* _pDriver)
: OConnection(_pDriver)
- , m_nDocCount(0)
{
}
@@ -55,9 +54,9 @@ void OWriterConnection::construct(const OUString& rURL,
sal_Int32 nLen = rURL.indexOf(':');
nLen = rURL.indexOf(':', nLen + 1);
- OUString aDSN(rURL.copy(nLen + 1));
- m_aFileName = aDSN;
+ m_aFileName = rURL.copy(nLen + 1); // DSN
+
INetURLObject aURL;
aURL.SetSmartProtocol(INetProtocol::File);
{
@@ -116,7 +115,7 @@ uno::Reference<text::XTextDocument> const& OWriterConnection::acquireDoc()
uno::Any aLoaderException;
try
{
- xComponent = xDesktop->loadComponentFromURL(m_aFileName, "_blank", 0, aArgs);
+ xComponent = xDesktop->loadComponentFromURL(m_aFileName, u"_blank"_ustr, 0, aArgs);
}
catch (const uno::Exception&)
{
@@ -178,8 +177,8 @@ void OWriterConnection::disposing()
// XServiceInfo
-IMPLEMENT_SERVICE_INFO(OWriterConnection, "com.sun.star.sdbc.drivers.writer.Connection",
- "com.sun.star.sdbc.Connection")
+IMPLEMENT_SERVICE_INFO(OWriterConnection, u"com.sun.star.sdbc.drivers.writer.Connection"_ustr,
+ u"com.sun.star.sdbc.Connection"_ustr)
uno::Reference<sdbc::XDatabaseMetaData> SAL_CALL OWriterConnection::getMetaData()
{
@@ -199,11 +198,11 @@ uno::Reference<sdbc::XDatabaseMetaData> SAL_CALL OWriterConnection::getMetaData(
css::uno::Reference<css::sdbcx::XTablesSupplier> OWriterConnection::createCatalog()
{
::osl::MutexGuard aGuard(m_aMutex);
- uno::Reference<css::sdbcx::XTablesSupplier> xTab = m_xCatalog;
+ rtl::Reference<connectivity::sdbcx::OCatalog> xTab = m_xCatalog;
if (!xTab.is())
{
xTab = new OWriterCatalog(this);
- m_xCatalog = xTab;
+ m_xCatalog = xTab.get();
}
return xTab;
}
@@ -214,7 +213,7 @@ uno::Reference<sdbc::XStatement> SAL_CALL OWriterConnection::createStatement()
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
uno::Reference<sdbc::XStatement> xReturn = new component::OComponentStatement(this);
- m_aStatements.push_back(uno::WeakReferenceHelper(xReturn));
+ m_aStatements.emplace_back(xReturn);
return xReturn;
}
@@ -227,7 +226,7 @@ uno::Reference<sdbc::XPreparedStatement>
rtl::Reference<component::OComponentPreparedStatement> pStmt
= new component::OComponentPreparedStatement(this);
pStmt->construct(sql);
- m_aStatements.push_back(uno::WeakReferenceHelper(*pStmt));
+ m_aStatements.emplace_back(*pStmt);
return pStmt;
}
@@ -237,8 +236,7 @@ uno::Reference<sdbc::XPreparedStatement>
::osl::MutexGuard aGuard(m_aMutex);
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- ::dbtools::throwFeatureNotImplementedSQLException("XConnection::prepareCall", *this);
- return nullptr;
+ ::dbtools::throwFeatureNotImplementedSQLException(u"XConnection::prepareCall"_ustr, *this);
}
} // namespace
diff --git a/connectivity/source/drivers/writer/WDatabaseMetaData.cxx b/connectivity/source/drivers/writer/WDatabaseMetaData.cxx
index e9b230be3fb5..29a6ab9379e2 100644
--- a/connectivity/source/drivers/writer/WDatabaseMetaData.cxx
+++ b/connectivity/source/drivers/writer/WDatabaseMetaData.cxx
@@ -53,7 +53,7 @@ uno::Reference<sdbc::XResultSet> SAL_CALL OWriterDatabaseMetaData::getTables(
// check if ORowSetValue type is given
// when no types are given then we have to return all tables e.g. TABLE
- OUString aTable("TABLE");
+ OUString aTable(u"TABLE"_ustr);
bool bTableFound = true;
sal_Int32 nLength = types.getLength();
@@ -90,14 +90,15 @@ uno::Reference<sdbc::XResultSet> SAL_CALL OWriterDatabaseMetaData::getTables(
sal_Int32 nTableCount = aTableNames.getLength();
for (sal_Int32 nTable = 0; nTable < nTableCount; nTable++)
{
- OUString aName = aTableNames[nTable];
- if (match(tableNamePattern, aName, '\0'))
+ const OUString& rName = aTableNames[nTable];
+ if (match(tableNamePattern, rName, '\0'))
{
- ODatabaseMetaDataResultSet::ORow aRow{ nullptr, nullptr, nullptr };
- aRow.reserve(6);
- aRow.push_back(new ORowSetValueDecorator(aName));
- aRow.push_back(new ORowSetValueDecorator(aTable));
- aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue());
+ ODatabaseMetaDataResultSet::ORow aRow{ nullptr,
+ nullptr,
+ nullptr,
+ new ORowSetValueDecorator(rName),
+ new ORowSetValueDecorator(aTable),
+ ODatabaseMetaDataResultSet::getEmptyValue() };
aRows.push_back(aRow);
}
}
diff --git a/connectivity/source/drivers/writer/WDriver.cxx b/connectivity/source/drivers/writer/WDriver.cxx
index fa3a3dcf685a..daa94aa43f9c 100644
--- a/connectivity/source/drivers/writer/WDriver.cxx
+++ b/connectivity/source/drivers/writer/WDriver.cxx
@@ -31,24 +31,21 @@ namespace connectivity::writer
{
OUString SAL_CALL ODriver::getImplementationName()
{
- return "com.sun.star.comp.sdbc.writer.ODriver";
+ return u"com.sun.star.comp.sdbc.writer.ODriver"_ustr;
}
extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
connectivity_writer_ODriver(css::uno::XComponentContext* context,
css::uno::Sequence<css::uno::Any> const& /*rArguments*/)
{
- rtl::Reference<ODriver> ret;
try
{
- ret = new ODriver(context);
+ return acquire(new ODriver(context));
}
catch (...)
{
}
- if (ret)
- ret->acquire();
- return static_cast<cppu::OWeakObject*>(ret.get());
+ return nullptr;
}
uno::Reference<sdbc::XConnection>
@@ -63,7 +60,7 @@ uno::Reference<sdbc::XConnection>
rtl::Reference<OWriterConnection> pCon = new OWriterConnection(this);
pCon->construct(url, info);
- m_xConnections.push_back(uno::WeakReferenceHelper(*pCon));
+ m_xConnections.push_back(pCon.get());
return pCon;
}
diff --git a/connectivity/source/drivers/writer/WTable.cxx b/connectivity/source/drivers/writer/WTable.cxx
index 2f76fc4a09d0..2f0f44855d86 100644
--- a/connectivity/source/drivers/writer/WTable.cxx
+++ b/connectivity/source/drivers/writer/WTable.cxx
@@ -30,7 +30,6 @@
#include <writer/WConnection.hxx>
#include <connectivity/sdbcx/VColumn.hxx>
#include <sal/log.hxx>
-#include <comphelper/servicehelper.hxx>
namespace com::sun::star::text
{
@@ -171,9 +170,6 @@ OWriterTable::OWriterTable(sdbcx::OCollection* _pTables, OWriterConnection* _pCo
: OWriterTable_BASE(_pTables, _pConnection, Name, Type, OUString() /*Description*/,
OUString() /*SchemaName*/, OUString() /*CatalogName*/)
, m_pWriterConnection(_pConnection)
- , m_nStartCol(0)
- , m_nDataCols(0)
- , m_bHasHeaders(false)
{
}
@@ -210,18 +206,6 @@ void SAL_CALL OWriterTable::disposing()
m_pWriterConnection = nullptr;
}
-uno::Sequence<sal_Int8> OWriterTable::getUnoTunnelId()
-{
- static const comphelper::UnoIdInit implId;
- return implId.getSeq();
-}
-
-sal_Int64 OWriterTable::getSomething(const uno::Sequence<sal_Int8>& rId)
-{
- return comphelper::getSomethingImpl(rId, this,
- comphelper::FallbackToGetSomethingOf<OWriterTable_BASE>{});
-}
-
bool OWriterTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns& _rCols, bool bRetrieveData)
{
// read the bookmark
diff --git a/connectivity/source/drivers/writer/WTables.cxx b/connectivity/source/drivers/writer/WTables.cxx
index 8b2692d93a01..0d98471217f6 100644
--- a/connectivity/source/drivers/writer/WTables.cxx
+++ b/connectivity/source/drivers/writer/WTables.cxx
@@ -29,13 +29,13 @@ using namespace ::com::sun::star;
namespace connectivity::writer
{
-sdbcx::ObjectType OWriterTables::createObject(const OUString& rName)
+css::uno::Reference<css::beans::XPropertySet> OWriterTables::createObject(const OUString& rName)
{
rtl::Reference<OWriterTable> pTable
= new OWriterTable(this,
static_cast<OWriterConnection*>(
static_cast<file::OFileCatalog&>(m_rParent).getConnection()),
- rName, "TABLE");
+ rName, u"TABLE"_ustr);
pTable->construct();
return pTable;
}