summaryrefslogtreecommitdiff
path: root/connectivity
diff options
context:
space:
mode:
Diffstat (limited to 'connectivity')
-rw-r--r--connectivity/CppunitTest_connectivity_sharedresources.mk1
-rw-r--r--connectivity/IwyuFilter_connectivity.yaml6
-rw-r--r--connectivity/Library_ado.mk3
-rw-r--r--connectivity/Library_calc.mk2
-rw-r--r--connectivity/Library_dbase.mk4
-rw-r--r--connectivity/Library_dbpool2.mk2
-rw-r--r--connectivity/Library_dbtools.mk4
-rw-r--r--connectivity/Library_evoab.mk3
-rw-r--r--connectivity/Library_firebird_sdbc.mk4
-rw-r--r--connectivity/Library_flat.mk2
-rw-r--r--connectivity/Library_hsqldb.mk2
-rw-r--r--connectivity/Library_jdbc.mk2
-rw-r--r--connectivity/Library_macab1.mk2
-rw-r--r--connectivity/Library_mozbootstrap.mk2
-rw-r--r--connectivity/Library_mysql_jdbc.mk3
-rw-r--r--connectivity/Library_mysqlc.mk32
-rw-r--r--connectivity/Library_odbc.mk3
-rw-r--r--connectivity/Library_postgresql-sdbc-impl.mk15
-rw-r--r--connectivity/Library_postgresql-sdbc.mk2
-rw-r--r--connectivity/Library_sdbc2.mk2
-rw-r--r--connectivity/Library_writer.mk2
-rw-r--r--connectivity/README.md16
-rw-r--r--connectivity/Rdb_postgresql-sdbc.mk5
-rw-r--r--connectivity/inc/pch/precompiled_dbase.hxx2
-rw-r--r--connectivity/inc/pch/precompiled_dbtools.hxx2
-rw-r--r--connectivity/inc/pch/precompiled_file.hxx4
-rw-r--r--connectivity/inc/sdbcx/VIndex.hxx5
-rw-r--r--connectivity/inc/sdbcx/VIndexColumn.hxx3
-rw-r--r--connectivity/inc/sdbcx/VKey.hxx7
-rw-r--r--connectivity/inc/sdbcx/VKeyColumn.hxx2
-rw-r--r--connectivity/inc/strings.hrc105
-rw-r--r--connectivity/inc/strings.hxx114
-rw-r--r--connectivity/qa/connectivity/ado/DriverTest.cxx6
-rw-r--r--connectivity/qa/connectivity/mysql/mysql.cxx11
-rw-r--r--connectivity/registry/ado/org/openoffice/Office/DataAccess/Drivers.xcu19
-rw-r--r--connectivity/registry/firebird/org/openoffice/Office/DataAccess/Drivers.xcu9
-rw-r--r--connectivity/registry/flat/org/openoffice/Office/DataAccess/Drivers.xcu2
-rw-r--r--connectivity/registry/macab/org/openoffice/Office/DataAccess/Drivers.xcu2
-rw-r--r--connectivity/registry/mysql_jdbc/org/openoffice/Office/DataAccess/Drivers.xcu84
-rw-r--r--connectivity/registry/mysqlc/org/openoffice/Office/DataAccess/Drivers.xcu12
-rw-r--r--connectivity/source/commontools/AutoRetrievingBase.cxx3
-rw-r--r--connectivity/source/commontools/BlobHelper.cxx14
-rw-r--r--connectivity/source/commontools/CommonTools.cxx25
-rw-r--r--connectivity/source/commontools/ConnectionWrapper.cxx21
-rw-r--r--connectivity/source/commontools/DateConversion.cxx31
-rw-r--r--connectivity/source/commontools/DriversConfig.cxx40
-rw-r--r--connectivity/source/commontools/FDatabaseMetaDataResultSet.cxx167
-rw-r--r--connectivity/source/commontools/FDatabaseMetaDataResultSetMetaData.cxx2
-rw-r--r--connectivity/source/commontools/FValue.cxx67
-rw-r--r--connectivity/source/commontools/ParameterSubstitution.cxx3
-rw-r--r--connectivity/source/commontools/RowFunctionParser.cxx45
-rw-r--r--connectivity/source/commontools/TColumnsHelper.cxx2
-rw-r--r--connectivity/source/commontools/TConnection.cxx15
-rw-r--r--connectivity/source/commontools/TDatabaseMetaDataBase.cxx16
-rw-r--r--connectivity/source/commontools/TIndex.cxx3
-rw-r--r--connectivity/source/commontools/TIndexColumns.cxx2
-rw-r--r--connectivity/source/commontools/TIndexes.cxx13
-rw-r--r--connectivity/source/commontools/TKey.cxx3
-rw-r--r--connectivity/source/commontools/TKeyColumns.cxx2
-rw-r--r--connectivity/source/commontools/TKeys.cxx29
-rw-r--r--connectivity/source/commontools/TPrivilegesResultSet.cxx14
-rw-r--r--connectivity/source/commontools/TSortIndex.cxx8
-rw-r--r--connectivity/source/commontools/TTableHelper.cxx34
-rw-r--r--connectivity/source/commontools/conncleanup.cxx8
-rw-r--r--connectivity/source/commontools/dbcharset.cxx15
-rw-r--r--connectivity/source/commontools/dbconversion.cxx153
-rw-r--r--connectivity/source/commontools/dbexception.cxx73
-rw-r--r--connectivity/source/commontools/dbmetadata.cxx17
-rw-r--r--connectivity/source/commontools/dbtools.cxx135
-rw-r--r--connectivity/source/commontools/dbtools2.cxx116
-rw-r--r--connectivity/source/commontools/filtermanager.cxx17
-rw-r--r--connectivity/source/commontools/formattedcolumnvalue.cxx13
-rw-r--r--connectivity/source/commontools/parameters.cxx189
-rw-r--r--connectivity/source/commontools/paramwrapper.cxx38
-rw-r--r--connectivity/source/commontools/predicateinput.cxx14
-rw-r--r--connectivity/source/commontools/propertyids.cxx1
-rw-r--r--connectivity/source/commontools/sqlerror.cxx19
-rw-r--r--connectivity/source/commontools/statementcomposer.cxx9
-rw-r--r--connectivity/source/commontools/warningscontainer.cxx6
-rw-r--r--connectivity/source/cpool/ZConnectionPool.cxx15
-rw-r--r--connectivity/source/cpool/ZConnectionPool.hxx5
-rw-r--r--connectivity/source/cpool/ZConnectionWrapper.cxx1
-rw-r--r--connectivity/source/cpool/ZDriverWrapper.cxx2
-rw-r--r--connectivity/source/cpool/ZPoolCollection.cxx70
-rw-r--r--connectivity/source/drivers/ado/ACallableStatement.cxx66
-rw-r--r--connectivity/source/drivers/ado/AColumn.cxx34
-rw-r--r--connectivity/source/drivers/ado/AColumns.cxx15
-rw-r--r--connectivity/source/drivers/ado/AConnection.cxx133
-rw-r--r--connectivity/source/drivers/ado/ADatabaseMetaData.cxx94
-rw-r--r--connectivity/source/drivers/ado/ADatabaseMetaDataImpl.cxx81
-rw-r--r--connectivity/source/drivers/ado/ADatabaseMetaDataResultSet.cxx53
-rw-r--r--connectivity/source/drivers/ado/ADatabaseMetaDataResultSetMetaData.cxx5
-rw-r--r--connectivity/source/drivers/ado/ADriver.cxx24
-rw-r--r--connectivity/source/drivers/ado/AGroup.cxx34
-rw-r--r--connectivity/source/drivers/ado/AGroups.cxx2
-rw-r--r--connectivity/source/drivers/ado/AIndex.cxx19
-rw-r--r--connectivity/source/drivers/ado/AIndexes.cxx4
-rw-r--r--connectivity/source/drivers/ado/AKey.cxx29
-rw-r--r--connectivity/source/drivers/ado/AKeys.cxx6
-rw-r--r--connectivity/source/drivers/ado/APreparedStatement.cxx33
-rw-r--r--connectivity/source/drivers/ado/AResultSet.cxx67
-rw-r--r--connectivity/source/drivers/ado/AResultSetMetaData.cxx5
-rw-r--r--connectivity/source/drivers/ado/AStatement.cxx109
-rw-r--r--connectivity/source/drivers/ado/ATable.cxx31
-rw-r--r--connectivity/source/drivers/ado/ATables.cxx12
-rw-r--r--connectivity/source/drivers/ado/AUser.cxx28
-rw-r--r--connectivity/source/drivers/ado/AUsers.cxx5
-rw-r--r--connectivity/source/drivers/ado/AView.cxx26
-rw-r--r--connectivity/source/drivers/ado/AViews.cxx10
-rw-r--r--connectivity/source/drivers/ado/Aolevariant.cxx68
-rw-r--r--connectivity/source/drivers/ado/Awrapado.cxx510
-rw-r--r--connectivity/source/drivers/ado/adoimp.cxx10
-rw-r--r--connectivity/source/drivers/calc/CCatalog.cxx1
-rw-r--r--connectivity/source/drivers/calc/CConnection.cxx43
-rw-r--r--connectivity/source/drivers/calc/CDatabaseMetaData.cxx73
-rw-r--r--connectivity/source/drivers/calc/CDriver.cxx2
-rw-r--r--connectivity/source/drivers/calc/CTable.cxx63
-rw-r--r--connectivity/source/drivers/calc/CTables.cxx5
-rw-r--r--connectivity/source/drivers/component/CColumns.cxx4
-rw-r--r--connectivity/source/drivers/component/CDatabaseMetaData.cxx135
-rw-r--r--connectivity/source/drivers/component/CPreparedStatement.cxx1
-rw-r--r--connectivity/source/drivers/component/CResultSet.cxx2
-rw-r--r--connectivity/source/drivers/component/CStatement.cxx1
-rw-r--r--connectivity/source/drivers/component/CTable.cxx7
-rw-r--r--connectivity/source/drivers/dbase/DCatalog.cxx1
-rw-r--r--connectivity/source/drivers/dbase/DColumns.cxx4
-rw-r--r--connectivity/source/drivers/dbase/DConnection.cxx2
-rw-r--r--connectivity/source/drivers/dbase/DDatabaseMetaData.cxx236
-rw-r--r--connectivity/source/drivers/dbase/DDriver.cxx2
-rw-r--r--connectivity/source/drivers/dbase/DIndex.cxx35
-rw-r--r--connectivity/source/drivers/dbase/DIndexColumns.cxx2
-rw-r--r--connectivity/source/drivers/dbase/DIndexes.cxx17
-rw-r--r--connectivity/source/drivers/dbase/DPreparedStatement.cxx1
-rw-r--r--connectivity/source/drivers/dbase/DResultSet.cxx4
-rw-r--r--connectivity/source/drivers/dbase/DStatement.cxx1
-rw-r--r--connectivity/source/drivers/dbase/DTable.cxx239
-rw-r--r--connectivity/source/drivers/dbase/DTables.cxx10
-rw-r--r--connectivity/source/drivers/dbase/dindexnode.cxx15
-rw-r--r--connectivity/source/drivers/evoab2/EApi.cxx121
-rw-r--r--connectivity/source/drivers/evoab2/EApi.h4
-rw-r--r--connectivity/source/drivers/evoab2/NCatalog.cxx8
-rw-r--r--connectivity/source/drivers/evoab2/NColumns.cxx4
-rw-r--r--connectivity/source/drivers/evoab2/NConnection.cxx1
-rw-r--r--connectivity/source/drivers/evoab2/NConnection.hxx1
-rw-r--r--connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx192
-rw-r--r--connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx2
-rw-r--r--connectivity/source/drivers/evoab2/NDriver.cxx2
-rw-r--r--connectivity/source/drivers/evoab2/NDriver.hxx4
-rw-r--r--connectivity/source/drivers/evoab2/NPreparedStatement.cxx5
-rw-r--r--connectivity/source/drivers/evoab2/NResultSet.cxx196
-rw-r--r--connectivity/source/drivers/evoab2/NResultSet.hxx2
-rw-r--r--connectivity/source/drivers/evoab2/NResultSetMetaData.cxx17
-rw-r--r--connectivity/source/drivers/evoab2/NResultSetMetaData.hxx2
-rw-r--r--connectivity/source/drivers/evoab2/NStatement.cxx100
-rw-r--r--connectivity/source/drivers/evoab2/NTable.cxx13
-rw-r--r--connectivity/source/drivers/evoab2/NTables.cxx5
-rw-r--r--connectivity/source/drivers/evoab2/NTables.hxx5
-rw-r--r--connectivity/source/drivers/file/FCatalog.cxx2
-rw-r--r--connectivity/source/drivers/file/FColumns.cxx4
-rw-r--r--connectivity/source/drivers/file/FConnection.cxx30
-rw-r--r--connectivity/source/drivers/file/FDatabaseMetaData.cxx32
-rw-r--r--connectivity/source/drivers/file/FDateFunctions.cxx26
-rw-r--r--connectivity/source/drivers/file/FDriver.cxx22
-rw-r--r--connectivity/source/drivers/file/FNoException.cxx2
-rw-r--r--connectivity/source/drivers/file/FNumericFunctions.cxx59
-rw-r--r--connectivity/source/drivers/file/FPreparedStatement.cxx5
-rw-r--r--connectivity/source/drivers/file/FResultSet.cxx68
-rw-r--r--connectivity/source/drivers/file/FResultSetMetaData.cxx11
-rw-r--r--connectivity/source/drivers/file/FStatement.cxx23
-rw-r--r--connectivity/source/drivers/file/FStringFunctions.cxx68
-rw-r--r--connectivity/source/drivers/file/FTable.cxx22
-rw-r--r--connectivity/source/drivers/file/FTables.cxx2
-rw-r--r--connectivity/source/drivers/file/fanalyzer.cxx1
-rw-r--r--connectivity/source/drivers/file/fcode.cxx9
-rw-r--r--connectivity/source/drivers/file/fcomp.cxx29
-rw-r--r--connectivity/source/drivers/firebird/Blob.cxx13
-rw-r--r--connectivity/source/drivers/firebird/Blob.hxx4
-rw-r--r--connectivity/source/drivers/firebird/Catalog.cxx17
-rw-r--r--connectivity/source/drivers/firebird/Catalog.hxx3
-rw-r--r--connectivity/source/drivers/firebird/Clob.cxx79
-rw-r--r--connectivity/source/drivers/firebird/Columns.cxx2
-rw-r--r--connectivity/source/drivers/firebird/Connection.cxx191
-rw-r--r--connectivity/source/drivers/firebird/Connection.hxx22
-rw-r--r--connectivity/source/drivers/firebird/DatabaseMetaData.cxx64
-rw-r--r--connectivity/source/drivers/firebird/Driver.cxx41
-rw-r--r--connectivity/source/drivers/firebird/Driver.hxx8
-rw-r--r--connectivity/source/drivers/firebird/Indexes.cxx3
-rw-r--r--connectivity/source/drivers/firebird/PreparedStatement.cxx71
-rw-r--r--connectivity/source/drivers/firebird/ResultSet.cxx37
-rw-r--r--connectivity/source/drivers/firebird/ResultSetMetaData.cxx118
-rw-r--r--connectivity/source/drivers/firebird/Statement.cxx9
-rw-r--r--connectivity/source/drivers/firebird/StatementCommonBase.cxx174
-rw-r--r--connectivity/source/drivers/firebird/StatementCommonBase.hxx4
-rw-r--r--connectivity/source/drivers/firebird/Table.cxx36
-rw-r--r--connectivity/source/drivers/firebird/Table.hxx4
-rw-r--r--connectivity/source/drivers/firebird/Tables.cxx54
-rw-r--r--connectivity/source/drivers/firebird/Tables.hxx7
-rw-r--r--connectivity/source/drivers/firebird/Users.cxx2
-rw-r--r--connectivity/source/drivers/firebird/Util.cxx35
-rw-r--r--connectivity/source/drivers/firebird/Util.hxx12
-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.cxx112
-rw-r--r--connectivity/source/drivers/firebird/Views.hxx42
-rw-r--r--connectivity/source/drivers/flat/ECatalog.cxx1
-rw-r--r--connectivity/source/drivers/flat/EColumns.cxx4
-rw-r--r--connectivity/source/drivers/flat/EConnection.cxx1
-rw-r--r--connectivity/source/drivers/flat/EDatabaseMetaData.cxx14
-rw-r--r--connectivity/source/drivers/flat/EDriver.cxx4
-rw-r--r--connectivity/source/drivers/flat/EPreparedStatement.cxx1
-rw-r--r--connectivity/source/drivers/flat/EResultSet.cxx2
-rw-r--r--connectivity/source/drivers/flat/EStatement.cxx1
-rw-r--r--connectivity/source/drivers/flat/ETable.cxx37
-rw-r--r--connectivity/source/drivers/flat/ETables.cxx7
-rw-r--r--connectivity/source/drivers/hsqldb/HCatalog.cxx3
-rw-r--r--connectivity/source/drivers/hsqldb/HColumns.cxx4
-rw-r--r--connectivity/source/drivers/hsqldb/HConnection.cxx19
-rw-r--r--connectivity/source/drivers/hsqldb/HDriver.cxx69
-rw-r--r--connectivity/source/drivers/hsqldb/HStorageAccess.cxx66
-rw-r--r--connectivity/source/drivers/hsqldb/HStorageMap.cxx6
-rw-r--r--connectivity/source/drivers/hsqldb/HTable.cxx22
-rw-r--r--connectivity/source/drivers/hsqldb/HTables.cxx7
-rw-r--r--connectivity/source/drivers/hsqldb/HTerminateListener.cxx1
-rw-r--r--connectivity/source/drivers/hsqldb/HUser.cxx9
-rw-r--r--connectivity/source/drivers/hsqldb/HUsers.cxx7
-rw-r--r--connectivity/source/drivers/hsqldb/HView.cxx6
-rw-r--r--connectivity/source/drivers/hsqldb/HViews.cxx3
-rw-r--r--connectivity/source/drivers/hsqldb/StorageFileAccess.cxx49
-rw-r--r--connectivity/source/drivers/hsqldb/StorageNativeInputStream.cxx6
-rw-r--r--connectivity/source/drivers/hsqldb/StorageNativeOutputStream.cxx4
-rw-r--r--connectivity/source/drivers/jdbc/Blob.cxx2
-rw-r--r--connectivity/source/drivers/jdbc/CallableStatement.cxx1
-rw-r--r--connectivity/source/drivers/jdbc/Clob.cxx2
-rw-r--r--connectivity/source/drivers/jdbc/ContextClassLoader.cxx54
-rw-r--r--connectivity/source/drivers/jdbc/DatabaseMetaData.cxx7
-rw-r--r--connectivity/source/drivers/jdbc/DriverPropertyInfo.cxx2
-rw-r--r--connectivity/source/drivers/jdbc/JConnection.cxx29
-rw-r--r--connectivity/source/drivers/jdbc/JStatement.cxx101
-rw-r--r--connectivity/source/drivers/jdbc/Object.cxx4
-rw-r--r--connectivity/source/drivers/jdbc/PreparedStatement.cxx3
-rw-r--r--connectivity/source/drivers/jdbc/ResultSet.cxx56
-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.cxx1
-rw-r--r--connectivity/source/drivers/macab/MacabAddressBook.cxx11
-rw-r--r--connectivity/source/drivers/macab/MacabCatalog.cxx2
-rw-r--r--connectivity/source/drivers/macab/MacabConnection.hxx2
-rw-r--r--connectivity/source/drivers/macab/MacabDatabaseMetaData.cxx19
-rw-r--r--connectivity/source/drivers/macab/MacabDriver.cxx4
-rw-r--r--connectivity/source/drivers/macab/MacabDriver.hxx1
-rw-r--r--connectivity/source/drivers/macab/MacabHeader.cxx4
-rw-r--r--connectivity/source/drivers/macab/MacabHeader.hxx1
-rw-r--r--connectivity/source/drivers/macab/MacabPreparedStatement.cxx2
-rw-r--r--connectivity/source/drivers/macab/MacabRecords.cxx185
-rw-r--r--connectivity/source/drivers/macab/MacabRecords.hxx1
-rw-r--r--connectivity/source/drivers/macab/MacabResultSet.cxx65
-rw-r--r--connectivity/source/drivers/macab/MacabResultSetMetaData.cxx1
-rw-r--r--connectivity/source/drivers/macab/MacabResultSetMetaData.hxx1
-rw-r--r--connectivity/source/drivers/macab/MacabStatement.cxx94
-rw-r--r--connectivity/source/drivers/macab/MacabStatement.hxx1
-rw-r--r--connectivity/source/drivers/macab/MacabTable.cxx6
-rw-r--r--connectivity/source/drivers/macab/macabutilities.hxx13
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.cxx2
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSINIParser.cxx7
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx13
-rw-r--r--connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx2
-rw-r--r--connectivity/source/drivers/mysql_jdbc/YCatalog.cxx3
-rw-r--r--connectivity/source/drivers/mysql_jdbc/YColumns.cxx4
-rw-r--r--connectivity/source/drivers/mysql_jdbc/YDriver.cxx82
-rw-r--r--connectivity/source/drivers/mysql_jdbc/YTable.cxx24
-rw-r--r--connectivity/source/drivers/mysql_jdbc/YTables.cxx9
-rw-r--r--connectivity/source/drivers/mysql_jdbc/YUser.cxx9
-rw-r--r--connectivity/source/drivers/mysql_jdbc/YUsers.cxx7
-rw-r--r--connectivity/source/drivers/mysql_jdbc/YViews.cxx3
-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.cxx66
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_connection.hxx31
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx178
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.hxx2
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_driver.cxx23
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_driver.hxx23
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_general.cxx65
-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.cxx104
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx4
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.cxx12
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx2
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx81
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx4
-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.cxx42
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_statement.hxx4
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx6
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_table.cxx167
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_table.hxx69
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_tables.cxx157
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_tables.hxx57
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_types.cxx21
-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.hxx43
-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.cxx113
-rw-r--r--connectivity/source/drivers/mysqlc/mysqlc_views.hxx50
-rw-r--r--connectivity/source/drivers/odbc/OConnection.cxx9
-rw-r--r--connectivity/source/drivers/odbc/ODatabaseMetaData.cxx7
-rw-r--r--connectivity/source/drivers/odbc/ODatabaseMetaDataResultSet.cxx59
-rw-r--r--connectivity/source/drivers/odbc/ODriver.cxx5
-rw-r--r--connectivity/source/drivers/odbc/OPreparedStatement.cxx9
-rw-r--r--connectivity/source/drivers/odbc/OResultSet.cxx98
-rw-r--r--connectivity/source/drivers/odbc/OResultSetMetaData.cxx1
-rw-r--r--connectivity/source/drivers/odbc/OStatement.cxx103
-rw-r--r--connectivity/source/drivers/postgresql/pq_array.cxx2
-rw-r--r--connectivity/source/drivers/postgresql/pq_array.hxx17
-rw-r--r--connectivity/source/drivers/postgresql/pq_connection.cxx19
-rw-r--r--connectivity/source/drivers/postgresql/pq_connection.hxx2
-rw-r--r--connectivity/source/drivers/postgresql/pq_databasemetadata.cxx97
-rw-r--r--connectivity/source/drivers/postgresql/pq_databasemetadata.hxx4
-rw-r--r--connectivity/source/drivers/postgresql/pq_driver.cxx10
-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.cxx24
-rw-r--r--connectivity/source/drivers/postgresql/pq_preparedstatement.hxx2
-rw-r--r--connectivity/source/drivers/postgresql/pq_resultset.cxx9
-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.cxx10
-rw-r--r--connectivity/source/drivers/postgresql/pq_sequenceresultset.hxx4
-rw-r--r--connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.cxx4
-rw-r--r--connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.hxx2
-rw-r--r--connectivity/source/drivers/postgresql/pq_statement.cxx47
-rw-r--r--connectivity/source/drivers/postgresql/pq_statement.hxx2
-rw-r--r--connectivity/source/drivers/postgresql/pq_statics.cxx123
-rw-r--r--connectivity/source/drivers/postgresql/pq_statics.hxx20
-rw-r--r--connectivity/source/drivers/postgresql/pq_tools.cxx99
-rw-r--r--connectivity/source/drivers/postgresql/pq_tools.hxx6
-rw-r--r--connectivity/source/drivers/postgresql/pq_updateableresultset.cxx12
-rw-r--r--connectivity/source/drivers/postgresql/pq_updateableresultset.hxx21
-rw-r--r--connectivity/source/drivers/postgresql/pq_xbase.cxx10
-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.cxx49
-rw-r--r--connectivity/source/drivers/postgresql/pq_xcolumns.hxx4
-rw-r--r--connectivity/source/drivers/postgresql/pq_xcontainer.cxx41
-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.cxx16
-rw-r--r--connectivity/source/drivers/postgresql/pq_xindexcolumns.hxx6
-rw-r--r--connectivity/source/drivers/postgresql/pq_xindexes.cxx22
-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.hxx4
-rw-r--r--connectivity/source/drivers/postgresql/pq_xkeycolumn.cxx1
-rw-r--r--connectivity/source/drivers/postgresql/pq_xkeycolumns.cxx14
-rw-r--r--connectivity/source/drivers/postgresql/pq_xkeycolumns.hxx4
-rw-r--r--connectivity/source/drivers/postgresql/pq_xkeys.cxx30
-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.hxx7
-rw-r--r--connectivity/source/drivers/postgresql/pq_xtables.cxx18
-rw-r--r--connectivity/source/drivers/postgresql/pq_xuser.hxx5
-rw-r--r--connectivity/source/drivers/postgresql/pq_xusers.cxx9
-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.cxx13
-rw-r--r--connectivity/source/drivers/writer/WConnection.cxx28
-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.cxx18
-rw-r--r--connectivity/source/inc/FDatabaseMetaDataResultSet.hxx69
-rw-r--r--connectivity/source/inc/OColumn.hxx5
-rw-r--r--connectivity/source/inc/ParameterSubstitution.hxx2
-rw-r--r--connectivity/source/inc/TConnection.hxx4
-rw-r--r--connectivity/source/inc/TKeyValue.hxx4
-rw-r--r--connectivity/source/inc/TPrivilegesResultSet.hxx4
-rw-r--r--connectivity/source/inc/TSortIndex.hxx4
-rw-r--r--connectivity/source/inc/ado/AColumn.hxx3
-rw-r--r--connectivity/source/inc/ado/AConnection.hxx7
-rw-r--r--connectivity/source/inc/ado/ADatabaseMetaData.hxx2
-rw-r--r--connectivity/source/inc/ado/AGroup.hxx4
-rw-r--r--connectivity/source/inc/ado/AIndex.hxx3
-rw-r--r--connectivity/source/inc/ado/AKey.hxx4
-rw-r--r--connectivity/source/inc/ado/ATable.hxx3
-rw-r--r--connectivity/source/inc/ado/AUser.hxx3
-rw-r--r--connectivity/source/inc/ado/AView.hxx4
-rw-r--r--connectivity/source/inc/ado/Aolevariant.hxx21
-rw-r--r--connectivity/source/inc/ado/Aolewrap.hxx109
-rw-r--r--connectivity/source/inc/ado/Awrapado.hxx35
-rw-r--r--connectivity/source/inc/ado/Awrapadox.hxx4
-rw-r--r--connectivity/source/inc/ado/WrapColumn.hxx2
-rw-r--r--connectivity/source/inc/ado/WrapIndex.hxx2
-rw-r--r--connectivity/source/inc/ado/WrapKey.hxx2
-rw-r--r--connectivity/source/inc/ado/WrapTable.hxx4
-rw-r--r--connectivity/source/inc/ado/WrapTypeDefs.hxx14
-rw-r--r--connectivity/source/inc/ado/adoimp.hxx7
-rw-r--r--connectivity/source/inc/calc/CTable.hxx4
-rw-r--r--connectivity/source/inc/dbase/DColumns.hxx1
-rw-r--r--connectivity/source/inc/dbase/DIndex.hxx12
-rw-r--r--connectivity/source/inc/dbase/DTable.hxx9
-rw-r--r--connectivity/source/inc/dbase/dindexnode.hxx20
-rw-r--r--connectivity/source/inc/file/FColumns.hxx2
-rw-r--r--connectivity/source/inc/file/FConnection.hxx2
-rw-r--r--connectivity/source/inc/file/FDriver.hxx2
-rw-r--r--connectivity/source/inc/file/FResultSet.hxx17
-rw-r--r--connectivity/source/inc/file/FResultSetMetaData.hxx2
-rw-r--r--connectivity/source/inc/file/FTable.hxx4
-rw-r--r--connectivity/source/inc/file/fcode.hxx10
-rw-r--r--connectivity/source/inc/file/fcomp.hxx3
-rw-r--r--connectivity/source/inc/flat/ETable.hxx4
-rw-r--r--connectivity/source/inc/hsqldb/HStorageMap.hxx2
-rw-r--r--connectivity/source/inc/hsqldb/HTable.hxx3
-rw-r--r--connectivity/source/inc/hsqldb/HTables.hxx5
-rw-r--r--connectivity/source/inc/hsqldb/HUser.hxx4
-rw-r--r--connectivity/source/inc/hsqldb/HUsers.hxx2
-rw-r--r--connectivity/source/inc/java/tools.hxx4
-rw-r--r--connectivity/source/inc/mysql/YDriver.hxx2
-rw-r--r--connectivity/source/inc/mysql/YTable.hxx3
-rw-r--r--connectivity/source/inc/mysql/YTables.hxx5
-rw-r--r--connectivity/source/inc/mysql/YUser.hxx4
-rw-r--r--connectivity/source/inc/mysql/YUsers.hxx2
-rw-r--r--connectivity/source/inc/mysql/YViews.hxx5
-rw-r--r--connectivity/source/inc/odbc/OConnection.hxx2
-rw-r--r--connectivity/source/inc/odbc/ODatabaseMetaData.hxx2
-rw-r--r--connectivity/source/inc/odbc/ODatabaseMetaDataResultSet.hxx2
-rw-r--r--connectivity/source/inc/odbc/ODriver.hxx2
-rw-r--r--connectivity/source/inc/odbc/OFunctions.hxx2
-rw-r--r--connectivity/source/inc/odbc/OPreparedStatement.hxx2
-rw-r--r--connectivity/source/inc/odbc/OResultSet.hxx12
-rw-r--r--connectivity/source/inc/odbc/OResultSetMetaData.hxx8
-rw-r--r--connectivity/source/inc/odbc/OStatement.hxx18
-rw-r--r--connectivity/source/inc/propertyids.hxx124
-rw-r--r--connectivity/source/inc/resource/sharedresources.hxx12
-rw-r--r--connectivity/source/inc/writer/WConnection.hxx4
-rw-r--r--connectivity/source/inc/writer/WTable.hxx10
-rw-r--r--connectivity/source/manager/mdrivermanager.cxx119
-rw-r--r--connectivity/source/parse/sqlbison.y99
-rw-r--r--connectivity/source/parse/sqlflex.l1
-rw-r--r--connectivity/source/parse/sqliterator.cxx124
-rw-r--r--connectivity/source/parse/sqlnode.cxx551
-rw-r--r--connectivity/source/resource/sharedresources.cxx31
-rw-r--r--connectivity/source/sdbcx/VCollection.cxx20
-rw-r--r--connectivity/source/sdbcx/VColumn.cxx29
-rw-r--r--connectivity/source/sdbcx/VDescriptor.cxx34
-rw-r--r--connectivity/source/sdbcx/VGroup.cxx1
-rw-r--r--connectivity/source/sdbcx/VIndex.cxx8
-rw-r--r--connectivity/source/sdbcx/VKey.cxx6
-rw-r--r--connectivity/source/sdbcx/VKeyColumn.cxx5
-rw-r--r--connectivity/source/sdbcx/VTable.cxx19
-rw-r--r--connectivity/source/sdbcx/VUser.cxx12
-rw-r--r--connectivity/source/sdbcx/VView.cxx22
467 files changed, 7148 insertions, 6151 deletions
diff --git a/connectivity/CppunitTest_connectivity_sharedresources.mk b/connectivity/CppunitTest_connectivity_sharedresources.mk
index 9af3f8ca2442..f9f8172c6fce 100644
--- a/connectivity/CppunitTest_connectivity_sharedresources.mk
+++ b/connectivity/CppunitTest_connectivity_sharedresources.mk
@@ -30,6 +30,7 @@ $(eval $(call gb_CppunitTest_use_libraries,connectivity_sharedresources, \
dbtools \
sal \
test \
+ utl \
unotest \
))
diff --git a/connectivity/IwyuFilter_connectivity.yaml b/connectivity/IwyuFilter_connectivity.yaml
index 8ce2a6d004bf..976f124f1447 100644
--- a/connectivity/IwyuFilter_connectivity.yaml
+++ b/connectivity/IwyuFilter_connectivity.yaml
@@ -39,6 +39,9 @@ excludelist:
- com/sun/star/form/XDatabaseParameterListener.hpp
- com/sun/star/sdbc/XParameters.hpp
- com/sun/star/task/XInteractionHandler.hpp
+ connectivity/source/commontools/DriversConfig.cxx:
+ # Needed for ENABLE_FUZZERS
+ - o3tl/string_view.hxx
connectivity/source/cpool/ZPoolCollection.cxx:
# Actually used
- com/sun/star/beans/PropertyValue.hpp
@@ -71,5 +74,8 @@ excludelist:
connectivity/source/drivers/odbc/OTools.cxx:
# OSL_BIGENDIAN is being checked
- osl/endian.h
+ connectivity/source/drivers/postgresql/pq_connection.cxx:
+ # Needed for using deleter_from_fn
+ - pq_tools.hxx
connectivity/source/drivers/writer/WDatabaseMetaData.cxx:
- com/sun/star/text/XTextDocument.hpp
diff --git a/connectivity/Library_ado.mk b/connectivity/Library_ado.mk
index ca9633eca0bd..8cfd5485fe15 100644
--- a/connectivity/Library_ado.mk
+++ b/connectivity/Library_ado.mk
@@ -10,7 +10,7 @@
$(eval $(call gb_Library_Library,ado))
-$(eval $(call gb_Library_set_componentfile,ado,connectivity/source/drivers/ado/ado))
+$(eval $(call gb_Library_set_componentfile,ado,connectivity/source/drivers/ado/ado,services))
$(eval $(call gb_Library_set_include,ado,\
-I$(SRCDIR)/connectivity/inc \
@@ -42,6 +42,7 @@ $(eval $(call gb_Library_use_libraries,ado,\
cppuhelper \
sal \
salhelper \
+ utl \
dbtools \
comphelper \
))
diff --git a/connectivity/Library_calc.mk b/connectivity/Library_calc.mk
index b751ce16bfe3..925b6ec8fa49 100644
--- a/connectivity/Library_calc.mk
+++ b/connectivity/Library_calc.mk
@@ -10,7 +10,7 @@
$(eval $(call gb_Library_Library,calc))
-$(eval $(call gb_Library_set_componentfile,calc,connectivity/source/drivers/calc/calc))
+$(eval $(call gb_Library_set_componentfile,calc,connectivity/source/drivers/calc/calc,services))
$(eval $(call gb_Library_use_external,calc,boost_headers))
diff --git a/connectivity/Library_dbase.mk b/connectivity/Library_dbase.mk
index ff1d703e520a..b69b25cb206e 100644
--- a/connectivity/Library_dbase.mk
+++ b/connectivity/Library_dbase.mk
@@ -10,7 +10,7 @@
$(eval $(call gb_Library_Library,dbase))
-$(eval $(call gb_Library_set_componentfile,dbase,connectivity/source/drivers/dbase/dbase))
+$(eval $(call gb_Library_set_componentfile,dbase,connectivity/source/drivers/dbase/dbase,services))
$(eval $(call gb_Library_use_external,dbase,boost_headers))
@@ -58,6 +58,4 @@ $(eval $(call gb_Library_add_exception_objects,dbase,\
connectivity/source/drivers/dbase/DTable \
))
-#connectivity/source/drivers/dbase/DTable disable optimization?
-
# vim: set noet sw=4 ts=4:
diff --git a/connectivity/Library_dbpool2.mk b/connectivity/Library_dbpool2.mk
index fee4d3477087..334a225c8975 100644
--- a/connectivity/Library_dbpool2.mk
+++ b/connectivity/Library_dbpool2.mk
@@ -10,7 +10,7 @@
$(eval $(call gb_Library_Library,dbpool2))
-$(eval $(call gb_Library_set_componentfile,dbpool2,connectivity/source/cpool/dbpool2))
+$(eval $(call gb_Library_set_componentfile,dbpool2,connectivity/source/cpool/dbpool2,services))
$(eval $(call gb_Library_set_include,dbpool2,\
$$(INCLUDE) \
diff --git a/connectivity/Library_dbtools.mk b/connectivity/Library_dbtools.mk
index 6869cd0bbc6b..f8f457e5aa35 100644
--- a/connectivity/Library_dbtools.mk
+++ b/connectivity/Library_dbtools.mk
@@ -14,7 +14,7 @@ $(eval $(call gb_Library_add_defs,dbtools,\
-DOOO_DLLIMPLEMENTATION_DBTOOLS \
))
-$(eval $(call gb_Library_set_componentfile,dbtools,connectivity/source/dbtools/dbtools))
+$(eval $(call gb_Library_set_componentfile,dbtools,connectivity/source/dbtools/dbtools,services))
$(eval $(call gb_Library_set_include,dbtools,\
$$(INCLUDE) \
@@ -49,8 +49,6 @@ $(eval $(call gb_Library_use_libraries,dbtools,\
))
endif
-#connectivity/source/commontools/RowFunctionParser.cxx disable optimization?
-
$(eval $(call gb_Library_add_exception_objects,dbtools,\
))
diff --git a/connectivity/Library_evoab.mk b/connectivity/Library_evoab.mk
index 28327f060bcf..12f69771797b 100644
--- a/connectivity/Library_evoab.mk
+++ b/connectivity/Library_evoab.mk
@@ -22,7 +22,7 @@ $(eval $(call gb_Library_use_externals,evoab,\
gobject \
))
-$(eval $(call gb_Library_set_componentfile,evoab,connectivity/source/drivers/evoab2/evoab))
+$(eval $(call gb_Library_set_componentfile,evoab,connectivity/source/drivers/evoab2/evoab,services))
$(eval $(call gb_Library_use_sdk_api,evoab))
@@ -30,6 +30,7 @@ $(eval $(call gb_Library_use_libraries,evoab,\
comphelper \
cppu \
cppuhelper \
+ i18nlangtag \
svl \
tl \
utl \
diff --git a/connectivity/Library_firebird_sdbc.mk b/connectivity/Library_firebird_sdbc.mk
index 5fb596ef8fb4..720dfeb878f7 100644
--- a/connectivity/Library_firebird_sdbc.mk
+++ b/connectivity/Library_firebird_sdbc.mk
@@ -38,7 +38,7 @@ $(eval $(call gb_Library_use_libraries,firebird_sdbc, \
vcl \
))
-$(eval $(call gb_Library_set_componentfile,firebird_sdbc,connectivity/source/drivers/firebird/firebird_sdbc))
+$(eval $(call gb_Library_set_componentfile,firebird_sdbc,connectivity/source/drivers/firebird/firebird_sdbc,services))
$(eval $(call gb_Library_add_exception_objects,firebird_sdbc,\
connectivity/source/drivers/firebird/Blob \
@@ -61,6 +61,8 @@ $(eval $(call gb_Library_add_exception_objects,firebird_sdbc,\
connectivity/source/drivers/firebird/User \
connectivity/source/drivers/firebird/Users \
connectivity/source/drivers/firebird/Util \
+ connectivity/source/drivers/firebird/View \
+ connectivity/source/drivers/firebird/Views \
))
# vim: set noet sw=4 ts=4:
diff --git a/connectivity/Library_flat.mk b/connectivity/Library_flat.mk
index 77e2dee405e2..0fdf43276034 100644
--- a/connectivity/Library_flat.mk
+++ b/connectivity/Library_flat.mk
@@ -10,7 +10,7 @@
$(eval $(call gb_Library_Library,flat))
-$(eval $(call gb_Library_set_componentfile,flat,connectivity/source/drivers/flat/flat))
+$(eval $(call gb_Library_set_componentfile,flat,connectivity/source/drivers/flat/flat,services))
$(eval $(call gb_Library_use_external,flat,boost_headers))
diff --git a/connectivity/Library_hsqldb.mk b/connectivity/Library_hsqldb.mk
index 3c85fc462240..40764b9237d8 100644
--- a/connectivity/Library_hsqldb.mk
+++ b/connectivity/Library_hsqldb.mk
@@ -35,7 +35,7 @@ $(eval $(call gb_Library_use_libraries,hsqldb,\
i18nlangtag \
))
-$(eval $(call gb_Library_set_componentfile,hsqldb,connectivity/source/drivers/hsqldb/hsqldb))
+$(eval $(call gb_Library_set_componentfile,hsqldb,connectivity/source/drivers/hsqldb/hsqldb,services))
$(eval $(call gb_Library_add_exception_objects,hsqldb,\
connectivity/source/drivers/hsqldb/HCatalog \
diff --git a/connectivity/Library_jdbc.mk b/connectivity/Library_jdbc.mk
index 396369e8fc5b..578c7013db85 100644
--- a/connectivity/Library_jdbc.mk
+++ b/connectivity/Library_jdbc.mk
@@ -10,7 +10,7 @@
$(eval $(call gb_Library_Library,jdbc))
-$(eval $(call gb_Library_set_componentfile,jdbc,connectivity/source/drivers/jdbc/jdbc))
+$(eval $(call gb_Library_set_componentfile,jdbc,connectivity/source/drivers/jdbc/jdbc,services))
$(eval $(call gb_Library_use_external,jdbc,boost_headers))
diff --git a/connectivity/Library_macab1.mk b/connectivity/Library_macab1.mk
index 58eca126917a..82e3cf489b18 100644
--- a/connectivity/Library_macab1.mk
+++ b/connectivity/Library_macab1.mk
@@ -10,7 +10,7 @@
$(eval $(call gb_Library_Library,macab1))
-$(eval $(call gb_Library_set_componentfile,macab1,connectivity/source/drivers/macab/macab1))
+$(eval $(call gb_Library_set_componentfile,macab1,connectivity/source/drivers/macab/macab1,services))
$(eval $(call gb_Library_use_external,macab1,boost_headers))
diff --git a/connectivity/Library_mozbootstrap.mk b/connectivity/Library_mozbootstrap.mk
index 237726caf8a8..dfa587fa0e7a 100644
--- a/connectivity/Library_mozbootstrap.mk
+++ b/connectivity/Library_mozbootstrap.mk
@@ -9,7 +9,7 @@
$(eval $(call gb_Library_Library,mozbootstrap))
-$(eval $(call gb_Library_set_componentfile,mozbootstrap,connectivity/source/drivers/mozab/bootstrap/mozbootstrap))
+$(eval $(call gb_Library_set_componentfile,mozbootstrap,connectivity/source/drivers/mozab/bootstrap/mozbootstrap,services))
$(eval $(call gb_Library_set_include,mozbootstrap,\
-I$(SRCDIR)/connectivity/source/drivers/mozab \
diff --git a/connectivity/Library_mysql_jdbc.mk b/connectivity/Library_mysql_jdbc.mk
index b6916ce784b1..21317ad697da 100644
--- a/connectivity/Library_mysql_jdbc.mk
+++ b/connectivity/Library_mysql_jdbc.mk
@@ -10,7 +10,7 @@
$(eval $(call gb_Library_Library,mysql_jdbc))
-$(eval $(call gb_Library_set_componentfile,mysql_jdbc,connectivity/source/drivers/mysql_jdbc/mysql_jdbc))
+$(eval $(call gb_Library_set_componentfile,mysql_jdbc,connectivity/source/drivers/mysql_jdbc/mysql_jdbc,services))
$(eval $(call gb_Library_use_external,mysql_jdbc,boost_headers))
@@ -29,6 +29,7 @@ $(eval $(call gb_Library_use_libraries,mysql_jdbc,\
cppuhelper \
sal \
salhelper \
+ utl \
dbtools \
comphelper \
))
diff --git a/connectivity/Library_mysqlc.mk b/connectivity/Library_mysqlc.mk
index f765fb1e305f..33ffc5cb28b0 100644
--- a/connectivity/Library_mysqlc.mk
+++ b/connectivity/Library_mysqlc.mk
@@ -23,6 +23,7 @@ $(eval $(call gb_Library_set_include,mysqlc,\
))
$(eval $(call gb_Library_add_libs,mysqlc,\
+ $(if $(WITH_GSSAPI),$(GSSAPI_LIBS)) \
$(if $(filter-out WNT,$(OS)),$(if $(filter HAIKU MACOSX SOLARIS,$(OS)),\
-lz -lm,-rdynamic -lz -lcrypt -lm)) \
$(if $(filter LINUX,$(OS)),-ldl,) \
@@ -31,12 +32,12 @@ $(eval $(call gb_Library_add_libs,mysqlc,\
$(eval $(call gb_Library_use_sdk_api,mysqlc))
$(eval $(call gb_Library_use_libraries,mysqlc,\
+ comphelper \
cppu \
- dbtools \
+ cppuhelper \
+ dbtools \
sal \
salhelper \
- comphelper \
- cppuhelper \
))
$(eval $(call gb_Library_add_defs,mysqlc,\
@@ -49,19 +50,30 @@ $(eval $(call gb_Library_add_defs,mysqlc,\
))
$(eval $(call gb_Library_add_exception_objects,mysqlc,\
- connectivity/source/drivers/mysqlc/mysqlc_driver \
- connectivity/source/drivers/mysqlc/mysqlc_services \
+ connectivity/source/drivers/mysqlc/mysqlc_catalog \
+ connectivity/source/drivers/mysqlc/mysqlc_column \
+ connectivity/source/drivers/mysqlc/mysqlc_columns \
connectivity/source/drivers/mysqlc/mysqlc_connection \
- connectivity/source/drivers/mysqlc/mysqlc_resultset \
+ connectivity/source/drivers/mysqlc/mysqlc_databasemetadata \
+ connectivity/source/drivers/mysqlc/mysqlc_driver \
+ connectivity/source/drivers/mysqlc/mysqlc_general \
+ connectivity/source/drivers/mysqlc/mysqlc_indexes \
+ connectivity/source/drivers/mysqlc/mysqlc_keys \
connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset \
+ connectivity/source/drivers/mysqlc/mysqlc_preparedstatement \
+ connectivity/source/drivers/mysqlc/mysqlc_resultset \
connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata \
+ connectivity/source/drivers/mysqlc/mysqlc_services \
connectivity/source/drivers/mysqlc/mysqlc_statement \
- connectivity/source/drivers/mysqlc/mysqlc_preparedstatement \
- connectivity/source/drivers/mysqlc/mysqlc_databasemetadata \
+ connectivity/source/drivers/mysqlc/mysqlc_table \
+ connectivity/source/drivers/mysqlc/mysqlc_tables \
connectivity/source/drivers/mysqlc/mysqlc_types \
- connectivity/source/drivers/mysqlc/mysqlc_general \
+ connectivity/source/drivers/mysqlc/mysqlc_user \
+ connectivity/source/drivers/mysqlc/mysqlc_users \
+ connectivity/source/drivers/mysqlc/mysqlc_view \
+ connectivity/source/drivers/mysqlc/mysqlc_views \
))
-$(eval $(call gb_Library_set_componentfile,mysqlc,connectivity/source/drivers/mysqlc/mysqlc))
+$(eval $(call gb_Library_set_componentfile,mysqlc,connectivity/source/drivers/mysqlc/mysqlc,services))
# vim: set noet sw=4 ts=4:
diff --git a/connectivity/Library_odbc.mk b/connectivity/Library_odbc.mk
index ae2b131c3649..b14412932083 100644
--- a/connectivity/Library_odbc.mk
+++ b/connectivity/Library_odbc.mk
@@ -10,7 +10,7 @@
$(eval $(call gb_Library_Library,odbc))
-$(eval $(call gb_Library_set_componentfile,odbc,connectivity/source/drivers/odbc/odbc))
+$(eval $(call gb_Library_set_componentfile,odbc,connectivity/source/drivers/odbc/odbc,services))
$(eval $(call gb_Library_use_sdk_api,odbc))
@@ -41,6 +41,7 @@ $(eval $(call gb_Library_use_libraries,odbc,\
dbtools \
sal \
salhelper \
+ utl \
))
$(eval $(call gb_Library_add_exception_objects,odbc,\
diff --git a/connectivity/Library_postgresql-sdbc-impl.mk b/connectivity/Library_postgresql-sdbc-impl.mk
index c372f3f0c6f6..19a61ff92534 100644
--- a/connectivity/Library_postgresql-sdbc-impl.mk
+++ b/connectivity/Library_postgresql-sdbc-impl.mk
@@ -45,13 +45,12 @@ endif
$(eval $(call gb_Library_use_externals,postgresql-sdbc-impl,\
boost_headers \
postgresql \
- $(if $(filter-out MSC,$(COM)), \
- openssl \
- $(if $(ENABLE_LDAP),openldap) \
- nss3 \
- plc4 \
- ssl3 \
- ) \
+ $(if $(filter-out MSC,$(COM)), \
+ $(if $(ENABLE_OPENSSL),openssl) \
+ $(if $(ENABLE_LDAP), \
+ openldap \
+ ) \
+ ) \
))
ifeq ($(SYSTEM_POSTGRESQL),)
@@ -66,7 +65,7 @@ $(eval $(call gb_Library_add_libs,postgresql-sdbc-impl,\
endif
endif
-$(eval $(call gb_Library_set_componentfile,postgresql-sdbc-impl,connectivity/source/drivers/postgresql/postgresql-sdbc-impl))
+$(eval $(call gb_Library_set_componentfile,postgresql-sdbc-impl,connectivity/source/drivers/postgresql/postgresql-sdbc-impl,postgresql-sdbc))
$(eval $(call gb_Library_add_exception_objects,postgresql-sdbc-impl,\
connectivity/source/drivers/postgresql/pq_array \
diff --git a/connectivity/Library_postgresql-sdbc.mk b/connectivity/Library_postgresql-sdbc.mk
index 48613ab91bfc..b8b39faec9ca 100644
--- a/connectivity/Library_postgresql-sdbc.mk
+++ b/connectivity/Library_postgresql-sdbc.mk
@@ -25,7 +25,7 @@ $(eval $(call gb_Library_use_libraries,postgresql-sdbc,\
salhelper \
))
-$(eval $(call gb_Library_set_componentfile,postgresql-sdbc,connectivity/source/drivers/postgresql/postgresql-sdbc))
+$(eval $(call gb_Library_set_componentfile,postgresql-sdbc,connectivity/source/drivers/postgresql/postgresql-sdbc,postgresql-sdbc))
$(eval $(call gb_Library_add_exception_objects,postgresql-sdbc,\
connectivity/source/drivers/postgresql/pq_driver \
diff --git a/connectivity/Library_sdbc2.mk b/connectivity/Library_sdbc2.mk
index 5685d1af1de1..e7296a2efc59 100644
--- a/connectivity/Library_sdbc2.mk
+++ b/connectivity/Library_sdbc2.mk
@@ -10,7 +10,7 @@
$(eval $(call gb_Library_Library,sdbc2))
-$(eval $(call gb_Library_set_componentfile,sdbc2,connectivity/source/manager/sdbc2))
+$(eval $(call gb_Library_set_componentfile,sdbc2,connectivity/source/manager/sdbc2,services))
$(eval $(call gb_Library_use_external,sdbc2,boost_headers))
diff --git a/connectivity/Library_writer.mk b/connectivity/Library_writer.mk
index 242d684c9de0..a653e5502d83 100644
--- a/connectivity/Library_writer.mk
+++ b/connectivity/Library_writer.mk
@@ -10,7 +10,7 @@
$(eval $(call gb_Library_Library,writer))
-$(eval $(call gb_Library_set_componentfile,writer,connectivity/source/drivers/writer/writer))
+$(eval $(call gb_Library_set_componentfile,writer,connectivity/source/drivers/writer/writer,services))
$(eval $(call gb_Library_use_external,writer,boost_headers))
diff --git a/connectivity/README.md b/connectivity/README.md
index af57e1566daf..a2c27677c3a4 100644
--- a/connectivity/README.md
+++ b/connectivity/README.md
@@ -48,3 +48,19 @@ the environment variable "CONNECTIVITY_TEST_MYSQL_DRIVER".
podman stop mariadb
podman rm mariadb
```
+
+### Firebird
+
+Firebird has two primary file types:
+
+- Databases - FDB files. These are version-specific, platform-specific, optimized for performance, and thus incompatible between versions. These are what those comments are about. Initially, when FB integration was considered, these files were evaluated for ODBs, but were rejected because of the said incompatibility - even when the version is the same, it will differ on big endian architecture and little endian one. The problem discussed in those comments is when people open stand-alone FDBs that are shipped e.g. with FB installation itself, not when people open ODBs.
+
+- Database backups - FBKs. These are what we use inside ODBs. These are designed to be compatible, independent of architecture; and later versions of FB are always able to open FBKs created in older FB versions.
+
+Our embedded FB is used like this:
+- FBK is extracted from ODB;
+- Embedded FB extracts the compatible FBK into an incompatible FDB (specific to this version of embedded FB DLL);
+- FB works with this temporary FDB;
+- When saving ODB, embedded FB backups the FDB into FBK again, and that is stored inside the ODB.
+
+It, indeed, creates additional performance penalty, but makes the ODB readable by all the future LO versions, no matter what future FB version they embed.
diff --git a/connectivity/Rdb_postgresql-sdbc.mk b/connectivity/Rdb_postgresql-sdbc.mk
index 6162b309d6ba..e6c3b06e0695 100644
--- a/connectivity/Rdb_postgresql-sdbc.mk
+++ b/connectivity/Rdb_postgresql-sdbc.mk
@@ -9,9 +9,4 @@
$(eval $(call gb_Rdb_Rdb_install,postgresql-sdbc))
-$(eval $(call gb_Rdb_add_components,postgresql-sdbc,\
- connectivity/source/drivers/postgresql/postgresql-sdbc \
- connectivity/source/drivers/postgresql/postgresql-sdbc-impl \
-))
-
# vim: set noet sw=4 ts=4:
diff --git a/connectivity/inc/pch/precompiled_dbase.hxx b/connectivity/inc/pch/precompiled_dbase.hxx
index a8692389670c..bef5dafcd982 100644
--- a/connectivity/inc/pch/precompiled_dbase.hxx
+++ b/connectivity/inc/pch/precompiled_dbase.hxx
@@ -83,7 +83,7 @@
#include <sal/types.h>
#include <sal/typesizes.h>
#include <vcl/dllapi.h>
-#include <vcl/errcode.hxx>
+#include <comphelper/errcode.hxx>
#endif // PCH_LEVEL >= 2
#if PCH_LEVEL >= 3
#include <com/sun/star/beans/Property.hpp>
diff --git a/connectivity/inc/pch/precompiled_dbtools.hxx b/connectivity/inc/pch/precompiled_dbtools.hxx
index a26c166cda6a..f848fe094a64 100644
--- a/connectivity/inc/pch/precompiled_dbtools.hxx
+++ b/connectivity/inc/pch/precompiled_dbtools.hxx
@@ -167,7 +167,7 @@
#include <sdbcx/VIndexColumn.hxx>
#include <sdbcx/VKey.hxx>
#include <sdbcx/VKeyColumn.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <tools/toolsdllapi.h>
#include <unotools/resmgr.hxx>
#include <unotools/sharedunocomponent.hxx>
diff --git a/connectivity/inc/pch/precompiled_file.hxx b/connectivity/inc/pch/precompiled_file.hxx
index 62840100429e..7d8dee504853 100644
--- a/connectivity/inc/pch/precompiled_file.hxx
+++ b/connectivity/inc/pch/precompiled_file.hxx
@@ -81,7 +81,7 @@
#include <sal/types.h>
#include <sal/typesizes.h>
#include <vcl/dllapi.h>
-#include <vcl/errcode.hxx>
+#include <comphelper/errcode.hxx>
#endif // PCH_LEVEL >= 2
#if PCH_LEVEL >= 3
#include <com/sun/star/beans/Property.hpp>
@@ -190,7 +190,7 @@
#include <salhelper/simplereferenceobject.hxx>
#include <tools/date.hxx>
#include <tools/debug.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <tools/lineend.hxx>
#include <tools/long.hxx>
#include <tools/ref.hxx>
diff --git a/connectivity/inc/sdbcx/VIndex.hxx b/connectivity/inc/sdbcx/VIndex.hxx
index c31bf5c4e20d..fd9bebe73ec2 100644
--- a/connectivity/inc/sdbcx/VIndex.hxx
+++ b/connectivity/inc/sdbcx/VIndex.hxx
@@ -19,6 +19,7 @@
#pragma once
+#include <config_options.h>
#include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp>
#include <comphelper/IdPropArrayHelper.hxx>
#include <cppuhelper/basemutex.hxx>
@@ -36,7 +37,7 @@ namespace connectivity::sdbcx
typedef ::cppu::ImplHelper1< css::sdbcx::XDataDescriptorFactory > OIndex_BASE;
typedef ::comphelper::OIdPropertyArrayUsageHelper<OIndex> OIndex_PROP;
- class OOO_DLLPUBLIC_DBTOOLS OIndex :
+ class UNLESS_MERGELIBS_MORE(OOO_DLLPUBLIC_DBTOOLS) OIndex :
public cppu::BaseMutex,
public ODescriptor_BASE,
public IRefreshableColumns,
@@ -61,7 +62,7 @@ namespace connectivity::sdbcx
public:
OIndex(bool _bCase);
OIndex( const OUString& Name,
- const OUString& Catalog,
+ OUString Catalog,
bool _isUnique,
bool _isPrimaryKeyIndex,
bool _isClustered,
diff --git a/connectivity/inc/sdbcx/VIndexColumn.hxx b/connectivity/inc/sdbcx/VIndexColumn.hxx
index 056b8239411b..8b9083c7ec75 100644
--- a/connectivity/inc/sdbcx/VIndexColumn.hxx
+++ b/connectivity/inc/sdbcx/VIndexColumn.hxx
@@ -19,6 +19,7 @@
#pragma once
+#include <config_options.h>
#include <connectivity/dbtoolsdllapi.hxx>
#include <connectivity/sdbcx/VColumn.hxx>
@@ -27,7 +28,7 @@ namespace connectivity::sdbcx
class OIndexColumn;
typedef ::comphelper::OIdPropertyArrayUsageHelper<OIndexColumn> OIndexColumn_PROP;
- class OOO_DLLPUBLIC_DBTOOLS OIndexColumn :
+ class UNLESS_MERGELIBS_MORE(OOO_DLLPUBLIC_DBTOOLS) OIndexColumn :
public OColumn, public OIndexColumn_PROP
{
bool m_IsAscending;
diff --git a/connectivity/inc/sdbcx/VKey.hxx b/connectivity/inc/sdbcx/VKey.hxx
index 1c4e51dc7f32..df17eba8729f 100644
--- a/connectivity/inc/sdbcx/VKey.hxx
+++ b/connectivity/inc/sdbcx/VKey.hxx
@@ -30,6 +30,7 @@
#include <cppuhelper/basemutex.hxx>
#include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp>
#include <memory>
+#include <utility>
namespace connectivity::sdbcx
{
@@ -41,11 +42,11 @@ namespace connectivity::sdbcx
sal_Int32 m_Type;
sal_Int32 m_UpdateRule;
sal_Int32 m_DeleteRule;
- KeyProperties(const OUString& ReferencedTable,
+ KeyProperties(OUString ReferencedTable,
sal_Int32 Type,
sal_Int32 UpdateRule,
sal_Int32 DeleteRule)
- :m_ReferencedTable(ReferencedTable),
+ :m_ReferencedTable(std::move(ReferencedTable)),
m_Type(Type),
m_UpdateRule(UpdateRule),
m_DeleteRule(DeleteRule)
@@ -75,7 +76,7 @@ namespace connectivity::sdbcx
virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
public:
OKey(bool _bCase);
- OKey(const OUString& Name,const std::shared_ptr<KeyProperties>& _rProps,bool _bCase);
+ OKey(const OUString& Name,std::shared_ptr<KeyProperties> _xProps,bool _bCase);
virtual ~OKey( ) override;
diff --git a/connectivity/inc/sdbcx/VKeyColumn.hxx b/connectivity/inc/sdbcx/VKeyColumn.hxx
index 5adf3e0aab9d..59b26131db9f 100644
--- a/connectivity/inc/sdbcx/VKeyColumn.hxx
+++ b/connectivity/inc/sdbcx/VKeyColumn.hxx
@@ -35,7 +35,7 @@ namespace connectivity::sdbcx
virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() override;
public:
OKeyColumn(bool _bCase);
- OKeyColumn( const OUString& ReferencedColumn,
+ OKeyColumn( OUString ReferencedColumn,
const OUString& Name,
const OUString& TypeName,
const OUString& DefaultValue,
diff --git a/connectivity/inc/strings.hrc b/connectivity/inc/strings.hrc
index ce4177493bd9..873623bba05d 100644
--- a/connectivity/inc/strings.hrc
+++ b/connectivity/inc/strings.hrc
@@ -19,34 +19,33 @@
#pragma once
-#define NC_(Context, String) reinterpret_cast<char const *>(Context "\004" u8##String)
+#define NC_(Context, String) TranslateId(Context, u8##String)
// = common strings
#define STR_NO_CONNECTION_GIVEN NC_("STR_NO_CONNECTION_GIVEN", "No connection to the database exists.")
-#define STR_WRONG_PARAM_INDEX NC_("STR_WRONG_PARAM_INDEX", "You tried to set a parameter at position '$pos$' but there is/are only '$count$' parameter(s) allowed. One reason may be that the property \"ParameterNameSubstitution\" is not set to TRUE in the data source.")
+#define STR_WRONG_PARAM_INDEX NC_("STR_WRONG_PARAM_INDEX", "You tried to set a parameter at position “$pos$” but there is/are only “$count$” parameter(s) allowed. One reason may be that the property “ParameterNameSubstitution” is not set to TRUE in the data source.")
#define STR_NO_INPUTSTREAM NC_("STR_NO_INPUTSTREAM", "The input stream was not set.")
-#define STR_NO_ELEMENT_NAME NC_("STR_NO_ELEMENT_NAME", "There is no element named '$name$'.")
+#define STR_NO_ELEMENT_NAME NC_("STR_NO_ELEMENT_NAME", "There is no element named “$name$”.")
#define STR_INVALID_BOOKMARK NC_("STR_INVALID_BOOKMARK", "Invalid bookmark value")
#define STR_PRIVILEGE_NOT_GRANTED NC_("STR_PRIVILEGE_NOT_GRANTED", "Privilege not granted: Only table privileges can be granted.")
#define STR_PRIVILEGE_NOT_REVOKED NC_("STR_PRIVILEGE_NOT_REVOKED", "Privilege not revoked: Only table privileges can be revoked.")
#define STR_ERRORMSG_SEQUENCE NC_("STR_ERRORMSG_SEQUENCE", "Function sequence error.")
#define STR_INVALID_INDEX NC_("STR_INVALID_INDEX", "Invalid descriptor index.")
-#define STR_UNSUPPORTED_FUNCTION NC_("STR_UNSUPPORTED_FUNCTION", "The driver does not support the function '$functionname$'.")
-#define STR_UNSUPPORTED_FEATURE NC_("STR_UNSUPPORTED_FEATURE", "The driver does not support the functionality for '$featurename$'. It is not implemented.")
+#define STR_UNSUPPORTED_FUNCTION NC_("STR_UNSUPPORTED_FUNCTION", "The driver does not support the function “$functionname$”.")
+#define STR_UNSUPPORTED_FEATURE NC_("STR_UNSUPPORTED_FEATURE", "The driver does not support the functionality for “$featurename$”. It is not implemented.")
#define STR_FORMULA_WRONG NC_("STR_FORMULA_WRONG", "The formula for TypeInfoSettings is wrong!")
-#define STR_STRING_LENGTH_EXCEEDED NC_("STR_STRING_LENGTH_EXCEEDED", "The string '$string$' exceeds the maximum length of $maxlen$ characters when converted to the target character set '$charset$'.")
-#define STR_CANNOT_CONVERT_STRING NC_("STR_CANNOT_CONVERT_STRING", "The string '$string$' cannot be converted using the encoding '$charset$'.")
+#define STR_STRING_LENGTH_EXCEEDED NC_("STR_STRING_LENGTH_EXCEEDED", "The string “$string$” exceeds the maximum length of $maxlen$ characters when converted to the target character set “$charset$”.")
+#define STR_CANNOT_CONVERT_STRING NC_("STR_CANNOT_CONVERT_STRING", "The string “$string$” cannot be converted using the encoding “$charset$”.")
#define STR_URI_SYNTAX_ERROR NC_("STR_URI_SYNTAX_ERROR", "The connection URL is invalid.")
-#define STR_QUERY_TOO_COMPLEX NC_("STR_QUERY_TOO_COMPLEX", "The query can not be executed. It is too complex.")
-#define STR_OPERATOR_TOO_COMPLEX NC_("STR_OPERATOR_TOO_COMPLEX", "The query can not be executed. The operator is too complex.")
-#define STR_QUERY_INVALID_LIKE_COLUMN NC_("STR_QUERY_INVALID_LIKE_COLUMN", "The query can not be executed. You cannot use 'LIKE' with columns of this type.")
-#define STR_QUERY_INVALID_LIKE_STRING NC_("STR_QUERY_INVALID_LIKE_STRING", "The query can not be executed. 'LIKE' can be used with a string argument only.")
-#define STR_QUERY_NOT_LIKE_TOO_COMPLEX NC_("STR_QUERY_NOT_LIKE_TOO_COMPLEX", "The query can not be executed. The 'NOT LIKE' condition is too complex.")
-#define STR_QUERY_LIKE_WILDCARD NC_("STR_QUERY_LIKE_WILDCARD", "The query can not be executed. The 'LIKE' condition contains wildcard in the middle.")
-#define STR_QUERY_LIKE_WILDCARD_MANY NC_("STR_QUERY_LIKE_WILDCARD_MANY", "The query can not be executed. The 'LIKE' condition contains too many wildcards.")
-#define STR_INVALID_COLUMNNAME NC_("STR_INVALID_COLUMNNAME", "The column name '$columnname$' is not valid.")
+#define STR_QUERY_TOO_COMPLEX NC_("STR_QUERY_TOO_COMPLEX", "The query cannot be executed. It is too complex.")
+#define STR_OPERATOR_TOO_COMPLEX NC_("STR_OPERATOR_TOO_COMPLEX", "The query cannot be executed. The operator is too complex.")
+#define STR_QUERY_INVALID_LIKE_COLUMN NC_("STR_QUERY_INVALID_LIKE_COLUMN", "The query cannot be executed. You cannot use “LIKE” with columns of this type.")
+#define STR_QUERY_INVALID_LIKE_STRING NC_("STR_QUERY_INVALID_LIKE_STRING", "The query cannot be executed. “LIKE” can be used with a string argument only.")
+#define STR_QUERY_NOT_LIKE_TOO_COMPLEX NC_("STR_QUERY_NOT_LIKE_TOO_COMPLEX", "The query cannot be executed. The “NOT LIKE” condition is too complex.")
+#define STR_QUERY_LIKE_WILDCARD NC_("STR_QUERY_LIKE_WILDCARD", "The query cannot be executed. The “LIKE” condition contains wildcard in the middle.")
+#define STR_QUERY_LIKE_WILDCARD_MANY NC_("STR_QUERY_LIKE_WILDCARD_MANY", "The query cannot be executed. The “LIKE” condition contains too many wildcards.")
+#define STR_INVALID_COLUMNNAME NC_("STR_INVALID_COLUMNNAME", "The column name “$columnname$” is not valid.")
#define STR_INVALID_COLUMN_SELECTION NC_("STR_INVALID_COLUMN_SELECTION", "The statement contains an invalid selection of columns.")
-#define STR_COLUMN_NOT_UPDATEABLE NC_("STR_COLUMN_NOT_UPDATEABLE", "The column at position '$position$' could not be updated.")
#define STR_COULD_NOT_LOAD_FILE NC_("STR_COULD_NOT_LOAD_FILE", "The file $filename$ could not be loaded.")
#define STR_LOAD_FILE_ERROR_MESSAGE NC_("STR_LOAD_FILE_ERROR_MESSAGE", "The attempt to load the file resulted in the following error message ($exception_type$):\n\n$error_message$")
// = the ado driver's resource strings
@@ -59,70 +58,70 @@
#define STR_INVALID_USER_DESCRIPTOR_ERROR NC_("STR_INVALID_USER_DESCRIPTOR_ERROR", "Could not create user: invalid object descriptor.")
#define STR_INVALID_VIEW_DESCRIPTOR_ERROR NC_("STR_INVALID_VIEW_DESCRIPTOR_ERROR", "Could not create view: invalid object descriptor.")
#define STR_VIEW_NO_COMMAND_ERROR NC_("STR_VIEW_NO_COMMAND_ERROR", "Could not create view: no command object.")
-#define STR_NO_CONNECTION NC_("STR_NO_CONNECTION", "The connection could not be created. May be the necessary data provider is not installed.")
+#define STR_NO_CONNECTION NC_("STR_NO_CONNECTION", "The connection could not be created. Maybe the necessary data provider is not installed.")
// dbase
#define STR_COULD_NOT_DELETE_INDEX NC_("STR_COULD_NOT_DELETE_INDEX", "The index could not be deleted. An unknown error while accessing the file system occurred.")
#define STR_ONL_ONE_COLUMN_PER_INDEX NC_("STR_ONL_ONE_COLUMN_PER_INDEX", "The index could not be created. Only one column per index is allowed.")
#define STR_COULD_NOT_CREATE_INDEX_NOT_UNIQUE NC_("STR_COULD_NOT_CREATE_INDEX_NOT_UNIQUE", "The index could not be created. The values are not unique.")
#define STR_COULD_NOT_CREATE_INDEX NC_("STR_COULD_NOT_CREATE_INDEX", "The index could not be created. An unknown error appeared.")
-#define STR_COULD_NOT_CREATE_INDEX_NAME NC_("STR_COULD_NOT_CREATE_INDEX_NAME", "The index could not be created. The file '$filename$' is used by another index.")
+#define STR_COULD_NOT_CREATE_INDEX_NAME NC_("STR_COULD_NOT_CREATE_INDEX_NAME", "The index could not be created. The file “$filename$” is used by another index.")
#define STR_COULD_NOT_CREATE_INDEX_KEYSIZE NC_("STR_COULD_NOT_CREATE_INDEX_KEYSIZE", "The index could not be created. The size of the chosen column is too big.")
-#define STR_SQL_NAME_ERROR NC_("STR_SQL_NAME_ERROR", "The name '$name$' doesn't match SQL naming constraints.")
+#define STR_SQL_NAME_ERROR NC_("STR_SQL_NAME_ERROR", "The name “$name$” does not match SQL naming constraints.")
#define STR_COULD_NOT_DELETE_FILE NC_("STR_COULD_NOT_DELETE_FILE", "The file $filename$ could not be deleted.")
-#define STR_INVALID_COLUMN_TYPE NC_("STR_INVALID_COLUMN_TYPE", "Invalid column type for column '$columnname$'.")
-#define STR_INVALID_COLUMN_PRECISION NC_("STR_INVALID_COLUMN_PRECISION", "Invalid precision for column '$columnname$'.")
-#define STR_INVALID_PRECISION_SCALE NC_("STR_INVALID_PRECISION_SCALE", "Precision is less than scale for column '$columnname$'.")
-#define STR_INVALID_COLUMN_NAME_LENGTH NC_("STR_INVALID_COLUMN_NAME_LENGTH", "Invalid column name length for column '$columnname$'.")
-#define STR_DUPLICATE_VALUE_IN_COLUMN NC_("STR_DUPLICATE_VALUE_IN_COLUMN", "Duplicate value found in column '$columnname$'.")
-#define STR_INVALID_COLUMN_DECIMAL_VALUE NC_("STR_INVALID_COLUMN_DECIMAL_VALUE", "The '$columnname$' column has been defined as a \"Decimal\" type, the max. length is $precision$ characters (with $scale$ decimal places).\n\nThe specified value \"$value$ is longer than the number of digits allowed.")
-#define STR_COLUMN_NOT_ALTERABLE NC_("STR_COLUMN_NOT_ALTERABLE", "The column '$columnname$' could not be altered. May be the file system is write protected.")
-#define STR_INVALID_COLUMN_VALUE NC_("STR_INVALID_COLUMN_VALUE", "The column '$columnname$' could not be updated. The value is invalid for that column.")
-#define STR_COLUMN_NOT_ADDABLE NC_("STR_COLUMN_NOT_ADDABLE", "The column '$columnname$' could not be added. May be the file system is write protected.")
-#define STR_COLUMN_NOT_DROP NC_("STR_COLUMN_NOT_DROP", "The column at position '$position$' could not be dropped. May be the file system is write protected.")
-#define STR_TABLE_NOT_DROP NC_("STR_TABLE_NOT_DROP", "The table '$tablename$' could not be dropped. May be the file system is write protected.")
+#define STR_INVALID_COLUMN_TYPE NC_("STR_INVALID_COLUMN_TYPE", "Invalid column type for column “$columnname$”.")
+#define STR_INVALID_COLUMN_PRECISION NC_("STR_INVALID_COLUMN_PRECISION", "Invalid precision for column “$columnname$”.")
+#define STR_INVALID_PRECISION_SCALE NC_("STR_INVALID_PRECISION_SCALE", "Precision is less than scale for column “$columnname$”.")
+#define STR_INVALID_COLUMN_NAME_LENGTH NC_("STR_INVALID_COLUMN_NAME_LENGTH", "Invalid column name length for column “$columnname$”.")
+#define STR_DUPLICATE_VALUE_IN_COLUMN NC_("STR_DUPLICATE_VALUE_IN_COLUMN", "Duplicate value found in column “$columnname$”.")
+#define STR_INVALID_COLUMN_DECIMAL_VALUE NC_("STR_INVALID_COLUMN_DECIMAL_VALUE", "The “$columnname$” column has been defined as a “Decimal” type, the maximum length is $precision$ characters (with $scale$ decimal places).\n\nThe specified value “$value$” is longer than the number of digits allowed.")
+#define STR_COLUMN_NOT_ALTERABLE NC_("STR_COLUMN_NOT_ALTERABLE", "The column “$columnname$” could not be altered. Maybe the file system is write-protected.")
+#define STR_INVALID_COLUMN_VALUE NC_("STR_INVALID_COLUMN_VALUE", "The column “$columnname$” could not be updated. The value is invalid for that column.")
+#define STR_COLUMN_NOT_ADDABLE NC_("STR_COLUMN_NOT_ADDABLE", "The column “$columnname$” could not be added. Maybe the file system is write-protected.")
+#define STR_COLUMN_NOT_DROP NC_("STR_COLUMN_NOT_DROP", "The column at position “$position$” could not be dropped. Maybe the file system is write-protected.")
+#define STR_TABLE_NOT_DROP NC_("STR_TABLE_NOT_DROP", "The table “$tablename$” could not be dropped. Maybe the file system is write-protected.")
#define STR_COULD_NOT_ALTER_TABLE NC_("STR_COULD_NOT_ALTER_TABLE", "The table could not be altered.")
-#define STR_INVALID_DBASE_FILE NC_("STR_INVALID_DBASE_FILE", "The file '$filename$' is an invalid (or unrecognized) dBase file.")
+#define STR_INVALID_DBASE_FILE NC_("STR_INVALID_DBASE_FILE", "The file “$filename$” is an invalid (or unrecognized) dBASE file.")
// Evoab2
#define STR_CANNOT_OPEN_BOOK NC_("STR_CANNOT_OPEN_BOOK", "Cannot open Evolution address book.")
#define STR_SORT_BY_COL_ONLY NC_("STR_SORT_BY_COL_ONLY", "Can only sort by table columns.")
// File
-#define STR_QUERY_COMPLEX_COUNT NC_("STR_QUERY_COMPLEX_COUNT", "The query can not be executed. It is too complex. Only \"COUNT(*)\" is supported.")
-#define STR_QUERY_INVALID_BETWEEN NC_("STR_QUERY_INVALID_BETWEEN", "The query can not be executed. The 'BETWEEN' arguments are not correct.")
-#define STR_QUERY_FUNCTION_NOT_SUPPORTED NC_("STR_QUERY_FUNCTION_NOT_SUPPORTED", "The query can not be executed. The function is not supported.")
-#define STR_TABLE_READONLY NC_("STR_TABLE_READONLY", "The table can not be changed. It is read only.")
-#define STR_DELETE_ROW NC_("STR_DELETE_ROW", "The row could not be deleted. The option \"Display inactive records\" is set.")
+#define STR_QUERY_COMPLEX_COUNT NC_("STR_QUERY_COMPLEX_COUNT", "The query cannot be executed. It is too complex. Only “COUNT(*)” is supported.")
+#define STR_QUERY_INVALID_BETWEEN NC_("STR_QUERY_INVALID_BETWEEN", "The query cannot be executed. The “BETWEEN” arguments are not correct.")
+#define STR_QUERY_FUNCTION_NOT_SUPPORTED NC_("STR_QUERY_FUNCTION_NOT_SUPPORTED", "The query cannot be executed. The function is not supported.")
+#define STR_TABLE_READONLY NC_("STR_TABLE_READONLY", "The table cannot be changed. It is read only.")
+#define STR_DELETE_ROW NC_("STR_DELETE_ROW", "The row could not be deleted. The option “Display inactive records” is set.")
#define STR_ROW_ALREADY_DELETED NC_("STR_ROW_ALREADY_DELETED", "The row could not be deleted. It is already deleted.")
-#define STR_QUERY_MORE_TABLES NC_("STR_QUERY_MORE_TABLES", "The query can not be executed. It contains more than one table.")
-#define STR_QUERY_NO_TABLE NC_("STR_QUERY_NO_TABLE", "The query can not be executed. It contains no valid table.")
-#define STR_QUERY_NO_COLUMN NC_("STR_QUERY_NO_COLUMN", "The query can not be executed. It contains no valid columns.")
-#define STR_INVALID_PARA_COUNT NC_("STR_INVALID_PARA_COUNT", "The count of the given parameter values doesn't match the parameters.")
-#define STR_NO_VALID_FILE_URL NC_("STR_NO_VALID_FILE_URL", "The URL '$URL$' is not valid. A connection can not be created.")
-#define STR_NO_CLASSNAME NC_("STR_NO_CLASSNAME", "The driver class '$classname$' could not be loaded.")
+#define STR_QUERY_MORE_TABLES NC_("STR_QUERY_MORE_TABLES", "The query cannot be executed. It contains more than one table.")
+#define STR_QUERY_NO_TABLE NC_("STR_QUERY_NO_TABLE", "The query cannot be executed. It contains no valid table.")
+#define STR_QUERY_NO_COLUMN NC_("STR_QUERY_NO_COLUMN", "The query cannot be executed. It contains no valid columns.")
+#define STR_INVALID_PARA_COUNT NC_("STR_INVALID_PARA_COUNT", "The count of the given parameter values does not match the parameters.")
+#define STR_NO_VALID_FILE_URL NC_("STR_NO_VALID_FILE_URL", "The URL “$URL$” is not valid. A connection cannot be created.")
+#define STR_NO_CLASSNAME NC_("STR_NO_CLASSNAME", "The driver class “$classname$” could not be loaded.")
#define STR_NO_JAVA NC_("STR_NO_JAVA", "No Java installation could be found. Please check your installation.")
-#define STR_NO_RESULTSET NC_("STR_NO_RESULTSET", "The execution of the query doesn't return a valid result set.")
-#define STR_NO_ROWCOUNT NC_("STR_NO_ROWCOUNT", "The execution of the update statement doesn't effect any rows.")
-#define STR_NO_CLASSNAME_PATH NC_("STR_NO_CLASSNAME_PATH", "The additional driver class path is '$classpath$'.")
-#define STR_UNKNOWN_PARA_TYPE NC_("STR_UNKNOWN_PARA_TYPE", "The type of parameter at position '$position$' is unknown.")
-#define STR_UNKNOWN_COLUMN_TYPE NC_("STR_UNKNOWN_COLUMN_TYPE", "The type of column at position '$position$' is unknown.")
+#define STR_NO_RESULTSET NC_("STR_NO_RESULTSET", "The execution of the query does not return a valid result set.")
+#define STR_NO_ROWCOUNT NC_("STR_NO_ROWCOUNT", "The execution of the update statement does not affect any rows.")
+#define STR_NO_CLASSNAME_PATH NC_("STR_NO_CLASSNAME_PATH", "The additional driver class path is “$classpath$”.")
+#define STR_UNKNOWN_PARA_TYPE NC_("STR_UNKNOWN_PARA_TYPE", "The type of parameter at position “$position$” is unknown.")
+#define STR_UNKNOWN_COLUMN_TYPE NC_("STR_UNKNOWN_COLUMN_TYPE", "The type of column at position “$position$” is unknown.")
// KAB
#define STR_PARA_ONLY_PREPARED NC_("STR_PARA_ONLY_PREPARED", "Parameters can appear only in prepared statements.")
// MACAB
#define STR_NO_TABLE NC_("STR_NO_TABLE", "No such table!")
-#define STR_NO_MAC_OS_FOUND NC_("STR_NO_MAC_OS_FOUND", "No suitable Mac OS installation was found.")
+#define STR_NO_MAC_OS_FOUND NC_("STR_NO_MAC_OS_FOUND", "No suitable macOS installation was found.")
// hsqldb
#define STR_NO_STORAGE NC_("STR_NO_STORAGE", "The connection can not be established. No storage or URL was given.")
#define STR_INVALID_FILE_URL NC_("STR_INVALID_FILE_URL", "The given URL contains no valid local file system path. Please check the location of your database file.")
-#define STR_NO_TABLE_CONTAINER NC_("STR_NO_TABLE_CONTAINER", "An error occurred while obtaining the connection's table container.")
-#define STR_NO_TABLENAME NC_("STR_NO_TABLENAME", "There is no table named '$tablename$'.")
+#define STR_NO_TABLE_CONTAINER NC_("STR_NO_TABLE_CONTAINER", "An error occurred while obtaining the connection’s table container.")
+#define STR_NO_TABLENAME NC_("STR_NO_TABLENAME", "There is no table named “$tablename$”.")
#define STR_NO_DOCUMENTUI NC_("STR_NO_DOCUMENTUI", "The provided DocumentUI is not allowed to be NULL.")
#define STR_ERROR_NEW_VERSION NC_("STR_ERROR_NEW_VERSION", "The connection could not be established. The database was created by a newer version of %PRODUCTNAME.")
#define STR_ROW_SET_OPERATION_VETOED NC_("STR_ROW_SET_OPERATION_VETOED", "The record operation has been vetoed.")
-#define STR_PARSER_CYCLIC_SUB_QUERIES NC_("STR_PARSER_CYCLIC_SUB_QUERIES", "The statement contains a cyclic reference to one or more sub queries.")
-#define STR_DB_OBJECT_NAME_WITH_SLASHES NC_("STR_DB_OBJECT_NAME_WITH_SLASHES", "The name must not contain any slashes ('/').")
+#define STR_PARSER_CYCLIC_SUB_QUERIES NC_("STR_PARSER_CYCLIC_SUB_QUERIES", "The statement contains a cyclic reference to one or more subqueries.")
+#define STR_DB_OBJECT_NAME_WITH_SLASHES NC_("STR_DB_OBJECT_NAME_WITH_SLASHES", "The name must not contain any slashes (“/”).")
#define STR_DB_INVALID_SQL_NAME NC_("STR_DB_INVALID_SQL_NAME", "$1$ is no SQL conform identifier.")
#define STR_DB_QUERY_NAME_WITH_QUOTES NC_("STR_DB_QUERY_NAME_WITH_QUOTES", "Query names must not contain quote characters.")
-#define STR_DB_OBJECT_NAME_IS_USED NC_("STR_DB_OBJECT_NAME_IS_USED", "The name '$1$' is already in use in the database.")
+#define STR_DB_OBJECT_NAME_IS_USED NC_("STR_DB_OBJECT_NAME_IS_USED", "The name “$1$” is already in use in the database.")
#define STR_DB_NOT_CONNECTED NC_("STR_DB_NOT_CONNECTED", "No connection to the database exists.")
#define STR_AB_ADDRESSBOOK_NOT_FOUND NC_("STR_AB_ADDRESSBOOK_NOT_FOUND", "No $1$ exists.")
#define STR_DATA_CANNOT_SELECT_UNFILTERED NC_("STR_DATA_CANNOT_SELECT_UNFILTERED", "Unable to display the complete table content. Please apply a filter.")
diff --git a/connectivity/inc/strings.hxx b/connectivity/inc/strings.hxx
index 5a08f67c5114..b6bd8e5458de 100644
--- a/connectivity/inc/strings.hxx
+++ b/connectivity/inc/strings.hxx
@@ -9,66 +9,68 @@
#pragma once
+#include <rtl/ustring.hxx>
+
// = log messages for the JDBC driver
#define STR_LOG_DRIVER_CONNECTING_URL "jdbcBridge: connecting to URL '$1$'"
-#define STR_LOG_DRIVER_SUCCESS "jdbcBridge: success"
-#define STR_LOG_CREATE_STATEMENT "c$1$: creating statement"
-#define STR_LOG_CREATED_STATEMENT_ID "c$1$: created statement, statement id: s$2$"
-#define STR_LOG_PREPARE_STATEMENT "c$1$: preparing statement: $2$"
-#define STR_LOG_PREPARED_STATEMENT_ID "c$1$: prepared statement, statement id: s$2$"
-#define STR_LOG_PREPARE_CALL "c$1$: preparing call: $2$"
-#define STR_LOG_PREPARED_CALL_ID "c$1$: prepared call, statement id: s$2$"
-#define STR_LOG_NATIVE_SQL "c$1$: native SQL: $2$ -> $3$"
-#define STR_LOG_LOADING_DRIVER "c$1$: attempting to load driver class $2$"
-#define STR_LOG_NO_DRIVER_CLASS "c$1$: no Java Driver Class was provided"
-#define STR_LOG_CONN_SUCCESS "c$1$: success"
-#define STR_LOG_NO_SYSTEM_CONNECTION "c$1$: JDBC driver did not provide a JDBC connection"
-#define STR_LOG_GOT_JDBC_CONNECTION "c$1$: obtained a JDBC connection for $2$"
-#define STR_LOG_SHUTDOWN_CONNECTION "c$1$: shutting down connection"
-#define STR_LOG_GENERATED_VALUES "s$1$: retrieving generated values"
-#define STR_LOG_GENERATED_VALUES_FALLBACK "s$1$: getGeneratedValues: falling back to statement: $2$"
-#define STR_LOG_EXECUTE_STATEMENT "s$1$: going to execute: $2$"
-#define STR_LOG_EXECUTE_QUERY "s$1$: going to execute query: $2$"
-#define STR_LOG_CLOSING_STATEMENT "s$1$: closing/disposing statement"
-#define STR_LOG_EXECUTE_UPDATE "s$1$: going to execute update: $2$"
-#define STR_LOG_UPDATE_COUNT "s$1$: update count: $2$"
-#define STR_LOG_RESULT_SET_CONCURRENCY "s$1$: going to set result set concurrency: $2$"
-#define STR_LOG_RESULT_SET_TYPE "s$1$: going to set result set type: $2$"
-#define STR_LOG_FETCH_DIRECTION "s$1$: fetch direction: $2$"
-#define STR_LOG_FETCH_SIZE "s$1$: fetch size: $2$"
-#define STR_LOG_SET_ESCAPE_PROCESSING "s$1$: going to set escape processing: $2$"
-#define STR_LOG_EXECUTING_PREPARED "s$1$: executing previously prepared statement"
-#define STR_LOG_EXECUTING_PREPARED_UPDATE "s$1$: executing previously prepared update statement"
-#define STR_LOG_EXECUTING_PREPARED_QUERY "s$1$: executing previously prepared query"
-#define STR_LOG_STRING_PARAMETER "s$1$: parameter no. $2$: type: string; value: $3$"
-#define STR_LOG_BOOLEAN_PARAMETER "s$1$: parameter no. $2$: type: boolean; value: $3$"
-#define STR_LOG_BYTE_PARAMETER "s$1$: parameter no. $2$: type: byte; value: $3$"
-#define STR_LOG_DATE_PARAMETER "s$1$: parameter no. $2$: type: date; value: $3$"
-#define STR_LOG_TIME_PARAMETER "s$1$: parameter no. $2$: type: time; value: $3$"
-#define STR_LOG_TIMESTAMP_PARAMETER "s$1$: parameter no. $2$: type: timestamp; value: $3$"
-#define STR_LOG_DOUBLE_PARAMETER "s$1$: parameter no. $2$: type: double; value: $3$"
-#define STR_LOG_FLOAT_PARAMETER "s$1$: parameter no. $2$: type: float; value: $3$"
-#define STR_LOG_INT_PARAMETER "s$1$: parameter no. $2$: type: int; value: $3$"
-#define STR_LOG_LONG_PARAMETER "s$1$: parameter no. $2$: type: long; value: $3$"
-#define STR_LOG_NULL_PARAMETER "s$1$: parameter no. $2$: sql-type: $3$; value: null"
-#define STR_LOG_OBJECT_NULL_PARAMETER "s$1$: parameter no. $2$: setting to null"
-#define STR_LOG_SHORT_PARAMETER "s$1$: parameter no. $2$: type: short; value: $3$"
-#define STR_LOG_BYTES_PARAMETER "s$1$: parameter no. $2$: type: byte[]"
-#define STR_LOG_CHARSTREAM_PARAMETER "s$1$: parameter no. $2$: type: character stream"
-#define STR_LOG_BINARYSTREAM_PARAMETER "s$1$: parameter no. $2$: type: binary stream"
-#define STR_LOG_CLEAR_PARAMETERS "s$1$: clearing all parameters"
-#define STR_LOG_META_DATA_METHOD "c$1$: entering XDatabaseMetaData::$2$"
-#define STR_LOG_META_DATA_METHOD_ARG1 "c$1$: entering XDatabaseMetaData::$2$( '$3$' )"
-#define STR_LOG_META_DATA_METHOD_ARG2 "c$1$: entering XDatabaseMetaData::$2$( '$3$', '$4$' )"
-#define STR_LOG_META_DATA_METHOD_ARG3 "c$1$: entering XDatabaseMetaData::$2$( '$3$', '$4$', '$5$' )"
-#define STR_LOG_META_DATA_METHOD_ARG4 "c$1$: entering XDatabaseMetaData::$2$( '$3$', '$4$', '$5$', '$6$' )"
-#define STR_LOG_META_DATA_RESULT "c$1$: leaving XDatabaseMetaData::$2$: success-with-result: $3$"
-#define STR_LOG_META_DATA_SUCCESS "c$1$: leaving XDatabaseMetaData::$2$: success"
+inline constexpr OUString STR_LOG_DRIVER_SUCCESS = u"jdbcBridge: success"_ustr;
+inline constexpr OUString STR_LOG_CREATE_STATEMENT = u"c$1$: creating statement"_ustr;
+inline constexpr OUString STR_LOG_CREATED_STATEMENT_ID = u"c$1$: created statement, statement id: s$2$"_ustr;
+inline constexpr OUString STR_LOG_PREPARE_STATEMENT = u"c$1$: preparing statement: $2$"_ustr;
+inline constexpr OUString STR_LOG_PREPARED_STATEMENT_ID = u"c$1$: prepared statement, statement id: s$2$"_ustr;
+inline constexpr OUString STR_LOG_PREPARE_CALL = u"c$1$: preparing call: $2$"_ustr;
+inline constexpr OUString STR_LOG_PREPARED_CALL_ID = u"c$1$: prepared call, statement id: s$2$"_ustr;
+inline constexpr OUString STR_LOG_NATIVE_SQL = u"c$1$: native SQL: $2$ -> $3$"_ustr;
+inline constexpr OUString STR_LOG_LOADING_DRIVER = u"c$1$: attempting to load driver class $2$"_ustr;
+inline constexpr OUString STR_LOG_NO_DRIVER_CLASS = u"c$1$: no Java Driver Class was provided"_ustr;
+inline constexpr OUString STR_LOG_CONN_SUCCESS = u"c$1$: success"_ustr;
+inline constexpr OUString STR_LOG_NO_SYSTEM_CONNECTION = u"c$1$: JDBC driver did not provide a JDBC connection"_ustr;
+inline constexpr OUString STR_LOG_GOT_JDBC_CONNECTION = u"c$1$: obtained a JDBC connection for $2$"_ustr;
+inline constexpr OUString STR_LOG_SHUTDOWN_CONNECTION = u"c$1$: shutting down connection"_ustr;
+inline constexpr OUString STR_LOG_GENERATED_VALUES = u"s$1$: retrieving generated values"_ustr;
+inline constexpr OUString STR_LOG_GENERATED_VALUES_FALLBACK = u"s$1$: getGeneratedValues: falling back to statement: $2$"_ustr;
+inline constexpr OUString STR_LOG_EXECUTE_STATEMENT = u"s$1$: going to execute: $2$"_ustr;
+inline constexpr OUString STR_LOG_EXECUTE_QUERY = u"s$1$: going to execute query: $2$"_ustr;
+inline constexpr OUString STR_LOG_CLOSING_STATEMENT = u"s$1$: closing/disposing statement"_ustr;
+inline constexpr OUString STR_LOG_EXECUTE_UPDATE = u"s$1$: going to execute update: $2$"_ustr;
+inline constexpr OUString STR_LOG_UPDATE_COUNT = u"s$1$: update count: $2$"_ustr;
+inline constexpr OUString STR_LOG_RESULT_SET_CONCURRENCY = u"s$1$: going to set result set concurrency: $2$"_ustr;
+inline constexpr OUString STR_LOG_RESULT_SET_TYPE = u"s$1$: going to set result set type: $2$"_ustr;
+inline constexpr OUString STR_LOG_FETCH_DIRECTION = u"s$1$: fetch direction: $2$"_ustr;
+inline constexpr OUString STR_LOG_FETCH_SIZE = u"s$1$: fetch size: $2$"_ustr;
+inline constexpr OUString STR_LOG_SET_ESCAPE_PROCESSING = u"s$1$: going to set escape processing: $2$"_ustr;
+inline constexpr OUString STR_LOG_EXECUTING_PREPARED = u"s$1$: executing previously prepared statement"_ustr;
+inline constexpr OUString STR_LOG_EXECUTING_PREPARED_UPDATE = u"s$1$: executing previously prepared update statement"_ustr;
+inline constexpr OUString STR_LOG_EXECUTING_PREPARED_QUERY = u"s$1$: executing previously prepared query"_ustr;
+inline constexpr OUString STR_LOG_STRING_PARAMETER = u"s$1$: parameter no. $2$: type: string; value: $3$"_ustr;
+inline constexpr OUString STR_LOG_BOOLEAN_PARAMETER = u"s$1$: parameter no. $2$: type: boolean; value: $3$"_ustr;
+inline constexpr OUString STR_LOG_BYTE_PARAMETER = u"s$1$: parameter no. $2$: type: byte; value: $3$"_ustr;
+inline constexpr OUString STR_LOG_DATE_PARAMETER = u"s$1$: parameter no. $2$: type: date; value: $3$"_ustr;
+inline constexpr OUString STR_LOG_TIME_PARAMETER = u"s$1$: parameter no. $2$: type: time; value: $3$"_ustr;
+inline constexpr OUString STR_LOG_TIMESTAMP_PARAMETER = u"s$1$: parameter no. $2$: type: timestamp; value: $3$"_ustr;
+inline constexpr OUString STR_LOG_DOUBLE_PARAMETER = u"s$1$: parameter no. $2$: type: double; value: $3$"_ustr;
+inline constexpr OUString STR_LOG_FLOAT_PARAMETER = u"s$1$: parameter no. $2$: type: float; value: $3$"_ustr;
+inline constexpr OUString STR_LOG_INT_PARAMETER = u"s$1$: parameter no. $2$: type: int; value: $3$"_ustr;
+inline constexpr OUString STR_LOG_LONG_PARAMETER = u"s$1$: parameter no. $2$: type: long; value: $3$"_ustr;
+inline constexpr OUString STR_LOG_NULL_PARAMETER = u"s$1$: parameter no. $2$: sql-type: $3$; value: null"_ustr;
+inline constexpr OUString STR_LOG_OBJECT_NULL_PARAMETER = u"s$1$: parameter no. $2$: setting to null"_ustr;
+inline constexpr OUString STR_LOG_SHORT_PARAMETER = u"s$1$: parameter no. $2$: type: short; value: $3$"_ustr;
+inline constexpr OUString STR_LOG_BYTES_PARAMETER = u"s$1$: parameter no. $2$: type: byte[]"_ustr;
+inline constexpr OUString STR_LOG_CHARSTREAM_PARAMETER = u"s$1$: parameter no. $2$: type: character stream"_ustr;
+inline constexpr OUString STR_LOG_BINARYSTREAM_PARAMETER = u"s$1$: parameter no. $2$: type: binary stream"_ustr;
+inline constexpr OUString STR_LOG_CLEAR_PARAMETERS = u"s$1$: clearing all parameters"_ustr;
+inline constexpr OUString STR_LOG_META_DATA_METHOD = u"c$1$: entering XDatabaseMetaData::$2$"_ustr;
+inline constexpr OUString STR_LOG_META_DATA_METHOD_ARG1 = u"c$1$: entering XDatabaseMetaData::$2$( '$3$' )"_ustr;
+inline constexpr OUString STR_LOG_META_DATA_METHOD_ARG2 = u"c$1$: entering XDatabaseMetaData::$2$( '$3$', '$4$' )"_ustr;
+inline constexpr OUString STR_LOG_META_DATA_METHOD_ARG3 = u"c$1$: entering XDatabaseMetaData::$2$( '$3$', '$4$', '$5$' )"_ustr;
+inline constexpr OUString STR_LOG_META_DATA_METHOD_ARG4 = u"c$1$: entering XDatabaseMetaData::$2$( '$3$', '$4$', '$5$', '$6$' )"_ustr;
+inline constexpr OUString STR_LOG_META_DATA_RESULT = u"c$1$: leaving XDatabaseMetaData::$2$: success-with-result: $3$"_ustr;
+inline constexpr OUString STR_LOG_META_DATA_SUCCESS = u"c$1$: leaving XDatabaseMetaData::$2$: success"_ustr;
#define STR_LOG_THROWING_EXCEPTION "SQLException to be thrown: message: '$1$', SQLState: $2$, ErrorCode: $3$"
-#define STR_LOG_SETTING_SYSTEM_PROPERTY "setting system property \"$1$\" to value \"$2$\""
+inline constexpr OUString STR_LOG_SETTING_SYSTEM_PROPERTY = u"setting system property \"$1$\" to value \"$2$\""_ustr;
-#define STR_DB_NOT_CONNECTED_STATE "08003"
-#define STR_DATA_CANNOT_SELECT_UNFILTERED_STATE "IM001"
+inline constexpr OUString STR_DB_NOT_CONNECTED_STATE = u"08003"_ustr;
+inline constexpr OUString STR_DATA_CANNOT_SELECT_UNFILTERED_STATE = u"IM001"_ustr;
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/connectivity/qa/connectivity/ado/DriverTest.cxx b/connectivity/qa/connectivity/ado/DriverTest.cxx
index abe4da67b012..a737387fe010 100644
--- a/connectivity/qa/connectivity/ado/DriverTest.cxx
+++ b/connectivity/qa/connectivity/ado/DriverTest.cxx
@@ -93,8 +93,8 @@ void AdoDriverTest::test_metadata()
}
const Any catalog;
- static const OUStringLiteral schemaPattern = u"%";
- static const OUStringLiteral tableNamePattern = u"%";
+ static constexpr OUStringLiteral schemaPattern = u"%";
+ static constexpr OUStringLiteral tableNamePattern = u"%";
const Sequence< OUString > types;
Reference< XResultSet > xResultSet =
@@ -107,7 +107,7 @@ void AdoDriverTest::test_metadata()
void AdoDriverTest::test_select_default_all()
{
- static const OUStringLiteral sql = u"select \"FirstName\" from \"Students\" ORDER BY \"FirstName\"";
+ static constexpr OUStringLiteral sql = u"select \"FirstName\" from \"Students\" ORDER BY \"FirstName\"";
Reference< XPreparedStatement > xStatement = m_xConnection->prepareStatement(sql);
if (!xStatement.is())
{
diff --git a/connectivity/qa/connectivity/mysql/mysql.cxx b/connectivity/qa/connectivity/mysql/mysql.cxx
index 7a4267b5e95b..4b1a9a4e4f08 100644
--- a/connectivity/qa/connectivity/mysql/mysql.cxx
+++ b/connectivity/qa/connectivity/mysql/mysql.cxx
@@ -22,6 +22,7 @@
#include <com/sun/star/sdbc/XDriver.hpp>
#include <com/sun/star/util/DateTime.hpp>
+#include <comphelper/propertysequence.hxx>
#include <svtools/miscopt.hxx>
#include <osl/process.h>
@@ -101,16 +102,16 @@ void MysqlTestDriver::setUp()
CPPUNIT_ASSERT_MESSAGE("no mysqlc component!", m_xMysqlcComponent.is());
// set user name and password
- m_infos = Sequence<PropertyValue>{ 2 };
- m_infos[0].Name = OUString{ "user" };
sal_Int32 nPer = m_sUrl.indexOf("/");
- m_infos[0].Value = makeAny(m_sUrl.copy(0, nPer));
+ OUString sUsername = m_sUrl.copy(0, nPer);
m_sUrl = m_sUrl.copy(nPer + 1);
- m_infos[1].Name = OUString{ "password" };
sal_Int32 nAt = m_sUrl.indexOf("@");
- m_infos[1].Value = makeAny(m_sUrl.copy(0, nAt));
+ OUString sPassword = m_sUrl.copy(0, nAt);
m_sUrl = m_sUrl.copy(nAt + 1);
+ m_infos = comphelper::InitPropertySequence(
+ { { "user", makeAny(sUsername) }, { "password", makeAny(sPassword) } });
+
m_xDriver.set(m_xMysqlcComponent, UNO_QUERY);
if (!m_xDriver.is())
{
diff --git a/connectivity/registry/ado/org/openoffice/Office/DataAccess/Drivers.xcu b/connectivity/registry/ado/org/openoffice/Office/DataAccess/Drivers.xcu
index 288c23e2e497..28f915ff8e3e 100644
--- a/connectivity/registry/ado/org/openoffice/Office/DataAccess/Drivers.xcu
+++ b/connectivity/registry/ado/org/openoffice/Office/DataAccess/Drivers.xcu
@@ -214,7 +214,7 @@
</node>
</node>
</node>
- <node oor:name="sdbc:ado:access:PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=*" oor:op="replace">
+ <node oor:name="sdbc:ado:access:Provider=Microsoft.ACE.OLEDB.12.0;DATA SOURCE=*" oor:op="replace">
<prop oor:name="Driver">
<value>com.sun.star.comp.sdbc.ado.ODriver</value>
</prop>
@@ -340,7 +340,7 @@
</node>
<node oor:name="Extension" oor:op="replace">
<prop oor:name="Value" oor:type="xs:string">
- <value>mdb</value>
+ <value></value>
</prop>
</node>
<node oor:name="SupportsColumnDescription" oor:op="replace">
@@ -350,20 +350,5 @@
</node>
</node>
</node>
- <node oor:name="sdbc:ado:access:Provider=Microsoft.ACE.OLEDB.12.0;DATA SOURCE=*" oor:op="replace">
- <prop oor:name="ParentURLPattern">
- <value>sdbc:ado:access:PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=*</value>
- </prop>
- <prop oor:name="DriverTypeDisplayName" oor:type="xs:string">
- <value xml:lang="en-US">Microsoft Access 2007</value>
- </prop>
- <node oor:name="MetaData">
- <node oor:name="Extension" oor:op="replace">
- <prop oor:name="Value" oor:type="xs:string">
- <value></value>
- </prop>
- </node>
- </node>
- </node>
</node>
</oor:component-data>
diff --git a/connectivity/registry/firebird/org/openoffice/Office/DataAccess/Drivers.xcu b/connectivity/registry/firebird/org/openoffice/Office/DataAccess/Drivers.xcu
index 586264183b60..11b214855bc6 100644
--- a/connectivity/registry/firebird/org/openoffice/Office/DataAccess/Drivers.xcu
+++ b/connectivity/registry/firebird/org/openoffice/Office/DataAccess/Drivers.xcu
@@ -77,13 +77,13 @@
<node oor:name="MetaData">
</node>
</node>
- <!-- Firebird FILE Driver -->
+ <!-- Firebird EXTERNAL Driver -->
<node oor:name="sdbc:firebird:*" oor:op="replace">
<prop oor:name="Driver">
<value>com.sun.star.comp.sdbc.firebird.Driver</value>
</prop>
<prop oor:name="DriverTypeDisplayName" oor:type="xs:string">
- <value xml:lang="en-US">Firebird File</value>
+ <value xml:lang="en-US">Firebird External</value>
</prop>
<node oor:name="Properties">
<!-- Don't use ODBC syntax for date&time literals and (full) outer joins,
@@ -124,6 +124,11 @@
<value>true</value>
</prop>
</node>
+ <node oor:name="Authentication" oor:op="replace">
+ <prop oor:name="Value" oor:type="xs:string">
+ <value>UserPassword</value>
+ </prop>
+ </node>
</node>
</node>
</node>
diff --git a/connectivity/registry/flat/org/openoffice/Office/DataAccess/Drivers.xcu b/connectivity/registry/flat/org/openoffice/Office/DataAccess/Drivers.xcu
index af1e37962be1..a0f69df29185 100644
--- a/connectivity/registry/flat/org/openoffice/Office/DataAccess/Drivers.xcu
+++ b/connectivity/registry/flat/org/openoffice/Office/DataAccess/Drivers.xcu
@@ -23,7 +23,7 @@
<value>com.sun.star.comp.sdbc.flat.ODriver</value>
</prop>
<prop oor:name="DriverTypeDisplayName" oor:type="xs:string">
- <value xml:lang="en-US">Text</value>
+ <value xml:lang="en-US">Text/CSV</value>
</prop>
<node oor:name="Properties">
<node oor:name="CharSet" oor:op="replace">
diff --git a/connectivity/registry/macab/org/openoffice/Office/DataAccess/Drivers.xcu b/connectivity/registry/macab/org/openoffice/Office/DataAccess/Drivers.xcu
index 3d9d3121de6e..027b6482535f 100644
--- a/connectivity/registry/macab/org/openoffice/Office/DataAccess/Drivers.xcu
+++ b/connectivity/registry/macab/org/openoffice/Office/DataAccess/Drivers.xcu
@@ -23,7 +23,7 @@
<value>com.sun.star.comp.sdbc.macab.Driver</value>
</prop>
<prop oor:name="DriverTypeDisplayName" oor:type="xs:string">
- <value xml:lang="en-US">Mac OS X Address Book</value>
+ <value xml:lang="en-US">macOS Address Book</value>
</prop>
<node oor:name="Properties">
<node oor:name="EscapeDateTime" oor:op="replace">
diff --git a/connectivity/registry/mysql_jdbc/org/openoffice/Office/DataAccess/Drivers.xcu b/connectivity/registry/mysql_jdbc/org/openoffice/Office/DataAccess/Drivers.xcu
index a4e95b04fe9b..38be69b48a4d 100644
--- a/connectivity/registry/mysql_jdbc/org/openoffice/Office/DataAccess/Drivers.xcu
+++ b/connectivity/registry/mysql_jdbc/org/openoffice/Office/DataAccess/Drivers.xcu
@@ -176,89 +176,5 @@
</node>
</node>
</node>
- <node oor:name="sdbc:mysql:mysqlc:*" oor:op="replace">
- <prop oor:name="Driver">
- <value>org.openoffice.comp.drivers.MySQL.Driver</value>
- </prop>
- <prop oor:name="DriverTypeDisplayName" oor:type="xs:string">
- <value xml:lang="en-US">MySQL (Native)</value>
- </prop>
- <node oor:name="Properties">
- <node oor:name="CharSet" oor:op="replace">
- <prop oor:name="Value" oor:type="xs:string">
- <value></value>
- </prop>
- </node>
- <node oor:name="LocalSocket" oor:op="replace">
- <prop oor:name="Value" oor:type="xs:string">
- <value></value>
- </prop>
- </node>
- <node oor:name="NamedPipe" oor:op="replace">
- <prop oor:name="Value" oor:type="xs:string">
- <value></value>
- </prop>
- </node>
- <node oor:name="AddIndexAppendix" oor:op="replace">
- <prop oor:name="Value" oor:type="xs:boolean">
- <value>true</value>
- </prop>
- </node>
- <node oor:name="ParameterNameSubstitution" oor:op="replace">
- <prop oor:name="Value" oor:type="xs:boolean">
- <value>true</value>
- </prop>
- </node>
- </node>
- <node oor:name="Features">
- <node oor:name="UseKeywordAsBeforeAlias" oor:op="replace">
- <prop oor:name="Value" oor:type="xs:boolean">
- <value>true</value>
- </prop>
- </node>
- <node oor:name="IgnoreDriverPrivileges" oor:op="replace">
- <prop oor:name="Value" oor:type="xs:boolean">
- <value>true</value>
- </prop>
- </node>
- <node oor:name="DisplayVersionColumns" oor:op="replace">
- <prop oor:name="Value" oor:type="xs:boolean">
- <value>true</value>
- </prop>
- </node>
- <node oor:name="UseDOSLineEnds" oor:op="replace">
- <prop oor:name="Value" oor:type="xs:boolean">
- <value>true</value>
- </prop>
- </node>
- <node oor:name="BooleanComparisonMode" oor:op="replace">
- <prop oor:name="Value" oor:type="xs:boolean">
- <value>true</value>
- </prop>
- </node>
- <node oor:name="FormsCheckRequiredFields" oor:op="replace">
- <prop oor:name="Value" oor:type="xs:boolean">
- <value>true</value>
- </prop>
- </node>
- </node>
- <node oor:name="MetaData">
- <node oor:name="SupportsTableCreation" oor:op="replace">
- <prop oor:name="Value" oor:type="xs:boolean">
- <value>true</value>
- </prop>
- </node>
- <node oor:name="Authentication" oor:op="replace">
- <prop oor:name="Value" oor:type="xs:string">
- <value>UserPassword</value>
- </prop>
- </node>
- <node oor:name="SupportsColumnDescription" oor:op="replace">
- <prop oor:name="Value" oor:type="xs:boolean">
- <value>true</value>
- </prop>
- </node>
- </node>
- </node>
</node>
</oor:component-data>
diff --git a/connectivity/registry/mysqlc/org/openoffice/Office/DataAccess/Drivers.xcu b/connectivity/registry/mysqlc/org/openoffice/Office/DataAccess/Drivers.xcu
index 1b83115dc7d0..13ed25f95e06 100644
--- a/connectivity/registry/mysqlc/org/openoffice/Office/DataAccess/Drivers.xcu
+++ b/connectivity/registry/mysqlc/org/openoffice/Office/DataAccess/Drivers.xcu
@@ -23,7 +23,7 @@
<value>com.sun.star.comp.sdbc.mysqlc.MysqlCDriver</value>
</prop>
<prop oor:name="DriverTypeDisplayName" oor:type="xs:string">
- <value xml:lang="en-US">MySQL Connector</value>
+ <value xml:lang="en-US">MySQL/MariaDB Connector</value>
</prop>
<node oor:name="Properties">
<node oor:name="CharSet" oor:op="replace">
@@ -41,6 +41,11 @@
<value></value>
</prop>
</node>
+ <node oor:name="AddIndexAppendix" oor:op="replace">
+ <prop oor:name="Value" oor:type="xs:boolean">
+ <value>true</value>
+ </prop>
+ </node>
<node oor:name="GenerateASBeforeCorrelationName" oor:op="replace">
<!-- Corresponds to UseKeywordAsBeforeAlias in Features - see connectivity/registry/README -->
<prop oor:name="Value" oor:type="xs:boolean">
@@ -122,6 +127,11 @@
<value>UserPassword</value>
</prop>
</node>
+ <node oor:name="SupportsColumnDescription" oor:op="replace">
+ <prop oor:name="Value" oor:type="xs:boolean">
+ <value>true</value>
+ </prop>
+ </node>
</node>
</node>
</node>
diff --git a/connectivity/source/commontools/AutoRetrievingBase.cxx b/connectivity/source/commontools/AutoRetrievingBase.cxx
index d1170fdd972b..99327f27eeb5 100644
--- a/connectivity/source/commontools/AutoRetrievingBase.cxx
+++ b/connectivity/source/commontools/AutoRetrievingBase.cxx
@@ -20,6 +20,7 @@
#include <AutoRetrievingBase.hxx>
#include <osl/diagnose.h>
+#include <o3tl/string_view.hxx>
namespace connectivity
{
@@ -39,7 +40,7 @@ namespace connectivity
{ // we need a table name
sal_Int32 nIntoIndex = sStmt.indexOf("INTO ") + 5;
while (nIntoIndex<sStmt.getLength() && sStmt[nIntoIndex]==' ') ++nIntoIndex;
- const OUString sTableName = sStmt.getToken(0, ' ', nIntoIndex);
+ const std::u16string_view sTableName = o3tl::getToken(sStmt, 0, ' ', nIntoIndex);
return m_sGeneratedValueStatement.replaceAt(nTableIndex, strlen(sTable), sTableName);
}
return m_sGeneratedValueStatement;
diff --git a/connectivity/source/commontools/BlobHelper.cxx b/connectivity/source/commontools/BlobHelper.cxx
index 591fe961e517..f1f048a7318e 100644
--- a/connectivity/source/commontools/BlobHelper.cxx
+++ b/connectivity/source/commontools/BlobHelper.cxx
@@ -20,6 +20,7 @@
#include <comphelper/seqstream.hxx>
#include <connectivity/dbexception.hxx>
#include <com/sun/star/sdbc/SQLException.hpp>
+#include <o3tl/unreachable.hxx>
using namespace connectivity;
using namespace dbtools;
@@ -47,25 +48,16 @@ css::uno::Reference< css::io::XInputStream > SAL_CALL BlobHelper::getBinaryStrea
return new ::comphelper::SequenceInputStream(m_aValue);
}
-
-// The "return" after a call to throwFeatureNotImplementedSQLException()
-// (which always throws) will be detected as unreachable when doing
-// global inlining.
-
-SAL_WNOUNREACHABLE_CODE_PUSH
-
::sal_Int64 SAL_CALL BlobHelper::position( const css::uno::Sequence< ::sal_Int8 >& /*pattern*/, ::sal_Int64 /*start*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XBlob::position", *this );
- return 0;
+ O3TL_UNREACHABLE;
}
::sal_Int64 SAL_CALL BlobHelper::positionOfBlob( const css::uno::Reference< css::sdbc::XBlob >& /*pattern*/, ::sal_Int64 /*start*/ )
{
::dbtools::throwFeatureNotImplementedSQLException( "XBlob::positionOfBlob", *this );
- return 0;
+ O3TL_UNREACHABLE;
}
-SAL_WNOUNREACHABLE_CODE_POP
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/commontools/CommonTools.cxx b/connectivity/source/commontools/CommonTools.cxx
index 223129a71e92..b5f7ce50fe74 100644
--- a/connectivity/source/commontools/CommonTools.cxx
+++ b/connectivity/source/commontools/CommonTools.cxx
@@ -29,9 +29,8 @@
#include <osl/diagnose.h>
#include <rtl/character.hxx>
#include <rtl/process.h>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
-using namespace ::comphelper;
static sal_Unicode rtl_ascii_toUpperCase( sal_Unicode ch )
{
return ch >= 0x0061 && ch <= 0x007a ? ch + 0x20 : ch;
@@ -40,8 +39,6 @@ static sal_Unicode rtl_ascii_toUpperCase( sal_Unicode ch )
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::java;
using namespace dbtools;
@@ -120,10 +117,10 @@ namespace connectivity
{
Reference< XJavaVM > xVM = JavaVirtualMachine::create(_rxContext);
- Sequence<sal_Int8> processID(16);
- rtl_getGlobalProcessId( reinterpret_cast<sal_uInt8*>(processID.getArray()) );
- processID.realloc(17);
- processID[16] = 0;
+ Sequence<sal_Int8> processID(17); // 16 + 1
+ auto pprocessID = processID.getArray();
+ rtl_getGlobalProcessId( reinterpret_cast<sal_uInt8*>(pprocessID) );
+ pprocessID[16] = 0; // RETURN_VIRTUALMACHINE
Any uaJVM = xVM->getJavaVM( processID );
sal_Int64 nTemp;
@@ -165,15 +162,15 @@ namespace connectivity
namespace dbtools
{
-static bool isCharOk(sal_Unicode c,const OUString& _rSpecials)
+static bool isCharOk(sal_Unicode c, std::u16string_view _rSpecials)
{
return ( ((c >= 97) && (c <= 122)) || ((c >= 65) && (c <= 90)) || ((c >= 48) && (c <= 57)) ||
- c == '_' || _rSpecials.indexOf(c) != -1);
+ c == '_' || _rSpecials.find(c) != std::u16string_view::npos);
}
-bool isValidSQLName(const OUString& rName,const OUString& _rSpecials)
+bool isValidSQLName(const OUString& rName, std::u16string_view _rSpecials)
{
// Test for correct naming (in SQL sense)
// This is important for table names for example
@@ -202,7 +199,7 @@ bool isValidSQLName(const OUString& rName,const OUString& _rSpecials)
}
// Creates a new name if necessary
-OUString convertName2SQLName(const OUString& rName,const OUString& _rSpecials)
+OUString convertName2SQLName(const OUString& rName, std::u16string_view _rSpecials)
{
if(isValidSQLName(rName,_rSpecials))
return rName;
@@ -221,10 +218,10 @@ OUString convertName2SQLName(const OUString& rName,const OUString& _rSpecials)
return aNewName.makeStringAndClear();
}
-OUString quoteName(const OUString& _rQuote, const OUString& _rName)
+OUString quoteName(std::u16string_view _rQuote, const OUString& _rName)
{
OUString sName = _rName;
- if( !_rQuote.isEmpty() && _rQuote.toChar() != ' ')
+ if( !_rQuote.empty() && _rQuote[0] != ' ')
sName = _rQuote + _rName + _rQuote;
return sName;
}
diff --git a/connectivity/source/commontools/ConnectionWrapper.cxx b/connectivity/source/commontools/ConnectionWrapper.cxx
index d7d999058a24..b8e45fb027e7 100644
--- a/connectivity/source/commontools/ConnectionWrapper.cxx
+++ b/connectivity/source/commontools/ConnectionWrapper.cxx
@@ -25,7 +25,6 @@
#include <comphelper/servicehelper.hxx>
#include <comphelper/hash.hxx>
#include <cppuhelper/supportsservice.hxx>
-#include <cppuhelper/typeprovider.hxx>
#include <com/sun/star/reflection/ProxyFactory.hpp>
#include <algorithm>
@@ -123,7 +122,7 @@ css::uno::Sequence< OUString > SAL_CALL OConnectionWrapper::getSupportedServiceN
{
sal_Int32 nLen = aSupported.getLength();
aSupported.realloc( nLen + 1 );
- aSupported[ nLen ] = sConnectionService;
+ aSupported.getArray()[ nLen ] = sConnectionService;
}
// outta here
@@ -154,8 +153,8 @@ Sequence< Type > SAL_CALL OConnectionWrapper::getTypes( )
// css::lang::XUnoTunnel
sal_Int64 SAL_CALL OConnectionWrapper::getSomething( const Sequence< sal_Int8 >& rId )
{
- if (isUnoTunnelId<OConnectionWrapper>(rId))
- return reinterpret_cast< sal_Int64 >( this );
+ if (comphelper::isUnoTunnelId<OConnectionWrapper>(rId))
+ return comphelper::getSomething_cast(this);
if(m_xUnoTunnel.is())
return m_xUnoTunnel->getSomething(rId);
@@ -163,11 +162,10 @@ sal_Int64 SAL_CALL OConnectionWrapper::getSomething( const Sequence< sal_Int8 >&
}
-Sequence< sal_Int8 > OConnectionWrapper::getUnoTunnelId()
+const Sequence< sal_Int8 > & OConnectionWrapper::getUnoTunnelId()
{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
+ static const comphelper::UnoIdInit implId;
+ return implId.getSeq();
}
namespace
@@ -201,9 +199,10 @@ void OConnectionWrapper::createUniqueId( const OUString& _rURL
if ( !_rPassword.isEmpty() )
sha1.update(reinterpret_cast<unsigned char const*>(_rPassword.getStr()), _rPassword.getLength() * sizeof(sal_Unicode));
// now we need to sort the properties
- std::sort(_rInfo.begin(),_rInfo.end(),TPropertyValueLessFunctor());
+ auto [begin, end] = asNonConstRange(_rInfo);
+ std::sort(begin,end,TPropertyValueLessFunctor());
- for (PropertyValue const & prop : std::as_const(_rInfo))
+ for (PropertyValue const& prop : _rInfo)
{
// we only include strings an integer values
OUString sValue;
@@ -219,7 +218,7 @@ void OConnectionWrapper::createUniqueId( const OUString& _rURL
Sequence< OUString> aSeq;
if ( prop.Value >>= aSeq )
{
- for(OUString const & s : std::as_const(aSeq))
+ for (OUString const& s : aSeq)
sha1.update(reinterpret_cast<unsigned char const*>(s.getStr()), s.getLength() * sizeof(sal_Unicode));
}
}
diff --git a/connectivity/source/commontools/DateConversion.cxx b/connectivity/source/commontools/DateConversion.cxx
index 81338b3dc9fa..0895881d7ee3 100644
--- a/connectivity/source/commontools/DateConversion.cxx
+++ b/connectivity/source/commontools/DateConversion.cxx
@@ -33,7 +33,7 @@
#include <comphelper/types.hxx>
#include <rtl/ustrbuf.hxx>
#include <sal/log.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
using namespace ::connectivity;
@@ -83,16 +83,7 @@ OUString DBTypeConversion::toSQLString(sal_Int32 eType, const Any& _rVal,
{
OUString aTemp;
_rxTypeConverter->convertToSimpleType(_rVal, TypeClass_STRING) >>= aTemp;
- sal_Int32 nIndex = sal_Int32(-2);
- static const OUStringLiteral sQuot(u"\'");
- do
- {
- nIndex += 2;
- nIndex = aTemp.indexOf(sQuot,nIndex);
- if(nIndex != -1)
- aTemp = aTemp.replaceAt(nIndex,sQuot.getLength(), "\'\'");
- } while (nIndex != -1);
-
+ aTemp = aTemp.replaceAll(u"\'", u"\'\'");
aRet.append(aTemp);
}
aRet.append("'");
@@ -134,9 +125,9 @@ OUString DBTypeConversion::toSQLString(sal_Int32 eType, const Any& _rVal,
// check if this is really a timestamp or only a date
if ( bOk )
{
- aRet.append("{ts '");
- aRet.append(DBTypeConversion::toDateTimeString(aDateTime));
- aRet.append("'}");
+ aRet.append("{ts '"
+ + DBTypeConversion::toDateTimeString(aDateTime)
+ + "'}");
break;
}
break;
@@ -162,9 +153,9 @@ OUString DBTypeConversion::toSQLString(sal_Int32 eType, const Any& _rVal,
else
bOk = _rVal >>= aDate;
OSL_ENSURE( bOk, "DBTypeConversion::toSQLString: _rVal is not date!");
- aRet.append("{d '");
- aRet.append(DBTypeConversion::toDateString(aDate));
- aRet.append("'}");
+ aRet.append("{d '"
+ + DBTypeConversion::toDateString(aDate)
+ + "'}");
} break;
case DataType::TIME:
{
@@ -187,9 +178,9 @@ OUString DBTypeConversion::toSQLString(sal_Int32 eType, const Any& _rVal,
else
bOk = _rVal >>= aTime;
OSL_ENSURE( bOk,"DBTypeConversion::toSQLString: _rVal is not time!");
- aRet.append("{t '");
- aRet.append(DBTypeConversion::toTimeString(aTime));
- aRet.append("'}");
+ aRet.append("{t '"
+ + DBTypeConversion::toTimeString(aTime)
+ + "'}");
} break;
}
}
diff --git a/connectivity/source/commontools/DriversConfig.cxx b/connectivity/source/commontools/DriversConfig.cxx
index c95d30091184..90e361a8e0a8 100644
--- a/connectivity/source/commontools/DriversConfig.cxx
+++ b/connectivity/source/commontools/DriversConfig.cxx
@@ -16,9 +16,13 @@
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <config_fuzzers.h>
+
#include <connectivity/DriversConfig.hxx>
+#include <o3tl/string_view.hxx>
#include <tools/wldcrd.hxx>
#include <comphelper/sequence.hxx>
+#include <utility>
using namespace connectivity;
using namespace utl;
@@ -29,13 +33,8 @@ namespace
void lcl_convert(const uno::Sequence< OUString >& _aSource,uno::Any& _rDest)
{
uno::Sequence<uno::Any> aRet(_aSource.getLength());
- uno::Any* pAny = aRet.getArray();
- const OUString* pIter = _aSource.getConstArray();
- const OUString* pEnd = pIter + _aSource.getLength();
- for (;pIter != pEnd ; ++pIter,++pAny)
- {
- *pAny <<= *pIter;
- }
+ std::transform(_aSource.begin(), _aSource.end(), aRet.getArray(),
+ [](auto& str) { return uno::Any(str); });
_rDest <<= aRet;
}
void lcl_fillValues(const ::utl::OConfigurationNode& _aURLPatternNode,const OUString& _sNode,::comphelper::NamedValueCollection& _rValues)
@@ -45,17 +44,14 @@ namespace
return;
uno::Sequence< OUString > aStringSeq;
- const uno::Sequence< OUString > aProperties = aPropertiesNode.getNodeNames();
- const OUString* pPropertiesIter = aProperties.getConstArray();
- const OUString* pPropertiesEnd = pPropertiesIter + aProperties.getLength();
- for (;pPropertiesIter != pPropertiesEnd ; ++pPropertiesIter)
+ for (auto& prop : aPropertiesNode.getNodeNames())
{
- uno::Any aValue = aPropertiesNode.getNodeValue(*pPropertiesIter + "/Value");
+ uno::Any aValue = aPropertiesNode.getNodeValue(prop + "/Value");
if ( aValue >>= aStringSeq )
{
lcl_convert(aStringSeq,aValue);
}
- _rValues.put(*pPropertiesIter,aValue);
+ _rValues.put(prop, aValue);
} // for (;pPropertiesIter != pPropertiesEnd ; ++pPropertiesIter,++pNamedIter)
}
void lcl_readURLPatternNode(const ::utl::OConfigurationTreeRoot& _aInstalled,const OUString& _sEntry,TInstalledDriver& _rInstalledDriver)
@@ -102,23 +98,20 @@ const TInstalledDrivers& DriversConfigImpl::getInstalledDrivers(const uno::Refer
if ( m_aInstalled.isValid() )
{
- const uno::Sequence< OUString > aURLPatterns = m_aInstalled.getNodeNames();
- const OUString* pPatternIter = aURLPatterns.getConstArray();
- const OUString* pPatternEnd = pPatternIter + aURLPatterns.getLength();
- for (;pPatternIter != pPatternEnd ; ++pPatternIter)
+ for (auto& pattern : m_aInstalled.getNodeNames())
{
TInstalledDriver aInstalledDriver;
- lcl_readURLPatternNode(m_aInstalled,*pPatternIter,aInstalledDriver);
+ lcl_readURLPatternNode(m_aInstalled, pattern, aInstalledDriver);
if ( !aInstalledDriver.sDriverFactory.isEmpty() )
- m_aDrivers.emplace(*pPatternIter,aInstalledDriver);
+ m_aDrivers.emplace(pattern, aInstalledDriver);
}
} // if ( m_aInstalled.isValid() )
}
return m_aDrivers;
}
-DriversConfig::DriversConfig(const uno::Reference< uno::XComponentContext >& _rxORB)
-:m_xORB(_rxORB)
+DriversConfig::DriversConfig(uno::Reference< uno::XComponentContext > _xORB)
+:m_xORB(std::move(_xORB))
{
}
@@ -146,6 +139,11 @@ DriversConfig& DriversConfig::operator=( const DriversConfig& _rhs )
OUString DriversConfig::getDriverFactoryName(std::u16string_view _sURL) const
{
+#if ENABLE_FUZZERS
+ if (o3tl::starts_with(_sURL, u"sdbc:dbase:"))
+ return "com.sun.star.comp.sdbc.dbase.ODriver";
+#endif
+
const TInstalledDrivers& rDrivers = m_aNode->getInstalledDrivers(m_xORB);
OUString sRet;
OUString sOldPattern;
diff --git a/connectivity/source/commontools/FDatabaseMetaDataResultSet.cxx b/connectivity/source/commontools/FDatabaseMetaDataResultSet.cxx
index 3413079e1a0a..6b80f9495fe4 100644
--- a/connectivity/source/commontools/FDatabaseMetaDataResultSet.cxx
+++ b/connectivity/source/commontools/FDatabaseMetaDataResultSet.cxx
@@ -27,6 +27,7 @@
#include <comphelper/sequence.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <connectivity/dbexception.hxx>
+#include <o3tl/safeint.hxx>
#include <o3tl/unreachable.hxx>
#include <TConnection.hxx>
@@ -36,16 +37,13 @@ using namespace cppu;
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;
ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet()
- :ODatabaseMetaDataResultSet_BASE(m_aMutex)
- ,::comphelper::OPropertyContainer(ODatabaseMetaDataResultSet_BASE::rBHelper)
- ,m_aStatement(nullptr)
- ,m_nColPos(0)
+ :
+ m_nColPos(0)
,m_bBOF(true)
,m_bEOF(true)
{
@@ -54,10 +52,8 @@ ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet()
ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet( MetaDataResultSetType _eType )
- :ODatabaseMetaDataResultSet_BASE(m_aMutex)
- ,::comphelper::OPropertyContainer(ODatabaseMetaDataResultSet_BASE::rBHelper)
- ,m_aStatement(nullptr)
- ,m_nColPos(0)
+ :
+ m_nColPos(0)
,m_bBOF(true)
,m_bEOF(true)
{
@@ -106,12 +102,11 @@ void ODatabaseMetaDataResultSet::setType(MetaDataResultSetType _eType)
}
}
-void ODatabaseMetaDataResultSet::disposing()
+void ODatabaseMetaDataResultSet::disposing(std::unique_lock<std::mutex>& rGuard)
{
- OPropertySetHelper::disposing();
+ OPropertySetHelper::disposing(rGuard);
- ::osl::MutexGuard aGuard(m_aMutex);
- m_aStatement = nullptr;
+ m_aStatement.clear();
m_xMetaData.clear();
m_aRowsIter = m_aRows.end();
m_aRows.clear();
@@ -143,20 +138,19 @@ Sequence< Type > SAL_CALL ODatabaseMetaDataResultSet::getTypes( )
return ::comphelper::concatSequences(aTypes.getTypes(),ODatabaseMetaDataResultSet_BASE::getTypes());
}
-void ODatabaseMetaDataResultSet::setRows(const ORows& _rRows)
+void ODatabaseMetaDataResultSet::setRows(ORows&& _rRows)
{
- m_aRows = _rRows;
+ m_aRows = std::move(_rRows);
m_bBOF = true;
m_bEOF = m_aRows.empty();
}
sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::findColumn( const OUString& columnName )
{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed );
+ std::unique_lock aGuard( m_aMutex );
+ throwIfDisposed(aGuard);
-
- Reference< XResultSetMetaData > xMeta = getMetaData();
+ Reference< XResultSetMetaData > xMeta = getMetaData(aGuard);
sal_Int32 nLen = xMeta->getColumnCount();
sal_Int32 i = 1;
for(;i<=nLen;++i)
@@ -171,9 +165,9 @@ sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::findColumn( const OUString& colum
O3TL_UNREACHABLE;
}
-void ODatabaseMetaDataResultSet::checkIndex(sal_Int32 columnIndex )
+void ODatabaseMetaDataResultSet::checkIndex(std::unique_lock<std::mutex>& /*rGuard*/, sal_Int32 columnIndex )
{
- if(columnIndex >= static_cast<sal_Int32>((*m_aRowsIter).size()) || columnIndex < 1)
+ if(columnIndex < 1 || o3tl::make_unsigned(columnIndex) >= (*m_aRowsIter).size())
::dbtools::throwInvalidIndexException(*this);
}
@@ -190,43 +184,43 @@ Reference< css::io::XInputStream > SAL_CALL ODatabaseMetaDataResultSet::getChara
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::getBoolean( sal_Int32 columnIndex )
{
- return bool(getValue(columnIndex));
+ return getValue(columnIndex).getBool();
}
sal_Int8 SAL_CALL ODatabaseMetaDataResultSet::getByte( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getInt8();
}
Sequence< sal_Int8 > SAL_CALL ODatabaseMetaDataResultSet::getBytes( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getSequence();
}
css::util::Date SAL_CALL ODatabaseMetaDataResultSet::getDate( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getDate();
}
double SAL_CALL ODatabaseMetaDataResultSet::getDouble( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getDouble();
}
float SAL_CALL ODatabaseMetaDataResultSet::getFloat( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getFloat();
}
sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::getInt( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getInt32();
}
@@ -238,15 +232,19 @@ sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::getRow( )
sal_Int64 SAL_CALL ODatabaseMetaDataResultSet::getLong( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getLong();
}
Reference< XResultSetMetaData > SAL_CALL ODatabaseMetaDataResultSet::getMetaData( )
{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed );
+ std::unique_lock aGuard( m_aMutex );
+ return getMetaData(aGuard);
+}
+Reference< XResultSetMetaData > ODatabaseMetaDataResultSet::getMetaData( std::unique_lock<std::mutex>& rGuard )
+{
+ throwIfDisposed(rGuard);
if(!m_xMetaData.is())
m_xMetaData = new ODatabaseMetaDataResultSetMetaData();
@@ -285,50 +283,50 @@ Any SAL_CALL ODatabaseMetaDataResultSet::getObject( sal_Int32 columnIndex, const
sal_Int16 SAL_CALL ODatabaseMetaDataResultSet::getShort( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getInt16();
}
OUString SAL_CALL ODatabaseMetaDataResultSet::getString( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getString();
}
css::util::Time SAL_CALL ODatabaseMetaDataResultSet::getTime( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getTime();
}
css::util::DateTime SAL_CALL ODatabaseMetaDataResultSet::getTimestamp( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getDateTime();
}
-sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isAfterLast( )
+sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isAfterLast()
{
return m_bEOF;
}
-
-SAL_WNOUNREACHABLE_CODE_PUSH
+bool ODatabaseMetaDataResultSet::isAfterLast( std::unique_lock<std::mutex>& /*rGuard*/)
+{
+ return m_bEOF;
+}
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isFirst( )
{
::dbtools::throwFunctionSequenceException(*this);
- return false;
+ O3TL_UNREACHABLE;
}
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isLast( )
{
::dbtools::throwFunctionSequenceException(*this);
- return false;
+ O3TL_UNREACHABLE;
}
-SAL_WNOUNREACHABLE_CODE_POP
-
void SAL_CALL ODatabaseMetaDataResultSet::beforeFirst( )
{
@@ -344,49 +342,44 @@ void SAL_CALL ODatabaseMetaDataResultSet::afterLast( )
void SAL_CALL ODatabaseMetaDataResultSet::close( )
{
{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed );
-
+ std::unique_lock aGuard( m_aMutex );
+ throwIfDisposed(aGuard);
}
dispose();
}
-SAL_WNOUNREACHABLE_CODE_PUSH
-
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::first( )
{
::dbtools::throwFunctionSequenceException(*this);
- return false;
+ O3TL_UNREACHABLE;
}
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::last( )
{
::dbtools::throwFunctionSequenceException(*this);
- return false;
+ O3TL_UNREACHABLE;
}
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::absolute( sal_Int32 /*row*/ )
{
::dbtools::throwFunctionSequenceException(*this);
- return false;
+ O3TL_UNREACHABLE;
}
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::relative( sal_Int32 /*row*/ )
{
::dbtools::throwFunctionSequenceException(*this);
- return false;
+ O3TL_UNREACHABLE;
}
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::previous( )
{
::dbtools::throwFunctionSequenceException(*this);
- return false;
+ O3TL_UNREACHABLE;
}
-SAL_WNOUNREACHABLE_CODE_POP
-
Reference< XInterface > SAL_CALL ODatabaseMetaDataResultSet::getStatement( )
{
@@ -394,39 +387,44 @@ Reference< XInterface > SAL_CALL ODatabaseMetaDataResultSet::getStatement( )
}
-SAL_WNOUNREACHABLE_CODE_PUSH
-
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::rowDeleted( )
{
::dbtools::throwFunctionSequenceException(*this);
- return false;
+ O3TL_UNREACHABLE;
}
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::rowInserted( )
{
::dbtools::throwFunctionSequenceException(*this);
- return false;
+ O3TL_UNREACHABLE;
}
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::rowUpdated( )
{
::dbtools::throwFunctionSequenceException(*this);
- return false;
+ O3TL_UNREACHABLE;
}
-SAL_WNOUNREACHABLE_CODE_POP
-
-sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isBeforeFirst( )
+sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isBeforeFirst()
{
return m_bBOF;
}
+bool ODatabaseMetaDataResultSet::isBeforeFirst(std::unique_lock<std::mutex>& /*rGuard*/)
+{
+ return m_bBOF;
+}
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::next( )
{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed );
+ std::unique_lock aGuard( m_aMutex );
+ return next(aGuard);
+}
+
+bool ODatabaseMetaDataResultSet::next( std::unique_lock<std::mutex>& rGuard )
+{
+ throwIfDisposed(rGuard);
if ( m_bBOF )
{
@@ -454,9 +452,8 @@ sal_Bool SAL_CALL ODatabaseMetaDataResultSet::next( )
sal_Bool SAL_CALL ODatabaseMetaDataResultSet::wasNull( )
{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed );
-
+ std::unique_lock aGuard( m_aMutex );
+ throwIfDisposed(aGuard);
if(m_aRowsIter == m_aRows.end() || !(*m_aRowsIter)[m_nColPos].is())
return true;
@@ -633,13 +630,13 @@ ORowSetValueDecorator& ORowSetValueDecorator::operator=(const ORowSetValue& _aVa
const ORowSetValue& ODatabaseMetaDataResultSet::getValue(sal_Int32 columnIndex)
{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed );
+ std::unique_lock aGuard( m_aMutex );
+ throwIfDisposed(aGuard);
- if ( isBeforeFirst() || isAfterLast() )
+ if ( isBeforeFirst(aGuard) || isAfterLast(aGuard) )
::dbtools::throwFunctionSequenceException( *this );
- checkIndex(columnIndex );
+ checkIndex(aGuard, columnIndex);
m_nColPos = columnIndex;
if(m_aRowsIter != m_aRows.end() && (*m_aRowsIter)[columnIndex].is())
@@ -744,29 +741,25 @@ void SAL_CALL ODatabaseMetaDataResultSet::initialize( const Sequence< Any >& _aA
return;
ORows aRowsToSet;
- const Sequence<Any>* pRowsIter = aRows.getConstArray();
- const Sequence<Any>* pRowsEnd = pRowsIter + aRows.getLength();
- for (; pRowsIter != pRowsEnd;++pRowsIter)
+ for (auto& row : aRows)
{
ORow aRowToSet;
- const Any* pRowIter = pRowsIter->getConstArray();
- const Any* pRowEnd = pRowIter + pRowsIter->getLength();
- for (; pRowIter != pRowEnd;++pRowIter)
+ for (auto& field : row)
{
ORowSetValueDecoratorRef aValue;
- switch( pRowIter->getValueTypeClass() )
+ switch (field.getValueTypeClass())
{
case TypeClass_BOOLEAN:
{
bool bValue = false;
- *pRowIter >>= bValue;
+ field >>= bValue;
aValue = new ORowSetValueDecorator(ORowSetValue(bValue));
}
break;
case TypeClass_BYTE:
{
sal_Int8 nValue(0);
- *pRowIter >>= nValue;
+ field >>= nValue;
aValue = new ORowSetValueDecorator(ORowSetValue(nValue));
}
break;
@@ -774,7 +767,7 @@ void SAL_CALL ODatabaseMetaDataResultSet::initialize( const Sequence< Any >& _aA
case TypeClass_UNSIGNED_SHORT:
{
sal_Int16 nValue(0);
- *pRowIter >>= nValue;
+ field >>= nValue;
aValue = new ORowSetValueDecorator(ORowSetValue(nValue));
}
break;
@@ -782,7 +775,7 @@ void SAL_CALL ODatabaseMetaDataResultSet::initialize( const Sequence< Any >& _aA
case TypeClass_UNSIGNED_LONG:
{
sal_Int32 nValue(0);
- *pRowIter >>= nValue;
+ field >>= nValue;
aValue = new ORowSetValueDecorator(ORowSetValue(nValue));
}
break;
@@ -790,28 +783,28 @@ void SAL_CALL ODatabaseMetaDataResultSet::initialize( const Sequence< Any >& _aA
case TypeClass_UNSIGNED_HYPER:
{
sal_Int64 nValue(0);
- *pRowIter >>= nValue;
+ field >>= nValue;
aValue = new ORowSetValueDecorator(ORowSetValue(nValue));
}
break;
case TypeClass_FLOAT:
{
float nValue(0.0);
- *pRowIter >>= nValue;
+ field >>= nValue;
aValue = new ORowSetValueDecorator(ORowSetValue(nValue));
}
break;
case TypeClass_DOUBLE:
{
double nValue(0.0);
- *pRowIter >>= nValue;
+ field >>= nValue;
aValue = new ORowSetValueDecorator(ORowSetValue(nValue));
}
break;
case TypeClass_STRING:
{
OUString sValue;
- *pRowIter >>= sValue;
+ field >>= sValue;
aValue = new ORowSetValueDecorator(ORowSetValue(sValue));
}
break;
@@ -822,7 +815,7 @@ void SAL_CALL ODatabaseMetaDataResultSet::initialize( const Sequence< Any >& _aA
}
aRowsToSet.push_back(aRowToSet);
} // for (; pRowsIter != pRowsEnd;++pRowsIter
- setRows(aRowsToSet);
+ setRows(std::move(aRowsToSet));
}
// XServiceInfo
diff --git a/connectivity/source/commontools/FDatabaseMetaDataResultSetMetaData.cxx b/connectivity/source/commontools/FDatabaseMetaDataResultSetMetaData.cxx
index 561953a0796c..291ce7a7d96b 100644
--- a/connectivity/source/commontools/FDatabaseMetaDataResultSetMetaData.cxx
+++ b/connectivity/source/commontools/FDatabaseMetaDataResultSetMetaData.cxx
@@ -22,9 +22,7 @@
#include <com/sun/star/sdbc/ColumnValue.hpp>
using namespace connectivity;
-using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::sdbc;
-using namespace ::com::sun::star::lang;
ODatabaseMetaDataResultSetMetaData::~ODatabaseMetaDataResultSetMetaData()
{
diff --git a/connectivity/source/commontools/FValue.cxx b/connectivity/source/commontools/FValue.cxx
index 2f1cabbd4520..a21cdb336413 100644
--- a/connectivity/source/commontools/FValue.cxx
+++ b/connectivity/source/commontools/FValue.cxx
@@ -945,53 +945,50 @@ OUString ORowSetValue::getString( ) const
aRet = m_aValue.m_pString;
break;
case DataType::FLOAT:
- aRet = OUString::number(static_cast<float>(*this));
+ aRet = OUString::number(getFloat());
break;
case DataType::DOUBLE:
case DataType::REAL:
- aRet = OUString::number(static_cast<double>(*this));
+ aRet = OUString::number(getDouble());
break;
case DataType::DATE:
- aRet = DBTypeConversion::toDateString(*this);
+ aRet = DBTypeConversion::toDateString(getDate());
break;
case DataType::TIME:
- aRet = DBTypeConversion::toTimeString(*this);
+ aRet = DBTypeConversion::toTimeString(getTime());
break;
case DataType::TIMESTAMP:
- aRet = DBTypeConversion::toDateTimeString(*this);
+ aRet = DBTypeConversion::toDateTimeString(getDateTime());
break;
case DataType::BINARY:
case DataType::VARBINARY:
case DataType::LONGVARBINARY:
{
OUStringBuffer sVal("0x");
- Sequence<sal_Int8> aSeq(getSequence());
- const sal_Int8* pBegin = aSeq.getConstArray();
- const sal_Int8* pEnd = pBegin + aSeq.getLength();
- for(;pBegin != pEnd;++pBegin)
- sVal.append(static_cast<sal_Int32>(*pBegin),16);
+ for (sal_Int32 byte : getSequence())
+ sVal.append(byte, 16);
aRet = sVal.makeStringAndClear();
}
break;
case DataType::BIT:
- aRet = OUString::number(int(static_cast<bool>(*this)));
+ aRet = OUString::number(int(getBool()));
break;
case DataType::BOOLEAN:
- aRet = OUString::boolean(static_cast<bool>(*this));
+ aRet = OUString::boolean(getBool());
break;
case DataType::TINYINT:
case DataType::SMALLINT:
case DataType::INTEGER:
if ( m_bSigned )
- aRet = OUString::number(static_cast<sal_Int32>(*this));
+ aRet = OUString::number(getInt32());
else
- aRet = OUString::number(static_cast<sal_uInt32>(*this));
+ aRet = OUString::number(getUInt32());
break;
case DataType::BIGINT:
if ( m_bSigned )
- aRet = OUString::number(static_cast<sal_Int64>(*this));
+ aRet = OUString::number(getLong());
else
- aRet = OUString::number(static_cast<sal_uInt64>(*this));
+ aRet = OUString::number(getULong());
break;
case DataType::CLOB:
{
@@ -1041,7 +1038,7 @@ bool ORowSetValue::getBool() const
case DataType::DECIMAL:
case DataType::NUMERIC:
- bRet = OUString(m_aValue.m_pString).toInt32() != 0;
+ bRet = OUString::unacquired(&m_aValue.m_pString).toInt32() != 0;
break;
case DataType::FLOAT:
bRet = m_aValue.m_nFloat != 0.0;
@@ -1098,7 +1095,7 @@ sal_Int8 ORowSetValue::getInt8() const
case DataType::DECIMAL:
case DataType::NUMERIC:
case DataType::LONGVARCHAR:
- nRet = sal_Int8(OUString(m_aValue.m_pString).toInt32());
+ nRet = sal_Int8(OUString::unacquired(&m_aValue.m_pString).toInt32());
break;
case DataType::FLOAT:
nRet = sal_Int8(m_aValue.m_nFloat);
@@ -1169,7 +1166,7 @@ sal_uInt8 ORowSetValue::getUInt8() const
case DataType::DECIMAL:
case DataType::NUMERIC:
case DataType::LONGVARCHAR:
- nRet = sal_uInt8(OUString(m_aValue.m_pString).toInt32());
+ nRet = sal_uInt8(OUString::unacquired(&m_aValue.m_pString).toInt32());
break;
case DataType::FLOAT:
nRet = sal_uInt8(m_aValue.m_nFloat);
@@ -1244,7 +1241,7 @@ sal_Int16 ORowSetValue::getInt16() const
case DataType::DECIMAL:
case DataType::NUMERIC:
case DataType::LONGVARCHAR:
- nRet = sal_Int16(OUString(m_aValue.m_pString).toInt32());
+ nRet = sal_Int16(OUString::unacquired(&m_aValue.m_pString).toInt32());
break;
case DataType::FLOAT:
nRet = sal_Int16(m_aValue.m_nFloat);
@@ -1315,7 +1312,7 @@ sal_uInt16 ORowSetValue::getUInt16() const
case DataType::DECIMAL:
case DataType::NUMERIC:
case DataType::LONGVARCHAR:
- nRet = sal_uInt16(OUString(m_aValue.m_pString).toInt32());
+ nRet = sal_uInt16(OUString::unacquired(&m_aValue.m_pString).toInt32());
break;
case DataType::FLOAT:
nRet = sal_uInt16(m_aValue.m_nFloat);
@@ -1386,7 +1383,7 @@ sal_Int32 ORowSetValue::getInt32() const
case DataType::DECIMAL:
case DataType::NUMERIC:
case DataType::LONGVARCHAR:
- nRet = OUString(m_aValue.m_pString).toInt32();
+ nRet = OUString::unacquired(&m_aValue.m_pString).toInt32();
break;
case DataType::FLOAT:
nRet = sal_Int32(m_aValue.m_nFloat);
@@ -1459,7 +1456,7 @@ sal_uInt32 ORowSetValue::getUInt32() const
case DataType::DECIMAL:
case DataType::NUMERIC:
case DataType::LONGVARCHAR:
- nRet = OUString(m_aValue.m_pString).toUInt32();
+ nRet = OUString::unacquired(&m_aValue.m_pString).toUInt32();
break;
case DataType::FLOAT:
nRet = sal_uInt32(m_aValue.m_nFloat);
@@ -1532,7 +1529,7 @@ sal_Int64 ORowSetValue::getLong() const
case DataType::DECIMAL:
case DataType::NUMERIC:
case DataType::LONGVARCHAR:
- nRet = OUString(m_aValue.m_pString).toInt64();
+ nRet = OUString::unacquired(&m_aValue.m_pString).toInt64();
break;
case DataType::FLOAT:
nRet = sal_Int64(m_aValue.m_nFloat);
@@ -1605,7 +1602,7 @@ sal_uInt64 ORowSetValue::getULong() const
case DataType::DECIMAL:
case DataType::NUMERIC:
case DataType::LONGVARCHAR:
- nRet = OUString(m_aValue.m_pString).toUInt64();
+ nRet = OUString::unacquired(&m_aValue.m_pString).toUInt64();
break;
case DataType::FLOAT:
nRet = sal_uInt64(m_aValue.m_nFloat);
@@ -1678,7 +1675,7 @@ float ORowSetValue::getFloat() const
case DataType::DECIMAL:
case DataType::NUMERIC:
case DataType::LONGVARCHAR:
- nRet = OUString(m_aValue.m_pString).toFloat();
+ nRet = OUString::unacquired(&m_aValue.m_pString).toFloat();
break;
case DataType::FLOAT:
nRet = m_aValue.m_nFloat;
@@ -1754,7 +1751,7 @@ double ORowSetValue::getDouble() const
case DataType::DECIMAL:
case DataType::NUMERIC:
case DataType::LONGVARCHAR:
- nRet = OUString(m_aValue.m_pString).toDouble();
+ nRet = OUString::unacquired(&m_aValue.m_pString).toDouble();
break;
case DataType::FLOAT:
nRet = m_aValue.m_nFloat;
@@ -1907,7 +1904,7 @@ css::util::Date ORowSetValue::getDate() const
case DataType::FLOAT:
case DataType::DOUBLE:
case DataType::REAL:
- aValue = DBTypeConversion::toDate(static_cast<double>(*this));
+ aValue = DBTypeConversion::toDate(getDouble());
break;
case DataType::DATE:
@@ -1927,7 +1924,7 @@ css::util::Date ORowSetValue::getDate() const
case DataType::SMALLINT:
case DataType::INTEGER:
case DataType::BIGINT:
- aValue = DBTypeConversion::toDate( double( sal_Int64( *this ) ) );
+ aValue = DBTypeConversion::toDate( double( getLong() ) );
break;
case DataType::BLOB:
@@ -1962,12 +1959,12 @@ css::util::Time ORowSetValue::getTime() const
break;
case DataType::DECIMAL:
case DataType::NUMERIC:
- aValue = DBTypeConversion::toTime(static_cast<double>(*this));
+ aValue = DBTypeConversion::toTime(getDouble());
break;
case DataType::FLOAT:
case DataType::DOUBLE:
case DataType::REAL:
- aValue = DBTypeConversion::toTime(static_cast<double>(*this));
+ aValue = DBTypeConversion::toTime(getDouble());
break;
case DataType::TIMESTAMP:
{
@@ -2006,12 +2003,12 @@ css::util::DateTime ORowSetValue::getDateTime() const
break;
case DataType::DECIMAL:
case DataType::NUMERIC:
- aValue = DBTypeConversion::toDateTime(static_cast<double>(*this));
+ aValue = DBTypeConversion::toDateTime(getDouble());
break;
case DataType::FLOAT:
case DataType::DOUBLE:
case DataType::REAL:
- aValue = DBTypeConversion::toDateTime(static_cast<double>(*this));
+ aValue = DBTypeConversion::toDateTime(getDouble());
break;
case DataType::DATE:
{
@@ -2285,11 +2282,11 @@ void ORowSetValue::impl_fill( const sal_Int32 _nType, bool _bNullable, const det
(*this) = _rValueSource.getLong();
break;
case DataType::CLOB:
- (*this) = css::uno::makeAny(_rValueSource.getClob());
+ (*this) = css::uno::Any(_rValueSource.getClob());
setTypeKind(DataType::CLOB);
break;
case DataType::BLOB:
- (*this) = css::uno::makeAny(_rValueSource.getBlob());
+ (*this) = css::uno::Any(_rValueSource.getBlob());
setTypeKind(DataType::BLOB);
break;
case DataType::OTHER:
diff --git a/connectivity/source/commontools/ParameterSubstitution.cxx b/connectivity/source/commontools/ParameterSubstitution.cxx
index ca96cf331406..6fa55780803f 100644
--- a/connectivity/source/commontools/ParameterSubstitution.cxx
+++ b/connectivity/source/commontools/ParameterSubstitution.cxx
@@ -20,6 +20,7 @@
#include <connectivity/sqlparse.hxx>
#include <comphelper/sequenceashashmap.hxx>
#include <cppuhelper/supportsservice.hxx>
+#include <utility>
namespace connectivity
{
@@ -28,7 +29,7 @@ namespace connectivity
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star;
- ParameterSubstitution::ParameterSubstitution(const css::uno::Reference< css::uno::XComponentContext >& _rxContext ) : m_xContext(_rxContext)
+ ParameterSubstitution::ParameterSubstitution(css::uno::Reference< css::uno::XComponentContext > _xContext ) : m_xContext(std::move(_xContext))
{
}
void SAL_CALL ParameterSubstitution::initialize( const uno::Sequence< uno::Any >& _aArguments )
diff --git a/connectivity/source/commontools/RowFunctionParser.cxx b/connectivity/source/commontools/RowFunctionParser.cxx
index 21f5e638a651..f8799848de9b 100644
--- a/connectivity/source/commontools/RowFunctionParser.cxx
+++ b/connectivity/source/commontools/RowFunctionParser.cxx
@@ -38,6 +38,7 @@
#endif
#include <algorithm>
#include <stack>
+#include <utility>
namespace connectivity
{
@@ -56,8 +57,8 @@ class ConstantValueExpression : public ExpressionNode
public:
- explicit ConstantValueExpression( ORowSetValueDecoratorRef const & rValue ) :
- maValue( rValue )
+ explicit ConstantValueExpression(ORowSetValueDecoratorRef aValue)
+ : maValue(std::move(aValue))
{
}
virtual ORowSetValueDecoratorRef evaluate(const ODatabaseMetaDataResultSet::ORow& /*_aRow*/ ) const override
@@ -81,10 +82,10 @@ class BinaryFunctionExpression : public ExpressionNode
public:
- BinaryFunctionExpression( const ExpressionFunct eFunct, const std::shared_ptr<ExpressionNode>& rFirstArg, const std::shared_ptr<ExpressionNode>& rSecondArg ) :
+ BinaryFunctionExpression( const ExpressionFunct eFunct, std::shared_ptr<ExpressionNode> xFirstArg, std::shared_ptr<ExpressionNode> xSecondArg ) :
meFunct( eFunct ),
- mpFirstArg( rFirstArg ),
- mpSecondArg( rSecondArg )
+ mpFirstArg(std::move( xFirstArg )),
+ mpSecondArg(std::move( xSecondArg ))
{
}
virtual ORowSetValueDecoratorRef evaluate(const ODatabaseMetaDataResultSet::ORow& _aRow ) const override
@@ -93,13 +94,13 @@ public:
switch(meFunct)
{
case ExpressionFunct::Equation:
- aRet = new ORowSetValueDecorator( mpFirstArg->evaluate(_aRow )->getValue() == mpSecondArg->evaluate(_aRow )->getValue() );
+ aRet = new ORowSetValueDecorator( ORowSetValue(mpFirstArg->evaluate(_aRow )->getValue() == mpSecondArg->evaluate(_aRow )->getValue()) );
break;
case ExpressionFunct::And:
- aRet = new ORowSetValueDecorator( mpFirstArg->evaluate(_aRow )->getValue().getBool() && mpSecondArg->evaluate(_aRow )->getValue().getBool() );
+ aRet = new ORowSetValueDecorator( ORowSetValue(mpFirstArg->evaluate(_aRow )->getValue().getBool() && mpSecondArg->evaluate(_aRow )->getValue().getBool()) );
break;
case ExpressionFunct::Or:
- aRet = new ORowSetValueDecorator( mpFirstArg->evaluate(_aRow )->getValue().getBool() || mpSecondArg->evaluate(_aRow )->getValue().getBool() );
+ aRet = new ORowSetValueDecorator( ORowSetValue(mpFirstArg->evaluate(_aRow )->getValue().getBool() || mpSecondArg->evaluate(_aRow )->getValue().getBool()) );
break;
default:
break;
@@ -148,14 +149,14 @@ class ConstantFunctor
public:
- explicit ConstantFunctor( const ParserContextSharedPtr& rContext ) :
- mpContext( rContext )
+ explicit ConstantFunctor( ParserContextSharedPtr xContext ) :
+ mpContext(std::move( xContext ))
{
}
void operator()( StringIteratorT rFirst,StringIteratorT rSecond) const
{
OUString sVal( rFirst, rSecond - rFirst, RTL_TEXTENCODING_UTF8 );
- mpContext->maOperandStack.push( std::make_shared<ConstantValueExpression>( new ORowSetValueDecorator( sVal ) ) );
+ mpContext->maOperandStack.push(std::make_shared<ConstantValueExpression>(ORowSetValueDecoratorRef(new ORowSetValueDecorator(sVal))));
}
};
@@ -166,13 +167,13 @@ class IntConstantFunctor
ParserContextSharedPtr mpContext;
public:
- explicit IntConstantFunctor( const ParserContextSharedPtr& rContext ) :
- mpContext( rContext )
+ explicit IntConstantFunctor( ParserContextSharedPtr xContext ) :
+ mpContext(std::move( xContext ))
{
}
void operator()( sal_Int32 n ) const
{
- mpContext->maOperandStack.push( std::make_shared<ConstantValueExpression>( new ORowSetValueDecorator( n ) ) );
+ mpContext->maOperandStack.push(std::make_shared<ConstantValueExpression>(ORowSetValueDecoratorRef(new ORowSetValueDecorator(n))));
}
};
@@ -190,9 +191,9 @@ class BinaryFunctionFunctor
public:
- BinaryFunctionFunctor( const ExpressionFunct eFunct, const ParserContextSharedPtr& rContext ) :
+ BinaryFunctionFunctor( const ExpressionFunct eFunct, ParserContextSharedPtr xContext ) :
meFunct( eFunct ),
- mpContext( rContext )
+ mpContext(std::move( xContext ))
{
}
@@ -223,8 +224,8 @@ class UnaryFunctionExpression : public ExpressionNode
std::shared_ptr<ExpressionNode> mpArg;
public:
- explicit UnaryFunctionExpression( const std::shared_ptr<ExpressionNode>& rArg ) :
- mpArg( rArg )
+ explicit UnaryFunctionExpression( std::shared_ptr<ExpressionNode> xArg ) :
+ mpArg(std::move( xArg ))
{
}
virtual ORowSetValueDecoratorRef evaluate(const ODatabaseMetaDataResultSet::ORow& _aRow ) const override
@@ -242,8 +243,8 @@ class UnaryFunctionFunctor
public:
- explicit UnaryFunctionFunctor(const ParserContextSharedPtr& rContext)
- : mpContext(rContext)
+ explicit UnaryFunctionFunctor(ParserContextSharedPtr xContext)
+ : mpContext(std::move(xContext))
{
}
void operator()( StringIteratorT, StringIteratorT ) const
@@ -290,8 +291,8 @@ public:
@param rParserContext
Contains context info for the parser
*/
- explicit ExpressionGrammar( const ParserContextSharedPtr& rParserContext ) :
- mpParserContext( rParserContext )
+ explicit ExpressionGrammar( ParserContextSharedPtr xParserContext ) :
+ mpParserContext(std::move( xParserContext ))
{
}
diff --git a/connectivity/source/commontools/TColumnsHelper.cxx b/connectivity/source/commontools/TColumnsHelper.cxx
index f81eca9f0a90..aeb8b48a649a 100644
--- a/connectivity/source/commontools/TColumnsHelper.cxx
+++ b/connectivity/source/commontools/TColumnsHelper.cxx
@@ -34,10 +34,8 @@ using namespace connectivity;
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;
namespace connectivity
{
diff --git a/connectivity/source/commontools/TConnection.cxx b/connectivity/source/commontools/TConnection.cxx
index 134aa5960115..c730946a56b7 100644
--- a/connectivity/source/commontools/TConnection.cxx
+++ b/connectivity/source/commontools/TConnection.cxx
@@ -18,7 +18,6 @@
*/
#include <TConnection.hxx>
-#include <cppuhelper/typeprovider.hxx>
#include <comphelper/servicehelper.hxx>
#include <comphelper/types.hxx>
#include <connectivity/dbexception.hxx>
@@ -27,7 +26,6 @@ using namespace connectivity;
using namespace com::sun::star::uno;
using namespace com::sun::star::lang;
using namespace com::sun::star::sdbc;
-using namespace com::sun::star::beans;
using namespace ::osl;
@@ -57,16 +55,13 @@ void OMetaConnection::disposing()
//XUnoTunnel
sal_Int64 SAL_CALL OMetaConnection::getSomething( const css::uno::Sequence< sal_Int8 >& rId )
{
- return (isUnoTunnelId<OMetaConnection>(rId))
- ? reinterpret_cast< sal_Int64 >( this )
- : sal_Int64(0);
+ return comphelper::getSomethingImpl(rId, this);
}
-Sequence< sal_Int8 > OMetaConnection::getUnoTunnelId()
+const Sequence< sal_Int8 > & OMetaConnection::getUnoTunnelId()
{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
+ static const comphelper::UnoIdInit implId;
+ return implId.getSeq();
}
::dbtools::OPropertyMap& OMetaConnection::getPropMap()
@@ -75,7 +70,7 @@ Sequence< sal_Int8 > OMetaConnection::getUnoTunnelId()
return s_aPropertyNameMap;
}
-void OMetaConnection::throwGenericSQLException(const char* pErrorResourceId, const Reference< XInterface>& _xContext )
+void OMetaConnection::throwGenericSQLException(TranslateId pErrorResourceId, const Reference< XInterface>& _xContext )
{
OUString sErrorMessage;
if (pErrorResourceId)
diff --git a/connectivity/source/commontools/TDatabaseMetaDataBase.cxx b/connectivity/source/commontools/TDatabaseMetaDataBase.cxx
index 325d0ff067c8..73fb335b5382 100644
--- a/connectivity/source/commontools/TDatabaseMetaDataBase.cxx
+++ b/connectivity/source/commontools/TDatabaseMetaDataBase.cxx
@@ -17,6 +17,10 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <sal/config.h>
+
+#include <cstddef>
+
#include <TDatabaseMetaDataBase.hxx>
#include <RowFunctionParser.hxx>
@@ -118,12 +122,10 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaDataBase::getTypeInfo( )
std::vector<std::shared_ptr<ExpressionNode>> aConditions;
if ( aTypeInfoSettings.getLength() > 1 && ((aTypeInfoSettings.getLength() % 2) == 0) )
{
- const Any* pIter = aTypeInfoSettings.getConstArray();
- const Any* pEnd = pIter + aTypeInfoSettings.getLength();
try
{
- for(;pIter != pEnd;++pIter)
- aConditions.push_back(FunctionParser::parseFunction(::comphelper::getString(*pIter)));
+ for (auto& any : aTypeInfoSettings)
+ aConditions.push_back(FunctionParser::parseFunction(::comphelper::getString(any)));
}
catch(ParseError&)
{
@@ -139,11 +141,11 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaDataBase::getTypeInfo( )
::connectivity::ODatabaseMetaDataResultSet::ORow aRow;
aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue());
const sal_Int32* pType = pTypes;
- for (sal_Int32 i = 1; i <= sal_Int32(SAL_N_ELEMENTS(pTypes)); ++i,++pType)
+ for (std::size_t i = 1; i <= std::size(pTypes); ++i,++pType)
{
ORowSetValue aValue;
aValue.fill(i,*pType,xRow);
- aRow.push_back(new ORowSetValueDecorator(aValue));
+ aRow.push_back(new ORowSetValueDecorator(std::move(aValue)));
}
std::vector<std::shared_ptr<ExpressionNode>>::iterator aIter = aConditions.begin();
@@ -164,7 +166,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaDataBase::getTypeInfo( )
}
}
rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo);
- pResult->setRows(m_aTypeInfoRows);
+ pResult->setRows(std::vector(m_aTypeInfoRows));
return pResult;
}
diff --git a/connectivity/source/commontools/TIndex.cxx b/connectivity/source/commontools/TIndex.cxx
index f7f891308e40..32112bcdbe17 100644
--- a/connectivity/source/commontools/TIndex.cxx
+++ b/connectivity/source/commontools/TIndex.cxx
@@ -27,10 +27,7 @@
using namespace connectivity;
using namespace connectivity::sdbcx;
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;
OIndexHelper::OIndexHelper( OTableHelper* _pTable) : connectivity::sdbcx::OIndex(true)
, m_pTable(_pTable)
diff --git a/connectivity/source/commontools/TIndexColumns.cxx b/connectivity/source/commontools/TIndexColumns.cxx
index 1db4426c1888..d190bb2af312 100644
--- a/connectivity/source/commontools/TIndexColumns.cxx
+++ b/connectivity/source/commontools/TIndexColumns.cxx
@@ -30,8 +30,6 @@ using namespace connectivity::sdbcx;
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;
OIndexColumns::OIndexColumns( OIndexHelper* _pIndex,
::osl::Mutex& _rMutex,
diff --git a/connectivity/source/commontools/TIndexes.cxx b/connectivity/source/commontools/TIndexes.cxx
index b0998b5b3a79..723b4a447a18 100644
--- a/connectivity/source/commontools/TIndexes.cxx
+++ b/connectivity/source/commontools/TIndexes.cxx
@@ -37,7 +37,6 @@ 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 cppu;
@@ -152,10 +151,10 @@ sdbcx::ObjectType OIndexesHelper::appendObject( const OUString& _rForName, const
OUString aComposedName = dbtools::composeTableName(m_pTable->getMetaData(),aCatalog,aSchema,aTable, true, ::dbtools::EComposeRule::InIndexDefinitions);
if (!_rForName.isEmpty() )
{
- aSql.append( ::dbtools::quoteName( aQuote, _rForName ) );
- aSql.append(" ON ");
- aSql.append(aComposedName);
- aSql.append(" ( ");
+ aSql.append( ::dbtools::quoteName( aQuote, _rForName )
+ + " ON "
+ + aComposedName
+ + " ( ");
Reference<XColumnsSupplier> xColumnSup(descriptor,UNO_QUERY);
Reference<XIndexAccess> xColumns(xColumnSup->getColumns(),UNO_QUERY);
@@ -192,8 +191,8 @@ sdbcx::ObjectType OIndexesHelper::appendObject( const OUString& _rForName, const
xColumns->getByIndex(0) >>= xColProp;
- aSql.append(".");
- aSql.append(::dbtools::quoteName( aQuote,comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME)))));
+ aSql.append("."
+ + ::dbtools::quoteName( aQuote,comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME)))));
}
Reference< XStatement > xStmt = m_pTable->getConnection()->createStatement( );
diff --git a/connectivity/source/commontools/TKey.cxx b/connectivity/source/commontools/TKey.cxx
index 1341291abcf3..3a16cf86a5a0 100644
--- a/connectivity/source/commontools/TKey.cxx
+++ b/connectivity/source/commontools/TKey.cxx
@@ -26,10 +26,7 @@
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;
OTableKeyHelper::OTableKeyHelper(OTableHelper* _pTable) : connectivity::sdbcx::OKey(true)
,m_pTable(_pTable)
diff --git a/connectivity/source/commontools/TKeyColumns.cxx b/connectivity/source/commontools/TKeyColumns.cxx
index 0a2c02bb22bb..a26628765417 100644
--- a/connectivity/source/commontools/TKeyColumns.cxx
+++ b/connectivity/source/commontools/TKeyColumns.cxx
@@ -31,8 +31,6 @@ using namespace connectivity::sdbcx;
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;
OKeyColumnsHelper::OKeyColumnsHelper( OTableKeyHelper* _pKey,
diff --git a/connectivity/source/commontools/TKeys.cxx b/connectivity/source/commontools/TKeys.cxx
index ab16752677b5..427ab524162e 100644
--- a/connectivity/source/commontools/TKeys.cxx
+++ b/connectivity/source/commontools/TKeys.cxx
@@ -40,7 +40,6 @@ 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;
OKeysHelper::OKeysHelper( OTableHelper* _pTable,
@@ -155,12 +154,11 @@ sdbcx::ObjectType OKeysHelper::appendObject( const OUString& _rForName, const Re
{
// if we're here, we belong to a table which is not new, i.e. already exists in the database.
// In this case, really append the new index.
- OUStringBuffer aSql;
- aSql.append("ALTER TABLE ");
+ OUStringBuffer aSql("ALTER TABLE ");
OUString aQuote = m_pTable->getConnection()->getMetaData()->getIdentifierQuoteString( );
- aSql.append(composeTableName( m_pTable->getConnection()->getMetaData(), m_pTable, ::dbtools::EComposeRule::InTableDefinitions, true ));
- aSql.append(" ADD ");
+ aSql.append(composeTableName( m_pTable->getConnection()->getMetaData(), m_pTable, ::dbtools::EComposeRule::InTableDefinitions, true )
+ + " ADD ");
if ( nKeyType == KeyType::PRIMARY )
{
@@ -188,9 +186,9 @@ sdbcx::ObjectType OKeysHelper::appendObject( const OUString& _rForName, const Re
if ( nKeyType == KeyType::FOREIGN )
{
- aSql.append(" REFERENCES ");
- aSql.append(::dbtools::quoteTableName(m_pTable->getConnection()->getMetaData(),sReferencedName,::dbtools::EComposeRule::InTableDefinitions));
- aSql.append(" (");
+ aSql.append(" REFERENCES "
+ + ::dbtools::quoteTableName(m_pTable->getConnection()->getMetaData(),sReferencedName,::dbtools::EComposeRule::InTableDefinitions)
+ + " (");
for(sal_Int32 i=0;i<xColumns->getCount();++i)
{
@@ -200,9 +198,9 @@ sdbcx::ObjectType OKeysHelper::appendObject( const OUString& _rForName, const Re
aSql.append(::dbtools::quoteName( aQuote,getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_RELATEDCOLUMN)))));
}
- aSql.append(")");
- aSql.append(getKeyRuleString(true ,nUpdateRule));
- aSql.append(getKeyRuleString(false ,nDeleteRule));
+ aSql.append(")"
+ + getKeyRuleString(true ,nUpdateRule)
+ + getKeyRuleString(false ,nDeleteRule));
}
Reference< XStatement > xStmt = m_pTable->getConnection()->createStatement( );
@@ -236,7 +234,7 @@ sdbcx::ObjectType OKeysHelper::appendObject( const OUString& _rForName, const Re
OUString sName = xRow->getString(nColumn);
if ( !m_pElements->exists(sName) ) // this name wasn't inserted yet so it must be the new one
{
- descriptor->setPropertyValue( rPropMap.getNameByIndex( PROPERTY_ID_NAME ), makeAny( sName ) );
+ descriptor->setPropertyValue( rPropMap.getNameByIndex( PROPERTY_ID_NAME ), Any( sName ) );
sNewName = sName;
break;
}
@@ -272,10 +270,9 @@ void OKeysHelper::dropObject(sal_Int32 _nPos, const OUString& _sElementName)
}
else
{
- OUStringBuffer aSql;
- aSql.append("ALTER TABLE ");
-
- aSql.append( composeTableName( m_pTable->getConnection()->getMetaData(), m_pTable,::dbtools::EComposeRule::InTableDefinitions, true ));
+ OUStringBuffer aSql(
+ "ALTER TABLE "
+ + composeTableName( m_pTable->getConnection()->getMetaData(), m_pTable,::dbtools::EComposeRule::InTableDefinitions, true ));
sal_Int32 nKeyType = KeyType::PRIMARY;
if ( xKey.is() )
diff --git a/connectivity/source/commontools/TPrivilegesResultSet.cxx b/connectivity/source/commontools/TPrivilegesResultSet.cxx
index 54bfb37d7034..71a6986239f5 100644
--- a/connectivity/source/commontools/TPrivilegesResultSet.cxx
+++ b/connectivity/source/commontools/TPrivilegesResultSet.cxx
@@ -21,9 +21,7 @@
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;
@@ -74,7 +72,7 @@ OResultSetPrivileges::OResultSetPrivileges( const Reference< XDatabaseMetaData>&
aRow[6] = new ORowSetValueDecorator(OUString("REFERENCE"));
aRows.push_back(aRow);
- setRows(aRows);
+ setRows(std::move(aRows));
}
osl_atomic_decrement( &m_refCount );
}
@@ -104,17 +102,17 @@ const ORowSetValue& OResultSetPrivileges::getValue(sal_Int32 columnIndex)
return ODatabaseMetaDataResultSet::getValue(columnIndex);
}
-void SAL_CALL OResultSetPrivileges::disposing()
+void OResultSetPrivileges::disposing(std::unique_lock<std::mutex>& rGuard)
{
- ODatabaseMetaDataResultSet::disposing();
+ ODatabaseMetaDataResultSet::disposing(rGuard);
m_xTables.clear();
m_xRow.clear();
}
sal_Bool SAL_CALL OResultSetPrivileges::next( )
{
- ::osl::MutexGuard aGuard( m_aMutex );
- checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed );
+ std::unique_lock aGuard( m_aMutex );
+ throwIfDisposed(aGuard);
bool bReturn = false;
if ( m_xTables.is() )
@@ -126,7 +124,7 @@ sal_Bool SAL_CALL OResultSetPrivileges::next( )
return false;
}
- bReturn = ODatabaseMetaDataResultSet::next();
+ bReturn = ODatabaseMetaDataResultSet::next(aGuard);
if ( !bReturn )
{
m_bBOF = false;
diff --git a/connectivity/source/commontools/TSortIndex.cxx b/connectivity/source/commontools/TSortIndex.cxx
index 6b94216a3719..44a883dc86c4 100644
--- a/connectivity/source/commontools/TSortIndex.cxx
+++ b/connectivity/source/commontools/TSortIndex.cxx
@@ -94,10 +94,10 @@ struct TKeyValueFunc
return pKeySet;
}
-OSortIndex::OSortIndex( const std::vector<OKeyType>& _aKeyType,
- const std::vector<TAscendingOrder>& _aAscending)
- :m_aKeyType(_aKeyType)
- ,m_aAscending(_aAscending)
+OSortIndex::OSortIndex( std::vector<OKeyType>&& _aKeyType,
+ std::vector<TAscendingOrder>&& _aAscending)
+ :m_aKeyType(std::move(_aKeyType))
+ ,m_aAscending(std::move(_aAscending))
,m_bFrozen(false)
{
}
diff --git a/connectivity/source/commontools/TTableHelper.cxx b/connectivity/source/commontools/TTableHelper.cxx
index 9c955a7e0104..27c874636069 100644
--- a/connectivity/source/commontools/TTableHelper.cxx
+++ b/connectivity/source/commontools/TTableHelper.cxx
@@ -200,20 +200,17 @@ namespace
void lcl_collectColumnDescs_throw( const Reference< XResultSet >& _rxResult, std::vector< ColumnDesc >& _out_rColumns )
{
Reference< XRow > xRow( _rxResult, UNO_QUERY_THROW );
- OUString sName;
- OrdinalPosition nOrdinalPosition( 0 );
while ( _rxResult->next() )
{
- sName = xRow->getString( 4 ); // COLUMN_NAME
- sal_Int32 nField5 = xRow->getInt(5);
- OUString aField6 = xRow->getString(6);
- sal_Int32 nField7 = xRow->getInt(7)
- , nField9 = xRow->getInt(9)
- , nField11= xRow->getInt(11);
- OUString sField12 = xRow->getString(12)
- ,sField13 = xRow->getString(13);
- nOrdinalPosition = xRow->getInt( 17 ); // ORDINAL_POSITION
- _out_rColumns.push_back( ColumnDesc( sName,nField5,aField6,nField7,nField9,nField11,sField12,sField13, nOrdinalPosition ) );
+ _out_rColumns.emplace_back(xRow->getString(4), // COLUMN_NAME,
+ xRow->getInt(5),
+ xRow->getString(6),
+ xRow->getInt(7),
+ xRow->getInt(9),
+ xRow->getInt(11),
+ xRow->getString(12),
+ xRow->getString(13),
+ xRow->getInt(17)); // ORDINAL_POSITION
}
}
@@ -296,7 +293,7 @@ void OTableHelper::refreshColumns()
if(m_xColumns)
m_xColumns->reFill(aVector);
else
- m_xColumns = createColumns(aVector);
+ m_xColumns.reset(createColumns(aVector));
}
const ColumnDesc* OTableHelper::getColumnDescription(const OUString& _sName) const
@@ -413,10 +410,10 @@ void OTableHelper::refreshKeys()
{
refreshPrimaryKeys(aNames);
refreshForeignKeys(aNames);
- m_xKeys = createKeys(aNames);
+ m_xKeys.reset(createKeys(aNames));
} // if(!isNew())
else if (!m_xKeys )
- m_xKeys = createKeys(aNames);
+ m_xKeys.reset(createKeys(aNames));
/*if(m_pKeys)
m_pKeys->reFill(aVector);
else*/
@@ -460,7 +457,7 @@ void OTableHelper::refreshIndexes()
if(m_xIndexes)
m_xIndexes->reFill(aVector);
else
- m_xIndexes = createIndexes(aVector);
+ m_xIndexes.reset(createIndexes(aVector));
}
OUString OTableHelper::getRenameStart() const
@@ -549,6 +546,11 @@ OUString SAL_CALL OTableHelper::getName()
return sComposedName;
}
+const OUString & OTableHelper::getTableName()
+{
+ return m_Name;
+}
+
std::shared_ptr<sdbcx::KeyProperties> OTableHelper::getKeyProperties(const OUString& _sName) const
{
std::shared_ptr<sdbcx::KeyProperties> pKeyProps;
diff --git a/connectivity/source/commontools/conncleanup.cxx b/connectivity/source/commontools/conncleanup.cxx
index 210c618d6a60..7b703f093c80 100644
--- a/connectivity/source/commontools/conncleanup.cxx
+++ b/connectivity/source/commontools/conncleanup.cxx
@@ -23,7 +23,7 @@
#include <com/sun/star/sdbc/XRowSet.hpp>
#include <com/sun/star/sdbc/XConnection.hpp>
#include <osl/diagnose.h>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
namespace dbtools
@@ -35,7 +35,7 @@ namespace dbtools
using namespace css::sdbc;
using namespace css::lang;
- constexpr OUStringLiteral ACTIVE_CONNECTION_PROPERTY_NAME = u"ActiveConnection";
+ constexpr OUString ACTIVE_CONNECTION_PROPERTY_NAME = u"ActiveConnection"_ustr;
OAutoConnectionDisposer::OAutoConnectionDisposer(const Reference< XRowSet >& _rxRowSet, const Reference< XConnection >& _rxConnection)
:m_xRowSet( _rxRowSet )
@@ -50,7 +50,7 @@ namespace dbtools
try
{
- xProps->setPropertyValue( ACTIVE_CONNECTION_PROPERTY_NAME, makeAny( _rxConnection ) );
+ xProps->setPropertyValue( ACTIVE_CONNECTION_PROPERTY_NAME, Any( _rxConnection ) );
m_xOriginalConnection = _rxConnection;
startPropertyListening( xProps );
}
@@ -78,7 +78,7 @@ namespace dbtools
void OAutoConnectionDisposer::stopPropertyListening( const Reference< XPropertySet >& _rxEventSource )
{
// prevent deletion of ourself while we're herein
- Reference< XInterface > xKeepAlive(static_cast< XWeak* >(this));
+ Reference< XInterface > xKeepAlive(getXWeak());
try
{ // remove ourself as property change listener
diff --git a/connectivity/source/commontools/dbcharset.cxx b/connectivity/source/commontools/dbcharset.cxx
index ebe45c028207..381afa606e08 100644
--- a/connectivity/source/commontools/dbcharset.cxx
+++ b/connectivity/source/commontools/dbcharset.cxx
@@ -18,6 +18,7 @@
*/
#include <connectivity/dbcharset.hxx>
+#include <utility>
#include <osl/diagnose.h>
#include <rtl/tencinfo.h>
@@ -92,15 +93,15 @@ namespace dbtools
}
- OCharsetMap::CharsetIterator OCharsetMap::findIanaName(const OUString& _rIanaName) const
+ OCharsetMap::CharsetIterator OCharsetMap::findIanaName(std::u16string_view _rIanaName) const
{
ensureConstructed( );
rtl_TextEncoding eEncoding = RTL_TEXTENCODING_DONTKNOW;
- if ( !_rIanaName.isEmpty() )
+ if ( !_rIanaName.empty() )
{
// byte string conversion
- OString sMimeByteString( _rIanaName.getStr(), _rIanaName.getLength(), RTL_TEXTENCODING_ASCII_US );
+ OString sMimeByteString = OUStringToOString( _rIanaName, RTL_TEXTENCODING_ASCII_US );
// look up
eEncoding = rtl_getTextEncodingFromMimeCharset( sMimeByteString.getStr() );
@@ -129,15 +130,15 @@ namespace dbtools
}
- CharsetIteratorDerefHelper:: CharsetIteratorDerefHelper(const rtl_TextEncoding _eEncoding, const OUString& _rIanaName )
+ CharsetIteratorDerefHelper:: CharsetIteratorDerefHelper(const rtl_TextEncoding _eEncoding, OUString _aIanaName )
:m_eEncoding( _eEncoding )
- ,m_aIanaName( _rIanaName )
+ ,m_aIanaName(std::move( _aIanaName ))
{
}
- OCharsetMap::CharsetIterator::CharsetIterator(const OCharsetMap* _pContainer, OCharsetMap::TextEncBag::const_iterator const & _aPos )
+ OCharsetMap::CharsetIterator::CharsetIterator(const OCharsetMap* _pContainer, OCharsetMap::TextEncBag::const_iterator _aPos )
:m_pContainer( _pContainer )
- ,m_aPos( _aPos )
+ ,m_aPos(std::move( _aPos ))
{
OSL_ENSURE( m_pContainer, "OCharsetMap::CharsetIterator::CharsetIterator : invalid container!" );
}
diff --git a/connectivity/source/commontools/dbconversion.cxx b/connectivity/source/commontools/dbconversion.cxx
index 13a799e55a9a..4dd7d5b8e9f3 100644
--- a/connectivity/source/commontools/dbconversion.cxx
+++ b/connectivity/source/commontools/dbconversion.cxx
@@ -18,15 +18,16 @@
*/
#include <connectivity/dbconversion.hxx>
-#include <osl/diagnose.h>
#include <com/sun/star/sdbc/SQLException.hpp>
#include <com/sun/star/util/Date.hpp>
#include <com/sun/star/util/Time.hpp>
#include <com/sun/star/util/DateTime.hpp>
#include <rtl/character.hxx>
-#include <rtl/ustrbuf.hxx>
#include <rtl/math.hxx>
+#include <sal/log.hxx>
#include <unotools/datetime.hxx>
+#include <comphelper/date.hxx>
+#include <o3tl/string_view.hxx>
#include <sstream>
#include <iomanip>
@@ -61,7 +62,6 @@ namespace dbtools
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::util;
using namespace ::com::sun::star::sdb;
- using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::beans;
@@ -80,7 +80,7 @@ namespace dbtools
ostr << setw(4) << rDate.Year << "-"
<< setw(2) << rDate.Month << "-"
<< setw(2) << rDate.Day;
- return OUString::createFromAscii(ostr.str().c_str());
+ return OUString::createFromAscii(ostr.str());
}
OUString DBTypeConversion::toTimeStringS(const css::util::Time& rTime)
@@ -91,7 +91,7 @@ namespace dbtools
ostr << setw(2) << rTime.Hours << ":"
<< setw(2) << rTime.Minutes << ":"
<< setw(2) << rTime.Seconds;
- return OUString::createFromAscii(ostr.str().c_str());
+ return OUString::createFromAscii(ostr.str());
}
OUString DBTypeConversion::toTimeString(const css::util::Time& rTime)
@@ -103,7 +103,7 @@ namespace dbtools
<< setw(2) << rTime.Minutes << ":"
<< setw(2) << rTime.Seconds << "."
<< setw(9) << rTime.NanoSeconds;
- return OUString::createFromAscii(ostr.str().c_str());
+ return OUString::createFromAscii(ostr.str());
}
OUString DBTypeConversion::toDateTimeString(const css::util::DateTime& _rDateTime)
@@ -148,93 +148,25 @@ namespace dbtools
nHour * (minInHour * secInMin * nanoSecInSec);
}
-
- const sal_Int32 aDaysInMonth[12] = { 31, 28, 31, 30, 31, 30,
- 31, 31, 30, 31, 30, 31 };
-
-
- static bool implIsLeapYear(sal_Int32 _nYear)
- {
- return ( ((_nYear % 4) == 0)
- && ((_nYear % 100) != 0)
- )
-
- || ((_nYear % 400) == 0)
- ;
- }
-
-
- static sal_Int32 implDaysInMonth(sal_Int32 _nMonth, sal_Int32 _nYear)
- {
- OSL_ENSURE(_nMonth > 0 && _nMonth < 13,"Month as invalid value!");
- if (_nMonth != 2)
- return aDaysInMonth[_nMonth-1];
- else
- {
- if (implIsLeapYear(_nYear))
- return aDaysInMonth[_nMonth-1] + 1;
- else
- return aDaysInMonth[_nMonth-1];
- }
- }
-
-
static sal_Int32 implRelativeToAbsoluteNull(const css::util::Date& _rDate)
{
- sal_Int32 nDays = 0;
-
- // ripped this code from the implementation of tools::Date
- sal_Int32 nNormalizedYear = _rDate.Year - 1;
- nDays = nNormalizedYear * 365;
- // leap years
- nDays += (nNormalizedYear / 4) - (nNormalizedYear / 100) + (nNormalizedYear / 400);
-
- for (sal_Int32 i = 1; i < _rDate.Month; ++i)
- nDays += implDaysInMonth(i, _rDate.Year);
-
- nDays += _rDate.Day;
- return nDays;
- }
-
- static void implBuildFromRelative( const sal_Int32 nDays, sal_uInt16& rDay, sal_uInt16& rMonth, sal_Int16& rYear)
- {
- sal_Int32 nTempDays;
- sal_Int32 i = 0;
- bool bCalc;
-
- do
+ if (_rDate.Day == 0 && _rDate.Month == 0 && _rDate.Year == 0)
{
- nTempDays = nDays;
- rYear = static_cast<sal_uInt16>((nTempDays / 365) - i);
- nTempDays -= (rYear-1) * 365;
- nTempDays -= ((rYear-1) / 4) - ((rYear-1) / 100) + ((rYear-1) / 400);
- bCalc = false;
- if ( nTempDays < 1 )
- {
- i++;
- bCalc = true;
- }
- else
- {
- if ( nTempDays > 365 )
- {
- if ( (nTempDays != 366) || !implIsLeapYear( rYear ) )
- {
- i--;
- bCalc = true;
- }
- }
- }
+ // 0000-00-00 is *NOT* a valid date and passing it to the date
+ // conversion even when normalizing rightly asserts. Whatever we
+ // return here, it will be wrong. The old before commit
+ // 52ff16771ac160d27fd7beb78a4cfba22ad84f06 wrong implementation
+ // calculated -365 for that, effectively that would be a date of
+ // -0001-01-01 now but it was likely assumed that would be
+ // 0000-00-01 or even 0000-00-00 instead. Try if we get away with 0
+ // for -0001-12-31, the same that
+ // comphelper::date::convertDateToDaysNormalizing()
+ // would return if comphelper::date::normalize() wouldn't ignore
+ // such "empty" date.
+
+ return 0;
}
- while ( bCalc );
-
- rMonth = 1;
- while ( nTempDays > implDaysInMonth( rMonth, rYear ) )
- {
- nTempDays -= implDaysInMonth( rMonth, rYear );
- rMonth++;
- }
- rDay = static_cast<sal_uInt16>(nTempDays);
+ return comphelper::date::convertDateToDaysNormalizing( _rDate.Day, _rDate.Month, _rDate.Year);
}
sal_Int32 DBTypeConversion::toDays(const css::util::Date& _rVal, const css::util::Date& _rNullDate)
@@ -270,7 +202,7 @@ namespace dbtools
static void addDays(const sal_Int32 nDays, css::util::Date& _rDate)
{
- sal_Int32 nTempDays = implRelativeToAbsoluteNull( _rDate );
+ sal_Int64 nTempDays = implRelativeToAbsoluteNull(_rDate);
nTempDays += nDays;
if ( nTempDays > maxDays )
@@ -280,7 +212,6 @@ namespace dbtools
_rDate.Year = 9999;
}
// TODO: can we replace that check by minDays? Would allow dates BCE
- // implBuildFromRelative probably needs to be updated for the "no year 0" question
else if ( nTempDays <= 0 )
{
_rDate.Day = 1;
@@ -288,12 +219,12 @@ namespace dbtools
_rDate.Year = 1;
}
else
- implBuildFromRelative( nTempDays, _rDate.Day, _rDate.Month, _rDate.Year );
+ comphelper::date::convertDaysToDate( nTempDays, _rDate.Day, _rDate.Month, _rDate.Year );
}
static void subDays(const sal_Int32 nDays, css::util::Date& _rDate )
{
- sal_Int32 nTempDays = implRelativeToAbsoluteNull( _rDate );
+ sal_Int64 nTempDays = implRelativeToAbsoluteNull(_rDate);
nTempDays -= nDays;
if ( nTempDays > maxDays )
@@ -303,7 +234,6 @@ namespace dbtools
_rDate.Year = 9999;
}
// TODO: can we replace that check by minDays? Would allow dates BCE
- // implBuildFromRelative probably needs to be updated for the "no year 0" question
else if ( nTempDays <= 0 )
{
_rDate.Day = 1;
@@ -311,7 +241,7 @@ namespace dbtools
_rDate.Year = 1;
}
else
- implBuildFromRelative( nTempDays, _rDate.Day, _rDate.Month, _rDate.Year );
+ comphelper::date::convertDaysToDate( nTempDays, _rDate.Day, _rDate.Month, _rDate.Year );
}
css::util::Date DBTypeConversion::toDate(const double dVal, const css::util::Date& _rNullDate)
@@ -329,13 +259,10 @@ namespace dbtools
css::util::Time DBTypeConversion::toTime(const double dVal, short nDigits)
{
- const sal_Int32 nDays = static_cast<sal_Int32>(dVal);
- sal_Int64 nNS;
- {
- double fSeconds((dVal - static_cast<double>(nDays)) * (fNanoSecondsPerDay / nanoSecInSec));
- fSeconds = ::rtl::math::round( fSeconds, nDigits );
- nNS = fSeconds * nanoSecInSec;
- }
+ const double nDays = std::trunc(dVal);
+ double fSeconds((dVal - nDays) * (fNanoSecondsPerDay / nanoSecInSec));
+ fSeconds = ::rtl::math::round(fSeconds, nDigits);
+ sal_Int64 nNS = fSeconds * nanoSecInSec;
sal_Int16 nSign;
if ( nNS < 0 )
@@ -377,6 +304,14 @@ namespace dbtools
css::util::DateTime DBTypeConversion::toDateTime(const double dVal, const css::util::Date& _rNullDate)
{
+ css::util::DateTime aRet;
+
+ if (!std::isfinite(dVal))
+ {
+ SAL_WARN("connectivity.commontools", "DateTime has invalid value: " << dVal);
+ return aRet;
+ }
+
css::util::Date aDate = toDate(dVal, _rNullDate);
// there is not enough precision in a double to have both a date
// and a time up to nanoseconds -> limit to microseconds to have
@@ -384,8 +319,6 @@ namespace dbtools
// 12:59:59.999999790
css::util::Time aTime = toTime(dVal, 6);
- css::util::DateTime aRet;
-
aRet.Day = aDate.Day;
aRet.Month = aDate.Month;
aRet.Year = aDate.Year;
@@ -399,7 +332,7 @@ namespace dbtools
return aRet;
}
- css::util::Date DBTypeConversion::toDate(const OUString& _sSQLString)
+ css::util::Date DBTypeConversion::toDate(std::u16string_view _sSQLString)
{
// get the token out of a string
static const sal_Unicode sDateSep = '-';
@@ -408,12 +341,12 @@ namespace dbtools
sal_uInt16 nYear = 0,
nMonth = 0,
nDay = 0;
- nYear = static_cast<sal_uInt16>(_sSQLString.getToken(0,sDateSep,nIndex).toInt32());
+ nYear = static_cast<sal_uInt16>(o3tl::toInt32(o3tl::getToken(_sSQLString, 0,sDateSep,nIndex)));
if(nIndex != -1)
{
- nMonth = static_cast<sal_uInt16>(_sSQLString.getToken(0,sDateSep,nIndex).toInt32());
+ nMonth = static_cast<sal_uInt16>(o3tl::toInt32(o3tl::getToken(_sSQLString, 0,sDateSep,nIndex)));
if(nIndex != -1)
- nDay = static_cast<sal_uInt16>(_sSQLString.getToken(0,sDateSep,nIndex).toInt32());
+ nDay = static_cast<sal_uInt16>(o3tl::toInt32(o3tl::getToken(_sSQLString, 0,sDateSep,nIndex)));
}
return css::util::Date(nDay,nMonth,nYear);
@@ -436,7 +369,7 @@ namespace dbtools
const sal_Unicode *const begin = p;
while (rtl::isAsciiWhiteSpace(*p)) { ++p; }
nSeparation += p - begin;
- aTime = toTime( _sSQLString.copy( nSeparation ) );
+ aTime = toTime( _sSQLString.subView( nSeparation ) );
}
return css::util::DateTime(aTime.NanoSeconds, aTime.Seconds, aTime.Minutes, aTime.Hours,
@@ -444,7 +377,7 @@ namespace dbtools
}
- css::util::Time DBTypeConversion::toTime(const OUString& _sSQLString)
+ css::util::Time DBTypeConversion::toTime(std::u16string_view _sSQLString)
{
css::util::Time aTime;
::utl::ISO8601parseTime(_sSQLString, aTime);
diff --git a/connectivity/source/commontools/dbexception.cxx b/connectivity/source/commontools/dbexception.cxx
index 2efc4a6976b3..bc5a9be80804 100644
--- a/connectivity/source/commontools/dbexception.cxx
+++ b/connectivity/source/commontools/dbexception.cxx
@@ -27,7 +27,7 @@
#include <com/sun/star/sdb/SQLErrorEvent.hpp>
#include <strings.hrc>
#include <resource/sharedresources.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
namespace dbtools
{
@@ -66,8 +66,7 @@ SQLExceptionInfo::SQLExceptionInfo(const css::sdb::SQLContext& _rError)
SQLExceptionInfo::SQLExceptionInfo( const OUString& _rSimpleErrorMessage )
{
- SQLException aError;
- aError.Message = _rSimpleErrorMessage;
+ SQLException aError(_rSimpleErrorMessage, {}, {}, 0, {});
m_aContent <<= aError;
implDetermineType();
}
@@ -177,54 +176,59 @@ SQLExceptionInfo::operator const css::sdb::SQLContext*() const
void SQLExceptionInfo::prepend( const OUString& _rErrorMessage )
{
- SQLException aException;
- aException.Message = _rErrorMessage;
- aException.ErrorCode = 0;
- aException.SQLState = "S1000";
- aException.NextException = m_aContent;
+ SQLException aException(_rErrorMessage, {}, "S1000", 0, m_aContent);
m_aContent <<= aException;
m_eType = TYPE::SQLException;
}
-
-void SQLExceptionInfo::append( TYPE _eType, const OUString& _rErrorMessage, const OUString& _rSQLState, const sal_Int32 _nErrorCode )
+// create the to-be-appended exception
+Any SQLExceptionInfo::createException(TYPE eType, const OUString& rErrorMessage, const OUString& rSQLState, const sal_Int32 nErrorCode)
{
- // create the to-be-appended exception
Any aAppend;
- switch ( _eType )
+ switch (eType)
{
- case TYPE::SQLException: aAppend <<= SQLException(); break;
- case TYPE::SQLWarning: aAppend <<= SQLWarning(); break;
- case TYPE::SQLContext: aAppend <<= SQLContext(); break;
- default:
- TOOLS_WARN_EXCEPTION( "connectivity.commontools", "SQLExceptionInfo::append: invalid exception type: this will crash!" );
- break;
+ case TYPE::SQLException:
+ aAppend <<= SQLException(rErrorMessage, {}, rSQLState, nErrorCode, {});
+ break;
+ case TYPE::SQLWarning:
+ aAppend <<= SQLWarning(rErrorMessage, {}, rSQLState, nErrorCode, {});
+ break;
+ case TYPE::SQLContext:
+ aAppend <<= SQLContext(rErrorMessage, {}, rSQLState, nErrorCode, {}, {});
+ break;
+ default:
+ TOOLS_WARN_EXCEPTION("connectivity.commontools", "SQLExceptionInfo::createException: invalid exception type: this will crash!");
+ break;
}
- SQLException& pAppendException = const_cast<SQLException &>(*o3tl::forceAccess<SQLException>(aAppend));
- pAppendException.Message = _rErrorMessage;
- pAppendException.SQLState = _rSQLState;
- pAppendException.ErrorCode = _nErrorCode;
+ return aAppend;
+}
- // find the end of the current chain
- Any* pChainIterator = &m_aContent;
- SQLException* pLastException = nullptr;
- const Type& aSQLExceptionType( cppu::UnoType<SQLException>::get() );
- while ( pChainIterator )
+// find the end of the exception chain
+SQLException* SQLExceptionInfo::getLastException(SQLException* pLastException)
+{
+ SQLException* pException = pLastException;
+ while (pException)
{
- if ( !pChainIterator->hasValue() )
+ pException = const_cast<SQLException*>(o3tl::tryAccess<SQLException>(pException->NextException));
+ if (!pException)
break;
+ pLastException = pException;
+ }
+ return pLastException;
+}
- if ( !isAssignableFrom( aSQLExceptionType, pChainIterator->getValueType() ) )
- break;
+void SQLExceptionInfo::append( TYPE _eType, const OUString& _rErrorMessage, const OUString& _rSQLState, const sal_Int32 _nErrorCode )
+{
+ // create the to-be-appended exception
+ Any aAppend = createException(_eType, _rErrorMessage, _rSQLState, _nErrorCode);
- pLastException = const_cast< SQLException* >( o3tl::doAccess<SQLException>( *pChainIterator ) );
- pChainIterator = &pLastException->NextException;
- }
+ // find the end of the current chain
+ SQLException* pLastException = getLastException(const_cast<SQLException*>(o3tl::tryAccess<SQLException>(m_aContent)));
// append
- if ( pLastException )
+ if (pLastException)
pLastException->NextException = aAppend;
else
{
@@ -233,7 +237,6 @@ void SQLExceptionInfo::append( TYPE _eType, const OUString& _rErrorMessage, cons
}
}
-
void SQLExceptionInfo::doThrow()
{
if ( m_aContent.getValueTypeClass() == TypeClass_EXCEPTION )
diff --git a/connectivity/source/commontools/dbmetadata.cxx b/connectivity/source/commontools/dbmetadata.cxx
index f8afdcda692c..8983ee25bada 100644
--- a/connectivity/source/commontools/dbmetadata.cxx
+++ b/connectivity/source/commontools/dbmetadata.cxx
@@ -33,7 +33,7 @@
#include <com/sun/star/sdbcx/XDataDefinitionSupplier.hpp>
#include <com/sun/star/sdbc/DriverManager.hpp>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <comphelper/namedvaluecollection.hxx>
#include <comphelper/processfactory.hxx>
#include <sal/log.hxx>
@@ -75,11 +75,7 @@ namespace dbtools
::std::optional< OUString > sCachedCatalogSeparator;
DatabaseMetaData_Impl()
- :xConnection()
- ,xConnectionMetaData()
- ,aDriverConfig( ::comphelper::getProcessComponentContext() )
- ,sCachedIdentifierQuoteString()
- ,sCachedCatalogSeparator()
+ : aDriverConfig( ::comphelper::getProcessComponentContext() )
{
}
};
@@ -111,7 +107,7 @@ namespace dbtools
}
- bool lcl_getDriverSetting( const char* _asciiName, const DatabaseMetaData_Impl& _metaData, Any& _out_setting )
+ bool lcl_getDriverSetting( const OUString& _asciiName, const DatabaseMetaData_Impl& _metaData, Any& _out_setting )
{
lcl_checkConnected( _metaData );
const ::comphelper::NamedValueCollection& rDriverMetaData = _metaData.aDriverConfig.getMetaData( _metaData.xConnectionMetaData->getURL() );
@@ -122,7 +118,7 @@ namespace dbtools
}
- bool lcl_getConnectionSetting( const char* _asciiName, const DatabaseMetaData_Impl& _metaData, Any& _out_setting )
+ bool lcl_getConnectionSetting(const OUString& _asciiName, const DatabaseMetaData_Impl& _metaData, Any& _out_setting )
{
try
{
@@ -134,13 +130,12 @@ namespace dbtools
xDataSource->getPropertyValue("Settings"),
UNO_QUERY_THROW );
- _out_setting = xDataSourceSettings->getPropertyValue( OUString::createFromAscii( _asciiName ) );
+ _out_setting = xDataSourceSettings->getPropertyValue( _asciiName );
}
else
{
Reference< XDatabaseMetaData2 > xExtendedMetaData( _metaData.xConnectionMetaData, UNO_QUERY_THROW );
- ::comphelper::NamedValueCollection aSettings( xExtendedMetaData->getConnectionInfo() );
- _out_setting = aSettings.get( _asciiName );
+ _out_setting = ::comphelper::NamedValueCollection::get( xExtendedMetaData->getConnectionInfo(), _asciiName );
return _out_setting.hasValue();
}
return true;
diff --git a/connectivity/source/commontools/dbtools.cxx b/connectivity/source/commontools/dbtools.cxx
index e5e5dcdabbb3..82f981014f3c 100644
--- a/connectivity/source/commontools/dbtools.cxx
+++ b/connectivity/source/commontools/dbtools.cxx
@@ -58,7 +58,6 @@
#include <com/sun/star/sdbcx/XKeysSupplier.hpp>
#include <com/sun/star/sdbcx/XTablesSupplier.hpp>
#include <com/sun/star/task/InteractionHandler.hpp>
-#include <com/sun/star/task/XInteractionRequest.hpp>
#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
#include <com/sun/star/util/NumberFormat.hpp>
#include <com/sun/star/util/NumberFormatsSupplier.hpp>
@@ -79,7 +78,7 @@
#include <osl/diagnose.h>
#include <rtl/ustrbuf.hxx>
#include <sal/log.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <tools/stream.hxx>
#include <cppuhelper/implbase.hxx>
#include <strings.hrc>
@@ -279,9 +278,7 @@ static Reference< XConnection > getConnection_allowException(
Reference<XInitialization> xIni(xDataSource, UNO_QUERY);
if (xIni.is())
{
- Sequence< Any > aArgs(1);
- NamedValue aParam( "ParentWindow", makeAny(_rxParent) );
- aArgs[0] <<= aParam;
+ Sequence< Any > aArgs{ Any(NamedValue( "ParentWindow", Any(_rxParent) )) };
xIni->initialize(aArgs);
}
@@ -319,9 +316,7 @@ static Reference< XConnection > getConnection_allowException(
if (xIni.is())
{
- Sequence< Any > aArgs(1);
- NamedValue aParam( "ParentWindow", makeAny(Reference<XWindow>()) );
- aArgs[0] <<= aParam;
+ Sequence< Any > aArgs{ Any(NamedValue( "ParentWindow", Any(Reference<XWindow>()) )) };
xIni->initialize(aArgs);
}
@@ -385,7 +380,7 @@ static SharedConnection lcl_connectRowSet(const Reference< XRowSet>& _rxRowSet,
|| ( xExistingConn = findConnection( _rxRowSet ) ).is()
)
{
- xRowSetProps->setPropertyValue("ActiveConnection", makeAny( xExistingConn ) );
+ xRowSetProps->setPropertyValue("ActiveConnection", Any( xExistingConn ) );
// no auto disposer needed, since we did not create the connection
xConnection.reset( xExistingConn, SharedConnection::NoTakeOwnership );
@@ -394,7 +389,7 @@ static SharedConnection lcl_connectRowSet(const Reference< XRowSet>& _rxRowSet,
// build a connection with its current settings (4. data source name, or 5. URL)
- static const OUStringLiteral sUserProp( u"User" );
+ static constexpr OUString sUserProp( u"User"_ustr );
OUString sDataSourceName;
xRowSetProps->getPropertyValue("DataSourceName") >>= sDataSourceName;
OUString sURL;
@@ -430,8 +425,8 @@ static SharedConnection lcl_connectRowSet(const Reference< XRowSet>& _rxRowSet,
if (!sUser.isEmpty())
{ // use user and pwd together with the url
auto aInfo(::comphelper::InitPropertySequence({
- { "user", makeAny(sUser) },
- { "password", makeAny(sPwd) }
+ { "user", Any(sUser) },
+ { "password", Any(sPwd) }
}));
xPureConnection = xDriverManager->getConnectionWithInfo( sURL, aInfo );
}
@@ -458,7 +453,7 @@ static SharedConnection lcl_connectRowSet(const Reference< XRowSet>& _rxRowSet,
else
xRowSetProps->setPropertyValue(
"ActiveConnection",
- makeAny( xConnection.getTyped() )
+ Any( xConnection.getTyped() )
);
}
catch(Exception&)
@@ -688,7 +683,7 @@ Reference< XNameAccess > getFieldsByCommandDescriptor( const Reference< XConnect
try
{
if ( xStatementProps.is() )
- xStatementProps->setPropertyValue( "MaxRows", makeAny( sal_Int32( 0 ) ) );
+ xStatementProps->setPropertyValue( "MaxRows", Any( sal_Int32( 0 ) ) );
}
catch( const Exception& )
{
@@ -748,7 +743,7 @@ SQLException prependErrorInfo( const SQLException& _rChainedException, const Ref
{
return SQLException( _rAdditionalError, _rxContext,
_eSQLState == StandardSQLState::ERROR_UNSPECIFIED ? OUString() : getStandardSQLState( _eSQLState ),
- 0, makeAny( _rChainedException ) );
+ 0, Any( _rChainedException ) );
}
namespace
@@ -820,13 +815,13 @@ static OUString impl_doComposeTableName( const Reference< XDatabaseMetaData >& _
OUStringBuffer aComposedName;
OUString sCatalogSep;
- bool bCatlogAtStart = true;
+ bool bCatalogAtStart = true;
if ( !_rCatalog.isEmpty() && aNameComps.bCatalogs )
{
sCatalogSep = _rxMetaData->getCatalogSeparator();
- bCatlogAtStart = _rxMetaData->isCatalogAtStart();
+ bCatalogAtStart = _rxMetaData->isCatalogAtStart();
- if ( bCatlogAtStart && !sCatalogSep.isEmpty())
+ if ( bCatalogAtStart && !sCatalogSep.isEmpty())
{
aComposedName.append( _bQuote ? quoteName( sQuoteString, _rCatalog ) : _rCatalog );
aComposedName.append( sCatalogSep );
@@ -835,14 +830,15 @@ static OUString impl_doComposeTableName( const Reference< XDatabaseMetaData >& _
if ( !_rSchema.isEmpty() && aNameComps.bSchemas )
{
- aComposedName.append( _bQuote ? quoteName( sQuoteString, _rSchema ) : _rSchema );
- aComposedName.append( "." );
+ aComposedName.append(
+ (_bQuote ? quoteName( sQuoteString, _rSchema ) : _rSchema )
+ + "." );
}
aComposedName.append( _bQuote ? quoteName( sQuoteString, _rName ) : _rName );
if ( !_rCatalog.isEmpty()
- && !bCatlogAtStart
+ && !bCatalogAtStart
&& !sCatalogSep.isEmpty()
&& aNameComps.bCatalogs
)
@@ -917,7 +913,7 @@ Reference< XNumberFormatsSupplier> getNumberFormats(
// ask the parent of the connection (should be a DatabaseAccess)
Reference< XNumberFormatsSupplier> xReturn;
Reference< XChild> xConnAsChild(_rxConn, UNO_QUERY);
- static constexpr OUStringLiteral sPropFormatsSupplier( u"NumberFormatsSupplier" );
+ static constexpr OUString sPropFormatsSupplier( u"NumberFormatsSupplier"_ustr );
if (xConnAsChild.is())
{
Reference< XPropertySet> xConnParentProps(xConnAsChild->getParent(), UNO_QUERY);
@@ -947,33 +943,30 @@ try
Reference< XPropertySetInfo> xNewInfo( xNewProps->getPropertySetInfo());
const Sequence< Property> aOldProperties = xOldInfo->getProperties();
- Sequence< Property> aNewProperties = xNewInfo->getProperties();
- int nNewLen = aNewProperties.getLength();
-
- Property* pNewProps = aNewProperties.getArray();
-
- static constexpr OUStringLiteral sPropFormatsSupplier(u"FormatsSupplier");
- static constexpr OUStringLiteral sPropCurrencySymbol(u"CurrencySymbol");
- static constexpr OUStringLiteral sPropDecimals(u"Decimals");
- static constexpr OUStringLiteral sPropEffectiveMin(u"EffectiveMin");
- static constexpr OUStringLiteral sPropEffectiveMax(u"EffectiveMax");
- static constexpr OUStringLiteral sPropEffectiveDefault(u"EffectiveDefault");
- static constexpr OUStringLiteral sPropDefaultText(u"DefaultText");
- static constexpr OUStringLiteral sPropDefaultDate(u"DefaultDate");
- static constexpr OUStringLiteral sPropDefaultTime(u"DefaultTime");
- static constexpr OUStringLiteral sPropValueMin(u"ValueMin");
- static constexpr OUStringLiteral sPropValueMax(u"ValueMax");
- static constexpr OUStringLiteral sPropDecimalAccuracy(u"DecimalAccuracy");
- static constexpr OUStringLiteral sPropClassId(u"ClassId");
- static constexpr OUStringLiteral sFormattedServiceName( u"com.sun.star.form.component.FormattedField" );
+ const Sequence< Property> aNewProperties = xNewInfo->getProperties();
+
+ static constexpr OUString sPropFormatsSupplier(u"FormatsSupplier"_ustr);
+ static constexpr OUString sPropCurrencySymbol(u"CurrencySymbol"_ustr);
+ static constexpr OUString sPropDecimals(u"Decimals"_ustr);
+ static constexpr OUString sPropEffectiveMin(u"EffectiveMin"_ustr);
+ static constexpr OUString sPropEffectiveMax(u"EffectiveMax"_ustr);
+ static constexpr OUString sPropEffectiveDefault(u"EffectiveDefault"_ustr);
+ static constexpr OUString sPropDefaultText(u"DefaultText"_ustr);
+ static constexpr OUString sPropDefaultDate(u"DefaultDate"_ustr);
+ static constexpr OUString sPropDefaultTime(u"DefaultTime"_ustr);
+ static constexpr OUString sPropValueMin(u"ValueMin"_ustr);
+ static constexpr OUString sPropValueMax(u"ValueMax"_ustr);
+ static constexpr OUString sPropDecimalAccuracy(u"DecimalAccuracy"_ustr);
+ static constexpr OUString sPropClassId(u"ClassId"_ustr);
+ static constexpr OUString sFormattedServiceName( u"com.sun.star.form.component.FormattedField"_ustr );
for (const Property& rOldProp : aOldProperties)
{
if ( rOldProp.Name != "DefaultControl" && rOldProp.Name != "LabelControl" )
{
// binary search
- Property* pResult = std::lower_bound(
- pNewProps, pNewProps + nNewLen, rOldProp, ::comphelper::PropertyCompareByName());
+ const Property* pResult = std::lower_bound(
+ aNewProperties.begin(), aNewProperties.end(), rOldProp, ::comphelper::PropertyCompareByName());
if ( ( pResult != aNewProperties.end() )
&& ( pResult->Name == rOldProp.Name )
@@ -1066,13 +1059,13 @@ try
{ // (to convert an OUString into a date will not always succeed, because it might be bound to a text-column,
// but we can work with a double)
Date aDate = DBTypeConversion::toDate(getDouble(aEffectiveDefault));
- xNewProps->setPropertyValue(sPropDefaultDate, makeAny(aDate));
+ xNewProps->setPropertyValue(sPropDefaultDate, Any(aDate));
}
if (hasProperty(sPropDefaultTime, xNewProps) && !bIsString)
{ // Completely analogous to time
css::util::Time aTime = DBTypeConversion::toTime(getDouble(aEffectiveDefault));
- xNewProps->setPropertyValue(sPropDefaultTime, makeAny(aTime));
+ xNewProps->setPropertyValue(sPropDefaultTime, Any(aTime));
}
if (hasProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE), xNewProps) && !bIsString)
@@ -1142,7 +1135,7 @@ try
nKey = xFormats->addNew(sNewFormat, _rLocale);
}
- xNewProps->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FORMATKEY), makeAny(nKey));
+ xNewProps->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FORMATKEY), Any(nKey));
}
// min-/max-Value
@@ -1633,7 +1626,8 @@ namespace
std::vector<bool, std::allocator<bool> > m_aSet;
Reference<XIndexAccess> m_xSource;
public:
- OParameterWrapper(const std::vector<bool, std::allocator<bool> >& _aSet,const Reference<XIndexAccess>& _xSource) : m_aSet(_aSet),m_xSource(_xSource){}
+ OParameterWrapper(std::vector<bool, std::allocator<bool> >&& _aSet,const Reference<XIndexAccess>& _xSource)
+ : m_aSet(std::move(_aSet)), m_xSource(_xSource) {}
private:
// css::container::XElementAccess
virtual Type SAL_CALL getElementType() override
@@ -1717,10 +1711,10 @@ void askForParameters(const Reference< XSingleSelectQueryComposer >& _xComposer,
rtl::Reference<OParameterContinuation> pParams = new OParameterContinuation;
// the request
ParametersRequest aRequest;
- Reference<XIndexAccess> xWrappedParameters = new OParameterWrapper(aNewParameterSet,xParamsAsIndicies);
+ Reference<XIndexAccess> xWrappedParameters = new OParameterWrapper(std::move(aNewParameterSet),xParamsAsIndicies);
aRequest.Parameters = xWrappedParameters;
aRequest.Connection = _xConnection;
- rtl::Reference<OInteractionRequest> pRequest = new OInteractionRequest(makeAny(aRequest));
+ rtl::Reference<OInteractionRequest> pRequest = new OInteractionRequest(Any(aRequest));
// some knittings
pRequest->addContinuation(pAbort);
pRequest->addContinuation(pParams);
@@ -1738,15 +1732,14 @@ void askForParameters(const Reference< XSingleSelectQueryComposer >& _xComposer,
// now transfer the values from the continuation object to the parameter columns
Sequence< PropertyValue > aFinalValues = pParams->getValues();
- const PropertyValue* pFinalValues = aFinalValues.getConstArray();
- for (sal_Int32 i=0; i<aFinalValues.getLength(); ++i, ++pFinalValues)
+ for (sal_Int32 i = 0; i < aFinalValues.getLength(); ++i)
{
Reference< XPropertySet > xParamColumn(xWrappedParameters->getByIndex(i),UNO_QUERY);
if (xParamColumn.is())
{
OUString sName;
xParamColumn->getPropertyValue(PROPERTY_NAME) >>= sName;
- OSL_ENSURE(sName == pFinalValues->Name, "::dbaui::askForParameters: inconsistent parameter names!");
+ OSL_ENSURE(sName == aFinalValues[i].Name, "::dbaui::askForParameters: inconsistent parameter names!");
// determine the field type and ...
sal_Int32 nParamType = 0;
@@ -1756,12 +1749,12 @@ void askForParameters(const Reference< XSingleSelectQueryComposer >& _xComposer,
if (hasProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCALE), xParamColumn))
xParamColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCALE)) >>= nScale;
// (the index of the parameters is one-based)
- TParameterPositions::const_iterator aFind = aParameterNames.find(pFinalValues->Name);
+ TParameterPositions::const_iterator aFind = aParameterNames.find(aFinalValues[i].Name);
for(const auto& rItem : aFind->second)
{
if ( _aParametersSet.empty() || !_aParametersSet[rItem-1] )
{
- _xParameters->setObjectWithInfo(rItem, pFinalValues->Value, nParamType, nScale);
+ _xParameters->setObjectWithInfo(rItem, aFinalValues[i].Value, nParamType, nScale);
}
}
}
@@ -1798,7 +1791,7 @@ void setObjectWithInfo(const Reference<XParameters>& _xParams,
case DataType::CHAR:
case DataType::VARCHAR:
case DataType::LONGVARCHAR:
- _xParams->setString(parameterIndex,_rValue);
+ _xParams->setString(parameterIndex,_rValue.getString());
break;
case DataType::CLOB:
{
@@ -1822,26 +1815,26 @@ void setObjectWithInfo(const Reference<XParameters>& _xParams,
break;
case DataType::BIGINT:
if ( _rValue.isSigned() )
- _xParams->setLong(parameterIndex,_rValue);
+ _xParams->setLong(parameterIndex,_rValue.getLong());
else
- _xParams->setString(parameterIndex,_rValue);
+ _xParams->setString(parameterIndex,_rValue.getString());
break;
case DataType::FLOAT:
- _xParams->setFloat(parameterIndex,_rValue);
+ _xParams->setFloat(parameterIndex,_rValue.getFloat());
break;
case DataType::REAL:
case DataType::DOUBLE:
- _xParams->setDouble(parameterIndex,_rValue);
+ _xParams->setDouble(parameterIndex,_rValue.getDouble());
break;
case DataType::DATE:
- _xParams->setDate(parameterIndex,_rValue);
+ _xParams->setDate(parameterIndex,_rValue.getDate());
break;
case DataType::TIME:
- _xParams->setTime(parameterIndex,_rValue);
+ _xParams->setTime(parameterIndex,_rValue.getTime());
break;
case DataType::TIMESTAMP:
- _xParams->setTimestamp(parameterIndex,_rValue);
+ _xParams->setTimestamp(parameterIndex,_rValue.getDateTime());
break;
case DataType::BINARY:
case DataType::VARBINARY:
@@ -1874,25 +1867,25 @@ void setObjectWithInfo(const Reference<XParameters>& _xParams,
break;
case DataType::BIT:
case DataType::BOOLEAN:
- _xParams->setBoolean(parameterIndex,static_cast<bool>(_rValue));
+ _xParams->setBoolean(parameterIndex,_rValue.getBool());
break;
case DataType::TINYINT:
if ( _rValue.isSigned() )
- _xParams->setByte(parameterIndex,_rValue);
+ _xParams->setByte(parameterIndex,_rValue.getInt8());
else
- _xParams->setShort(parameterIndex,_rValue);
+ _xParams->setShort(parameterIndex,_rValue.getInt16());
break;
case DataType::SMALLINT:
if ( _rValue.isSigned() )
- _xParams->setShort(parameterIndex,_rValue);
+ _xParams->setShort(parameterIndex,_rValue.getInt16());
else
- _xParams->setInt(parameterIndex,_rValue);
+ _xParams->setInt(parameterIndex,_rValue.getInt32());
break;
case DataType::INTEGER:
if ( _rValue.isSigned() )
- _xParams->setInt(parameterIndex,_rValue);
+ _xParams->setInt(parameterIndex,_rValue.getULong());
else
- _xParams->setLong(parameterIndex,_rValue);
+ _xParams->setLong(parameterIndex,_rValue.getLong());
break;
default:
{
@@ -2023,8 +2016,8 @@ namespace dbase
case 0x65: eEncoding = RTL_TEXTENCODING_IBM_866; break; // Russian MS-DOS code page 866
case 0x66: eEncoding = RTL_TEXTENCODING_IBM_865; break; // Nordic MS-DOS code page 865
case 0x67: eEncoding = RTL_TEXTENCODING_IBM_861; break; // Icelandic MS-DOS
- //case 0x68: eEncoding = ; break; // Kamenicky (Czech) MS-DOS
- //case 0x69: eEncoding = ; break; // Mazovia (Polish) MS-DOS
+ case 0x68: eEncoding = RTL_TEXTENCODING_KAMENICKY; break; // Kamenicky (Czech) MS-DOS
+ case 0x69: eEncoding = RTL_TEXTENCODING_MAZOVIA; break; // Mazovia (Polish) MS-DOS
case 0x6A: eEncoding = RTL_TEXTENCODING_IBM_737; break; // Greek MS-DOS (437G)
case 0x6B: eEncoding = RTL_TEXTENCODING_IBM_857; break; // Turkish MS-DOS
case 0x6C: eEncoding = RTL_TEXTENCODING_IBM_863; break; // MS-DOS, Canada
diff --git a/connectivity/source/commontools/dbtools2.cxx b/connectivity/source/commontools/dbtools2.cxx
index 9805f63afba4..5b486bed168e 100644
--- a/connectivity/source/commontools/dbtools2.cxx
+++ b/connectivity/source/commontools/dbtools2.cxx
@@ -45,7 +45,7 @@
#include <com/sun/star/container/XChild.hpp>
#include <comphelper/types.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <unotools/sharedunocomponent.hxx>
#include <algorithm>
#include <string_view>
@@ -122,36 +122,44 @@ OUString createStandardTypePart(const Reference< XPropertySet >& xColProp,const
{
sal_Int32 nIndex = sTypeName.indexOf(sAutoIncrementValue);
if (nIndex != -1)
- sTypeName = sTypeName.replaceAt(nIndex,sTypeName.getLength() - nIndex,OUString());
+ sTypeName = sTypeName.replaceAt(nIndex,sTypeName.getLength() - nIndex, u"");
}
if ( (nPrecision > 0 || nScale > 0) && bUseLiteral )
{
- sal_Int32 nParenPos = sTypeName.indexOf('(');
+ bool bTimed = (nDataType == DataType::TIME ||
+ nDataType == DataType::TIME_WITH_TIMEZONE ||
+ nDataType == DataType::TIMESTAMP ||
+ nDataType == DataType::TIMESTAMP_WITH_TIMEZONE);
+
+ sal_Int32 nParenPos = (nDataType == DataType::TIME_WITH_TIMEZONE ||
+ nDataType == DataType::TIMESTAMP_WITH_TIMEZONE) ?
+ sTypeName.indexOf(' ') :
+ sTypeName.indexOf('(');
+
if ( nParenPos == -1 )
- {
aSql.append(sTypeName);
- aSql.append("(");
- }
else
- {
- aSql.append(sTypeName.subView(0, ++nParenPos));
- }
+ aSql.append(sTypeName.subView(0, nParenPos));
+ aSql.append("(");
- if ( nPrecision > 0 && nDataType != DataType::TIMESTAMP )
+ if ( nPrecision > 0 && !bTimed )
{
aSql.append(nPrecision);
if ( (nScale > 0) || (!_sCreatePattern.empty() && sCreateParams.indexOf(_sCreatePattern) != -1) )
aSql.append(",");
}
- if ( (nScale > 0) || ( !_sCreatePattern.empty() && sCreateParams.indexOf(_sCreatePattern) != -1 ) || nDataType == DataType::TIMESTAMP )
+ if ( (nScale > 0) || ( !_sCreatePattern.empty() && sCreateParams.indexOf(_sCreatePattern) != -1 ) || bTimed )
aSql.append(nScale);
if ( nParenPos == -1 )
aSql.append(")");
else
{
- nParenPos = sTypeName.indexOf(')',nParenPos);
+ if ( bTimed )
+ aSql.append(")");
+ else
+ nParenPos = sTypeName.indexOf(')',nParenPos);
aSql.append(sTypeName.subView(nParenPos));
}
}
@@ -161,10 +169,7 @@ OUString createStandardTypePart(const Reference< XPropertySet >& xColProp,const
OUString aDefault = ::comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_DEFAULTVALUE)));
if ( !aDefault.isEmpty() )
{
- aSql.append(" DEFAULT ");
- aSql.append(sPrefix);
- aSql.append(aDefault);
- aSql.append(sPostfix);
+ aSql.append(" DEFAULT " + sPrefix + aDefault + sPostfix);
} // if ( aDefault.getLength() )
return aSql.makeStringAndClear();
@@ -180,7 +185,7 @@ OUString createStandardColumnPart(const Reference< XPropertySet >& xColProp,cons
xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_ISAUTOINCREMENT)) >>= bIsAutoIncrement;
const OUString sQuoteString = xMetaData->getIdentifierQuoteString();
- OUStringBuffer aSql = ::dbtools::quoteName(sQuoteString,::comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME))));
+ OUStringBuffer aSql(::dbtools::quoteName(sQuoteString,::comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME)))));
// check if the user enter a specific string to create autoincrement values
OUString sAutoIncrementValue;
@@ -188,17 +193,14 @@ OUString createStandardColumnPart(const Reference< XPropertySet >& xColProp,cons
if ( xPropInfo.is() && xPropInfo->hasPropertyByName(rPropMap.getNameByIndex(PROPERTY_ID_AUTOINCREMENTCREATION)) )
xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_AUTOINCREMENTCREATION)) >>= sAutoIncrementValue;
- aSql.append(" ");
-
- aSql.append(createStandardTypePart(xColProp, _xConnection, _sCreatePattern));
+ aSql.append(" " + createStandardTypePart(xColProp, _xConnection, _sCreatePattern));
if(::comphelper::getINT32(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_ISNULLABLE))) == ColumnValue::NO_NULLS)
aSql.append(" NOT NULL");
if ( bIsAutoIncrement && !sAutoIncrementValue.isEmpty())
{
- aSql.append(" ");
- aSql.append(sAutoIncrementValue);
+ aSql.append(" " + sAutoIncrementValue);
}
if ( _pHelper )
@@ -224,8 +226,7 @@ OUString createStandardCreateStatement(const Reference< XPropertySet >& descript
if ( sComposedName.isEmpty() )
::dbtools::throwFunctionSequenceException(_xConnection);
- aSql.append(sComposedName);
- aSql.append(" (");
+ aSql.append(sComposedName + " (");
// columns
Reference<XColumnsSupplier> xColumnSup(descriptor,UNO_QUERY);
@@ -241,8 +242,9 @@ OUString createStandardCreateStatement(const Reference< XPropertySet >& descript
{
if ( (xColumns->getByIndex(i) >>= xColProp) && xColProp.is() )
{
- aSql.append(createStandardColumnPart(xColProp,_xConnection,_pHelper,_sCreatePattern));
- aSql.append(",");
+ aSql.append(
+ createStandardColumnPart(xColProp,_xConnection,_pHelper,_sCreatePattern)
+ + ",");
}
}
return aSql.makeStringAndClear();
@@ -305,8 +307,7 @@ OUString createStandardKeyStatement(const Reference< XPropertySet >& descriptor,
if(!xColumns.is() || !xColumns->getCount())
::dbtools::throwFunctionSequenceException(_xConnection);
- aSql.append(" PRIMARY KEY ");
- aSql.append(generateColumnNames(xColumns,xMetaData));
+ aSql.append(" PRIMARY KEY " + generateColumnNames(xColumns,xMetaData));
}
else if(nKeyType == KeyType::UNIQUE)
{
@@ -315,8 +316,7 @@ OUString createStandardKeyStatement(const Reference< XPropertySet >& descriptor,
if(!xColumns.is() || !xColumns->getCount())
::dbtools::throwFunctionSequenceException(_xConnection);
- aSql.append(" UNIQUE ");
- aSql.append(generateColumnNames(xColumns,xMetaData));
+ aSql.append(" UNIQUE " + generateColumnNames(xColumns,xMetaData));
}
else if(nKeyType == KeyType::FOREIGN)
{
@@ -387,7 +387,7 @@ OUString createSqlCreateTableStatement( const Reference< XPropertySet >& descri
else
{
if ( aSql.endsWith(",") )
- aSql = aSql.replaceAt(aSql.getLength()-1, 1, ")");
+ aSql = aSql.replaceAt(aSql.getLength()-1, 1, u")");
else
aSql += ")";
}
@@ -574,6 +574,11 @@ Reference<XPropertySet> createSDBCXColumn(const Reference<XPropertySet>& _xTable
bool getBooleanDataSourceSetting( const Reference< XConnection >& _rxConnection, const char* _pAsciiSettingName )
{
+ return getBooleanDataSourceSetting(_rxConnection, OUString::createFromAscii( _pAsciiSettingName ));
+}
+
+bool getBooleanDataSourceSetting( const Reference< XConnection >& _rxConnection, const OUString & rSettingName )
+{
bool bValue( false );
try
{
@@ -585,7 +590,7 @@ bool getBooleanDataSourceSetting( const Reference< XConnection >& _rxConnection,
xDataSourceProperties->getPropertyValue("Settings"),
UNO_QUERY_THROW
);
- OSL_VERIFY( xSettings->getPropertyValue( OUString::createFromAscii( _pAsciiSettingName ) ) >>= bValue );
+ OSL_VERIFY( xSettings->getPropertyValue( rSettingName ) >>= bValue );
}
}
catch( const Exception& )
@@ -637,11 +642,11 @@ bool isDataSourcePropertyEnabled(const Reference<XInterface>& _xProp, const OUSt
{
Sequence< PropertyValue > aInfo;
xProp->getPropertyValue("Info") >>= aInfo;
- const PropertyValue* pValue =std::find_if(aInfo.begin(),
- aInfo.end(),
+ const PropertyValue* pValue =std::find_if(std::cbegin(aInfo),
+ std::cend(aInfo),
[&_sProperty](const PropertyValue& lhs)
{ return lhs.Name == _sProperty; });
- if ( pValue != aInfo.end() )
+ if ( pValue != std::cend(aInfo) )
pValue->Value >>= bEnabled;
}
}
@@ -809,7 +814,7 @@ void collectColumnInformation(const Reference< XConnection>& _xConnection,
{
::utl::SharedUNOComponent< XStatement > xStmt( _xConnection->createStatement() );
Reference< XPropertySet > xStatementProps( xStmt, UNO_QUERY_THROW );
- xStatementProps->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex( PROPERTY_ID_ESCAPEPROCESSING ), makeAny( false ) );
+ xStatementProps->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex( PROPERTY_ID_ESCAPEPROCESSING ), Any( false ) );
Reference< XResultSet > xResult( xStmt->executeQuery( sSelect ), UNO_SET_THROW );
Reference< XResultSetMetaDataSupplier > xSuppMeta( xResult, UNO_QUERY_THROW );
Reference< XResultSetMetaData > xMeta( xSuppMeta->getMetaData(), UNO_SET_THROW );
@@ -838,22 +843,15 @@ bool isEmbeddedInDatabase( const Reference< XInterface >& _rxComponent, Referenc
if ( xModel.is() )
{
- Sequence< PropertyValue > aArgs = xModel->getArgs();
- const PropertyValue* pIter = aArgs.getConstArray();
- const PropertyValue* pEnd = pIter + aArgs.getLength();
- for(;pIter != pEnd;++pIter)
+ for (auto& arg : xModel->getArgs())
{
- if ( pIter->Name == "ComponentData" )
+ if (arg.Name == "ComponentData")
{
Sequence<PropertyValue> aDocumentContext;
- pIter->Value >>= aDocumentContext;
- const PropertyValue* pContextIter = aDocumentContext.getConstArray();
- const PropertyValue* pContextEnd = pContextIter + aDocumentContext.getLength();
- for(;pContextIter != pContextEnd;++pContextIter)
+ arg.Value >>= aDocumentContext;
+ for (auto& item : aDocumentContext)
{
- if ( pContextIter->Name == "ActiveConnection"
- && ( pContextIter->Value >>= _rxActualConnection )
- )
+ if (item.Name == "ActiveConnection" && (item.Value >>= _rxActualConnection))
{
bIsEmbedded = true;
break;
@@ -940,33 +938,19 @@ sal_Int32 DBTypeConversion::convertUnicodeStringToLength( const OUString& _rSour
return nLen;
}
-static OUString lcl_getReportEngines()
-{
- return "org.openoffice.Office.DataAccess/ReportEngines";
-}
-
-static OUString lcl_getDefaultReportEngine()
-{
- return "DefaultReportEngine";
-}
-
-static OUString lcl_getReportEngineNames()
-{
- return "ReportEngineNames";
-}
OUString getDefaultReportEngineServiceName(const Reference< XComponentContext >& _rxORB)
{
::utl::OConfigurationTreeRoot aReportEngines = ::utl::OConfigurationTreeRoot::createWithComponentContext(
- _rxORB, lcl_getReportEngines(), -1, ::utl::OConfigurationTreeRoot::CM_READONLY);
+ _rxORB, "org.openoffice.Office.DataAccess/ReportEngines", -1, ::utl::OConfigurationTreeRoot::CM_READONLY);
if ( aReportEngines.isValid() )
{
OUString sDefaultReportEngineName;
- aReportEngines.getNodeValue(lcl_getDefaultReportEngine()) >>= sDefaultReportEngineName;
+ aReportEngines.getNodeValue("DefaultReportEngine") >>= sDefaultReportEngineName;
if ( !sDefaultReportEngineName.isEmpty() )
{
- ::utl::OConfigurationNode aReportEngineNames = aReportEngines.openNode(lcl_getReportEngineNames());
+ ::utl::OConfigurationNode aReportEngineNames = aReportEngines.openNode("ReportEngineNames");
if ( aReportEngineNames.isValid() )
{
::utl::OConfigurationNode aReportEngine = aReportEngineNames.openNode(sDefaultReportEngineName);
@@ -1013,7 +997,7 @@ bool isAggregateColumn( const Reference< XPropertySet > &_xColumn )
{
bool bAgg(false);
- static constexpr OUStringLiteral sAgg = u"AggregateFunction";
+ static constexpr OUString sAgg = u"AggregateFunction"_ustr;
if ( _xColumn->getPropertySetInfo()->hasPropertyByName(sAgg) )
_xColumn->getPropertyValue(sAgg) >>= bAgg;
diff --git a/connectivity/source/commontools/filtermanager.cxx b/connectivity/source/commontools/filtermanager.cxx
index ee39aa87830e..fa9fc7116d92 100644
--- a/connectivity/source/commontools/filtermanager.cxx
+++ b/connectivity/source/commontools/filtermanager.cxx
@@ -22,7 +22,7 @@
#include <com/sun/star/sdb/XSQLQueryComposerFactory.hpp>
#include <TConnection.hxx>
#include <osl/diagnose.h>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <rtl/ustrbuf.hxx>
@@ -31,9 +31,6 @@ namespace dbtools
using namespace ::com::sun::star::uno;
- using namespace ::com::sun::star::sdbc;
- using namespace ::com::sun::star::sdb;
- using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::beans;
using namespace connectivity;
@@ -49,7 +46,7 @@ namespace dbtools
OSL_ENSURE( m_xComponentAggregate.is(), "FilterManager::initialize: invalid arguments!" );
if ( m_xComponentAggregate.is() )
- m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_APPLYFILTER), makeAny( true ) );
+ m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_APPLYFILTER), Any( true ) );
}
@@ -74,7 +71,7 @@ namespace dbtools
}
assert(false);
- static const OUString sErr("#FilterManager::getFilterComponent unknown component#");
+ static constexpr OUString sErr(u"#FilterManager::getFilterComponent unknown component#"_ustr);
return sErr;
}
@@ -108,14 +105,14 @@ namespace dbtools
[[fallthrough]];
case FilterComponent::LinkFilter:
if (propagate)
- m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FILTER), makeAny( getComposedFilter() ) );
+ m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FILTER), Any( getComposedFilter() ) );
break;
case FilterComponent::PublicHaving:
propagate = propagate && m_bApplyPublicFilter;
[[fallthrough]];
case FilterComponent::LinkHaving:
if (propagate)
- m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_HAVINGCLAUSE), makeAny( getComposedHaving() ) );
+ m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_HAVINGCLAUSE), Any( getComposedHaving() ) );
break;
}
}
@@ -140,9 +137,9 @@ namespace dbtools
{
// only where/if something changed
if (!getFilterComponent( FilterComponent::PublicFilter ).isEmpty())
- m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FILTER), makeAny( getComposedFilter() ) );
+ m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FILTER), Any( getComposedFilter() ) );
if (!getFilterComponent( FilterComponent::PublicHaving ).isEmpty())
- m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_HAVINGCLAUSE), makeAny( getComposedHaving() ) );
+ m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_HAVINGCLAUSE), Any( getComposedHaving() ) );
}
}
catch( const Exception& )
diff --git a/connectivity/source/commontools/formattedcolumnvalue.cxx b/connectivity/source/commontools/formattedcolumnvalue.cxx
index fea5b4906e4e..32db3d7177c2 100644
--- a/connectivity/source/commontools/formattedcolumnvalue.cxx
+++ b/connectivity/source/commontools/formattedcolumnvalue.cxx
@@ -31,7 +31,7 @@
#include <com/sun/star/sdb/XColumn.hpp>
#include <com/sun/star/sdb/XColumnUpdate.hpp>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <i18nlangtag/mslangid.hxx>
#include <i18nlangtag/languagetag.hxx>
#include <comphelper/numbers.hxx>
@@ -76,14 +76,11 @@ namespace dbtools
Reference< XColumnUpdate > m_xColumnUpdate;
FormattedColumnValue_Data()
- :m_xFormatter()
- ,m_aNullDate( DBTypeConversion::getStandardDate() )
+ :m_aNullDate( DBTypeConversion::getStandardDate() )
,m_nFormatKey( 0 )
,m_nFieldType( DataType::OTHER )
,m_nKeyType( NumberFormat::UNDEFINED )
,m_bNumericField( false )
- ,m_xColumn()
- ,m_xColumnUpdate()
{
}
};
@@ -129,7 +126,9 @@ namespace dbtools
{
case DataType::DATE:
case DataType::TIME:
+ case DataType::TIME_WITH_TIMEZONE:
case DataType::TIMESTAMP:
+ case DataType::TIMESTAMP_WITH_TIMEZONE:
case DataType::BIT:
case DataType::BOOLEAN:
case DataType::TINYINT:
@@ -150,7 +149,7 @@ namespace dbtools
// get the format key of our bound field
Reference< XPropertySetInfo > xPSI( _rxColumn->getPropertySetInfo(), UNO_SET_THROW );
bool bHaveFieldFormat = false;
- static const OUStringLiteral sFormatKeyProperty( u"FormatKey" );
+ static constexpr OUString sFormatKeyProperty( u"FormatKey"_ustr );
if ( xPSI->hasPropertyByName( sFormatKeyProperty ) )
{
bHaveFieldFormat = ( _rxColumn->getPropertyValue( sFormatKeyProperty ) >>= _rData.m_nFormatKey );
@@ -158,7 +157,7 @@ namespace dbtools
if ( !bHaveFieldFormat )
{
// fall back to a format key as indicated by the field type
- Locale aSystemLocale( LanguageTag( MsLangId::getSystemLanguage() ).getLocale() );
+ Locale aSystemLocale( LanguageTag( MsLangId::getConfiguredSystemLanguage() ).getLocale() );
Reference< XNumberFormatTypes > xNumTypes( xNumberFormatsSupp->getNumberFormats(), UNO_QUERY_THROW );
_rData.m_nFormatKey = getDefaultNumberFormat( _rxColumn, xNumTypes, aSystemLocale );
}
diff --git a/connectivity/source/commontools/parameters.cxx b/connectivity/source/commontools/parameters.cxx
index a0b0b57958fc..0e577704de7f 100644
--- a/connectivity/source/commontools/parameters.cxx
+++ b/connectivity/source/commontools/parameters.cxx
@@ -33,7 +33,7 @@
#include <connectivity/filtermanager.hxx>
#include <TConnection.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <ParameterCont.hxx>
#include <o3tl/safeint.hxx>
@@ -46,7 +46,6 @@ namespace dbtools
using namespace ::com::sun::star::sdb;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::sdbcx;
- using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::task;
using namespace ::com::sun::star::form;
@@ -393,9 +392,7 @@ namespace dbtools
if ( !sAdditionalFilter.isEmpty() )
sAdditionalFilter.append(" AND ");
- sAdditionalFilter.append("( ");
- sAdditionalFilter.append(elem);
- sAdditionalFilter.append(" )");
+ sAdditionalFilter.append("( " + elem + " )");
}
// now set this filter at the filter manager
@@ -413,9 +410,7 @@ namespace dbtools
if ( !sAdditionalHaving.isEmpty() )
sAdditionalHaving.append(" AND ");
- sAdditionalHaving.append("( ");
- sAdditionalHaving.append(elem);
- sAdditionalHaving.append(" )");
+ sAdditionalHaving.append("( " + elem + " )");
}
// now set this having clause at the filter manager
@@ -480,7 +475,7 @@ namespace dbtools
// property, but the parameter listeners expect such a property. So we need an object "aggregating"
// xParam and supplying an additional property ("Value")
// (it's no real aggregation of course...)
- m_pOuterParameters->push_back( new param::ParameterWrapper( aParam.second.xComposerColumn, m_xInnerParamUpdate, aParam.second.aInnerIndexes ) );
+ m_pOuterParameters->push_back( new param::ParameterWrapper( aParam.second.xComposerColumn, m_xInnerParamUpdate, std::vector(aParam.second.aInnerIndexes) ) );
}
#if OSL_DEBUG_LEVEL > 0
@@ -650,7 +645,7 @@ namespace dbtools
ParametersRequest aRequest;
aRequest.Parameters = m_pOuterParameters.get();
aRequest.Connection = _rxConnection;
- rtl::Reference<OInteractionRequest> pRequest = new OInteractionRequest( makeAny( aRequest ) );
+ rtl::Reference<OInteractionRequest> pRequest = new OInteractionRequest( Any( aRequest ) );
// some knittings
pRequest->addContinuation( pAbort );
@@ -674,8 +669,7 @@ namespace dbtools
{
// transfer the values from the continuation object to the parameter columns
const Sequence< PropertyValue >& aFinalValues = pParams->getValues();
- const PropertyValue* pFinalValues = aFinalValues.getConstArray();
- for ( sal_Int32 i = 0; i < aFinalValues.getLength(); ++i, ++pFinalValues )
+ for (sal_Int32 i = 0; i < aFinalValues.getLength(); ++i)
{
Reference< XPropertySet > xParamColumn(aRequest.Parameters->getByIndex( i ),UNO_QUERY);
if ( xParamColumn.is() )
@@ -683,9 +677,9 @@ namespace dbtools
#ifdef DBG_UTIL
OUString sName;
xParamColumn->getPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME) ) >>= sName;
- OSL_ENSURE( sName == pFinalValues->Name, "ParameterManager::completeParameters: inconsistent parameter names!" );
+ OSL_ENSURE( sName == aFinalValues[i].Name, "ParameterManager::completeParameters: inconsistent parameter names!" );
#endif
- xParamColumn->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_VALUE), pFinalValues->Value );
+ xParamColumn->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_VALUE), aFinalValues[i].Value );
// the property sets are wrapper classes, translating the Value property into a call to
// the appropriate XParameters interface
}
@@ -707,14 +701,14 @@ namespace dbtools
// TODO: shouldn't we subtract all the parameters which were already visited?
if ( nParamsLeft )
{
- ::comphelper::OInterfaceIteratorHelper2 aIter( m_aParameterListeners );
+ ::comphelper::OInterfaceIteratorHelper3 aIter( m_aParameterListeners );
Reference< XPropertySet > xProp = m_xComponent;
OSL_ENSURE(xProp.is(),"Some already released my component!");
DatabaseParameterEvent aEvent( xProp, m_pOuterParameters );
_rClearForNotifies.clear();
while ( aIter.hasMoreElements() && !bCanceled )
- bCanceled = !static_cast< XDatabaseParameterListener* >( aIter.next() )->approveParameter( aEvent );
+ bCanceled = !aIter.next()->approveParameter( aEvent );
_rClearForNotifies.reset();
}
@@ -956,144 +950,245 @@ namespace dbtools
m_aParametersVisited[ _nIndex - 1 ] = true;
}
-#define VISIT_PARAMETER( method ) \
- ::osl::MutexGuard aGuard( m_rMutex ); \
- OSL_ENSURE( m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!" ); \
- if ( !m_xInnerParamUpdate.is() ) \
- return; \
- m_xInnerParamUpdate->method; \
- externalParameterVisited( _nIndex ) \
-
-
void ParameterManager::setNull( sal_Int32 _nIndex, sal_Int32 sqlType )
{
- VISIT_PARAMETER( setNull( _nIndex, sqlType ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setNull(_nIndex, sqlType);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setObjectNull( sal_Int32 _nIndex, sal_Int32 sqlType, const OUString& typeName )
{
- VISIT_PARAMETER( setObjectNull( _nIndex, sqlType, typeName ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setObjectNull(_nIndex, sqlType, typeName);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setBoolean( sal_Int32 _nIndex, bool x )
{
- VISIT_PARAMETER( setBoolean( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setBoolean(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setByte( sal_Int32 _nIndex, sal_Int8 x )
{
- VISIT_PARAMETER( setByte( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setByte(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setShort( sal_Int32 _nIndex, sal_Int16 x )
{
- VISIT_PARAMETER( setShort( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setShort(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setInt( sal_Int32 _nIndex, sal_Int32 x )
{
- VISIT_PARAMETER( setInt( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setInt(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setLong( sal_Int32 _nIndex, sal_Int64 x )
{
- VISIT_PARAMETER( setLong( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setLong(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setFloat( sal_Int32 _nIndex, float x )
{
- VISIT_PARAMETER( setFloat( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setFloat(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setDouble( sal_Int32 _nIndex, double x )
{
- VISIT_PARAMETER( setDouble( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setDouble(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setString( sal_Int32 _nIndex, const OUString& x )
{
- VISIT_PARAMETER( setString( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setString(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setBytes( sal_Int32 _nIndex, const css::uno::Sequence< sal_Int8 >& x )
{
- VISIT_PARAMETER( setBytes( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setBytes(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setDate( sal_Int32 _nIndex, const css::util::Date& x )
{
- VISIT_PARAMETER( setDate( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setDate(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setTime( sal_Int32 _nIndex, const css::util::Time& x )
{
- VISIT_PARAMETER( setTime( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setTime(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setTimestamp( sal_Int32 _nIndex, const css::util::DateTime& x )
{
- VISIT_PARAMETER( setTimestamp( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setTimestamp(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setBinaryStream( sal_Int32 _nIndex, const css::uno::Reference< css::io::XInputStream>& x, sal_Int32 length )
{
- VISIT_PARAMETER( setBinaryStream( _nIndex, x, length ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setBinaryStream(_nIndex, x, length);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setCharacterStream( sal_Int32 _nIndex, const css::uno::Reference< css::io::XInputStream>& x, sal_Int32 length )
{
- VISIT_PARAMETER( setCharacterStream( _nIndex, x, length ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setCharacterStream(_nIndex, x, length);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setObject( sal_Int32 _nIndex, const css::uno::Any& x )
{
- VISIT_PARAMETER( setObject( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setObject(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setObjectWithInfo( sal_Int32 _nIndex, const css::uno::Any& x, sal_Int32 targetSqlType, sal_Int32 scale )
{
- VISIT_PARAMETER( setObjectWithInfo( _nIndex, x, targetSqlType, scale ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setObjectWithInfo(_nIndex, x, targetSqlType, scale);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setRef( sal_Int32 _nIndex, const css::uno::Reference< css::sdbc::XRef>& x )
{
- VISIT_PARAMETER( setRef( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setRef(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setBlob( sal_Int32 _nIndex, const css::uno::Reference< css::sdbc::XBlob>& x )
{
- VISIT_PARAMETER( setBlob( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setBlob(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setClob( sal_Int32 _nIndex, const css::uno::Reference< css::sdbc::XClob>& x )
{
- VISIT_PARAMETER( setClob( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setClob(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
void ParameterManager::setArray( sal_Int32 _nIndex, const css::uno::Reference< css::sdbc::XArray>& x )
{
- VISIT_PARAMETER( setArray( _nIndex, x ) );
+ ::osl::MutexGuard aGuard(m_rMutex);
+ OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!");
+ if (!m_xInnerParamUpdate.is())
+ return;
+ m_xInnerParamUpdate->setArray(_nIndex, x);
+ externalParameterVisited(_nIndex);
}
diff --git a/connectivity/source/commontools/paramwrapper.cxx b/connectivity/source/commontools/paramwrapper.cxx
index 0aca56b65123..e25a3e7b4905 100644
--- a/connectivity/source/commontools/paramwrapper.cxx
+++ b/connectivity/source/commontools/paramwrapper.cxx
@@ -28,7 +28,8 @@
#include <com/sun/star/sdb/XSingleSelectQueryAnalyzer.hpp>
#include <com/sun/star/lang/DisposedException.hpp>
-#include <tools/diagnose_ex.h>
+#include <o3tl/safeint.hxx>
+#include <comphelper/diagnose_ex.hxx>
#include <comphelper/enumhelper.hxx>
#define PROPERTY_ID_VALUE 1000
@@ -75,9 +76,9 @@ namespace dbtools::param
ParameterWrapper::ParameterWrapper( const Reference< XPropertySet >& _rxColumn,
- const Reference< XParameters >& _rxAllParameters, const std::vector< sal_Int32 >& _rIndexes )
+ const Reference< XParameters >& _rxAllParameters, std::vector< sal_Int32 >&& _rIndexes )
:PropertyBase( m_aBHelper )
- ,m_aIndexes( _rIndexes )
+ ,m_aIndexes( std::move(_rIndexes) )
,m_xDelegator( _rxColumn )
,m_xValueDestination( _rxAllParameters )
{
@@ -158,7 +159,7 @@ namespace dbtools::param
aProperties = m_xDelegatorPSI->getProperties();
sal_Int32 nProperties( aProperties.getLength() );
aProperties.realloc( nProperties + 1 );
- aProperties[ nProperties ] = Property(
+ aProperties.getArray()[ nProperties ] = Property(
"Value",
PROPERTY_ID_VALUE,
::cppu::UnoType< Any >::get(),
@@ -214,11 +215,7 @@ namespace dbtools::param
}
catch( SQLException& e )
{
- WrappedTargetException aExceptionWrapper;
- aExceptionWrapper.Context = e.Context;
- aExceptionWrapper.Message = e.Message;
- aExceptionWrapper.TargetException <<= e;
- throw aExceptionWrapper;
+ throw WrappedTargetException(e.Message, e.Context, css::uno::Any(e));
}
}
else
@@ -257,13 +254,11 @@ namespace dbtools::param
}
ParameterWrapperContainer::ParameterWrapperContainer()
- :ParameterWrapperContainer_Base( m_aMutex )
{
}
ParameterWrapperContainer::ParameterWrapperContainer( const Reference< XSingleSelectQueryAnalyzer >& _rxComposer )
- :ParameterWrapperContainer_Base( m_aMutex )
{
Reference< XParametersSupplier > xSuppParams( _rxComposer, UNO_QUERY_THROW );
Reference< XIndexAccess > xParameters( xSuppParams->getParameters(), css::uno::UNO_SET_THROW );
@@ -283,7 +278,7 @@ namespace dbtools::param
Type SAL_CALL ParameterWrapperContainer::getElementType()
{
- ::osl::MutexGuard aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
impl_checkDisposed_throw();
return cppu::UnoType<XPropertySet>::get();
}
@@ -291,7 +286,7 @@ namespace dbtools::param
sal_Bool SAL_CALL ParameterWrapperContainer::hasElements()
{
- ::osl::MutexGuard aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
impl_checkDisposed_throw();
return !m_aParameters.empty();
}
@@ -299,7 +294,7 @@ namespace dbtools::param
sal_Int32 SAL_CALL ParameterWrapperContainer::getCount()
{
- ::osl::MutexGuard aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
impl_checkDisposed_throw();
return m_aParameters.size();
}
@@ -307,19 +302,19 @@ namespace dbtools::param
Any SAL_CALL ParameterWrapperContainer::getByIndex( sal_Int32 _nIndex )
{
- ::osl::MutexGuard aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
impl_checkDisposed_throw();
- if ( ( _nIndex < 0 ) || ( _nIndex >= static_cast<sal_Int32>(m_aParameters.size()) ) )
+ if ( ( _nIndex < 0 ) || ( o3tl::make_unsigned(_nIndex) >= m_aParameters.size() ) )
throw IndexOutOfBoundsException();
- return makeAny( Reference< XPropertySet >( m_aParameters[ _nIndex ] ) );
+ return Any( Reference< XPropertySet >( m_aParameters[ _nIndex ] ) );
}
Reference< XEnumeration > ParameterWrapperContainer::createEnumeration()
{
- ::osl::MutexGuard aGuard( m_aMutex );
+ std::unique_lock aGuard( m_aMutex );
impl_checkDisposed_throw();
return new ::comphelper::OEnumerationByIndex( static_cast< XIndexAccess* >( this ) );
@@ -328,16 +323,13 @@ namespace dbtools::param
void ParameterWrapperContainer::impl_checkDisposed_throw()
{
- if ( rBHelper.bDisposed )
+ if ( m_bDisposed )
throw DisposedException( OUString(), *this );
}
- void SAL_CALL ParameterWrapperContainer::disposing()
+ void ParameterWrapperContainer::disposing(std::unique_lock<std::mutex>& /*rGuard*/)
{
- ::osl::MutexGuard aGuard( m_aMutex );
- impl_checkDisposed_throw();
-
for (const auto& rxParam : m_aParameters)
{
rxParam->dispose();
diff --git a/connectivity/source/commontools/predicateinput.cxx b/connectivity/source/commontools/predicateinput.cxx
index 37a0d6862c62..cbeaf511a943 100644
--- a/connectivity/source/commontools/predicateinput.cxx
+++ b/connectivity/source/commontools/predicateinput.cxx
@@ -30,7 +30,7 @@
#include <connectivity/sqlnode.hxx>
#include <connectivity/PColumn.hxx>
#include <comphelper/numbers.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <memory>
#include <string_view>
@@ -147,17 +147,7 @@ namespace dbtools
)
)
{
- static const char sSingleQuote[] = "'";
-
- sal_Int32 nIndex = -1;
- sal_Int32 nTemp = 0;
- while ( -1 != ( nIndex = sQuoted.indexOf( '\'',nTemp ) ) )
- {
- sQuoted = sQuoted.replaceAt( nIndex, 1, "''" );
- nTemp = nIndex+2;
- }
-
- sQuoted = sSingleQuote + sQuoted + sSingleQuote;
+ sQuoted = u"'" + sQuoted.replaceAll(u"'", u"''") + u"'";
}
pReturn = const_cast< OSQLParser& >( m_aParser ).predicateTree( _rErrorMessage, sQuoted, m_xFormatter, _rxField );
}
diff --git a/connectivity/source/commontools/propertyids.cxx b/connectivity/source/commontools/propertyids.cxx
index 90c6beeede6a..cedd0f5f0614 100644
--- a/connectivity/source/commontools/propertyids.cxx
+++ b/connectivity/source/commontools/propertyids.cxx
@@ -95,6 +95,7 @@ namespace dbtools
const OUString& OPropertyMap::getNameByIndex(sal_Int32 _nIndex) const
{
std::map<sal_Int32, OUString>::const_iterator aIter = m_aPropertyMap.find(_nIndex);
+ assert(aIter != m_aPropertyMap.end());
return aIter->second;
}
}
diff --git a/connectivity/source/commontools/sqlerror.cxx b/connectivity/source/commontools/sqlerror.cxx
index 9f8608384d1d..50c5968cd7d6 100644
--- a/connectivity/source/commontools/sqlerror.cxx
+++ b/connectivity/source/commontools/sqlerror.cxx
@@ -25,7 +25,6 @@
#include <com/sun/star/sdb/ErrorCondition.hpp>
#include <cppuhelper/exc_hlp.hxx>
-#include <rtl/ustrbuf.hxx>
#include <unotools/resmgr.hxx>
#include <osl/diagnose.h>
@@ -50,7 +49,7 @@ namespace connectivity
// versions of the public SQLError methods which are just delegated to this impl-class
static const OUString& getMessagePrefix();
- OUString getErrorMessage( const ErrorCondition _eCondition, const std::optional<OUString>& _rParamValue1, const std::optional<OUString>& _rParamValue2, const std::optional<OUString>& _rParamValue3 );
+ OUString getErrorMessage( const ErrorCondition _eCondition, const std::optional<OUString>& _rParamValue1, const std::optional<OUString>& _rParamValue2, const std::optional<OUString>& _rParamValue3 ) const;
static ErrorCode getErrorCode( const ErrorCondition _eCondition );
void raiseException( const ErrorCondition _eCondition, const Reference< XInterface >& _rxContext, const std::optional<OUString>& _rParamValue1, const std::optional<OUString>& _rParamValue2, const std::optional<OUString>& _rParamValue3 );
void raiseException( const ErrorCondition _eCondition, const std::optional<OUString>& _rParamValue1, const std::optional<OUString>& _rParamValue2, const std::optional<OUString>& _rParamValue3 );
@@ -59,8 +58,7 @@ namespace connectivity
private:
/// returns the basic error message associated with the given error condition, without any parameter replacements
- OUString
- impl_getErrorMessage( ErrorCondition _eCondition );
+ OUString impl_getErrorMessage( ErrorCondition _eCondition ) const;
/// returns the SQLState associated with the given error condition
static OUString
@@ -81,7 +79,7 @@ namespace connectivity
const OUString& SQLError_Impl::getMessagePrefix()
{
- static const OUString s_sMessagePrefix( "[OOoBase]" );
+ static constexpr OUString s_sMessagePrefix( u"[OOoBase]"_ustr );
return s_sMessagePrefix;
}
@@ -103,7 +101,7 @@ namespace connectivity
_rMessage = _rMessage.replaceAt( nIndex, nPlaceholderLen, *rParamValue );
}
- const char* lcl_getResourceErrorID(const ErrorCondition _eCondition)
+ TranslateId lcl_getResourceErrorID(const ErrorCondition _eCondition)
{
switch (_eCondition)
{
@@ -126,7 +124,7 @@ namespace connectivity
case css::sdb::ErrorCondition::DATA_CANNOT_SELECT_UNFILTERED:
return STR_DATA_CANNOT_SELECT_UNFILTERED;
}
- return nullptr;
+ return {};
}
OUString lcl_getResourceState(const ErrorCondition _eCondition)
@@ -142,7 +140,7 @@ namespace connectivity
}
}
- OUString SQLError_Impl::getErrorMessage( const ErrorCondition _eCondition, const std::optional<OUString>& _rParamValue1, const std::optional<OUString>& _rParamValue2, const std::optional<OUString>& _rParamValue3 )
+ OUString SQLError_Impl::getErrorMessage( const ErrorCondition _eCondition, const std::optional<OUString>& _rParamValue1, const std::optional<OUString>& _rParamValue2, const std::optional<OUString>& _rParamValue3 ) const
{
OUString sErrorMessage( impl_getErrorMessage( _eCondition ) );
@@ -220,7 +218,7 @@ namespace connectivity
);
}
- OUString SQLError_Impl::impl_getErrorMessage( ErrorCondition _eCondition )
+ OUString SQLError_Impl::impl_getErrorMessage( ErrorCondition _eCondition ) const
{
OUString sResMessage(Translate::get(lcl_getResourceErrorID(_eCondition), m_aResources));
OSL_ENSURE( !sResMessage.isEmpty(), "SQLError_Impl::impl_getErrorMessage: illegal error condition, or invalid resource!" );
@@ -229,9 +227,10 @@ namespace connectivity
OUString SQLError_Impl::impl_getSQLState( ErrorCondition _eCondition )
{
+ static constexpr OUStringLiteral DEFAULT_STATE = u"S1000";
OUString sState = lcl_getResourceState(_eCondition);
if (sState.isEmpty())
- sState = OUString::intern( RTL_CONSTASCII_USTRINGPARAM( "S1000" ) );
+ sState = DEFAULT_STATE;
return sState;
}
diff --git a/connectivity/source/commontools/statementcomposer.cxx b/connectivity/source/commontools/statementcomposer.cxx
index b0aaaa460f64..8ebbd9ca8608 100644
--- a/connectivity/source/commontools/statementcomposer.cxx
+++ b/connectivity/source/commontools/statementcomposer.cxx
@@ -31,7 +31,7 @@
#include <com/sun/star/sdbc/XConnection.hpp>
#include <unotools/sharedunocomponent.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <comphelper/property.hxx>
@@ -69,9 +69,6 @@ namespace dbtools
explicit StatementComposer_Data( const Reference< XConnection >& _rxConnection )
:xConnection( _rxConnection )
- ,sCommand()
- ,sFilter()
- ,sOrder()
,nCommandType( CommandType::COMMAND )
,bEscapeProcessing( true )
,bComposerDirty( true )
@@ -169,7 +166,7 @@ namespace dbtools
xComposer->setElementaryQuery( sStatement );
// the sort order
- static const OUStringLiteral sPropOrder( u"Order" );
+ static constexpr OUString sPropOrder( u"Order"_ustr );
if ( ::comphelper::hasProperty( sPropOrder, xQuery ) )
{
OUString sOrder;
@@ -179,7 +176,7 @@ namespace dbtools
// the filter
bool bApplyFilter = true;
- static const OUStringLiteral sPropApply( u"ApplyFilter" );
+ static constexpr OUString sPropApply( u"ApplyFilter"_ustr );
if ( ::comphelper::hasProperty( sPropApply, xQuery ) )
{
OSL_VERIFY( xQuery->getPropertyValue( sPropApply ) >>= bApplyFilter );
diff --git a/connectivity/source/commontools/warningscontainer.cxx b/connectivity/source/commontools/warningscontainer.cxx
index 733bf5b4a450..ba7825612519 100644
--- a/connectivity/source/commontools/warningscontainer.cxx
+++ b/connectivity/source/commontools/warningscontainer.cxx
@@ -61,19 +61,19 @@ namespace dbtools
void WarningsContainer::appendWarning(const SQLException& _rWarning)
{
- lcl_concatWarnings( m_aOwnWarnings, makeAny( _rWarning ) );
+ lcl_concatWarnings( m_aOwnWarnings, Any( _rWarning ) );
}
void WarningsContainer::appendWarning( const SQLContext& _rContext )
{
- lcl_concatWarnings( m_aOwnWarnings, makeAny( _rContext ));
+ lcl_concatWarnings( m_aOwnWarnings, Any( _rContext ));
}
void WarningsContainer::appendWarning(const SQLWarning& _rWarning)
{
- lcl_concatWarnings( m_aOwnWarnings, makeAny( _rWarning ) );
+ lcl_concatWarnings( m_aOwnWarnings, Any( _rWarning ) );
}
diff --git a/connectivity/source/cpool/ZConnectionPool.cxx b/connectivity/source/cpool/ZConnectionPool.cxx
index cc90fa464e16..e9c447a0db58 100644
--- a/connectivity/source/cpool/ZConnectionPool.cxx
+++ b/connectivity/source/cpool/ZConnectionPool.cxx
@@ -24,6 +24,7 @@
#include "ZPoolCollection.hxx"
#include <connectivity/ConnectionWrapper.hxx>
#include <com/sun/star/beans/XPropertySet.hpp>
+#include <algorithm>
using namespace ::com::sun::star::uno;
@@ -31,17 +32,15 @@ using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::container;
-using namespace ::osl;
using namespace connectivity;
-#include <algorithm>
void SAL_CALL OPoolTimer::onShot()
{
m_pPool->invalidatePooledConnections();
}
-constexpr OUStringLiteral TIMEOUT_NODENAME = u"Timeout";
+constexpr OUString TIMEOUT_NODENAME = u"Timeout"_ustr;
OConnectionPool::OConnectionPool(const Reference< XDriver >& _xDriver,
const Reference< XInterface >& _xDriverNode,
@@ -129,7 +128,7 @@ struct TConnectionPoolFunctor
void OConnectionPool::clear(bool _bDispose)
{
- MutexGuard aGuard(m_aMutex);
+ std::unique_lock aGuard(m_aMutex);
if(m_xInvalidator->isTicking())
m_xInvalidator->stop();
@@ -153,7 +152,7 @@ void OConnectionPool::clear(bool _bDispose)
Reference< XConnection > OConnectionPool::getConnectionWithInfo( const OUString& _rURL, const Sequence< PropertyValue >& _rInfo )
{
- MutexGuard aGuard(m_aMutex);
+ std::unique_lock aGuard(m_aMutex);
Reference<XConnection> xConnection;
@@ -177,7 +176,7 @@ void SAL_CALL OConnectionPool::disposing( const css::lang::EventObject& Source )
Reference<XConnection> xConnection(Source.Source,UNO_QUERY);
if(xConnection.is())
{
- MutexGuard aGuard(m_aMutex);
+ std::unique_lock aGuard(m_aMutex);
TActiveConnectionMap::iterator aIter = m_aActiveConnections.find(xConnection);
OSL_ENSURE(aIter != m_aActiveConnections.end(),"OConnectionPool::disposing: Connection wasn't in pool");
if(aIter != m_aActiveConnections.end())
@@ -228,7 +227,7 @@ Reference< XConnection> OConnectionPool::createNewConnection(const OUString& _rU
void OConnectionPool::invalidatePooledConnections()
{
- MutexGuard aGuard(m_aMutex);
+ std::unique_lock aGuard(m_aMutex);
TConnectionMap::iterator aIter = m_aPool.begin();
for (; aIter != m_aPool.end(); )
{
@@ -282,7 +281,7 @@ void SAL_CALL OConnectionPool::propertyChange( const PropertyChangeEvent& evt )
{
if(TIMEOUT_NODENAME == evt.PropertyName)
{
- evt.NewValue >>= m_nALiveCount;
+ OPoolCollection::getNodeValue(TIMEOUT_NODENAME, m_xDriverNode) >>= m_nALiveCount;
calculateTimeOuts();
}
}
diff --git a/connectivity/source/cpool/ZConnectionPool.hxx b/connectivity/source/cpool/ZConnectionPool.hxx
index e83d22849c0e..c5938f133f3c 100644
--- a/connectivity/source/cpool/ZConnectionPool.hxx
+++ b/connectivity/source/cpool/ZConnectionPool.hxx
@@ -20,6 +20,7 @@
#include <sal/config.h>
#include <map>
+#include <mutex>
#include <vector>
#include <com/sun/star/sdbc/XPooledConnection.hpp>
@@ -105,8 +106,8 @@ namespace connectivity
TConnectionMap m_aPool; // the pooled connections
TActiveConnectionMap m_aActiveConnections; // the currently active connections
- ::osl::Mutex m_aMutex;
- ::rtl::Reference<OPoolTimer> m_xInvalidator; // invalidates the conntection pool when shot
+ std::mutex m_aMutex;
+ ::rtl::Reference<OPoolTimer> m_xInvalidator; // invalidates the connection pool when shot
css::uno::Reference< css::sdbc::XDriver > m_xDriver; // the one and only driver for this connectionpool
css::uno::Reference< css::uno::XInterface > m_xDriverNode; // config node entry
diff --git a/connectivity/source/cpool/ZConnectionWrapper.cxx b/connectivity/source/cpool/ZConnectionWrapper.cxx
index dd4519859f21..8b1db6f2cd2f 100644
--- a/connectivity/source/cpool/ZConnectionWrapper.cxx
+++ b/connectivity/source/cpool/ZConnectionWrapper.cxx
@@ -23,7 +23,6 @@ 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;
OConnectionWeakWrapper::OConnectionWeakWrapper(Reference< XAggregation >& _xConnection)
diff --git a/connectivity/source/cpool/ZDriverWrapper.cxx b/connectivity/source/cpool/ZDriverWrapper.cxx
index 811f103bc9a6..9a1bdf971f97 100644
--- a/connectivity/source/cpool/ZDriverWrapper.cxx
+++ b/connectivity/source/cpool/ZDriverWrapper.cxx
@@ -48,7 +48,7 @@ namespace connectivity
OSL_ENSURE(m_xDriver.is(), "ODriverWrapper::ODriverWrapper: invalid aggregate (no XDriver)!");
// set ourself as delegator
- m_xDriverAggregate->setDelegator( static_cast< XWeak* >( this ) );
+ m_xDriverAggregate->setDelegator( getXWeak() );
}
osl_atomic_decrement( &m_refCount );
}
diff --git a/connectivity/source/cpool/ZPoolCollection.cxx b/connectivity/source/cpool/ZPoolCollection.cxx
index 30b7f1e366ea..6044175480b8 100644
--- a/connectivity/source/cpool/ZPoolCollection.cxx
+++ b/connectivity/source/cpool/ZPoolCollection.cxx
@@ -31,7 +31,7 @@
#include <com/sun/star/beans/XPropertySet.hpp>
#include <osl/diagnose.h>
#include <sal/log.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::lang;
@@ -43,30 +43,11 @@ using namespace ::osl;
using namespace connectivity;
-static OUString getConnectionPoolNodeName()
-{
- return "org.openoffice.Office.DataAccess/ConnectionPool";
-}
-
-static OUString getEnablePoolingNodeName()
-{
- return "EnablePooling";
-}
-
-static OUString getDriverNameNodeName()
-{
- return "DriverName";
-}
-
-static OUString getDriverSettingsNodeName()
-{
- return "DriverSettings";
-}
-
-static OUString getEnableNodeName()
-{
- return "Enable";
-}
+constexpr OUString CONNECTIONPOOL_NODENAME = u"org.openoffice.Office.DataAccess/ConnectionPool"_ustr;
+constexpr OUString ENABLE_POOLING = u"EnablePooling"_ustr;
+constexpr OUString DRIVER_NAME = u"DriverName"_ustr;
+constexpr OUString DRIVER_SETTINGS = u"DriverSettings"_ustr;
+constexpr OUString ENABLE = u"Enable"_ustr;
OPoolCollection::OPoolCollection(const Reference< XComponentContext >& _rxContext)
@@ -76,10 +57,9 @@ OPoolCollection::OPoolCollection(const Reference< XComponentContext >& _rxContex
m_xManager = DriverManager::create( m_xContext );
m_xProxyFactory = ProxyFactory::create( m_xContext );
-
Reference<XPropertySet> xProp(getConfigPoolRoot(),UNO_QUERY);
if ( xProp.is() )
- xProp->addPropertyChangeListener(getEnablePoolingNodeName(),this);
+ xProp->addPropertyChangeListener(ENABLE_POOLING,this);
// attach as desktop listener to know when we have to release our pools
osl_atomic_increment( &m_refCount );
{
@@ -194,21 +174,18 @@ bool OPoolCollection::isDriverPoolingEnabled(std::u16string_view _sDriverImplNam
bool bEnabled = false;
Reference<XInterface> xConnectionPoolRoot = getConfigPoolRoot();
// then look for which of them settings are stored in the configuration
- Reference< XNameAccess > xDirectAccess(openNode(getDriverSettingsNodeName(),xConnectionPoolRoot),UNO_QUERY);
+ Reference< XNameAccess > xDirectAccess(openNode(DRIVER_SETTINGS,xConnectionPoolRoot),UNO_QUERY);
if(xDirectAccess.is())
{
- Sequence< OUString > aDriverKeys = xDirectAccess->getElementNames();
- const OUString* pDriverKeys = aDriverKeys.getConstArray();
- const OUString* pDriverKeysEnd = pDriverKeys + aDriverKeys.getLength();
- for (;pDriverKeys != pDriverKeysEnd; ++pDriverKeys)
+ for (auto& driverKey : xDirectAccess->getElementNames())
{
// the name of the driver in this round
- if(_sDriverImplName == *pDriverKeys)
+ if (_sDriverImplName == driverKey)
{
- _rxDriverNode = openNode(*pDriverKeys,xDirectAccess);
+ _rxDriverNode = openNode(driverKey, xDirectAccess);
if(_rxDriverNode.is())
- getNodeValue(getEnableNodeName(),_rxDriverNode) >>= bEnabled;
+ getNodeValue(ENABLE,_rxDriverNode) >>= bEnabled;
break;
}
}
@@ -224,7 +201,7 @@ bool OPoolCollection::isPoolingEnabled()
// the global "enabled" flag
bool bEnabled = false;
if(xConnectionPoolRoot.is())
- getNodeValue(getEnablePoolingNodeName(),xConnectionPoolRoot) >>= bEnabled;
+ getNodeValue(ENABLE_POOLING,xConnectionPoolRoot) >>= bEnabled;
return bEnabled;
}
@@ -233,7 +210,7 @@ Reference<XInterface> const & OPoolCollection::getConfigPoolRoot()
if(!m_xConfigNode.is())
m_xConfigNode = createWithProvider(
css::configuration::theDefaultProvider::get(m_xContext),
- getConnectionPoolNodeName());
+ CONNECTIONPOOL_NODENAME);
return m_xConfigNode;
}
@@ -280,7 +257,7 @@ OConnectionPool* OPoolCollection::getConnectionPool(const OUString& _sImplName,
{
Reference<XPropertySet> xProp(_xDriverNode,UNO_QUERY);
if(xProp.is())
- xProp->addPropertyChangeListener(getEnableNodeName(),this);
+ xProp->addPropertyChangeListener(ENABLE,this);
rtl::Reference<OConnectionPool> pConnectionPool = new OConnectionPool(_xDriver,_xDriverNode,m_xProxyFactory);
m_aPools.emplace(_sImplName,pConnectionPool);
pRet = pConnectionPool.get();
@@ -295,8 +272,7 @@ Reference< XInterface > OPoolCollection::createWithProvider(const Reference< XMu
const OUString& _rPath)
{
OSL_ASSERT(_rxConfProvider.is());
- Sequence< Any > args(1);
- args[0] <<= NamedValue( "nodepath", makeAny(_rPath));
+ Sequence< Any > args{ Any(NamedValue( "nodepath", Any(_rPath))) };
Reference< XInterface > xInterface(
_rxConfProvider->createInstanceWithArguments(
"com.sun.star.configuration.ConfigurationAccess",
@@ -372,9 +348,9 @@ void SAL_CALL OPoolCollection::queryTermination( const EventObject& /*Event*/ )
{
}
-void SAL_CALL OPoolCollection::notifyTermination( const EventObject& /*Event*/ )
+void SAL_CALL OPoolCollection::notifyTermination( const EventObject& Event )
{
- clearDesktop();
+ disposing(Event);
}
void SAL_CALL OPoolCollection::disposing( const EventObject& Source )
@@ -392,17 +368,21 @@ void SAL_CALL OPoolCollection::disposing( const EventObject& Source )
if(Source.Source == m_xConfigNode)
{
if ( xProp.is() )
- xProp->removePropertyChangeListener(getEnablePoolingNodeName(),this);
+ xProp->removePropertyChangeListener(ENABLE_POOLING,this);
m_xConfigNode.clear();
}
else if ( xProp.is() )
- xProp->removePropertyChangeListener(getEnableNodeName(),this);
+ xProp->removePropertyChangeListener(ENABLE,this);
}
catch(const Exception&)
{
TOOLS_WARN_EXCEPTION("connectivity.cpool", "");
}
}
+ m_xConfigNode.clear();
+ m_xProxyFactory.clear();
+ m_xManager.clear();
+ m_xContext.clear();
}
void SAL_CALL OPoolCollection::propertyChange( const css::beans::PropertyChangeEvent& evt )
@@ -426,7 +406,7 @@ void SAL_CALL OPoolCollection::propertyChange( const css::beans::PropertyChangeE
if(!bEnabled)
{
OUString sThisDriverName;
- getNodeValue(getDriverNameNodeName(),evt.Source) >>= sThisDriverName;
+ getNodeValue(DRIVER_NAME,evt.Source) >>= sThisDriverName;
// 1st release the driver
// look if we already have a proxy for this driver
MapDriver2DriverRef::iterator aLookup = m_aDriverProxies.begin();
diff --git a/connectivity/source/drivers/ado/ACallableStatement.cxx b/connectivity/source/drivers/ado/ACallableStatement.cxx
index 5bed29141871..94ad744d0134 100644
--- a/connectivity/source/drivers/ado/ACallableStatement.cxx
+++ b/connectivity/source/drivers/ado/ACallableStatement.cxx
@@ -30,12 +30,6 @@ using namespace com::sun::star::container;
IMPLEMENT_SERVICE_INFO(OCallableStatement,"com.sun.star.sdbcx.ACallableStatement","com.sun.star.sdbc.CallableStatement");
-#define GET_PARAM() \
- ADOParameter* pParam = nullptr; \
- m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam); \
- if(pParam) \
- pParam->get_Value(&m_aValue);
-
//************ Class: java.sql.CallableStatement
OCallableStatement::OCallableStatement( OConnection* _pConnection, const OUString& sql )
@@ -60,52 +54,76 @@ sal_Bool SAL_CALL OCallableStatement::wasNull( )
sal_Bool SAL_CALL OCallableStatement::getBoolean( sal_Int32 columnIndex )
{
- GET_PARAM()
+ ADOParameter* pParam = nullptr;
+ m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam);
+ if(pParam)
+ pParam->get_Value(&m_aValue);
return m_aValue.getBool();
}
sal_Int8 SAL_CALL OCallableStatement::getByte( sal_Int32 columnIndex )
{
- GET_PARAM()
+ ADOParameter* pParam = nullptr;
+ m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam);
+ if(pParam)
+ pParam->get_Value(&m_aValue);
return m_aValue.getInt8();
}
Sequence< sal_Int8 > SAL_CALL OCallableStatement::getBytes( sal_Int32 columnIndex )
{
- GET_PARAM()
+ ADOParameter* pParam = nullptr;
+ m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam);
+ if(pParam)
+ pParam->get_Value(&m_aValue);
return m_aValue.getByteSequence();
}
css::util::Date SAL_CALL OCallableStatement::getDate( sal_Int32 columnIndex )
{
- GET_PARAM()
+ ADOParameter* pParam = nullptr;
+ m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam);
+ if(pParam)
+ pParam->get_Value(&m_aValue);
return m_aValue.getDate();
}
double SAL_CALL OCallableStatement::getDouble( sal_Int32 columnIndex )
{
- GET_PARAM()
+ ADOParameter* pParam = nullptr;
+ m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam);
+ if(pParam)
+ pParam->get_Value(&m_aValue);
return m_aValue.getDouble();
}
float SAL_CALL OCallableStatement::getFloat( sal_Int32 columnIndex )
{
- GET_PARAM()
+ ADOParameter* pParam = nullptr;
+ m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam);
+ if(pParam)
+ pParam->get_Value(&m_aValue);
return m_aValue.getFloat();
}
sal_Int32 SAL_CALL OCallableStatement::getInt( sal_Int32 columnIndex )
{
- GET_PARAM()
+ ADOParameter* pParam = nullptr;
+ m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam);
+ if(pParam)
+ pParam->get_Value(&m_aValue);
return m_aValue.getInt32();
}
sal_Int64 SAL_CALL OCallableStatement::getLong( sal_Int32 columnIndex )
{
- GET_PARAM()
+ ADOParameter* pParam = nullptr;
+ m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam);
+ if(pParam)
+ pParam->get_Value(&m_aValue);
return static_cast<sal_Int64>(m_aValue.getCurrency().int64);
}
@@ -119,28 +137,40 @@ Any SAL_CALL OCallableStatement::getObject( sal_Int32 /*columnIndex*/, const Ref
sal_Int16 SAL_CALL OCallableStatement::getShort( sal_Int32 columnIndex )
{
- GET_PARAM()
+ ADOParameter* pParam = nullptr;
+ m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam);
+ if(pParam)
+ pParam->get_Value(&m_aValue);
return m_aValue.getInt16();
}
OUString SAL_CALL OCallableStatement::getString( sal_Int32 columnIndex )
{
- GET_PARAM()
+ ADOParameter* pParam = nullptr;
+ m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam);
+ if(pParam)
+ pParam->get_Value(&m_aValue);
return m_aValue.getString();
}
css::util::Time SAL_CALL OCallableStatement::getTime( sal_Int32 columnIndex )
{
- GET_PARAM()
+ ADOParameter* pParam = nullptr;
+ m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam);
+ if(pParam)
+ pParam->get_Value(&m_aValue);
return m_aValue.getTime();
}
css::util::DateTime SAL_CALL OCallableStatement::getTimestamp( sal_Int32 columnIndex )
{
- GET_PARAM()
+ ADOParameter* pParam = nullptr;
+ m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam);
+ if(pParam)
+ pParam->get_Value(&m_aValue);
return m_aValue.getDateTime();
}
diff --git a/connectivity/source/drivers/ado/AColumn.cxx b/connectivity/source/drivers/ado/AColumn.cxx
index c73e2cb245af..8e4dd370a023 100644
--- a/connectivity/source/drivers/ado/AColumn.cxx
+++ b/connectivity/source/drivers/ado/AColumn.cxx
@@ -24,7 +24,6 @@
#include <ado/AColumn.hxx>
#include <ado/AConnection.hxx>
#include <ado/Awrapado.hxx>
-#include <cppuhelper/typeprovider.hxx>
#include <com/sun/star/sdbc/ColumnValue.hpp>
#include <comphelper/extract.hxx>
#include <comphelper/servicehelper.hxx>
@@ -41,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)
@@ -62,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();
}
@@ -79,22 +66,6 @@ OAdoColumn::OAdoColumn(bool _bCase,OConnection* _pConnection)
}
-Sequence< sal_Int8 > OAdoColumn::getUnoTunnelId()
-{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OAdoColumn::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return isUnoTunnelId<OAdoColumn>(rId)
- ? reinterpret_cast< sal_Int64 >( this )
- : OColumn_ADO::getSomething(rId);
-}
-
void OAdoColumn::construct()
{
sal_Int32 nAttrib = isNew() ? 0 : PropertyAttribute::READONLY;
@@ -170,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 010807610868..f56a6d8d007a 100644
--- a/connectivity/source/drivers/ado/AColumns.cxx
+++ b/connectivity/source/drivers/ado/AColumns.cxx
@@ -62,7 +62,7 @@ Reference< XPropertySet > OColumns::createDescriptor()
// XAppend
sdbcx::ObjectType OColumns::appendObject( const OUString&, const Reference< XPropertySet >& descriptor )
{
- rtl::Reference<OAdoColumn> pColumn = getUnoTunnelImplementation<OAdoColumn>( descriptor );
+ rtl::Reference<OAdoColumn> pColumn = dynamic_cast<OAdoColumn*>( descriptor.get() );
Reference< XPropertySet > xColumn;
if ( !pColumn.is() )
{
@@ -74,15 +74,6 @@ sdbcx::ObjectType OColumns::appendObject( const OUString&, const Reference< XPro
WpADOColumn aColumn = pColumn->getColumnImpl();
-#if OSL_DEBUG_LEVEL > 0
- sal_Int32 nPrecision;
- sal_Int32 nScale;
- sal_Int32 nType;
- nPrecision = aColumn.get_Precision();
- nScale = aColumn.get_NumericScale();
- nType = ADOS::MapADOType2Jdbc(aColumn.get_Type());
-#endif
-
OUString sTypeName;
pColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME)) >>= sTypeName;
@@ -118,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());
}
@@ -127,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 664990f66564..600604e5eafb 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>
@@ -33,9 +34,10 @@
#include <com/sun/star/sdbc/XRow.hpp>
#include <com/sun/star/lang/DisposedException.hpp>
#include <comphelper/servicehelper.hxx>
-#include <cppuhelper/typeprovider.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;
@@ -52,7 +54,6 @@ 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),
@@ -60,36 +61,19 @@ OConnection::OConnection(ODriver* _pDriver)
{
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 );
@@ -99,47 +83,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();
}
@@ -197,13 +179,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();
}
@@ -219,9 +201,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( )
@@ -239,7 +221,7 @@ void SAL_CALL OConnection::commit( )
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
- m_pAdoConnection->CommitTrans();
+ m_aAdoConnection.CommitTrans();
}
void SAL_CALL OConnection::rollback( )
@@ -248,14 +230,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( )
@@ -280,8 +262,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( )
@@ -290,7 +272,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 )
@@ -298,8 +280,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( )
@@ -307,7 +289,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 )
@@ -338,8 +320,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( )
@@ -349,7 +331,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;
@@ -369,7 +351,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;
}
@@ -412,7 +394,7 @@ void OConnection::buildTypeInfo()
{
::osl::MutexGuard aGuard( m_aMutex );
- ADORecordset *pRecordset = m_pAdoConnection->getTypeInfo();
+ ADORecordset *pRecordset = m_aAdoConnection.getTypeInfo();
if ( pRecordset )
{
pRecordset->AddRef();
@@ -477,31 +459,26 @@ void OConnection::disposing()
m_xCatalog = css::uno::WeakReference< css::sdbcx::XTablesSupplier>();
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 )
{
- return isUnoTunnelId<OConnection>(rId)
- ?
- reinterpret_cast< sal_Int64 >( this )
- :
- OConnection_BASE::getSomething(rId);
+ return comphelper::getSomethingImpl(rId, this,
+ comphelper::FallbackToGetSomethingOf<OConnection_BASE>{});
}
Sequence< sal_Int8 > OConnection::getUnoTunnelId()
{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
+ static const comphelper::UnoIdInit implId;
+ return implId.getSeq();
}
const OExtendedTypeInfo* OConnection::getTypeInfoFromType(const OTypeInfoMap& _rTypeInfo,
diff --git a/connectivity/source/drivers/ado/ADatabaseMetaData.cxx b/connectivity/source/drivers/ado/ADatabaseMetaData.cxx
index a60afbd6f131..65e0a80f52a8 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();
@@ -347,7 +347,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges(
aRows.push_back(aRow);
aRow[6] = ::connectivity::ODatabaseMetaDataResultSet::getDropValue();
aRows.push_back(aRow);
- pResult->setRows(aRows);
+ pResult->setRows(std::move(aRows));
}
return xRef;
@@ -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( )
diff --git a/connectivity/source/drivers/ado/ADatabaseMetaDataImpl.cxx b/connectivity/source/drivers/ado/ADatabaseMetaDataImpl.cxx
index 8972a4f2dee1..b7872070603f 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,17 @@ 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;
+ sal::systools::BStr sStr1(_rName);
+ pInterface->GetObjectOwner(sStr1, _eNum, _rVar, &aBSTR);
+ return OUString(aBSTR);
}
void OAdoTable::fillPropertyValues()
@@ -571,19 +536,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..bb5bda634cfc 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,7 @@ void ODatabaseMetaDataResultSet::disposing()
::osl::MutexGuard aGuard(m_aMutex);
if(m_pRecordSet)
m_pRecordSet->Close();
- m_aStatement = nullptr;
+ m_aStatement.clear();
m_xMetaData.clear();
}
@@ -691,21 +690,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 e2d8cc2aa730..6568f7a1ee84 100644
--- a/connectivity/source/drivers/ado/ADriver.cxx
+++ b/connectivity/source/drivers/ado/ADriver.cxx
@@ -24,6 +24,7 @@
#include <ado/Awrapado.hxx>
#include <ado/adoimp.hxx>
#include <com/sun/star/lang/DisposedException.hpp>
+#include <comphelper/servicehelper.hxx>
#include <connectivity/dbexception.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <o3tl/safeCoInitUninit.hxx>
@@ -170,10 +171,8 @@ Reference< XTablesSupplier > SAL_CALL ODriver::getDataDefinitionByConnection( co
OConnection* pConnection = nullptr;
Reference< css::lang::XUnoTunnel> xTunnel(connection,UNO_QUERY);
- if(xTunnel.is())
+ if (auto pSearchConnection = comphelper::getFromUnoTunnel<OConnection>(xTunnel))
{
- OConnection* pSearchConnection = reinterpret_cast< OConnection* >( xTunnel->getSomething(OConnection::getUnoTunnelId()) );
-
auto foundConnection = std::any_of(m_xConnections.begin(), m_xConnections.end(),
[&pSearchConnection](const css::uno::WeakReferenceHelper& rxConnection) {
return static_cast<OConnection*>(Reference< XConnection >::query(rxConnection.get()).get()) == pSearchConnection; });
@@ -188,7 +187,7 @@ 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);
@@ -207,13 +206,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);
@@ -223,28 +220,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 b41fbdbba05d..02cd239d7682 100644
--- a/connectivity/source/drivers/ado/AGroup.cxx
+++ b/connectivity/source/drivers/ado/AGroup.cxx
@@ -21,7 +21,6 @@
#include <ado/AGroup.hxx>
#include <ado/AUsers.hxx>
#include <comphelper/servicehelper.hxx>
-#include <cppuhelper/typeprovider.hxx>
#include <com/sun/star/sdbc/XRow.hpp>
#include <com/sun/star/sdbc/XResultSet.hpp>
#include <ado/AConnection.hxx>
@@ -37,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();
@@ -82,23 +69,6 @@ void OAdoGroup::refreshUsers()
m_pUsers.reset(new OUsers(m_pCatalog, m_aMutex, aVector, aUsers, isCaseSensitive()));
}
-Sequence< sal_Int8 > OAdoGroup::getUnoTunnelId()
-{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OAdoGroup::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return isUnoTunnelId<OAdoGroup>(rId)
- ? reinterpret_cast< sal_Int64 >( this )
- : OGroup_ADO::getSomething(rId);
-}
-
-
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 211f34f6bebe..6f7c8b2da8d0 100644
--- a/connectivity/source/drivers/ado/AGroups.cxx
+++ b/connectivity/source/drivers/ado/AGroups.cxx
@@ -58,7 +58,7 @@ Reference< XPropertySet > OGroups::createDescriptor()
// XAppend
sdbcx::ObjectType OGroups::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
{
- OAdoGroup* pGroup = getUnoTunnelImplementation<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 61a047bc9b00..b183d49c2435 100644
--- a/connectivity/source/drivers/ado/AIndex.cxx
+++ b/connectivity/source/drivers/ado/AIndex.cxx
@@ -20,7 +20,6 @@
#include <ado/AIndex.hxx>
#include <com/sun/star/sdbc/XRow.hpp>
#include <com/sun/star/sdbc/XResultSet.hpp>
-#include <cppuhelper/typeprovider.hxx>
#include <ado/AColumns.hxx>
#include <TConnection.hxx>
#include <comphelper/servicehelper.hxx>
@@ -40,7 +39,7 @@ OAdoIndex::OAdoIndex(bool _bCase,OConnection* _pConnection,ADOIndex* _pIndex)
,m_pConnection(_pConnection)
{
construct();
- m_aIndex = WpADOIndex(_pIndex);
+ m_aIndex.set(_pIndex);
fillPropertyValues();
}
@@ -71,22 +70,6 @@ void OAdoIndex::refreshColumns()
}
-Sequence< sal_Int8 > OAdoIndex::getUnoTunnelId()
-{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OAdoIndex::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return isUnoTunnelId<OAdoIndex>(rId)
- ? reinterpret_cast< sal_Int64 >( this )
- : sdbcx::OIndex::getSomething(rId);
-}
-
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 616cd863ada4..1e427a2f0782 100644
--- a/connectivity/source/drivers/ado/AIndexes.cxx
+++ b/connectivity/source/drivers/ado/AIndexes.cxx
@@ -58,14 +58,14 @@ Reference< XPropertySet > OIndexes::createDescriptor()
// XAppend
sdbcx::ObjectType OIndexes::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
{
- OAdoIndex* pIndex = getUnoTunnelImplementation<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 764765b35620..9c2734ede8f1 100644
--- a/connectivity/source/drivers/ado/AKey.cxx
+++ b/connectivity/source/drivers/ado/AKey.cxx
@@ -21,7 +21,6 @@
#include <com/sun/star/sdbc/XRow.hpp>
#include <com/sun/star/sdbc/XResultSet.hpp>
#include <comphelper/servicehelper.hxx>
-#include <cppuhelper/typeprovider.hxx>
#include <ado/AColumns.hxx>
#include <ado/AConnection.hxx>
@@ -38,7 +37,7 @@ OAdoKey::OAdoKey(bool _bCase,OConnection* _pConnection, ADOKey* _pKey)
,m_pConnection(_pConnection)
{
construct();
- m_aKey = WpADOKey(_pKey);
+ m_aKey.set(_pKey);
fillPropertyValues();
}
@@ -67,22 +66,6 @@ void OAdoKey::refreshColumns()
m_pColumns.reset(new OColumns(*this, m_aMutex, aVector, aColumns, isCaseSensitive(), m_pConnection));
}
-Sequence< sal_Int8 > OAdoKey::getUnoTunnelId()
-{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OAdoKey::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return isUnoTunnelId<OAdoKey>(rId)
- ? reinterpret_cast< sal_Int64 >( this )
- : OKey_ADO::getSomething(rId);
-}
-
void OAdoKey::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue)
{
if(m_aKey.IsValid())
@@ -94,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:
@@ -102,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:
@@ -110,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:
@@ -118,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:
@@ -126,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 0d921c39842b..32d02bc743e7 100644
--- a/connectivity/source/drivers/ado/AKeys.cxx
+++ b/connectivity/source/drivers/ado/AKeys.cxx
@@ -58,7 +58,7 @@ Reference< XPropertySet > OKeys::createDescriptor()
// XAppend
sdbcx::ObjectType OKeys::appendObject( const OUString&, const Reference< XPropertySet >& descriptor )
{
- OAdoKey* pKey = getUnoTunnelImplementation<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 bffecc94afc8..9e17d71b0bed 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
@@ -145,21 +145,18 @@ sal_Bool SAL_CALL OPreparedStatement::execute( )
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- SQLWarning warning;
clearWarnings ();
// Call SQLExecute
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& ex)
+ catch (SQLWarning&)
{
- // Save pointer to warning and save with ResultSet
+ //TODO: Save pointer to warning and save with ResultSet
// object once it is created.
-
- warning = ex;
}
return m_RecordSet.IsValid();
}
@@ -174,11 +171,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();
}
@@ -202,10 +199,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 )
@@ -223,7 +219,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 )
@@ -415,10 +411,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));
}
@@ -447,7 +442,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..7e633130d95e 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;
@@ -596,7 +596,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 +818,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 +882,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 +892,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 +927,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 +1031,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 57f9c347ecea..c2a09385dee6 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();
@@ -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() )
@@ -240,7 +239,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 );
@@ -441,8 +440,6 @@ sal_Bool SAL_CALL OStatement_Base::getMoreResults( )
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- SQLWarning warning;
-
// clear previous warnings
clearWarnings ();
@@ -456,13 +453,11 @@ sal_Bool SAL_CALL OStatement_Base::getMoreResults( )
if(m_RecordSet.IsValid() && m_RecordSet.NextRecordset(aRecordsAffected,&pSet) && pSet)
assignRecordSet( pSet );
}
- catch (SQLWarning &ex)
+ catch (SQLWarning &)
{
- // Save pointer to warning and save with ResultSet
+ //TODO: Save pointer to warning and save with ResultSet
// object once it is created.
-
- warning = ex;
}
return m_RecordSet.IsValid();
}
@@ -474,7 +469,7 @@ Any SAL_CALL OStatement_Base::getWarnings( )
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- return makeAny(m_aLastWarning);
+ return Any(m_aLastWarning);
}
@@ -645,31 +640,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 92f28ce56a06..47e22e125398 100644
--- a/connectivity/source/drivers/ado/ATable.cxx
+++ b/connectivity/source/drivers/ado/ATable.cxx
@@ -31,7 +31,6 @@
#include <com/sun/star/sdbc/XResultSet.hpp>
#include <com/sun/star/sdbcx/KeyType.hpp>
#include <com/sun/star/sdbc/KeyRule.hpp>
-#include <cppuhelper/typeprovider.hxx>
#include <com/sun/star/lang/DisposedException.hpp>
#include <com/sun/star/sdbc/ColumnValue.hpp>
#include <ado/Awrapado.hxx>
@@ -55,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();
@@ -91,7 +90,7 @@ void OAdoTable::refreshColumns()
if(m_xColumns)
m_xColumns->reFill(aVector);
else
- m_xColumns = new OColumns(*this,m_aMutex,aVector,aColumns,isCaseSensitive(),m_pCatalog->getConnection());
+ m_xColumns.reset(new OColumns(*this,m_aMutex,aVector,aColumns,isCaseSensitive(),m_pCatalog->getConnection()));
}
void OAdoTable::refreshKeys()
@@ -108,7 +107,7 @@ void OAdoTable::refreshKeys()
if(m_xKeys)
m_xKeys->reFill(aVector);
else
- m_xKeys = new OKeys(*this,m_aMutex,aVector,aKeys,isCaseSensitive(),m_pCatalog->getConnection());
+ m_xKeys.reset(new OKeys(*this,m_aMutex,aVector,aKeys,isCaseSensitive(),m_pCatalog->getConnection()));
}
void OAdoTable::refreshIndexes()
@@ -125,23 +124,7 @@ void OAdoTable::refreshIndexes()
if(m_xIndexes)
m_xIndexes->reFill(aVector);
else
- m_xIndexes = new OIndexes(*this,m_aMutex,aVector,aIndexes,isCaseSensitive(),m_pCatalog->getConnection());
-}
-
-Sequence< sal_Int8 > OAdoTable::getUnoTunnelId()
-{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OAdoTable::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return isUnoTunnelId<OAdoTable>(rId)
- ? reinterpret_cast< sal_Int64 >( this )
- : OTable_TYPEDEF::getSomething(rId);
+ m_xIndexes.reset(new OIndexes(*this,m_aMutex,aVector,aIndexes,isCaseSensitive(),m_pCatalog->getConnection()));
}
// XRename
@@ -151,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);
}
@@ -168,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::getUnoTunnelImplementation<OAdoColumn>(descriptor);
+ OAdoColumn* pColumn = dynamic_cast<OAdoColumn*>(descriptor.get());
if(pColumn != nullptr)
{
WpADOColumns aColumns = m_aTable.get_Columns();
@@ -176,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 9ce87634e425..07910462fb17 100644
--- a/connectivity/source/drivers/ado/ATables.cxx
+++ b/connectivity/source/drivers/ado/ATables.cxx
@@ -65,13 +65,13 @@ Reference< XPropertySet > OTables::createDescriptor()
// XAppend
sdbcx::ObjectType OTables::appendObject( const OUString&, const Reference< XPropertySet >& descriptor )
{
- OAdoTable* pTable = getUnoTunnelImplementation<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,10 +93,10 @@ void OTables::appendNew(const OUString& _rsNewTable)
insertElement(_rsNewTable,nullptr);
// notify our container listeners
- ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_rsNewTable), Any(), Any());
- OInterfaceIteratorHelper2 aListenerLoop(m_aContainerListeners);
+ ContainerEvent aEvent(static_cast<XContainer*>(this), Any(_rsNewTable), Any(), Any());
+ OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners);
while (aListenerLoop.hasMoreElements())
- static_cast<XContainerListener*>(aListenerLoop.next())->elementInserted(aEvent);
+ aListenerLoop.next()->elementInserted(aEvent);
}
diff --git a/connectivity/source/drivers/ado/AUser.cxx b/connectivity/source/drivers/ado/AUser.cxx
index 724334cea696..eb7a5803f60c 100644
--- a/connectivity/source/drivers/ado/AUser.cxx
+++ b/connectivity/source/drivers/ado/AUser.cxx
@@ -21,7 +21,6 @@
#include <ado/ACatalog.hxx>
#include <ado/AGroups.hxx>
#include <comphelper/servicehelper.hxx>
-#include <cppuhelper/typeprovider.hxx>
#include <com/sun/star/sdbc/XRow.hpp>
#include <com/sun/star/sdbc/XResultSet.hpp>
#include <ado/AConnection.hxx>
@@ -41,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();
}
@@ -66,23 +65,6 @@ void OAdoUser::refreshGroups()
m_pGroups.reset(new OGroups(m_pCatalog, m_aMutex, aVector, aGroups, isCaseSensitive()));
}
-Sequence< sal_Int8 > OAdoUser::getUnoTunnelId()
-{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OAdoUser::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return isUnoTunnelId<OAdoUser>(rId)
- ? reinterpret_cast< sal_Int64 >( this )
- : OUser_TYPEDEF::getSomething(rId);
-}
-
-
void OAdoUser::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue)
{
if(m_aUser.IsValid())
@@ -160,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;
}
@@ -169,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 )
@@ -177,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
@@ -186,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 2620e915a89e..4b050d239237 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;
@@ -56,12 +57,12 @@ Reference< XPropertySet > OUsers::createDescriptor()
// XAppend
sdbcx::ObjectType OUsers::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
{
- OUserExtend* pUser = getUnoTunnelImplementation<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 b53c1a026200..10a5524db95b 100644
--- a/connectivity/source/drivers/ado/AView.cxx
+++ b/connectivity/source/drivers/ado/AView.cxx
@@ -20,10 +20,11 @@
#include <ado/AView.hxx>
#include <com/sun/star/lang/DisposedException.hpp>
#include <ado/adoimp.hxx>
-#include <cppuhelper/typeprovider.hxx>
#include <ado/Awrapado.hxx>
#include <comphelper/servicehelper.hxx>
#include <comphelper/types.hxx>
+#include <systools/win32/oleauto.hxx>
+
#include <TConnection.hxx>
@@ -41,23 +42,6 @@ OAdoView::OAdoView(bool _bCase,ADOView* _pView) : OView_ADO(_bCase,nullptr)
{
}
-Sequence< sal_Int8 > OAdoView::getUnoTunnelId()
-{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OAdoView::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return isUnoTunnelId<OAdoView>(rId)
- ? reinterpret_cast< sal_Int64 >( this )
- : OView_ADO::getSomething(rId);
-}
-
-
void OAdoView::getFastPropertyValue(Any& rValue,sal_Int32 nHandle) const
{
if(m_aView.IsValid())
@@ -79,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 cbe239e73825..943422289627 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;
@@ -61,7 +63,7 @@ Reference< XPropertySet > OViews::createDescriptor()
// XAppend
sdbcx::ObjectType OViews::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
{
- OAdoView* pView = getUnoTunnelImplementation<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..fe2e7e344857 100644
--- a/connectivity/source/drivers/ado/Awrapado.cxx
+++ b/connectivity/source/drivers/ado/Awrapado.cxx
@@ -21,48 +21,39 @@
#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()));
+ sal::systools::BStr bstr(aCon);
+ bool bErg = SUCCEEDED(pInterface->put_ConnectionString(bstr));
return bErg;
}
@@ -104,8 +95,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)));
+ sal::systools::BStr sStr1(CommandText);
+ bool bErg = SUCCEEDED(pInterface->Execute(sStr1,&RecordsAffected,Options,reinterpret_cast<ADORecordset**>(ppiRset)));
return bErg;
}
@@ -131,10 +122,10 @@ 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));
+ sal::systools::BStr sStr1(ConnectionString);
+ sal::systools::BStr sStr2(UserID);
+ sal::systools::BStr sStr3(Password);
+ bool bErg = SUCCEEDED(pInterface->Open(sStr1, sStr2, sStr3, Options));
return bErg;
}
@@ -147,15 +138,15 @@ 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()));
+ sal::systools::BStr bstr(_bstr);
+ bool bErg = SUCCEEDED(pInterface->put_DefaultDatabase(bstr));
return bErg;
}
@@ -219,15 +210,15 @@ 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()));
+ sal::systools::BStr bstr(_bstr);
+ return SUCCEEDED(pInterface->put_Provider(bstr));
}
sal_Int32 WpADOConnection::get_State() const
@@ -247,18 +238,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 +257,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,16 +284,16 @@ 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()));
+ sal::systools::BStr bstr(aCon);
+ bool bErg = SUCCEEDED(pInterface->put_CommandText(bstr));
return bErg;
}
@@ -360,8 +336,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));
+ sal::systools::BStr bstr(_bstr);
+ bool bErg = SUCCEEDED(pInterface->CreateParameter(bstr, Type, Direction, nSize, Value, &pPara));
return bErg ? pPara : nullptr;
}
@@ -392,16 +368,16 @@ 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()));
+ sal::systools::BStr bstr(Name);
+ bool bErg = SUCCEEDED(pInterface->put_Name(bstr));
return bErg;
}
@@ -414,17 +390,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 +414,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,12 +430,9 @@ 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
@@ -497,9 +470,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 +622,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 +650,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);
}
}
@@ -804,11 +765,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 +820,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)
@@ -937,9 +894,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 +978,30 @@ 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());
+ sal::systools::BStr bstr(_rName);
+ pInterface->put_Name(bstr);
}
void WpADOColumn::put_RelatedColumn(std::u16string_view _rName)
{
assert(pInterface);
- OLEString bstr(_rName);
- pInterface->put_RelatedColumn(bstr.asBSTR());
+ sal::systools::BStr bstr(_rName);
+ pInterface->put_RelatedColumn(bstr);
}
DataTypeEnum WpADOColumn::get_Type() const
@@ -1127,27 +1084,24 @@ 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());
+ sal::systools::BStr bstr(_rName);
+ pInterface->put_Name(bstr);
}
KeyTypeEnum WpADOKey::get_Type() const
@@ -1167,16 +1121,16 @@ 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());
+ sal::systools::BStr bstr(_rName);
+ pInterface->put_RelatedTable(bstr);
}
RuleEnum WpADOKey::get_DeleteRule() const
@@ -1210,26 +1164,24 @@ 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());
+ sal::systools::BStr bstr(_rName);
+ pInterface->put_Name(bstr);
}
bool WpADOIndex::get_Clustered() const
@@ -1277,11 +1229,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 +1243,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 +1283,72 @@ 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());
+ sal::systools::BStr bstr(_rName);
+ pInterface->put_Name(bstr);
}
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 +1365,15 @@ 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());
+ sal::systools::BStr bstr(_rName);
+ pInterface->put_Name(bstr);
}
RightsEnum WpADOGroup::GetPermissions(
@@ -1468,41 +1400,37 @@ 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());
+ sal::systools::BStr bstr(_rName);
+ pInterface->put_Name(bstr);
}
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()));
+ sal::systools::BStr sStr1(_rPwd);
+ sal::systools::BStr sStr2(_rNewPwd);
+ bool bErg = SUCCEEDED(pInterface->ChangePassword(sStr1, sStr2));
return bErg;
}
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 +1455,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 +1464,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 +1504,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 +1546,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 +1586,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 +1620,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 +1628,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 +1640,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 +1674,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 +1715,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 +1723,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 +1735,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 +1754,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 +1764,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 +1776,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 +1799,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 +1816,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 +1833,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 +1860,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 +1870,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 +1882,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 +1914,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 +1949,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 +1987,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..0f0d022681ea 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()
+sal::systools::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..3a8493ac290a 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;
diff --git a/connectivity/source/drivers/calc/CConnection.cxx b/connectivity/source/drivers/calc/CConnection.cxx
index 78bbf7835169..5c746414ed96 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();
}
@@ -104,18 +101,17 @@ Reference< XSpreadsheetDocument> const & OCalcConnection::acquireDoc()
return m_xDoc;
}
// open read-only as long as updating isn't implemented
- Sequence<PropertyValue> aArgs(2);
- aArgs[0].Name = "Hidden";
- aArgs[0].Value <<= true;
- aArgs[1].Name = "ReadOnly";
- aArgs[1].Value <<= true;
+ Sequence<PropertyValue> aArgs(m_sPassword.isEmpty() ? 2 : 3);
+ auto pArgs = aArgs.getArray();
+ pArgs[0].Name = "Hidden";
+ pArgs[0].Value <<= true;
+ pArgs[1].Name = "ReadOnly";
+ pArgs[1].Value <<= true;
if ( !m_sPassword.isEmpty() )
{
- const sal_Int32 nPos = aArgs.getLength();
- aArgs.realloc(nPos+1);
- aArgs[nPos].Name = "Password";
- aArgs[nPos].Value <<= m_sPassword;
+ pArgs[2].Name = "Password";
+ pArgs[2].Value <<= m_sPassword;
}
Reference< XDesktop2 > xDesktop = Desktop::create( getDriver()->getComponentContext() );
@@ -143,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;
}
diff --git a/connectivity/source/drivers/calc/CDatabaseMetaData.cxx b/connectivity/source/drivers/calc/CDatabaseMetaData.cxx
index 04945e71de6c..1b88ab05ff55 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("IsVisible");
+ 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;
}
}
@@ -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
@@ -209,7 +204,7 @@ Reference< XResultSet > SAL_CALL OCalcDatabaseMetaData::getTables(
}
}
- pResult->setRows(aRows);
+ pResult->setRows(std::move(aRows));
return pResult;
}
diff --git a/connectivity/source/drivers/calc/CDriver.cxx b/connectivity/source/drivers/calc/CDriver.cxx
index b7b11cc29176..eccf97751c8f 100644
--- a/connectivity/source/drivers/calc/CDriver.cxx
+++ b/connectivity/source/drivers/calc/CDriver.cxx
@@ -53,7 +53,7 @@ connectivity_calc_ODriver(
}
if (ret)
ret->acquire();
- return static_cast<cppu::OWeakObject*>(ret.get());
+ return getXWeak(ret.get());
}
diff --git a/connectivity/source/drivers/calc/CTable.cxx b/connectivity/source/drivers/calc/CTable.cxx
index f2c50362ab30..b480ee740f01 100644
--- a/connectivity/source/drivers/calc/CTable.cxx
+++ b/connectivity/source/drivers/calc/CTable.cxx
@@ -41,7 +41,6 @@
#include <rtl/math.hxx>
#include <tools/time.hxx>
#include <comphelper/servicehelper.hxx>
-#include <cppuhelper/typeprovider.hxx>
using namespace connectivity;
using namespace connectivity::calc;
@@ -50,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;
@@ -72,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);
}
}
@@ -192,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;
}
@@ -610,22 +603,6 @@ void SAL_CALL OCalcTable::disposing()
}
-Sequence< sal_Int8 > OCalcTable::getUnoTunnelId()
-{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OCalcTable::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return (isUnoTunnelId<OCalcTable>(rId))
- ? reinterpret_cast< sal_Int64 >( this )
- : OCalcTable_BASE::getSomething(rId);
-}
-
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..1f626f7b10d0 100644
--- a/connectivity/source/drivers/calc/CTables.cxx
+++ b/connectivity/source/drivers/calc/CTables.cxx
@@ -25,15 +25,10 @@
#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)
diff --git a/connectivity/source/drivers/component/CColumns.cxx b/connectivity/source/drivers/component/CColumns.cxx
index 9f802b6e4c57..7726d3a326d0 100644
--- a/connectivity/source/drivers/component/CColumns.cxx
+++ b/connectivity/source/drivers/component/CColumns.cxx
@@ -23,10 +23,6 @@
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)
diff --git a/connectivity/source/drivers/component/CDatabaseMetaData.cxx b/connectivity/source/drivers/component/CDatabaseMetaData.cxx
index cb5d1dcab4eb..49d83e36af12 100644
--- a/connectivity/source/drivers/component/CDatabaseMetaData.cxx
+++ b/connectivity/source/drivers/component/CDatabaseMetaData.cxx
@@ -46,76 +46,71 @@ 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);
- }
-
- pResult->setRows(aRows);
+ 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);
+
+ pResult->setRows(std::move(aRows));
return pResult;
}
@@ -176,7 +171,7 @@ Reference< XResultSet > SAL_CALL OComponentDatabaseMetaData::getColumns(
aRow[13] = new ORowSetValueDecorator(::comphelper::getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE))));
// aRow[14] = xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME));
// aRow[15] = xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME));
- switch(sal_Int32(aRow[5]->getValue()))
+ switch(aRow[5]->getValue().getInt32())
{
case DataType::CHAR:
case DataType::VARCHAR:
@@ -189,7 +184,7 @@ Reference< XResultSet > SAL_CALL OComponentDatabaseMetaData::getColumns(
aRow[16] = new ORowSetValueDecorator(sal_Int32(0));
}
aRow[17] = new ORowSetValueDecorator(i);
- switch(sal_Int32(aRow[11]->getValue()))
+ switch(aRow[11]->getValue().getInt32())
{
case ColumnValue::NO_NULLS:
aRow[18] = new ORowSetValueDecorator(OUString("NO"));
@@ -207,7 +202,7 @@ Reference< XResultSet > SAL_CALL OComponentDatabaseMetaData::getColumns(
}
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns);
- pResult->setRows(aRows);
+ pResult->setRows(std::move(aRows));
return pResult;
}
diff --git a/connectivity/source/drivers/component/CPreparedStatement.cxx b/connectivity/source/drivers/component/CPreparedStatement.cxx
index 7c5c8e07f891..82935cbd747d 100644
--- a/connectivity/source/drivers/component/CPreparedStatement.cxx
+++ b/connectivity/source/drivers/component/CPreparedStatement.cxx
@@ -22,7 +22,6 @@
using namespace connectivity::component;
using namespace connectivity::file;
-using namespace com::sun::star::uno;
rtl::Reference<OResultSet> OComponentPreparedStatement::createResultSet()
{
diff --git a/connectivity/source/drivers/component/CResultSet.cxx b/connectivity/source/drivers/component/CResultSet.cxx
index 55d19f8b2ed8..08e6e04aca70 100644
--- a/connectivity/source/drivers/component/CResultSet.cxx
+++ b/connectivity/source/drivers/component/CResultSet.cxx
@@ -77,7 +77,7 @@ Any SAL_CALL OComponentResultSet::getBookmark( )
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- return makeAny(static_cast<sal_Int32>((*m_aRow)[0]->getValue()));
+ return Any((*m_aRow)[0]->getValue().getInt32());
}
sal_Bool SAL_CALL OComponentResultSet::moveToBookmark( const Any& bookmark )
diff --git a/connectivity/source/drivers/component/CStatement.cxx b/connectivity/source/drivers/component/CStatement.cxx
index f3bd03e8b276..ff072ab5f548 100644
--- a/connectivity/source/drivers/component/CStatement.cxx
+++ b/connectivity/source/drivers/component/CStatement.cxx
@@ -22,7 +22,6 @@
using namespace connectivity::component;
using namespace connectivity::file;
-using namespace com::sun::star::uno;
rtl::Reference<OResultSet> OComponentStatement::createResultSet()
{
diff --git a/connectivity/source/drivers/component/CTable.cxx b/connectivity/source/drivers/component/CTable.cxx
index 9b5354d266d1..1fe32c339faa 100644
--- a/connectivity/source/drivers/component/CTable.cxx
+++ b/connectivity/source/drivers/component/CTable.cxx
@@ -25,7 +25,6 @@ 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;
@@ -33,7 +32,6 @@ 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,
@@ -63,7 +61,7 @@ void OComponentTable::refreshColumns()
if(m_xColumns)
m_xColumns->reFill(aVector);
else
- m_xColumns = new component::OComponentColumns(this,m_aMutex,aVector);
+ m_xColumns.reset(new component::OComponentColumns(this,m_aMutex,aVector));
}
void OComponentTable::refreshIndexes()
@@ -104,8 +102,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..79dce7ba2ce0 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;
diff --git a/connectivity/source/drivers/dbase/DColumns.cxx b/connectivity/source/drivers/dbase/DColumns.cxx
index b997ec8d9087..402ec4e41c07 100644
--- a/connectivity/source/drivers/dbase/DColumns.cxx
+++ b/connectivity/source/drivers/dbase/DColumns.cxx
@@ -25,10 +25,6 @@ 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)
{
diff --git a/connectivity/source/drivers/dbase/DConnection.cxx b/connectivity/source/drivers/dbase/DConnection.cxx
index c9c7a93fa9f2..7498f23e4bf7 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)
{
diff --git a/connectivity/source/drivers/dbase/DDatabaseMetaData.cxx b/connectivity/source/drivers/dbase/DDatabaseMetaData.cxx
index 4bb3a0c7179a..5192b308d19d 100644
--- a/connectivity/source/drivers/dbase/DDatabaseMetaData.cxx
+++ b/connectivity/source/drivers/dbase/DDatabaseMetaData.cxx
@@ -54,100 +54,95 @@ 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);
- }
-
- pResult->setRows(aRows);
+ 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(ORowSetValue(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(ORowSetValue(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);
+
+ 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))));
@@ -207,7 +195,7 @@ Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getColumns(
aRow[9] = new ORowSetValueDecorator(getINT32(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCALE))));
aRow[11] = new ORowSetValueDecorator(getINT32(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISNULLABLE))));
aRow[13] = new ORowSetValueDecorator(getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE))));
- switch(static_cast<sal_Int32>(aRow[5]->getValue()))
+ switch(aRow[5]->getValue().getInt32())
{
case DataType::CHAR:
case DataType::VARCHAR:
@@ -220,7 +208,7 @@ Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getColumns(
aRow[16] = new ORowSetValueDecorator(sal_Int32(0));
}
aRow[17] = new ORowSetValueDecorator(i);
- switch(sal_Int32(aRow[11]->getValue()))
+ switch(aRow[11]->getValue().getInt32())
{
case ColumnValue::NO_NULLS:
aRow[18] = new ORowSetValueDecorator(OUString("NO"));
@@ -245,7 +233,7 @@ Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getColumns(
throw WrappedTargetRuntimeException(e.Message, e.Context, e.TargetException);
}
rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns);
- pResult->setRows(aRows);
+ pResult->setRows(std::move(aRows));
return pResult;
}
@@ -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::getUnoTunnelImplementation<ODbaseIndex>(xIndex);
+ auto pIndex = dynamic_cast<ODbaseIndex*>(xIndex.get());
if(pIndex)
{
aRow[11] = new ORowSetValueDecorator(static_cast<sal_Int32>(pIndex->getHeader().db_maxkeys));
@@ -303,20 +287,18 @@ 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);
}
}
rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eIndexInfo);
- pResult->setRows(aRows);
+ pResult->setRows(std::move(aRows));
return pResult;
}
diff --git a/connectivity/source/drivers/dbase/DDriver.cxx b/connectivity/source/drivers/dbase/DDriver.cxx
index 8eae0013c940..ff0ec256e18a 100644
--- a/connectivity/source/drivers/dbase/DDriver.cxx
+++ b/connectivity/source/drivers/dbase/DDriver.cxx
@@ -51,7 +51,7 @@ connectivity_dbase_ODriver(
}
if (ret)
ret->acquire();
- return static_cast<cppu::OWeakObject*>(ret.get());
+ return getXWeak(ret.get());
}
diff --git a/connectivity/source/drivers/dbase/DIndex.cxx b/connectivity/source/drivers/dbase/DIndex.cxx
index d168de39eb77..a3ee4a2688df 100644
--- a/connectivity/source/drivers/dbase/DIndex.cxx
+++ b/connectivity/source/drivers/dbase/DIndex.cxx
@@ -30,7 +30,6 @@
#include <unotools/ucbhelper.hxx>
#include <comphelper/servicehelper.hxx>
#include <comphelper/types.hxx>
-#include <cppuhelper/typeprovider.hxx>
#include <connectivity/dbexception.hxx>
#include <dbase/DResultSet.hxx>
#include <strings.hrc>
@@ -42,13 +41,10 @@ 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");
@@ -100,22 +96,6 @@ void ODbaseIndex::refreshColumns()
m_pColumns.reset(new ODbaseIndexColumns(this,m_aMutex,aVector));
}
-Sequence< sal_Int8 > ODbaseIndex::getUnoTunnelId()
-{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
-}
-
-// XUnoTunnel
-
-sal_Int64 ODbaseIndex::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return (isUnoTunnelId<ODbaseIndex>(rId))
- ? reinterpret_cast< sal_Int64 >( this )
- : ODbaseIndex_BASE::getSomething(rId);
-}
-
ONDXPagePtr const & ODbaseIndex::getRoot()
{
openIndexFile();
@@ -357,7 +337,7 @@ SvStream& connectivity::dbase::operator >> (SvStream &rStream, ODbaseIndex& rInd
return rStream;
}
-SvStream& connectivity::dbase::WriteODbaseIndex(SvStream &rStream, ODbaseIndex& rIndex)
+SvStream& connectivity::dbase::WriteODbaseIndex(SvStream &rStream, const ODbaseIndex& rIndex)
{
rStream.Seek(0);
rStream.WriteUInt32(rIndex.m_aHeader.db_rootpage);
@@ -404,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);
@@ -461,7 +440,7 @@ void ODbaseIndex::DropImpl()
}
}
-void ODbaseIndex::impl_killFileAndthrowError_throw(const char* pErrorId, const OUString& _sFile)
+void ODbaseIndex::impl_killFileAndthrowError_throw(TranslateId pErrorId, const OUString& _sFile)
{
closeImpl();
if(UCBContentHelper::Exists(_sFile))
@@ -568,15 +547,13 @@ void ODbaseIndex::CreateImpl()
if(xSet->last())
{
- Reference< XUnoTunnel> xTunnel(xSet, UNO_QUERY_THROW);
- ODbaseResultSet* pDbaseRes = reinterpret_cast< ODbaseResultSet* >( xTunnel->getSomething(ODbaseResultSet::getUnoTunnelId()) );
+ 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..8b20903fa1d3 100644
--- a/connectivity/source/drivers/dbase/DIndexColumns.cxx
+++ b/connectivity/source/drivers/dbase/DIndexColumns.cxx
@@ -28,9 +28,7 @@ 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)
diff --git a/connectivity/source/drivers/dbase/DIndexes.cxx b/connectivity/source/drivers/dbase/DIndexes.cxx
index 2a4cf72fb496..df630c531c3e 100644
--- a/connectivity/source/drivers/dbase/DIndexes.cxx
+++ b/connectivity/source/drivers/dbase/DIndexes.cxx
@@ -24,18 +24,12 @@
#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)
{
@@ -92,14 +86,9 @@ Reference< XPropertySet > ODbaseIndexes::createDescriptor()
// XAppend
sdbcx::ObjectType ODbaseIndexes::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
{
- Reference<XUnoTunnel> xTunnel(descriptor,UNO_QUERY);
- if(xTunnel.is())
- {
- ODbaseIndex* pIndex = reinterpret_cast< ODbaseIndex* >( xTunnel->getSomething(ODbaseIndex::getUnoTunnelId()) );
- if(!pIndex)
- throw SQLException();
+ ODbaseIndex* pIndex = dynamic_cast<ODbaseIndex*>(descriptor.get());
+ if(pIndex)
pIndex->CreateImpl();
- }
return createObject( _rForName );
}
@@ -107,7 +96,7 @@ sdbcx::ObjectType ODbaseIndexes::appendObject( const OUString& _rForName, const
// XDrop
void ODbaseIndexes::dropObject(sal_Int32 _nPos, const OUString& /*_sElementName*/)
{
- auto pIndex = comphelper::getUnoTunnelImplementation<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..f349701e620b 100644
--- a/connectivity/source/drivers/dbase/DPreparedStatement.cxx
+++ b/connectivity/source/drivers/dbase/DPreparedStatement.cxx
@@ -22,7 +22,6 @@
using namespace connectivity::dbase;
using namespace connectivity::file;
-using namespace com::sun::star::uno;
rtl::Reference<OResultSet> ODbasePreparedStatement::createResultSet()
{
diff --git a/connectivity/source/drivers/dbase/DResultSet.cxx b/connectivity/source/drivers/dbase/DResultSet.cxx
index 17cbac2e41ab..123a29b8b069 100644
--- a/connectivity/source/drivers/dbase/DResultSet.cxx
+++ b/connectivity/source/drivers/dbase/DResultSet.cxx
@@ -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(static_cast<sal_Int32>((*m_aRow)[0]->getValue()));
+ return Any((*m_aRow)[0]->getValue().getInt32());
}
sal_Bool SAL_CALL ODbaseResultSet::moveToBookmark( const Any& bookmark )
@@ -155,7 +155,7 @@ Sequence< sal_Int32 > SAL_CALL ODbaseResultSet::deleteRows( const Sequence< An
bool ODbaseResultSet::fillIndexValues(const Reference< XColumnsSupplier> &_xIndex)
{
- auto pIndex = comphelper::getUnoTunnelImplementation<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..0da788f98e54 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()
diff --git a/connectivity/source/drivers/dbase/DTable.cxx b/connectivity/source/drivers/dbase/DTable.cxx
index 5b1ea452f61a..0caeb5be7c3f 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,11 +39,12 @@
#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 <comphelper/configuration.hxx>
#include <unotools/tempfile.hxx>
#include <unotools/ucbhelper.hxx>
#include <comphelper/types.hxx>
-#include <cppuhelper/typeprovider.hxx>
#include <cppuhelper/exc_hlp.hxx>
#include <cppuhelper/queryinterface.hxx>
#include <connectivity/dbtools.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;
@@ -155,17 +157,17 @@ void lcl_CalDate(sal_Int32 _nJulianDate,sal_Int32 _nJulianTime,css::util::DateTi
{
if ( _nJulianDate )
{
- sal_Int32 ka = _nJulianDate;
+ sal_Int64 ka = _nJulianDate;
if ( _nJulianDate >= 2299161 )
{
- sal_Int32 ialp = static_cast<sal_Int32>( (static_cast<double>(_nJulianDate) - 1867216.25 ) / 36524.25 );
- ka = _nJulianDate + 1 + ialp - ( ialp >> 2 );
+ sal_Int64 ialp = static_cast<sal_Int64>( (static_cast<double>(_nJulianDate) - 1867216.25 ) / 36524.25 );
+ ka = ka + 1 + ialp - ( ialp >> 2 );
}
- sal_Int32 kb = ka + 1524;
- sal_Int32 kc = static_cast<sal_Int32>( (static_cast<double>(kb) - 122.1 ) / 365.25 );
- sal_Int32 kd = static_cast<sal_Int32>(static_cast<double>(kc) * 365.25);
- sal_Int32 ke = static_cast<sal_Int32>(static_cast<double>( kb - kd ) / 30.6001 );
- _rDateTime.Day = static_cast<sal_uInt16>(kb - kd - static_cast<sal_Int32>( static_cast<double>(ke) * 30.6001 ));
+ 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) / 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
@@ -273,7 +275,11 @@ void ODbaseTable::readHeader()
void ODbaseTable::fillColumns()
{
m_pFileStream->Seek(STREAM_SEEK_TO_BEGIN);
- m_pFileStream->Seek(32);
+ if (!checkSeek(*m_pFileStream, 32))
+ {
+ SAL_WARN("connectivity.drivers", "ODbaseTable::fillColumns: bad offset!");
+ return;
+ }
if(!m_aColumns.is())
m_aColumns = new OSQLColumns();
@@ -285,8 +291,21 @@ void ODbaseTable::fillColumns()
m_aScales.clear();
// Number of fields:
- const sal_Int32 nFieldCount = (m_aHeader.headerLength - 1) / 32 - 1;
- OSL_ENSURE(nFieldCount,"No columns in table!");
+ sal_Int32 nFieldCount = (m_aHeader.headerLength - 1) / 32 - 1;
+ if (nFieldCount <= 0)
+ {
+ SAL_WARN("connectivity.drivers", "No columns in table!");
+ return;
+ }
+
+ auto nRemainingsize = m_pFileStream->remainingSize();
+ auto nMaxPossibleRecords = nRemainingsize / 32;
+ if (o3tl::make_unsigned(nFieldCount) > nMaxPossibleRecords)
+ {
+ SAL_WARN("connectivity.drivers", "Parsing error: " << nMaxPossibleRecords <<
+ " max possible entries, but " << nFieldCount << " claimed, truncating");
+ nFieldCount = nMaxPossibleRecords;
+ }
m_aColumns->reserve(nFieldCount);
m_aTypes.reserve(nFieldCount);
@@ -301,17 +320,13 @@ void ODbaseTable::fillColumns()
for (; i < nFieldCount; i++)
{
DBFColumn aDBFColumn;
-#if !defined(NDEBUG)
- sal_uInt64 const nOldPos(m_pFileStream->Tell());
-#endif
m_pFileStream->ReadBytes(aDBFColumn.db_fnm, 11);
m_pFileStream->ReadUChar(aDBFColumn.db_typ);
m_pFileStream->ReadUInt32(aDBFColumn.db_adr);
m_pFileStream->ReadUChar(aDBFColumn.db_flng);
m_pFileStream->ReadUChar(aDBFColumn.db_dez);
m_pFileStream->ReadBytes(aDBFColumn.db_free2, 14);
- assert(m_pFileStream->GetError() || m_pFileStream->Tell() == nOldPos + sizeof(aDBFColumn));
- if (m_pFileStream->GetError())
+ if (!m_pFileStream->good())
{
SAL_WARN("connectivity.drivers", "ODbaseTable::fillColumns: short read!");
break;
@@ -455,7 +470,6 @@ ODbaseTable::ODbaseTable(sdbcx::OCollection* _pTables, ODbaseConnection* _pConne
m_eEncoding = getConnection()->getTextEncoding();
}
-
void ODbaseTable::construct()
{
// initialize the header
@@ -483,10 +497,38 @@ void ODbaseTable::construct()
m_pFileStream = createStream_simpleError( sFileName, StreamMode::READ | StreamMode::NOCREATE | StreamMode::SHARE_DENYNONE);
}
- if(!m_pFileStream)
+ if (!m_pFileStream)
return;
readHeader();
+
+ std::size_t nFileSize = lcl_getFileSize(*m_pFileStream);
+
+ if (m_aHeader.headerLength > nFileSize)
+ {
+ SAL_WARN("connectivity.drivers", "Parsing error: " << nFileSize <<
+ " max possible size, but " << m_aHeader.headerLength << " claimed, abandoning");
+ return;
+ }
+
+ if (m_aHeader.recordLength)
+ {
+ std::size_t nMaxPossibleRecords = (nFileSize - m_aHeader.headerLength) / m_aHeader.recordLength;
+ // #i83401# seems to be empty or someone wrote nonsense into the dbase
+ // file try and recover if m_aHeader.db_slng is sane
+ if (m_aHeader.nbRecords == 0)
+ {
+ SAL_WARN("connectivity.drivers", "Parsing warning: 0 records claimed, recovering");
+ m_aHeader.nbRecords = nMaxPossibleRecords;
+ }
+ else if (m_aHeader.nbRecords > nMaxPossibleRecords)
+ {
+ SAL_WARN("connectivity.drivers", "Parsing error: " << nMaxPossibleRecords <<
+ " max possible records, but " << m_aHeader.nbRecords << " claimed, truncating");
+ m_aHeader.nbRecords = std::max(nMaxPossibleRecords, static_cast<size_t>(1));
+ }
+ }
+
if (HasMemoFields())
{
// Create Memo-Filename (.DBT):
@@ -508,18 +550,10 @@ void ODbaseTable::construct()
if (m_pMemoStream)
ReadMemoHeader();
}
- fillColumns();
- std::size_t nFileSize = lcl_getFileSize(*m_pFileStream);
+ fillColumns();
m_pFileStream->Seek(STREAM_SEEK_TO_BEGIN);
- // seems to be empty or someone wrote bullshit into the dbase file
- // try and recover if m_aHeader.db_slng is sane
- if (m_aHeader.nbRecords == 0 && m_aHeader.recordLength)
- {
- std::size_t nRecords = (nFileSize-m_aHeader.headerLength)/m_aHeader.recordLength;
- if (nRecords > 0)
- m_aHeader.nbRecords = nRecords;
- }
+
// Buffersize dependent on the file size
m_pFileStream->SetBufferSize(nFileSize > 1000000 ? 32768 :
@@ -614,7 +648,7 @@ OUString ODbaseTable::getEntry(file::OConnection const * _pConnection, std::u16s
// name and extension have to coincide
if ( _pConnection->matchesExtension( sExt ) )
{
- sName = sName.replaceAt(sName.getLength() - (sExt.getLength() + 1), sExt.getLength() + 1, OUString());
+ sName = sName.replaceAt(sName.getLength() - (sExt.getLength() + 1), sExt.getLength() + 1, u"");
if ( sName == _sName )
{
Reference< XContentAccess > xContentAccess( xDir, UNO_QUERY );
@@ -645,7 +679,7 @@ void ODbaseTable::refreshColumns()
if(m_xColumns)
m_xColumns->reFill(aVector);
else
- m_xColumns = new ODbaseColumns(this,m_aMutex,aVector);
+ m_xColumns.reset(new ODbaseColumns(this,m_aMutex,aVector));
}
void ODbaseTable::refreshIndexes()
@@ -688,7 +722,7 @@ void ODbaseTable::refreshIndexes()
if(m_xIndexes)
m_xIndexes->reFill(aVector);
else
- m_xIndexes = new ODbaseIndexes(this,m_aMutex,aVector);
+ m_xIndexes.reset(new ODbaseIndexes(this,m_aMutex,aVector));
}
@@ -705,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());
@@ -727,25 +759,9 @@ 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));
-}
-
-
-Sequence< sal_Int8 > ODbaseTable::getUnoTunnelId()
-{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
+ return aRet;
}
-// css::lang::XUnoTunnel
-
-sal_Int64 ODbaseTable::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return (isUnoTunnelId<ODbaseTable>(rId))
- ? reinterpret_cast< sal_Int64 >( this )
- : ODbaseTable_BASE::getSomething(rId);
-}
bool ODbaseTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool bRetrieveData)
{
@@ -753,7 +769,7 @@ bool ODbaseTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool
return false;
// Read the data
- bool bIsCurRecordDeleted = static_cast<char>(m_pBuffer[0]) == '*';
+ bool bIsCurRecordDeleted = m_pBuffer[0] == '*';
// only read the bookmark
@@ -772,10 +788,8 @@ bool ODbaseTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool
for (std::size_t i = 1; aIter != aEnd && nByteOffset <= m_nBufferSize && i < nCount;++aIter, i++)
{
// Lengths depending on data type:
- sal_Int32 nLen = 0;
- sal_Int32 nType = 0;
- nLen = m_aPrecisions[i-1];
- nType = m_aTypes[i-1];
+ sal_Int32 nLen = m_aPrecisions[i-1];
+ sal_Int32 nType = m_aTypes[i-1];
switch(nType)
{
@@ -827,15 +841,20 @@ 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 )
{
sal_Int32 nDate = 0,nTime = 0;
+ if (o3tl::make_unsigned(nLen) < 8)
+ {
+ SAL_WARN("connectivity.drivers", "short TIMESTAMP");
+ return false;
+ }
memcpy(&nDate, pData, 4);
- memcpy(&nTime, pData+ 4, 4);
+ memcpy(&nTime, pData + 4, 4);
if ( !nDate && !nTime )
{
(*_rRow)[i]->setNull();
@@ -907,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;
@@ -971,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();
@@ -984,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,
@@ -1103,7 +1119,7 @@ bool ODbaseTable::CreateImpl()
return true;
}
-void ODbaseTable::throwInvalidColumnType(const char* pErrorId, const OUString& _sColumnName)
+void ODbaseTable::throwInvalidColumnType(TranslateId pErrorId, const OUString& _sColumnName)
{
try
{
@@ -1363,6 +1379,10 @@ bool ODbaseTable::CreateFile(const INetURLObject& aFile, bool& bCreateMemo)
return true;
}
+bool ODbaseTable::HasMemoFields() const
+{
+ return m_aHeader.type > dBaseIV && !comphelper::IsFuzzing();
+}
// creates in principle dBase III file format
bool ODbaseTable::CreateMemoFile(const INetURLObject& aFile)
@@ -1378,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);
@@ -1420,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( "delete", Any( true ) );
}
catch(const Exception&)
{
@@ -1562,10 +1581,8 @@ 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 = reinterpret_cast< ODbaseIndex* >( xTunnel->getSomething(ODbaseIndex::getUnoTunnelId()) );
- OSL_ENSURE(pIndex,"ODbaseTable::DeleteRow: No Index returned!");
+ 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(),
[&aCase, &aColName](const OSQLColumns::value_type& rxCol) {
@@ -1613,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, '.', ',' );
}
@@ -1635,7 +1652,7 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo
::comphelper::UStringMixEqual aCase(isCaseSensitive());
- Reference<XIndexAccess> xColumns = m_xColumns;
+ Reference<XIndexAccess> xColumns(m_xColumns.get());
// first search a key that exist already in the table
for (sal_Int32 i = 0; i < nColumnCount; ++i)
{
@@ -1668,10 +1685,8 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo
continue;
else
{
- Reference<XUnoTunnel> xTunnel(xIndex,UNO_QUERY);
- OSL_ENSURE(xTunnel.is(),"No TunnelImplementation!");
- ODbaseIndex* pIndex = reinterpret_cast< ODbaseIndex* >( xTunnel->getSomething(ODbaseIndex::getUnoTunnelId()) );
- OSL_ENSURE(pIndex,"ODbaseTable::UpdateBuffer: No Index returned!");
+ ODbaseIndex* pIndex = dynamic_cast<ODbaseIndex*>(xIndex.get());
+ assert(pIndex && "ODbaseTable::UpdateBuffer: No Index returned!");
if (pIndex->Find(0,*rRow[nPos]))
{
@@ -1776,10 +1791,8 @@ 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 = reinterpret_cast< ODbaseIndex* >( xTunnel->getSomething(ODbaseIndex::getUnoTunnelId()) );
- OSL_ENSURE(pIndex,"ODbaseTable::UpdateBuffer: No Index returned!");
+ ODbaseIndex* pIndex = dynamic_cast<ODbaseIndex*>(aIndexedCols[i].get());
+ assert(pIndex && "ODbaseTable::UpdateBuffer: No Index returned!");
// Update !!
if (pOrgRow.is() && !thisColIsNull)
pIndex->Update(m_nFilePos, *(*pOrgRow)[nPos], thisColVal);
@@ -1806,7 +1819,7 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo
case DataType::TIMESTAMP:
{
sal_Int32 nJulianDate = 0, nJulianTime = 0;
- lcl_CalcJulDate(nJulianDate,nJulianTime, thisColVal);
+ lcl_CalcJulDate(nJulianDate,nJulianTime, thisColVal.getDateTime());
// Exactly 8 bytes to copy:
memcpy(pData,&nJulianDate,4);
memcpy(pData+4,&nJulianTime,4);
@@ -1818,7 +1831,7 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo
if(thisColVal.getTypeKind() == DataType::DOUBLE)
aDate = ::dbtools::DBTypeConversion::toDate(thisColVal.getDouble());
else
- aDate = thisColVal;
+ aDate = thisColVal.getDate();
char s[sizeof("-327686553565535")];
// reserve enough space for hypothetical max length
snprintf(s,
@@ -1833,7 +1846,7 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo
} break;
case DataType::INTEGER:
{
- sal_Int32 nValue = thisColVal;
+ sal_Int32 nValue = thisColVal.getInt32();
if (o3tl::make_unsigned(nLen) > sizeof(nValue))
return false;
memcpy(pData,&nValue,nLen);
@@ -1841,7 +1854,7 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo
break;
case DataType::DOUBLE:
{
- const double d = thisColVal;
+ const double d = thisColVal.getDouble();
m_xColumns->getByIndex(i) >>= xCol;
if (getBOOL(xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISCURRENCY)))) // Currency is treated separately
@@ -1867,7 +1880,7 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo
{
memset(pData,' ',nLen); // Clear to NULL
- const double n = thisColVal;
+ const double n = thisColVal.getDouble();
// one, because const_cast GetFormatPrecision on SvNumberFormat is not constant,
// even though it really could and should be
@@ -2158,7 +2171,7 @@ void ODbaseTable::alterColumn(sal_Int32 index,
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!");
@@ -2295,12 +2308,12 @@ namespace
{
Content aContent(aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE),Reference<XCommandEnvironment>(), comphelper::getProcessComponentContext());
- Sequence< PropertyValue > aProps( 1 );
- aProps[0].Name = "Title";
- aProps[0].Handle = -1; // n/a
- aProps[0].Value <<= sNewName;
+ Sequence< PropertyValue > aProps{ { "Title",
+ -1, // n/a
+ Any(sNewName),
+ css::beans::PropertyState_DIRECT_VALUE } };
Sequence< Any > aValues;
- aContent.executeCommand( "setPropertyValues",makeAny(aProps) ) >>= aValues;
+ aContent.executeCommand( "setPropertyValues",Any(aProps) ) >>= aValues;
if(aValues.hasElements() && aValues[0].hasValue())
throw Exception("setPropertyValues returned non-zero", nullptr);
}
@@ -2330,7 +2343,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();
@@ -2388,7 +2401,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();
@@ -2442,16 +2455,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()));
@@ -2501,7 +2512,7 @@ void ODbaseTable::copyData(ODbaseTable* _pNewTable,sal_Int32 _nPos)
}
}
}
- bOk = _pNewTable->InsertRow(*aInsertRow,_pNewTable->m_xColumns);
+ bOk = _pNewTable->InsertRow(*aInsertRow, _pNewTable->m_xColumns.get());
SAL_WARN_IF(!bOk, "connectivity.drivers", "Row could not be inserted!");
}
else
@@ -2648,7 +2659,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;
@@ -2682,7 +2693,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 74c81c62601b..3424801e3842 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,7 +39,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;
using namespace ::com::sun::star::container;
sdbcx::ObjectType ODbaseTables::createObject(const OUString& _rName)
@@ -65,10 +63,10 @@ Reference< XPropertySet > ODbaseTables::createDescriptor()
// XAppend
sdbcx::ObjectType ODbaseTables::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor )
{
- auto pTable = comphelper::getUnoTunnelImplementation<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())
@@ -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 = reinterpret_cast< ODbaseTable* >( xTunnel->getSomething(ODbaseTable::getUnoTunnelId()) );
+ 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 69648c480e79..d091335f5495 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))
{
}
@@ -482,7 +483,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())
@@ -701,7 +702,7 @@ void ONDXNode::Write(SvStream &rStream, const ONDXPage& rPage) const
rStream.WriteBytes(&buf[0], sizeof(double));
}
else
- rStream.WriteDouble( static_cast<double>(aKey.getValue()) );
+ rStream.WriteDouble( aKey.getValue().getDouble() );
}
else
{
@@ -710,7 +711,7 @@ void ONDXNode::Write(SvStream &rStream, const ONDXPage& rPage) const
memset(&pBuf[0], 0x20, nLen);
if (!aKey.getValue().isNull())
{
- OUString sValue = aKey.getValue();
+ OUString sValue = aKey.getValue().getString();
OString aText(OUStringToOString(sValue, rIndex.m_pTable->getConnection()->getTextEncoding()));
strncpy(reinterpret_cast<char *>(&pBuf[0]), aText.getStr(),
std::min<size_t>(nLen, aText.getLength()));
@@ -764,8 +765,8 @@ int ONDXKey::Compare(const ONDXKey& rKey) const
}
else
{
- double m = getValue();
- double n = rKey.getValue();
+ double m = getValue().getDouble();
+ double n = rKey.getValue().getDouble();
nRes = (m > n) ? 1 : ( m < n) ? -1 : 0;
}
diff --git a/connectivity/source/drivers/evoab2/EApi.cxx b/connectivity/source/drivers/evoab2/EApi.cxx
index 56a957fabb63..9ec8e0d44e32 100644
--- a/connectivity/source/drivers/evoab2/EApi.cxx
+++ b/connectivity/source/drivers/evoab2/EApi.cxx
@@ -21,24 +21,14 @@
#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) ();
-#define SYM_MAP(a) { #a, reinterpret_cast<SymbolFunc *>(&a) }
-
namespace {
struct ApiMap
@@ -51,70 +41,48 @@ struct ApiMap
const ApiMap aCommonApiMap[] =
{
- SYM_MAP( eds_check_version ),
- SYM_MAP( e_contact_field_name ),
- SYM_MAP( e_contact_get ),
- SYM_MAP( e_contact_get_type ),
- SYM_MAP( e_contact_field_id ),
- SYM_MAP( e_book_new ),
- SYM_MAP( e_book_open ),
- SYM_MAP( e_book_get_source ),
- SYM_MAP( e_book_get_contacts ),
- SYM_MAP( e_book_query_field_test ),
- SYM_MAP( e_book_query_and ),
- SYM_MAP( e_book_query_or ),
- SYM_MAP( e_book_query_not ),
- SYM_MAP( e_book_query_ref ),
- SYM_MAP( e_book_query_unref ),
- SYM_MAP( e_book_query_from_string ),
- SYM_MAP( e_book_query_to_string ),
- SYM_MAP( e_book_query_field_exists )
-};
-
-//< 3.6 api
-const ApiMap aOldApiMap[] =
-{
- SYM_MAP( e_book_get_addressbooks ),
- SYM_MAP( e_book_get_uri ),
- SYM_MAP( e_book_authenticate_user ),
- SYM_MAP( e_source_group_peek_base_uri),
- SYM_MAP( e_source_peek_name ),
- SYM_MAP( e_source_get_property ),
- SYM_MAP( e_source_list_peek_groups ),
- SYM_MAP( e_source_group_peek_sources )
+ { "eds_check_version", reinterpret_cast<SymbolFunc *>(&eds_check_version) },
+ { "e_contact_field_name", reinterpret_cast<SymbolFunc *>(&e_contact_field_name) },
+ { "e_contact_get", reinterpret_cast<SymbolFunc *>(&e_contact_get) },
+ { "e_contact_get_type", reinterpret_cast<SymbolFunc *>(&e_contact_get_type) },
+ { "e_contact_field_id", reinterpret_cast<SymbolFunc *>(&e_contact_field_id) },
+ { "e_book_new", reinterpret_cast<SymbolFunc *>(&e_book_new) },
+ { "e_book_open", reinterpret_cast<SymbolFunc *>(&e_book_open) },
+ { "e_book_get_source", reinterpret_cast<SymbolFunc *>(&e_book_get_source) },
+ { "e_book_get_contacts", reinterpret_cast<SymbolFunc *>(&e_book_get_contacts) },
+ { "e_book_query_field_test", reinterpret_cast<SymbolFunc *>(&e_book_query_field_test) },
+ { "e_book_query_and", reinterpret_cast<SymbolFunc *>(&e_book_query_and) },
+ { "e_book_query_or", reinterpret_cast<SymbolFunc *>(&e_book_query_or) },
+ { "e_book_query_not", reinterpret_cast<SymbolFunc *>(&e_book_query_not) },
+ { "e_book_query_ref", reinterpret_cast<SymbolFunc *>(&e_book_query_ref) },
+ { "e_book_query_unref", reinterpret_cast<SymbolFunc *>(&e_book_query_unref) },
+ { "e_book_query_from_string", reinterpret_cast<SymbolFunc *>(&e_book_query_from_string) },
+ { "e_book_query_to_string", reinterpret_cast<SymbolFunc *>(&e_book_query_to_string) },
+ { "e_book_query_field_exists", reinterpret_cast<SymbolFunc *>(&e_book_query_field_exists) }
};
-//>= 3.6 api
const ApiMap aNewApiMap[] =
{
- SYM_MAP( e_source_registry_list_sources ),
- SYM_MAP( e_source_registry_new_sync ),
- SYM_MAP( e_source_has_extension ),
- SYM_MAP( e_source_get_extension ),
- SYM_MAP( e_source_backend_get_backend_name ),
- SYM_MAP( e_source_get_display_name ),
- SYM_MAP( e_source_get_uid ),
- SYM_MAP( e_source_registry_ref_source),
- SYM_MAP( e_client_open_sync ),
- SYM_MAP( e_client_get_source ),
- SYM_MAP( e_book_client_get_contacts_sync ),
- SYM_MAP( e_client_util_free_object_slist )
-};
-
-//== indirect read access (3.6 only)
-const ApiMap aClientApiMap36[] =
-{
- SYM_MAP( e_book_client_new )
+ { "e_source_registry_list_sources", reinterpret_cast<SymbolFunc *>(&e_source_registry_list_sources) },
+ { "e_source_registry_new_sync", reinterpret_cast<SymbolFunc *>(&e_source_registry_new_sync) },
+ { "e_source_has_extension", reinterpret_cast<SymbolFunc *>(&e_source_has_extension) },
+ { "e_source_get_extension", reinterpret_cast<SymbolFunc *>(&e_source_get_extension) },
+ { "e_source_backend_get_backend_name", reinterpret_cast<SymbolFunc *>(&e_source_backend_get_backend_name) },
+ { "e_source_get_display_name", reinterpret_cast<SymbolFunc *>(&e_source_get_display_name) },
+ { "e_source_get_uid", reinterpret_cast<SymbolFunc *>(&e_source_get_uid) },
+ { "e_source_registry_ref_source", reinterpret_cast<SymbolFunc *>(&e_source_registry_ref_source) },
+ { "e_client_open_sync", reinterpret_cast<SymbolFunc *>(&e_client_open_sync) },
+ { "e_client_get_source", reinterpret_cast<SymbolFunc *>(&e_client_get_source) },
+ { "e_book_client_get_contacts_sync", reinterpret_cast<SymbolFunc *>(&e_book_client_get_contacts_sync) },
+ { "e_client_util_free_object_slist", reinterpret_cast<SymbolFunc *>(&e_client_util_free_object_slist) }
};
//>= direct read access API (>= 3.8)
const ApiMap aClientApiMap38[] =
{
- SYM_MAP( e_book_client_connect_direct_sync )
+ { "e_book_client_connect_direct_sync", reinterpret_cast<SymbolFunc *>(&e_book_client_connect_direct_sync) }
};
-#undef SYM_MAP
-
template<size_t N> static bool
tryLink( osl::Module &rModule, const char *pName, const ApiMap (&pMap)[N])
{
@@ -144,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 fb010b8dce5d..d16a6377d1d1 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)
@@ -67,9 +64,8 @@ Reference< XNameAccess > SAL_CALL OEvoabCatalog::getTables( )
try
{
- if (!m_pTables) {
- refreshTables();
- }
+ if (!m_pTables)
+ refreshTables();
}
catch( const RuntimeException& )
{
diff --git a/connectivity/source/drivers/evoab2/NColumns.cxx b/connectivity/source/drivers/evoab2/NColumns.cxx
index 5b2b64d5d58b..99fce8f3bf46 100644
--- a/connectivity/source/drivers/evoab2/NColumns.cxx
+++ b/connectivity/source/drivers/evoab2/NColumns.cxx
@@ -25,12 +25,8 @@
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;
diff --git a/connectivity/source/drivers/evoab2/NConnection.cxx b/connectivity/source/drivers/evoab2/NConnection.cxx
index 02e8d476dd6e..66fc7ecb6511 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)
diff --git a/connectivity/source/drivers/evoab2/NConnection.hxx b/connectivity/source/drivers/evoab2/NConnection.hxx
index 4d6604f0975c..8dd8714bc2fe 100644
--- a/connectivity/source/drivers/evoab2/NConnection.hxx
+++ b/connectivity/source/drivers/evoab2/NConnection.hxx
@@ -60,7 +60,6 @@ namespace connectivity::evoab {
/// @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; }
diff --git a/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx b/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx
index 6c798e5a166c..110d01feb213 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
{
@@ -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);
@@ -294,7 +297,7 @@ ODatabaseMetaDataResultSet::ORows OEvoabDatabaseMetaData::getColumnRows( const O
::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( )
@@ -988,15 +993,15 @@ 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
aRows.push_back( { ODatabaseMetaDataResultSet::getEmptyValue(), new ORowSetValueDecorator(OUString(sTableTypes[i])) });
}
// here we set the rows at the resultset
- pResult->setRows(aRows);
+ pResult->setRows(std::move(aRows));
return pResult;
}
@@ -1010,7 +1015,7 @@ Reference< XResultSet > OEvoabDatabaseMetaData::impl_getTypeInfo_throw( )
static ODatabaseMetaDataResultSet::ORows aRows = []()
{
- ODatabaseMetaDataResultSet::ORows tmp(2);
+ ODatabaseMetaDataResultSet::ORows tmp;
ODatabaseMetaDataResultSet::ORow aRow
{
ODatabaseMetaDataResultSet::getEmptyValue() ,
@@ -1042,22 +1047,10 @@ Reference< XResultSet > OEvoabDatabaseMetaData::impl_getTypeInfo_throw( )
tmp.push_back(aRow);
return tmp;
}();
- pResultSet->setRows(aRows);
- 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 ) );
+ pResultSet->setRows(std::move(aRows));
return pResultSet;
}
-
bool isSourceBackend(ESource *pSource, const char *backendname)
{
if (!pSource || !e_source_has_extension (pSource, E_SOURCE_EXTENSION_ADDRESS_BOOK))
@@ -1073,135 +1066,80 @@ 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();
if(nLength)
- {
- bTableFound = false;
+ {
+ bTableFound = false;
- const OUString* pBegin = types.getConstArray();
- const OUString* pEnd = pBegin + nLength;
- for(;pBegin != pEnd;++pBegin)
- {
- if(*pBegin == aTable)
- {
- bTableFound = true;
- break;
- }
- }
+ const OUString* pBegin = types.getConstArray();
+ const OUString* pEnd = pBegin + nLength;
+ for(;pBegin != pEnd;++pBegin)
+ {
+ if(*pBegin == aTable)
+ {
+ bTableFound = true;
+ break;
+ }
}
+ }
if(!bTableFound)
return pResult;
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);
-
- 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);
- }
+ GList *pSources = e_source_registry_list_sources(get_e_source_registry(), E_SOURCE_EXTENSION_ADDRESS_BOOK);
- 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);
}
- pResult->setRows(aRows);
+ g_list_foreach (pSources, object_unref, nullptr);
+ g_list_free (pSources);
+
+ pResult->setRows(std::move(aRows));
return pResult;
}
diff --git a/connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx b/connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx
index b5f504425d95..a64c234e6a52 100644
--- a/connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx
+++ b/connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx
@@ -65,8 +65,6 @@ namespace connectivity::evoab
{
OEvoabConnection* m_pConnection;
- ODatabaseMetaDataResultSet::ORows getColumnRows( const OUString& columnNamePattern );
-
protected:
virtual css::uno::Reference< css::sdbc::XResultSet > impl_getTypeInfo_throw() override;
// cached database information
diff --git a/connectivity/source/drivers/evoab2/NDriver.cxx b/connectivity/source/drivers/evoab2/NDriver.cxx
index d1b7746f47c5..c72d9b1a189f 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) :
diff --git a/connectivity/source/drivers/evoab2/NDriver.hxx b/connectivity/source/drivers/evoab2/NDriver.hxx
index a5c8c8ee76bd..b505bb9db5fd 100644
--- a/connectivity/source/drivers/evoab2/NDriver.hxx
+++ b/connectivity/source/drivers/evoab2/NDriver.hxx
@@ -28,7 +28,7 @@
#include <cppuhelper/compbase.hxx>
#include <connectivity/CommonTools.hxx>
-#define EVOAB_DRIVER_IMPL_NAME "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
{
@@ -63,7 +63,7 @@ namespace connectivity::evoab
virtual sal_Int32 SAL_CALL getMinorVersion( ) override;
public:
- css::uno::Reference< css::uno::XComponentContext > getComponentContext( ) const { return m_xContext; }
+ const css::uno::Reference< css::uno::XComponentContext >& getComponentContext( ) const { return m_xContext; }
// 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 73d0b9c0a73f..2ed8b0f166b9 100644
--- a/connectivity/source/drivers/evoab2/NPreparedStatement.cxx
+++ b/connectivity/source/drivers/evoab2/NPreparedStatement.cxx
@@ -22,14 +22,13 @@
#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;
@@ -40,8 +39,6 @@ IMPLEMENT_SERVICE_INFO(OEvoabPreparedStatement,"com.sun.star.sdbcx.evoab.Prepare
OEvoabPreparedStatement::OEvoabPreparedStatement( OEvoabConnection* _pConnection )
:OCommonStatement(_pConnection)
- ,m_sSqlStatement()
- ,m_xMetaData()
{
}
diff --git a/connectivity/source/drivers/evoab2/NResultSet.cxx b/connectivity/source/drivers/evoab2/NResultSet.cxx
index 9c9e1f302a05..bc9656337097 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;
@@ -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,26 +498,36 @@ 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>();
- #define REGISTER_PROP( id, member ) \
- registerProperty( \
- OMetaConnection::getPropMap().getNameByIndex( id ), \
- id, \
- PropertyAttribute::READONLY, \
- &member, \
- cppu::UnoType<decltype(member)>::get() \
- );
-
- REGISTER_PROP( PROPERTY_ID_FETCHSIZE, m_nFetchSize );
- REGISTER_PROP( PROPERTY_ID_RESULTSETTYPE, m_nResultSetType );
- REGISTER_PROP( PROPERTY_ID_FETCHDIRECTION, m_nFetchDirection );
- REGISTER_PROP( PROPERTY_ID_RESULTSETCONCURRENCY, m_nResultSetConcurrency );
+ registerProperty(
+ OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
+ PROPERTY_ID_FETCHSIZE,
+ PropertyAttribute::READONLY,
+ &m_nFetchSize,
+ cppu::UnoType<decltype(m_nFetchSize)>::get()
+ );
+ registerProperty(
+ OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
+ PROPERTY_ID_RESULTSETTYPE,
+ PropertyAttribute::READONLY,
+ &m_nResultSetType,
+ cppu::UnoType<decltype(m_nResultSetType)>::get()
+ );
+ registerProperty(
+ OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
+ PROPERTY_ID_FETCHDIRECTION,
+ PropertyAttribute::READONLY,
+ &m_nFetchDirection,
+ cppu::UnoType<decltype(m_nFetchDirection)>::get()
+ );
+ registerProperty(
+ OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
+ PROPERTY_ID_RESULTSETCONCURRENCY,
+ PropertyAttribute::READONLY,
+ &m_nResultSetConcurrency,
+ cppu::UnoType<decltype(m_nResultSetConcurrency)>::get()
+ );
}
OEvoabResultSet::~OEvoabResultSet()
@@ -672,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() )
{
@@ -1016,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..3eeeab244ab3 100644
--- a/connectivity/source/drivers/evoab2/NResultSet.hxx
+++ b/connectivity/source/drivers/evoab2/NResultSet.hxx
@@ -49,7 +49,7 @@ namespace connectivity::evoab
{
public:
virtual EBook* openBook(const char *abname) = 0;
- virtual void executeQuery (EBook* pBook, EBookQuery* pQuery, OString &rPassword) = 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;
diff --git a/connectivity/source/drivers/evoab2/NResultSetMetaData.cxx b/connectivity/source/drivers/evoab2/NResultSetMetaData.cxx
index 7f196bed35e7..a828b127fe68 100644
--- a/connectivity/source/drivers/evoab2/NResultSetMetaData.cxx
+++ b/connectivity/source/drivers/evoab2/NResultSetMetaData.cxx
@@ -21,15 +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),
- m_aEvoabFields()
+OEvoabResultSetMetaData::OEvoabResultSetMetaData(OUString _aTableName)
+ : m_aTableName(std::move(_aTableName))
{
}
@@ -102,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 f41487951659..91ebdda56c70 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 {
@@ -89,24 +88,69 @@ OCommonStatement::OCommonStatement(OEvoabConnection* _pConnection)
, m_nResultSetConcurrency(ResultSetConcurrency::UPDATABLE)
, m_bEscapeProcessing(true)
{
-#define REGISTER_PROP( id, member ) \
- registerProperty( \
- OMetaConnection::getPropMap().getNameByIndex( id ), \
- id, \
- 0, \
- &member, \
- cppu::UnoType<decltype(member)>::get() \
+ registerProperty(
+ OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME),
+ PROPERTY_ID_CURSORNAME,
+ 0,
+ &m_aCursorName,
+ cppu::UnoType<decltype(m_aCursorName)>::get()
+ );
+ registerProperty(
+ OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE),
+ PROPERTY_ID_MAXFIELDSIZE,
+ 0,
+ &m_nMaxFieldSize,
+ cppu::UnoType<decltype(m_nMaxFieldSize)>::get()
+ );
+ registerProperty(
+ OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS),
+ PROPERTY_ID_MAXROWS,
+ 0,
+ &m_nMaxRows,
+ cppu::UnoType<decltype(m_nMaxRows)>::get()
+ );
+ registerProperty(
+ OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT),
+ PROPERTY_ID_QUERYTIMEOUT,
+ 0,
+ &m_nQueryTimeOut,
+ cppu::UnoType<decltype(m_nQueryTimeOut)>::get()
+ );
+ registerProperty(
+ OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE),
+ PROPERTY_ID_FETCHSIZE,
+ 0,
+ &m_nFetchSize,
+ cppu::UnoType<decltype(m_nFetchSize)>::get()
+ );
+ registerProperty(
+ OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE),
+ PROPERTY_ID_RESULTSETTYPE,
+ 0,
+ &m_nResultSetType,
+ cppu::UnoType<decltype(m_nResultSetType)>::get()
+ );
+ registerProperty(
+ OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION),
+ PROPERTY_ID_FETCHDIRECTION,
+ 0,
+ &m_nFetchDirection,
+ cppu::UnoType<decltype(m_nFetchDirection)>::get()
+ );
+ registerProperty(
+ OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING),
+ PROPERTY_ID_ESCAPEPROCESSING,
+ 0,
+ &m_bEscapeProcessing,
+ cppu::UnoType<decltype(m_bEscapeProcessing)>::get()
+ );
+ registerProperty(
+ OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY),
+ PROPERTY_ID_RESULTSETCONCURRENCY,
+ 0,
+ &m_nResultSetConcurrency,
+ cppu::UnoType<decltype(m_nResultSetConcurrency)>::get()
);
-
- REGISTER_PROP( PROPERTY_ID_CURSORNAME, m_aCursorName );
- REGISTER_PROP( PROPERTY_ID_MAXFIELDSIZE, m_nMaxFieldSize );
- REGISTER_PROP( PROPERTY_ID_MAXROWS, m_nMaxRows );
- REGISTER_PROP( PROPERTY_ID_QUERYTIMEOUT, m_nQueryTimeOut );
- REGISTER_PROP( PROPERTY_ID_FETCHSIZE, m_nFetchSize );
- REGISTER_PROP( PROPERTY_ID_RESULTSETTYPE, m_nResultSetType );
- REGISTER_PROP( PROPERTY_ID_FETCHDIRECTION, m_nFetchDirection );
- REGISTER_PROP( PROPERTY_ID_ESCAPEPROCESSING, m_bEscapeProcessing );
- REGISTER_PROP( PROPERTY_ID_RESULTSETCONCURRENCY, m_nResultSetConcurrency );
}
OCommonStatement::~OCommonStatement()
@@ -223,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
@@ -233,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 ) );
}
@@ -461,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 );
}
@@ -504,7 +548,7 @@ Any SAL_CALL OCommonStatement::getWarnings( )
checkDisposed(OCommonStatement_IBase::rBHelper.bDisposed);
- return makeAny(SQLWarning());
+ return Any(SQLWarning());
}
@@ -569,7 +613,7 @@ Reference< XResultSet > OCommonStatement::impl_executeQuery_throw( const QueryDa
pResult->construct( _rQueryData );
// done
- m_xResultSet = pResult;
+ m_xResultSet = Reference<XWeak>(pResult);
return pResult;
}
diff --git a/connectivity/source/drivers/evoab2/NTable.cxx b/connectivity/source/drivers/evoab2/NTable.cxx
index b5c652a8ff67..631c27db244d 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,
@@ -62,15 +57,15 @@ void OEvoabTable::refreshColumns()
if (xResult.is())
{
- Reference< XRow > xRow(xResult, UNO_QUERY);
- while (xResult->next())
- aVector.push_back(xRow->getString(4));
+ Reference< XRow > xRow(xResult, UNO_QUERY);
+ while (xResult->next())
+ aVector.push_back(xRow->getString(4));
}
}
if (m_xColumns)
m_xColumns->reFill(aVector);
else
- m_xColumns = new OEvoabColumns(this,m_aMutex,aVector);
+ m_xColumns.reset(new OEvoabColumns(this,m_aMutex,aVector));
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/evoab2/NTables.cxx b/connectivity/source/drivers/evoab2/NTables.cxx
index 69b54ba70759..3be63e1e1049 100644
--- a/connectivity/source/drivers/evoab2/NTables.cxx
+++ b/connectivity/source/drivers/evoab2/NTables.cxx
@@ -29,12 +29,7 @@ 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)
{
diff --git a/connectivity/source/drivers/evoab2/NTables.hxx b/connectivity/source/drivers/evoab2/NTables.hxx
index 7e200ff6aee2..e5d454729431 100644
--- a/connectivity/source/drivers/evoab2/NTables.hxx
+++ b/connectivity/source/drivers/evoab2/NTables.hxx
@@ -20,6 +20,7 @@
#include <connectivity/sdbcx/VCollection.hxx>
#include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
+#include <utility>
namespace connectivity::evoab
{
@@ -30,11 +31,11 @@ namespace connectivity::evoab
virtual sdbcx::ObjectType createObject(const OUString& _rName) override;
virtual void impl_refresh() override;
public:
- OEvoabTables(const css::uno::Reference< css::sdbc::XDatabaseMetaData >& _rMetaData,
+ 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(_rMetaData)
+ m_xMetaData(std::move(_xMetaData))
{}
virtual void disposing() override;
};
diff --git a/connectivity/source/drivers/file/FCatalog.cxx b/connectivity/source/drivers/file/FCatalog.cxx
index eedda26efba2..54ad24bf1d59 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;
diff --git a/connectivity/source/drivers/file/FColumns.cxx b/connectivity/source/drivers/file/FColumns.cxx
index 1b90385bf9c0..97e9d0c23a2a 100644
--- a/connectivity/source/drivers/file/FColumns.cxx
+++ b/connectivity/source/drivers/file/FColumns.cxx
@@ -25,12 +25,8 @@
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)
{
diff --git a/connectivity/source/drivers/file/FConnection.cxx b/connectivity/source/drivers/file/FConnection.cxx
index 964d8ff16861..38ce342cb5e2 100644
--- a/connectivity/source/drivers/file/FConnection.cxx
+++ b/connectivity/source/drivers/file/FConnection.cxx
@@ -21,7 +21,6 @@
#include <comphelper/processfactory.hxx>
#include <comphelper/servicehelper.hxx>
-#include <cppuhelper/typeprovider.hxx>
#include <file/FConnection.hxx>
#include <file/FDatabaseMetaData.hxx>
#include <file/FDriver.hxx>
@@ -33,6 +32,7 @@
#include <com/sun/star/ucb/XContentIdentifier.hpp>
#include <tools/urlobj.hxx>
#include <file/FCatalog.hxx>
+#include <comphelper/configuration.hxx>
#include <unotools/pathoptions.hxx>
#include <ucbhelper/content.hxx>
#include <connectivity/dbcharset.hxx>
@@ -132,6 +132,7 @@ void OConnection::construct(const OUString& url,const Sequence< PropertyValue >&
OUString aFileName = aDSN;
INetURLObject aURL;
aURL.SetSmartProtocol(INetProtocol::File);
+ if (!comphelper::IsFuzzing())
{
SvtPathOptions aPathOptions;
aFileName = aPathOptions.SubstituteVariable(aFileName);
@@ -401,31 +402,24 @@ Reference< XDynamicResultSet > OConnection::getDir() const
sal_Int64 SAL_CALL OConnection::getSomething( const Sequence< sal_Int8 >& rId )
{
- return (isUnoTunnelId<OConnection>(rId))
- ? reinterpret_cast< sal_Int64 >( this )
- : sal_Int64(0);
+ return comphelper::getSomethingImpl(rId, this);
}
-Sequence< sal_Int8 > OConnection::getUnoTunnelId()
+const Sequence< sal_Int8 > & OConnection::getUnoTunnelId()
{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
+ static const comphelper::UnoIdInit implId;
+ return implId.getSeq();
}
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, "S1000", 0, next);
throw aError;
}
diff --git a/connectivity/source/drivers/file/FDatabaseMetaData.cxx b/connectivity/source/drivers/file/FDatabaseMetaData.cxx
index 215c381aa8c1..6d157bb575da 100644
--- a/connectivity/source/drivers/file/FDatabaseMetaData.cxx
+++ b/connectivity/source/drivers/file/FDatabaseMetaData.cxx
@@ -17,6 +17,8 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <config_fuzzers.h>
+
#include <file/FDatabaseMetaData.hxx>
#include <FDatabaseMetaDataResultSet.hxx>
#include <com/sun/star/sdbc/ResultSetType.hpp>
@@ -28,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;
@@ -71,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;
@@ -149,6 +151,7 @@ namespace
return nIsCS;
}
+#endif
}
@@ -163,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();
@@ -227,7 +230,11 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables(
if ( !bKnowCaseSensitivity )
{
bKnowCaseSensitivity = true;
+#if ENABLE_FUZZERS
+ sal_Int16 nCase = 1;
+#else
sal_Int16 nCase = isCaseSensitiveParentFolder( m_pConnection->getURL(), aURL.getName() );
+#endif
switch( nCase )
{
case 1:
@@ -291,14 +298,14 @@ 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);
}
}
- pResult->setRows(aRows);
+ pResult->setRows(std::move(aRows));
return pResult;
}
@@ -393,7 +400,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges(
xNames->getByName(*pBegin), css::uno::UNO_QUERY);
if(xTable.is())
{
- auto pTable = comphelper::getUnoTunnelImplementation<OFileTable>(xTable);
+ auto pTable = dynamic_cast<OFileTable*>(xTable.get());
if(pTable && !pTable->isReadOnly())
{
aRow[6] = ODatabaseMetaDataResultSet::getInsertValue();
@@ -419,7 +426,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges(
}
}
- pResult->setRows(aRows);
+ pResult->setRows(std::move(aRows));
return pResult;
}
@@ -610,15 +617,10 @@ 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")) } );
- }
- pResult->setRows(aRows);
+ ODatabaseMetaDataResultSet::ORows aRows;
+ aRows.push_back( { ODatabaseMetaDataResultSet::getEmptyValue(), new ORowSetValueDecorator(OUString("TABLE")) } );
+ pResult->setRows(std::move(aRows));
return pResult;
}
diff --git a/connectivity/source/drivers/file/FDateFunctions.cxx b/connectivity/source/drivers/file/FDateFunctions.cxx
index d5b7c48c0dcc..1be992d4b672 100644
--- a/connectivity/source/drivers/file/FDateFunctions.cxx
+++ b/connectivity/source/drivers/file/FDateFunctions.cxx
@@ -32,7 +32,7 @@ ORowSetValue OOp_DayOfWeek::operate(const ORowSetValue& lhs) const
return lhs;
sal_Int32 nRet = 0;
- css::util::Date aD = lhs;
+ css::util::Date aD = lhs.getDate();
Date aDate(aD.Day, aD.Month, aD.Year);
DayOfWeek eDayOfWeek = aDate.GetDayOfWeek();
switch (eDayOfWeek)
@@ -69,7 +69,7 @@ ORowSetValue OOp_DayOfMonth::operate(const ORowSetValue& lhs) const
if (lhs.isNull())
return lhs;
- css::util::Date aD = lhs;
+ css::util::Date aD = lhs.getDate();
return static_cast<sal_Int16>(aD.Day);
}
@@ -78,7 +78,7 @@ ORowSetValue OOp_DayOfYear::operate(const ORowSetValue& lhs) const
if (lhs.isNull())
return lhs;
- css::util::Date aD = lhs;
+ css::util::Date aD = lhs.getDate();
Date aDate(aD.Day, aD.Month, aD.Year);
return static_cast<sal_Int16>(aDate.GetDayOfYear());
}
@@ -88,7 +88,7 @@ ORowSetValue OOp_Month::operate(const ORowSetValue& lhs) const
if (lhs.isNull())
return lhs;
- css::util::Date aD = lhs;
+ css::util::Date aD = lhs.getDate();
return static_cast<sal_Int16>(aD.Month);
}
@@ -98,7 +98,7 @@ ORowSetValue OOp_DayName::operate(const ORowSetValue& lhs) const
return lhs;
OUString sRet;
- css::util::Date aD = lhs;
+ css::util::Date aD = lhs.getDate();
Date aDate(aD.Day, aD.Month, aD.Year);
DayOfWeek eDayOfWeek = aDate.GetDayOfWeek();
switch (eDayOfWeek)
@@ -136,7 +136,7 @@ ORowSetValue OOp_MonthName::operate(const ORowSetValue& lhs) const
return lhs;
OUString sRet;
- css::util::Date aD = lhs;
+ css::util::Date aD = lhs.getDate();
switch (aD.Month)
{
case 1:
@@ -185,7 +185,7 @@ ORowSetValue OOp_Quarter::operate(const ORowSetValue& lhs) const
return lhs;
sal_Int32 nRet = 1;
- css::util::Date aD = lhs;
+ css::util::Date aD = lhs.getDate();
if (aD.Month >= 4 && aD.Month < 7)
nRet = 2;
else if (aD.Month >= 7 && aD.Month < 10)
@@ -202,12 +202,12 @@ ORowSetValue OOp_Week::operate(const std::vector<ORowSetValue>& lhs) const
size_t nSize = lhs.size();
- css::util::Date aD = lhs[nSize - 1];
+ css::util::Date aD = lhs[nSize - 1].getDate();
Date aDate(aD.Day, aD.Month, aD.Year);
sal_Int16 nStartDay = SUNDAY;
if (nSize == 2 && !lhs[0].isNull())
- nStartDay = lhs[0];
+ nStartDay = lhs[0].getInt16();
return static_cast<sal_Int16>(aDate.GetWeekOfYear(static_cast<DayOfWeek>(nStartDay)));
}
@@ -217,7 +217,7 @@ ORowSetValue OOp_Year::operate(const ORowSetValue& lhs) const
if (lhs.isNull())
return lhs;
- css::util::Date aD = lhs;
+ css::util::Date aD = lhs.getDate();
return aD.Year;
}
@@ -226,7 +226,7 @@ ORowSetValue OOp_Hour::operate(const ORowSetValue& lhs) const
if (lhs.isNull())
return lhs;
- css::util::Time aT = lhs;
+ css::util::Time aT = lhs.getTime();
return static_cast<sal_Int16>(aT.Hours);
}
@@ -235,7 +235,7 @@ ORowSetValue OOp_Minute::operate(const ORowSetValue& lhs) const
if (lhs.isNull())
return lhs;
- css::util::Time aT = lhs;
+ css::util::Time aT = lhs.getTime();
return static_cast<sal_Int16>(aT.Minutes);
}
@@ -244,7 +244,7 @@ ORowSetValue OOp_Second::operate(const ORowSetValue& lhs) const
if (lhs.isNull())
return lhs;
- css::util::Time aT = lhs;
+ css::util::Time aT = lhs.getTime();
return static_cast<sal_Int16>(aT.Seconds);
}
diff --git a/connectivity/source/drivers/file/FDriver.cxx b/connectivity/source/drivers/file/FDriver.cxx
index c5afbd75f7e3..b24c4e67a532 100644
--- a/connectivity/source/drivers/file/FDriver.cxx
+++ b/connectivity/source/drivers/file/FDriver.cxx
@@ -20,11 +20,13 @@
#include <file/FDriver.hxx>
#include <file/FConnection.hxx>
#include <file/fcode.hxx>
+#include <comphelper/servicehelper.hxx>
#include <comphelper/types.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <connectivity/dbexception.hxx>
#include <strings.hrc>
#include <resource/sharedresources.hxx>
+#include <utility>
using namespace connectivity::file;
@@ -35,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))
{
}
@@ -171,25 +173,15 @@ Reference< XTablesSupplier > SAL_CALL OFileDriver::getDataDefinitionByConnection
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(ODriver_BASE::rBHelper.bDisposed);
- Reference< XTablesSupplier > xTab;
- Reference< css::lang::XUnoTunnel> xTunnel(connection,UNO_QUERY);
- if(xTunnel.is())
+ if (OConnection* pSearchConnection = comphelper::getFromUnoTunnel<OConnection>(connection))
{
- OConnection* pSearchConnection = reinterpret_cast< OConnection* >( xTunnel->getSomething(OConnection::getUnoTunnelId()) );
- OConnection* pConnection = nullptr;
for (auto const& elem : m_xConnections)
{
if (static_cast<OConnection*>( Reference< XConnection >::query(elem.get()).get() ) == pSearchConnection)
- {
- pConnection = pSearchConnection;
- break;
- }
+ return pSearchConnection->createCatalog();
}
-
- if(pConnection)
- xTab = pConnection->createCatalog();
}
- return xTab;
+ return {};
}
diff --git a/connectivity/source/drivers/file/FNoException.cxx b/connectivity/source/drivers/file/FNoException.cxx
index 7c26081da12e..920bb38859f1 100644
--- a/connectivity/source/drivers/file/FNoException.cxx
+++ b/connectivity/source/drivers/file/FNoException.cxx
@@ -85,7 +85,7 @@ void OPreparedStatement::scanParameter(OSQLParseNode* pParseNode,std::vector< OS
std::unique_ptr<OKeyValue> OResultSet::GetOrderbyKeyValue(OValueRefRow const & _rRow)
{
- sal_uInt32 nBookmarkValue = std::abs(static_cast<sal_Int32>((*_rRow)[0]->getValue()));
+ sal_uInt32 nBookmarkValue = std::abs((*_rRow)[0]->getValue().getInt32());
std::unique_ptr<OKeyValue> pKeyValue = OKeyValue::createKeyValue(nBookmarkValue);
diff --git a/connectivity/source/drivers/file/FNumericFunctions.cxx b/connectivity/source/drivers/file/FNumericFunctions.cxx
index a6784a55c140..7c7fdc75425f 100644
--- a/connectivity/source/drivers/file/FNumericFunctions.cxx
+++ b/connectivity/source/drivers/file/FNumericFunctions.cxx
@@ -19,20 +19,19 @@
#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() )
return lhs;
- double nVal(lhs);
+ double nVal = lhs.getDouble();
if ( nVal < 0 )
nVal *= -1.0;
return fabs(nVal);
@@ -44,7 +43,7 @@ ORowSetValue OOp_Sign::operate(const ORowSetValue& lhs) const
return lhs;
sal_Int32 nRet = 0;
- double nVal(lhs);
+ double nVal = lhs.getDouble();
if ( nVal < 0 )
nRet = -1;
else if ( nVal > 0 )
@@ -58,7 +57,7 @@ ORowSetValue OOp_Mod::operate(const ORowSetValue& lhs,const ORowSetValue& rhs) c
if ( lhs.isNull() || rhs.isNull() )
return ORowSetValue();
- return fmod(static_cast<double>(lhs),static_cast<double>(rhs));
+ return fmod(lhs.getDouble(), rhs.getDouble());
}
ORowSetValue OOp_Floor::operate(const ORowSetValue& lhs) const
@@ -66,7 +65,7 @@ ORowSetValue OOp_Floor::operate(const ORowSetValue& lhs) const
if ( lhs.isNull() )
return lhs;
- return floor(static_cast<double>(lhs));
+ return floor(lhs.getDouble());
}
ORowSetValue OOp_Ceiling::operate(const ORowSetValue& lhs) const
@@ -74,7 +73,7 @@ ORowSetValue OOp_Ceiling::operate(const ORowSetValue& lhs) const
if ( lhs.isNull() )
return lhs;
- double nVal(lhs);
+ double nVal = lhs.getDouble();
return ceil(nVal);
}
@@ -84,11 +83,11 @@ ORowSetValue OOp_Round::operate(const std::vector<ORowSetValue>& lhs) const
return ORowSetValue();
size_t nSize = lhs.size();
- double nVal = lhs[nSize-1];
+ double nVal = lhs[nSize-1].getDouble();
sal_Int32 nDec = 0;
if ( nSize == 2 && !lhs[0].isNull() )
- nDec = lhs[0];
+ nDec = lhs[0].getDouble();
return ::rtl::math::round(nVal,nDec);
}
@@ -97,16 +96,16 @@ ORowSetValue OOp_Exp::operate(const ORowSetValue& lhs) const
if ( lhs.isNull() )
return lhs;
- double nVal(lhs);
+ double nVal = lhs.getDouble();
return exp(nVal);
}
ORowSetValue OOp_Ln::operate(const ORowSetValue& lhs) const
{
- if ( lhs.isNull() || static_cast<double>(lhs) < 0.0 )
+ if ( lhs.isNull() || lhs.getDouble() < 0.0 )
return lhs;
- double nVal(lhs);
+ double nVal = lhs.getDouble();
nVal = log(nVal);
if ( std::isnan(nVal) )
return ORowSetValue();
@@ -118,11 +117,11 @@ ORowSetValue OOp_Log::operate(const std::vector<ORowSetValue>& lhs) const
if ( lhs.empty() || lhs.size() > 2 )
return ORowSetValue();
size_t nSize = lhs.size();
- double nVal = log( static_cast<double>(lhs[nSize-1]) );
+ double nVal = log( lhs[nSize-1].getDouble() );
if ( nSize == 2 && !lhs[0].isNull() )
- nVal /= log(static_cast<double>(lhs[0]));
+ nVal /= log(lhs[0].getDouble());
if ( std::isnan(nVal) )
return ORowSetValue();
@@ -131,10 +130,10 @@ ORowSetValue OOp_Log::operate(const std::vector<ORowSetValue>& lhs) const
ORowSetValue OOp_Log10::operate(const ORowSetValue& lhs) const
{
- if ( lhs.isNull() || static_cast<double>(lhs) < 0.0 )
+ if ( lhs.isNull() || lhs.getDouble() < 0.0 )
return lhs;
- double nVal = log(static_cast<double>(lhs));
+ double nVal = log(lhs.getDouble());
if ( std::isnan(nVal) )
return ORowSetValue();
nVal /= log(10.0);
@@ -146,7 +145,7 @@ ORowSetValue OOp_Pow::operate(const ORowSetValue& lhs,const ORowSetValue& rhs) c
if ( lhs.isNull() || rhs.isNull() )
return lhs;
- return pow(static_cast<double>(lhs),static_cast<double>(rhs));
+ return pow(lhs.getDouble(), rhs.getDouble());
}
ORowSetValue OOp_Sqrt::operate(const ORowSetValue& lhs) const
@@ -154,7 +153,7 @@ ORowSetValue OOp_Sqrt::operate(const ORowSetValue& lhs) const
if ( lhs.isNull() )
return lhs;
- double nVal = sqrt(static_cast<double>(lhs));
+ double nVal = sqrt(lhs.getDouble());
if ( std::isnan(nVal) )
return ORowSetValue();
return nVal;
@@ -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
@@ -170,7 +169,7 @@ ORowSetValue OOp_Cos::operate(const ORowSetValue& lhs) const
if ( lhs.isNull() )
return lhs;
- return cos(static_cast<double>(lhs));
+ return cos(lhs.getDouble());
}
ORowSetValue OOp_Sin::operate(const ORowSetValue& lhs) const
@@ -178,7 +177,7 @@ ORowSetValue OOp_Sin::operate(const ORowSetValue& lhs) const
if ( lhs.isNull() )
return lhs;
- return sin(static_cast<double>(lhs));
+ return sin(lhs.getDouble());
}
ORowSetValue OOp_Tan::operate(const ORowSetValue& lhs) const
@@ -186,7 +185,7 @@ ORowSetValue OOp_Tan::operate(const ORowSetValue& lhs) const
if ( lhs.isNull() )
return lhs;
- return tan(static_cast<double>(lhs));
+ return tan(lhs.getDouble());
}
ORowSetValue OOp_ACos::operate(const ORowSetValue& lhs) const
@@ -194,7 +193,7 @@ ORowSetValue OOp_ACos::operate(const ORowSetValue& lhs) const
if ( lhs.isNull() )
return lhs;
- return acos(static_cast<double>(lhs));
+ return acos(lhs.getDouble());
}
ORowSetValue OOp_ASin::operate(const ORowSetValue& lhs) const
@@ -202,7 +201,7 @@ ORowSetValue OOp_ASin::operate(const ORowSetValue& lhs) const
if ( lhs.isNull() )
return lhs;
- return asin(static_cast<double>(lhs));
+ return asin(lhs.getDouble());
}
ORowSetValue OOp_ATan::operate(const ORowSetValue& lhs) const
@@ -210,7 +209,7 @@ ORowSetValue OOp_ATan::operate(const ORowSetValue& lhs) const
if ( lhs.isNull() )
return lhs;
- return atan(static_cast<double>(lhs));
+ return atan(lhs.getDouble());
}
ORowSetValue OOp_ATan2::operate(const ORowSetValue& lhs,const ORowSetValue& rhs) const
@@ -218,7 +217,7 @@ ORowSetValue OOp_ATan2::operate(const ORowSetValue& lhs,const ORowSetValue& rhs)
if ( lhs.isNull() || rhs.isNull() )
return lhs;
- return atan2(static_cast<double>(lhs),static_cast<double>(rhs));
+ return atan2(lhs.getDouble(), rhs.getDouble());
}
ORowSetValue OOp_Degrees::operate(const ORowSetValue& lhs) const
@@ -226,8 +225,8 @@ ORowSetValue OOp_Degrees::operate(const ORowSetValue& lhs) const
if ( lhs.isNull() )
return lhs;
- double nLhs = lhs;
- return nLhs*180*(1.0/fPi);
+ double nLhs = lhs.getDouble();
+ return basegfx::rad2deg(nLhs);
}
ORowSetValue OOp_Radians::operate(const ORowSetValue& lhs) const
@@ -235,8 +234,8 @@ ORowSetValue OOp_Radians::operate(const ORowSetValue& lhs) const
if ( lhs.isNull() )
return lhs;
- double nLhs = lhs;
- return nLhs*fPi*(1.0/180.0);
+ double nLhs = lhs.getDouble();
+ return basegfx::deg2rad(nLhs);
}
diff --git a/connectivity/source/drivers/file/FPreparedStatement.cxx b/connectivity/source/drivers/file/FPreparedStatement.cxx
index 79c69b3ee62e..f2a8571b61e5 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>
@@ -100,7 +101,7 @@ rtl::Reference<OResultSet> OPreparedStatement::makeResultSet()
closeResultSet();
rtl::Reference<OResultSet> xResultSet(createResultSet());
- m_xResultSet = xResultSet;
+ m_xResultSet = uno::Reference<uno::XWeak>(xResultSet);
initializeResultSet(xResultSet.get());
initResultSet(xResultSet.get());
return xResultSet;
@@ -392,7 +393,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 595ca2be7281..5612c68feedf 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;
@@ -57,7 +58,7 @@ using namespace com::sun::star::container;
namespace
{
- void lcl_throwError(const char* pErrorId, const css::uno::Reference< css::uno::XInterface>& _xContext)
+ void lcl_throwError(TranslateId pErrorId, const css::uno::Reference< css::uno::XInterface>& _xContext)
{
::connectivity::SharedResources aResources;
const OUString sMessage = aResources.getResourceString(pErrorId);
@@ -217,43 +218,43 @@ Reference< css::io::XInputStream > SAL_CALL OResultSet::getCharacterStream( sal_
sal_Bool SAL_CALL OResultSet::getBoolean( sal_Int32 columnIndex )
{
- return bool(getValue(columnIndex));
+ return getValue(columnIndex).getBool();
}
sal_Int8 SAL_CALL OResultSet::getByte( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getInt8();
}
Sequence< sal_Int8 > SAL_CALL OResultSet::getBytes( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getSequence();
}
css::util::Date SAL_CALL OResultSet::getDate( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getDate();
}
double SAL_CALL OResultSet::getDouble( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getDouble();
}
float SAL_CALL OResultSet::getFloat( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getFloat();
}
sal_Int32 SAL_CALL OResultSet::getInt( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getInt32();
}
@@ -264,13 +265,13 @@ sal_Int32 SAL_CALL OResultSet::getRow( )
OSL_ENSURE((m_bShowDeleted || !m_aRow->isDeleted()),"getRow called for deleted row");
- return m_aSkipDeletedSet.getMappedPosition((*m_aRow)[0]->getValue());
+ return m_aSkipDeletedSet.getMappedPosition((*m_aRow)[0]->getValue().getInt32());
}
sal_Int64 SAL_CALL OResultSet::getLong( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getLong();
}
@@ -316,22 +317,22 @@ Any SAL_CALL OResultSet::getObject( sal_Int32 columnIndex, const Reference< css:
sal_Int16 SAL_CALL OResultSet::getShort( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getInt16();
}
OUString SAL_CALL OResultSet::getString( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getString();
}
css::util::Time SAL_CALL OResultSet::getTime( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getTime();
}
css::util::DateTime SAL_CALL OResultSet::getTimestamp( sal_Int32 columnIndex )
{
- return getValue(columnIndex);
+ return getValue(columnIndex).getDateTime();
}
@@ -518,12 +519,12 @@ void SAL_CALL OResultSet::insertRow( )
m_bRowInserted = m_pTable->InsertRow(*m_aInsertRow, m_xColsIdx);
if(m_bRowInserted && m_pFileSet.is())
{
- sal_Int32 nPos = (*m_aInsertRow)[0]->getValue();
+ sal_Int32 nPos = (*m_aInsertRow)[0]->getValue().getInt32();
m_pFileSet->push_back(nPos);
*(*m_aInsertRow)[0] = sal_Int32(m_pFileSet->size());
clearInsertRow();
- m_aSkipDeletedSet.insertNewPosition((*m_aRow)[0]->getValue());
+ m_aSkipDeletedSet.insertNewPosition((*m_aRow)[0]->getValue().getInt32());
}
}
@@ -536,7 +537,7 @@ void SAL_CALL OResultSet::updateRow( )
lcl_throwError(STR_TABLE_READONLY,*this);
m_bRowUpdated = m_pTable->UpdateRow(*m_aInsertRow, m_aRow,m_xColsIdx);
- *(*m_aInsertRow)[0] = static_cast<sal_Int32>((*m_aRow)[0]->getValue());
+ *(*m_aInsertRow)[0] = (*m_aRow)[0]->getValue().getInt32();
clearInsertRow();
}
@@ -553,7 +554,7 @@ void SAL_CALL OResultSet::deleteRow()
if(m_aRow->isDeleted())
lcl_throwError(STR_ROW_ALREADY_DELETED,*this);
- sal_Int32 nPos = static_cast<sal_Int32>((*m_aRow)[0]->getValue());
+ sal_Int32 nPos = (*m_aRow)[0]->getValue().getInt32();
m_bRowDeleted = m_pTable->DeleteRow(*m_xColumns);
if(m_bRowDeleted && m_pFileSet.is())
{
@@ -837,7 +838,7 @@ again:
}
else if (m_pFileSet.is())
{
- sal_uInt32 nBookmarkValue = std::abs(static_cast<sal_Int32>((*m_aEvaluateRow)[0]->getValue()));
+ sal_uInt32 nBookmarkValue = std::abs((*m_aEvaluateRow)[0]->getValue().getInt32());
m_pFileSet->push_back(nBookmarkValue);
}
}
@@ -921,7 +922,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;
}
@@ -1136,14 +1137,14 @@ void OResultSet::sortRows()
++i;
}
- m_pSortIndex.reset(new OSortIndex(eKeyType,m_aOrderbyAscending));
+ m_pSortIndex.reset(new OSortIndex(std::move(eKeyType), std::vector(m_aOrderbyAscending)));
while ( ExecuteRow( IResultSetHelper::NEXT, 1, false ) )
{
(*m_aSelectRow)[0]->setValue( (*m_aRow)[0]->getValue() );
if ( m_pSQLAnalyzer->hasFunctions() )
m_pSQLAnalyzer->setSelectionEvaluationResult( m_aSelectRow, m_aColMapping );
- const sal_Int32 nBookmark = (*m_aRow->begin())->getValue();
+ const sal_Int32 nBookmark = (*m_aRow->begin())->getValue().getInt32();
ExecuteRow( IResultSetHelper::BOOKMARK, nBookmark, true, false );
}
@@ -1380,22 +1381,6 @@ void OResultSet::OpenImpl()
m_nFilePos = 0;
}
-Sequence< sal_Int8 > OResultSet::getUnoTunnelId()
-{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OResultSet::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return isUnoTunnelId<OResultSet>(rId)
- ? reinterpret_cast< sal_Int64 >( this )
- : 0;
-}
-
void OResultSet::setBoundedColumns(const OValueRefRow& _rRow,
const OValueRefRow& _rSelectRow,
const ::rtl::Reference<connectivity::OSQLColumns>& _rxColumns,
@@ -1530,8 +1515,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 = reinterpret_cast< OFileTable* >(xTunnel->getSomething(OFileTable::getUnoTunnelId()));
+ m_pTable = dynamic_cast<OFileTable*>(_xTable.get());
assert(m_pTable.is());
}
@@ -1574,7 +1558,7 @@ bool OResultSet::move(IResultSetHelper::Movement _eCursorPosition, sal_Int32 _nO
sal_Int32 OResultSet::getDriverPos() const
{
- return (*m_aRow)[0]->getValue();
+ return (*m_aRow)[0]->getValue().getInt32();
}
bool OResultSet::isRowDeleted() const
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 30ebb42f252d..4520abfeff1d 100644
--- a/connectivity/source/drivers/file/FStatement.cxx
+++ b/connectivity/source/drivers/file/FStatement.cxx
@@ -32,11 +32,13 @@
#include <com/sun/star/sdbc/FetchDirection.hpp>
#include <com/sun/star/lang/DisposedException.hpp>
#include <comphelper/sequence.hxx>
+#include <comphelper/servicehelper.hxx>
#include <cppuhelper/typeprovider.hxx>
#include <comphelper/types.hxx>
#include <connectivity/dbexception.hxx>
#include <strings.hrc>
#include <algorithm>
+#include <cstddef>
namespace connectivity::file
{
@@ -192,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( )
@@ -406,11 +408,7 @@ void OStatement_Base::construct(const OUString& sql)
}
// at this moment we support only one table per select statement
- Reference< css::lang::XUnoTunnel> xTunnel(rTabs.begin()->second,UNO_QUERY);
- if(xTunnel.is())
- {
- m_pTable = reinterpret_cast<OFileTable*>(xTunnel->getSomething(OFileTable::getUnoTunnelId()));
- }
+ 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();
@@ -443,7 +441,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);
@@ -456,10 +454,10 @@ void OStatement_Base::initializeResultSet(OResultSet* _pResult)
GetAssignValues();
_pResult->setSqlAnalyzer(m_pSQLAnalyzer.get());
- _pResult->setOrderByColumns(m_aOrderbyColumnNumber);
- _pResult->setOrderByAscending(m_aOrderbyAscending);
+ _pResult->setOrderByColumns(std::vector(m_aOrderbyColumnNumber));
+ _pResult->setOrderByAscending(std::vector(m_aOrderbyAscending));
_pResult->setBindingRow(m_aRow);
- _pResult->setColumnMapping(m_aColMapping);
+ _pResult->setColumnMapping(std::vector(m_aColMapping));
_pResult->setEvaluationRow(m_aEvaluateRow);
_pResult->setAssignValues(m_aAssignValues);
_pResult->setSelectRow(m_aSelectRow);
@@ -502,10 +500,7 @@ void OStatement_Base::GetAssignValues()
if (pOptColumnCommalist->count() == 0)
{
const Sequence< OUString>& aNames = m_xColNames->getElementNames();
- const OUString* pBegin = aNames.getConstArray();
- const OUString* pEnd = pBegin + aNames.getLength();
- for (; pBegin != pEnd; ++pBegin)
- aColumnNameList.push_back(*pBegin);
+ aColumnNameList.insert(aColumnNameList.end(), aNames.begin(), aNames.end());
}
else
{
diff --git a/connectivity/source/drivers/file/FStringFunctions.cxx b/connectivity/source/drivers/file/FStringFunctions.cxx
index 8bac436e07be..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,14 +63,14 @@ 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)
{
if (!aIter->isNull())
{
- char c = static_cast<char>(static_cast<sal_Int32>(*aIter));
+ char c = static_cast<char>(aIter->getInt32());
sRet.appendAscii(&c, 1);
}
@@ -90,7 +92,7 @@ ORowSetValue OOp_Concat::operate(const std::vector<ORowSetValue>& lhs) const
if (aIter->isNull())
return ORowSetValue();
- sRet.append(aIter->operator OUString());
+ sRet.append(aIter->getString());
}
return sRet.makeStringAndClear();
@@ -108,7 +110,7 @@ ORowSetValue OOp_Locate::operate(const std::vector<ORowSetValue>& lhs) const
else if (lhs.size() != 3)
return ORowSetValue();
- return lhs[1].getString().indexOf(lhs[2].getString(), lhs[0]) + 1;
+ return lhs[1].getString().indexOf(lhs[2].getString(), lhs[0].getInt32()) + 1;
}
ORowSetValue OOp_SubString::operate(const std::vector<ORowSetValue>& lhs) const
@@ -117,13 +119,13 @@ ORowSetValue OOp_SubString::operate(const std::vector<ORowSetValue>& lhs) const
[](const ORowSetValue& rValue) { return rValue.isNull(); }))
return ORowSetValue();
- if (lhs.size() == 2 && static_cast<sal_Int32>(lhs[0]) >= sal_Int32(0))
- return lhs[1].getString().copy(static_cast<sal_Int32>(lhs[0]) - 1);
+ if (lhs.size() == 2 && lhs[0].getInt32() >= sal_Int32(0))
+ return lhs[1].getString().copy(lhs[0].getInt32() - 1);
- else if (lhs.size() != 3 || static_cast<sal_Int32>(lhs[1]) < sal_Int32(0))
+ else if (lhs.size() != 3 || lhs[1].getInt32() < sal_Int32(0))
return ORowSetValue();
- return lhs[2].getString().copy(static_cast<sal_Int32>(lhs[1]) - 1, lhs[0]);
+ return lhs[2].getString().copy(lhs[1].getInt32() - 1, lhs[0].getInt32());
}
ORowSetValue OOp_LTrim::operate(const ORowSetValue& lhs) const
@@ -131,7 +133,7 @@ ORowSetValue OOp_LTrim::operate(const ORowSetValue& lhs) const
if (lhs.isNull())
return lhs;
- OUString sRet = lhs;
+ OUString sRet = lhs.getString();
OUString sNew = sRet.trim();
return sRet.copy(sRet.indexOf(sNew));
}
@@ -141,7 +143,7 @@ ORowSetValue OOp_RTrim::operate(const ORowSetValue& lhs) const
if (lhs.isNull())
return lhs;
- OUString sRet = lhs;
+ OUString sRet = lhs.getString();
OUString sNew = sRet.trim();
return sRet.copy(0, sRet.lastIndexOf(sNew[sNew.getLength() - 1]) + 1);
}
@@ -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;
- 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();
}
@@ -166,17 +164,10 @@ ORowSetValue OOp_Replace::operate(const std::vector<ORowSetValue>& lhs) const
if (lhs.size() != 3)
return ORowSetValue();
- OUString sStr = lhs[2];
- OUString sFrom = lhs[1];
- OUString sTo = lhs[0];
- 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;
+ OUString sStr = lhs[2].getString();
+ OUString sFrom = lhs[1].getString();
+ OUString sTo = lhs[0].getString();
+ 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;
+ 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.operator OUString());
+ sRet.append(s);
}
return sRet.makeStringAndClear();
}
@@ -198,12 +190,12 @@ ORowSetValue OOp_Insert::operate(const std::vector<ORowSetValue>& lhs) const
if (lhs.size() != 4)
return ORowSetValue();
- OUString sStr = lhs[3];
+ OUString sStr = lhs[3].getString();
- sal_Int32 nStart = static_cast<sal_Int32>(lhs[2]);
+ sal_Int32 nStart = lhs[2].getInt32();
if (nStart < 1)
nStart = 1;
- return sStr.replaceAt(nStart - 1, static_cast<sal_Int32>(lhs[1]), lhs[0]);
+ return sStr.replaceAt(nStart - 1, lhs[1].getInt32(), lhs[0].getString());
}
ORowSetValue OOp_Left::operate(const ORowSetValue& lhs, const ORowSetValue& rhs) const
@@ -211,8 +203,8 @@ ORowSetValue OOp_Left::operate(const ORowSetValue& lhs, const ORowSetValue& rhs)
if (lhs.isNull() || rhs.isNull())
return lhs;
- OUString sRet = lhs;
- sal_Int32 nCount = rhs;
+ OUString sRet = lhs.getString();
+ sal_Int32 nCount = rhs.getInt32();
if (nCount < 0)
return ORowSetValue();
return sRet.copy(0, nCount);
@@ -223,8 +215,8 @@ ORowSetValue OOp_Right::operate(const ORowSetValue& lhs, const ORowSetValue& rhs
if (lhs.isNull() || rhs.isNull())
return lhs;
- sal_Int32 nCount = rhs;
- OUString sRet = lhs;
+ sal_Int32 nCount = rhs.getInt32();
+ OUString sRet = lhs.getString();
if (nCount < 0 || nCount >= sRet.getLength())
return ORowSetValue();
diff --git a/connectivity/source/drivers/file/FTable.cxx b/connectivity/source/drivers/file/FTable.cxx
index b47bfb811a1f..06dc187fa20e 100644
--- a/connectivity/source/drivers/file/FTable.cxx
+++ b/connectivity/source/drivers/file/FTable.cxx
@@ -23,7 +23,6 @@
#include <com/sun/star/sdbc/XRow.hpp>
#include <com/sun/star/sdbc/XResultSet.hpp>
#include <comphelper/servicehelper.hxx>
-#include <cppuhelper/typeprovider.hxx>
#include <unotools/ucbstreamhelper.hxx>
using namespace connectivity;
@@ -87,7 +86,7 @@ void OFileTable::refreshColumns()
if(m_xColumns)
m_xColumns->reFill(aVector);
else
- m_xColumns = new OColumns(this,m_aMutex,aVector);
+ m_xColumns.reset(new OColumns(this,m_aMutex,aVector));
}
void OFileTable::refreshKeys()
@@ -119,29 +118,10 @@ void SAL_CALL OFileTable::disposing()
FileClose();
}
-Sequence< sal_Int8 > OFileTable::getUnoTunnelId()
-{
- static ::cppu::OImplementationId s_Id;
-
- return s_Id.getImplementationId();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OFileTable::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return isUnoTunnelId<OFileTable>(rId)
- ? reinterpret_cast< sal_Int64 >( this )
- : OTable_TYPEDEF::getSomething(rId);
-}
-
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..eda988d9bb44 100644
--- a/connectivity/source/drivers/file/FTables.cxx
+++ b/connectivity/source/drivers/file/FTables.cxx
@@ -23,10 +23,8 @@
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*/)
{
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 6e1a0cdf54e5..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;
@@ -231,7 +230,7 @@ bool OOp_COMPARE::operate(const OOperand* pLeft, const OOperand* pRight) const
case DataType::VARCHAR:
case DataType::LONGVARCHAR:
{
- OUString sLH = aLH, sRH = aRH;
+ OUString sLH = aLH.getString(), sRH = aRH.getString();
sal_Int32 nRes = sLH.compareToIgnoreAsciiCase(sRH);
switch(aPredicateType)
{
@@ -256,7 +255,7 @@ bool OOp_COMPARE::operate(const OOperand* pLeft, const OOperand* pRight) const
case DataType::DATE:
case DataType::TIME:
{
- double n = aLH ,m = aRH;
+ double n = aLH.getDouble(), m = aRH.getDouble();
switch (aPredicateType)
{
@@ -285,7 +284,7 @@ void ONumOperator::Exec(OCodeStack& rCodeStack)
OOperand *pLeft = rCodeStack.top();
rCodeStack.pop();
- rCodeStack.push(new OOperandResultNUM(operate(pLeft->getValue(), pRight->getValue())));
+ rCodeStack.push(new OOperandResultNUM(operate(pLeft->getValue().getDouble(), pRight->getValue().getDouble())));
if( typeid(OOperandResult) == typeid(*pLeft))
delete pLeft;
if( typeid(OOperandResult) == typeid(*pRight))
diff --git a/connectivity/source/drivers/file/fcomp.cxx b/connectivity/source/drivers/file/fcomp.cxx
index be01a70ed360..45c9022340a9 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>
@@ -353,29 +350,29 @@ void OPredicateCompiler::execute_BETWEEN(OSQLParseNode const * pPredicateNode)
break;
case DataType::DECIMAL:
case DataType::NUMERIC:
- pOb1->setValue(static_cast<double>(pOb1->getValue()));
- pOb2->setValue(static_cast<double>(pOb2->getValue()));
+ pOb1->setValue(pOb1->getValue().getDouble());
+ pOb2->setValue(pOb2->getValue().getDouble());
break;
case DataType::FLOAT:
- pOb1->setValue(static_cast<float>(pOb1->getValue()));
- pOb2->setValue(static_cast<float>(pOb2->getValue()));
+ pOb1->setValue(pOb1->getValue().getFloat());
+ pOb2->setValue(pOb2->getValue().getFloat());
break;
case DataType::DOUBLE:
case DataType::REAL:
- pOb1->setValue(static_cast<double>(pOb1->getValue()));
- pOb2->setValue(static_cast<double>(pOb2->getValue()));
+ pOb1->setValue(pOb1->getValue().getDouble());
+ pOb2->setValue(pOb2->getValue().getDouble());
break;
case DataType::DATE:
- pOb1->setValue(static_cast<util::Date>(pOb1->getValue()));
- pOb2->setValue(static_cast<util::Date>(pOb2->getValue()));
+ pOb1->setValue(pOb1->getValue().getDate());
+ pOb2->setValue(pOb2->getValue().getDate());
break;
case DataType::TIME:
- pOb1->setValue(static_cast<util::Time>(pOb1->getValue()));
- pOb2->setValue(static_cast<util::Time>(pOb2->getValue()));
+ pOb1->setValue(pOb1->getValue().getTime());
+ pOb2->setValue(pOb2->getValue().getTime());
break;
case DataType::TIMESTAMP:
- pOb1->setValue(static_cast<util::DateTime>(pOb1->getValue()));
- pOb2->setValue(static_cast<util::DateTime>(pOb2->getValue()));
+ pOb1->setValue(pOb1->getValue().getDateTime());
+ pOb2->setValue(pOb2->getValue().getDateTime());
break;
}
}
diff --git a/connectivity/source/drivers/firebird/Blob.cxx b/connectivity/source/drivers/firebird/Blob.cxx
index d254ba49431a..26a5deaca0b4 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;
@@ -122,28 +122,31 @@ sal_uInt16 Blob::getMaximumSegmentSize()
return m_nMaxSegmentSize;
}
-bool Blob::readOneSegment(uno::Sequence< sal_Int8 >& rDataOut)
+bool Blob::readOneSegment(std::vector<char>& rDataOut)
{
checkDisposed(Blob_BASE::rBHelper.bDisposed);
ensureBlobIsOpened();
sal_uInt16 nMaxSize = getMaximumSegmentSize();
- if(rDataOut.getLength() < nMaxSize)
- rDataOut.realloc(nMaxSize);
+ if(rDataOut.size() < nMaxSize)
+ rDataOut.resize(nMaxSize);
sal_uInt16 nActualSize = 0;
ISC_STATUS aRet = isc_get_segment(m_statusVector,
&m_blobHandle,
&nActualSize,
nMaxSize,
- reinterpret_cast<char*>(rDataOut.getArray()) );
+ rDataOut.data() );
if (aRet && aRet != isc_segstr_eof && IndicatesError(m_statusVector))
{
OUString sError(StatusVectorToString(m_statusVector, u"isc_get_segment"));
throw IOException(sError, *this);
}
+
+ if (rDataOut.size() > nActualSize)
+ rDataOut.resize(nActualSize);
m_nBlobPosition += nActualSize;
return aRet == isc_segstr_eof; // last segment read
}
diff --git a/connectivity/source/drivers/firebird/Blob.hxx b/connectivity/source/drivers/firebird/Blob.hxx
index 322649762c71..990108934bf2 100644
--- a/connectivity/source/drivers/firebird/Blob.hxx
+++ b/connectivity/source/drivers/firebird/Blob.hxx
@@ -16,6 +16,8 @@
#include <com/sun/star/io/XInputStream.hpp>
#include <com/sun/star/sdbc/XBlob.hpp>
+#include <vector>
+
namespace connectivity::firebird
{
typedef ::cppu::WeakComponentImplHelper< css::sdbc::XBlob,
@@ -59,7 +61,7 @@ namespace connectivity::firebird
isc_tr_handle* pTransactionHandle,
ISC_QUAD const & aBlobID);
- bool readOneSegment(css::uno::Sequence< sal_Int8 >& rDataOut);
+ bool readOneSegment(std::vector<char>& rDataOut);
// ---- XBlob ----------------------------------------------------
virtual sal_Int64 SAL_CALL
diff --git a/connectivity/source/drivers/firebird/Catalog.cxx b/connectivity/source/drivers/firebird/Catalog.cxx
index c743b42cc75f..2ef4f514b12a 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>
@@ -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(), "%", "%", { "VIEW" });
+
+ 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 ---------------------------------------------------
diff --git a/connectivity/source/drivers/firebird/Catalog.hxx b/connectivity/source/drivers/firebird/Catalog.hxx
index 4a562e22a26e..3ffb9238eda7 100644
--- a/connectivity/source/drivers/firebird/Catalog.hxx
+++ b/connectivity/source/drivers/firebird/Catalog.hxx
@@ -30,6 +30,9 @@ namespace connectivity::firebird
// 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 358451738003..dde050edee3a 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"
@@ -54,13 +52,11 @@ sal_Int64 SAL_CALL Clob::length()
// Read each segment, and calculate it's size by interpreting it as a
// character stream. Assume that no characters are split by the segments.
bool bLastSegmRead = false;
+ std::vector<char> aSegmentBytes;
do
{
- uno::Sequence < sal_Int8 > aSegmentBytes;
bLastSegmRead = m_aBlob->readOneSegment( aSegmentBytes );
- OUString sSegment ( reinterpret_cast< char *>( aSegmentBytes.getArray() ),
- aSegmentBytes.getLength(),
- RTL_TEXTENCODING_UTF8 );
+ OUString sSegment(aSegmentBytes.data(), aSegmentBytes.size(), RTL_TEXTENCODING_UTF8);
if( !bLastSegmRead)
m_nCharCount += sSegment.getLength();
@@ -73,60 +69,51 @@ sal_Int64 SAL_CALL Clob::length()
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);
+ --nPosition; // make 0-based
+
+ if (nLength < 0)
+ throw lang::IllegalArgumentException("nLength < 0", *this, 0);
+
MutexGuard aGuard(m_aMutex);
checkDisposed(Clob_BASE::rBHelper.bDisposed);
// TODO do not reset position if it is not necessary
m_aBlob->closeInput(); // reset position
OUStringBuffer sSegmentBuffer;
- sal_Int64 nActPos = 1;
- sal_Int32 nActLen = 0;
+ std::vector<char> aSegmentBytes;
- // skip irrelevant parts
- while( nActPos < nPosition )
+ for (;;)
{
- uno::Sequence < sal_Int8 > aSegmentBytes;
bool bLastRead = m_aBlob->readOneSegment( aSegmentBytes );
- if( bLastRead )
- throw lang::IllegalArgumentException("nPosition out of range", *this, 0);
-
- OUString sSegment ( reinterpret_cast< char *>( aSegmentBytes.getArray() ),
- aSegmentBytes.getLength(),
- RTL_TEXTENCODING_UTF8 );
- sal_Int32 nStrLen = sSegment.getLength();
- nActPos += nStrLen;
- if( nActPos > nPosition )
+ // TODO: handle possible case of split UTF-8 character
+ OUString sSegment(aSegmentBytes.data(), aSegmentBytes.size(), RTL_TEXTENCODING_UTF8);
+
+ // skip irrelevant parts
+ if (sSegment.getLength() < nPosition)
{
- sal_Int32 nCharsToCopy = static_cast<sal_Int32>(nActPos - nPosition);
- if( nCharsToCopy > nLength )
- nCharsToCopy = nLength;
- // append relevant part of first segment
- sSegmentBuffer.append( sSegment.subView(0, nCharsToCopy) );
- nActLen += sSegmentBuffer.getLength();
+ if (bLastRead)
+ throw lang::IllegalArgumentException("nPosition out of range", *this, 0);
+ nPosition -= sSegment.getLength();
+ continue;
}
- }
- // read nLength characters
- while( nActLen < nLength )
- {
- uno::Sequence < sal_Int8 > aSegmentBytes;
- bool bLastRead = m_aBlob->readOneSegment( aSegmentBytes );
+ // Getting here for the first time, nPosition may be > 0, meaning copy start offset.
+ // This also handles sSegment.getLength() == nPosition case, including nLength == 0.
+ const sal_Int32 nCharsToCopy = std::min<sal_Int32>(sSegment.getLength() - nPosition,
+ nLength - sSegmentBuffer.getLength());
+ sSegmentBuffer.append(sSegment.subView(nPosition, nCharsToCopy));
+ if (sSegmentBuffer.getLength() == nLength)
+ return sSegmentBuffer.makeStringAndClear();
+
+ assert(sSegmentBuffer.getLength() < nLength);
- OUString sSegment ( reinterpret_cast< char *>( aSegmentBytes.getArray() ),
- aSegmentBytes.getLength(),
- RTL_TEXTENCODING_UTF8 );
- sal_Int32 nStrLen = sSegment.getLength();
- if( nActLen + nStrLen > nLength )
- sSegmentBuffer.append(sSegment.subView(0, nLength - nActLen));
- else
- sSegmentBuffer.append(sSegment);
- nActLen += nStrLen;
-
- if( bLastRead && nActLen < nLength )
+ if (bLastRead)
throw lang::IllegalArgumentException("out of range", *this, 0);
- }
- return sSegmentBuffer.makeStringAndClear();
+ nPosition = 0; // No offset after first append
+ }
}
uno::Reference< XInputStream > SAL_CALL Clob::getCharacterStream()
@@ -147,7 +134,7 @@ sal_Int64 SAL_CALL Clob::position(const OUString& /*rPattern*/,
sal_Int64 SAL_CALL Clob::positionOfClob(const Reference <XClob >& /*rPattern*/,
sal_Int64 /*aStart*/)
{
- ::dbtools::throwFeatureNotImplementedSQLException("Blob::positionOfBlob", *this);
+ ::dbtools::throwFeatureNotImplementedSQLException("Clob::positionOfClob", *this);
return 0;
}
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/Connection.cxx b/connectivity/source/drivers/firebird/Connection.cxx
index 5c5d03579c1e..5a2be8872485 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"
@@ -44,11 +43,12 @@
#include <resource/sharedresources.hxx>
#include <comphelper/processfactory.hxx>
+#include <comphelper/servicehelper.hxx>
#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>
#include <sal/log.hxx>
@@ -72,16 +72,14 @@ 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)
- , m_sConnectionURL()
- , m_sFirebirdURL()
, m_bIsEmbedded(false)
, m_bIsFile(false)
, m_bIsAutoCommit(true)
@@ -96,7 +94,6 @@ Connection::Connection()
#endif
, m_xCatalog(nullptr)
, m_xMetaData(nullptr)
- , m_aStatements()
{
}
@@ -164,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";
@@ -199,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;
@@ -208,19 +205,19 @@ void Connection::construct(const OUString& url, const Sequence< PropertyValue >&
if (!xFileAccess->exists(m_sFirebirdURL))
bIsNewDatabase = true;
- m_sFirebirdURL = m_sFirebirdURL.copy(OUString("file://").getLength());
+ osl::FileBase::getSystemPathFromFileURL(m_sFirebirdURL, m_sFirebirdURL);
}
}
std::string dpbBuffer;
{
- char userName[256] = "";
- char userPassword[256] = "";
+ OString userName;
+ OString userPassword;
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";
@@ -236,38 +233,57 @@ void Connection::construct(const OUString& url, const Sequence< PropertyValue >&
if (m_bIsEmbedded || m_bIsFile)
{
- strcpy(userName,"sysdba");
- strcpy(userPassword,"masterkey");
+ userName = "sysdba"_ostr;
+ userPassword = "masterkey"_ostr;
}
else
{
- // TODO: parse password from connection string as needed?
+ for (const auto& rIter : info)
+ {
+ if (rIter.Name == "user")
+ {
+ if (OUString value; rIter.Value >>= value)
+ userName = OUStringToOString(value, RTL_TEXTENCODING_UTF8);
+ }
+ else if (rIter.Name == "password")
+ {
+ if (OUString value; rIter.Value >>= value)
+ userPassword = OUStringToOString(value, RTL_TEXTENCODING_UTF8);
+ }
+ }
}
- if (strlen(userName))
+ if (!userName.isEmpty())
{
- int nUsernameLength = strlen(userName);
+ const sal_Int32 nMaxUsername = 255; //max size
+ int nUsernameLength = std::min(userName.getLength(), nMaxUsername);
dpbBuffer.push_back(isc_dpb_user_name);
dpbBuffer.push_back(nUsernameLength);
- dpbBuffer.append(userName);
+ dpbBuffer.append(userName.getStr(), nUsernameLength);
}
- if (strlen(userPassword))
+ if (!userPassword.isEmpty())
{
- int nPasswordLength = strlen(userPassword);
+ const sal_Int32 nMaxPassword = 255; //max size
+ int nPasswordLength = std::min(userPassword.getLength(), nMaxPassword);
dpbBuffer.push_back(isc_dpb_password);
dpbBuffer.push_back(nPasswordLength);
- dpbBuffer.append(userPassword);
+ dpbBuffer.append(userPassword.getStr(), nPasswordLength);
}
}
+ // use isc_dpb_utf8_filename to identify encoding of filenames
+ dpbBuffer.push_back(isc_dpb_utf8_filename);
+ dpbBuffer.push_back(0); // no filename here, it is passed to functions directly
+
ISC_STATUS_ARRAY status; /* status vector */
ISC_STATUS aErr;
+ const OString sFirebirdURL = OUStringToOString(m_sFirebirdURL, RTL_TEXTENCODING_UTF8);
if (bIsNewDatabase)
{
aErr = isc_create_database(status,
- m_sFirebirdURL.getLength(),
- OUStringToOString(m_sFirebirdURL,RTL_TEXTENCODING_UTF8).getStr(),
+ sFirebirdURL.getLength(),
+ sFirebirdURL.getStr(),
&m_aDBHandle,
dpbBuffer.size(),
dpbBuffer.c_str(),
@@ -285,8 +301,8 @@ void Connection::construct(const OUString& url, const Sequence< PropertyValue >&
}
aErr = isc_attach_database(status,
- m_sFirebirdURL.getLength(),
- OUStringToOString(m_sFirebirdURL, RTL_TEXTENCODING_UTF8).getStr(),
+ sFirebirdURL.getLength(),
+ sFirebirdURL.getStr(),
&m_aDBHandle,
dpbBuffer.size(),
dpbBuffer.c_str());
@@ -323,12 +339,6 @@ 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")
@@ -342,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;
}
@@ -355,10 +365,23 @@ Reference< XClob> Connection::createClob(ISC_QUAD const * pBlobId)
&m_aTransactionHandle,
*pBlobId);
- m_aStatements.push_back(WeakReferenceHelper(xReturn));
+ m_aStatements.emplace_back(xReturn);
return xReturn;
}
+//----- XUnoTunnel ----------------------------------------------------------
+// virtual
+sal_Int64 SAL_CALL Connection::getSomething(const css::uno::Sequence<sal_Int8>& rId)
+{
+ return comphelper::getSomethingImpl(rId, this);
+}
+
+// static
+const css::uno::Sequence<sal_Int8> & Connection::getUnoTunnelId()
+{
+ static const comphelper::UnoIdInit implId;
+ return implId.getSeq();
+}
//----- XConnection ----------------------------------------------------------
Reference< XStatement > SAL_CALL Connection::createStatement( )
@@ -373,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;
}
@@ -389,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;
}
@@ -411,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;
}
@@ -600,22 +622,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)
{
@@ -798,42 +816,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*/)
{
@@ -914,17 +899,43 @@ void Connection::disposing()
evaluateStatusVector(status, u"isc_detach_database", *this);
}
}
- // TODO: write to storage again?
+
+ storeDatabase();
cppu::WeakComponentImplHelperBase::disposing();
- if (m_pDatabaseFileDir)
+ m_pDatabaseFileDir.reset();
+}
+
+void Connection::storeDatabase()
+{
+ MutexGuard aGuard(m_aMutex);
+ if (m_bIsEmbedded && m_xEmbeddedStorage.is())
{
- ::utl::removeTree(m_pDatabaseFileDir->GetURL());
- m_pDatabaseFileDir.reset();
+ 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;
+ 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);
diff --git a/connectivity/source/drivers/firebird/Connection.hxx b/connectivity/source/drivers/firebird/Connection.hxx
index eba3b9710952..16ac0ffa278d 100644
--- a/connectivity/source/drivers/firebird/Connection.hxx
+++ b/connectivity/source/drivers/firebird/Connection.hxx
@@ -33,6 +33,7 @@
#include <com/sun/star/document/XDocumentEventListener.hpp>
#include <com/sun/star/embed/XStorage.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
#include <com/sun/star/sdbc/XBlob.hpp>
#include <com/sun/star/sdbc/XClob.hpp>
#include <com/sun/star/sdbc/XConnection.hpp>
@@ -45,6 +46,7 @@ namespace connectivity::firebird
typedef ::cppu::WeakComponentImplHelper< css::document::XDocumentEventListener,
css::lang::XServiceInfo,
+ css::lang::XUnoTunnel,
css::sdbc::XConnection,
css::sdbc::XWarningsSupplier
> Connection_BASE;
@@ -102,7 +104,7 @@ namespace connectivity::firebird
* The extracted .fbk is written in firebird.fbk, the temporary
* .fdb is stored as firebird.fdb.
*/
- std::unique_ptr< ::utl::TempFile > m_pDatabaseFileDir;
+ std::unique_ptr< ::utl::TempFileNamed > m_pDatabaseFileDir;
/**
* Path for our extracted .fbk file.
*
@@ -170,16 +172,6 @@ namespace connectivity::firebird
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.
@@ -201,11 +193,19 @@ namespace connectivity::firebird
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;
diff --git a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx
index fde8809ec867..37c2ffe72c3d 100644
--- a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx
+++ b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx
@@ -801,7 +801,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTableTypes( )
aRow[1] = new ORowSetValueDecorator(OUString("SYSTEM TABLE"));
aResults.push_back(aRow);
- pResultSet->setRows(aResults);
+ pResultSet->setRows(std::move(aResults));
return pResultSet;
}
@@ -821,14 +821,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
@@ -842,7 +842,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
aRow[6] = new ORowSetValueDecorator(OUString("length")); // 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);
@@ -854,7 +854,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
aRow[6] = new ORowSetValueDecorator(OUString("length")); // 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);
@@ -888,7 +888,7 @@ 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(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,7 +904,7 @@ 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
}
@@ -928,7 +928,7 @@ 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
@@ -972,7 +972,7 @@ 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(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);
@@ -984,7 +984,7 @@ 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(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);
@@ -996,7 +996,7 @@ 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(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);
@@ -1008,7 +1008,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
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);
@@ -1020,13 +1020,14 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo()
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;
}();
- pResultSet->setRows(aResults);
+ // [-loplugin:redundantfcast] false positive:
+ pResultSet->setRows(ODatabaseMetaDataResultSet::ORows(aResults));
return pResultSet;
}
@@ -1099,7 +1100,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumnPrivileges(
aResults.push_back(aCurrentRow);
}
- pResultSet->setRows( aResults );
+ pResultSet->setRows( std::move(aResults) );
return pResultSet;
}
@@ -1307,7 +1308,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns(
}
rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new
ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eColumns);
- pResultSet->setRows( aResults );
+ pResultSet->setRows( std::move(aResults) );
return pResultSet;
}
@@ -1339,8 +1340,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 +1409,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";
}
@@ -1417,14 +1421,14 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables(
uno::Reference< XClob > xClob = xRow->getClob(4);
if (xClob.is())
{
- aCurrentRow[5] = new ORowSetValueDecorator(xClob->getSubString(0, xClob->length()));
+ aCurrentRow[5] = new ORowSetValueDecorator(xClob->getSubString(1, xClob->length()));
}
}
aResults.push_back(aCurrentRow);
}
- pResultSet->setRows( aResults );
+ pResultSet->setRows( std::move(aResults) );
return pResultSet;
}
@@ -1473,7 +1477,7 @@ 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();
@@ -1552,7 +1556,7 @@ uno::Reference< XResultSet > ODatabaseMetaData::lcl_getKeys(const bool bIsImport
aResults.push_back(aCurrentRow);
}
- pResultSet->setRows( aResults );
+ pResultSet->setRows( std::move(aResults) );
return pResultSet;
}
@@ -1606,7 +1610,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getPrimaryKeys(
}
rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new
ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::ePrimaryKeys);
- pResultSet->setRows( aResults );
+ pResultSet->setRows( std::move(aResults) );
return pResultSet;
}
@@ -1676,7 +1680,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)));
@@ -1698,8 +1702,8 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getIndexInfo(
aResults.push_back(aCurrentRow);
}
rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new
- ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::ePrimaryKeys);
- pResultSet->setRows( aResults );
+ ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eIndexInfo);
+ pResultSet->setRows( std::move(aResults) );
return pResultSet;
}
@@ -1769,12 +1773,12 @@ 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);
}
- pResultSet->setRows( aResults );
+ pResultSet->setRows( std::move(aResults) );
return pResultSet;
}
diff --git a/connectivity/source/drivers/firebird/Driver.cxx b/connectivity/source/drivers/firebird/Driver.cxx
index 1d452eb1c593..3aa903d48abf 100644
--- a/connectivity/source/drivers/firebird/Driver.cxx
+++ b/connectivity/source/drivers/firebird/Driver.cxx
@@ -25,12 +25,12 @@
#include <strings.hrc>
#include <resource/sharedresources.hxx>
+#include <comphelper/servicehelper.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <osl/file.hxx>
#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;
@@ -45,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
};
@@ -62,12 +62,14 @@ FirebirdDriver::FirebirdDriver(const css::uno::Reference< css::uno::XComponentCo
// ::utl::TempFile uses a unique temporary directory (subdirectory of
// /tmp or other user specific tmp directory) per instance in which
// we can create directories for firebird at will.
+ m_firebirdTMPDirectory.EnableKillingFile(true);
+ 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,
@@ -76,7 +78,7 @@ FirebirdDriver::FirebirdDriver(const css::uno::Reference< css::uno::XComponentCo
::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.
@@ -84,16 +86,12 @@ 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*/
}
-FirebirdDriver::~FirebirdDriver()
-{
- utl::removeTree(m_firebirdTMPDirectory.GetURL());
- utl::removeTree(m_firebirdLockDirectory.GetURL());
-}
+FirebirdDriver::~FirebirdDriver() = default;
void FirebirdDriver::disposing()
{
@@ -107,13 +105,13 @@ void FirebirdDriver::disposing()
}
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*/
@@ -153,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.emplace_back(*pCon);
return pCon;
}
@@ -192,8 +190,9 @@ sal_Int32 SAL_CALL FirebirdDriver::getMinorVersion( )
uno::Reference< XTablesSupplier > SAL_CALL FirebirdDriver::getDataDefinitionByConnection(
const uno::Reference< XConnection >& rConnection)
{
- Connection* pConnection = static_cast< Connection* >(rConnection.get());
- return pConnection->createCatalog();
+ if (Connection* pConnection = comphelper::getFromUnoTunnel<Connection>(rConnection))
+ return pConnection->createCatalog();
+ return {};
}
uno::Reference< XTablesSupplier > SAL_CALL FirebirdDriver::getDataDefinitionByURL(
diff --git a/connectivity/source/drivers/firebird/Driver.hxx b/connectivity/source/drivers/firebird/Driver.hxx
index d8ce92b0ed93..d884b5008d6a 100644
--- a/connectivity/source/drivers/firebird/Driver.hxx
+++ b/connectivity/source/drivers/firebird/Driver.hxx
@@ -33,7 +33,9 @@ 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;
+ // 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,
@@ -43,8 +45,8 @@ namespace connectivity::firebird
{
private:
css::uno::Reference<css::uno::XComponentContext> m_aContext;
- ::utl::TempFile m_firebirdTMPDirectory;
- ::utl::TempFile m_firebirdLockDirectory;
+ ::utl::TempFileNamed m_firebirdTMPDirectory;
+ ::utl::TempFileNamed m_firebirdLockDirectory;
protected:
::osl::Mutex m_aMutex; // mutex is need to control member access
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/PreparedStatement.cxx b/connectivity/source/drivers/firebird/PreparedStatement.cxx
index 3b5511518957..35847d021ea0 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"
@@ -52,6 +50,8 @@ using namespace com::sun::star::util;
IMPLEMENT_SERVICE_INFO(OPreparedStatement,"com.sun.star.sdbcx.firebird.PreparedStatement","com.sun.star.sdbc.PreparedStatement");
+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,
const OUString& sql)
@@ -81,9 +81,7 @@ void OPreparedStatement::ensurePrepared()
m_pInSqlda->sqln = 10;
}
- prepareAndDescribeStatement(m_sSqlStatement,
- m_pOutSqlda,
- m_pInSqlda);
+ prepareAndDescribeStatement(m_sSqlStatement, m_pOutSqlda);
aErr = isc_dsql_describe_bind(m_statusVector,
&m_aStatementHandle,
@@ -211,7 +209,8 @@ void SAL_CALL OPreparedStatement::setString(sal_Int32 nParameterIndex,
{
str = str.copy(0, max_varchar_len);
}
- const auto nLength = str.getLength();
+ const sal_uInt16 nLength = str.getLength();
+ static_assert(sizeof(nLength) == 2, "must match dest memcpy len");
memcpy(pVar->sqldata, &nLength, 2);
// Actual data
memcpy(pVar->sqldata + 2, str.getStr(), str.getLength());
@@ -264,6 +263,12 @@ void SAL_CALL OPreparedStatement::setString(sal_Int32 nParameterIndex,
setBoolean(nParameterIndex, boolValue);
break;
}
+ case SQL_NULL:
+ {
+ // 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",
@@ -329,9 +334,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.
}
@@ -377,7 +379,7 @@ sal_Int64 toNumericWithoutDecimalPlace(const OUString& sSource)
sBuffer.append(sNumber.subView(0, nDotIndex));
}
sBuffer.append(sNumber.subView(nDotIndex + 1));
- return sBuffer.makeStringAndClear().toInt64();
+ return o3tl::toInt64(sBuffer);
}
}
@@ -565,7 +567,7 @@ void OPreparedStatement::openBlobForWriting(isc_blob_handle& rBlobHandle, ISC_QU
if (aErr)
{
evaluateStatusVector(m_statusVector,
- OUString("setBlob failed on " + m_sSqlStatement),
+ Concat2View("setBlob failed on " + m_sSqlStatement),
*this);
assert(false);
}
@@ -607,9 +609,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(
@@ -658,10 +660,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.
@@ -780,7 +813,7 @@ void SAL_CALL OPreparedStatement::setObjectWithInfo( sal_Int32 parameterIndex, c
sBuffer.append(sValue);
if(sValue.indexOf('.') != -1) // there is a dot
{
- for(sal_Int32 i=sValue.copy(sValue.indexOf('.')+1).getLength(); i<scale;i++)
+ for(sal_Int32 i=sValue.subView(sValue.indexOf('.')+1).size(); i<scale;i++)
{
sBuffer.append('0');
}
@@ -906,7 +939,7 @@ void SAL_CALL OPreparedStatement::setBytes(sal_Int32 nParameterIndex,
{
xBytesCopy.realloc( nMaxSize );
}
- const auto nSize = xBytesCopy.getLength();
+ const sal_uInt16 nSize = xBytesCopy.getLength();
// 8000 corresponds to value from lcl_addDefaultParameters
// in dbaccess/source/filter/hsqldb/createparser.cxx
if (nSize > 8000)
@@ -914,6 +947,7 @@ 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
@@ -921,9 +955,12 @@ void SAL_CALL OPreparedStatement::setBytes(sal_Int32 nParameterIndex,
}
else if( dType == SQL_TEXT )
{
+ if (pVar->sqllen < xBytes.getLength())
+ dbtools::throwSQLException("Data too big for this field",
+ 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
diff --git a/connectivity/source/drivers/firebird/ResultSet.cxx b/connectivity/source/drivers/firebird/ResultSet.cxx
index 0e0361a7bbd8..ea3ac86ae762 100644
--- a/connectivity/source/drivers/firebird/ResultSet.cxx
+++ b/connectivity/source/drivers/firebird/ResultSet.cxx
@@ -430,13 +430,29 @@ T OResultSet::retrieveValue(const sal_Int32 nColumnIndex, const ISC_SHORT nType)
if ((m_pSqlda->sqlvar[nColumnIndex-1].sqltype & ~1) == nType)
return *reinterpret_cast<T*>(m_pSqlda->sqlvar[nColumnIndex-1].sqldata);
else
- return retrieveValue< ORowSetValue >(nColumnIndex, 0);
+ {
+ ORowSetValue row = retrieveValue< ORowSetValue >(nColumnIndex, 0);
+ if constexpr ( std::is_same_v<sal_Int64, T> )
+ return row.getLong();
+ else if constexpr ( std::is_same_v<sal_Int32, T> )
+ return row.getInt32();
+ else if constexpr ( std::is_same_v<sal_Int16, T> )
+ return row.getInt16();
+ else if constexpr ( std::is_same_v<float, T> )
+ return row.getFloat();
+ else if constexpr ( std::is_same_v<double, T> )
+ return row.getDouble();
+ else if constexpr ( std::is_same_v<bool, T> )
+ return row.getBool();
+ else
+ return row;
+ }
}
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.
@@ -511,7 +527,7 @@ Date OResultSet::retrieveValue(const sal_Int32 nColumnIndex, const ISC_SHORT /*n
}
else
{
- return retrieveValue< ORowSetValue >(nColumnIndex, 0);
+ return retrieveValue< ORowSetValue >(nColumnIndex, 0).getDate();
}
}
@@ -534,7 +550,7 @@ Time OResultSet::retrieveValue(const sal_Int32 nColumnIndex, const ISC_SHORT /*n
}
else
{
- return retrieveValue< ORowSetValue >(nColumnIndex, 0);
+ return retrieveValue< ORowSetValue >(nColumnIndex, 0).getTime();
}
}
@@ -560,7 +576,7 @@ DateTime OResultSet::retrieveValue(const sal_Int32 nColumnIndex, const ISC_SHORT
}
else
{
- return retrieveValue< ORowSetValue >(nColumnIndex, 0);
+ return retrieveValue< ORowSetValue >(nColumnIndex, 0).getDateTime();
}
}
@@ -579,10 +595,11 @@ OUString OResultSet::retrieveValue(const sal_Int32 nColumnIndex, const ISC_SHORT
else if (aSqlType == SQL_VARYING)
{
// First 2 bytes are a short containing the length of the string
- // No idea if sqllen is still valid here?
+ // Under unclear conditions, it may be wrong and greater than sqllen.
sal_uInt16 aLength = *reinterpret_cast<sal_uInt16*>(m_pSqlda->sqlvar[nColumnIndex-1].sqldata);
+ // Use greater signed type sal_Int32 to get the minimum of two 16-bit values
return OUString(m_pSqlda->sqlvar[nColumnIndex-1].sqldata + 2,
- aLength,
+ std::min<sal_Int32>(aLength, m_pSqlda->sqlvar[nColumnIndex-1].sqllen),
RTL_TEXTENCODING_UTF8);
}
else if ((aSqlType == SQL_SHORT || aSqlType == SQL_LONG ||
@@ -610,11 +627,11 @@ OUString OResultSet::retrieveValue(const sal_Int32 nColumnIndex, const ISC_SHORT
else if(aSqlType == SQL_BLOB && aSqlSubType == static_cast<short>(BlobSubtype::Clob) )
{
uno::Reference<XClob> xClob = getClob(nColumnIndex);
- return xClob->getSubString( 0, xClob->length() );
+ return xClob->getSubString( 1, xClob->length() );
}
else
{
- return retrieveValue< ORowSetValue >(nColumnIndex, 0);
+ return retrieveValue< ORowSetValue >(nColumnIndex, 0).getString();
}
}
@@ -662,7 +679,7 @@ sal_Bool SAL_CALL OResultSet::getBoolean(sal_Int32 nColumnIndex)
sal_Int8 SAL_CALL OResultSet::getByte(sal_Int32 nColumnIndex)
{
// Not a native firebird type hence we always have to convert.
- return safelyRetrieveValue< ORowSetValue >(nColumnIndex);
+ return safelyRetrieveValue< ORowSetValue >(nColumnIndex).getInt8();
}
Sequence< sal_Int8 > SAL_CALL OResultSet::getBytes(sal_Int32 nColumnIndex)
diff --git a/connectivity/source/drivers/firebird/ResultSetMetaData.cxx b/connectivity/source/drivers/firebird/ResultSetMetaData.cxx
index 2ed46bae9b34..31a6796f5399 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();
@@ -128,9 +128,15 @@ 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;
}
@@ -184,34 +190,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 = getColumnName( 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 +232,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/Statement.cxx b/connectivity/source/drivers/firebird/Statement.cxx
index f4faebbf1a55..d135c4e4cda4 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&)
@@ -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/StatementCommonBase.cxx b/connectivity/source/drivers/firebird/StatementCommonBase.cxx
index 01ae41dca120..29ef5925657d 100644
--- a/connectivity/source/drivers/firebird/StatementCommonBase.cxx
+++ b/connectivity/source/drivers/firebird/StatementCommonBase.cxx
@@ -17,7 +17,6 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include "Driver.hxx"
#include "StatementCommonBase.hxx"
#include "Util.hxx"
@@ -44,7 +43,6 @@ using namespace ::com::sun::star::util;
using namespace ::comphelper;
using namespace ::osl;
-using namespace ::std;
OStatementCommonBase::OStatementCommonBase(Connection* _pConnection)
: OStatementCommonBase_Base(m_aMutex),
@@ -124,9 +122,7 @@ void SAL_CALL OStatementCommonBase::close()
dispose();
}
-void OStatementCommonBase::prepareAndDescribeStatement(std::u16string_view sql,
- XSQLDA*& pOutSqlda,
- XSQLDA* pInSqlda)
+void OStatementCommonBase::prepareAndDescribeStatement(std::u16string_view sql, XSQLDA*& pOutSqlda)
{
SolarMutexGuard g; // tdf#122129
@@ -156,8 +152,8 @@ void OStatementCommonBase::prepareAndDescribeStatement(std::u16string_view sql,
&m_aStatementHandle,
0,
OUStringToOString(sql, RTL_TEXTENCODING_UTF8).getStr(),
- FIREBIRD_SQL_DIALECT,
- pInSqlda);
+ SQL_DIALECT_CURRENT,
+ pOutSqlda);
if (aErr)
{
@@ -167,45 +163,30 @@ void OStatementCommonBase::prepareAndDescribeStatement(std::u16string_view sql,
}
else
{
- aErr = isc_dsql_describe(m_statusVector,
- &m_aStatementHandle,
- 1,
- pOutSqlda);
+ // Ensure we have enough space in pOutSqlda
+ if (pOutSqlda->sqld > pOutSqlda->sqln)
+ {
+ int n = pOutSqlda->sqld;
+ free(pOutSqlda);
+ pOutSqlda = static_cast<XSQLDA*>(calloc(1, XSQLDA_LENGTH(n)));
+ pOutSqlda->version = SQLDA_VERSION1;
+ pOutSqlda->sqln = n;
+ aErr = isc_dsql_describe(m_statusVector,
+ &m_aStatementHandle,
+ 1,
+ pOutSqlda);
+ }
+ // Process each XSQLVAR parameter structure in the output XSQLDA
if (aErr)
{
- // TODO: free statement handle, etc.?
evaluateStatusVector(m_statusVector,
u"isc_dsql_describe",
*this);
}
else
{
- // Ensure we have enough space in pOutSqlda
- if (pOutSqlda->sqld > pOutSqlda->sqln)
- {
- int n = pOutSqlda->sqld;
- free(pOutSqlda);
- pOutSqlda = static_cast<XSQLDA*>(calloc(1, XSQLDA_LENGTH(n)));
- pOutSqlda->version = SQLDA_VERSION1;
- pOutSqlda->sqln = n;
- aErr = isc_dsql_describe(m_statusVector,
- &m_aStatementHandle,
- 1,
- pOutSqlda);
- }
-
- // Process each XSQLVAR parameter structure in the output XSQLDA
- if (aErr)
- {
- evaluateStatusVector(m_statusVector,
- u"isc_dsql_describe",
- *this);
- }
- else
- {
- mallocSQLVAR(pOutSqlda);
- }
+ mallocSQLVAR(pOutSqlda);
}
}
if(aErr)
@@ -260,31 +241,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
+ }
+ }
+ };
}
@@ -432,30 +453,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 a8e3812cea6e..fa9cd790272e 100644
--- a/connectivity/source/drivers/firebird/StatementCommonBase.hxx
+++ b/connectivity/source/drivers/firebird/StatementCommonBase.hxx
@@ -84,9 +84,7 @@ namespace connectivity::firebird
virtual ~OStatementCommonBase() override;
/// @throws css::sdbc::SQLException
- void prepareAndDescribeStatement(std::u16string_view sqlIn,
- XSQLDA*& pOutSqlda,
- XSQLDA* pInSqlda=nullptr);
+ void prepareAndDescribeStatement(std::u16string_view sqlIn, XSQLDA*& pOutSqlda);
/// @throws css::sdbc::SQLException
short getSqlInfoItem(char aInfoItem);
diff --git a/connectivity/source/drivers/firebird/Table.cxx b/connectivity/source/drivers/firebird/Table.cxx
index f88b371d5705..871febcf5122 100644
--- a/connectivity/source/drivers/firebird/Table.cxx
+++ b/connectivity/source/drivers/firebird/Table.cxx
@@ -155,27 +155,14 @@ void SAL_CALL Table::alterColumnByName(const OUString& rColName,
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);
}
@@ -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..ed638a9c88ac 100644
--- a/connectivity/source/drivers/firebird/Table.hxx
+++ b/connectivity/source/drivers/firebird/Table.hxx
@@ -74,10 +74,6 @@ namespace connectivity::firebird
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;
-
};
} // namespace connectivity::firebird
diff --git a/connectivity/source/drivers/firebird/Tables.cxx b/connectivity/source/drivers/firebird/Tables.cxx
index 6db17afade71..e3440137381a 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;
@@ -81,7 +80,7 @@ OUString Tables::createStandardColumnPart(const Reference< XPropertySet >& xColP
xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_ISAUTOINCREMENT)) >>= bIsAutoIncrement;
const OUString sQuoteString = xMetaData->getIdentifierQuoteString();
- OUStringBuffer aSql = ::dbtools::quoteName(sQuoteString,::comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME))));
+ OUStringBuffer aSql(::dbtools::quoteName(sQuoteString,::comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME)))));
// check if the user enter a specific string to create autoincrement values
OUString sAutoIncrementValue;
@@ -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)
@@ -149,8 +145,8 @@ 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);
@@ -166,8 +162,8 @@ 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();
@@ -178,7 +174,7 @@ ObjectType Tables::appendObject(const OUString& rName,
else
{
if ( sSql.endsWith(",") )
- sSql = sSql.replaceAt(sSql.getLength()-1, 1, ")");
+ sSql = sSql.replaceAt(sSql.getLength()-1, 1, u")");
else
sSql += ")";
}
@@ -196,16 +192,34 @@ void Tables::dropObject(sal_Int32 nPosition, const OUString& sName)
if (ODescriptor::isNew(xTable))
return;
- OUStringBuffer sSql("DROP ");
-
OUString sType;
xTable->getPropertyValue("Type") >>= sType;
- sSql.append(sType);
const OUString sQuoteString = m_xMetaData->getIdentifierQuoteString();
- sSql.append(::dbtools::quoteName(sQuoteString,sName));
- m_xMetaData->getConnection()->createStatement()->execute(sSql.makeStringAndClear());
+ m_xMetaData->getConnection()->createStatement()->execute(
+ "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..ada1827097a5 100644
--- a/connectivity/source/drivers/firebird/Tables.hxx
+++ b/connectivity/source/drivers/firebird/Tables.hxx
@@ -13,6 +13,7 @@
#include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
#include <connectivity/sdbcx/VCollection.hxx>
+#include <utility>
namespace connectivity::firebird
{
@@ -40,10 +41,10 @@ namespace connectivity::firebird
const css::uno::Reference< css::beans::XPropertySet >& rDescriptor) override;
public:
- Tables(const css::uno::Reference< css::sdbc::XDatabaseMetaData >& rMetaData,
+ 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(rMetaData) {}
+ ::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.
@@ -51,6 +52,8 @@ namespace connectivity::firebird
// XDrop
virtual void dropObject(sal_Int32 nPosition, const OUString& rName) override;
+ void appendNew(const OUString& _rsNewTable);
+
};
} // namespace connectivity::firebird
diff --git a/connectivity/source/drivers/firebird/Users.cxx b/connectivity/source/drivers/firebird/Users.cxx
index 50cfef84be8c..10912d6be0ab 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;
diff --git a/connectivity/source/drivers/firebird/Util.cxx b/connectivity/source/drivers/firebird/Util.cxx
index 6cc70b4270f4..3cee5dab6e0b 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 (...)
@@ -342,8 +343,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 +390,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
@@ -408,22 +411,6 @@ 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, OUStringChar(aEscapeChar) + OUStringChar(aKey) );
- aIndex += 2;
- }
-
- return sRet;
-}
-
sal_Int64 firebird::pow10Integer(int nDecimalCount)
{
sal_Int64 nRet = 1;
diff --git a/connectivity/source/drivers/firebird/Util.hxx b/connectivity/source/drivers/firebird/Util.hxx
index 46fadebb1a20..db407ef98b38 100644
--- a/connectivity/source/drivers/firebird/Util.hxx
+++ b/connectivity/source/drivers/firebird/Util.hxx
@@ -14,6 +14,7 @@
#include <rtl/ustring.hxx>
#include <com/sun/star/uno/XInterface.hpp>
+#include <utility>
namespace connectivity::firebird
{
@@ -57,16 +58,16 @@ public:
*
*/
explicit ColumnTypeInfo( short aType, short aSubType = 0,
- short nScale = 0, const OUString& sCharset = OUString() )
+ short nScale = 0, OUString sCharset = OUString() )
: m_aType(aType)
, m_aSubType(aSubType)
, m_nScale(nScale)
- , m_sCharsetName(sCharset) {}
- explicit ColumnTypeInfo( short aType, const OUString& sCharset )
+ , m_sCharsetName(std::move(sCharset)) {}
+ explicit ColumnTypeInfo( short aType, OUString sCharset )
: m_aType(aType)
, m_aSubType(0)
, m_nScale(0)
- , m_sCharsetName(sCharset) {}
+ , m_sCharsetName(std::move(sCharset)) {}
short getType() const { return m_aType; }
short getSubType() const { return m_aSubType; }
short getScale() const { return m_nScale; }
@@ -86,7 +87,7 @@ public:
* 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);
+ OUString sanitizeIdentifier(std::u16string_view rIdentifier);
inline bool IndicatesError(const ISC_STATUS_ARRAY& rStatusVector)
{
@@ -118,7 +119,6 @@ public:
void freeSQLVAR(XSQLDA* pSqlda);
- OUString escapeWith( const OUString& sText, const char aKey, const char aEscapeChar);
sal_Int64 pow10Integer( int nDecimalCount );
}
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..2e5bec42adc3
--- /dev/null
+++ b/connectivity/source/drivers/firebird/Views.cxx
@@ -0,0 +1,112 @@
+/* -*- 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)
+{
+}
+
+connectivity::sdbcx::ObjectType 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
+connectivity::sdbcx::ObjectType 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("DROP VIEW");
+
+ 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..6887bdc66ed0
--- /dev/null
+++ b/connectivity/source/drivers/firebird/Views.hxx
@@ -0,0 +1,42 @@
+/* -*- 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 connectivity::sdbcx::ObjectType createObject(const OUString& _rName) override;
+ virtual void impl_refresh() override;
+ virtual css::uno::Reference<css::beans::XPropertySet> createDescriptor() override;
+ virtual sdbcx::ObjectType
+ 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..72b470235a01 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;
diff --git a/connectivity/source/drivers/flat/EColumns.cxx b/connectivity/source/drivers/flat/EColumns.cxx
index a9e210321ba6..56585f1e8059 100644
--- a/connectivity/source/drivers/flat/EColumns.cxx
+++ b/connectivity/source/drivers/flat/EColumns.cxx
@@ -23,10 +23,6 @@
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)
diff --git a/connectivity/source/drivers/flat/EConnection.cxx b/connectivity/source/drivers/flat/EConnection.cxx
index 288a53fa649a..a65470caaad9 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)
diff --git a/connectivity/source/drivers/flat/EDatabaseMetaData.cxx b/connectivity/source/drivers/flat/EDatabaseMetaData.cxx
index 0170c67ed3b0..729b55ef9e2d 100644
--- a/connectivity/source/drivers/flat/EDatabaseMetaData.cxx
+++ b/connectivity/source/drivers/flat/EDatabaseMetaData.cxx
@@ -47,13 +47,11 @@ 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 = [&]()
+ static ODatabaseMetaDataResultSet::ORows aRows = []()
{
- ODatabaseMetaDataResultSet::ORows tmp(10);
+ ODatabaseMetaDataResultSet::ORows tmp;
ODatabaseMetaDataResultSet::ORow aRow
{
ODatabaseMetaDataResultSet::getEmptyValue() ,
@@ -141,7 +139,7 @@ Reference< XResultSet > OFlatDatabaseMetaData::impl_getTypeInfo_throw( )
return tmp;
}();
- pResult->setRows(aRows);
+ pResult->setRows(std::move(aRows));
return pResult;
}
@@ -198,7 +196,7 @@ Reference< XResultSet > SAL_CALL OFlatDatabaseMetaData::getColumns(
aRow[11] = new ORowSetValueDecorator(getINT32(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISNULLABLE))));
aRow[13] = new ORowSetValueDecorator(getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE))));
- switch(static_cast<sal_Int32>(aRow[5]->getValue()))
+ switch(aRow[5]->getValue().getInt32())
{
case DataType::CHAR:
case DataType::VARCHAR:
@@ -211,7 +209,7 @@ Reference< XResultSet > SAL_CALL OFlatDatabaseMetaData::getColumns(
aRow[16] = new ORowSetValueDecorator(sal_Int32(0));
}
aRow[17] = new ORowSetValueDecorator(i);
- switch(sal_Int32(aRow[11]->getValue()))
+ switch(aRow[11]->getValue().getInt32())
{
case ColumnValue::NO_NULLS:
aRow[18] = new ORowSetValueDecorator(OUString("NO"));
@@ -229,7 +227,7 @@ Reference< XResultSet > SAL_CALL OFlatDatabaseMetaData::getColumns(
}
rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns);
- pResult->setRows(aRows);
+ pResult->setRows(std::move(aRows));
return pResult;
}
diff --git a/connectivity/source/drivers/flat/EDriver.cxx b/connectivity/source/drivers/flat/EDriver.cxx
index 29492895510e..034e1b0b97f4 100644
--- a/connectivity/source/drivers/flat/EDriver.cxx
+++ b/connectivity/source/drivers/flat/EDriver.cxx
@@ -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.emplace_back(*pCon);
return pCon;
}
diff --git a/connectivity/source/drivers/flat/EPreparedStatement.cxx b/connectivity/source/drivers/flat/EPreparedStatement.cxx
index f4095ac2c087..0ed4299258a2 100644
--- a/connectivity/source/drivers/flat/EPreparedStatement.cxx
+++ b/connectivity/source/drivers/flat/EPreparedStatement.cxx
@@ -22,7 +22,6 @@
using namespace connectivity::flat;
using namespace connectivity::file;
-using namespace ::com::sun::star::uno;
rtl::Reference<OResultSet> OFlatPreparedStatement::createResultSet()
{
diff --git a/connectivity/source/drivers/flat/EResultSet.cxx b/connectivity/source/drivers/flat/EResultSet.cxx
index baad465e3f2e..9d1975c77e45 100644
--- a/connectivity/source/drivers/flat/EResultSet.cxx
+++ b/connectivity/source/drivers/flat/EResultSet.cxx
@@ -96,7 +96,7 @@ Any SAL_CALL OFlatResultSet::getBookmark( )
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
- return makeAny(static_cast<sal_Int32>((*m_aRow)[0]->getValue()));
+ 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..df9fca5f58f2 100644
--- a/connectivity/source/drivers/flat/EStatement.cxx
+++ b/connectivity/source/drivers/flat/EStatement.cxx
@@ -22,7 +22,6 @@
using namespace connectivity::flat;
using namespace connectivity::file;
-using namespace css::uno;
rtl::Reference<OResultSet> OFlatStatement::createResultSet()
{
diff --git a/connectivity/source/drivers/flat/ETable.cxx b/connectivity/source/drivers/flat/ETable.cxx
index 2a7bd3d26362..9cab6b13da5a 100644
--- a/connectivity/source/drivers/flat/ETable.cxx
+++ b/connectivity/source/drivers/flat/ETable.cxx
@@ -27,10 +27,8 @@
#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 <cppuhelper/typeprovider.hxx>
#include <comphelper/numbers.hxx>
#include <comphelper/servicehelper.hxx>
#include <com/sun/star/util/NumberFormat.hpp>
@@ -65,6 +63,8 @@ void OFlatTable::fillColumns(const css::lang::Locale& _aLocale)
{
m_bNeedToReadLine = true; // we overwrite m_aCurrentLine, seek the stream, ...
m_pFileStream->Seek(0);
+ // tdf#123055 - start to read unicode text in order to avoid the BOM
+ m_pFileStream->StartReadingUnicodeText(RTL_TEXTENCODING_DONTKNOW);
m_aCurrentLine = QuotedTokenizedString();
bool bRead = true;
@@ -72,7 +72,8 @@ void OFlatTable::fillColumns(const css::lang::Locale& _aLocale)
const bool bHasHeaderLine = pConnection->isHeaderLine();
QuotedTokenizedString aHeaderLine;
- TRowPositionInFile rowPos(0, 0);
+ const sal_Int32 nPos = static_cast<sal_Int32>(m_pFileStream->Tell());
+ TRowPositionInFile rowPos(nPos, nPos);
sal_Int32 rowNum(0);
if ( bHasHeaderLine )
{
@@ -199,7 +200,7 @@ void OFlatTable::impl_fillColumnInfo_nothrow(QuotedTokenizedString const & aFirs
if ( io_nType != DataType::VARCHAR )
{
bool bNumeric = io_nType == DataType::SQLNULL || io_nType == DataType::DOUBLE || io_nType == DataType::DECIMAL || io_nType == DataType::INTEGER;
- sal_uLong nIndex = 0;
+ sal_Int32 nIndex = 0;
if ( bNumeric )
{
@@ -264,8 +265,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?
@@ -470,7 +471,7 @@ OUString OFlatTable::getEntry() const
if ( m_pConnection->matchesExtension( sExt ) )
{
if ( !sExt.isEmpty() )
- sName = sName.replaceAt(sName.getLength() - (sExt.getLength() + 1), sExt.getLength()+1, OUString());
+ sName = sName.replaceAt(sName.getLength() - (sExt.getLength() + 1), sExt.getLength()+1, u"");
if ( sName == m_Name )
{
Reference< XContentAccess > xContentAccess( xDir, UNO_QUERY );
@@ -501,7 +502,7 @@ void OFlatTable::refreshColumns()
if(m_xColumns)
m_xColumns->reFill(aVector);
else
- m_xColumns = new OFlatColumns(this,m_aMutex,aVector);
+ m_xColumns.reset(new OFlatColumns(this,m_aMutex,aVector));
}
@@ -544,26 +545,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 ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OFlatTable::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return (isUnoTunnelId<OFlatTable>(rId))
- ? reinterpret_cast< sal_Int64 >( this )
- : OFlatTable_BASE::getSomething(rId);
-}
-
bool OFlatTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool bRetrieveData)
{
*(*_rRow)[0] = m_nFilePos;
@@ -675,7 +660,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;
diff --git a/connectivity/source/drivers/flat/ETables.cxx b/connectivity/source/drivers/flat/ETables.cxx
index 2e4dd377ed83..3b0d039311fc 100644
--- a/connectivity/source/drivers/flat/ETables.cxx
+++ b/connectivity/source/drivers/flat/ETables.cxx
@@ -22,15 +22,8 @@
#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)
{
diff --git a/connectivity/source/drivers/hsqldb/HCatalog.cxx b/connectivity/source/drivers/hsqldb/HCatalog.cxx
index 1074be53559c..c51c9d15a520 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)
diff --git a/connectivity/source/drivers/hsqldb/HColumns.cxx b/connectivity/source/drivers/hsqldb/HColumns.cxx
index 3f03c3616bc1..e37f9fbd3a5e 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
diff --git a/connectivity/source/drivers/hsqldb/HConnection.cxx b/connectivity/source/drivers/hsqldb/HConnection.cxx
index c3ff0169cea7..28feb95fce9b 100644
--- a/connectivity/source/drivers/hsqldb/HConnection.cxx
+++ b/connectivity/source/drivers/hsqldb/HConnection.cxx
@@ -32,10 +32,11 @@
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/sdbc/XDatabaseMetaData2.hpp>
+#include <comphelper/propertyvalue.hxx>
#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>
@@ -280,8 +281,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'" );
@@ -315,13 +315,12 @@ namespace connectivity::hsqldb
xProvider.set( GraphicProvider::create(m_xContext) );
// ask the provider to obtain a graphic
- Sequence< PropertyValue > aMediaProperties( 1 );
- aMediaProperties[0].Name = "URL";
- aMediaProperties[0].Value <<= OUString(
- // load the graphic from the global graphic repository
- "private:graphicrepository/"
- // the relative path within the images.zip
- LINKED_TEXT_TABLE_IMAGE_RESOURCE);
+ Sequence< PropertyValue > aMediaProperties{ comphelper::makePropertyValue(
+ "URL", OUString(
+ // load the graphic from the global graphic repository
+ "private:graphicrepository/"
+ // the relative path within the images.zip
+ LINKED_TEXT_TABLE_IMAGE_RESOURCE)) };
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 e4d4e399ba2a..234fc969db63 100644
--- a/connectivity/source/drivers/hsqldb/HDriver.cxx
+++ b/connectivity/source/drivers/hsqldb/HDriver.cxx
@@ -50,7 +50,8 @@
#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 <memory>
@@ -68,9 +69,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;
@@ -213,14 +213,12 @@ namespace connectivity
aProperties.put( "JavaDriverClass",
OUString( "org.hsqldb.jdbcDriver" ) );
aProperties.put( "JavaDriverClassPath",
- OUString(
#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 );
@@ -235,14 +233,14 @@ namespace connectivity
// security: permitted Java classes
NamedValue aPermittedClasses(
"hsqldb.method_class_names",
- makeAny( lcl_getPermittedJavaMethods_nothrow( m_xContext ) )
+ Any( lcl_getPermittedJavaMethods_nothrow( m_xContext ) )
);
aProperties.put( "SystemProperties", 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 +249,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 +273,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 +288,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&)
{
@@ -333,7 +362,7 @@ namespace connectivity
if ( xOrig.is() )
{
// now we have to set the URL to get the correct answer for metadata()->getURL()
- auto pMetaConnection = comphelper::getUnoTunnelImplementation<OMetaConnection>(xOrig);
+ auto pMetaConnection = comphelper::getFromUnoTunnel<OMetaConnection>(xOrig);
if ( pMetaConnection )
pMetaConnection->setURL(url);
@@ -357,8 +386,7 @@ namespace connectivity
Reference<XTransactionBroadcaster> xBroad(xStorage,UNO_QUERY);
if ( xBroad.is() )
{
- Reference<XTransactionListener> xListener(*this,UNO_QUERY);
- xBroad->addTransactionListener(xListener);
+ xBroad->addTransactionListener(Reference<XTransactionListener>(this));
}
}
}
@@ -833,8 +861,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 4e939ad58603..8d15d487372a 100644
--- a/connectivity/source/drivers/hsqldb/HStorageAccess.cxx
+++ b/connectivity/source/drivers/hsqldb/HStorageAccess.cxx
@@ -22,15 +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>
-using namespace ::com::sun::star::container;
+#include <algorithm>
+
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) { \
@@ -146,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;
}
@@ -229,7 +228,7 @@ jint read_from_storage_stream_into_buffer( JNIEnv * env, jstring name, jstring k
if (nBytesRead <= 0)
return -1;
- env->SetByteArrayRegion(buffer,off,nBytesRead,reinterpret_cast<jbyte*>(&aData[0]));
+ env->SetByteArrayRegion(buffer,off,nBytesRead,reinterpret_cast<const jbyte*>(&aData[0]));
return nBytesRead;
}
@@ -299,10 +298,8 @@ extern "C" SAL_JNI_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_Nativ
}
Sequence< sal_Int32 > ch(4);
- for(sal_Int32 i = 0;i < 4; ++i)
- {
- ch[i] = static_cast<unsigned char>(aData[i]);
- }
+ std::transform(aData.begin(), aData.end(), ch.getArray(),
+ [](auto c) { return static_cast<unsigned char>(c); });
if ((ch[0] | ch[1] | ch[2] | ch[3]) < 0)
{
@@ -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
diff --git a/connectivity/source/drivers/hsqldb/HStorageMap.cxx b/connectivity/source/drivers/hsqldb/HStorageMap.cxx
index 63b5e0481c5c..01a9c3d34be3 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
{
@@ -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 89d75fac7e3d..63fe36a34a34 100644
--- a/connectivity/source/drivers/hsqldb/HTable.cxx
+++ b/connectivity/source/drivers/hsqldb/HTable.cxx
@@ -18,7 +18,6 @@
*/
#include <hsqldb/HTable.hxx>
-#include <cppuhelper/typeprovider.hxx>
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <com/sun/star/sdbcx/Privilege.hpp>
#include <comphelper/property.hxx>
@@ -30,7 +29,7 @@
#include <hsqldb/HColumns.hxx>
#include <TConnection.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
using namespace ::comphelper;
@@ -116,21 +115,6 @@ sdbcx::OCollection* OHSQLTable::createIndexes(const ::std::vector< OUString>& _r
return new OIndexesHelper(this,m_aMutex,_rNames);
}
-Sequence< sal_Int8 > OHSQLTable::getUnoTunnelId()
-{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OHSQLTable::getSomething( const Sequence< sal_Int8 > & rId )
-{
- return (isUnoTunnelId<OHSQLTable>(rId))
- ? reinterpret_cast< sal_Int64 >( this )
- : OTable_TYPEDEF::getSomething(rId);
-}
// XAlterTable
void SAL_CALL OHSQLTable::alterColumnByName( const OUString& colName, const Reference< XPropertySet >& descriptor )
@@ -262,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);
@@ -304,7 +288,7 @@ void OHSQLTable::executeStatement(const OUString& _rStatement )
{
OUString sSQL = _rStatement;
if(sSQL.endsWith(","))
- sSQL = sSQL.replaceAt(sSQL.getLength()-1, 1, ")");
+ sSQL = sSQL.replaceAt(sSQL.getLength()-1, 1, u")");
Reference< XStatement > xStmt = getConnection()->createStatement( );
if ( xStmt.is() )
diff --git a/connectivity/source/drivers/hsqldb/HTables.cxx b/connectivity/source/drivers/hsqldb/HTables.cxx
index e92629bbb0f2..002dfbf9a295 100644
--- a/connectivity/source/drivers/hsqldb/HTables.cxx
+++ b/connectivity/source/drivers/hsqldb/HTables.cxx
@@ -37,7 +37,6 @@ 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)
@@ -160,10 +159,10 @@ void OTables::appendNew(const OUString& _rsNewTable)
insertElement(_rsNewTable,nullptr);
// notify our container listeners
- ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_rsNewTable), Any(), Any());
- OInterfaceIteratorHelper2 aListenerLoop(m_aContainerListeners);
+ ContainerEvent aEvent(static_cast<XContainer*>(this), Any(_rsNewTable), Any(), Any());
+ OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners);
while (aListenerLoop.hasMoreElements())
- static_cast<XContainerListener*>(aListenerLoop.next())->elementInserted(aEvent);
+ aListenerLoop.next()->elementInserted(aEvent);
}
OUString OTables::getNameForObject(const sdbcx::ObjectType& _xObject)
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/HUser.cxx b/connectivity/source/drivers/hsqldb/HUser.cxx
index 2ed0c06262ff..f493e282a2b1 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();
}
diff --git a/connectivity/source/drivers/hsqldb/HUsers.cxx b/connectivity/source/drivers/hsqldb/HUsers.cxx
index 9fe31e58eb01..07a91e7cbed2 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,16 +31,14 @@ 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)
{
}
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..f80ec7716f09 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;
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 7ddf79aa5e77..58d351673480 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;
/*****************************************************************************/
@@ -277,7 +275,7 @@ extern "C" SAL_JNI_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_Stora
}
OSL_ENSURE(nLen >= nBytesRead,"Buffer is too small!");
OSL_ENSURE(aData.getLength() >= nBytesRead,"Buffer is too small!");
- env->SetByteArrayRegion(buffer, 0, nBytesRead, reinterpret_cast<jbyte*>(&aData[0]));
+ env->SetByteArrayRegion(buffer, 0, nBytesRead, reinterpret_cast<const jbyte*>(&aData[0]));
#ifdef HSQLDB_DBG
aDataLog.write( &aData[0], nBytesRead );
#endif
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 adacd5d7c166..4531fc9b8724 100644
--- a/connectivity/source/drivers/jdbc/Blob.cxx
+++ b/connectivity/source/drivers/jdbc/Blob.cxx
@@ -135,7 +135,7 @@ sal_Int64 SAL_CALL java_sql_Blob::positionOfBlob( const css::uno::Reference< css
::dbtools::throwFeatureNotImplementedSQLException( "XBlob::positionOfBlob", *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 patter into a byte[] -, we defer this functionality for the moment (hey, it was
+ // to translated pattern into a byte[] -, we defer this functionality for the moment (hey, it was
// unusable, anyway)
// #i57457#
return 0;
diff --git a/connectivity/source/drivers/jdbc/CallableStatement.cxx b/connectivity/source/drivers/jdbc/CallableStatement.cxx
index 884de3d4ce10..ae521efba11a 100644
--- a/connectivity/source/drivers/jdbc/CallableStatement.cxx
+++ b/connectivity/source/drivers/jdbc/CallableStatement.cxx
@@ -33,7 +33,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;
diff --git a/connectivity/source/drivers/jdbc/Clob.cxx b/connectivity/source/drivers/jdbc/Clob.cxx
index 135512d5a245..6108981aca89 100644
--- a/connectivity/source/drivers/jdbc/Clob.cxx
+++ b/connectivity/source/drivers/jdbc/Clob.cxx
@@ -122,7 +122,7 @@ sal_Int64 SAL_CALL java_sql_Clob::positionOfClob( const css::uno::Reference< css
::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 patter into a byte[] -, we defer this functionality for the moment (hey, it was
+ // 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;
diff --git a/connectivity/source/drivers/jdbc/ContextClassLoader.cxx b/connectivity/source/drivers/jdbc/ContextClassLoader.cxx
index 50e6bc632bc2..3ab1b88eb33b 100644
--- a/connectivity/source/drivers/jdbc/ContextClassLoader.cxx
+++ b/connectivity/source/drivers/jdbc/ContextClassLoader.cxx
@@ -43,33 +43,33 @@ namespace connectivity::jdbc
do // artificial loop for easier flow control
{
- LocalRef< jclass > threadClass( m_environment );
- threadClass.set( m_environment.FindClass( "java/lang/Thread" ) );
- if ( !threadClass.is() )
- break;
-
- jmethodID currentThreadMethod( m_environment.GetStaticMethodID(
- threadClass.get(), "currentThread", "()Ljava/lang/Thread;" ) );
- if ( currentThreadMethod == nullptr )
- break;
-
- m_currentThread.set( m_environment.CallStaticObjectMethod( threadClass.get(), currentThreadMethod ) );
- if ( !m_currentThread.is() )
- break;
-
- jmethodID getContextClassLoaderMethod( m_environment.GetMethodID(
- threadClass.get(), "getContextClassLoader", "()Ljava/lang/ClassLoader;" ) );
- if ( getContextClassLoaderMethod == nullptr )
- break;
- m_oldContextClassLoader.set( m_environment.CallObjectMethod( m_currentThread.get(), getContextClassLoaderMethod ) );
- LocalRef< jthrowable > throwable( m_environment, m_environment.ExceptionOccurred() );
- if ( throwable.is() )
- break;
-
- m_setContextClassLoaderMethod = m_environment.GetMethodID(
- threadClass.get(), "setContextClassLoader", "(Ljava/lang/ClassLoader;)V" );
- if ( m_setContextClassLoaderMethod == nullptr )
- break;
+ LocalRef< jclass > threadClass( m_environment );
+ threadClass.set( m_environment.FindClass( "java/lang/Thread" ) );
+ if ( !threadClass.is() )
+ break;
+
+ jmethodID currentThreadMethod( m_environment.GetStaticMethodID(
+ threadClass.get(), "currentThread", "()Ljava/lang/Thread;" ) );
+ if ( currentThreadMethod == nullptr )
+ break;
+
+ m_currentThread.set( m_environment.CallStaticObjectMethod( threadClass.get(), currentThreadMethod ) );
+ if ( !m_currentThread.is() )
+ break;
+
+ jmethodID getContextClassLoaderMethod( m_environment.GetMethodID(
+ threadClass.get(), "getContextClassLoader", "()Ljava/lang/ClassLoader;" ) );
+ if ( getContextClassLoaderMethod == nullptr )
+ break;
+ m_oldContextClassLoader.set( m_environment.CallObjectMethod( m_currentThread.get(), getContextClassLoaderMethod ) );
+ LocalRef< jthrowable > throwable( m_environment, m_environment.ExceptionOccurred() );
+ if ( throwable.is() )
+ break;
+
+ m_setContextClassLoaderMethod = m_environment.GetMethodID(
+ threadClass.get(), "setContextClassLoader", "(Ljava/lang/ClassLoader;)V" );
+ if ( m_setContextClassLoaderMethod == nullptr )
+ break;
}
while ( false );
diff --git a/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx b/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx
index 39bacf0e3d2c..27c7ae01aec3 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 )
{
@@ -481,7 +478,7 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getTablePrivileges(
aRows.push_back(aRow);
}
- pNewPrivRes->setRows(aRows);
+ pNewPrivRes->setRows(std::move(aRows));
}
}
}
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 0529979e2b5b..5844df568ba3 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());
}
@@ -246,11 +247,9 @@ IMPLEMENT_SERVICE_INFO(java_sql_Connection,"com.sun.star.sdbcx.JConnection","com
jclass java_sql_Connection::theClass = nullptr;
java_sql_Connection::java_sql_Connection( const java_sql_Driver& _rDriver )
- :java_lang_Object()
- ,m_xContext( _rDriver.getContext() )
+ :m_xContext( _rDriver.getContext() )
,m_pDriver( &_rDriver )
,m_pDriverobject(nullptr)
- ,m_pDriverClassLoader()
,m_Driver_theClass(nullptr)
,m_aLogger( _rDriver.getLogger() )
,m_bIgnoreDriverPrivileges(true)
@@ -438,7 +437,7 @@ 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(xStmt);
m_aLogger.log( LogLevel::FINE, STR_LOG_CREATED_STATEMENT_ID, pStatement->getStatementObjectID() );
return xStmt;
@@ -454,7 +453,7 @@ Reference< XPreparedStatement > SAL_CALL java_sql_Connection::prepareStatement(
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(xReturn);
m_aLogger.log( LogLevel::FINE, STR_LOG_PREPARED_STATEMENT_ID, pStatement->getStatementObjectID() );
return xReturn;
@@ -470,7 +469,7 @@ Reference< XPreparedStatement > SAL_CALL java_sql_Connection::prepareCall( const
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(xStmt);
m_aLogger.log( LogLevel::FINE, STR_LOG_PREPARED_CALL_ID, pStatement->getStatementObjectID() );
return xStmt;
@@ -525,14 +524,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();
diff --git a/connectivity/source/drivers/jdbc/JStatement.cxx b/connectivity/source/drivers/jdbc/JStatement.cxx
index 40fef64ed5ac..1d5326ca6302 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>
@@ -124,9 +124,10 @@ Sequence< Type > SAL_CALL java_sql_Statement_Base::getTypes( )
Sequence< Type > aOldTypes = java_sql_Statement_BASE::getTypes();
if ( m_pConnection.is() && !m_pConnection->isAutoRetrievingEnabled() )
{
- auto newEnd = std::remove(aOldTypes.begin(), aOldTypes.end(),
+ auto [begin, end] = asNonConstRange(aOldTypes);
+ auto newEnd = std::remove(begin, end,
cppu::UnoType<XGeneratedResultSet>::get());
- aOldTypes.realloc(std::distance(aOldTypes.begin(), newEnd));
+ aOldTypes.realloc(std::distance(begin, newEnd));
}
return ::comphelper::concatSequences(aTypes.getTypes(),aOldTypes);
@@ -377,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();
@@ -575,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
+ }
+ }
+ };
}
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 f03056afd121..fa3f7b40c982 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;
@@ -354,7 +353,7 @@ void SAL_CALL java_sql_PreparedStatement::setObjectWithInfo( sal_Int32 parameter
{
ORowSetValue aValue;
aValue.fill(x);
- const OUString sValue = aValue;
+ const OUString sValue = aValue.getString();
if ( !sValue.isEmpty() )
pBigDecimal.reset(new java_math_BigDecimal(sValue));
else
diff --git a/connectivity/source/drivers/jdbc/ResultSet.cxx b/connectivity/source/drivers/jdbc/ResultSet.cxx
index 4c7ec72c54f7..c274c521c33c 100644
--- a/connectivity/source/drivers/jdbc/ResultSet.cxx
+++ b/connectivity/source/drivers/jdbc/ResultSet.cxx
@@ -514,7 +514,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)));
}
@@ -873,25 +873,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..1d1959717370 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)
{
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/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/MacabConnection.hxx b/connectivity/source/drivers/macab/MacabConnection.hxx
index b18d4778e2da..dc2bfa34f5fd 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>
diff --git a/connectivity/source/drivers/macab/MacabDatabaseMetaData.cxx b/connectivity/source/drivers/macab/MacabDatabaseMetaData.cxx
index 807cd8583e42..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>
@@ -737,7 +738,7 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTableTypes( )
{
rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTableTypes);
- static ODatabaseMetaDataResultSet::ORows aRows = [&]
+ static ODatabaseMetaDataResultSet::ORows aRows = []
{
static constexpr OUStringLiteral aTable = u"TABLE";
ODatabaseMetaDataResultSet::ORows tmp;
@@ -747,7 +748,7 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTableTypes( )
tmp.push_back(aRow);
return tmp;
}();
- pResult->setRows(aRows);
+ pResult->setRows(std::vector(aRows));
return pResult;
}
@@ -755,7 +756,7 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTypeInfo( )
{
rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTypeInfo);
- static ODatabaseMetaDataResultSet::ORows aRows = [&]()
+ static ODatabaseMetaDataResultSet::ORows aRows = []()
{
ODatabaseMetaDataResultSet::ORows tmp;
ODatabaseMetaDataResultSet::ORow aRow(19);
@@ -804,7 +805,7 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTypeInfo( )
return tmp;
}();
- pResult->setRows(aRows);
+ pResult->setRows(std::vector(aRows));
return pResult;
}
@@ -907,7 +908,7 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getColumns(
}
}
}
- pResult->setRows(aRows);
+ pResult->setRows(std::move(aRows));
return pResult;
}
@@ -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);
@@ -968,7 +969,7 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTables(
}
return tmp;
}();
- pResult->setRows(aRows);
+ pResult->setRows(std::vector(aRows));
return pResult;
}
@@ -1012,7 +1013,7 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getVersionColumns(
aRows.push_back(aRow);
}
- pResult->setRows(aRows);
+ pResult->setRows(std::move(aRows));
return pResult;
}
diff --git a/connectivity/source/drivers/macab/MacabDriver.cxx b/connectivity/source/drivers/macab/MacabDriver.cxx
index 4667c690a8b1..9c68e48f12a7 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" ) );
+ 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..d18f5e9827f4 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>
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..24b3fc7b0b9c 100644
--- a/connectivity/source/drivers/macab/MacabHeader.hxx
+++ b/connectivity/source/drivers/macab/MacabHeader.hxx
@@ -50,7 +50,6 @@ namespace connectivity::macab
public:
iterator& operator= (MacabHeader *_record);
iterator();
- ~iterator();
void operator++ ();
bool operator!= (const sal_Int32 i) const;
bool operator== (const sal_Int32 i) const;
diff --git a/connectivity/source/drivers/macab/MacabPreparedStatement.cxx b/connectivity/source/drivers/macab/MacabPreparedStatement.cxx
index 22fd7b499a82..6d72345b6021 100644
--- a/connectivity/source/drivers/macab/MacabPreparedStatement.cxx
+++ b/connectivity/source/drivers/macab/MacabPreparedStatement.cxx
@@ -78,7 +78,7 @@ void MacabPreparedStatement::getNextParameter(OUString &rParameter) const
::dbtools::throwGenericSQLException(sError,*const_cast<MacabPreparedStatement *>(this));
}
- rParameter = (*m_aParameterRow)[m_nParameterIndex];
+ rParameter = (*m_aParameterRow)[m_nParameterIndex].getString();
m_nParameterIndex++;
}
diff --git a/connectivity/source/drivers/macab/MacabRecords.cxx b/connectivity/source/drivers/macab/MacabRecords.cxx
index 737cdee7d6f8..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
@@ -530,34 +530,34 @@ MacabHeader *MacabRecords::createHeaderForProperty(const ABPropertyType _propert
*/
if(_propertyValue != nullptr)
{
- sal_Int32 i;
+ sal_Int32 i;
- sal_Int32 multiLength = ABMultiValueCount(static_cast<ABMutableMultiValueRef>(const_cast<void *>(_propertyValue)));
- CFStringRef multiLabel, localizedMultiLabel;
- OUString multiLabelString;
- OUString multiPropertyString;
- OUString headerNameString;
- ABPropertyType multiType = static_cast<ABPropertyType>(ABMultiValuePropertyType(static_cast<ABMutableMultiValueRef>(const_cast<void *>(_propertyValue))) - 0x100);
+ sal_Int32 multiLength = ABMultiValueCount(static_cast<ABMutableMultiValueRef>(const_cast<void *>(_propertyValue)));
+ CFStringRef multiLabel, localizedMultiLabel;
+ OUString multiLabelString;
+ OUString multiPropertyString;
+ OUString headerNameString;
+ ABPropertyType multiType = static_cast<ABPropertyType>(ABMultiValuePropertyType(static_cast<ABMutableMultiValueRef>(const_cast<void *>(_propertyValue))) - 0x100);
- length = multiLength;
- headerNames = new macabfield *[multiLength];
- multiPropertyString = CFStringToOUString(_propertyName);
+ length = multiLength;
+ headerNames = new macabfield *[multiLength];
+ multiPropertyString = CFStringToOUString(_propertyName);
- /* Go through each element, and - since each element is a scalar -
- * just create a new macabfield for it.
- */
- for(i = 0; i < multiLength; i++)
- {
- multiLabel = ABMultiValueCopyLabelAtIndex(static_cast<ABMutableMultiValueRef>(const_cast<void *>(_propertyValue)), i);
- localizedMultiLabel = ABCopyLocalizedPropertyOrLabel(multiLabel);
- multiLabelString = CFStringToOUString(localizedMultiLabel);
- CFRelease(multiLabel);
- CFRelease(localizedMultiLabel);
- headerNameString = multiPropertyString + ": " + fixLabel(multiLabelString);
- headerNames[i] = new macabfield;
- headerNames[i]->value = OUStringToCFString(headerNameString);
- headerNames[i]->type = multiType;
- }
+ /* Go through each element, and - since each element is a scalar -
+ * just create a new macabfield for it.
+ */
+ for(i = 0; i < multiLength; i++)
+ {
+ multiLabel = ABMultiValueCopyLabelAtIndex(static_cast<ABMutableMultiValueRef>(const_cast<void *>(_propertyValue)), i);
+ localizedMultiLabel = ABCopyLocalizedPropertyOrLabel(multiLabel);
+ multiLabelString = CFStringToOUString(localizedMultiLabel);
+ CFRelease(multiLabel);
+ CFRelease(localizedMultiLabel);
+ headerNameString = multiPropertyString + ": " + fixLabel(multiLabelString);
+ headerNames[i] = new macabfield;
+ headerNames[i]->value = OUStringToCFString(headerNameString);
+ headerNames[i]->type = multiType;
+ }
}
break;
@@ -653,77 +653,77 @@ MacabHeader *MacabRecords::createHeaderForProperty(const ABPropertyType _propert
*/
if(_propertyValue != nullptr)
{
- /* Assume all keys are strings */
- sal_Int32 numRecords = static_cast<sal_Int32>(CFDictionaryGetCount(static_cast<CFDictionaryRef>(_propertyValue)));
+ /* Assume all keys are strings */
+ sal_Int32 numRecords = static_cast<sal_Int32>(CFDictionaryGetCount(static_cast<CFDictionaryRef>(_propertyValue)));
- /* The only method for getting info out of a CFDictionary, of both
- * keys and values, is to all of them all at once, so these
- * variables will hold them.
- */
- CFStringRef *dictKeys;
- CFTypeRef *dictValues;
-
- sal_Int32 i,j,k;
- OUString dictKeyString, propertyNameString;
- ABPropertyType dictType;
- MacabHeader **dictHeaders = new MacabHeader *[numRecords];
- OUString dictLabelString;
- CFStringRef dictLabel, localizedDictKey;
-
- /* Get the keys and values */
- dictKeys = static_cast<CFStringRef *>(malloc(sizeof(CFStringRef)*numRecords));
- dictValues = static_cast<CFTypeRef *>(malloc(sizeof(CFTypeRef)*numRecords));
- CFDictionaryGetKeysAndValues(static_cast<CFDictionaryRef>(_propertyValue), reinterpret_cast<const void **>(dictKeys), dictValues);
-
- propertyNameString = CFStringToOUString(_propertyName);
-
- length = 0;
- /* Go through each element - assuming that the key is a string but
- * that the value could be anything. Since the value could be
- * anything, we can't assume that it is scalar (it could even be
- * another dictionary), so we attempt to get its type using
- * the method getABTypeFromCFType and then run this method
- * recursively on that element, storing the MacabHeader that
- * results. Then, we just combine all of the MacabHeaders into
- * one.
- */
- for(i = 0; i < numRecords; i++)
- {
- dictType = getABTypeFromCFType( CFGetTypeID(dictValues[i]) );
- localizedDictKey = ABCopyLocalizedPropertyOrLabel(dictKeys[i]);
- dictKeyString = CFStringToOUString(localizedDictKey);
- dictLabelString = propertyNameString + ": " + fixLabel(dictKeyString);
- dictLabel = OUStringToCFString(dictLabelString);
- dictHeaders[i] = createHeaderForProperty(dictType, dictValues[i], dictLabel);
- if (!dictHeaders[i])
- dictHeaders[i] = new MacabHeader();
- length += dictHeaders[i]->getSize();
- CFRelease(dictLabel);
- CFRelease(localizedDictKey);
- }
+ /* The only method for getting info out of a CFDictionary, of both
+ * keys and values, is to all of them all at once, so these
+ * variables will hold them.
+ */
+ CFStringRef *dictKeys;
+ CFTypeRef *dictValues;
- /* Combine all of the macabfields in each MacabHeader into the
- * headerNames array, which (at the end of this method) is used
- * to create the MacabHeader that is returned.
- */
- headerNames = new macabfield *[length];
- for(i = 0, j = 0, k = 0; i < length; i++,k++)
- {
- while(dictHeaders[j]->getSize() == k)
+ sal_Int32 i,j,k;
+ OUString dictKeyString, propertyNameString;
+ ABPropertyType dictType;
+ MacabHeader **dictHeaders = new MacabHeader *[numRecords];
+ OUString dictLabelString;
+ CFStringRef dictLabel, localizedDictKey;
+
+ /* Get the keys and values */
+ dictKeys = static_cast<CFStringRef *>(malloc(sizeof(CFStringRef)*numRecords));
+ dictValues = static_cast<CFTypeRef *>(malloc(sizeof(CFTypeRef)*numRecords));
+ CFDictionaryGetKeysAndValues(static_cast<CFDictionaryRef>(_propertyValue), reinterpret_cast<const void **>(dictKeys), dictValues);
+
+ propertyNameString = CFStringToOUString(_propertyName);
+
+ length = 0;
+ /* Go through each element - assuming that the key is a string but
+ * that the value could be anything. Since the value could be
+ * anything, we can't assume that it is scalar (it could even be
+ * another dictionary), so we attempt to get its type using
+ * the method getABTypeFromCFType and then run this method
+ * recursively on that element, storing the MacabHeader that
+ * results. Then, we just combine all of the MacabHeaders into
+ * one.
+ */
+ for(i = 0; i < numRecords; i++)
{
- j++;
- k = 0;
+ dictType = getABTypeFromCFType( CFGetTypeID(dictValues[i]) );
+ localizedDictKey = ABCopyLocalizedPropertyOrLabel(dictKeys[i]);
+ dictKeyString = CFStringToOUString(localizedDictKey);
+ dictLabelString = propertyNameString + ": " + fixLabel(dictKeyString);
+ dictLabel = OUStringToCFString(dictLabelString);
+ dictHeaders[i] = createHeaderForProperty(dictType, dictValues[i], dictLabel);
+ if (!dictHeaders[i])
+ dictHeaders[i] = new MacabHeader();
+ length += dictHeaders[i]->getSize();
+ CFRelease(dictLabel);
+ CFRelease(localizedDictKey);
}
- headerNames[i] = dictHeaders[j]->copy(k);
- }
+ /* Combine all of the macabfields in each MacabHeader into the
+ * headerNames array, which (at the end of this method) is used
+ * to create the MacabHeader that is returned.
+ */
+ headerNames = new macabfield *[length];
+ for(i = 0, j = 0, k = 0; i < length; i++,k++)
+ {
+ while(dictHeaders[j]->getSize() == k)
+ {
+ j++;
+ k = 0;
+ }
- for(i = 0; i < numRecords; i++)
- delete dictHeaders[i];
+ headerNames[i] = dictHeaders[j]->copy(k);
+ }
- delete [] dictHeaders;
- free(dictKeys);
- free(dictValues);
+ for(i = 0; i < numRecords; i++)
+ delete dictHeaders[i];
+
+ delete [] dictHeaders;
+ free(dictKeys);
+ free(dictValues);
}
break;
@@ -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..8d0d5cf6f796 100644
--- a/connectivity/source/drivers/macab/MacabRecords.hxx
+++ b/connectivity/source/drivers/macab/MacabRecords.hxx
@@ -113,7 +113,6 @@ namespace connectivity::macab
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;
diff --git a/connectivity/source/drivers/macab/MacabResultSet.cxx b/connectivity/source/drivers/macab/MacabResultSet.cxx
index ecb4ea79e417..4142fcb6cce0 100644
--- a/connectivity/source/drivers/macab/MacabResultSet.cxx
+++ b/connectivity/source/drivers/macab/MacabResultSet.cxx
@@ -885,7 +885,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 +981,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/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..b82088154cb9 100644
--- a/connectivity/source/drivers/macab/MacabResultSetMetaData.hxx
+++ b/connectivity/source/drivers/macab/MacabResultSetMetaData.hxx
@@ -23,7 +23,6 @@
#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
diff --git a/connectivity/source/drivers/macab/MacabStatement.cxx b/connectivity/source/drivers/macab/MacabStatement.cxx
index 1f317150d249..95b922ce6bc7 100644
--- a/connectivity/source/drivers/macab/MacabStatement.cxx
+++ b/connectivity/source/drivers/macab/MacabStatement.cxx
@@ -47,7 +47,7 @@ using namespace com::sun::star::util;
namespace connectivity::macab
{
- void impl_throwError(const char* pErrorId)
+ void impl_throwError(TranslateId pErrorId)
{
::connectivity::SharedResources aResources;
const OUString sError( aResources.getResourceString(pErrorId) );
@@ -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..700a895c0a38 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>
diff --git a/connectivity/source/drivers/macab/MacabTable.cxx b/connectivity/source/drivers/macab/MacabTable.cxx
index 75da75bc1035..1628cd297bfd 100644
--- a/connectivity/source/drivers/macab/MacabTable.cxx
+++ b/connectivity/source/drivers/macab/MacabTable.cxx
@@ -71,8 +71,8 @@ void MacabTable::refreshColumns()
if (xResult.is())
{
- Reference< XRow > xRow(xResult, UNO_QUERY);
- while (xResult->next())
+ Reference< XRow > xRow(xResult, UNO_QUERY);
+ while (xResult->next())
aVector.push_back(xRow->getString(4));
}
}
@@ -80,7 +80,7 @@ void MacabTable::refreshColumns()
if (m_xColumns)
m_xColumns->reFill(aVector);
else
- m_xColumns = new MacabColumns(this,m_aMutex,aVector);
+ m_xColumns.reset(new MacabColumns(this, m_aMutex, aVector));
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/drivers/macab/macabutilities.hxx b/connectivity/source/drivers/macab/macabutilities.hxx
index abf65c73d152..7e0f6b091085 100644
--- a/connectivity/source/drivers/macab/macabutilities.hxx
+++ b/connectivity/source/drivers/macab/macabutilities.hxx
@@ -19,8 +19,13 @@
#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>
#include <time.h>
#include <premac.h>
@@ -46,15 +51,15 @@ namespace connectivity::macab
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';
- CFStringGetCharacters (sOrig, CFRangeMake(0,nStringLength), unichars);
+ CFStringGetCharacters (sOrig, CFRangeMake(0,nStringLength), unichars.get());
CFRelease(sOrig);
- return OUString(reinterpret_cast<sal_Unicode *>(unichars));
+ return OUString(reinterpret_cast<sal_Unicode *>(unichars.get()));
}
@@ -131,7 +136,7 @@ namespace connectivity::macab
return dataType;
}
- void impl_throwError(const char* 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..076a05d3b9dc 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)
diff --git a/connectivity/source/drivers/mozab/bootstrap/MNSINIParser.cxx b/connectivity/source/drivers/mozab/bootstrap/MNSINIParser.cxx
index ae775b6fca01..a146d0c09680 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)
{
@@ -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 4dd9110a6f0f..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))
{
}
@@ -168,11 +170,12 @@ namespace connectivity::mozab
sal_Int32 index=static_cast<sal_Int32>(product);
ProductStruct &rProduct = m_ProductProfileList[index];
list.realloc(static_cast<sal_Int32>(rProduct.mProfileList.size()));
+ auto listRange = list.getArray();
sal_Int32 i=0;
for(const auto& rEntry : rProduct.mProfileList)
{
const ProfileStruct& rProfile = rEntry.second;
- list[i] = rProfile.getProfileName();
+ listRange[i] = rProfile.getProfileName();
i++;
}
diff --git a/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx b/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx
index a5f271183b27..132ac06c003c 100644
--- a/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx
+++ b/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx
@@ -37,7 +37,7 @@ namespace connectivity::mozab
{
public:
ProfileStruct();
- ProfileStruct(const OUString& aProfileName, const OUString &aProfilePath);
+ ProfileStruct(OUString aProfileName, OUString aProfilePath);
const OUString& getProfileName() const { return profileName;}
const OUString& getProfilePath() const;
private:
diff --git a/connectivity/source/drivers/mysql_jdbc/YCatalog.cxx b/connectivity/source/drivers/mysql_jdbc/YCatalog.cxx
index 9c0afb55abd5..de9ffd7127d5 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)
diff --git a/connectivity/source/drivers/mysql_jdbc/YColumns.cxx b/connectivity/source/drivers/mysql_jdbc/YColumns.cxx
index 54beb77ca061..910b01e4fb11 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)
diff --git a/connectivity/source/drivers/mysql_jdbc/YDriver.cxx b/connectivity/source/drivers/mysql_jdbc/YDriver.cxx
index 0225381c74b3..e4e338ee0b31 100644
--- a/connectivity/source/drivers/mysql_jdbc/YDriver.cxx
+++ b/connectivity/source/drivers/mysql_jdbc/YDriver.cxx
@@ -17,8 +17,13 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <sal/config.h>
+
+#include <string_view>
+
#include <mysql/YDriver.hxx>
#include <mysql/YCatalog.hxx>
+#include <o3tl/string_view.hxx>
#include <comphelper/namedvaluecollection.hxx>
#include <comphelper/servicehelper.hxx>
#include <comphelper/types.hxx>
@@ -44,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",
+ OUString("com.mysql.jdbc.Driver"));
}
}
@@ -93,11 +98,14 @@ enum class T_DRIVERTYPE
Native
};
-bool isOdbcUrl(const OUString& _sUrl) { return _sUrl.startsWith("sdbc:mysql:odbc:"); }
+bool isOdbcUrl(std::u16string_view _sUrl) { return o3tl::starts_with(_sUrl, u"sdbc:mysql:odbc:"); }
-bool isNativeUrl(const OUString& _sUrl) { return _sUrl.startsWith("sdbc:mysql:mysqlc:"); }
+bool isNativeUrl(std::u16string_view _sUrl)
+{
+ return o3tl::starts_with(_sUrl, u"sdbc:mysql:mysqlc:");
+}
-T_DRIVERTYPE lcl_getDriverType(const OUString& _sUrl)
+T_DRIVERTYPE lcl_getDriverType(std::u16string_view _sUrl)
{
T_DRIVERTYPE eRet = T_DRIVERTYPE::Jdbc;
if (isOdbcUrl(_sUrl))
@@ -107,9 +115,9 @@ T_DRIVERTYPE lcl_getDriverType(const OUString& _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))
@@ -150,36 +158,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(OUString("com.mysql.jdbc.Driver")),
+ 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(OUString("SELECT LAST_INSERT_ID()")),
+ 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;
@@ -224,8 +226,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;
@@ -236,7 +238,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;
@@ -255,13 +257,12 @@ Reference<XConnection> SAL_CALL ODriverDelegator::connect(const OUString& url,
if (xConnection.is())
{
// now we have to set the URL to get the correct answer for metadata()->getURL()
- auto pMetaConnection
- = comphelper::getUnoTunnelImplementation<OMetaConnection>(xConnection);
+ auto pMetaConnection = comphelper::getFromUnoTunnel<OMetaConnection>(xConnection);
if (pMetaConnection)
pMetaConnection->setURL(url);
- m_aConnections.push_back(
- TWeakPair(WeakReferenceHelper(xConnection),
- TWeakConnectionPair(WeakReferenceHelper(), pMetaConnection)));
+ m_aConnections.emplace_back(
+ WeakReferenceHelper(xConnection),
+ TWeakConnectionPair(WeakReferenceHelper(), pMetaConnection));
}
}
}
@@ -293,18 +294,17 @@ ODriverDelegator::getPropertyInfo(const OUString& url, const Sequence<PropertyVa
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());
@@ -321,7 +321,7 @@ ODriverDelegator::getDataDefinitionByConnection(const Reference<XConnection>& co
checkDisposed(ODriverDelegator_BASE::rBHelper.bDisposed);
Reference<XTablesSupplier> xTab;
- auto pConnection = comphelper::getUnoTunnelImplementation<OMetaConnection>(connection);
+ auto pConnection = comphelper::getFromUnoTunnel<OMetaConnection>(connection);
if (pConnection)
{
TWeakPairVector::iterator i
diff --git a/connectivity/source/drivers/mysql_jdbc/YTable.cxx b/connectivity/source/drivers/mysql_jdbc/YTable.cxx
index 26e0fde19632..b79b3f231bbf 100644
--- a/connectivity/source/drivers/mysql_jdbc/YTable.cxx
+++ b/connectivity/source/drivers/mysql_jdbc/YTable.cxx
@@ -19,7 +19,6 @@
#include <mysql/YTable.hxx>
#include <mysql/YTables.hxx>
-#include <cppuhelper/typeprovider.hxx>
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <com/sun/star/sdbcx/Privilege.hpp>
#include <comphelper/property.hxx>
@@ -117,21 +116,6 @@ sdbcx::OCollection* OMySQLTable::createIndexes(const ::std::vector<OUString>& _r
return new OIndexesHelper(this, m_aMutex, _rNames);
}
-Sequence<sal_Int8> OMySQLTable::getUnoTunnelId()
-{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
-}
-
-// css::lang::XUnoTunnel
-
-sal_Int64 OMySQLTable::getSomething(const Sequence<sal_Int8>& rId)
-{
- return (isUnoTunnelId<OMySQLTable>(rId)) ? reinterpret_cast<sal_Int64>(this)
- : OTable_TYPEDEF::getSomething(rId);
-}
-
// XAlterTable
void SAL_CALL OMySQLTable::alterColumnByName(const OUString& colName,
const Reference<XPropertySet>& descriptor)
@@ -200,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
@@ -212,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));
}
}
}
@@ -271,7 +255,7 @@ 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()));
@@ -314,7 +298,7 @@ void OMySQLTable::executeStatement(const OUString& _rStatement)
{
OUString sSQL = _rStatement;
if (sSQL.endsWith(","))
- sSQL = sSQL.replaceAt(sSQL.getLength() - 1, 1, ")");
+ sSQL = sSQL.replaceAt(sSQL.getLength() - 1, 1, u")");
Reference<XStatement> xStmt = getConnection()->createStatement();
if (xStmt.is())
diff --git a/connectivity/source/drivers/mysql_jdbc/YTables.cxx b/connectivity/source/drivers/mysql_jdbc/YTables.cxx
index be962d3d7c33..aa527cf0cc30 100644
--- a/connectivity/source/drivers/mysql_jdbc/YTables.cxx
+++ b/connectivity/source/drivers/mysql_jdbc/YTables.cxx
@@ -37,7 +37,6 @@ 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)
@@ -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(),
- sNewUnsigned + s_sUNSIGNED);
+ rtl::Concat2View(sNewUnsigned + s_sUNSIGNED));
nIndex = sSQL.indexOf(s_sUNSIGNED, nIndex + strlen(s_sUNSIGNED) + sNewUnsigned.getLength());
}
return sSQL;
@@ -178,10 +177,10 @@ void OTables::appendNew(const OUString& _rsNewTable)
insertElement(_rsNewTable, nullptr);
// notify our container listeners
- ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_rsNewTable), Any(), Any());
- OInterfaceIteratorHelper2 aListenerLoop(m_aContainerListeners);
+ ContainerEvent aEvent(static_cast<XContainer*>(this), Any(_rsNewTable), Any(), Any());
+ OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners);
while (aListenerLoop.hasMoreElements())
- static_cast<XContainerListener*>(aListenerLoop.next())->elementInserted(aEvent);
+ aListenerLoop.next()->elementInserted(aEvent);
}
OUString OTables::getNameForObject(const sdbcx::ObjectType& _xObject)
diff --git a/connectivity/source/drivers/mysql_jdbc/YUser.cxx b/connectivity/source/drivers/mysql_jdbc/YUser.cxx
index b683fe2b2757..ec3a6265967f 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();
}
diff --git a/connectivity/source/drivers/mysql_jdbc/YUsers.cxx b/connectivity/source/drivers/mysql_jdbc/YUsers.cxx
index ed33cb0e2d7c..b096310acd4c 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,15 +31,13 @@ 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)
{
}
diff --git a/connectivity/source/drivers/mysql_jdbc/YViews.cxx b/connectivity/source/drivers/mysql_jdbc/YViews.cxx
index 3dba721c0c86..e9531df6950f 100644
--- a/connectivity/source/drivers/mysql_jdbc/YViews.cxx
+++ b/connectivity/source/drivers/mysql_jdbc/YViews.cxx
@@ -32,10 +32,7 @@ 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;
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..d72ab1f65d72
--- /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(), "%", "%", {});
+
+ 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(), "%", "%", { "VIEW" });
+
+ 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(
+ "SELECT grantee FROM information_schema.user_privileges GROUP BY grantee");
+
+ 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..ceb7437386e6
--- /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 { "com.sun.star.sdbcx.Column" };
+}
+
+/* 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 600e131b89b1..269113383d8d 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,10 +73,7 @@ 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;
@@ -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(),
@@ -188,9 +192,8 @@ void OConnection::construct(const OUString& url, const Sequence<PropertyValue>&
*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()
@@ -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();
@@ -460,9 +461,8 @@ OUString OConnection::transFormPreparedStatement(const OUString& _sSQL)
{
try
{
- Sequence<Any> aArgs(1);
Reference<XConnection> xCon = this;
- aArgs[0] <<= NamedValue("ActiveConnection", makeAny(xCon));
+ Sequence<Any> aArgs{ Any(NamedValue("ActiveConnection", Any(xCon))) };
m_xParameterSubstitution.set(
m_xDriver->getFactory()->createInstanceWithArguments(
@@ -486,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..3a0ccf36b4ed 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_connection.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_connection.hxx
@@ -24,20 +24,18 @@
#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 <mysql.h>
@@ -56,12 +54,8 @@ class ODatabaseMetaData;
namespace mysqlc
{
-using ::com::sun::star::sdbc::SQLException;
-using ::com::sun::star::sdbc::SQLWarning;
-using ::com::sun::star::uno::RuntimeException;
-
-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
@@ -82,7 +76,7 @@ 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,6 +86,7 @@ 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
@@ -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 77e20700b135..6d171b661815 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("%");
@@ -41,8 +41,6 @@ static void lcl_setRows_throw(const Reference<XResultSet>& _xResultSet, sal_Int3
const std::vector<std::vector<Any>>& _rRows)
{
Reference<XInitialization> xIni(_xResultSet, UNO_QUERY);
- Sequence<Any> aArgs(2);
- aArgs[0] <<= _nType;
Sequence<Sequence<Any>> aRows(_rRows.size());
@@ -55,7 +53,7 @@ static void lcl_setRows_throw(const Reference<XResultSet>& _xResultSet, sal_Int3
}
++pRowsIter;
}
- aArgs[1] <<= aRows;
+ Sequence<Any> aArgs{ Any(_nType), Any(aRows) };
xIni->initialize(aArgs);
}
@@ -162,7 +160,7 @@ sal_Bool SAL_CALL ODatabaseMetaData::supportsNonNullableColumns() { return true;
OUString SAL_CALL ODatabaseMetaData::getCatalogTerm() { return "n/a"; }
-OUString SAL_CALL ODatabaseMetaData::getIdentifierQuoteString() { return "\""; }
+OUString SAL_CALL ODatabaseMetaData::getIdentifierQuoteString() { return "`"; }
OUString SAL_CALL ODatabaseMetaData::getExtraNameCharacters() { return "#@"; }
@@ -565,9 +563,8 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTableTypes()
{
if (m_rConnection.getMysqlVersion() >= requiredVersion[i])
{
- std::vector<Any> aRow{ Any() };
- aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(table_types[i], encoding)));
- rRows.push_back(aRow);
+ rRows.push_back(
+ { { Any(), Any(mysqlc_sdbc_driver::convert(table_types[i], encoding)) } });
}
}
lcl_setRows_throw(xResultSet, 5, rRows);
@@ -586,32 +583,19 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTypeInfo()
unsigned int i = 0;
while (mysqlc_types[i].typeName)
{
- std::vector<Any> aRow{ Any() };
-
- aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].typeName, encoding)));
- aRow.push_back(makeAny(mysqlc_types[i].dataType));
- aRow.push_back(makeAny(mysqlc_types[i].precision));
- aRow.push_back(
- makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalPrefix, encoding)));
- aRow.push_back(
- makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalSuffix, encoding)));
- aRow.push_back(
- makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].createParams, encoding)));
- aRow.push_back(makeAny(mysqlc_types[i].nullable));
- aRow.push_back(makeAny(mysqlc_types[i].caseSensitive));
- aRow.push_back(makeAny(mysqlc_types[i].searchable));
- aRow.push_back(makeAny(mysqlc_types[i].isUnsigned));
- aRow.push_back(makeAny(mysqlc_types[i].fixedPrecScale));
- aRow.push_back(makeAny(mysqlc_types[i].autoIncrement));
- aRow.push_back(
- makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].localTypeName, encoding)));
- aRow.push_back(makeAny(mysqlc_types[i].minScale));
- aRow.push_back(makeAny(mysqlc_types[i].maxScale));
- aRow.push_back(makeAny(sal_Int32(0)));
- aRow.push_back(makeAny(sal_Int32(0)));
- aRow.push_back(makeAny(sal_Int32(10)));
+ rRows.push_back(
+ { { 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)) } });
- rRows.push_back(aRow);
i++;
}
@@ -634,14 +618,11 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getSchemas()
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();
@@ -651,20 +632,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);
@@ -759,25 +732,25 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getColumns(const Any& /*catalo
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"))
@@ -789,34 +762,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);
@@ -832,25 +805,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(")");
}
@@ -954,34 +922,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);
@@ -1042,11 +1010,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("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='?'");
+ 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(
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..79a514a57898 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)
@@ -59,7 +60,7 @@ OUString MysqlCDriver::getImplementationName_Static()
Sequence<OUString> MysqlCDriver::getSupportedServiceNames_Static()
{
- return { "com.sun.star.sdbc.Driver" };
+ return { "com.sun.star.sdbc.Driver", "com.sun.star.sdbcx.Driver" };
}
OUString SAL_CALL MysqlCDriver::getImplementationName() { return getImplementationName_Static(); }
@@ -84,7 +85,6 @@ 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);
@@ -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..a29040892577 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);
@@ -50,10 +47,6 @@ protected:
OWeakRefArray 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 7ed11fe3ff13..bc57770413f5 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>
@@ -43,6 +44,7 @@ void allocateSqlVar(void** mem, enum_field_types eType, unsigned nSize)
*mem = malloc(sizeof(sal_Int32));
break;
case MYSQL_TYPE_SHORT:
+ case MYSQL_TYPE_YEAR:
*mem = malloc(sizeof(sal_Int16));
break;
case MYSQL_TYPE_BIT:
@@ -62,7 +64,6 @@ void allocateSqlVar(void** mem, enum_field_types eType, unsigned nSize)
case MYSQL_TYPE_TIME:
case MYSQL_TYPE_DATETIME:
case MYSQL_TYPE_TIMESTAMP:
- case MYSQL_TYPE_YEAR: // FIXME below
case MYSQL_TYPE_NEWDATE:
case MYSQL_TYPE_ENUM:
case MYSQL_TYPE_SET:
@@ -125,12 +126,13 @@ sal_Int32 mysqlToOOOType(int eType, int charsetnr) noexcept
switch (eType)
{
case MYSQL_TYPE_BIT:
- return css::sdbc::DataType::VARCHAR;
+ return css::sdbc::DataType::BIT;
case MYSQL_TYPE_TINY:
return css::sdbc::DataType::TINYINT;
case MYSQL_TYPE_SHORT:
+ case MYSQL_TYPE_YEAR:
return css::sdbc::DataType::SMALLINT;
case MYSQL_TYPE_INT24:
@@ -163,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;
@@ -188,46 +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("mediumint"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"smallint")
+ || o3tl::equalsIgnoreAsciiCase(sType, u"year"))
return css::sdbc::DataType::SMALLINT;
- if (sType.equalsIgnoreAsciiCase("longtext"))
- return css::sdbc::DataType::LONGVARCHAR;
- if (sType.equalsIgnoreAsciiCase("int"))
+ 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"))
+ 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("text"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"tinytext"))
+ return css::sdbc::DataType::VARCHAR;
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"text"))
+ return css::sdbc::DataType::LONGVARCHAR;
+ 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") || sType.equalsIgnoreAsciiCase("bool")
- || sType.equalsIgnoreAsciiCase("boolean"))
+ if (o3tl::equalsIgnoreAsciiCase(sType, u"bit"))
+ return css::sdbc::DataType::BIT;
+ 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;
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 22f5499ea9a2..e11476dc9805 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,20 +46,20 @@ 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)
{
switch (type)
{
+ case MYSQL_TYPE_BIT:
+ return std::type_index(typeid(bool));
case MYSQL_TYPE_TINY:
return std::type_index(typeid(sal_Int8));
case MYSQL_TYPE_SHORT:
+ case MYSQL_TYPE_YEAR:
return std::type_index(typeid(sal_Int16));
case MYSQL_TYPE_LONG:
case MYSQL_TYPE_INT24:
@@ -83,8 +83,6 @@ std::type_index getTypeFromMysqlType(enum_field_types type)
case MYSQL_TYPE_NEWDECIMAL:
return std::type_index(typeid(OUString));
case MYSQL_TYPE_BLOB:
- case MYSQL_TYPE_YEAR:
- case MYSQL_TYPE_BIT:
case MYSQL_TYPE_SET:
case MYSQL_TYPE_ENUM:
case MYSQL_TYPE_GEOMETRY:
@@ -106,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;
@@ -170,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_aStatement(css::uno::Reference(cppu::getXWeak(pStmt)))
, m_pStmt(pMyStmt)
, m_encoding(rConn.getConnectionEncoding())
, m_nColumnCount(mysql_stmt_field_count(pMyStmt))
@@ -188,7 +198,7 @@ void OPreparedResultSet::disposing()
MutexGuard aGuard(m_aMutex);
- m_aStatement = nullptr;
+ m_aStatement.clear();
m_xMetaData = nullptr;
}
@@ -247,7 +257,25 @@ template <typename T> T OPreparedResultSet::retrieveValue(sal_Int32 nColumnIndex
if (getTypeFromMysqlType(m_aFields[nColumnIndex - 1].type) == std::type_index(typeid(T)))
return *static_cast<T*>(m_aData[nColumnIndex - 1].buffer);
else
- return 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>)
+ return row.getInt32();
+ else if constexpr (std::is_same_v<sal_Int16, T>)
+ return row.getInt16();
+ else if constexpr (std::is_same_v<sal_Int8, T>)
+ return row.getInt8();
+ else if constexpr (std::is_same_v<double, T>)
+ return row.getDouble();
+ else if constexpr (std::is_same_v<float, T>)
+ return row.getFloat();
+ else if constexpr (std::is_same_v<bool, T>)
+ return row.getBool();
+ else
+ return row;
+ }
}
template <> uno::Sequence<sal_Int8> OPreparedResultSet::retrieveValue(sal_Int32 column)
@@ -260,7 +288,7 @@ template <> uno::Sequence<sal_Int8> OPreparedResultSet::retrieveValue(sal_Int32
template <> Date OPreparedResultSet::retrieveValue(sal_Int32 column)
{
if (getTypeFromMysqlType(m_aFields[column - 1].type) != std::type_index(typeid(Date)))
- return getRowSetValue(column);
+ return getRowSetValue(column).getDate();
const MYSQL_TIME* pTime = static_cast<MYSQL_TIME*>(m_aData[column - 1].buffer);
Date d;
@@ -273,7 +301,7 @@ template <> Date OPreparedResultSet::retrieveValue(sal_Int32 column)
template <> Time OPreparedResultSet::retrieveValue(sal_Int32 column)
{
if (getTypeFromMysqlType(m_aFields[column - 1].type) != std::type_index(typeid(Time)))
- return getRowSetValue(column);
+ return getRowSetValue(column).getTime();
const MYSQL_TIME* pTime = static_cast<MYSQL_TIME*>(m_aData[column - 1].buffer);
Time t;
@@ -286,7 +314,7 @@ template <> Time OPreparedResultSet::retrieveValue(sal_Int32 column)
template <> DateTime OPreparedResultSet::retrieveValue(sal_Int32 column)
{
if (getTypeFromMysqlType(m_aFields[column - 1].type) != std::type_index(typeid(DateTime)))
- return getRowSetValue(column);
+ return getRowSetValue(column).getDateTime();
const MYSQL_TIME* pTime = static_cast<MYSQL_TIME*>(m_aData[column - 1].buffer);
DateTime t;
@@ -303,9 +331,22 @@ 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)
- return getRowSetValue(column);
+ && !bIsBlobType)
+ return getRowSetValue(column).getString();
const char* sStr = static_cast<const char*>(m_aData[column - 1].buffer);
return OUString(sStr, *m_aData[column - 1].length, m_encoding);
@@ -318,10 +359,13 @@ ORowSetValue OPreparedResultSet::getRowSetValue(sal_Int32 nColumnIndex)
case MYSQL_TYPE_TINY:
return getByte(nColumnIndex);
case MYSQL_TYPE_SHORT:
+ case MYSQL_TYPE_YEAR:
return getShort(nColumnIndex);
case MYSQL_TYPE_LONG:
case MYSQL_TYPE_INT24:
return getInt(nColumnIndex);
+ case MYSQL_TYPE_BIT:
+ return ORowSetValue(bool(getBoolean(nColumnIndex)));
case MYSQL_TYPE_LONGLONG:
return getLong(nColumnIndex);
case MYSQL_TYPE_FLOAT:
@@ -341,6 +385,9 @@ ORowSetValue OPreparedResultSet::getRowSetValue(sal_Int32 nColumnIndex)
case MYSQL_TYPE_NEWDECIMAL:
return getString(nColumnIndex);
case MYSQL_TYPE_BLOB:
+ case MYSQL_TYPE_TINY_BLOB:
+ case MYSQL_TYPE_MEDIUM_BLOB:
+ case MYSQL_TYPE_LONG_BLOB:
throw SQLException("Column with type BLOB cannot be converted", *this, "22000", 1,
Any());
default:
@@ -980,21 +1027,16 @@ 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{
+ { { "FetchDirection", PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0 },
+ { "FetchSize", PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0 },
+ { "IsBookmarkable", PROPERTY_ID_ISBOOKMARKABLE, cppu::UnoType<bool>::get(),
+ PropertyAttribute::READONLY },
+ { "ResultSetConcurrency", PROPERTY_ID_RESULTSETCONCURRENCY,
+ cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY },
+ { "ResultSetType", PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(),
+ PropertyAttribute::READONLY } }
+ };
}
IPropertyArrayHelper& OPreparedResultSet::getInfoHelper() { return *getArrayHelper(); }
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx b/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx
index 018595b770ba..40912c5534a7 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,7 +50,7 @@ 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>
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.cxx b/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.cxx
index a50b14bbb3b4..2e7be0894040 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;
@@ -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,7 +569,7 @@ 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());
}
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx b/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx
index d280bd935ae3..e1743d91dbc4 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
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx b/connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx
index 7a11020ea8e0..397ea7cbab64 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);
@@ -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(css::uno::Reference(cppu::getXWeak(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;
}
@@ -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,8 +509,7 @@ 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), ':');
@@ -1007,21 +1009,16 @@ 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{
+ { { "FetchDirection", PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0 },
+ { "FetchSize", PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0 },
+ { "IsBookmarkable", PROPERTY_ID_ISBOOKMARKABLE, cppu::UnoType<bool>::get(),
+ PropertyAttribute::READONLY },
+ { "ResultSetConcurrency", PROPERTY_ID_RESULTSETCONCURRENCY,
+ cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY },
+ { "ResultSetType", PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(),
+ PropertyAttribute::READONLY } }
+ };
}
IPropertyArrayHelper& OResultSet::getInfoHelper() { return *getArrayHelper(); }
@@ -1097,7 +1094,7 @@ 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());
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx b/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx
index 461e81286cb6..3e43853d364e 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx
@@ -40,9 +40,7 @@
namespace connectivity::mysqlc
{
-using ::com::sun::star::sdbc::SQLException;
using ::com::sun::star::uno::Any;
-using ::com::sun::star::uno::RuntimeException;
/*
** OResultSet
@@ -54,7 +52,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>
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..bcb6d3a6cafc 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;
@@ -282,7 +280,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 +295,19 @@ 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{
+ { { "CursorName", PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0 },
+ { "EscapeProcessing", PROPERTY_ID_ESCAPEPROCESSING, cppu::UnoType<bool>::get(), 0 },
+ { "FetchDirection", PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0 },
+ { "FetchSize", PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0 },
+ { "MaxFieldSize", PROPERTY_ID_MAXFIELDSIZE, cppu::UnoType<sal_Int32>::get(), 0 },
+ { "MaxRows", PROPERTY_ID_MAXROWS, cppu::UnoType<sal_Int32>::get(), 0 },
+ { "QueryTimeOut", PROPERTY_ID_QUERYTIMEOUT, cppu::UnoType<sal_Int32>::get(), 0 },
+ { "ResultSetConcurrency", PROPERTY_ID_RESULTSETCONCURRENCY,
+ cppu::UnoType<sal_Int32>::get(), 0 },
+ { "ResultSetType", PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0 },
+ { "UseBookmarks", PROPERTY_ID_USEBOOKMARKS, cppu::UnoType<bool>::get(), 0 } }
+ };
}
::cppu::IPropertyArrayHelper& OCommonStatement::getInfoHelper() { return *getArrayHelper(); }
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx b/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx
index 14750309ad87..c710b0b46a6d 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx
@@ -36,10 +36,8 @@
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;
typedef ::cppu::WeakComponentImplHelper3<css::sdbc::XWarningsSupplier, css::util::XCancellable,
@@ -49,7 +47,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>
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx b/connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx
index d0847aedc5d6..edba70a935ab 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx
@@ -106,12 +106,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..eedcb35d6164
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_table.cxx
@@ -0,0 +1,167 @@
+/* -*- 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("Name") != rDescriptor->getPropertyValue("Name");
+ // sdbcx::ColumnDescriptor
+ const bool bTypeChanged
+ = xColumn->getPropertyValue("Type") != rDescriptor->getPropertyValue("Type");
+ const bool bTypeNameChanged = !comphelper::getString(xColumn->getPropertyValue("TypeName"))
+ .equalsIgnoreAsciiCase(comphelper::getString(
+ 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");
+
+ // 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("IsAutoIncrement")))
+ 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("IsNullable")) == 0)
+ sSql.append(" NOT NULL");
+
+ getConnection()->createStatement()->execute(sSql.makeStringAndClear());
+ }
+
+ if (bNameChanged)
+ {
+ OUString sNewColName;
+ rDescriptor->getPropertyValue("Name") >>= 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 "RENAME TABLE "; }
+
+/* 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..81498978d3a5
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_tables.cxx
@@ -0,0 +1,157 @@
+/* -*- 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("``", "`");
+}
+
+connectivity::sdbcx::ObjectType 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("Could not acquire table.");
+
+ css::uno::Reference<css::sdbc::XRow> xRow(xTables, css::uno::UNO_QUERY_THROW);
+
+ if (!xTables->next())
+ throw css::uno::RuntimeException();
+
+ connectivity::sdbcx::ObjectType 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("Found more tables than expected.");
+
+ 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
+connectivity::sdbcx::ObjectType 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 connectivity::sdbcx::ObjectType& _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("Type") >>= sType;
+
+ m_xMetaData->getConnection()->createStatement()->execute("DROP " + sType + " " + sName);
+}
+
+/* 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..8b05c5afaf9f
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_tables.hxx
@@ -0,0 +1,57 @@
+/* -*- 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 ::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;
+
+ void createTable(const css::uno::Reference<css::beans::XPropertySet>& descriptor);
+ virtual OUString getNameForObject(const sdbcx::ObjectType& _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 219e0d553d41..ca473cebd84f 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_types.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_types.cxx
@@ -673,6 +673,27 @@ TypeInfoDef const mysqlc_types[] = {
},
// ----------- MySQL-Type: TIMESTAMP SDBC-Type: TIMESTAMP ----------
+
+ // ----------- MySQL-Type: YEAR SDBC-Type: INTEGER ----------
+ {
+ "YEAR", // Typename
+ com::sun::star::sdbc::DataType::SMALLINT, // sdbc-type
+ 10, // Precision
+ "", // Literal prefix
+ "", // Literal suffix
+ "[(M)] [UNSIGNED] [ZEROFILL]", // Create params
+ com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable
+ false, // case sensitive
+ com::sun::star::sdbc::ColumnSearch::FULL, // searchable
+ true, // unsignable
+ false, // fixed_prec_scale
+ true, // auto_increment
+ "YEAR", // local type name
+ 0, // minimum scale
+ 0 // maximum scale
+ },
+
+ // ----------- MySQL-Type: YEAR SDBC-Type: INTEGER ----------
{ nullptr, 0, 0, nullptr, nullptr, nullptr, 0, false, 0, false, false, false, nullptr, 0, 0 }
};
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_user.cxx b/connectivity/source/drivers/mysqlc/mysqlc_user.cxx
new file mode 100644
index 000000000000..6e8c3d734a67
--- /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, "%");
+ }
+ 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..296377c1be94
--- /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
+}
+
+ObjectType 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(), "");
+}
+
+//----- XAppend ---------------------------------------------------------------
+ObjectType Users::appendObject(const OUString& rName,
+ const uno::Reference<XPropertySet>& descriptor)
+{
+ OUString aSql("GRANT USAGE ON * TO ");
+ 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..d4c4d3558e42
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_users.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::mysqlc
+{
+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;
+};
+} // 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..1c79c9225d44
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_views.cxx
@@ -0,0 +1,113 @@
+/* -*- 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())
+{
+}
+
+connectivity::sdbcx::ObjectType 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
+connectivity::sdbcx::ObjectType 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("DROP VIEW");
+
+ 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..14570fc8d9a9
--- /dev/null
+++ b/connectivity/source/drivers/mysqlc/mysqlc_views.hxx
@@ -0,0 +1,50 @@
+/* -*- 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 connectivity::sdbcx::ObjectType createObject(const OUString& _rName) override;
+ virtual void impl_refresh() override;
+ virtual css::uno::Reference<css::beans::XPropertySet> createDescriptor() override;
+ virtual sdbcx::ObjectType
+ 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..b483165212b4 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;
@@ -98,7 +97,7 @@ SQLRETURN OConnection::OpenConnection(const OUString& aConnectStr, sal_Int32 nTi
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);
+ N3SQLSetConnectAttr(m_aConnectionHandle,SQL_ATTR_LOGIN_TIMEOUT,reinterpret_cast<SQLPOINTER>(static_cast<sal_IntPtr>(nTimeOut)),SQL_IS_UINTEGER);
#else
(void)nTimeOut; /* WaE */
#endif
@@ -312,10 +311,10 @@ void SAL_CALL OConnection::setAutoCommit( sal_Bool autoCommit )
::osl::MutexGuard aGuard( m_aMutex );
checkDisposed(OConnection_BASE::rBHelper.bDisposed);
-
+ const sal_IntPtr nAutocommit = autoCommit ? SQL_AUTOCOMMIT_ON : SQL_AUTOCOMMIT_OFF;
OTools::ThrowException(this,N3SQLSetConnectAttr(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);
}
@@ -423,7 +422,7 @@ void SAL_CALL OConnection::setTransactionIsolation( sal_Int32 level )
OTools::ThrowException(this,N3SQLSetConnectAttr(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);
}
diff --git a/connectivity/source/drivers/odbc/ODatabaseMetaData.cxx b/connectivity/source/drivers/odbc/ODatabaseMetaData.cxx
index 957142027182..bd721d60a617 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)
@@ -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 576c3d3e9bef..5fbe8bf8f460 100644
--- a/connectivity/source/drivers/odbc/ODatabaseMetaDataResultSet.cxx
+++ b/connectivity/source/drivers/odbc/ODatabaseMetaDataResultSet.cxx
@@ -47,7 +47,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 +83,7 @@ void ODatabaseMetaDataResultSet::disposing()
m_pConnection->freeStatementHandle(m_aStatementHandle);
- m_aStatement = nullptr;
+ m_aStatement.clear();
m_xMetaData.clear();
m_pConnection.clear();
}
@@ -698,21 +697,41 @@ OUString ODatabaseMetaDataResultSet::getCursorName()
::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()
@@ -881,7 +900,7 @@ void ODatabaseMetaDataResultSet::openTablesTypes( )
m_aColMapping.clear();
m_aColMapping.push_back(-1);
m_aColMapping.push_back(4);
- m_xMetaData = new OResultSetMetaData(m_pConnection.get(),m_aStatementHandle,m_aColMapping);
+ m_xMetaData = new OResultSetMetaData(m_pConnection.get(),m_aStatementHandle,std::vector(m_aColMapping));
checkColumnCount();
}
@@ -898,7 +917,7 @@ void ODatabaseMetaDataResultSet::openCatalogs()
m_aColMapping.clear();
m_aColMapping.push_back(-1);
m_aColMapping.push_back(1);
- m_xMetaData = new OResultSetMetaData(m_pConnection.get(),m_aStatementHandle,m_aColMapping);
+ m_xMetaData = new OResultSetMetaData(m_pConnection.get(),m_aStatementHandle,std::vector(m_aColMapping));
checkColumnCount();
}
@@ -914,7 +933,7 @@ void ODatabaseMetaDataResultSet::openSchemas()
m_aColMapping.clear();
m_aColMapping.push_back(-1);
m_aColMapping.push_back(2);
- m_xMetaData = new OResultSetMetaData(m_pConnection.get(),m_aStatementHandle,m_aColMapping);
+ m_xMetaData = new OResultSetMetaData(m_pConnection.get(),m_aStatementHandle,std::vector(m_aColMapping));
checkColumnCount();
}
diff --git a/connectivity/source/drivers/odbc/ODriver.cxx b/connectivity/source/drivers/odbc/ODriver.cxx
index df7b3fd206b8..cf3c5596aad4 100644
--- a/connectivity/source/drivers/odbc/ODriver.cxx
+++ b/connectivity/source/drivers/odbc/ODriver.cxx
@@ -24,6 +24,7 @@
#include <cppuhelper/supportsservice.hxx>
#include <strings.hrc>
#include <resource/sharedresources.hxx>
+#include <utility>
using namespace connectivity::odbc;
using namespace com::sun::star::uno;
@@ -31,9 +32,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_xContext(std::move(_xContext))
,m_pDriverHandle(SQL_NULL_HANDLE)
{
}
diff --git a/connectivity/source/drivers/odbc/OPreparedStatement.cxx b/connectivity/source/drivers/odbc/OPreparedStatement.cxx
index aa01e2ea936a..21baa12e45c1 100644
--- a/connectivity/source/drivers/odbc/OPreparedStatement.cxx
+++ b/connectivity/source/drivers/odbc/OPreparedStatement.cxx
@@ -40,9 +40,7 @@ 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;
@@ -491,7 +489,7 @@ void SAL_CALL OPreparedStatement::setLong( sal_Int32 parameterIndex, sal_Int64 x
}
catch(SQLException&)
{
- setString(parameterIndex, ORowSetValue(x));
+ setString(parameterIndex, ORowSetValue(x).getString());
}
}
@@ -584,8 +582,7 @@ void SAL_CALL OPreparedStatement::setObjectWithInfo( sal_Int32 parameterIndex, c
{
ORowSetValue aValue;
aValue.fill(x);
- // TODO: make sure that this calls the string overload
- setParameter(parameterIndex, sqlType, scale, aValue);
+ setParameter(parameterIndex, sqlType, scale, aValue.getString());
}
else
setNull(parameterIndex,sqlType);
@@ -910,7 +907,7 @@ void OPreparedStatement::checkParameterIndex(sal_Int32 _parameterIndex)
));
SQLException aNext(sError,*this, OUString(),0,Any());
- ::dbtools::throwInvalidIndexException(*this,makeAny(aNext));
+ ::dbtools::throwInvalidIndexException(*this,Any(aNext));
}
}
diff --git a/connectivity/source/drivers/odbc/OResultSet.cxx b/connectivity/source/drivers/odbc/OResultSet.cxx
index 9e6bb3d91887..9e68cd1763c2 100644
--- a/connectivity/source/drivers/odbc/OResultSet.cxx
+++ b/connectivity/source/drivers/odbc/OResultSet.cxx
@@ -443,8 +443,33 @@ template < typename T > T OResultSet::getValue( sal_Int32 columnIndex )
checkDisposed(OResultSet_BASE::rBHelper.bDisposed);
fillColumn(columnIndex);
m_bWasNull = m_aRow[columnIndex].isNull();
- return m_aRow[columnIndex];
+ auto const & row = m_aRow[columnIndex];
+ if constexpr ( std::is_same_v<css::util::Time, T> )
+ return row.getTime();
+ else if constexpr ( std::is_same_v<css::util::DateTime, T> )
+ return row.getDateTime();
+ else if constexpr ( std::is_same_v<css::util::Date, T> )
+ return row.getDate();
+ else if constexpr ( std::is_same_v<OUString, T> )
+ return row.getString();
+ else if constexpr ( std::is_same_v<sal_Int64, T> )
+ return row.getLong();
+ else if constexpr ( std::is_same_v<sal_Int32, T> )
+ return row.getInt32();
+ else if constexpr ( std::is_same_v<sal_Int16, T> )
+ return row.getInt16();
+ else if constexpr ( std::is_same_v<sal_Int8, T> )
+ return row.getInt8();
+ else if constexpr ( std::is_same_v<float, T> )
+ return row.getFloat();
+ else if constexpr ( std::is_same_v<double, T> )
+ return row.getDouble();
+ else if constexpr ( std::is_same_v<bool, T> )
+ return row.getBool();
+ else
+ return row;
}
+
sal_Bool SAL_CALL OResultSet::getBoolean( sal_Int32 columnIndex )
{
return getValue<bool>( columnIndex );
@@ -469,7 +494,7 @@ Sequence< sal_Int8 > SAL_CALL OResultSet::getBytes( sal_Int32 columnIndex )
case DataType::BINARY:
case DataType::VARBINARY:
case DataType::LONGVARBINARY:
- nRet = m_aRow[columnIndex];
+ nRet = m_aRow[columnIndex].getSequence();
break;
default:
{
@@ -866,7 +891,7 @@ void SAL_CALL OResultSet::insertRow( )
if(m_pSkipDeletedSet)
{
- if(moveToBookmark(makeAny(aBookmark)))
+ if(moveToBookmark(Any(aBookmark)))
{
sal_Int32 nRowPos = getDriverPos();
if ( -1 == m_nRowPos )
@@ -1378,28 +1403,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()
@@ -1642,7 +1686,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;
@@ -1764,7 +1808,7 @@ void OResultSet::fillNeededData(SQLRETURN _nRet)
case DataType::VARBINARY:
case DataType::LONGVARBINARY:
case DataType::BLOB:
- aSeq = m_aRow[nColumnIndex];
+ aSeq = m_aRow[nColumnIndex].getSequence();
N3SQLPutData (m_aStatementHandle, aSeq.getArray(), aSeq.getLength());
break;
case SQL_WLONGVARCHAR:
diff --git a/connectivity/source/drivers/odbc/OResultSetMetaData.cxx b/connectivity/source/drivers/odbc/OResultSetMetaData.cxx
index 21b95c6a7b29..f71e77d19c81 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;
diff --git a/connectivity/source/drivers/odbc/OStatement.cxx b/connectivity/source/drivers/odbc/OStatement.cxx
index c5d63ef771a8..d8b5d6ce75de 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 )
@@ -131,9 +129,10 @@ Sequence< Type > SAL_CALL OStatement_Base::getTypes( )
Sequence< Type > aOldTypes = OStatement_BASE::getTypes();
if ( m_pConnection.is() && !m_pConnection->isAutoRetrievingEnabled() )
{
- auto newEnd = std::remove(aOldTypes.begin(), aOldTypes.end(),
+ auto [begin, end] = asNonConstRange(aOldTypes);
+ auto newEnd = std::remove(begin, end,
cppu::UnoType<XGeneratedResultSet>::get());
- aOldTypes.realloc(std::distance(aOldTypes.begin(), newEnd));
+ aOldTypes.realloc(std::distance(begin, newEnd));
}
return ::comphelper::concatSequences(aTypes.getTypes(),aOldTypes);
@@ -476,8 +475,8 @@ Sequence< sal_Int32 > SAL_CALL OStatement::executeBatch( )
for (auto const& elem : m_aBatchVector)
{
- aBatchSql.append(OUStringToOString(elem,getOwnConnection()->getTextEncoding()));
- aBatchSql.append(";");
+ aBatchSql.append(OUStringToOString(elem,getOwnConnection()->getTextEncoding())
+ + ";");
}
OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!");
@@ -614,7 +613,7 @@ Any SAL_CALL OStatement_Base::getWarnings( )
checkDisposed(OStatement_BASE::rBHelper.bDisposed);
- return makeAny(m_aLastWarning);
+ return Any(m_aLastWarning);
}
@@ -858,31 +857,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
+ }
+ }
+ };
}
diff --git a/connectivity/source/drivers/postgresql/pq_array.cxx b/connectivity/source/drivers/postgresql/pq_array.cxx
index 5ae646f230e3..841ed70c6cb2 100644
--- a/connectivity/source/drivers/postgresql/pq_array.cxx
+++ b/connectivity/source/drivers/postgresql/pq_array.cxx
@@ -100,7 +100,7 @@ css::uno::Reference< css::sdbc::XResultSet > Array::getResultSetAtIndex(
}
return new SequenceResultSet(
- m_xMutex, m_owner, getStatics().resultSetArrayColumnNames, ret, m_tc );
+ m_xMutex, m_owner, std::vector(getStatics().resultSetArrayColumnNames), std::move(ret), m_tc );
}
diff --git a/connectivity/source/drivers/postgresql/pq_array.hxx b/connectivity/source/drivers/postgresql/pq_array.hxx
index b42e6689b93b..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,
- const std::vector< css::uno::Any > & data,
- const css::uno::Reference< css::uno::XInterface > & owner,
- const css::uno::Reference< css::script::XTypeConverter > &tc) :
- m_data( data ),
- m_owner( owner ),
- m_tc( tc ),
- m_xMutex( mutex )
+ rtl::Reference< comphelper::RefCountedMutex > mutex,
+ std::vector< css::uno::Any > && data,
+ css::uno::Reference< css::uno::XInterface > owner,
+ css::uno::Reference< css::script::XTypeConverter > tc) :
+ m_data( std::move(data) ),
+ 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_connection.cxx b/connectivity/source/drivers/postgresql/pq_connection.cxx
index 9487e51def60..091479f87f95 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 )
{
}
@@ -330,7 +331,15 @@ class cstr_vector
std::vector<char*> values;
std::vector<bool> acquired;
public:
- cstr_vector () : values(), acquired() { values.reserve(8); acquired.reserve(8); }
+#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");
diff --git a/connectivity/source/drivers/postgresql/pq_connection.hxx b/connectivity/source/drivers/postgresql/pq_connection.hxx
index f30483f70938..2bba070a7273 100644
--- a/connectivity/source/drivers/postgresql/pq_connection.hxx
+++ b/connectivity/source/drivers/postgresql/pq_connection.hxx
@@ -134,7 +134,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 8f2021608830..1fbcb1aa69f5 100644
--- a/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx
+++ b/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx
@@ -74,6 +74,7 @@
#include "pq_statics.hxx"
#include "pq_tools.hxx"
+#include <o3tl/string_view.hxx>
#include <rtl/ustrbuf.hxx>
#include <sal/macros.h>
#include <com/sun/star/sdbc/TransactionIsolation.hpp>
@@ -83,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;
@@ -113,12 +115,12 @@ 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_origin(std::move( origin )),
m_getIntSetting_stmt ( m_origin->prepareStatement("SELECT setting FROM pg_catalog.pg_settings WHERE name=?") )
{
init_getReferences_stmt();
@@ -209,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;
}
@@ -309,8 +311,8 @@ OUString DatabaseMetaData::getSQLKeywords( )
}
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???
@@ -1178,46 +1180,46 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getTables(
closeable->close();
return new SequenceResultSet(
- m_xMutex, *this, statics.tablesRowNames, vec, m_pSettings->tc );
+ m_xMutex, *this, std::vector(statics.tablesRowNames), std::move(vec), m_pSettings->tc );
}
namespace
{
// sort no schema first, then "public", then normal schemas, then internal schemas
- int compare_schema(const OUString &nsA, const OUString &nsB)
+ int compare_schema(std::u16string_view nsA, std::u16string_view nsB)
{
- if (nsA.isEmpty())
+ if (nsA.empty())
{
- return nsB.isEmpty() ? 0 : -1;
+ return nsB.empty() ? 0 : -1;
}
- else if (nsB.isEmpty())
+ else if (nsB.empty())
{
- assert(!nsA.isEmpty());
+ assert(!nsA.empty());
return 1;
}
- else if(nsA == "public")
+ else if(nsA == u"public")
{
- return (nsB == "public") ? 0 : -1;
+ return (nsB == u"public") ? 0 : -1;
}
- else if(nsB == "public")
+ 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(nsB.startsWith("pg_"))
- return nsA.compareTo(nsB);
+ if(o3tl::starts_with(nsB, u"pg_"))
+ return nsA.compare(nsB);
else
return 1;
}
- else if(nsB.startsWith("pg_"))
+ else if(o3tl::starts_with(nsB, u"pg_"))
{
return -1;
}
else
{
- return nsA.compareTo(nsB);
+ return nsA.compare(nsB);
}
}
@@ -1229,7 +1231,7 @@ namespace
OUString valueB;
a[0] >>= valueA;
b[0] >>= valueB;
- return compare_schema(valueA, valueB);
+ return compare_schema(valueA, valueB) < 0;
}
};
}
@@ -1261,7 +1263,7 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getSchemas( )
if( closeable.is() )
closeable->close();
return new SequenceResultSet(
- m_xMutex, *this, getStatics().schemaNames, vec, m_pSettings->tc );
+ m_xMutex, *this, std::vector(getStatics().schemaNames), std::move(vec), m_pSettings->tc );
}
css::uno::Reference< XResultSet > DatabaseMetaData::getCatalogs( )
@@ -1278,7 +1280,7 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getTableTypes( )
// LEM TODO: this can be made dynamic, see JDBC driver
MutexGuard guard( m_xMutex->GetMutex() );
return new SequenceResultSet(
- m_xMutex, *this, getStatics().tableTypeNames, getStatics().tableTypeData,
+ m_xMutex, *this, std::vector(getStatics().tableTypeNames), std::vector(getStatics().tableTypeData),
m_pSettings->tc );
}
@@ -1363,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 ),
@@ -1404,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 ++;
}
}
@@ -1598,7 +1599,7 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getColumns(
closeable->close();
return new SequenceResultSet(
- m_xMutex, *this, statics.columnRowNames, vec, m_pSettings->tc );
+ m_xMutex, *this, std::vector(statics.columnRowNames), std::move(vec), m_pSettings->tc );
}
css::uno::Reference< XResultSet > DatabaseMetaData::getColumnPrivileges(
@@ -1781,7 +1782,7 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getPrimaryKeys(
elements ++;
}
return new SequenceResultSet(
- m_xMutex, *this, getStatics().primaryKeyNames, ret, m_pSettings->tc );
+ m_xMutex, *this, std::vector(getStatics().primaryKeyNames), std::move(ret), m_pSettings->tc );
}
// Copied / adapted / simplified from JDBC driver
@@ -2085,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;
@@ -2297,8 +2298,8 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getTypeInfo( )
return new SequenceResultSet(
m_xMutex,
*this,
- getStatics().typeinfoColumnNames,
- vec,
+ std::vector(getStatics().typeinfoColumnNames),
+ std::move(vec),
m_pSettings->tc,
&( getStatics().typeInfoMetaData ));
}
@@ -2422,8 +2423,8 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getIndexInfo(
}
}
return new SequenceResultSet(
- m_xMutex, *this, getStatics().indexinfoColumnNames,
- vec,
+ m_xMutex, *this, std::vector(getStatics().indexinfoColumnNames),
+ std::move(vec),
m_pSettings->tc );
}
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 2a5becec5149..8e07123a2b0f 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;
@@ -70,9 +64,7 @@ Reference< XConnection > Driver::connect(
if( ! acceptsURL( url ) ) // XDriver spec tells me to do so ...
return Reference< XConnection > ();
- Sequence< Any > seq ( 2 );
- seq[0] <<= url;
- seq[1] <<= info;
+ Sequence< Any > seq{ Any(url), Any(info) };
return Reference< XConnection> (
m_smgr->createInstanceWithArgumentsAndContext(
"org.openoffice.comp.connectivity.pq.Connection.noext",
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..e616e9b22966 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;
@@ -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 "
@@ -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 )
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..0058041c87b5 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;
@@ -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?
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 02030729ad73..defb99906048 100644
--- a/connectivity/source/drivers/postgresql/pq_sequenceresultset.cxx
+++ b/connectivity/source/drivers/postgresql/pq_sequenceresultset.cxx
@@ -65,17 +65,17 @@ Any SequenceResultSet::getValue( sal_Int32 columnIndex )
SequenceResultSet::SequenceResultSet(
const ::rtl::Reference< comphelper::RefCountedMutex > & mutex,
const css::uno::Reference< css::uno::XInterface > &owner,
- const std::vector< OUString > &colNames,
- const std::vector< std::vector< Any > > &data,
+ std::vector< OUString >&& colNames,
+ std::vector< std::vector< Any > >&& data,
const Reference< css::script::XTypeConverter > & tc,
const ColumnMetaDataVector *pVec) :
BaseResultSet( mutex, owner, data.size(), colNames.size(), tc ),
- m_data(data ),
- m_columnNames( colNames )
+ m_data(std::move(data) ),
+ m_columnNames( std::move(colNames) )
{
if( pVec )
{
- m_meta = new SequenceResultSetMetaData( *pVec, m_columnNames.size() );
+ m_meta = new SequenceResultSetMetaData( std::vector(*pVec), m_columnNames.size() );
}
}
diff --git a/connectivity/source/drivers/postgresql/pq_sequenceresultset.hxx b/connectivity/source/drivers/postgresql/pq_sequenceresultset.hxx
index 346adc594ce9..64ac212b6b76 100644
--- a/connectivity/source/drivers/postgresql/pq_sequenceresultset.hxx
+++ b/connectivity/source/drivers/postgresql/pq_sequenceresultset.hxx
@@ -71,8 +71,8 @@ public:
SequenceResultSet(
const ::rtl::Reference< comphelper::RefCountedMutex > & mutex,
const css::uno::Reference< css::uno::XInterface > &owner,
- const std::vector< OUString > &colNames,
- const std::vector< std::vector< css::uno::Any > > &data,
+ std::vector< OUString >&& colNames,
+ std::vector< std::vector< css::uno::Any > >&& data,
const css::uno::Reference< css::script::XTypeConverter > &tc,
const ColumnMetaDataVector *pVec = nullptr);
virtual ~SequenceResultSet() override;
diff --git a/connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.cxx b/connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.cxx
index d45ffc0a614a..568e6bb9f49d 100644
--- a/connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.cxx
+++ b/connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.cxx
@@ -46,9 +46,9 @@ namespace pq_sdbc_driver
{
SequenceResultSetMetaData::SequenceResultSetMetaData(
- const ColumnMetaDataVector &metaDataVector,
+ ColumnMetaDataVector&& metaDataVector,
int colCount ) :
- m_columnData( metaDataVector ),
+ m_columnData( std::move(metaDataVector) ),
m_colCount( colCount )
{
}
diff --git a/connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.hxx b/connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.hxx
index affb7c37186d..3cd32ff66d7a 100644
--- a/connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.hxx
+++ b/connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.hxx
@@ -56,7 +56,7 @@ namespace pq_sdbc_driver
public:
SequenceResultSetMetaData(
- const ColumnMetaDataVector &vec,
+ ColumnMetaDataVector&& vec,
int colCount );
public:
diff --git a/connectivity/source/drivers/postgresql/pq_statement.cxx b/connectivity/source/drivers/postgresql/pq_statement.cxx
index 946d25b0c91e..648faa69811b 100644
--- a/connectivity/source/drivers/postgresql/pq_statement.cxx
+++ b/connectivity/source/drivers/postgresql/pq_statement.cxx
@@ -44,7 +44,6 @@
#include <osl/time.h>
#include <rtl/ustrbuf.hxx>
-#include <rtl/strbuf.hxx>
#include <comphelper/sequence.hxx>
@@ -60,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>
@@ -253,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() );
@@ -430,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,
@@ -442,12 +442,12 @@ 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(
data->refMutex, data->owner, data->ppSettings, result,
- schema, table,sourceTableKeys );
+ schema, table, std::move(sourceTableKeys) );
}
else if( ! table.getLength() )
{
@@ -456,15 +456,12 @@ bool executePostgresCommand( const OString & cmd, struct CommandData *data )
}
else if( !sourceTableKeys.empty() )
{
- OStringBuffer buf( 128 );
- buf.append( "can't support updateable resultset for table " );
- buf.append( OUStringToOString( schema, ConnectionSettings::encoding ) );
- buf.append( "." );
- buf.append( OUStringToOString( table, ConnectionSettings::encoding ) );
- buf.append( ", because resultset does not contain a part of the primary key ( column " );
- buf.append( OUStringToOString( sourceTableKeys[i], ConnectionSettings::encoding ) );
- buf.append( " is missing )" );
- aReason = buf.makeStringAndClear();
+ aReason = "can't support updateable resultset for table "
+ + OUStringToOString( schema, ConnectionSettings::encoding ) + "."
+ + OUStringToOString( table, ConnectionSettings::encoding )
+ + ", because resultset does not contain a part of the primary key ( column "
+ + OUStringToOString( sourceTableKeys[i], ConnectionSettings::encoding )
+ + " is missing )";
}
else
{
@@ -559,7 +556,7 @@ static void getAutoValues(
const Reference< XConnection > & connection,
const OUString &schemaName,
const OUString & tableName,
- ConnectionSettings *pConnectionSettings )
+ const ConnectionSettings *pConnectionSettings )
{
OUString strDefaultValue = getColExprForDefaultSettingVal(pConnectionSettings);
Reference< XPreparedStatement > stmt = connection->prepareStatement(
@@ -593,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;
@@ -602,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 " );
@@ -610,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;
@@ -703,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 c4bee2152ef2..f69556202240 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;
};
@@ -89,9 +89,10 @@ static cppu::IPropertyArrayHelper * createPropertyArrayHelper(
PropertyDef const *props, int count , sal_Int16 attr )
{
Sequence< Property > seq( count );
+ auto seqRange = asNonConstRange(seq);
for( int i = 0 ; i < count ; i ++ )
{
- seq[i] = Property( props[i].name, i, props[i].type, attr );
+ seqRange[i] = Property( props[i].name, i, props[i].type, attr );
}
return new cppu::OPropertyArrayHelper( seq, true );
}
@@ -100,9 +101,10 @@ static cppu::IPropertyArrayHelper * createPropertyArrayHelper(
PropertyDefEx const *props, int count )
{
Sequence< Property > seq( count );
+ auto seqRange = asNonConstRange(seq);
for( int i = 0 ; i < count ; i ++ )
{
- seq[i] = Property( props[i].name, i, props[i].type, props[i].attribute );
+ seqRange[i] = Property( props[i].name, i, props[i].type, props[i].attribute );
}
return new cppu::OPropertyArrayHelper( seq, true );
}
@@ -184,8 +186,7 @@ Statics & getStatics()
// Table props set
ImplementationStatics &ist = statics.refl.table;
ist.implName = "org.openoffice.comp.pq.sdbcx.Table";
- ist.serviceNames = Sequence< OUString > ( 1 );
- ist.serviceNames[0] = "com.sun.star.sdbcx.Table";
+ ist.serviceNames = { "com.sun.star.sdbcx.Table" };
PropertyDef tableDef[] =
{
PropertyDef( statics.CATALOG_NAME , tString ),
@@ -196,7 +197,7 @@ 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";
@@ -210,12 +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 = Sequence< OUString > ( 1 );
- statics.refl.column.serviceNames[0] = "com.sun.star.sdbcx.Column";
+ statics.refl.column.serviceNames = { "com.sun.star.sdbcx.Column" };
PropertyDefEx columnDef[] =
{
PropertyDefEx( statics.CATALOG_NAME , tString, READONLY ),
@@ -233,13 +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 = Sequence< OUString > ( 1 );
- statics.refl.columnDescriptor.serviceNames[0] =
- "com.sun.star.sdbcx.ColumnDescriptor";
+ statics.refl.columnDescriptor.serviceNames = { "com.sun.star.sdbcx.ColumnDescriptor" };
PropertyDef columnDescDef[] =
{
PropertyDef( statics.CATALOG_NAME , tString ),
@@ -258,12 +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 = Sequence< OUString > ( 1 );
- statics.refl.key.serviceNames[0] = "com.sun.star.sdbcx.Key";
+ statics.refl.key.serviceNames = { "com.sun.star.sdbcx.Key" };
PropertyDef keyDef[] =
{
PropertyDef( statics.DELETE_RULE, tInt ),
@@ -275,15 +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 = Sequence< OUString > ( 1 );
- statics.refl.keyDescriptor.serviceNames[0] =
- "com.sun.star.sdbcx.KeyDescriptor";
+ statics.refl.keyDescriptor.serviceNames = { "com.sun.star.sdbcx.KeyDescriptor" };
PropertyDef keyDescDef[] =
{
PropertyDef( statics.DELETE_RULE, tInt ),
@@ -293,13 +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 = Sequence< OUString > ( 1 );
- statics.refl.keycolumn.serviceNames[0] = "com.sun.star.sdbcx.KeyColumn";
+ statics.refl.keycolumn.serviceNames = { "com.sun.star.sdbcx.KeyColumn" };
PropertyDef keycolumnDef[] =
{
PropertyDef( statics.CATALOG_NAME , tString ),
@@ -317,26 +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 = Sequence< OUString > ( 1 );
- statics.refl.keycolumnDescriptor.serviceNames[0] =
- "com.sun.star.sdbcx.KeyColumnDescriptor";
+ statics.refl.keycolumnDescriptor.serviceNames =
+ { "com.sun.star.sdbcx.KeyColumnDescriptor" };
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 = Sequence< OUString > ( 1 );
- statics.refl.view.serviceNames[0] = "com.sun.star.sdbcx.View";
+ statics.refl.view.serviceNames = { "com.sun.star.sdbcx.View" };
PropertyDef viewDef[] =
{
PropertyDef( statics.CATALOG_NAME , tString ),
@@ -346,43 +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 = Sequence< OUString > ( 1 );
- statics.refl.viewDescriptor.serviceNames[0] = "com.sun.star.sdbcx.ViewDescriptor";
+ statics.refl.viewDescriptor.serviceNames = { "com.sun.star.sdbcx.ViewDescriptor" };
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 = Sequence< OUString > ( 1 );
- statics.refl.user.serviceNames[0] = "com.sun.star.sdbcx.User";
+ statics.refl.user.serviceNames = { "com.sun.star.sdbcx.User" };
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 = Sequence< OUString > ( 1 );
- statics.refl.userDescriptor.serviceNames[0] =
- "com.sun.star.sdbcx.UserDescriptor";
+ statics.refl.userDescriptor.serviceNames = { "com.sun.star.sdbcx.UserDescriptor" };
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 = Sequence< OUString > ( 1 );
- statics.refl.index.serviceNames[0] = "com.sun.star.sdbcx.Index";
+ statics.refl.index.serviceNames = { "com.sun.star.sdbcx.Index" };
PropertyDef indexDef[] =
{
PropertyDef( statics.CATALOG , tString ),
@@ -393,21 +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 = Sequence< OUString > ( 1 );
- statics.refl.indexDescriptor.serviceNames[0] =
- "com.sun.star.sdbcx.IndexDescriptor";
+ statics.refl.indexDescriptor.serviceNames = { "com.sun.star.sdbcx.IndexDescriptor" };
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 = Sequence< OUString > ( 1 );
- statics.refl.indexColumn.serviceNames[0] = "com.sun.star.sdbcx.IndexColumn";
+ statics.refl.indexColumn.serviceNames = { "com.sun.star.sdbcx.IndexColumn" };
PropertyDef indexColumnDef[] =
{
PropertyDef( statics.CATALOG_NAME , tString ),
@@ -425,47 +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 = Sequence< OUString > ( 1 );
- statics.refl.indexColumnDescriptor.serviceNames[0] =
- "com.sun.star.sdbcx.IndexColumnDescriptor";
+ statics.refl.indexColumnDescriptor.serviceNames =
+ { "com.sun.star.sdbcx.IndexColumnDescriptor" };
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 = Sequence< OUString > ( 1 );
- statics.refl.resultSet.serviceNames[0] = "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 = Sequence< OUString > ( 1 );
- statics.refl.updateableResultSet.serviceNames[0] = "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 );
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 1bb089a5407a..fb42f864f97e 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;
@@ -125,7 +125,7 @@ void bufferEscapeConstant( OUStringBuffer & buf, std::u16string_view value, Conn
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 )
@@ -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 ) )
{
@@ -840,17 +840,17 @@ OUString getColExprForDefaultSettingVal(ConnectionSettings const *settings)
OUString("pg_get_expr(pg_attrdef.adbin, pg_attrdef.adrelid, true)");
}
-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;
@@ -918,11 +918,12 @@ Sequence< OUString > convertMappedIntArray2StringArray(
const Int2StringMap &map, const Sequence< sal_Int32 > &intArray )
{
Sequence< OUString > ret( intArray.getLength() );
+ auto retRange = asNonConstRange(ret);
for( int i = 0; i < intArray.getLength() ; i ++ )
{
Int2StringMap::const_iterator ii = map.find( intArray[i] );
if( ii != map.end() )
- ret[i] = ii->second;
+ retRange[i] = ii->second;
}
return ret;
}
@@ -942,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 8c5fdd3c8965..49eb65cd9fbf 100644
--- a/connectivity/source/drivers/postgresql/pq_updateableresultset.cxx
+++ b/connectivity/source/drivers/postgresql/pq_updateableresultset.cxx
@@ -89,7 +89,7 @@ css::uno::Reference< css::sdbc::XCloseable > UpdateableResultSet::createFromPGRe
PGresult *result,
const OUString &schema,
const OUString &table,
- const std::vector< OUString > &primaryKey )
+ std::vector< OUString > && primaryKey )
{
sal_Int32 columnCount = PQnfields( result );
sal_Int32 rowCount = PQntuples( result );
@@ -120,7 +120,7 @@ css::uno::Reference< css::sdbc::XCloseable > UpdateableResultSet::createFromPGRe
}
rtl::Reference<UpdateableResultSet> pRS = new UpdateableResultSet(
- mutex, owner, columnNames, data, ppSettings, schema, table, primaryKey );
+ mutex, owner, std::move(columnNames), std::move(data), ppSettings, schema, table, std::move(primaryKey) );
pRS->m_meta = new ResultSetMetaData( mutex, pRS,nullptr, ppSettings, result, schema, table );
@@ -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;
@@ -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() );
diff --git a/connectivity/source/drivers/postgresql/pq_updateableresultset.hxx b/connectivity/source/drivers/postgresql/pq_updateableresultset.hxx
index aa800bb4a701..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
{
@@ -75,17 +76,17 @@ private:
UpdateableResultSet(
const ::rtl::Reference< comphelper::RefCountedMutex > & mutex,
const css::uno::Reference< css::uno::XInterface > &owner,
- const std::vector< OUString > &colNames,
- const std::vector< std::vector< css::uno::Any > > &data,
+ std::vector< OUString >&& colNames,
+ std::vector< std::vector< css::uno::Any > >&& data,
ConnectionSettings **ppSettings,
- const OUString &schema,
- const OUString &table,
- const std::vector< OUString > &primaryKey)
- : SequenceResultSet( mutex, owner, colNames, data, (*ppSettings)->tc ),
+ 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_primaryKey( primaryKey ),
+ m_schema(std::move( schema )),
+ m_table(std::move( table )),
+ m_primaryKey( std::move(primaryKey) ),
m_insertRow( false )
{
// LEM TODO: this duplicates code in pq_resultset.cxx, except for different value
@@ -118,7 +119,7 @@ public:
PGresult *result,
const OUString &schema,
const OUString &table,
- const std::vector< OUString > &primaryKey );
+ std::vector< OUString > && primaryKey );
public: // XInterface
virtual void SAL_CALL acquire() noexcept override { SequenceResultSet::acquire(); }
diff --git a/connectivity/source/drivers/postgresql/pq_xbase.cxx b/connectivity/source/drivers/postgresql/pq_xbase.cxx
index 1fec4130a9db..001046aa52fa 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() )
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 34d9ef38f36e..2902879c49b0 100644
--- a/connectivity/source/drivers/postgresql/pq_xcolumns.cxx
+++ b/connectivity/source/drivers/postgresql/pq_xcolumns.cxx
@@ -34,6 +34,12 @@
*
************************************************************************/
+#include <sal/config.h>
+
+#include <string_view>
+
+#include <o3tl/safeint.hxx>
+#include <o3tl/string_view.hxx>
#include <rtl/ref.hxx>
#include <rtl/ustrbuf.hxx>
#include <sal/log.hxx>
@@ -44,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"
@@ -56,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;
@@ -70,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 )
@@ -81,9 +87,9 @@ static Any isCurrency( const OUString & typeName )
// typeName.equalsIgnoreAsciiCase("bigserial");
// }
-static Any isAutoIncrement( const OUString & defaultValue )
+static Any isAutoIncrement( std::u16string_view defaultValue )
{
- bool ret = defaultValue.startsWith( "nextval(" );
+ bool ret = o3tl::starts_with( defaultValue, u"nextval(" );
// printf( "%s %d\n",
// OUStringToOString(defaultValue, RTL_TEXTENCODING_ASCII_US).getStr(),
// ret );
@@ -104,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)
+ OUString schemaName,
+ OUString tableName)
: Container( refMutex, origin, pSettings, "COLUMN" ),
- m_schemaName( schemaName ),
- m_tableName( tableName )
+ m_schemaName(std::move( schemaName )),
+ m_tableName(std::move( tableName ))
{}
Columns::~Columns()
@@ -180,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 ) ) );
@@ -208,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
@@ -311,7 +317,7 @@ void Columns::refresh()
// name ) );
{
- m_values.push_back( makeAny( prop ) );
+ m_values.emplace_back(prop);
map[ name ] = columnIndex;
++columnIndex;
}
@@ -400,11 +406,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() );
}
@@ -456,7 +461,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 );
@@ -488,7 +493,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 "
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 06323615f4b7..131148c3e192 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,17 +158,18 @@ 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 ];
}
Sequence< OUString > Container::getElementNames( )
{
Sequence< OUString > ret( m_values.size() );
+ auto retRange = asNonConstRange(ret);
for( const auto& [rName, rIndex] : m_name2index )
{
// give element names in index order !
- ret[rIndex] = rName;
+ retRange[rIndex] = rName;
}
return ret;
}
@@ -188,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 )
@@ -211,8 +214,8 @@ class ContainerEnumeration : public ::cppu::WeakImplHelper< XEnumeration >
std::vector< css::uno::Any > m_vec;
sal_Int32 m_index;
public:
- explicit ContainerEnumeration( const std::vector< css::uno::Any > &vec )
- : m_vec( vec ),
+ explicit ContainerEnumeration( std::vector< css::uno::Any >&& vec )
+ : m_vec( std::move(vec) ),
m_index( -1 )
{}
@@ -243,7 +246,7 @@ css::uno::Any ContainerEnumeration::nextElement()
Reference< XEnumeration > Container::createEnumeration( )
{
- return new ContainerEnumeration( m_values );
+ return new ContainerEnumeration( std::vector(m_values) );
}
void Container::addRefreshListener(
@@ -298,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 "
@@ -349,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(
@@ -390,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..2bca00e13b77 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 ),
+ m_schemaName(std::move( schemaName )),
+ m_tableName(std::move( tableName )),
+ m_indexName(std::move( indexName )),
m_columns( columns )
{}
@@ -131,7 +131,7 @@ void IndexColumns::refresh()
columnMetaData2SDBCX( pIndexColumn.get(), xRow );
pIndexColumn->setPropertyValue_NoBroadcast_public(
- st.IS_ASCENDING , makeAny( false ) );
+ st.IS_ASCENDING , Any( false ) );
m_values[ index ] <<= prop;
m_name2index[ columnName ] = index;
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 5f97fed9510a..bff96216c568 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 ))
{
}
@@ -149,20 +150,21 @@ 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());
+ auto columnNamesRange = asNonConstRange(columnNames);
for( size_t columns = 0 ; columns < seq.size() ; columns ++ )
{
- columnNames[columns] = column2NameMap[ seq[columns] ];
+ columnNamesRange[columns] = column2NameMap[ seq[columns] ];
}
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(prop);
map[ currentIndexName ] = index;
++index;
}
@@ -234,7 +236,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..68f05fd27d4e 100644
--- a/connectivity/source/drivers/postgresql/pq_xkey.hxx
+++ b/connectivity/source/drivers/postgresql/pq_xkey.hxx
@@ -61,8 +61,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(); }
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..89f63ceb5a65 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 ),
+ m_schemaName(std::move( schemaName )),
+ m_tableName(std::move( tableName )),
m_columnNames( columnNames ),
m_foreignColumnNames( foreignColumnNames )
{}
@@ -126,11 +126,11 @@ void KeyColumns::refresh()
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(prop);
map[ name ] = columnIndex;
++columnIndex;
}
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..0758be630e04 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()
@@ -156,16 +158,16 @@ void Keys::refresh()
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 +176,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 +191,7 @@ void Keys::refresh()
{
map[ xRow->getString( 1 ) ] = keyIndex;
- m_values.push_back( makeAny( prop ) );
+ m_values.push_back( Any( prop ) );
++keyIndex;
}
}
@@ -226,7 +228,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..7c8ca73f566b 100644
--- a/connectivity/source/drivers/postgresql/pq_xtable.hxx
+++ b/connectivity/source/drivers/postgresql/pq_xtable.hxx
@@ -36,19 +36,14 @@
#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
{
diff --git a/connectivity/source/drivers/postgresql/pq_xtables.cxx b/connectivity/source/drivers/postgresql/pq_xtables.cxx
index 47606669dd40..423ec81f2166 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;
@@ -111,16 +111,16 @@ void Tables::refresh()
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 +131,7 @@ void Tables::refresh()
css::sdbcx::Privilege::DROP ) ) );
{
- m_values.push_back( makeAny( prop ) );
+ m_values.push_back( Any( prop ) );
map[ schema + "." + name ] = tableIndex;
++tableIndex;
}
@@ -311,7 +311,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.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..08cdf2d1c135 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;
@@ -98,10 +99,10 @@ void Users::refresh()
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( prop ) );
map[ name ] = tableIndex;
++tableIndex;
}
@@ -151,7 +152,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..1f5b6c4fa52c 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;
@@ -110,12 +111,12 @@ void Views::refresh()
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( prop ) );
map[ schema + "." + table ] = viewIndex;
++viewIndex;
}
@@ -175,7 +176,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/WConnection.cxx b/connectivity/source/drivers/writer/WConnection.cxx
index d8fd10302e00..c9900a4e5544 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);
{
@@ -97,18 +96,17 @@ uno::Reference<text::XTextDocument> const& OWriterConnection::acquireDoc()
return m_xDoc;
}
// open read-only as long as updating isn't implemented
- uno::Sequence<beans::PropertyValue> aArgs(2);
- aArgs[0].Name = "Hidden";
- aArgs[0].Value <<= true;
- aArgs[1].Name = "ReadOnly";
- aArgs[1].Value <<= true;
+ uno::Sequence<beans::PropertyValue> aArgs(m_sPassword.isEmpty() ? 2 : 3);
+ auto pArgs = aArgs.getArray();
+ pArgs[0].Name = "Hidden";
+ pArgs[0].Value <<= true;
+ pArgs[1].Name = "ReadOnly";
+ pArgs[1].Value <<= true;
if (!m_sPassword.isEmpty())
{
- const sal_Int32 nPos = aArgs.getLength();
- aArgs.realloc(nPos + 1);
- aArgs[nPos].Name = "Password";
- aArgs[nPos].Value <<= m_sPassword;
+ pArgs[2].Name = "Password";
+ pArgs[2].Value <<= m_sPassword;
}
uno::Reference<frame::XDesktop2> xDesktop
@@ -215,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;
}
@@ -228,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;
}
diff --git a/connectivity/source/drivers/writer/WDatabaseMetaData.cxx b/connectivity/source/drivers/writer/WDatabaseMetaData.cxx
index 99c81b7c2840..1eed92ddcf07 100644
--- a/connectivity/source/drivers/writer/WDatabaseMetaData.cxx
+++ b/connectivity/source/drivers/writer/WDatabaseMetaData.cxx
@@ -90,19 +90,20 @@ 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);
}
}
- pResult->setRows(aRows);
+ pResult->setRows(std::move(aRows));
return pResult;
}
diff --git a/connectivity/source/drivers/writer/WDriver.cxx b/connectivity/source/drivers/writer/WDriver.cxx
index 7c8cde2da3b7..bbd0f71838c1 100644
--- a/connectivity/source/drivers/writer/WDriver.cxx
+++ b/connectivity/source/drivers/writer/WDriver.cxx
@@ -38,17 +38,14 @@ 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.emplace_back(*pCon);
return pCon;
}
@@ -82,7 +79,7 @@ ODriver::getPropertyInfo(const OUString& url, const uno::Sequence<beans::Propert
const OUString sMessage = aResources.getResourceString(STR_URI_SYNTAX_ERROR);
::dbtools::throwGenericSQLException(sMessage, *this);
}
- return uno::Sequence<sdbc::DriverPropertyInfo>();
+ return {};
}
} // namespace
diff --git a/connectivity/source/drivers/writer/WTable.cxx b/connectivity/source/drivers/writer/WTable.cxx
index 8448132556e6..2f0f44855d86 100644
--- a/connectivity/source/drivers/writer/WTable.cxx
+++ b/connectivity/source/drivers/writer/WTable.cxx
@@ -30,8 +30,6 @@
#include <writer/WConnection.hxx>
#include <connectivity/sdbcx/VColumn.hxx>
#include <sal/log.hxx>
-#include <comphelper/servicehelper.hxx>
-#include <cppuhelper/typeprovider.hxx>
namespace com::sun::star::text
{
@@ -172,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)
{
}
@@ -211,19 +206,6 @@ void SAL_CALL OWriterTable::disposing()
m_pWriterConnection = nullptr;
}
-uno::Sequence<sal_Int8> OWriterTable::getUnoTunnelId()
-{
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
-}
-
-sal_Int64 OWriterTable::getSomething(const uno::Sequence<sal_Int8>& rId)
-{
- return (isUnoTunnelId<OWriterTable>(rId)) ? reinterpret_cast<sal_Int64>(this)
- : OWriterTable_BASE::getSomething(rId);
-}
-
bool OWriterTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns& _rCols, bool bRetrieveData)
{
// read the bookmark
diff --git a/connectivity/source/inc/FDatabaseMetaDataResultSet.hxx b/connectivity/source/inc/FDatabaseMetaDataResultSet.hxx
index 413d073b0ac6..f0a3fef76d00 100644
--- a/connectivity/source/inc/FDatabaseMetaDataResultSet.hxx
+++ b/connectivity/source/inc/FDatabaseMetaDataResultSet.hxx
@@ -32,16 +32,15 @@
#include <com/sun/star/lang/XInitialization.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/sdbc/XWarningsSupplier.hpp>
-#include <cppuhelper/compbase.hxx>
-#include <cppuhelper/basemutex.hxx>
#include <comphelper/proparrhlp.hxx>
-#include <comphelper/propertycontainer.hxx>
+#include <comphelper/propertycontainer2.hxx>
#include <connectivity/FValue.hxx>
#include <connectivity/dbtoolsdllapi.hxx>
+#include <comphelper/compbase.hxx>
namespace connectivity
{
- typedef ::cppu::WeakComponentImplHelper< css::sdbc::XResultSet,
+ typedef ::comphelper::WeakComponentImplHelper< css::sdbc::XResultSet,
css::sdbc::XRow,
css::sdbc::XResultSetMetaDataSupplier,
css::util::XCancellable,
@@ -54,11 +53,10 @@ namespace connectivity
// typedef ORefVector<ORowSetValue> ORow;
// typedef ORefVector<ORow> ORows;
- class OOO_DLLPUBLIC_DBTOOLS ODatabaseMetaDataResultSet :
- public cppu::BaseMutex,
- public ODatabaseMetaDataResultSet_BASE,
- public ::comphelper::OPropertyContainer,
- public ::comphelper::OPropertyArrayUsageHelper<ODatabaseMetaDataResultSet>
+ class SAL_DLLPUBLIC_RTTI ODatabaseMetaDataResultSet :
+ public ODatabaseMetaDataResultSet_BASE,
+ public ::comphelper::OPropertyContainer2,
+ public ::comphelper::OPropertyArrayUsageHelper<ODatabaseMetaDataResultSet>
{
public:
@@ -118,8 +116,9 @@ namespace connectivity
void construct();
/// @throws css::sdbc::SQLException
- void checkIndex(sal_Int32 columnIndex );
+ void checkIndex(std::unique_lock<std::mutex>& rGuard, sal_Int32 columnIndex );
void setType(MetaDataResultSetType _eType);
+ css::uno::Reference< css::sdbc::XResultSetMetaData > getMetaData( std::unique_lock<std::mutex>& );
protected:
ORows m_aRows;
@@ -130,22 +129,26 @@ namespace connectivity
virtual const ORowSetValue& getValue(sal_Int32 columnIndex);
// OPropertyArrayUsageHelper
- virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const override;
+ OOO_DLLPUBLIC_DBTOOLS virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const override;
// OPropertySetHelper
- virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override;
+ OOO_DLLPUBLIC_DBTOOLS virtual ::cppu::IPropertyArrayHelper & getInfoHelper() override;
+
+ bool next(std::unique_lock<std::mutex>& );
+ bool isBeforeFirst(std::unique_lock<std::mutex>& );
+ bool isAfterLast(std::unique_lock<std::mutex>& );
virtual ~ODatabaseMetaDataResultSet() override;
public:
- virtual void SAL_CALL acquire() noexcept override;
- virtual void SAL_CALL release() noexcept override;
+ OOO_DLLPUBLIC_DBTOOLS virtual void SAL_CALL acquire() noexcept override;
+ OOO_DLLPUBLIC_DBTOOLS virtual void SAL_CALL release() noexcept override;
/// default construction
ODatabaseMetaDataResultSet();
/// construction of a pre-defined result set type
- ODatabaseMetaDataResultSet( MetaDataResultSetType _eType );
+ OOO_DLLPUBLIC_DBTOOLS ODatabaseMetaDataResultSet( MetaDataResultSetType _eType );
- void setRows(const ORows& _rRows);
+ OOO_DLLPUBLIC_DBTOOLS void setRows(ORows&& _rRows);
// XServiceInfo
@@ -153,14 +156,14 @@ namespace connectivity
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;
- // ::cppu::OComponentHelper
- virtual void SAL_CALL disposing() override;
+ // ::comphelper::WeakComponentImplHelper
+ virtual void disposing(std::unique_lock<std::mutex>&) override;
// XInterface
- virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
+ OOO_DLLPUBLIC_DBTOOLS 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;
+ OOO_DLLPUBLIC_DBTOOLS 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;
@@ -238,31 +241,31 @@ namespace connectivity
// some methods to get already defined ORowSetValues
// this increase the reuse of ORowSetValues
/// return an empty ORowSetValueDecorator
- static ORowSetValueDecoratorRef const & getEmptyValue();
+ OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getEmptyValue();
/// return an ORowSetValueDecorator with 0 as value
- static ORowSetValueDecoratorRef const & get0Value();
+ OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & get0Value();
/// return an ORowSetValueDecorator with 1 as value
- static ORowSetValueDecoratorRef const & get1Value();
+ OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & get1Value();
/// return an ORowSetValueDecorator with ColumnSearch::BASIC as value
- static ORowSetValueDecoratorRef const & getBasicValue();
+ OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getBasicValue();
/// return an ORowSetValueDecorator with string SELECT as value
- static ORowSetValueDecoratorRef const & getSelectValue();
+ OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getSelectValue();
/// return an ORowSetValueDecorator with string INSERT as value
- static ORowSetValueDecoratorRef const & getInsertValue();
+ OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getInsertValue();
/// return an ORowSetValueDecorator with string DELETE as value
- static ORowSetValueDecoratorRef const & getDeleteValue();
+ OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getDeleteValue();
/// return an ORowSetValueDecorator with string UPDATE as value
- static ORowSetValueDecoratorRef const & getUpdateValue();
+ OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getUpdateValue();
/// return an ORowSetValueDecorator with string CREATE as value
- static ORowSetValueDecoratorRef const & getCreateValue();
+ OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getCreateValue();
/// return an ORowSetValueDecorator with string READ as value
- static ORowSetValueDecoratorRef const & getReadValue();
+ OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getReadValue();
/// return an ORowSetValueDecorator with string ALTER as value
- static ORowSetValueDecoratorRef const & getAlterValue();
+ OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getAlterValue();
/// return an ORowSetValueDecorator with string DROP as value
- static ORowSetValueDecoratorRef const & getDropValue();
+ OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getDropValue();
/// return an ORowSetValueDecorator with string ' as value
- static ORowSetValueDecoratorRef const & getQuoteValue();
+ OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getQuoteValue();
};
}
diff --git a/connectivity/source/inc/OColumn.hxx b/connectivity/source/inc/OColumn.hxx
index 57addead1235..2131b3e15254 100644
--- a/connectivity/source/inc/OColumn.hxx
+++ b/connectivity/source/inc/OColumn.hxx
@@ -22,6 +22,7 @@
#include <rtl/ustring.hxx>
#include <sal/types.h>
#include <connectivity/dbtoolsdllapi.hxx>
+#include <utility>
namespace connectivity
{
@@ -64,14 +65,14 @@ namespace connectivity
, m_DefinitelyWritable(false)
{}
- OColumn(const OUString &_aTableName,
+ OColumn(OUString _aTableName,
const OUString &_aColumnName,
sal_Int32 _aNullable,
sal_Int32 _aColumnDisplaySize,
sal_Int32 _aPrecision,
sal_Int32 _aScale,
sal_Int32 _aColumnType)
- : m_TableName(_aTableName),
+ : m_TableName(std::move(_aTableName)),
m_ColumnName(_aColumnName),
m_ColumnLabel(),
diff --git a/connectivity/source/inc/ParameterSubstitution.hxx b/connectivity/source/inc/ParameterSubstitution.hxx
index 11ac90982ca9..a76bd09398fa 100644
--- a/connectivity/source/inc/ParameterSubstitution.hxx
+++ b/connectivity/source/inc/ParameterSubstitution.hxx
@@ -41,7 +41,7 @@ namespace connectivity
ParameterSubstitution( const ParameterSubstitution& ) = delete;
ParameterSubstitution& operator=( const ParameterSubstitution& ) = delete;
public:
- ParameterSubstitution(const css::uno::Reference< css::uno::XComponentContext >& _rxContext );
+ ParameterSubstitution(css::uno::Reference< css::uno::XComponentContext > _rContext );
private:
// XServiceInfo
diff --git a/connectivity/source/inc/TConnection.hxx b/connectivity/source/inc/TConnection.hxx
index 0e9c4c22e750..2dbe2ef6a756 100644
--- a/connectivity/source/inc/TConnection.hxx
+++ b/connectivity/source/inc/TConnection.hxx
@@ -61,7 +61,7 @@ namespace connectivity
rtl_TextEncoding getTextEncoding() const { return m_nTextEncoding; }
const OUString& getURL() const { return m_sURL; }
void setURL(const OUString& _rsUrl) { m_sURL = _rsUrl; }
- void throwGenericSQLException(const char* pErrorResourceId, const css::uno::Reference< css::uno::XInterface>& _xContext);
+ void throwGenericSQLException(TranslateId pErrorResourceId, const css::uno::Reference< css::uno::XInterface>& _xContext);
const SharedResources& getResources() const { return m_aResources;}
void setConnectionInfo(const css::uno::Sequence< css::beans::PropertyValue >& _aInfo) { m_aConnectionInfo = _aInfo; }
@@ -73,7 +73,7 @@ namespace connectivity
//XUnoTunnel
virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
+ static const css::uno::Sequence< sal_Int8 > & getUnoTunnelId();
};
}
diff --git a/connectivity/source/inc/TKeyValue.hxx b/connectivity/source/inc/TKeyValue.hxx
index baed7f75c23b..49d41e0144f2 100644
--- a/connectivity/source/inc/TKeyValue.hxx
+++ b/connectivity/source/inc/TKeyValue.hxx
@@ -44,12 +44,12 @@ namespace connectivity
OUString getKeyString(std::vector<ORowSetValueDecoratorRef>::size_type i) const
{
OSL_ENSURE(m_aKeys.size() > i,"Wrong index for KEyValue");
- return m_aKeys[i]->getValue();
+ return m_aKeys[i]->getValue().getString();
}
double getKeyDouble(std::vector<ORowSetValueDecoratorRef>::size_type i) const
{
OSL_ENSURE(m_aKeys.size() > i,"Wrong index for KEyValue");
- return m_aKeys[i]->getValue();
+ return m_aKeys[i]->getValue().getDouble();
}
sal_Int32 getValue() const { return m_nValue; }
diff --git a/connectivity/source/inc/TPrivilegesResultSet.hxx b/connectivity/source/inc/TPrivilegesResultSet.hxx
index b7206b7de476..8c4070fce97a 100644
--- a/connectivity/source/inc/TPrivilegesResultSet.hxx
+++ b/connectivity/source/inc/TPrivilegesResultSet.hxx
@@ -36,8 +36,8 @@ namespace connectivity
OResultSetPrivileges(const css::uno::Reference< css::sdbc::XDatabaseMetaData>& _rxMeta
,const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern);
- // ::cppu::OComponentHelper
- virtual void SAL_CALL disposing() override;
+ // ::comphelper::WeakComponentImplHelper
+ virtual void disposing(std::unique_lock<std::mutex>&) override;
// XResultSet
virtual sal_Bool SAL_CALL next( ) override;
};
diff --git a/connectivity/source/inc/TSortIndex.hxx b/connectivity/source/inc/TSortIndex.hxx
index efd518d2ed59..3ac339f7e9f0 100644
--- a/connectivity/source/inc/TSortIndex.hxx
+++ b/connectivity/source/inc/TSortIndex.hxx
@@ -57,8 +57,8 @@ namespace connectivity
public:
- OSortIndex( const std::vector<OKeyType>& _aKeyType,
- const std::vector<TAscendingOrder>& _aAscending);
+ OSortIndex( std::vector<OKeyType>&& _aKeyType,
+ std::vector<TAscendingOrder>&& _aAscending);
OSortIndex(OSortIndex const &) = delete; // MSVC2015 workaround
OSortIndex& operator=(OSortIndex const &) = delete; // MSVC2015 workaround
diff --git a/connectivity/source/inc/ado/AColumn.hxx b/connectivity/source/inc/ado/AColumn.hxx
index fdb0afc74d24..f297964820dc 100644
--- a/connectivity/source/inc/ado/AColumn.hxx
+++ b/connectivity/source/inc/ado/AColumn.hxx
@@ -44,9 +44,6 @@ namespace connectivity::ado
OAdoColumn(bool _bCase,OConnection* _pConnection);
// ODescriptor
virtual void construct() override;
- // css::lang::XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
WpADOColumn getColumnImpl() const;
};
diff --git a/connectivity/source/inc/ado/AConnection.hxx b/connectivity/source/inc/ado/AConnection.hxx
index 0a2b08875598..c2c82100363d 100644
--- a/connectivity/source/inc/ado/AConnection.hxx
+++ b/connectivity/source/inc/ado/AConnection.hxx
@@ -22,6 +22,7 @@
#include <com/sun/star/sdbcx/XTablesSupplier.hpp>
#include <com/sun/star/beans/PropertyValue.hpp>
#include <map>
+#include <string_view>
#include <connectivity/CommonTools.hxx>
#include <OTypeInfo.hxx>
#include <TConnection.hxx>
@@ -56,7 +57,7 @@ namespace connectivity::ado
css::uno::WeakReference< css::sdbcx::XTablesSupplier> m_xCatalog;
ODriver* m_pDriver;
private:
- WpADOConnection* m_pAdoConnection;
+ WpADOConnection m_aAdoConnection;
OCatalog* m_pCatalog;
sal_Int32 m_nEngineType;
bool m_bClosed;
@@ -71,7 +72,7 @@ namespace connectivity::ado
OConnection(ODriver* _pDriver);
// OConnection(const SQLHANDLE _pConnectionHandle);
~OConnection() override;
- void construct(const OUString& url,const css::uno::Sequence< css::beans::PropertyValue >& info);
+ void construct(std::u16string_view url,const css::uno::Sequence< css::beans::PropertyValue >& info);
//XUnoTunnel
virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
@@ -106,7 +107,7 @@ namespace connectivity::ado
virtual css::uno::Any SAL_CALL getWarnings( ) override;
virtual void SAL_CALL clearWarnings( ) override;
- WpADOConnection* getConnection() { return m_pAdoConnection; }
+ WpADOConnection& getConnection() { return m_aAdoConnection; }
void setCatalog(const css::uno::WeakReference< css::sdbcx::XTablesSupplier>& _xCat) { m_xCatalog = _xCat; }
void setCatalog(OCatalog* _pCatalog) { m_pCatalog = _pCatalog; }
diff --git a/connectivity/source/inc/ado/ADatabaseMetaData.hxx b/connectivity/source/inc/ado/ADatabaseMetaData.hxx
index 65dfad6d21d1..1661ca44181c 100644
--- a/connectivity/source/inc/ado/ADatabaseMetaData.hxx
+++ b/connectivity/source/inc/ado/ADatabaseMetaData.hxx
@@ -40,7 +40,7 @@ namespace connectivity::ado
};
std::map<sal_uInt32,LiteralInfo> m_aLiteralInfo;
- WpADOConnection* m_pADOConnection;
+ WpADOConnection& m_rADOConnection;
OConnection* m_pConnection;
void fillLiterals();
diff --git a/connectivity/source/inc/ado/AGroup.hxx b/connectivity/source/inc/ado/AGroup.hxx
index f46577d0fd55..00207a5fa23a 100644
--- a/connectivity/source/inc/ado/AGroup.hxx
+++ b/connectivity/source/inc/ado/AGroup.hxx
@@ -45,10 +45,6 @@ namespace connectivity::ado
OAdoGroup(OCatalog* _pParent,bool _bCase, ADOGroup* _pGroup=nullptr);
OAdoGroup(OCatalog* _pParent,bool _bCase, const OUString& Name);
- // css::lang::XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
-
// XAuthorizable
virtual sal_Int32 SAL_CALL getPrivileges( const OUString& objName, sal_Int32 objType ) override;
virtual sal_Int32 SAL_CALL getGrantablePrivileges( const OUString& objName, sal_Int32 objType ) override;
diff --git a/connectivity/source/inc/ado/AIndex.hxx b/connectivity/source/inc/ado/AIndex.hxx
index 7bc54f788aec..98c3a77d1ceb 100644
--- a/connectivity/source/inc/ado/AIndex.hxx
+++ b/connectivity/source/inc/ado/AIndex.hxx
@@ -38,9 +38,6 @@ namespace connectivity::ado
public:
OAdoIndex(bool _bCase, OConnection* _pConnection,ADOIndex* _pIndex);
OAdoIndex(bool _bCase, OConnection* _pConnection);
- // css::lang::XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
WpADOIndex getImpl() const { return m_aIndex;}
};
diff --git a/connectivity/source/inc/ado/AKey.hxx b/connectivity/source/inc/ado/AKey.hxx
index 67e05b86d5f9..5ec3fa972b12 100644
--- a/connectivity/source/inc/ado/AKey.hxx
+++ b/connectivity/source/inc/ado/AKey.hxx
@@ -41,10 +41,6 @@ namespace connectivity::ado
OAdoKey(bool _bCase,OConnection* _pConnection,ADOKey* _pKey);
OAdoKey(bool _bCase,OConnection* _pConnection);
- // css::lang::XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
-
WpADOKey getImpl() const { return m_aKey;}
// map the update/delete rules
static RuleEnum Map2Rule(sal_Int32 _eNum);
diff --git a/connectivity/source/inc/ado/ATable.hxx b/connectivity/source/inc/ado/ATable.hxx
index 07a16ae6ae4f..827485a6b480 100644
--- a/connectivity/source/inc/ado/ATable.hxx
+++ b/connectivity/source/inc/ado/ATable.hxx
@@ -53,9 +53,6 @@ namespace connectivity::ado
virtual OUString SAL_CALL getName() override;
OUString getSchema() const { return m_SchemaName; }
virtual css::uno::Reference< css::sdbc::XDatabaseMetaData> getMetaData() const override;
- // css::lang::XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
// XRename
virtual void SAL_CALL rename( const OUString& newName ) override;
diff --git a/connectivity/source/inc/ado/AUser.hxx b/connectivity/source/inc/ado/AUser.hxx
index 849c3a98a5eb..8d0c0f7321b6 100644
--- a/connectivity/source/inc/ado/AUser.hxx
+++ b/connectivity/source/inc/ado/AUser.hxx
@@ -48,9 +48,6 @@ namespace connectivity::ado
OAdoUser(OCatalog* _pParent,bool _bCase, ADOUser* _pUser=nullptr);
OAdoUser(OCatalog* _pParent,bool _bCase, const OUString& Name);
- // css::lang::XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
// XUser
virtual void SAL_CALL changePassword( const OUString& objPassword, const OUString& newPassword ) override;
// XAuthorizable
diff --git a/connectivity/source/inc/ado/AView.hxx b/connectivity/source/inc/ado/AView.hxx
index 6f8d7a337494..db81c4e70bb5 100644
--- a/connectivity/source/inc/ado/AView.hxx
+++ b/connectivity/source/inc/ado/AView.hxx
@@ -40,10 +40,6 @@ namespace connectivity::ado
public:
OAdoView(bool _bCase, ADOView* _pView=nullptr);
- // css::lang::XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
-
WpADOView getImpl() const { return m_aView;}
};
}
diff --git a/connectivity/source/inc/ado/Aolevariant.hxx b/connectivity/source/inc/ado/Aolevariant.hxx
index 256be7dd6c0d..ba0653156a94 100644
--- a/connectivity/source/inc/ado/Aolevariant.hxx
+++ b/connectivity/source/inc/ado/Aolevariant.hxx
@@ -33,27 +33,6 @@ namespace com::sun::star::util
namespace connectivity::ado
{
- class OLEString
- {
- BSTR m_sStr;
- public:
- OLEString();
- OLEString(const BSTR& _sBStr);
- OLEString(std::u16string_view _sBStr);
- OLEString(const OLEString& _rRh)
- {
- OLEString::operator=(_rRh);
- }
- ~OLEString();
- OLEString& operator=(std::u16string_view _rSrc);
- OLEString& operator=(const BSTR& _rSrc);
- OLEString& operator=(const OLEString& _rSrc);
- OUString asOUString() const;
- BSTR asBSTR() const;
- BSTR* getAddress();
- sal_Int32 length() const;
- };
-
class OLEVariant : public ::tagVARIANT
{
public:
diff --git a/connectivity/source/inc/ado/Aolewrap.hxx b/connectivity/source/inc/ado/Aolewrap.hxx
index 767c50372254..9d402fcf21b1 100644
--- a/connectivity/source/inc/ado/Aolewrap.hxx
+++ b/connectivity/source/inc/ado/Aolewrap.hxx
@@ -20,6 +20,8 @@
#include <osl/diagnose.h>
#include <osl/thread.h>
+#include <systools/win32/comtools.hxx>
+
#include <map>
#include <vector>
@@ -31,101 +33,59 @@ namespace rtl
}
namespace connectivity::ado
{
- class WpBase
- {
- protected:
- IDispatch* pIUnknown;
-
- void setIDispatch(IDispatch* _pIUnknown);
- public:
- WpBase();
- WpBase(IDispatch* pInt);
- //inline
- WpBase& operator=(const WpBase& rhs);
- WpBase& operator=(IDispatch* rhs);
- WpBase(const WpBase& aWrapper);
- virtual ~WpBase();
- void clear();
-
-
- bool IsValid() const;
- operator IDispatch*();
-
- };
-
// Template class WpOLEBase<class T>
// ==================================
//
// Objects of this class contain a pointer to an interface of the type T.
- // The ctors and operator= make sure, that AddRef() and Release() are being
- // called adhering to COM conventions.
- // An object can also hold no pointer (null pointer), calling IsValid() then
- // returns false.
- //
- // In order to do efficient pass-by-value, this class (as all derived classes)
- // is a thin wrapper class, avoiding virtual methods and inlining.
- template<class T> class WpOLEBase : public WpBase
+ template<class T> class WpOLEBase
{
protected:
- T* pInterface;
+ sal::systools::COMReference<T> pInterface;
public:
- WpOLEBase(T* pInt = nullptr) : WpBase(pInt),pInterface(pInt){}
+ WpOLEBase(T* pInt = nullptr) : pInterface(pInt){}
+ WpOLEBase(const WpOLEBase<T>& aWrapper)
+ : pInterface( aWrapper.pInterface )
+ {
+ }
//inline
WpOLEBase<T>& operator=(const WpOLEBase<T>& rhs)
{
- WpBase::operator=(rhs);
pInterface = rhs.pInterface;
return *this;
};
- WpOLEBase<T>& operator=(T* rhs)
- {
- WpBase::operator=(rhs);
- pInterface = rhs.pInterface;
- return *this;
- }
-
- WpOLEBase(const WpOLEBase<T>& aWrapper)
- : WpBase( aWrapper )
- , pInterface( aWrapper.pInterface )
- {
- }
-
- operator T*() const { return pInterface; }
- void setWithOutAddRef(T* _pInterface)
- {
- pInterface = _pInterface;
- WpBase::setIDispatch(_pInterface);
- }
+ operator T*() const { return pInterface.get(); }
+ T** operator&() { return &pInterface; }
+ bool IsValid() const { return pInterface.is(); }
+ void set(T* p) { pInterface = p; }
+ void clear() { pInterface.clear(); }
};
- // Template class WpOLECollection<class Ts, class T, class WrapT>
+ // Template class WpOLECollection<class Ts, class WrapT>
// ===============================================================
//
// This class (derived from WpOLEBase<Ts>), abstracts away the properties
// common to DAO collections:
//
// They are accessed via an interface Ts (e.g. DAOFields) and can return
- // Items of the Type T (actually: with the interface T, e.g. DAOField)
- // via get_Item (here GetItem).
+ // Items of the type wrapped by WrapT (actually: with the interface, e.g.
+ // DAOField) via get_Item (here GetItem).
//
- // This wrapper class does not expose an interface T, however,
- // it exposes an object of the class WrapT. This must allow a construction
- // by T, preferably it is derived from WpOLEBase<T>.
+ // This wrapper class exposes an object of the class WrapT.
- template<class Ts, class T, class WrapT> class WpOLECollection : public WpOLEBase<Ts>
+ template<class Ts, class WrapT> class WpOLECollection : public WpOLEBase<Ts>
{
public:
using WpOLEBase<Ts>::pInterface;
using WpOLEBase<Ts>::IsValid;
// Ctors, operator=
// They only call the superclass
- WpOLECollection(Ts* pInt=nullptr):WpOLEBase<Ts>(pInt){}
+ WpOLECollection() = default;
WpOLECollection(const WpOLECollection& rhs) : WpOLEBase<Ts>(rhs) {}
WpOLECollection& operator=(const WpOLECollection& rhs)
{WpOLEBase<Ts>::operator=(rhs); return *this;};
@@ -142,35 +102,28 @@ namespace connectivity::ado
WrapT GetItem(sal_Int32 index) const
{
OSL_ENSURE(index >= 0 && index<GetItemCount(),"Wrong index for field!");
- T* pT = NULL;
- WrapT aRet(NULL);
- if(SUCCEEDED(pInterface->get_Item(OLEVariant(index), &pT)))
- aRet.setWithOutAddRef(pT);
+ WrapT aRet;
+ pInterface->get_Item(OLEVariant(index), &aRet);
return aRet;
}
WrapT GetItem(const OLEVariant& index) const
{
- T* pT = NULL;
- WrapT aRet(NULL);
- if(SUCCEEDED(pInterface->get_Item(index, &pT)))
- aRet.setWithOutAddRef(pT);
+ WrapT aRet;
+ pInterface->get_Item(index, &aRet);
return aRet;
}
WrapT GetItem(const OUString& sStr) const
{
- WrapT aRet(NULL);
- T* pT = NULL;
- if (FAILED(pInterface->get_Item(OLEVariant(sStr), &pT)))
+ WrapT aRet;
+ if (FAILED(pInterface->get_Item(OLEVariant(sStr), &aRet)))
{
#if OSL_DEBUG_LEVEL > 0
OString sTemp("Unknown Item: " + OString(sStr.getStr(),sStr.getLength(),osl_getThreadTextEncoding()));
OSL_FAIL(sTemp.getStr());
#endif
}
- else
- aRet.setWithOutAddRef(pT);
return aRet;
}
void fillElementNames(::std::vector< OUString>& _rVector)
@@ -190,23 +143,23 @@ namespace connectivity::ado
}
};
- template<class Ts, class T, class WrapT> class WpOLEAppendCollection:
- public WpOLECollection<Ts,T,WrapT>
+ template<class Ts, class WrapT> class WpOLEAppendCollection:
+ public WpOLECollection<Ts,WrapT>
{
public:
// Ctors, operator=
// They only call the superclass
using WpOLEBase<Ts>::pInterface;
- WpOLEAppendCollection(Ts* pInt=nullptr):WpOLECollection<Ts,T,WrapT>(pInt){}
- WpOLEAppendCollection(const WpOLEAppendCollection& rhs) : WpOLECollection<Ts, T, WrapT>(rhs) {}
+ WpOLEAppendCollection() = default;
+ WpOLEAppendCollection(const WpOLEAppendCollection& rhs) : WpOLECollection<Ts, WrapT>(rhs) {}
WpOLEAppendCollection& operator=(const WpOLEAppendCollection& rhs)
{WpOLEBase<Ts>::operator=(rhs); return *this;};
bool Append(const WrapT& aWrapT)
{
- return SUCCEEDED(pInterface->Append(OLEVariant(static_cast<T*>(aWrapT))));
+ return SUCCEEDED(pInterface->Append(OLEVariant(aWrapT)));
};
bool Delete(const OUString& sName)
diff --git a/connectivity/source/inc/ado/Awrapado.hxx b/connectivity/source/inc/ado/Awrapado.hxx
index efb2be2aa3bd..507b85522674 100644
--- a/connectivity/source/inc/ado/Awrapado.hxx
+++ b/connectivity/source/inc/ado/Awrapado.hxx
@@ -42,16 +42,15 @@ namespace connectivity::ado
class WpADOError;
class WpADOProperty;
- typedef WpOLEAppendCollection< ADOFields, ADOField, WpADOField> WpADOFields;
- typedef WpOLECollection< ADOProperties, ADOProperty, WpADOProperty> WpADOProperties;
+ typedef WpOLEAppendCollection< ADOFields, WpADOField> WpADOFields;
+ typedef WpOLECollection< ADOProperties, WpADOProperty> WpADOProperties;
class WpADOConnection : public WpOLEBase<ADOConnection>
{
- friend class WpADOCommand;
public:
- WpADOConnection(ADOConnection* pInt) : WpOLEBase<ADOConnection>(pInt){}
+ WpADOConnection() = default;
WpADOConnection(const WpADOConnection& rhs) : WpOLEBase<ADOConnection>(rhs) {}
@@ -107,7 +106,7 @@ namespace connectivity::ado
ADORecordset* getIndexInfo( const css::uno::Any& catalog, const OUString& schema, std::u16string_view table, bool unique, bool approximate );
ADORecordset* getTablePrivileges( const css::uno::Any& catalog,
const OUString& schemaPattern,
- const OUString& tableNamePattern );
+ std::u16string_view tableNamePattern );
ADORecordset* getCrossReference( const css::uno::Any& primaryCatalog,
const OUString& primarySchema,
std::u16string_view primaryTable,
@@ -116,18 +115,18 @@ namespace connectivity::ado
std::u16string_view foreignTable);
ADORecordset* getProcedures( const css::uno::Any& catalog,
const OUString& schemaPattern,
- const OUString& procedureNamePattern );
+ std::u16string_view procedureNamePattern );
ADORecordset* getProcedureColumns( const css::uno::Any& catalog,
const OUString& schemaPattern,
- const OUString& procedureNamePattern,
- const OUString& columnNamePattern );
+ std::u16string_view procedureNamePattern,
+ std::u16string_view columnNamePattern );
ADORecordset* getTables( const css::uno::Any& catalog,
const OUString& schemaPattern,
- const OUString& tableNamePattern,
+ std::u16string_view tableNamePattern,
const css::uno::Sequence< OUString >& types );
ADORecordset* getColumns( const css::uno::Any& catalog,
const OUString& schemaPattern,
- const OUString& tableNamePattern,
+ std::u16string_view tableNamePattern,
std::u16string_view columnNamePattern );
ADORecordset* getColumnPrivileges( const css::uno::Any& catalog,
const OUString& schemaPattern,
@@ -140,11 +139,9 @@ namespace connectivity::ado
class WpADOCommand : public WpOLEBase<ADOCommand>
{
public:
- WpADOCommand(){}
+ WpADOCommand() = default;
// Ctors, operator=
// They only call the superclass
- WpADOCommand(ADOCommand* pInt) : WpOLEBase<ADOCommand>(pInt){}
-
WpADOCommand(const WpADOCommand& rhs) : WpOLEBase<ADOCommand>(rhs) {}
WpADOCommand& operator=(const WpADOCommand& rhs)
@@ -152,7 +149,7 @@ namespace connectivity::ado
WpOLEBase<ADOCommand>::operator=(rhs); return *this;}
- bool putref_ActiveConnection( WpADOConnection *pCon);
+ bool putref_ActiveConnection(const WpADOConnection& rCon);
void put_ActiveConnection(/* [in] */ const OLEVariant& vConn);
void Create();
@@ -181,7 +178,7 @@ namespace connectivity::ado
// Ctors, operator=
// They only call the superclass
- WpADOError(ADOError* pInt):WpOLEBase<ADOError>(pInt){}
+ WpADOError() = default;
WpADOError(const WpADOError& rhs) : WpOLEBase<ADOError>(rhs) {}
@@ -204,7 +201,7 @@ namespace connectivity::ado
// Ctors, operator=
// They only call the superclass
- WpADOField(ADOField* pInt=nullptr):WpOLEBase<ADOField>(pInt){}
+ WpADOField() = default;
WpADOField(const WpADOField& rhs) : WpOLEBase<ADOField>(rhs) {}
WpADOField& operator=(const WpADOField& rhs)
@@ -250,7 +247,7 @@ namespace connectivity::ado
public:
// Ctors, operator=
// They only call the superclass
- WpADOProperty(ADOProperty* pInt=nullptr):WpOLEBase<ADOProperty>(pInt){}
+ WpADOProperty() = default;
WpADOProperty(const WpADOProperty& rhs) : WpOLEBase<ADOProperty>(rhs) {}
WpADOProperty& operator=(const WpADOProperty& rhs)
{WpOLEBase<ADOProperty>::operator=(rhs); return *this;}
@@ -272,7 +269,7 @@ namespace connectivity::ado
public:
// Ctors, operator=
// They only call the superclass
- WpADORecordset(ADORecordset* pInt=nullptr):WpOLEBase<ADORecordset>(pInt){}
+ WpADORecordset() = default;
WpADORecordset(const WpADORecordset& rhs) : WpOLEBase<ADORecordset>() {operator=(rhs);}
WpADORecordset& operator=(const WpADORecordset& rhs)
{
@@ -332,7 +329,7 @@ namespace connectivity::ado
public:
// Ctors, operator=
// They only call the superclass
- WpADOParameter(ADOParameter* pInt):WpOLEBase<ADOParameter>(pInt){}
+ WpADOParameter() = default;
WpADOParameter(const WpADOParameter& rhs):WpOLEBase<ADOParameter>(rhs){}
WpADOParameter& operator=(const WpADOParameter& rhs)
{WpOLEBase<ADOParameter>::operator=(rhs); return *this;}
diff --git a/connectivity/source/inc/ado/Awrapadox.hxx b/connectivity/source/inc/ado/Awrapadox.hxx
index 6bda5b4878d8..ba91422a1d09 100644
--- a/connectivity/source/inc/ado/Awrapadox.hxx
+++ b/connectivity/source/inc/ado/Awrapadox.hxx
@@ -89,7 +89,7 @@ namespace connectivity::ado
class WpADOGroup : public WpOLEBase<ADOGroup>
{
public:
- WpADOGroup(ADOGroup* pInt=nullptr) : WpOLEBase<ADOGroup>(pInt){}
+ WpADOGroup() = default;
WpADOGroup(const WpADOGroup& rhs) : WpOLEBase<ADOGroup>(rhs) {}
WpADOGroup& operator=(const WpADOGroup& rhs)
@@ -113,7 +113,7 @@ namespace connectivity::ado
class WpADOUser : public WpOLEBase<_ADOUser>
{
public:
- WpADOUser(_ADOUser* pInt=nullptr) : WpOLEBase<_ADOUser>(pInt){}
+ WpADOUser() = default;
WpADOUser(const WpADOUser& rhs) : WpOLEBase<_ADOUser>(rhs) {}
WpADOUser& operator=(const WpADOUser& rhs)
diff --git a/connectivity/source/inc/ado/WrapColumn.hxx b/connectivity/source/inc/ado/WrapColumn.hxx
index fa4aa7f5edba..f1b73585fba9 100644
--- a/connectivity/source/inc/ado/WrapColumn.hxx
+++ b/connectivity/source/inc/ado/WrapColumn.hxx
@@ -31,7 +31,7 @@ namespace connectivity::ado
class WpADOColumn : public WpOLEBase<_ADOColumn>
{
public:
- WpADOColumn(_ADOColumn* pInt=nullptr) : WpOLEBase<_ADOColumn>(pInt){}
+ WpADOColumn() = default;
WpADOColumn(const WpADOColumn& rhs) : WpOLEBase<_ADOColumn>(rhs) {}
void Create();
diff --git a/connectivity/source/inc/ado/WrapIndex.hxx b/connectivity/source/inc/ado/WrapIndex.hxx
index 04b965449fb1..4444bb340ae5 100644
--- a/connectivity/source/inc/ado/WrapIndex.hxx
+++ b/connectivity/source/inc/ado/WrapIndex.hxx
@@ -29,7 +29,7 @@ namespace connectivity::ado
class WpADOIndex : public WpOLEBase<_ADOIndex>
{
public:
- WpADOIndex(_ADOIndex* pInt=nullptr) : WpOLEBase<_ADOIndex>(pInt){}
+ WpADOIndex() = default;
WpADOIndex(const WpADOIndex& rhs) : WpOLEBase<_ADOIndex>(rhs) {}
WpADOIndex& operator=(const WpADOIndex& rhs)
diff --git a/connectivity/source/inc/ado/WrapKey.hxx b/connectivity/source/inc/ado/WrapKey.hxx
index 6b4ed08101e1..1f984445b8ae 100644
--- a/connectivity/source/inc/ado/WrapKey.hxx
+++ b/connectivity/source/inc/ado/WrapKey.hxx
@@ -29,7 +29,7 @@ namespace connectivity::ado
class WpADOKey : public WpOLEBase<ADOKey>
{
public:
- WpADOKey(ADOKey* pInt=nullptr) : WpOLEBase<ADOKey>(pInt){}
+ WpADOKey() = default;
WpADOKey(const WpADOKey& rhs) : WpOLEBase<ADOKey>(rhs) {}
WpADOKey& operator=(const WpADOKey& rhs)
diff --git a/connectivity/source/inc/ado/WrapTable.hxx b/connectivity/source/inc/ado/WrapTable.hxx
index 38820944c264..dc06dbc03a8e 100644
--- a/connectivity/source/inc/ado/WrapTable.hxx
+++ b/connectivity/source/inc/ado/WrapTable.hxx
@@ -31,7 +31,7 @@ namespace connectivity::ado
class WpADOTable : public WpOLEBase<_ADOTable>
{
public:
- WpADOTable(_ADOTable* pInt=nullptr) : WpOLEBase<_ADOTable>(pInt){}
+ WpADOTable() = default;
WpADOTable(const WpADOTable& rhs) : WpOLEBase<_ADOTable>(rhs) {}
WpADOTable& operator=(const WpADOTable& rhs)
@@ -51,7 +51,7 @@ namespace connectivity::ado
};
- typedef WpOLEAppendCollection<ADOTables, _ADOTable, WpADOTable> WpADOTables;
+ typedef WpOLEAppendCollection<ADOTables, WpADOTable> WpADOTables;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/inc/ado/WrapTypeDefs.hxx b/connectivity/source/inc/ado/WrapTypeDefs.hxx
index 3f4e82d85269..91bea8453480 100644
--- a/connectivity/source/inc/ado/WrapTypeDefs.hxx
+++ b/connectivity/source/inc/ado/WrapTypeDefs.hxx
@@ -29,13 +29,13 @@ namespace connectivity::ado
class WpADOView;
class WpADOUser;
- typedef WpOLEAppendCollection<ADOTables, _ADOTable, WpADOTable> WpADOTables;
- typedef WpOLEAppendCollection<ADOKeys, ADOKey, WpADOKey> WpADOKeys;
- typedef WpOLEAppendCollection<ADOIndexes, _ADOIndex, WpADOIndex> WpADOIndexes;
- typedef WpOLEAppendCollection<ADOColumns, _ADOColumn, WpADOColumn> WpADOColumns;
- typedef WpOLEAppendCollection<ADOGroups, ADOGroup, WpADOGroup> WpADOGroups;
- typedef WpOLEAppendCollection<ADOViews, ADOView, WpADOView> WpADOViews;
- typedef WpOLEAppendCollection<ADOUsers, _ADOUser, WpADOUser> WpADOUsers;
+ typedef WpOLEAppendCollection<ADOTables, WpADOTable> WpADOTables;
+ typedef WpOLEAppendCollection<ADOKeys, WpADOKey> WpADOKeys;
+ typedef WpOLEAppendCollection<ADOIndexes, WpADOIndex> WpADOIndexes;
+ typedef WpOLEAppendCollection<ADOColumns, WpADOColumn> WpADOColumns;
+ typedef WpOLEAppendCollection<ADOGroups, WpADOGroup> WpADOGroups;
+ typedef WpOLEAppendCollection<ADOViews, WpADOView> WpADOViews;
+ typedef WpOLEAppendCollection<ADOUsers, WpADOUser> WpADOUsers;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/inc/ado/adoimp.hxx b/connectivity/source/inc/ado/adoimp.hxx
index 3b5d9f4d64e1..60c6fd313d77 100644
--- a/connectivity/source/inc/ado/adoimp.hxx
+++ b/connectivity/source/inc/ado/adoimp.hxx
@@ -24,16 +24,17 @@
struct ADOConnection;
+namespace sal::systools { class BStr; };
+
namespace connectivity::ado
{
class WpADOField;
- class OLEString;
class ADOS
{
public:
// Also here: Free BSTR with SysFreeString()!
- static OLEString& GetKeyStr();
+ static sal::systools::BStr& GetKeyStr();
static const CLSID CLSID_ADOCATALOG_25;
static const IID IID_ADOCATALOG_25;
@@ -95,7 +96,7 @@ namespace connectivity::ado
if(aProp.IsValid()) \
aVar = aProp.GetValue(); \
else \
- ADOS::ThrowException(*m_pADOConnection,*this);
+ ADOS::ThrowException(m_rADOConnection,*this);
diff --git a/connectivity/source/inc/calc/CTable.hxx b/connectivity/source/inc/calc/CTable.hxx
index a8f49b661bc4..b4751fd876d7 100644
--- a/connectivity/source/inc/calc/CTable.hxx
+++ b/connectivity/source/inc/calc/CTable.hxx
@@ -64,10 +64,6 @@ namespace connectivity::calc
virtual void SAL_CALL disposing() override;
- // css::lang::XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
-
void construct() override;
};
diff --git a/connectivity/source/inc/dbase/DColumns.hxx b/connectivity/source/inc/dbase/DColumns.hxx
index 158994c2c900..dbbbbec90acc 100644
--- a/connectivity/source/inc/dbase/DColumns.hxx
+++ b/connectivity/source/inc/dbase/DColumns.hxx
@@ -38,7 +38,6 @@ namespace connectivity::dbase
) : file::OColumns(_pTable,_rMutex,_rVector)
{}
};
-
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/inc/dbase/DIndex.hxx b/connectivity/source/inc/dbase/DIndex.hxx
index 3c5374f298e2..3cc7da9ad1d3 100644
--- a/connectivity/source/inc/dbase/DIndex.hxx
+++ b/connectivity/source/inc/dbase/DIndex.hxx
@@ -23,7 +23,7 @@
#include <dbase/DTable.hxx>
#include <dbase/dindexnode.hxx>
-#define dBASE_III_GROUP "dBase III"
+inline constexpr OString dBASE_III_GROUP = "dBase III"_ostr;
namespace connectivity::dbase
{
@@ -34,7 +34,7 @@ namespace connectivity::dbase
class ODbaseIndex : public ODbaseIndex_BASE
{
- friend SvStream& WriteODbaseIndex(SvStream &rStream, ODbaseIndex&);
+ friend SvStream& WriteODbaseIndex(SvStream &rStream, const ODbaseIndex&);
friend SvStream& operator >> (SvStream &rStream, ODbaseIndex&);
friend class ONDXNode;
@@ -81,7 +81,7 @@ namespace connectivity::dbase
OUString getCompletePath() const;
void closeImpl();
// Closes and kills the index file and throws an error
- void impl_killFileAndthrowError_throw(const char* pErrorId, const OUString& _sFile);
+ void impl_killFileAndthrowError_throw(TranslateId pErrorId, const OUString& _sFile);
protected:
virtual ~ODbaseIndex() override;
public:
@@ -91,10 +91,6 @@ namespace connectivity::dbase
void openIndexFile();
virtual void refreshColumns() override;
- // css::lang::XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
-
const ODbaseTable* getTable() const { return m_pTable; }
const NDXHeader& getHeader() const { return m_aHeader; }
std::unique_ptr<OIndexIterator> createIterator();
@@ -129,7 +125,7 @@ namespace connectivity::dbase
bool ConvertToKey(ONDXKey* rKey, sal_uInt32 nRec, const ORowSetValue& rValue);
};
- SvStream& WriteODbaseIndex(SvStream &rStream, ODbaseIndex&);
+ SvStream& WriteODbaseIndex(SvStream &rStream, const ODbaseIndex&);
SvStream& operator >> (SvStream &rStream, ODbaseIndex&);
void ReadHeader(SvStream & rStream, ODbaseIndex::NDXHeader & rHeader);
diff --git a/connectivity/source/inc/dbase/DTable.hxx b/connectivity/source/inc/dbase/DTable.hxx
index c41ee9f7e9e1..bb0b6baa5fa2 100644
--- a/connectivity/source/inc/dbase/DTable.hxx
+++ b/connectivity/source/inc/dbase/DTable.hxx
@@ -115,7 +115,7 @@ namespace connectivity::dbase
void copyData(ODbaseTable* _pNewTable,sal_Int32 _nPos);
bool CreateFile(const INetURLObject& aFile, bool& bCreateMemo);
bool CreateMemoFile(const INetURLObject& aFile);
- bool HasMemoFields() const { return m_aHeader.type > dBaseIV;}
+ bool HasMemoFields() const;
void ReadMemoHeader();
bool ReadMemo(std::size_t nBlockNo, ORowSetValue& aVariable);
@@ -130,7 +130,7 @@ namespace connectivity::dbase
/// @throws css::container::ElementExistException
/// @throws css::uno::RuntimeException
void renameImpl( const OUString& newName );
- void throwInvalidColumnType(const char* pErrorId, const OUString& _sColumnName);
+ void throwInvalidColumnType(TranslateId pErrorId, const OUString& _sColumnName);
protected:
virtual void FileClose() override;
@@ -161,9 +161,6 @@ namespace connectivity::dbase
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
virtual void SAL_CALL disposing() override;
- // css::lang::XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
// XAlterTable
virtual void SAL_CALL alterColumnByName( const OUString& colName, const css::uno::Reference< css::beans::XPropertySet >& descriptor ) override;
virtual void SAL_CALL alterColumnByIndex( sal_Int32 index, const css::uno::Reference< css::beans::XPropertySet >& descriptor ) override;
@@ -182,7 +179,7 @@ namespace connectivity::dbase
virtual void dropColumn(sal_Int32 _nPos) override;
static OUString getEntry(file::OConnection const * _pConnection, std::u16string_view _sURL );
- static bool Drop_Static(const OUString& _sUrl, bool _bHasMemoFields, sdbcx::OCollection* _pIndexes );
+ static bool Drop_Static(std::u16string_view _sUrl, bool _bHasMemoFields, sdbcx::OCollection* _pIndexes );
virtual void refreshHeader() override;
diff --git a/connectivity/source/inc/dbase/dindexnode.hxx b/connectivity/source/inc/dbase/dindexnode.hxx
index 6000c36224cf..c1db23f76b60 100644
--- a/connectivity/source/inc/dbase/dindexnode.hxx
+++ b/connectivity/source/inc/dbase/dindexnode.hxx
@@ -44,7 +44,7 @@ namespace connectivity::dbase
public:
ONDXKey();
- ONDXKey(const ORowSetValue& rVal, sal_Int32 eType, sal_uInt32 nRec);
+ ONDXKey(ORowSetValue aVal, sal_Int32 eType, sal_uInt32 nRec);
ONDXKey(const OUString& aStr, sal_uInt32 nRec);
ONDXKey(double aVal, sal_uInt32 nRec);
@@ -163,8 +163,8 @@ namespace connectivity::dbase
const ODbaseIndex& GetIndex() const {return rIndex;}
// Setting the child, via reference to retain the PagePos
- void SetChild(ONDXPagePtr aCh);
- void SetParent(ONDXPagePtr aPa);
+ void SetChild(const ONDXPagePtr& rCh);
+ void SetParent(const ONDXPagePtr& rPa);
sal_uInt16 Search(const ONDXKey& rSearch);
sal_uInt16 Search(const ONDXPage* pPage);
@@ -209,14 +209,14 @@ namespace connectivity::dbase
inline bool ONDXPage::HasParent() const {return aParent.Is();}
inline const ONDXPagePtr& ONDXPage::GetParent() const {return aParent;}
- inline void ONDXPage::SetParent(ONDXPagePtr aPa = ONDXPagePtr())
+ inline void ONDXPage::SetParent(const ONDXPagePtr& rPa = ONDXPagePtr())
{
- aParent = aPa;
+ aParent = rPa;
}
- inline void ONDXPage::SetChild(ONDXPagePtr aCh = ONDXPagePtr())
+ inline void ONDXPage::SetChild(const ONDXPagePtr& rCh = ONDXPagePtr())
{
- aChild = aCh;
+ aChild = rCh;
if (aChild.Is())
aChild->SetParent(this);
}
@@ -246,7 +246,7 @@ namespace connectivity::dbase
ONDXKey& GetKey() { return aKey;}
// Setting the child, via reference to retain the PagePos
- void SetChild(ONDXPagePtr aCh = ONDXPagePtr(), ONDXPage* = nullptr);
+ void SetChild(const ONDXPagePtr& rCh = ONDXPagePtr(), ONDXPage* = nullptr);
void Write(SvStream &rStream, const ONDXPage& rPage) const;
void Read(SvStream &rStream, ODbaseIndex const &);
@@ -293,9 +293,9 @@ namespace connectivity::dbase
return !operator > (rKey);
}
- inline void ONDXNode::SetChild(ONDXPagePtr aCh, ONDXPage* pParent)
+ inline void ONDXNode::SetChild(const ONDXPagePtr& rCh, ONDXPage* pParent)
{
- aChild = aCh;
+ aChild = rCh;
if (aChild.Is())
aChild->SetParent(pParent);
}
diff --git a/connectivity/source/inc/file/FColumns.hxx b/connectivity/source/inc/file/FColumns.hxx
index f5fce16b6f6a..056934f88c65 100644
--- a/connectivity/source/inc/file/FColumns.hxx
+++ b/connectivity/source/inc/file/FColumns.hxx
@@ -26,7 +26,7 @@
namespace connectivity::file
{
- class OOO_DLLPUBLIC_FILE OColumns : public sdbcx::OCollection
+ class UNLESS_MERGELIBS_MORE(OOO_DLLPUBLIC_FILE) OColumns : public sdbcx::OCollection
{
protected:
OFileTable* m_pTable;
diff --git a/connectivity/source/inc/file/FConnection.hxx b/connectivity/source/inc/file/FConnection.hxx
index 36b095e70427..e6412992ab77 100644
--- a/connectivity/source/inc/file/FConnection.hxx
+++ b/connectivity/source/inc/file/FConnection.hxx
@@ -98,7 +98,7 @@ namespace connectivity::file
virtual void SAL_CALL clearWarnings( ) override;
//XUnoTunnel
virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
+ static const css::uno::Sequence< sal_Int8 > & getUnoTunnelId();
// no interface methods
css::uno::Reference< css::ucb::XDynamicResultSet > getDir() const;
diff --git a/connectivity/source/inc/file/FDriver.hxx b/connectivity/source/inc/file/FDriver.hxx
index 9d289d618a3d..0351c59ca27a 100644
--- a/connectivity/source/inc/file/FDriver.hxx
+++ b/connectivity/source/inc/file/FDriver.hxx
@@ -42,7 +42,7 @@ namespace connectivity::file
// for this Driver
css::uno::Reference< css::uno::XComponentContext > m_xContext;
public:
- OFileDriver(const css::uno::Reference< css::uno::XComponentContext >& _rxContext);
+ OFileDriver(css::uno::Reference< css::uno::XComponentContext > _xContext);
// OComponentHelper
virtual void SAL_CALL disposing() override;
diff --git a/connectivity/source/inc/file/FResultSet.hxx b/connectivity/source/inc/file/FResultSet.hxx
index 84ed7067b125..0870593e6388 100644
--- a/connectivity/source/inc/file/FResultSet.hxx
+++ b/connectivity/source/inc/file/FResultSet.hxx
@@ -40,6 +40,7 @@
#include <TSortIndex.hxx>
#include <TSkipDeletedSet.hxx>
#include <com/sun/star/lang/XEventListener.hpp>
+#include <o3tl/safeint.hxx>
namespace connectivity::file
{
@@ -53,10 +54,9 @@ namespace connectivity::file
css::sdbc::XCloseable,
css::sdbc::XColumnLocate,
css::lang::XServiceInfo,
- css::lang::XEventListener,
- css::lang::XUnoTunnel> OResultSet_BASE;
+ css::lang::XEventListener> OResultSet_BASE;
- class OOO_DLLPUBLIC_FILE OResultSet :
+ class UNLESS_MERGELIBS_MORE(OOO_DLLPUBLIC_FILE) OResultSet :
public cppu::BaseMutex,
public ::connectivity::IResultSetHelper,
public OResultSet_BASE,
@@ -245,9 +245,6 @@ namespace connectivity::file
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;
- // css::lang::XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
//XEventlistener
virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
@@ -265,11 +262,11 @@ namespace connectivity::file
m_aSelectRow = _rRow;
m_nColumnCount = m_aSelectRow->size();
}
- void setColumnMapping(const std::vector<sal_Int32>& _aColumnMapping) { m_aColMapping = _aColumnMapping; }
+ void setColumnMapping(std::vector<sal_Int32>&& _aColumnMapping) { m_aColMapping = std::move(_aColumnMapping); }
void setSqlAnalyzer(OSQLAnalyzer* _pSQLAnalyzer) { m_pSQLAnalyzer = _pSQLAnalyzer; }
- void setOrderByColumns(const std::vector<sal_Int32>& _aColumnOrderBy) { m_aOrderbyColumnNumber = _aColumnOrderBy; }
- void setOrderByAscending(const std::vector<TAscendingOrder>& _aOrderbyAsc) { m_aOrderbyAscending = _aOrderbyAsc; }
+ void setOrderByColumns(std::vector<sal_Int32>&& _aColumnOrderBy) { m_aOrderbyColumnNumber = std::move(_aColumnOrderBy); }
+ void setOrderByAscending(std::vector<TAscendingOrder>&& _aOrderbyAsc) { m_aOrderbyAscending = std::move(_aOrderbyAsc); }
void setMetaData(const css::uno::Reference< css::sdbc::XResultSetMetaData>& _xMetaData) { m_xMetaData = _xMetaData;}
static void setBoundedColumns(const OValueRefRow& _rRow,
@@ -292,7 +289,7 @@ namespace connectivity::file
OSL_ENSURE(column > 0, "file::OResultSet::mapColumn: invalid column index!");
// the first column (index 0) is for convenience only. The first real select column is number 1.
- if ((column > 0) && (column < static_cast<sal_Int32>(m_aColMapping.size())))
+ if ((column > 0) && (o3tl::make_unsigned(column) < m_aColMapping.size()))
map = m_aColMapping[column];
return map;
diff --git a/connectivity/source/inc/file/FResultSetMetaData.hxx b/connectivity/source/inc/file/FResultSetMetaData.hxx
index 65fc0bb3c83e..dee656a915f4 100644
--- a/connectivity/source/inc/file/FResultSetMetaData.hxx
+++ b/connectivity/source/inc/file/FResultSetMetaData.hxx
@@ -46,7 +46,7 @@ namespace connectivity::file
virtual ~OResultSetMetaData() override;
public:
// a Constructor, that is needed for when Returning the Object is needed:
- OResultSetMetaData(const ::rtl::Reference<connectivity::OSQLColumns>& _rxColumns,const OUString& _aTableName,OFileTable* _pTable);
+ OResultSetMetaData(::rtl::Reference<connectivity::OSQLColumns> _xColumns, OUString _aTableName, OFileTable* _pTable);
virtual sal_Int32 SAL_CALL getColumnCount( ) override;
virtual sal_Bool SAL_CALL isAutoIncrement( sal_Int32 column ) override;
diff --git a/connectivity/source/inc/file/FTable.hxx b/connectivity/source/inc/file/FTable.hxx
index 80c662ba4d38..d8bbd92d6c85 100644
--- a/connectivity/source/inc/file/FTable.hxx
+++ b/connectivity/source/inc/file/FTable.hxx
@@ -83,10 +83,6 @@ namespace connectivity::file
const OUString& getSchema() const { return m_SchemaName; }
bool isReadOnly() const { return !m_bWriteable; }
// m_pFileStream && !m_pFileStream->IsWritable(); }
- // css::lang::XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
-
sal_Int32 getFilePos() const { return m_nFilePos; }
diff --git a/connectivity/source/inc/file/fcode.hxx b/connectivity/source/inc/file/fcode.hxx
index c78461743c27..541377c7dd5f 100644
--- a/connectivity/source/inc/file/fcode.hxx
+++ b/connectivity/source/inc/file/fcode.hxx
@@ -19,12 +19,14 @@
#pragma once
+#include <config_options.h>
#include <connectivity/sqliterator.hxx>
#include <com/sun/star/sdbc/DataType.hpp>
#include <connectivity/FValue.hxx>
#include <file/filedllapi.hxx>
#include <stack>
+#include <utility>
namespace connectivity
{
@@ -35,7 +37,7 @@ namespace connectivity
class OOperand;
typedef std::stack<OOperand*> OCodeStack;
- class OOO_DLLPUBLIC_FILE OCode
+ class UNLESS_MERGELIBS_MORE(OOO_DLLPUBLIC_FILE) OCode
{
public:
//virtual dtor to allow this to be the root of the class hierarchy
@@ -107,9 +109,9 @@ namespace connectivity
protected:
OOperandValue(){}
- OOperandValue(const ORowSetValue& _rVar, sal_Int32 eDbType)
+ OOperandValue(ORowSetValue _aVar, sal_Int32 eDbType)
: OOperand(eDbType)
- , m_aValue(_rVar)
+ , m_aValue(std::move(_aVar))
{}
OOperandValue(sal_Int32 eDbType) :OOperand(eDbType){}
@@ -243,7 +245,7 @@ namespace connectivity
virtual bool operate(const OOperand*, const OOperand*) const override;
};
- class OOO_DLLPUBLIC_FILE OOp_COMPARE : public OBoolOperator
+ class UNLESS_MERGELIBS_MORE(OOO_DLLPUBLIC_FILE) OOp_COMPARE : public OBoolOperator
{
sal_Int32 aPredicateType;
diff --git a/connectivity/source/inc/file/fcomp.hxx b/connectivity/source/inc/file/fcomp.hxx
index ebdb0679e452..72afcdb0a84e 100644
--- a/connectivity/source/inc/file/fcomp.hxx
+++ b/connectivity/source/inc/file/fcomp.hxx
@@ -19,6 +19,7 @@
#pragma once
#include <file/fcode.hxx>
+#include <utility>
namespace connectivity
{
@@ -86,7 +87,7 @@ namespace connectivity
::rtl::Reference<OPredicateCompiler> m_rCompiler;
public:
- OPredicateInterpreter(const ::rtl::Reference<OPredicateCompiler>& rComp) : m_rCompiler(rComp){}
+ OPredicateInterpreter(::rtl::Reference<OPredicateCompiler> xComp) : m_rCompiler(std::move(xComp)){}
virtual ~OPredicateInterpreter() override;
bool evaluate(OCodeList& rCodeList);
diff --git a/connectivity/source/inc/flat/ETable.hxx b/connectivity/source/inc/flat/ETable.hxx
index 2e15040d74d1..99359edfddaa 100644
--- a/connectivity/source/inc/flat/ETable.hxx
+++ b/connectivity/source/inc/flat/ETable.hxx
@@ -92,10 +92,6 @@ namespace connectivity::flat
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override;
virtual void SAL_CALL disposing() override;
- // css::lang::XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
-
OUString getEntry() const;
};
diff --git a/connectivity/source/inc/hsqldb/HStorageMap.hxx b/connectivity/source/inc/hsqldb/HStorageMap.hxx
index ee4590864016..1186c680ac07 100644
--- a/connectivity/source/inc/hsqldb/HStorageMap.hxx
+++ b/connectivity/source/inc/hsqldb/HStorageMap.hxx
@@ -86,7 +86,7 @@ namespace connectivity::hsqldb
static TStreamMap::mapped_type getRegisteredStream( JNIEnv * env, jstring name, jstring key);
static OUString jstring2ustring(JNIEnv * env, jstring jstr);
- static OUString removeURLPrefix(const OUString& _sURL,const OUString& _sFileURL);
+ static OUString removeURLPrefix(std::u16string_view _sURL, std::u16string_view _sFileURL);
static OUString removeOldURLPrefix(const OUString& _sURL);
static void throwJavaException(const css::uno::Exception& _aException,JNIEnv * env);
};
diff --git a/connectivity/source/inc/hsqldb/HTable.hxx b/connectivity/source/inc/hsqldb/HTable.hxx
index bc345d775c28..d6ac5ced7646 100644
--- a/connectivity/source/inc/hsqldb/HTable.hxx
+++ b/connectivity/source/inc/hsqldb/HTable.hxx
@@ -85,9 +85,6 @@ namespace connectivity::hsqldb
// ODescriptor
virtual void construct() override;
- // css::lang::XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override;
//XTypeProvider
diff --git a/connectivity/source/inc/hsqldb/HTables.hxx b/connectivity/source/inc/hsqldb/HTables.hxx
index a421be35e1b4..bff5e0e6421a 100644
--- a/connectivity/source/inc/hsqldb/HTables.hxx
+++ b/connectivity/source/inc/hsqldb/HTables.hxx
@@ -20,6 +20,7 @@
#include <connectivity/sdbcx/VCollection.hxx>
#include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
+#include <utility>
namespace connectivity::hsqldb
{
class OTables final : public sdbcx::OCollection
@@ -35,9 +36,9 @@ namespace connectivity::hsqldb
void createTable( const css::uno::Reference< css::beans::XPropertySet >& descriptor );
virtual OUString getNameForObject(const sdbcx::ObjectType& _xObject) override;
public:
- OTables(const css::uno::Reference< css::sdbc::XDatabaseMetaData >& _rMetaData,::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex,
+ OTables(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(_rMetaData)
+ ,m_xMetaData(std::move(_xMetaData))
{}
// only the name is identical to ::cppu::OComponentHelper
diff --git a/connectivity/source/inc/hsqldb/HUser.hxx b/connectivity/source/inc/hsqldb/HUser.hxx
index dc69c636eb00..67c44e185bd2 100644
--- a/connectivity/source/inc/hsqldb/HUser.hxx
+++ b/connectivity/source/inc/hsqldb/HUser.hxx
@@ -38,8 +38,8 @@ namespace connectivity::hsqldb
public:
virtual void refreshGroups() override;
public:
- OHSQLUser( const css::uno::Reference< css::sdbc::XConnection >& _xConnection);
- OHSQLUser( const css::uno::Reference< css::sdbc::XConnection >& _xConnection,const OUString& Name);
+ OHSQLUser( css::uno::Reference< css::sdbc::XConnection > _xConnection);
+ OHSQLUser( css::uno::Reference< css::sdbc::XConnection > _xConnection, const OUString& Name);
// XUser
virtual void SAL_CALL changePassword( const OUString& objPassword, const OUString& newPassword ) override;
diff --git a/connectivity/source/inc/hsqldb/HUsers.hxx b/connectivity/source/inc/hsqldb/HUsers.hxx
index 5f72bceb7b9b..a5a099e9927e 100644
--- a/connectivity/source/inc/hsqldb/HUsers.hxx
+++ b/connectivity/source/inc/hsqldb/HUsers.hxx
@@ -43,7 +43,7 @@ namespace connectivity
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);
};
}
diff --git a/connectivity/source/inc/java/tools.hxx b/connectivity/source/inc/java/tools.hxx
index bc9759fa9a88..44a35ecee3f9 100644
--- a/connectivity/source/inc/java/tools.hxx
+++ b/connectivity/source/inc/java/tools.hxx
@@ -19,6 +19,10 @@
#pragma once
+#include <sal/config.h>
+
+#include <memory>
+
#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/uno/Sequence.h>
diff --git a/connectivity/source/inc/mysql/YDriver.hxx b/connectivity/source/inc/mysql/YDriver.hxx
index 7bdb499718fd..84fad1af1c99 100644
--- a/connectivity/source/inc/mysql/YDriver.hxx
+++ b/connectivity/source/inc/mysql/YDriver.hxx
@@ -72,7 +72,7 @@ namespace connectivity
@return
The driver which was currently selected.
*/
- css::uno::Reference< css::sdbc::XDriver > loadDriver( const OUString& url, const css::uno::Sequence< css::beans::PropertyValue >& info );
+ css::uno::Reference< css::sdbc::XDriver > loadDriver( std::u16string_view url, const css::uno::Sequence< css::beans::PropertyValue >& info );
public:
/** creates a new delegator for a mysql driver
diff --git a/connectivity/source/inc/mysql/YTable.hxx b/connectivity/source/inc/mysql/YTable.hxx
index 534c2319accb..c891b7d7d95e 100644
--- a/connectivity/source/inc/mysql/YTable.hxx
+++ b/connectivity/source/inc/mysql/YTable.hxx
@@ -92,9 +92,6 @@ namespace connectivity::mysql
// ODescriptor
virtual void construct() override;
- // css::lang::XUnoTunnel
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override;
- static css::uno::Sequence< sal_Int8 > getUnoTunnelId();
// XAlterTable
virtual void SAL_CALL alterColumnByName( const OUString& colName, const css::uno::Reference< css::beans::XPropertySet >& descriptor ) override;
diff --git a/connectivity/source/inc/mysql/YTables.hxx b/connectivity/source/inc/mysql/YTables.hxx
index 11d76812399c..3e3283ca96da 100644
--- a/connectivity/source/inc/mysql/YTables.hxx
+++ b/connectivity/source/inc/mysql/YTables.hxx
@@ -21,6 +21,7 @@
#include <connectivity/sdbcx/VCollection.hxx>
#include <SQLStatementHelper.hxx>
#include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
+#include <utility>
namespace connectivity::mysql
{
class OTables final : public sdbcx::OCollection,
@@ -37,9 +38,9 @@ namespace connectivity::mysql
void createTable( const css::uno::Reference< css::beans::XPropertySet >& descriptor );
virtual OUString getNameForObject(const sdbcx::ObjectType& _xObject) override;
public:
- OTables(const css::uno::Reference< css::sdbc::XDatabaseMetaData >& _rMetaData,::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex,
+ OTables(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(_rMetaData)
+ ,m_xMetaData(std::move(_xMetaData))
{}
// only the name is identical to ::cppu::OComponentHelper
diff --git a/connectivity/source/inc/mysql/YUser.hxx b/connectivity/source/inc/mysql/YUser.hxx
index ecb93fa21118..1713f63bfb64 100644
--- a/connectivity/source/inc/mysql/YUser.hxx
+++ b/connectivity/source/inc/mysql/YUser.hxx
@@ -38,8 +38,8 @@ namespace connectivity::mysql
public:
virtual void refreshGroups() override;
public:
- OMySQLUser( const css::uno::Reference< css::sdbc::XConnection >& _xConnection);
- OMySQLUser( const css::uno::Reference< css::sdbc::XConnection >& _xConnection,const OUString& Name);
+ OMySQLUser( css::uno::Reference< css::sdbc::XConnection > _xConnection);
+ OMySQLUser( css::uno::Reference< css::sdbc::XConnection > _xConnection, const OUString& Name);
// XUser
virtual void SAL_CALL changePassword( const OUString& objPassword, const OUString& newPassword ) override;
diff --git a/connectivity/source/inc/mysql/YUsers.hxx b/connectivity/source/inc/mysql/YUsers.hxx
index d27244775c07..e4b35c12e718 100644
--- a/connectivity/source/inc/mysql/YUsers.hxx
+++ b/connectivity/source/inc/mysql/YUsers.hxx
@@ -43,7 +43,7 @@ namespace connectivity
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);
};
}
diff --git a/connectivity/source/inc/mysql/YViews.hxx b/connectivity/source/inc/mysql/YViews.hxx
index 22a1f605b657..2e9a1b25162a 100644
--- a/connectivity/source/inc/mysql/YViews.hxx
+++ b/connectivity/source/inc/mysql/YViews.hxx
@@ -20,6 +20,7 @@
#include <connectivity/sdbcx/VCollection.hxx>
#include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
+#include <utility>
namespace connectivity::mysql
{
class OViews final : public sdbcx::OCollection
@@ -34,9 +35,9 @@ namespace connectivity::mysql
void createView( const css::uno::Reference< css::beans::XPropertySet >& descriptor );
public:
- OViews(const css::uno::Reference< css::sdbc::XDatabaseMetaData >& _rMetaData,::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex,
+ OViews(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(_rMetaData)
+ ,m_xMetaData(std::move(_xMetaData))
,m_bInDrop(false)
{}
diff --git a/connectivity/source/inc/odbc/OConnection.hxx b/connectivity/source/inc/odbc/OConnection.hxx
index b08544b859bd..93875c66193c 100644
--- a/connectivity/source/inc/odbc/OConnection.hxx
+++ b/connectivity/source/inc/odbc/OConnection.hxx
@@ -41,7 +41,7 @@ namespace connectivity::odbc
typedef connectivity::OMetaConnection OConnection_BASE;
typedef std::vector< ::connectivity::OTypeInfo> TTypeInfoVector;
- class OOO_DLLPUBLIC_ODBCBASE OConnection final :
+ class OConnection final :
public OConnection_BASE,
public OAutoRetrievingBase
{
diff --git a/connectivity/source/inc/odbc/ODatabaseMetaData.hxx b/connectivity/source/inc/odbc/ODatabaseMetaData.hxx
index b0b4a6552a37..457d1e684206 100644
--- a/connectivity/source/inc/odbc/ODatabaseMetaData.hxx
+++ b/connectivity/source/inc/odbc/ODatabaseMetaData.hxx
@@ -29,7 +29,7 @@ namespace connectivity::odbc
//************ Class: ODatabaseMetaData
- class OOO_DLLPUBLIC_ODBCBASE ODatabaseMetaData final :
+ class ODatabaseMetaData final :
public ODatabaseMetaDataBase
{
SQLHANDLE m_aConnectionHandle;
diff --git a/connectivity/source/inc/odbc/ODatabaseMetaDataResultSet.hxx b/connectivity/source/inc/odbc/ODatabaseMetaDataResultSet.hxx
index 5d6982807d48..dc011f37802c 100644
--- a/connectivity/source/inc/odbc/ODatabaseMetaDataResultSet.hxx
+++ b/connectivity/source/inc/odbc/ODatabaseMetaDataResultSet.hxx
@@ -53,7 +53,7 @@ namespace connectivity::odbc
css::sdbc::XCloseable,
css::sdbc::XColumnLocate> ODatabaseMetaDataResultSet_BASE;
- class OOO_DLLPUBLIC_ODBCBASE ODatabaseMetaDataResultSet :
+ class ODatabaseMetaDataResultSet :
public cppu::BaseMutex,
public ODatabaseMetaDataResultSet_BASE,
public ::cppu::OPropertySetHelper,
diff --git a/connectivity/source/inc/odbc/ODriver.hxx b/connectivity/source/inc/odbc/ODriver.hxx
index 0152346b2473..6cba90648d6e 100644
--- a/connectivity/source/inc/odbc/ODriver.hxx
+++ b/connectivity/source/inc/odbc/ODriver.hxx
@@ -49,7 +49,7 @@ namespace connectivity::odbc
public:
- ODBCDriver(const css::uno::Reference< css::uno::XComponentContext >& rxContext);
+ ODBCDriver(css::uno::Reference< css::uno::XComponentContext > xContext);
// only possibility to get the odbc functions
virtual oslGenericFunction getOdbcFunction(ODBC3SQLFunctionId _nIndex) const = 0;
diff --git a/connectivity/source/inc/odbc/OFunctions.hxx b/connectivity/source/inc/odbc/OFunctions.hxx
index da3545c9ad79..a44fe5a15031 100644
--- a/connectivity/source/inc/odbc/OFunctions.hxx
+++ b/connectivity/source/inc/odbc/OFunctions.hxx
@@ -523,7 +523,7 @@ bool LoadLibrary_ODBC3(OUString &_rPath);
#define N3SQLGetCursorName(a,b,c,d) (*reinterpret_cast<T3SQLGetCursorName>(getOdbcFunction(ODBC3SQLFunctionId::GetCursorName)))(a,b,c,d)
- typedef SQLRETURN (SQL_API *T3SQLNativeSql) ( SQLHSTMT ConnectionHandle,
+ typedef SQLRETURN (SQL_API *T3SQLNativeSql) ( SQLHDBC ConnectionHandle,
SQLCHAR * InStatementText,
SQLINTEGER TextLength1,
SQLCHAR * OutStatementText,
diff --git a/connectivity/source/inc/odbc/OPreparedStatement.hxx b/connectivity/source/inc/odbc/OPreparedStatement.hxx
index 37e29db9c5a2..aa5e895bfc79 100644
--- a/connectivity/source/inc/odbc/OPreparedStatement.hxx
+++ b/connectivity/source/inc/odbc/OPreparedStatement.hxx
@@ -38,7 +38,7 @@ namespace connectivity::odbc
css::sdbc::XResultSetMetaDataSupplier,
css::lang::XServiceInfo> OPreparedStatement_BASE;
- class OOO_DLLPUBLIC_ODBCBASE OPreparedStatement final :
+ class OPreparedStatement final :
public OStatement_BASE2,
public OPreparedStatement_BASE
{
diff --git a/connectivity/source/inc/odbc/OResultSet.hxx b/connectivity/source/inc/odbc/OResultSet.hxx
index 6de7adc28174..719c6be14da8 100644
--- a/connectivity/source/inc/odbc/OResultSet.hxx
+++ b/connectivity/source/inc/odbc/OResultSet.hxx
@@ -102,12 +102,12 @@ namespace connectivity::odbc
typedef std::map< css::uno::Sequence<sal_Int8>, sal_Int32,TBookmarkPosMapCompare > TBookmarkPosMap;
- class OOO_DLLPUBLIC_ODBCBASE OResultSet :
- public cppu::BaseMutex,
- public ::connectivity::IResultSetHelper,
- public OResultSet_BASE,
- public ::cppu::OPropertySetHelper,
- public ::comphelper::OPropertyArrayUsageHelper<OResultSet>
+ class OResultSet :
+ public cppu::BaseMutex,
+ public ::connectivity::IResultSetHelper,
+ public OResultSet_BASE,
+ public ::cppu::OPropertySetHelper,
+ public ::comphelper::OPropertyArrayUsageHelper<OResultSet>
{
protected:
TBookmarkPosMap m_aPosToBookmarks;
diff --git a/connectivity/source/inc/odbc/OResultSetMetaData.hxx b/connectivity/source/inc/odbc/OResultSetMetaData.hxx
index 26244a61e0f9..76abe6eecd06 100644
--- a/connectivity/source/inc/odbc/OResultSetMetaData.hxx
+++ b/connectivity/source/inc/odbc/OResultSetMetaData.hxx
@@ -33,7 +33,7 @@ namespace connectivity::odbc
typedef ::cppu::WeakImplHelper< css::sdbc::XResultSetMetaData> OResultSetMetaData_BASE;
- class OOO_DLLPUBLIC_ODBCBASE OResultSetMetaData final :
+ class OResultSetMetaData final :
public OResultSetMetaData_BASE
{
std::vector<sal_Int32> m_vMapping; // when not every column is needed
@@ -58,11 +58,11 @@ namespace connectivity::odbc
,m_nColCount(-1)
,m_bUseODBC2Types(false)
{}
- OResultSetMetaData(OConnection* _pConnection, SQLHANDLE _pStmt ,const std::vector<sal_Int32> & _vMapping)
- :m_vMapping(_vMapping)
+ OResultSetMetaData(OConnection* _pConnection, SQLHANDLE _pStmt, std::vector<sal_Int32>&& _vMapping)
+ :m_vMapping(std::move(_vMapping))
,m_aStatementHandle( _pStmt )
,m_pConnection(_pConnection)
- ,m_nColCount(_vMapping.size()-1)
+ ,m_nColCount(m_vMapping.size()-1)
,m_bUseODBC2Types(false)
{}
virtual ~OResultSetMetaData() override;
diff --git a/connectivity/source/inc/odbc/OStatement.hxx b/connectivity/source/inc/odbc/OStatement.hxx
index 1e483108732d..2f0d0d814fea 100644
--- a/connectivity/source/inc/odbc/OStatement.hxx
+++ b/connectivity/source/inc/odbc/OStatement.hxx
@@ -52,11 +52,11 @@ namespace connectivity::odbc
//************ Class: java.sql.Statement
- class OOO_DLLPUBLIC_ODBCBASE OStatement_Base :
- public cppu::BaseMutex,
- public OStatement_BASE,
- public ::cppu::OPropertySetHelper,
- public ::comphelper::OPropertyArrayUsageHelper<OStatement_Base>
+ class OStatement_Base :
+ public cppu::BaseMutex,
+ public OStatement_BASE,
+ public ::cppu::OPropertySetHelper,
+ public ::comphelper::OPropertyArrayUsageHelper<OStatement_Base>
{
css::sdbc::SQLWarning m_aLastWarning;
@@ -218,10 +218,10 @@ namespace connectivity::odbc
virtual void SAL_CALL disposing() override;
};
- class OOO_DLLPUBLIC_ODBCBASE OStatement :
- public OStatement_BASE2,
- public css::sdbc::XBatchExecution,
- public css::lang::XServiceInfo
+ class OStatement :
+ public OStatement_BASE2,
+ public css::sdbc::XBatchExecution,
+ public css::lang::XServiceInfo
{
protected:
virtual ~OStatement() override {}
diff --git a/connectivity/source/inc/propertyids.hxx b/connectivity/source/inc/propertyids.hxx
index 1a9e3720f963..b10b4f008e64 100644
--- a/connectivity/source/inc/propertyids.hxx
+++ b/connectivity/source/inc/propertyids.hxx
@@ -36,74 +36,76 @@ namespace dbtools
};
}
-#define PROPERTY_ID_QUERYTIMEOUT 1
-#define PROPERTY_ID_MAXFIELDSIZE 2
-#define PROPERTY_ID_MAXROWS 3
-#define PROPERTY_ID_CURSORNAME 4
-#define PROPERTY_ID_RESULTSETCONCURRENCY 5
-#define PROPERTY_ID_RESULTSETTYPE 6
-#define PROPERTY_ID_FETCHDIRECTION 7
-#define PROPERTY_ID_FETCHSIZE 8
-#define PROPERTY_ID_ESCAPEPROCESSING 9
-#define PROPERTY_ID_USEBOOKMARKS 10
-// Column
-#define PROPERTY_ID_NAME 11
-#define PROPERTY_ID_TYPE 12
-#define PROPERTY_ID_TYPENAME 13
-#define PROPERTY_ID_PRECISION 14
-#define PROPERTY_ID_SCALE 15
-#define PROPERTY_ID_ISNULLABLE 16
-#define PROPERTY_ID_ISAUTOINCREMENT 17
-#define PROPERTY_ID_ISROWVERSION 18
-#define PROPERTY_ID_DESCRIPTION 19
-#define PROPERTY_ID_DEFAULTVALUE 20
+enum PropertyId
+{
+ PROPERTY_ID_QUERYTIMEOUT = 1,
+ PROPERTY_ID_MAXFIELDSIZE = 2,
+ PROPERTY_ID_MAXROWS = 3,
+ PROPERTY_ID_CURSORNAME = 4,
+ PROPERTY_ID_RESULTSETCONCURRENCY = 5,
+ PROPERTY_ID_RESULTSETTYPE = 6,
+ PROPERTY_ID_FETCHDIRECTION = 7,
+ PROPERTY_ID_FETCHSIZE = 8,
+ PROPERTY_ID_ESCAPEPROCESSING = 9,
+ PROPERTY_ID_USEBOOKMARKS = 10,
+
+ // Column
+ PROPERTY_ID_NAME = 11,
+ PROPERTY_ID_TYPE = 12,
+ PROPERTY_ID_TYPENAME = 13,
+ PROPERTY_ID_PRECISION = 14,
+ PROPERTY_ID_SCALE = 15,
+ PROPERTY_ID_ISNULLABLE = 16,
+ PROPERTY_ID_ISAUTOINCREMENT = 17,
+ PROPERTY_ID_ISROWVERSION = 18,
+ PROPERTY_ID_DESCRIPTION = 19,
+ PROPERTY_ID_DEFAULTVALUE = 20,
-#define PROPERTY_ID_REFERENCEDTABLE 21
-#define PROPERTY_ID_UPDATERULE 22
-#define PROPERTY_ID_DELETERULE 23
-#define PROPERTY_ID_CATALOG 24
-#define PROPERTY_ID_ISUNIQUE 25
-#define PROPERTY_ID_ISPRIMARYKEYINDEX 26
-#define PROPERTY_ID_ISCLUSTERED 27
-#define PROPERTY_ID_ISASCENDING 28
-#define PROPERTY_ID_SCHEMANAME 29
-#define PROPERTY_ID_CATALOGNAME 30
+ PROPERTY_ID_REFERENCEDTABLE = 21,
+ PROPERTY_ID_UPDATERULE = 22,
+ PROPERTY_ID_DELETERULE = 23,
+ PROPERTY_ID_CATALOG = 24,
+ PROPERTY_ID_ISUNIQUE = 25,
+ PROPERTY_ID_ISPRIMARYKEYINDEX = 26,
+ PROPERTY_ID_ISCLUSTERED = 27,
+ PROPERTY_ID_ISASCENDING = 28,
+ PROPERTY_ID_SCHEMANAME = 29,
+ PROPERTY_ID_CATALOGNAME = 30,
-#define PROPERTY_ID_COMMAND 31
-#define PROPERTY_ID_CHECKOPTION 32
-#define PROPERTY_ID_PASSWORD 33
-#define PROPERTY_ID_RELATEDCOLUMN 34
+ PROPERTY_ID_COMMAND = 31,
+ PROPERTY_ID_CHECKOPTION = 32,
+ PROPERTY_ID_PASSWORD = 33,
+ PROPERTY_ID_RELATEDCOLUMN = 34,
-#define PROPERTY_ID_FUNCTION 35
-#define PROPERTY_ID_TABLENAME 36
-#define PROPERTY_ID_REALNAME 37
-#define PROPERTY_ID_DBASEPRECISIONCHANGED 38
-#define PROPERTY_ID_ISCURRENCY 39
-#define PROPERTY_ID_ISBOOKMARKABLE 40
+ PROPERTY_ID_FUNCTION = 35,
+ PROPERTY_ID_TABLENAME = 36,
+ PROPERTY_ID_REALNAME = 37,
+ PROPERTY_ID_DBASEPRECISIONCHANGED = 38,
+ PROPERTY_ID_ISCURRENCY = 39,
+ PROPERTY_ID_ISBOOKMARKABLE = 40,
-#define PROPERTY_ID_INVALID_INDEX 41
-#define PROPERTY_ID_HY010 43
-#define PROPERTY_ID_LABEL 44
-#define PROPERTY_ID_DELIMITER 45
-#define PROPERTY_ID_FORMATKEY 46
-#define PROPERTY_ID_LOCALE 47
-#define PROPERTY_ID_IM001 48
+ PROPERTY_ID_HY010 = 41,
+ PROPERTY_ID_LABEL = 42,
+ PROPERTY_ID_DELIMITER = 43,
+ PROPERTY_ID_FORMATKEY = 44,
+ PROPERTY_ID_LOCALE = 45,
-#define PROPERTY_ID_AUTOINCREMENTCREATION 49
+ PROPERTY_ID_AUTOINCREMENTCREATION = 46,
-#define PROPERTY_ID_PRIVILEGES 50
-#define PROPERTY_ID_HAVINGCLAUSE 51
+ PROPERTY_ID_PRIVILEGES = 47,
+ PROPERTY_ID_HAVINGCLAUSE = 48,
-#define PROPERTY_ID_ISSIGNED 52
-#define PROPERTY_ID_AGGREGATEFUNCTION 53
-#define PROPERTY_ID_ISSEARCHABLE 54
+ PROPERTY_ID_ISSIGNED = 49,
+ PROPERTY_ID_AGGREGATEFUNCTION = 50,
+ PROPERTY_ID_ISSEARCHABLE = 51,
-#define PROPERTY_ID_APPLYFILTER 55
-#define PROPERTY_ID_FILTER 56
-#define PROPERTY_ID_MASTERFIELDS 57
-#define PROPERTY_ID_DETAILFIELDS 58
-#define PROPERTY_ID_FIELDTYPE 59
-#define PROPERTY_ID_VALUE 60
-#define PROPERTY_ID_ACTIVE_CONNECTION 61
+ PROPERTY_ID_APPLYFILTER = 52,
+ PROPERTY_ID_FILTER = 53,
+ PROPERTY_ID_MASTERFIELDS = 54,
+ PROPERTY_ID_DETAILFIELDS = 55,
+ PROPERTY_ID_FIELDTYPE = 56,
+ PROPERTY_ID_VALUE = 57,
+ PROPERTY_ID_ACTIVE_CONNECTION = 58
+};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/connectivity/source/inc/resource/sharedresources.hxx b/connectivity/source/inc/resource/sharedresources.hxx
index 8b4f3f98899d..0c439cdf24e3 100644
--- a/connectivity/source/inc/resource/sharedresources.hxx
+++ b/connectivity/source/inc/resource/sharedresources.hxx
@@ -22,7 +22,7 @@
#include <rtl/ustring.hxx>
#include <vector>
#include <connectivity/dbtoolsdllapi.hxx>
-
+#include <unotools/resmgr.hxx>
namespace connectivity
{
@@ -47,7 +47,7 @@ namespace connectivity
*/
OUString
getResourceString(
- const char* pResId
+ TranslateId pResId
) const;
/** loads a string from the shared resource file, and replaces
@@ -65,7 +65,7 @@ namespace connectivity
*/
OUString
getResourceStringWithSubstitution(
- const char* pResId,
+ TranslateId pResId,
const char* _pAsciiPatternToReplace,
const OUString& _rStringToSubstitute
) const;
@@ -89,7 +89,7 @@ namespace connectivity
*/
OUString
getResourceStringWithSubstitution(
- const char* pResId,
+ TranslateId pResId,
const char* _pAsciiPatternToReplace1,
const OUString& _rStringToSubstitute1,
const char* _pAsciiPatternToReplace2,
@@ -119,7 +119,7 @@ namespace connectivity
*/
OUString
getResourceStringWithSubstitution(
- const char* pResId,
+ TranslateId pResId,
const char* _pAsciiPatternToReplace1,
const OUString& _rStringToSubstitute1,
const char* _pAsciiPatternToReplace2,
@@ -138,7 +138,7 @@ namespace connectivity
@return
the string from the resource file, with applied string substitution
*/
- OUString getResourceStringWithSubstitution( const char* pResId,
+ OUString getResourceStringWithSubstitution( TranslateId pResId,
const std::vector< std::pair<const char* , OUString > >& _rStringToSubstitutes) const;
};
diff --git a/connectivity/source/inc/writer/WConnection.hxx b/connectivity/source/inc/writer/WConnection.hxx
index 768518a97c93..5ae8b2818e0f 100644
--- a/connectivity/source/inc/writer/WConnection.hxx
+++ b/connectivity/source/inc/writer/WConnection.hxx
@@ -40,11 +40,11 @@ namespace connectivity::writer
class ODriver;
class OWriterConnection : public file::OConnection
{
- // the spreadsheet document:
+ // the text document:
css::uno::Reference<css::text::XTextDocument> m_xDoc;
OUString m_sPassword;
OUString m_aFileName;
- oslInterlockedCount m_nDocCount;
+ oslInterlockedCount m_nDocCount = 0;
class CloseVetoButTerminateListener
: public cppu::WeakComponentImplHelper<css::frame::XTerminateListener>
diff --git a/connectivity/source/inc/writer/WTable.hxx b/connectivity/source/inc/writer/WTable.hxx
index e19872df531d..46ee5412e0a6 100644
--- a/connectivity/source/inc/writer/WTable.hxx
+++ b/connectivity/source/inc/writer/WTable.hxx
@@ -40,9 +40,9 @@ class OWriterTable : public OWriterTable_BASE
private:
css::uno::Reference<css::text::XTextTable> m_xTable;
OWriterConnection* m_pWriterConnection;
- sal_Int32 m_nStartCol;
- sal_Int32 m_nDataCols;
- bool m_bHasHeaders;
+ sal_Int32 m_nStartCol = 0;
+ sal_Int32 m_nDataCols = 0;
+ bool m_bHasHeaders = false;
void fillColumns();
@@ -54,10 +54,6 @@ public:
void SAL_CALL disposing() override;
- // css::lang::XUnoTunnel
- sal_Int64 SAL_CALL getSomething(const css::uno::Sequence<sal_Int8>& rId) override;
- static css::uno::Sequence<sal_Int8> getUnoTunnelId();
-
void construct() override;
};
diff --git a/connectivity/source/manager/mdrivermanager.cxx b/connectivity/source/manager/mdrivermanager.cxx
index e3a0c82efca3..ed09cc3c816e 100644
--- a/connectivity/source/manager/mdrivermanager.cxx
+++ b/connectivity/source/manager/mdrivermanager.cxx
@@ -17,6 +17,7 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <config_fuzzers.h>
#include "mdrivermanager.hxx"
#include <com/sun/star/configuration/theDefaultProvider.hpp>
@@ -26,7 +27,7 @@
#include <com/sun/star/beans/NamedValue.hpp>
#include <com/sun/star/logging/LogLevel.hpp>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <cppuhelper/implbase.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <cppuhelper/weak.hxx>
@@ -34,6 +35,7 @@
#include <algorithm>
#include <iterator>
+#include <utility>
#include <vector>
namespace drivermanager
@@ -47,13 +49,7 @@ using namespace ::com::sun::star::container;
using namespace ::com::sun::star::logging;
using namespace ::osl;
-#define SERVICE_SDBC_DRIVER "com.sun.star.sdbc.Driver"
-
-/// @throws NoSuchElementException
-static void throwNoSuchElementException()
-{
- throw NoSuchElementException();
-}
+constexpr OUStringLiteral SERVICE_SDBC_DRIVER = u"com.sun.star.sdbc.Driver";
class ODriverEnumeration : public ::cppu::WeakImplHelper< XEnumeration >
{
@@ -67,7 +63,7 @@ class ODriverEnumeration : public ::cppu::WeakImplHelper< XEnumeration >
protected:
virtual ~ODriverEnumeration() override;
public:
- explicit ODriverEnumeration(const DriverArray& _rDriverSequence);
+ explicit ODriverEnumeration(DriverArray&& _rDriverSequence);
// XEnumeration
virtual sal_Bool SAL_CALL hasMoreElements( ) override;
@@ -75,8 +71,8 @@ public:
};
-ODriverEnumeration::ODriverEnumeration(const DriverArray& _rDriverSequence)
- :m_aDrivers( _rDriverSequence )
+ODriverEnumeration::ODriverEnumeration(DriverArray&& _rDriverSequence)
+ :m_aDrivers( std::move(_rDriverSequence) )
,m_aPos( m_aDrivers.begin() )
{
}
@@ -96,13 +92,13 @@ sal_Bool SAL_CALL ODriverEnumeration::hasMoreElements( )
Any SAL_CALL ODriverEnumeration::nextElement( )
{
if ( !hasMoreElements() )
- throwNoSuchElementException();
+ throw NoSuchElementException();
- return makeAny( *m_aPos++ );
+ return Any( *m_aPos++ );
}
- namespace {
-
+namespace
+{
/// an STL functor which ensures that a SdbcDriver described by a DriverAccess is loaded
struct EnsureDriver
{
@@ -112,23 +108,23 @@ Any SAL_CALL ODriverEnumeration::nextElement( )
const DriverAccess& operator()( const DriverAccess& _rDescriptor ) const
{
// we did not load this driver, yet
- if (!_rDescriptor.xDriver.is())
+ if (_rDescriptor.xDriver.is())
+ return _rDescriptor;
+
+ // we have a factory for it
+ if (_rDescriptor.xComponentFactory.is())
{
- // we have a factory for it
- if (_rDescriptor.xComponentFactory.is())
+ DriverAccess& rDesc = const_cast<DriverAccess&>(_rDescriptor);
+ try
{
- DriverAccess& rDesc = const_cast<DriverAccess&>(_rDescriptor);
- try
- {
- //load driver
- rDesc.xDriver.set(
- rDesc.xComponentFactory->createInstanceWithContext(mxContext), css::uno::UNO_QUERY);
- }
- catch (const Exception&)
- {
- //failure, abandon driver
- rDesc.xComponentFactory.clear();
- }
+ //load driver
+ rDesc.xDriver.set(
+ rDesc.xComponentFactory->createInstanceWithContext(mxContext), css::uno::UNO_QUERY);
+ }
+ catch (const Exception&)
+ {
+ //failure, abandon driver
+ rDesc.xComponentFactory.clear();
}
}
return _rDescriptor;
@@ -156,26 +152,14 @@ Any SAL_CALL ODriverEnumeration::nextElement( )
};
// predicate for checking whether or not a driver accepts a given URL
- class AcceptsURL
+ bool AcceptsURL( const OUString& _rURL, const Reference<XDriver>& _rDriver )
{
- protected:
- const OUString& m_rURL;
-
- public:
- // ctor
- explicit AcceptsURL( const OUString& _rURL ) : m_rURL( _rURL ) { }
-
-
- bool operator()( const Reference<XDriver>& _rDriver ) const
- {
- // ask the driver
- return _rDriver.is() && _rDriver->acceptsURL( m_rURL );
- }
- };
-
+ // ask the driver
+ return _rDriver.is() && _rDriver->acceptsURL( _rURL );
}
- static sal_Int32 lcl_getDriverPrecedence( const Reference<XComponentContext>& _rContext, Sequence< OUString >& _rPrecedence )
+#if !ENABLE_FUZZERS
+ sal_Int32 lcl_getDriverPrecedence( const Reference<XComponentContext>& _rContext, Sequence< OUString >& _rPrecedence )
{
_rPrecedence.realloc( 0 );
try
@@ -185,8 +169,8 @@ Any SAL_CALL ODriverEnumeration::nextElement( )
css::configuration::theDefaultProvider::get( _rContext ) );
// one argument for creating the node access: the path to the configuration node
- Sequence< Any > aCreationArgs(1);
- aCreationArgs[0] <<= NamedValue( "nodepath", makeAny( OUString("org.openoffice.Office.DataAccess/DriverManager") ) );
+ Sequence< Any > aCreationArgs{ Any(NamedValue(
+ "nodepath", Any( OUString("org.openoffice.Office.DataAccess/DriverManager") ) )) };
// create the node access
Reference< XNameAccess > xDriverManagerNode(
@@ -209,10 +193,9 @@ Any SAL_CALL ODriverEnumeration::nextElement( )
return _rPrecedence.getLength();
}
+#endif
- namespace {
-
- /// an STL argorithm compatible predicate comparing two DriverAccess instances by their implementation names
+ /// an STL algorithm compatible predicate comparing two DriverAccess instances by their implementation names
struct CompareDriverAccessByName
{
@@ -222,19 +205,18 @@ Any SAL_CALL ODriverEnumeration::nextElement( )
}
};
- /// and STL argorithm compatible predicate comparing a DriverAccess' impl name to a string
+ /// and an STL algorithm compatible predicate comparing the impl name of a DriverAccess to a string
struct EqualDriverAccessToName
{
OUString m_sImplName;
- explicit EqualDriverAccessToName(const OUString& _sImplName) : m_sImplName(_sImplName){}
+ explicit EqualDriverAccessToName(OUString _sImplName) : m_sImplName(std::move(_sImplName)){}
bool operator()( const DriverAccess& lhs)
{
return lhs.sImplementationName == m_sImplName;
}
};
-
- }
+}
OSDBCDriverManager::OSDBCDriverManager( const Reference< XComponentContext >& _rxContext )
:OSDBCDriverManager_Base(m_aMutex)
@@ -328,6 +310,7 @@ void OSDBCDriverManager::bootstrapDrivers()
void OSDBCDriverManager::initializeDriverPrecedence()
{
+#if !ENABLE_FUZZERS
if ( m_aDriversBS.empty() )
// nothing to do
return;
@@ -360,7 +343,7 @@ void OSDBCDriverManager::initializeDriverPrecedence()
// at the moment this is the first of all drivers we know
// loop through the names in the precedence order
- for ( const OUString& rDriverOrder : std::as_const(aDriverOrder) )
+ for (const OUString& rDriverOrder : aDriverOrder)
{
if (aNoPrefDriversStart == m_aDriversBS.end())
break;
@@ -395,6 +378,7 @@ void OSDBCDriverManager::initializeDriverPrecedence()
{
TOOLS_WARN_EXCEPTION( "connectivity.hsqldb", "OSDBCDriverManager::initializeDriverPrecedence: caught an exception while sorting the drivers!");
}
+#endif
}
@@ -489,7 +473,7 @@ Reference< XEnumeration > SAL_CALL OSDBCDriverManager::createEnumeration( )
ExtractDriverFromCollectionElement() // transformation to apply (extract a driver from a driver access)
);
- return new ODriverEnumeration( aDrivers );
+ return new ODriverEnumeration( std::move(aDrivers) );
}
@@ -528,7 +512,7 @@ Reference< XInterface > SAL_CALL OSDBCDriverManager::getRegisteredObject( const
MutexGuard aGuard(m_aMutex);
DriverCollection::const_iterator aSearch = m_aDriversRT.find(_rName);
if (aSearch == m_aDriversRT.end())
- throwNoSuchElementException();
+ throw NoSuchElementException();
return aSearch->second;
}
@@ -570,7 +554,7 @@ void SAL_CALL OSDBCDriverManager::revokeObject( const OUString& _rName )
DriverCollection::iterator aSearch = m_aDriversRT.find(_rName);
if (aSearch == m_aDriversRT.end())
- throwNoSuchElementException();
+ throw NoSuchElementException();
m_aDriversRT.erase(aSearch); // we already have the iterator so we could use it
@@ -607,8 +591,8 @@ Reference< XDriver > OSDBCDriverManager::implGetDriverForURL(const OUString& _rU
{
const OUString sDriverFactoryName = m_aDriverConfig.getDriverFactoryName(_rURL);
- EqualDriverAccessToName aEqual(sDriverFactoryName);
- DriverAccessArray::const_iterator aFind = std::find_if(m_aDriversBS.begin(),m_aDriversBS.end(),aEqual);
+ DriverAccessArray::const_iterator aFind = std::find_if(m_aDriversBS.begin(), m_aDriversBS.end(),
+ EqualDriverAccessToName(sDriverFactoryName));
if ( aFind == m_aDriversBS.end() )
{
// search all bootstrapped drivers
@@ -617,9 +601,16 @@ Reference< XDriver > OSDBCDriverManager::implGetDriverForURL(const OUString& _rU
m_aDriversBS.end(), // end of search range
[&_rURL, this] (const DriverAccessArray::value_type& driverAccess) {
// extract the driver from the access, then ask the resulting driver for acceptance
+#if defined __GNUC__ && !defined __clang__ && __GNUC__ >= 13 && __GNUC__ <= 14
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdangling-reference"
+#endif
const DriverAccess& ensuredAccess = EnsureDriver(m_xContext)(driverAccess);
+#if defined __GNUC__ && !defined __clang__ && __GNUC__ >= 13 && __GNUC__ <= 14
+#pragma GCC diagnostic pop
+#endif
const Reference<XDriver> driver = ExtractDriverFromAccess()(ensuredAccess);
- return AcceptsURL(_rURL)(driver);
+ return AcceptsURL(_rURL, driver);
});
} // if ( m_aDriversBS.find(sDriverFactoryName ) == m_aDriversBS.end() )
else
@@ -642,7 +633,7 @@ Reference< XDriver > OSDBCDriverManager::implGetDriverForURL(const OUString& _rU
[&_rURL] (const DriverCollection::value_type& element) {
// extract the driver from the collection element, then ask the resulting driver for acceptance
const Reference<XDriver> driver = ExtractDriverFromCollectionElement()(element);
- return AcceptsURL(_rURL)(driver);
+ return AcceptsURL(_rURL, driver);
});
if ( m_aDriversRT.end() != aPos )
diff --git a/connectivity/source/parse/sqlbison.y b/connectivity/source/parse/sqlbison.y
index d14f36e7794f..23de1cb772ab 100644
--- a/connectivity/source/parse/sqlbison.y
+++ b/connectivity/source/parse/sqlbison.y
@@ -44,7 +44,6 @@
#include <osl/diagnose.h>
#include "connectivity/dbconversion.hxx"
#include <rtl/ustrbuf.hxx>
-#include <sal/macros.h>
#include <sal/log.hxx>
#if defined _MSC_VER
@@ -74,9 +73,15 @@ inline connectivity::OSQLInternalNode* newNode(const OUString& _newValue,
// yyi is the internal number of the rule that is currently being reduced
// This can be mapped to external rule number via the yyrmap.
+#if defined YYBISON && YYBISON >= 30800
+#define SQL_NEW_RULE newNode("", SQLNodeType::Rule, yyr1[yyrule])
+#define SQL_NEW_LISTRULE newNode("", SQLNodeType::ListRule, yyr1[yyrule])
+#define SQL_NEW_COMMALISTRULE newNode("", SQLNodeType::CommaListRule, yyr1[yyrule])
+#else
#define SQL_NEW_RULE newNode("", SQLNodeType::Rule, yyr1[yyn])
#define SQL_NEW_LISTRULE newNode("", SQLNodeType::ListRule, yyr1[yyn])
#define SQL_NEW_COMMALISTRULE newNode("", SQLNodeType::CommaListRule, yyr1[yyn])
+#endif
extern connectivity::OSQLParser* xxx_pGLOBAL_SQLPARSER;
@@ -151,6 +156,7 @@ using namespace connectivity;
%token <pParseNode> SQL_TOKEN_DAYNAME SQL_TOKEN_DAYOFMONTH SQL_TOKEN_DAYOFWEEK SQL_TOKEN_DAYOFYEAR SQL_TOKEN_EXTRACT
%token <pParseNode> SQL_TOKEN_HOUR SQL_TOKEN_MILLISECOND SQL_TOKEN_MINUTE SQL_TOKEN_MONTH SQL_TOKEN_MONTHNAME SQL_TOKEN_NOW SQL_TOKEN_QUARTER SQL_TOKEN_DATEDIFF
%token <pParseNode> SQL_TOKEN_SECOND SQL_TOKEN_TIMESTAMPADD SQL_TOKEN_TIMESTAMPDIFF SQL_TOKEN_TIMEVALUE SQL_TOKEN_WEEK SQL_TOKEN_WEEKDAY SQL_TOKEN_YEAR SQL_TOKEN_YEARDAY
+%token <pParseNode> SQL_TOKEN_DATEADD
/* numeric functions */
%token <pParseNode> SQL_TOKEN_ABS SQL_TOKEN_ACOS SQL_TOKEN_ASIN SQL_TOKEN_ATAN SQL_TOKEN_ATAN2 SQL_TOKEN_CEILING
@@ -213,7 +219,7 @@ using namespace connectivity;
%type <pParseNode> like_predicate opt_escape test_for_null null_predicate_part_2 in_predicate in_predicate_part_2 character_like_predicate_part_2 other_like_predicate_part_2
%type <pParseNode> all_or_any_predicate any_all_some existence_test subquery quantified_comparison_predicate_part_2
%type <pParseNode> scalar_exp_commalist parameter_ref literal parenthesized_boolean_value_expression
-%type <pParseNode> column_ref data_type column cursor parameter range_variable user /*like_check*/
+%type <pParseNode> column_ref data_type column cursor parameter range_variable user /*like_check*/ datetime_unit
/* new rules at OJ */
%type <pParseNode> derived_column as_clause table_name num_primary term num_value_exp
%type <pParseNode> value_exp_primary num_value_fct unsigned_value_spec cast_spec set_fct_spec scalar_subquery
@@ -227,12 +233,12 @@ using namespace connectivity;
%type <pParseNode> datetime_primary datetime_value_fct time_zone time_zone_specifier /*interval_term*/ interval_qualifier
%type <pParseNode> start_field non_second_datetime_field end_field single_datetime_field extract_field datetime_field time_zone_field
%type <pParseNode> char_length_exp octet_length_exp bit_length_exp select_sublist string_value_exp
-%type <pParseNode> char_value_exp concatenation char_factor char_primary string_value_fct char_substring_fct fold
+%type <pParseNode> char_value_exp concatenation char_factor char_primary string_value_fct char_substring_fct
%type <pParseNode> form_conversion char_translation trim_fct trim_operands trim_spec bit_value_fct bit_substring_fct op_column_commalist
%type <pParseNode> /*bit_concatenation*/ bit_value_exp bit_factor bit_primary collate_clause char_value_fct unique_spec value_exp_commalist in_predicate_value unique_test update_source
%type <pParseNode> function_arg_commalist3 string_function_3Argument function_arg_commalist4 string_function_4Argument function_arg_commalist2 string_function_1Argument string_function_2Argument
%type <pParseNode> date_function_0Argument date_function_1Argument function_name12 function_name23 function_name1 function_name2 function_name3 function_name0 numeric_function_0Argument numeric_function_1Argument numeric_function_2Argument
-%type <pParseNode> all query_primary sql_not for_length upper_lower comparison column_val cross_union /*opt_schema_element_list*/
+%type <pParseNode> all query_primary sql_not for_length comparison column_val cross_union /*opt_schema_element_list*/
%type <pParseNode> /*op_authorization op_schema*/ nil_fkt schema_element base_table_def base_table_element base_table_element_commalist
%type <pParseNode> column_def odbc_fct_spec odbc_call_spec odbc_fct_type op_parameter union_statement
%type <pParseNode> op_odbc_call_parameter odbc_parameter_commalist odbc_parameter function_args_commalist function_arg
@@ -318,7 +324,7 @@ schema:
opt_schema_element_list:
{$$ = SQL_NEW_RULE;}
- | schema_glement_list
+ | schema_element_list
;
schema_element_list:
@@ -1923,10 +1929,12 @@ string_function_1Argument:
SQL_TOKEN_LENGTH
| SQL_TOKEN_ASCII
| SQL_TOKEN_LCASE
+ | SQL_TOKEN_LOWER
| SQL_TOKEN_LTRIM
| SQL_TOKEN_RTRIM
| SQL_TOKEN_SPACE
| SQL_TOKEN_UCASE
+ | SQL_TOKEN_UPPER
;
string_function_2Argument:
@@ -1973,6 +1981,7 @@ date_function_1Argument:
date_function:
SQL_TOKEN_TIMESTAMPADD
| SQL_TOKEN_TIMESTAMPDIFF
+ | SQL_TOKEN_DATEADD
;
numeric_function_0Argument:
SQL_TOKEN_PI
@@ -2952,11 +2961,27 @@ interval_value_exp:
*/
non_second_datetime_field:
SQL_TOKEN_YEAR
+ | SQL_TOKEN_YEARDAY
+ | SQL_TOKEN_MONTH
+ | SQL_TOKEN_WEEK
+ | SQL_TOKEN_WEEKDAY
+ | SQL_TOKEN_DAY
+ | SQL_TOKEN_HOUR
+ | SQL_TOKEN_MINUTE
+ | SQL_TOKEN_MILLISECOND
+ ;
+
+datetime_unit:
+ SQL_TOKEN_YEAR
| SQL_TOKEN_MONTH
+ | SQL_TOKEN_WEEK
| SQL_TOKEN_DAY
| SQL_TOKEN_HOUR
| SQL_TOKEN_MINUTE
+ | SQL_TOKEN_SECOND
+ | SQL_TOKEN_MILLISECOND
;
+
start_field:
non_second_datetime_field opt_paren_precision
{
@@ -3088,6 +3113,13 @@ function_args_commalist:
else
YYERROR;
}
+ | datetime_unit ',' function_arg ',' function_arg
+ {
+ $$ = SQL_NEW_COMMALISTRULE;
+ $$->append($1);
+ $$->append($3);
+ $$->append($5);
+ }
;
value_exp:
@@ -3219,7 +3251,6 @@ bit_primary:
;
char_value_fct:
char_substring_fct
- | fold
| form_conversion
{
$$ = SQL_NEW_RULE;
@@ -3266,20 +3297,6 @@ char_substring_fct:
$$->append(newNode(")", SQLNodeType::Punctuation));
}
;
-upper_lower:
- SQL_TOKEN_UPPER
- | SQL_TOKEN_LOWER
- ;
-fold:
- upper_lower '(' value_exp ')'
- {
- $$ = SQL_NEW_RULE;
- $$->append($1);
- $$->append(newNode("(", SQLNodeType::Punctuation));
- $$->append($3);
- $$->append(newNode(")", SQLNodeType::Punctuation));
- }
- ;
form_conversion:
SQL_TOKEN_CONVERT '(' string_value_exp SQL_TOKEN_USING table_node ')'
{
@@ -4376,7 +4393,7 @@ OString OParseContext::getIntlKeywordAscii(InternationalKeyCode _eKey) const
IParseContext::InternationalKeyCode OParseContext::getIntlKeyCode(const OString& rToken) const
{
- static IParseContext::InternationalKeyCode Intl_TokenID[] =
+ static IParseContext::InternationalKeyCode const Intl_TokenID[] =
{
InternationalKeyCode::Like, InternationalKeyCode::Not, InternationalKeyCode::Null, InternationalKeyCode::True,
InternationalKeyCode::False, InternationalKeyCode::Is, InternationalKeyCode::Between, InternationalKeyCode::Or,
@@ -4386,15 +4403,14 @@ IParseContext::InternationalKeyCode OParseContext::getIntlKeyCode(const OString&
InternationalKeyCode::VarPop,InternationalKeyCode::Collect,InternationalKeyCode::Fusion,InternationalKeyCode::Intersection
};
- sal_uInt32 nCount = SAL_N_ELEMENTS( Intl_TokenID );
- for (sal_uInt32 i = 0; i < nCount; i++)
- {
- OString aKey = getIntlKeywordAscii(Intl_TokenID[i]);
- if (rToken.equalsIgnoreAsciiCase(aKey))
- return Intl_TokenID[i];
- }
+ auto const token = std::find_if(std::cbegin(Intl_TokenID), std::cend(Intl_TokenID)
+ , [&rToken, this](IParseContext::InternationalKeyCode const & tokenID)
+ { return rToken.equalsIgnoreAsciiCase(getIntlKeywordAscii(tokenID)); });
+
+ if (std::cend(Intl_TokenID) != token)
+ return *token;
- return InternationalKeyCode::None;
+ return InternationalKeyCode::None;
}
@@ -4489,7 +4505,7 @@ sal_Int32 OSQLParser::s_nRefCount = 0;
// ::osl::Mutex OSQLParser::s_aMutex;
OSQLScanner* OSQLParser::s_pScanner = nullptr;
OSQLParseNodesGarbageCollector* OSQLParser::s_pGarbageCollector = nullptr;
-css::uno::Reference< css::i18n::XLocaleData4> OSQLParser::s_xLocaleData = nullptr;
+vcl::DeleteOnDeinit<css::uno::Reference< css::i18n::XLocaleData4>> OSQLParser::s_xLocaleData(vcl::DeleteOnDeinitFlag::Empty);
void setParser(OSQLParser* _pParser)
{
@@ -4498,7 +4514,6 @@ void setParser(OSQLParser* _pParser)
void OSQLParser::setParseTree(OSQLParseNode* pNewParseTree)
{
- ::osl::MutexGuard aGuard(getMutex());
m_pParseTree.reset(pNewParseTree);
}
@@ -4570,7 +4585,7 @@ std::unique_ptr<OSQLParseNode> OSQLParser::parseTree(OUString& rErrorMessage,
// Guard the parsing
- ::osl::MutexGuard aGuard(getMutex());
+ std::unique_lock aGuard(getMutex());
// must be reset
setParser(this);
@@ -4599,7 +4614,8 @@ std::unique_ptr<OSQLParseNode> OSQLParser::parseTree(OUString& rErrorMessage,
// clear the garbage collector
(*s_pGarbageCollector)->clearAndDelete();
- m_pParseTree.release(); // because the garbage collector deleted it
+ // coverity[leaked_storage : FALSE] - because the garbage collector deleted it
+ m_pParseTree.release();
return nullptr;
}
else
@@ -4645,6 +4661,7 @@ OString OSQLParser::TokenIDToStr(sal_uInt32 nTokenID, const IParseContext* pCont
if (aStr.isEmpty())
{
+ // coverity[unsigned_compare : SUPPRESS] - YYTRANSLATE is out of our control
aStr = yytname[YYTRANSLATE(nTokenID)];
if(aStr.startsWith("SQL_TOKEN_"))
aStr = aStr.copy(10);
@@ -4663,7 +4680,7 @@ OString OSQLParser::TokenIDToStr(sal_uInt32 nTokenID, const IParseContext* pCont
#if OSL_DEBUG_LEVEL > 0
OUString OSQLParser::RuleIDToStr(sal_uInt32 nRuleID)
{
- OSL_ENSURE(nRuleID < SAL_N_ELEMENTS(yytname), "OSQLParser::RuleIDToStr: Invalid nRuleId!");
+ OSL_ENSURE(nRuleID < std::size(yytname), "OSQLParser::RuleIDToStr: Invalid nRuleId!");
return OUString::createFromAscii(yytname[nRuleID]);
}
#endif
@@ -4673,8 +4690,8 @@ sal_uInt32 OSQLParser::StrToRuleID(const OString & rValue)
{
// Search for the given name in yytname and return the index
// (or UNKNOWN_RULE, if not found)
- static sal_uInt32 nLen = SAL_N_ELEMENTS(yytname);
- for (sal_uInt32 i = YYTRANSLATE(SQL_TOKEN_INVALIDSYMBOL); i < (nLen-1); i++)
+ static sal_uInt32 const nLen = std::size(yytname)-1;
+ for (sal_uInt32 i = YYTRANSLATE(SQL_TOKEN_INVALIDSYMBOL); i < nLen; ++i)
{
if (rValue == yytname[i])
return i;
@@ -4743,8 +4760,7 @@ sal_Int16 OSQLParser::buildStringNodes(OSQLParseNode*& pLiteral)
OSQLParseNode* pParent = pLiteral->getParent();
OSQLParseNode* pNewNode = new OSQLInternalNode(pLiteral->getTokenValue(), SQLNodeType::String);
- pParent->replace(pLiteral, pNewNode);
- delete pLiteral;
+ pParent->replaceAndDelete(pLiteral, pNewNode);
pLiteral = nullptr;
return 1;
}
@@ -4802,12 +4818,11 @@ void OSQLParser::error(const char *fmt)
sal_Int32 nPos2 = sStr.indexOf(sSQL_TOKEN,nPos1+1);
if(nPos2 != -1)
{
- OUString sSecond = sStr.copy(nPos1+sSQL_TOKEN.getLength(),nPos2-nPos1-sSQL_TOKEN.getLength());
- sFirst += sSecond;
- sFirst += sStr.copy(nPos2+sSQL_TOKEN.getLength());
+ sFirst += sStr.subView(nPos1+sSQL_TOKEN.getLength(),nPos2-nPos1-sSQL_TOKEN.getLength());
+ sFirst += sStr.subView(nPos2+sSQL_TOKEN.getLength());
}
else
- sFirst += sStr.copy(nPos1+sSQL_TOKEN.getLength());
+ sFirst += sStr.subView(nPos1+sSQL_TOKEN.getLength());
m_sErrorMessage = sFirst;
}
diff --git a/connectivity/source/parse/sqlflex.l b/connectivity/source/parse/sqlflex.l
index 34a4067ea21c..44daeb236bf7 100644
--- a/connectivity/source/parse/sqlflex.l
+++ b/connectivity/source/parse/sqlflex.l
@@ -186,6 +186,7 @@ CURSOR {SQL_NEW_KEYWORD(SQL_TOKEN_CURSOR); }
D {SQL_NEW_KEYWORD(SQL_TOKEN_D); }
DATE {SQL_NEW_KEYWORD(SQL_TOKEN_DATE); }
+DATEADD {SQL_NEW_KEYWORD(SQL_TOKEN_DATEADD); }
DATEDIFF {SQL_NEW_KEYWORD(SQL_TOKEN_DATEDIFF); }
DATEVALUE {SQL_NEW_KEYWORD(SQL_TOKEN_DATEVALUE); }
DAY {SQL_NEW_KEYWORD(SQL_TOKEN_DAY); }
diff --git a/connectivity/source/parse/sqliterator.cxx b/connectivity/source/parse/sqliterator.cxx
index 94df96d39628..f190d5dbfc97 100644
--- a/connectivity/source/parse/sqliterator.cxx
+++ b/connectivity/source/parse/sqliterator.cxx
@@ -32,15 +32,17 @@
#include <iostream>
#endif
#include <connectivity/PColumn.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <TConnection.hxx>
#include <comphelper/types.hxx>
#include <connectivity/dbmetadata.hxx>
#include <com/sun/star/sdb/SQLFilterOperator.hpp>
+#include <o3tl/safeint.hxx>
#include <sal/log.hxx>
#include <iterator>
#include <memory>
+#include <utility>
using namespace ::comphelper;
using namespace ::connectivity;
@@ -119,9 +121,9 @@ namespace connectivity
OUString m_sForbiddenQueryName;
public:
- ForbidQueryName( OSQLParseTreeIteratorImpl& _rIteratorImpl, const OUString& _rForbiddenQueryName )
+ ForbidQueryName( OSQLParseTreeIteratorImpl& _rIteratorImpl, OUString _aForbiddenQueryName )
:m_rpAllForbiddenNames( _rIteratorImpl.m_pForbiddenQueryNames )
- ,m_sForbiddenQueryName( _rForbiddenQueryName )
+ ,m_sForbiddenQueryName(std::move( _aForbiddenQueryName ))
{
if ( !m_rpAllForbiddenNames )
m_rpAllForbiddenNames = std::make_shared<QueryNameSet>();
@@ -264,7 +266,7 @@ namespace
{
OUString sComposedName;
- static constexpr OUStringLiteral s_sWildcard = u"%" ;
+ static constexpr OUString s_sWildcard = u"%"_ustr ;
// we want all catalogues, all schemas, all tables
Sequence< OUString > sTableTypes { "VIEW", "TABLE", s_sWildcard }; // this last one just to be sure to include anything else...
@@ -274,7 +276,7 @@ namespace
sComposedName.clear();
Reference< XResultSet> xRes = _rxDBMeta->getTables(
- !_rCatalog.isEmpty() ? makeAny( _rCatalog ) : Any(), !_rSchema.isEmpty() ? _rSchema : s_sWildcard, _rTableName, sTableTypes );
+ !_rCatalog.isEmpty() ? Any( _rCatalog ) : Any(), !_rSchema.isEmpty() ? _rSchema : s_sWildcard, _rTableName, sTableTypes );
Reference< XRow > xCurrentRow( xRes, UNO_QUERY );
if ( xCurrentRow.is() && xRes->next() )
@@ -523,7 +525,7 @@ void OSQLParseTreeIterator::getQualified_join( OSQLTables& _rTables, const OSQLP
{
const OSQLParseNode * pCol = pColumnCommalist->getChild(i);
// add twice because the column must exists in both tables
- m_pImpl->m_aJoinConditions.push_back( TNodePair(pCol,pCol) );
+ m_pImpl->m_aJoinConditions.emplace_back(pCol,pCol);
}
}
}
@@ -823,7 +825,6 @@ void OSQLParseTreeIterator::traverseCreateColumns(const OSQLParseNode* pSelectNo
pColumn->setFunction(false);
pColumn->setRealName(aColumnName);
- Reference< XPropertySet> xCol = pColumn;
m_aCreateColumns->push_back(pColumn);
}
}
@@ -852,7 +853,7 @@ bool OSQLParseTreeIterator::traverseSelectColumnNames(const OSQLParseNode* pSele
if (pSelectNode->getChild(2)->isRule() && SQL_ISPUNCTUATION(pSelectNode->getChild(2)->getChild(0),"*"))
{
// SELECT * ...
- setSelectColumnName(m_aSelectColumns, "*", "", "");
+ setSelectColumnName("*", "", "");
}
else if (SQL_ISRULE(pSelectNode->getChild(2),scalar_exp_commalist))
{
@@ -872,7 +873,7 @@ bool OSQLParseTreeIterator::traverseSelectColumnNames(const OSQLParseNode* pSele
// All the table's columns
OUString aTableRange;
pColumnRef->getChild(0)->parseNodeToStr( aTableRange, m_pImpl->m_xConnection, nullptr, false, false );
- setSelectColumnName(m_aSelectColumns, "*", "", aTableRange);
+ setSelectColumnName("*", "", aTableRange);
continue;
}
else if (SQL_ISRULE(pColumnRef,derived_column))
@@ -924,7 +925,7 @@ bool OSQLParseTreeIterator::traverseSelectColumnNames(const OSQLParseNode* pSele
*/
if(aColumnAlias.isEmpty())
aColumnAlias = sColumnName;
- setSelectColumnName(m_aSelectColumns,sColumnName,aColumnAlias,aTableRange,bFkt,nType,SQL_ISRULE(pColumnRef,general_set_fct) || SQL_ISRULE(pColumnRef,set_fct_spec));
+ setSelectColumnName(sColumnName,aColumnAlias,aTableRange,bFkt,nType,SQL_ISRULE(pColumnRef,general_set_fct) || SQL_ISRULE(pColumnRef,set_fct_spec));
}
}
}
@@ -1215,10 +1216,10 @@ void OSQLParseTreeIterator::traverseSearchCondition(OSQLParseNode const * pSearc
OSL_ENSURE(pSearchCondition->count() == 2,"OSQLParseTreeIterator: error in parse tree!");
const OSQLParseNode* pPart2 = pSearchCondition->getChild(1);
- sal_Int32 nCurentPos = pPart2->count()-2;
+ sal_Int32 nCurrentPos = pPart2->count()-2;
- OSQLParseNode * pNum_value_exp = pPart2->getChild(nCurentPos);
- OSQLParseNode * pOptEscape = pPart2->getChild(nCurentPos+1);
+ OSQLParseNode * pNum_value_exp = pPart2->getChild(nCurrentPos);
+ OSQLParseNode * pOptEscape = pPart2->getChild(nCurrentPos+1);
OSL_ENSURE(pNum_value_exp != nullptr,"OSQLParseTreeIterator: error in parse tree!");
OSL_ENSURE(pOptEscape != nullptr,"OSQLParseTreeIterator: error in parse tree!");
@@ -1406,7 +1407,7 @@ void OSQLParseTreeIterator::traverseParameter(const OSQLParseNode* _pParseNode
nType = ::connectivity::OSQLParser::getFunctionParameterType( pParent->getChild(0)->getTokenID(), i+1);
}
- OUString aNewColName( getUniqueColumnName( sParameterName ) );
+ OUString aNewColName(getUniqueColumnName(getSelectColumnNames(), sParameterName));
rtl::Reference<OParseColumn> pColumn = new OParseColumn(aNewColName,
OUString(),
@@ -1523,7 +1524,7 @@ OSQLTable OSQLParseTreeIterator::impl_createTableObject( const OUString& rTableN
return aReturnTable;
}
-void OSQLParseTreeIterator::appendColumns(::rtl::Reference<OSQLColumns> const & _rColumns,const OUString& _rTableAlias,const OSQLTable& _rTable)
+void OSQLParseTreeIterator::appendColumns(const OUString& _rTableAlias, const OSQLTable& _rTable)
{
if (!_rTable.is())
return;
@@ -1532,16 +1533,14 @@ void OSQLParseTreeIterator::appendColumns(::rtl::Reference<OSQLColumns> const &
if ( !xColumns.is() )
return;
- Sequence< OUString > aColNames = xColumns->getElementNames();
- const OUString* pBegin = aColNames.getConstArray();
- const OUString* pEnd = pBegin + aColNames.getLength();
+ ::comphelper::UStringMixLess aCompare(isCaseSensitive());
+ std::vector<OUString> aSelectColumnNames = getSelectColumnNames();
- for(;pBegin != pEnd;++pBegin)
+ for (auto& colName : xColumns->getElementNames())
{
-
- OUString aName(getUniqueColumnName(*pBegin));
+ OUString aName(getUniqueColumnName(aSelectColumnNames, colName));
Reference< XPropertySet > xColumn;
- if(xColumns->hasByName(*pBegin) && (xColumns->getByName(*pBegin) >>= xColumn) && xColumn.is())
+ if(xColumns->hasByName(colName) && (xColumns->getByName(colName) >>= xColumn) && xColumn.is())
{
rtl::Reference<OParseColumn> pColumn = new OParseColumn(aName
, getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME)))
@@ -1559,29 +1558,29 @@ void OSQLParseTreeIterator::appendColumns(::rtl::Reference<OSQLColumns> const &
, getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TABLENAME))));
pColumn->setTableName(_rTableAlias);
- pColumn->setRealName(*pBegin);
- _rColumns->push_back(pColumn);
+ pColumn->setRealName(colName);
+ m_aSelectColumns->push_back(pColumn);
+ // update aSelectColumnNames with newly insert aName
+ aSelectColumnNames.insert(std::upper_bound(aSelectColumnNames.begin(), aSelectColumnNames.end(), aName, aCompare), aName);
}
else
- impl_appendError( IParseContext::ErrorCode::InvalidColumn, pBegin, &_rTableAlias );
+ impl_appendError(IParseContext::ErrorCode::InvalidColumn, &colName, &_rTableAlias);
}
}
-void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> const & _rColumns,const OUString & rColumnName,const OUString & rColumnAlias, const OUString & rTableRange, bool bFkt, sal_Int32 _nType, bool bAggFkt)
+void OSQLParseTreeIterator::setSelectColumnName(const OUString & rColumnName,const OUString & rColumnAlias, const OUString & rTableRange, bool bFkt, sal_Int32 _nType, bool bAggFkt)
{
if(rColumnName.toChar() == '*' && rTableRange.isEmpty())
{ // SELECT * ...
- OSL_ENSURE(_rColumns == m_aSelectColumns,"Invalid columns used here!");
for (auto const& table : *m_pImpl->m_pTables)
- appendColumns(_rColumns,table.first,table.second);
+ appendColumns(table.first, table.second);
}
else if( rColumnName.toChar() == '*' && !rTableRange.isEmpty() )
{ // SELECT <table>.*
- OSL_ENSURE(_rColumns == m_aSelectColumns,"Invalid columns used here!");
OSQLTables::const_iterator aFind = m_pImpl->m_pTables->find(rTableRange);
if(aFind != m_pImpl->m_pTables->end())
- appendColumns(_rColumns,rTableRange,aFind->second);
+ appendColumns(rTableRange, aFind->second);
}
else if ( rTableRange.isEmpty() )
{ // SELECT <something> ...
@@ -1602,7 +1601,7 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> co
)
continue;
- OUString aNewColName(getUniqueColumnName(rColumnAlias));
+ OUString aNewColName(getUniqueColumnName(getSelectColumnNames(), rColumnAlias));
rtl::Reference<OParseColumn> pColumn = new OParseColumn(xColumn,isCaseSensitive());
xNewColumn = pColumn;
@@ -1617,7 +1616,7 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> co
{
// no function (due to the above !bFkt), no existing column
// => assume an expression
- OUString aNewColName( getUniqueColumnName( rColumnAlias ) );
+ OUString aNewColName(getUniqueColumnName(getSelectColumnNames(), rColumnAlias));
// did not find a column with this name in any of the tables
rtl::Reference<OParseColumn> pColumn = new OParseColumn(
aNewColName,
@@ -1642,11 +1641,11 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> co
pColumn->setRealName( rColumnName );
}
- _rColumns->push_back( xNewColumn );
+ m_aSelectColumns->push_back( xNewColumn );
}
else
{
- OUString aNewColName(getUniqueColumnName(rColumnAlias));
+ OUString aNewColName(getUniqueColumnName(getSelectColumnNames(), rColumnAlias));
rtl::Reference<OParseColumn> pColumn = new OParseColumn(aNewColName,OUString(),OUString(),OUString(),
ColumnValue::NULLABLE_UNKNOWN,0,0,_nType,false,false,isCaseSensitive(),
@@ -1655,7 +1654,7 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> co
pColumn->setAggregateFunction(bAggFkt);
pColumn->setRealName(rColumnName);
- _rColumns->push_back(pColumn);
+ m_aSelectColumns->push_back(pColumn);
}
}
else // ColumnName and TableName exist
@@ -1667,7 +1666,7 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> co
{
if (bFkt)
{
- OUString aNewColName(getUniqueColumnName(rColumnAlias));
+ OUString aNewColName(getUniqueColumnName(getSelectColumnNames(), rColumnAlias));
rtl::Reference<OParseColumn> pColumn = new OParseColumn(aNewColName,OUString(),OUString(),OUString(),
ColumnValue::NULLABLE_UNKNOWN,0,0,_nType,false,false,isCaseSensitive(),
@@ -1679,21 +1678,21 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> co
assert(false);
pColumn->setTableName(aFind->first);
- _rColumns->push_back(pColumn);
+ m_aSelectColumns->push_back(pColumn);
}
else
{
Reference< XPropertySet > xColumn;
if (aFind->second->getColumns()->hasByName(rColumnName) && (aFind->second->getColumns()->getByName(rColumnName) >>= xColumn))
{
- OUString aNewColName(getUniqueColumnName(rColumnAlias));
+ OUString aNewColName(getUniqueColumnName(getSelectColumnNames(), rColumnAlias));
rtl::Reference<OParseColumn> pColumn = new OParseColumn(xColumn,isCaseSensitive());
pColumn->setName(aNewColName);
pColumn->setRealName(rColumnName);
pColumn->setTableName(aFind->first);
- _rColumns->push_back(pColumn);
+ m_aSelectColumns->push_back(pColumn);
}
else
bError = true;
@@ -1705,7 +1704,7 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> co
// Table does not exist or lacking field
if (bError)
{
- OUString aNewColName(getUniqueColumnName(rColumnAlias));
+ OUString aNewColName(getUniqueColumnName(getSelectColumnNames(), rColumnAlias));
rtl::Reference<OParseColumn> pColumn = new OParseColumn(aNewColName,OUString(),OUString(),OUString(),
ColumnValue::NULLABLE_UNKNOWN,0,0,DataType::VARCHAR,false,false,isCaseSensitive(),
@@ -1713,32 +1712,37 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> co
pColumn->setFunction(true);
pColumn->setAggregateFunction(bAggFkt);
- _rColumns->push_back(pColumn);
+ m_aSelectColumns->push_back(pColumn);
}
}
}
-OUString OSQLParseTreeIterator::getUniqueColumnName(const OUString & rColumnName) const
+std::vector<OUString> OSQLParseTreeIterator::getSelectColumnNames() const
{
- OUString aAlias(rColumnName);
+ ::comphelper::UStringMixLess aCompare(isCaseSensitive());
- OSQLColumns::const_iterator aIter = find(
- m_aSelectColumns->begin(),
- m_aSelectColumns->end(),
- aAlias,
- ::comphelper::UStringMixEqual( isCaseSensitive() )
- );
+ std::vector<OUString> aColumnNames;
+ OUString sPropertyName = OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME);
+ for (const auto& col : *m_aSelectColumns)
+ aColumnNames.push_back(getString(col->getPropertyValue(sPropertyName)));
+ std::sort(aColumnNames.begin(), aColumnNames.end(), aCompare);
+
+ return aColumnNames;
+}
+
+OUString OSQLParseTreeIterator::getUniqueColumnName(const std::vector<OUString>& rColumnNames, const OUString& rColumnName) const
+{
+ ::comphelper::UStringMixLess aCompare(isCaseSensitive());
+ if (!std::binary_search(rColumnNames.begin(), rColumnNames.end(), rColumnName, aCompare))
+ return rColumnName;
+
+ OUString aAlias;
sal_Int32 i=1;
- while(aIter != m_aSelectColumns->end())
+ do
{
aAlias = rColumnName + OUString::number(i++);
- aIter = find(
- m_aSelectColumns->begin(),
- m_aSelectColumns->end(),
- aAlias,
- ::comphelper::UStringMixEqual( isCaseSensitive() )
- );
}
+ while (std::binary_search(rColumnNames.begin(), rColumnNames.end(), aAlias, aCompare));
return aAlias;
}
@@ -1752,7 +1756,7 @@ void OSQLParseTreeIterator::setOrderByColumnName(const OUString & rColumnName, O
else
{
sal_Int32 nId = rColumnName.toInt32();
- if ( nId > 0 && nId < static_cast<sal_Int32>(m_aSelectColumns->size()) )
+ if ( nId > 0 && o3tl::make_unsigned(nId) < m_aSelectColumns->size() )
m_aOrderColumns->push_back( new OOrderColumn( (*m_aSelectColumns)[nId-1], isCaseSensitive(), bAscending ) );
}
@@ -1773,7 +1777,7 @@ void OSQLParseTreeIterator::setGroupByColumnName(const OUString & rColumnName, O
else
{
sal_Int32 nId = rColumnName.toInt32();
- if ( nId > 0 && nId < static_cast<sal_Int32>(m_aSelectColumns->size()) )
+ if ( nId > 0 && o3tl::make_unsigned(nId) < m_aSelectColumns->size() )
m_aGroupColumns->push_back(new OParseColumn((*m_aSelectColumns)[nId-1],isCaseSensitive()));
}
@@ -2101,7 +2105,11 @@ sal_Int32 OSQLParseTreeIterator::getFunctionReturnType(const OSQLParseNode* _pNo
nType = DataType::DOUBLE;
}
else
+ {
nType = ::connectivity::OSQLParser::getFunctionReturnType( sFunctionName, &m_rParser.getContext() );
+ if (nType == DataType::SQLNULL)
+ nType = ::connectivity::OSQLParser::getFunctionReturnType( sFunctionName, m_rParser.getNeutral() );
+ }
}
return nType;
diff --git a/connectivity/source/parse/sqlnode.cxx b/connectivity/source/parse/sqlnode.cxx
index c4c28dc4a822..ad8f6c9edeff 100644
--- a/connectivity/source/parse/sqlnode.cxx
+++ b/connectivity/source/parse/sqlnode.cxx
@@ -50,7 +50,7 @@
#include <comphelper/numbers.hxx>
#include <connectivity/dbtools.hxx>
#include <connectivity/dbmetadata.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <string.h>
#include <algorithm>
#include <functional>
@@ -59,6 +59,7 @@
#include <rtl/ustrbuf.hxx>
#include <sal/log.hxx>
+#include <utility>
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::util;
@@ -91,39 +92,26 @@ namespace
void replaceAndReset(connectivity::OSQLParseNode*& _pResetNode,connectivity::OSQLParseNode* _pNewNode)
{
- _pResetNode->getParent()->replace(_pResetNode, _pNewNode);
- delete _pResetNode;
+ _pResetNode->getParent()->replaceAndDelete(_pResetNode, _pNewNode);
_pResetNode = _pNewNode;
}
/** quotes a string and search for quotes inside the string and replace them with the new quote
@param rValue
The value to be quoted.
- @param rQuot
+ @param rQuote
The quote
- @param rQuotToReplace
+ @param rQuoteToReplace
The quote to replace with
@return
The quoted string.
*/
- OUString SetQuotation(std::u16string_view rValue, const OUString& rQuot, const OUString& rQuotToReplace)
+ OUString SetQuotation(const OUString& rValue, std::u16string_view rQuote, std::u16string_view rQuoteToReplace)
{
- OUString rNewValue = rQuot + rValue;
- sal_Int32 nIndex = sal_Int32(-1); // Replace quotes with double quotes or the parser gets into problems
-
- if (!rQuot.isEmpty())
- {
- do
- {
- nIndex += 2;
- nIndex = rNewValue.indexOf(rQuot,nIndex);
- if(nIndex != -1)
- rNewValue = rNewValue.replaceAt(nIndex,rQuot.getLength(),rQuotToReplace);
- } while (nIndex != -1);
- }
-
- rNewValue += rQuot;
- return rNewValue;
+ // Replace quotes with double quotes or the parser gets into problems
+ if (!rQuote.empty())
+ return rQuote + rValue.replaceAll(rQuote, rQuoteToReplace) + rQuote;
+ return rValue;
}
bool columnMatchP(const connectivity::OSQLParseNode* pSubTree, const connectivity::SQLParseNodeParameter& rParam)
@@ -147,41 +135,41 @@ namespace
{
}
- if(pSubTree->count())
+ if(!pSubTree->count())
+ return false;
+
+ const OSQLParseNode* pCol = pSubTree->getChild(pSubTree->count()-1);
+ if (SQL_ISRULE(pCol,column_val))
{
- const OSQLParseNode* pCol = pSubTree->getChild(pSubTree->count()-1);
- if (SQL_ISRULE(pCol,column_val))
- {
- assert(pCol->count() == 1);
- pCol = pCol->getChild(0);
- }
- const OSQLParseNode* pTable(nullptr);
- switch (pSubTree->count())
- {
- case 1:
- break;
- case 3:
- pTable = pSubTree->getChild(0);
- break;
- case 5:
- case 7:
- SAL_WARN("connectivity.parse", "SQL: catalog and/or schema in column_ref in predicate");
- break;
- default:
- SAL_WARN("connectivity.parse", "columnMatchP: SQL grammar changed; column_ref has " << pSubTree->count() << " children");
- assert(false);
- break;
- }
- // TODO: not all DBMS match column names case-insensitively...
- // see XDatabaseMetaData::supportsMixedCaseIdentifiers()
- // and XDatabaseMetaData::supportsMixedCaseQuotedIdentifiers()
- if ( // table name matches (or no table name)?
- ( !pTable || pTable->getTokenValue().equalsIgnoreAsciiCase(rParam.sPredicateTableAlias) )
- && // column name matches?
- pCol->getTokenValue().equalsIgnoreAsciiCase(aFieldName)
- )
- return true;
+ assert(pCol->count() == 1);
+ pCol = pCol->getChild(0);
}
+ const OSQLParseNode* pTable(nullptr);
+ switch (pSubTree->count())
+ {
+ case 1:
+ break;
+ case 3:
+ pTable = pSubTree->getChild(0);
+ break;
+ case 5:
+ case 7:
+ SAL_WARN("connectivity.parse", "SQL: catalog and/or schema in column_ref in predicate");
+ break;
+ default:
+ SAL_WARN("connectivity.parse", "columnMatchP: SQL grammar changed; column_ref has " << pSubTree->count() << " children");
+ assert(false);
+ break;
+ }
+ // TODO: not all DBMS match column names case-insensitively...
+ // see XDatabaseMetaData::supportsMixedCaseIdentifiers()
+ // and XDatabaseMetaData::supportsMixedCaseQuotedIdentifiers()
+ if ( // table name matches (or no table name)?
+ ( !pTable || pTable->getTokenValue().equalsIgnoreAsciiCase(rParam.sPredicateTableAlias) )
+ && // column name matches?
+ pCol->getTokenValue().equalsIgnoreAsciiCase(aFieldName)
+ )
+ return true;
return false;
}
}
@@ -191,7 +179,7 @@ namespace connectivity
SQLParseNodeParameter::SQLParseNodeParameter( const Reference< XConnection >& _rxConnection,
const Reference< XNumberFormatter >& _xFormatter, const Reference< XPropertySet >& _xField,
- const OUString &_sPredicateTableAlias,
+ OUString _sPredicateTableAlias,
const Locale& _rLocale, const IParseContext* _pContext,
bool _bIntl, bool _bQuote, OUString _sDecSep, bool _bPredicate, bool _bParseToSDBC )
:rLocale(_rLocale)
@@ -200,9 +188,9 @@ SQLParseNodeParameter::SQLParseNodeParameter( const Reference< XConnection >& _r
,pSubQueryHistory( std::make_shared<QueryNameSet>() )
,xFormatter(_xFormatter)
,xField(_xField)
- ,sPredicateTableAlias(_sPredicateTableAlias)
+ ,sPredicateTableAlias(std::move(_sPredicateTableAlias))
,m_rContext( _pContext ? *_pContext : OSQLParser::s_aDefaultContext )
- ,sDecSep(_sDecSep)
+ ,sDecSep(std::move(_sDecSep))
,bQuote(_bQuote)
,bInternational(_bIntl)
,bPredicate(_bPredicate)
@@ -210,14 +198,14 @@ SQLParseNodeParameter::SQLParseNodeParameter( const Reference< XConnection >& _r
{
}
-OUString OSQLParseNode::convertDateString(const SQLParseNodeParameter& rParam, const OUString& rString)
+OUString OSQLParseNode::convertDateString(const SQLParseNodeParameter& rParam, std::u16string_view rString)
{
Date aDate = DBTypeConversion::toDate(rString);
Reference< XNumberFormatsSupplier > xSupplier(rParam.xFormatter->getNumberFormatsSupplier());
Reference< XNumberFormatTypes > xTypes(xSupplier->getNumberFormats(), UNO_QUERY);
double fDate = DBTypeConversion::toDouble(aDate,DBTypeConversion::getNULLDate(xSupplier));
- sal_Int32 nKey = xTypes->getStandardIndex(rParam.rLocale) + 36; // XXX hack
+ sal_Int32 nKey = xTypes->getFormatIndex(NumberFormatIndex::DATE_SYS_DDMMYYYY, rParam.rLocale);
return rParam.xFormatter->convertNumberToString(nKey, fDate);
}
@@ -229,12 +217,12 @@ OUString OSQLParseNode::convertDateTimeString(const SQLParseNodeParameter& rPara
Reference< XNumberFormatTypes > xTypes(xSupplier->getNumberFormats(), UNO_QUERY);
double fDateTime = DBTypeConversion::toDouble(aDate,DBTypeConversion::getNULLDate(xSupplier));
- sal_Int32 nKey = xTypes->getStandardIndex(rParam.rLocale) + 51; // XXX hack
+ sal_Int32 nKey = xTypes->getFormatIndex(NumberFormatIndex::DATETIME_SYS_DDMMYYYY_HHMMSS, rParam.rLocale);
return rParam.xFormatter->convertNumberToString(nKey, fDateTime);
}
-OUString OSQLParseNode::convertTimeString(const SQLParseNodeParameter& rParam, const OUString& rString)
+OUString OSQLParseNode::convertTimeString(const SQLParseNodeParameter& rParam, std::u16string_view rString)
{
css::util::Time aTime = DBTypeConversion::toTime(rString);
Reference< XNumberFormatsSupplier > xSupplier(rParam.xFormatter->getNumberFormatsSupplier());
@@ -242,7 +230,7 @@ OUString OSQLParseNode::convertTimeString(const SQLParseNodeParameter& rParam, c
Reference< XNumberFormatTypes > xTypes(xSupplier->getNumberFormats(), UNO_QUERY);
double fTime = DBTypeConversion::toDouble(aTime);
- sal_Int32 nKey = xTypes->getStandardIndex(rParam.rLocale) + 41; // XXX hack
+ sal_Int32 nKey = xTypes->getFormatIndex(NumberFormatIndex::TIME_HHMMSS, rParam.rLocale);
return rParam.xFormatter->convertNumberToString(nKey, fTime);
}
@@ -256,7 +244,7 @@ void OSQLParseNode::parseNodeToStr(OUString& rString,
parseNodeToStr(
rString, _rxConnection, nullptr, nullptr, OUString(),
pContext ? pContext->getPreferredLocale() : OParseContext::getDefaultLocale(),
- pContext, _bIntl, _bQuote, OUString("."), false );
+ pContext, _bIntl, _bQuote, ".", false );
}
@@ -264,13 +252,13 @@ void OSQLParseNode::parseNodeToPredicateStr(OUString& rString,
const Reference< XConnection >& _rxConnection,
const Reference< XNumberFormatter > & xFormatter,
const css::lang::Locale& rIntl,
- OUString _sDec,
+ const OUString& rDec,
const IParseContext* pContext ) const
{
OSL_ENSURE(xFormatter.is(), "OSQLParseNode::parseNodeToPredicateStr:: no formatter!");
if (xFormatter.is())
- parseNodeToStr(rString, _rxConnection, xFormatter, nullptr, OUString(), rIntl, pContext, true, true, _sDec, true);
+ parseNodeToStr(rString, _rxConnection, xFormatter, nullptr, OUString(), rIntl, pContext, true, true, rDec, true);
}
@@ -280,13 +268,13 @@ void OSQLParseNode::parseNodeToPredicateStr(OUString& rString,
const Reference< XPropertySet > & _xField,
const OUString &_sPredicateTableAlias,
const css::lang::Locale& rIntl,
- OUString _sDec,
+ const OUString& rDec,
const IParseContext* pContext ) const
{
OSL_ENSURE(xFormatter.is(), "OSQLParseNode::parseNodeToPredicateStr:: no formatter!");
if (xFormatter.is())
- parseNodeToStr( rString, _rxConnection, xFormatter, _xField, _sPredicateTableAlias, rIntl, pContext, true, true, _sDec, true );
+ parseNodeToStr( rString, _rxConnection, xFormatter, _xField, _sPredicateTableAlias, rIntl, pContext, true, true, rDec, true );
}
@@ -299,7 +287,7 @@ void OSQLParseNode::parseNodeToStr(OUString& rString,
const IParseContext* pContext,
bool _bIntl,
bool _bQuote,
- OUString _sDecSep,
+ const OUString& _rDecSep,
bool _bPredicate) const
{
OSL_ENSURE( _rxConnection.is(), "OSQLParseNode::parseNodeToStr: invalid connection!" );
@@ -307,13 +295,13 @@ void OSQLParseNode::parseNodeToStr(OUString& rString,
if ( !_rxConnection.is() )
return;
- OUStringBuffer sBuffer = rString;
+ OUStringBuffer sBuffer(rString);
try
{
OSQLParseNode::impl_parseNodeToString_throw( sBuffer,
SQLParseNodeParameter(
_rxConnection, xFormatter, _xField, _sPredicateTableAlias, rIntl, pContext,
- _bIntl, _bQuote, _sDecSep, _bPredicate, false
+ _bIntl, _bQuote, _rDecSep, _bPredicate, false
) );
}
catch( const SQLException& )
@@ -353,7 +341,7 @@ bool OSQLParseNode::parseNodeToExecutableStatement( OUString& _out_rString, cons
|| xMeta->getURL().startsWithIgnoreAsciiCase("sdbc:firebird:")))
{
sLimitValue = pTableExp->getChild(6)->getChild(1)->getTokenValue();
- pTableExp->removeAt(6);
+ delete pTableExp->removeAt(6);
}
_out_rString.clear();
@@ -374,7 +362,7 @@ bool OSQLParseNode::parseNodeToExecutableStatement( OUString& _out_rString, cons
{
constexpr char SELECT_KEYWORD[] = "SELECT";
sBuffer.insert(sBuffer.indexOf(SELECT_KEYWORD) + strlen(SELECT_KEYWORD),
- " FIRST " + sLimitValue);
+ Concat2View(" FIRST " + sLimitValue));
}
_out_rString = sBuffer.makeStringAndClear();
@@ -757,7 +745,7 @@ void OSQLParseNode::impl_parseLikeNodeToString_throw( OUStringBuffer& rString, c
{
OUString aStr = ConvertLikeToken(pParaNode, pEscNode, rParam.bInternational);
rString.append(" ");
- rString.append(SetQuotation(aStr,"\'","\'\'"));
+ rString.append(SetQuotation(aStr, u"\'", u"\'\'"));
}
else
pParaNode->impl_parseNodeToString_throw( rString, aNewParam, false );
@@ -815,7 +803,7 @@ void OSQLParser::killThousandSeparator(OSQLParseNode* pLiteral)
{
if ( pLiteral )
{
- if ( s_xLocaleData->getLocaleItem( m_pData->aLocale ).decimalSeparator.toChar() == ',' )
+ if ( s_xLocaleData.get()->get()->getLocaleItem( m_pData->aLocale ).decimalSeparator.toChar() == ',' )
{
pLiteral->m_aNodeValue = pLiteral->m_aNodeValue.replace('.', sal_Unicode());
// and replace decimal
@@ -823,7 +811,7 @@ void OSQLParser::killThousandSeparator(OSQLParseNode* pLiteral)
}
else
pLiteral->m_aNodeValue = pLiteral->m_aNodeValue.replace(',', sal_Unicode());
- }
+ }
}
OSQLParseNode* OSQLParser::convertNode(sal_Int32 nType, OSQLParseNode* pLiteral)
@@ -1130,7 +1118,7 @@ OUString OSQLParser::stringToDouble(const OUString& _rValue,sal_Int16 _nScale)
OUString aValue;
if(!m_xCharClass.is())
m_xCharClass = CharacterClassification::create( m_xContext );
- if( s_xLocaleData.is() )
+ if( s_xLocaleData.get() )
{
try
{
@@ -1140,8 +1128,9 @@ OUString OSQLParser::stringToDouble(const OUString& _rValue,sal_Int16 _nScale)
aValue = OUString::number(aResult.Value);
sal_Int32 nPos = aValue.lastIndexOf('.');
if((nPos+_nScale) < aValue.getLength())
- aValue = aValue.replaceAt(nPos+_nScale,aValue.getLength()-nPos-_nScale,OUString());
- aValue = aValue.replaceAt(aValue.lastIndexOf('.'),1,s_xLocaleData->getLocaleItem(m_pData->aLocale).decimalSeparator);
+ aValue = aValue.replaceAt(nPos+_nScale,aValue.getLength()-nPos-_nScale, u"");
+ OUString sDecimalSeparator = s_xLocaleData.get()->get()->getLocaleItem(m_pData->aLocale).decimalSeparator;
+ aValue = aValue.replaceAt(aValue.lastIndexOf('.'), 1, sDecimalSeparator);
return aValue;
}
}
@@ -1153,9 +1142,9 @@ OUString OSQLParser::stringToDouble(const OUString& _rValue,sal_Int16 _nScale)
}
-::osl::Mutex& OSQLParser::getMutex()
+std::mutex& OSQLParser::getMutex()
{
- static ::osl::Mutex aMutex;
+ static std::mutex aMutex;
return aMutex;
}
@@ -1166,7 +1155,7 @@ std::unique_ptr<OSQLParseNode> OSQLParser::predicateTree(OUString& rErrorMessage
bool bUseRealName)
{
// Guard the parsing
- ::osl::MutexGuard aGuard(getMutex());
+ std::unique_lock aGuard(getMutex());
// must be reset
setParser(this);
@@ -1259,7 +1248,7 @@ std::unique_ptr<OSQLParseNode> OSQLParser::predicateTree(OUString& rErrorMessage
s_pScanner->SetRule(OSQLScanner::GetSTRINGRule());
break;
default:
- if ( s_xLocaleData->getLocaleItem( m_pData->aLocale ).decimalSeparator.toChar() == ',' )
+ if ( s_xLocaleData.get()->get()->getLocaleItem( m_pData->aLocale ).decimalSeparator.toChar() == ',' )
s_pScanner->SetRule(OSQLScanner::GetGERRule());
else
s_pScanner->SetRule(OSQLScanner::GetENGRule());
@@ -1294,7 +1283,8 @@ std::unique_ptr<OSQLParseNode> OSQLParser::predicateTree(OUString& rErrorMessage
// clear the garbage collector
(*s_pGarbageCollector)->clearAndDelete();
- m_pParseTree.release(); // because the garbage collector deleted it
+ // coverity[leaked_storage : FALSE] - because the garbage collector deleted it
+ m_pParseTree.release();
return nullptr;
}
else
@@ -1316,12 +1306,15 @@ std::unique_ptr<OSQLParseNode> OSQLParser::predicateTree(OUString& rErrorMessage
}
-OSQLParser::OSQLParser(const css::uno::Reference< css::uno::XComponentContext >& rxContext, const IParseContext* _pContext)
+OSQLParser::OSQLParser(css::uno::Reference< css::uno::XComponentContext > xContext,
+ const IParseContext* _pContext,
+ const IParseContext* _pNeutral)
:m_pContext(_pContext)
+ ,m_pNeutral(_pNeutral)
,m_pData( new OSQLParser_Data )
,m_nFormatKey(0)
,m_nDateFormatKey(0)
- ,m_xContext(rxContext)
+ ,m_xContext(std::move(xContext))
{
@@ -1333,7 +1326,7 @@ OSQLParser::OSQLParser(const css::uno::Reference< css::uno::XComponentContext >&
#endif
#endif
- ::osl::MutexGuard aGuard(getMutex());
+ std::unique_lock aGuard(getMutex());
// Do we have to initialize the data?
if (s_nRefCount == 0)
{
@@ -1341,8 +1334,8 @@ OSQLParser::OSQLParser(const css::uno::Reference< css::uno::XComponentContext >&
s_pScanner->setScanner();
s_pGarbageCollector = new OSQLParseNodesGarbageCollector();
- if(!s_xLocaleData.is())
- s_xLocaleData = LocaleData::create(m_xContext);
+ if(!s_xLocaleData.get())
+ s_xLocaleData.set(LocaleData::create(m_xContext));
// reset to UNKNOWN_RULE
static_assert(OSQLParseNode::UNKNOWN_RULE==0, "UNKNOWN_RULE must be 0 for memset to 0 to work");
@@ -1354,109 +1347,109 @@ OSQLParser::OSQLParser(const css::uno::Reference< css::uno::XComponentContext >&
OString sRuleName; // the name of the rule ("select_statement")
} aRuleDescriptions[] =
{
- { OSQLParseNode::select_statement, "select_statement" },
- { OSQLParseNode::table_exp, "table_exp" },
- { OSQLParseNode::table_ref_commalist, "table_ref_commalist" },
- { OSQLParseNode::table_ref, "table_ref" },
- { OSQLParseNode::catalog_name, "catalog_name" },
- { OSQLParseNode::schema_name, "schema_name" },
- { OSQLParseNode::table_name, "table_name" },
- { OSQLParseNode::opt_column_commalist, "opt_column_commalist" },
- { OSQLParseNode::column_commalist, "column_commalist" },
- { OSQLParseNode::column_ref_commalist, "column_ref_commalist" },
- { OSQLParseNode::column_ref, "column_ref" },
- { OSQLParseNode::opt_order_by_clause, "opt_order_by_clause" },
- { OSQLParseNode::ordering_spec_commalist, "ordering_spec_commalist" },
- { OSQLParseNode::ordering_spec, "ordering_spec" },
- { OSQLParseNode::opt_asc_desc, "opt_asc_desc" },
- { OSQLParseNode::where_clause, "where_clause" },
- { OSQLParseNode::opt_where_clause, "opt_where_clause" },
- { OSQLParseNode::search_condition, "search_condition" },
- { OSQLParseNode::comparison, "comparison" },
- { OSQLParseNode::comparison_predicate, "comparison_predicate" },
- { OSQLParseNode::between_predicate, "between_predicate" },
- { OSQLParseNode::like_predicate, "like_predicate" },
- { OSQLParseNode::opt_escape, "opt_escape" },
- { OSQLParseNode::test_for_null, "test_for_null" },
- { OSQLParseNode::scalar_exp_commalist, "scalar_exp_commalist" },
- { OSQLParseNode::scalar_exp, "scalar_exp" },
- { OSQLParseNode::parameter_ref, "parameter_ref" },
- { OSQLParseNode::parameter, "parameter" },
- { OSQLParseNode::general_set_fct, "general_set_fct" },
- { OSQLParseNode::range_variable, "range_variable" },
- { OSQLParseNode::column, "column" },
- { OSQLParseNode::delete_statement_positioned, "delete_statement_positioned" },
- { OSQLParseNode::delete_statement_searched, "delete_statement_searched" },
- { OSQLParseNode::update_statement_positioned, "update_statement_positioned" },
- { OSQLParseNode::update_statement_searched, "update_statement_searched" },
- { OSQLParseNode::assignment_commalist, "assignment_commalist" },
- { OSQLParseNode::assignment, "assignment" },
- { OSQLParseNode::values_or_query_spec, "values_or_query_spec" },
- { OSQLParseNode::insert_statement, "insert_statement" },
- { OSQLParseNode::insert_atom_commalist, "insert_atom_commalist" },
- { OSQLParseNode::insert_atom, "insert_atom" },
- { OSQLParseNode::from_clause, "from_clause" },
- { OSQLParseNode::qualified_join, "qualified_join" },
- { OSQLParseNode::cross_union, "cross_union" },
- { OSQLParseNode::select_sublist, "select_sublist" },
- { OSQLParseNode::derived_column, "derived_column" },
- { OSQLParseNode::column_val, "column_val" },
- { OSQLParseNode::set_fct_spec, "set_fct_spec" },
- { OSQLParseNode::boolean_term, "boolean_term" },
- { OSQLParseNode::boolean_primary, "boolean_primary" },
- { OSQLParseNode::num_value_exp, "num_value_exp" },
- { OSQLParseNode::join_type, "join_type" },
- { OSQLParseNode::position_exp, "position_exp" },
- { OSQLParseNode::extract_exp, "extract_exp" },
- { OSQLParseNode::length_exp, "length_exp" },
- { OSQLParseNode::char_value_fct, "char_value_fct" },
- { OSQLParseNode::odbc_call_spec, "odbc_call_spec" },
- { OSQLParseNode::in_predicate, "in_predicate" },
- { OSQLParseNode::existence_test, "existence_test" },
- { OSQLParseNode::unique_test, "unique_test" },
- { OSQLParseNode::all_or_any_predicate, "all_or_any_predicate" },
- { OSQLParseNode::named_columns_join, "named_columns_join" },
- { OSQLParseNode::join_condition, "join_condition" },
- { OSQLParseNode::joined_table, "joined_table" },
- { OSQLParseNode::boolean_factor, "boolean_factor" },
- { OSQLParseNode::sql_not, "sql_not" },
- { OSQLParseNode::manipulative_statement, "manipulative_statement" },
- { OSQLParseNode::subquery, "subquery" },
- { OSQLParseNode::value_exp_commalist, "value_exp_commalist" },
- { OSQLParseNode::odbc_fct_spec, "odbc_fct_spec" },
- { OSQLParseNode::union_statement, "union_statement" },
- { OSQLParseNode::outer_join_type, "outer_join_type" },
- { OSQLParseNode::char_value_exp, "char_value_exp" },
- { OSQLParseNode::term, "term" },
- { OSQLParseNode::value_exp_primary, "value_exp_primary" },
- { OSQLParseNode::value_exp, "value_exp" },
- { OSQLParseNode::selection, "selection" },
- { OSQLParseNode::fold, "fold" },
- { OSQLParseNode::char_substring_fct, "char_substring_fct" },
- { OSQLParseNode::factor, "factor" },
- { OSQLParseNode::base_table_def, "base_table_def" },
- { OSQLParseNode::base_table_element_commalist, "base_table_element_commalist" },
- { OSQLParseNode::data_type, "data_type" },
- { OSQLParseNode::column_def, "column_def" },
- { OSQLParseNode::table_node, "table_node" },
- { OSQLParseNode::as_clause, "as_clause" },
- { OSQLParseNode::opt_as, "opt_as" },
- { OSQLParseNode::op_column_commalist, "op_column_commalist" },
- { OSQLParseNode::table_primary_as_range_column, "table_primary_as_range_column" },
- { OSQLParseNode::datetime_primary, "datetime_primary" },
- { OSQLParseNode::concatenation, "concatenation" },
- { OSQLParseNode::char_factor, "char_factor" },
- { OSQLParseNode::bit_value_fct, "bit_value_fct" },
- { OSQLParseNode::comparison_predicate_part_2, "comparison_predicate_part_2" },
- { OSQLParseNode::parenthesized_boolean_value_expression, "parenthesized_boolean_value_expression" },
- { OSQLParseNode::character_string_type, "character_string_type" },
- { OSQLParseNode::other_like_predicate_part_2, "other_like_predicate_part_2" },
- { OSQLParseNode::between_predicate_part_2, "between_predicate_part_2" },
- { OSQLParseNode::null_predicate_part_2, "null_predicate_part_2" },
- { OSQLParseNode::cast_spec, "cast_spec" },
- { OSQLParseNode::window_function, "window_function" }
+ { OSQLParseNode::select_statement, "select_statement"_ostr },
+ { OSQLParseNode::table_exp, "table_exp"_ostr },
+ { OSQLParseNode::table_ref_commalist, "table_ref_commalist"_ostr },
+ { OSQLParseNode::table_ref, "table_ref"_ostr },
+ { OSQLParseNode::catalog_name, "catalog_name"_ostr },
+ { OSQLParseNode::schema_name, "schema_name"_ostr },
+ { OSQLParseNode::table_name, "table_name"_ostr },
+ { OSQLParseNode::opt_column_commalist, "opt_column_commalist"_ostr },
+ { OSQLParseNode::column_commalist, "column_commalist"_ostr },
+ { OSQLParseNode::column_ref_commalist, "column_ref_commalist"_ostr },
+ { OSQLParseNode::column_ref, "column_ref"_ostr },
+ { OSQLParseNode::opt_order_by_clause, "opt_order_by_clause"_ostr },
+ { OSQLParseNode::ordering_spec_commalist, "ordering_spec_commalist"_ostr },
+ { OSQLParseNode::ordering_spec, "ordering_spec"_ostr },
+ { OSQLParseNode::opt_asc_desc, "opt_asc_desc"_ostr },
+ { OSQLParseNode::where_clause, "where_clause"_ostr },
+ { OSQLParseNode::opt_where_clause, "opt_where_clause"_ostr },
+ { OSQLParseNode::search_condition, "search_condition"_ostr },
+ { OSQLParseNode::comparison, "comparison"_ostr },
+ { OSQLParseNode::comparison_predicate, "comparison_predicate"_ostr },
+ { OSQLParseNode::between_predicate, "between_predicate"_ostr },
+ { OSQLParseNode::like_predicate, "like_predicate"_ostr },
+ { OSQLParseNode::opt_escape, "opt_escape"_ostr },
+ { OSQLParseNode::test_for_null, "test_for_null"_ostr },
+ { OSQLParseNode::scalar_exp_commalist, "scalar_exp_commalist"_ostr },
+ { OSQLParseNode::scalar_exp, "scalar_exp"_ostr },
+ { OSQLParseNode::parameter_ref, "parameter_ref"_ostr },
+ { OSQLParseNode::parameter, "parameter"_ostr },
+ { OSQLParseNode::general_set_fct, "general_set_fct"_ostr },
+ { OSQLParseNode::range_variable, "range_variable"_ostr },
+ { OSQLParseNode::column, "column"_ostr },
+ { OSQLParseNode::delete_statement_positioned, "delete_statement_positioned"_ostr },
+ { OSQLParseNode::delete_statement_searched, "delete_statement_searched"_ostr },
+ { OSQLParseNode::update_statement_positioned, "update_statement_positioned"_ostr },
+ { OSQLParseNode::update_statement_searched, "update_statement_searched"_ostr },
+ { OSQLParseNode::assignment_commalist, "assignment_commalist"_ostr },
+ { OSQLParseNode::assignment, "assignment"_ostr },
+ { OSQLParseNode::values_or_query_spec, "values_or_query_spec"_ostr },
+ { OSQLParseNode::insert_statement, "insert_statement"_ostr },
+ { OSQLParseNode::insert_atom_commalist, "insert_atom_commalist"_ostr },
+ { OSQLParseNode::insert_atom, "insert_atom"_ostr },
+ { OSQLParseNode::from_clause, "from_clause"_ostr },
+ { OSQLParseNode::qualified_join, "qualified_join"_ostr },
+ { OSQLParseNode::cross_union, "cross_union"_ostr },
+ { OSQLParseNode::select_sublist, "select_sublist"_ostr },
+ { OSQLParseNode::derived_column, "derived_column"_ostr },
+ { OSQLParseNode::column_val, "column_val"_ostr },
+ { OSQLParseNode::set_fct_spec, "set_fct_spec"_ostr },
+ { OSQLParseNode::boolean_term, "boolean_term"_ostr },
+ { OSQLParseNode::boolean_primary, "boolean_primary"_ostr },
+ { OSQLParseNode::num_value_exp, "num_value_exp"_ostr },
+ { OSQLParseNode::join_type, "join_type"_ostr },
+ { OSQLParseNode::position_exp, "position_exp"_ostr },
+ { OSQLParseNode::extract_exp, "extract_exp"_ostr },
+ { OSQLParseNode::length_exp, "length_exp"_ostr },
+ { OSQLParseNode::char_value_fct, "char_value_fct"_ostr },
+ { OSQLParseNode::odbc_call_spec, "odbc_call_spec"_ostr },
+ { OSQLParseNode::in_predicate, "in_predicate"_ostr },
+ { OSQLParseNode::existence_test, "existence_test"_ostr },
+ { OSQLParseNode::unique_test, "unique_test"_ostr },
+ { OSQLParseNode::all_or_any_predicate, "all_or_any_predicate"_ostr },
+ { OSQLParseNode::named_columns_join, "named_columns_join"_ostr },
+ { OSQLParseNode::join_condition, "join_condition"_ostr },
+ { OSQLParseNode::joined_table, "joined_table"_ostr },
+ { OSQLParseNode::boolean_factor, "boolean_factor"_ostr },
+ { OSQLParseNode::sql_not, "sql_not"_ostr },
+ { OSQLParseNode::manipulative_statement, "manipulative_statement"_ostr },
+ { OSQLParseNode::subquery, "subquery"_ostr },
+ { OSQLParseNode::value_exp_commalist, "value_exp_commalist"_ostr },
+ { OSQLParseNode::odbc_fct_spec, "odbc_fct_spec"_ostr },
+ { OSQLParseNode::union_statement, "union_statement"_ostr },
+ { OSQLParseNode::outer_join_type, "outer_join_type"_ostr },
+ { OSQLParseNode::char_value_exp, "char_value_exp"_ostr },
+ { OSQLParseNode::term, "term"_ostr },
+ { OSQLParseNode::value_exp_primary, "value_exp_primary"_ostr },
+ { OSQLParseNode::value_exp, "value_exp"_ostr },
+ { OSQLParseNode::selection, "selection"_ostr },
+ { OSQLParseNode::fold, "fold"_ostr },
+ { OSQLParseNode::char_substring_fct, "char_substring_fct"_ostr },
+ { OSQLParseNode::factor, "factor"_ostr },
+ { OSQLParseNode::base_table_def, "base_table_def"_ostr },
+ { OSQLParseNode::base_table_element_commalist, "base_table_element_commalist"_ostr },
+ { OSQLParseNode::data_type, "data_type"_ostr },
+ { OSQLParseNode::column_def, "column_def"_ostr },
+ { OSQLParseNode::table_node, "table_node"_ostr },
+ { OSQLParseNode::as_clause, "as_clause"_ostr },
+ { OSQLParseNode::opt_as, "opt_as"_ostr },
+ { OSQLParseNode::op_column_commalist, "op_column_commalist"_ostr },
+ { OSQLParseNode::table_primary_as_range_column, "table_primary_as_range_column"_ostr },
+ { OSQLParseNode::datetime_primary, "datetime_primary"_ostr },
+ { OSQLParseNode::concatenation, "concatenation"_ostr },
+ { OSQLParseNode::char_factor, "char_factor"_ostr },
+ { OSQLParseNode::bit_value_fct, "bit_value_fct"_ostr },
+ { OSQLParseNode::comparison_predicate_part_2, "comparison_predicate_part_2"_ostr },
+ { OSQLParseNode::parenthesized_boolean_value_expression, "parenthesized_boolean_value_expression"_ostr },
+ { OSQLParseNode::character_string_type, "character_string_type"_ostr },
+ { OSQLParseNode::other_like_predicate_part_2, "other_like_predicate_part_2"_ostr },
+ { OSQLParseNode::between_predicate_part_2, "between_predicate_part_2"_ostr },
+ { OSQLParseNode::null_predicate_part_2, "null_predicate_part_2"_ostr },
+ { OSQLParseNode::cast_spec, "cast_spec"_ostr },
+ { OSQLParseNode::window_function, "window_function"_ostr }
};
- const size_t nRuleMapCount = SAL_N_ELEMENTS( aRuleDescriptions );
+ const size_t nRuleMapCount = std::size( aRuleDescriptions );
// added a new rule? Adjust this map!
// +1 for UNKNOWN_RULE
static_assert(nRuleMapCount + 1 == static_cast<size_t>(OSQLParseNode::rule_count), "must be equal");
@@ -1483,7 +1476,7 @@ OSQLParser::OSQLParser(const css::uno::Reference< css::uno::XComponentContext >&
OSQLParser::~OSQLParser()
{
- ::osl::MutexGuard aGuard(getMutex());
+ std::unique_lock aGuard(getMutex());
OSL_ENSURE(s_nRefCount > 0, "OSQLParser::~OSQLParser() : suspicious call : has a refcount of 0 !");
if (!--s_nRefCount)
{
@@ -1493,8 +1486,6 @@ OSQLParser::~OSQLParser()
delete s_pGarbageCollector;
s_pGarbageCollector = nullptr;
- // Is only set the first time, so we should delete it only when there are no more instances
- s_xLocaleData = nullptr;
RuleIDMap().swap(s_aReverseRuleIDLookup);
}
@@ -1510,7 +1501,7 @@ void OSQLParseNode::substituteParameterNames(OSQLParseNode const * _pNode)
if(SQL_ISRULE(pChildNode,parameter) && pChildNode->count() > 1)
{
OSQLParseNode* pNewNode = new OSQLParseNode("?" ,SQLNodeType::Punctuation,0);
- delete pChildNode->replace(pChildNode->getChild(0),pNewNode);
+ pChildNode->replaceAndDelete(pChildNode->getChild(0), pNewNode);
sal_Int32 nChildCount = pChildNode->count();
for(sal_Int32 j=1;j < nChildCount;++j)
delete pChildNode->removeAt(1);
@@ -1611,11 +1602,11 @@ OSQLParseNode::OSQLParseNode(std::string_view _rNewValue,
OSL_ENSURE(m_eNodeType >= SQLNodeType::Rule && m_eNodeType <= SQLNodeType::Concat,"OSQLParseNode: created with invalid NodeType");
}
-OSQLParseNode::OSQLParseNode(const OUString &_rNewValue,
+OSQLParseNode::OSQLParseNode(OUString _aNewValue,
SQLNodeType eNewNodeType,
sal_uInt32 nNewNodeID)
:m_pParent(nullptr)
- ,m_aNodeValue(_rNewValue)
+ ,m_aNodeValue(std::move(_aNewValue))
,m_eNodeType(eNewNodeType)
,m_nNodeID(nNewNodeID)
{
@@ -1703,54 +1694,53 @@ void OSQLParseNode::append(OSQLParseNode* pNewNode)
bool OSQLParseNode::addDateValue(OUStringBuffer& rString, const SQLParseNodeParameter& rParam) const
{
// special display for date/time values
- if (SQL_ISRULE(this,set_fct_spec) && SQL_ISPUNCTUATION(m_aChildren[0],"{"))
- {
- const OSQLParseNode* pODBCNode = m_aChildren[1].get();
- const OSQLParseNode* pODBCNodeChild = pODBCNode->m_aChildren[0].get();
+ if (!SQL_ISRULE(this,set_fct_spec) || !SQL_ISPUNCTUATION(m_aChildren[0],"{"))
+ return false;
- if (pODBCNodeChild->getNodeType() == SQLNodeType::Keyword && (
- SQL_ISTOKEN(pODBCNodeChild, D) ||
- SQL_ISTOKEN(pODBCNodeChild, T) ||
- SQL_ISTOKEN(pODBCNodeChild, TS) ))
- {
- OUString suQuote("'");
- if (rParam.bPredicate)
- {
- if (rParam.aMetaData.shouldEscapeDateTime())
- {
- suQuote = "#";
- }
- }
- else
- {
- if (rParam.aMetaData.shouldEscapeDateTime())
- {
- // suQuote = "'";
- return false;
- }
- }
+ const OSQLParseNode* pODBCNode = m_aChildren[1].get();
+ const OSQLParseNode* pODBCNodeChild = pODBCNode->m_aChildren[0].get();
- if (!rString.isEmpty())
- rString.append(" ");
- rString.append(suQuote);
- const OUString sTokenValue = pODBCNode->m_aChildren[1]->getTokenValue();
- if (SQL_ISTOKEN(pODBCNodeChild, D))
- {
- rString.append(rParam.bPredicate ? convertDateString(rParam, sTokenValue) : sTokenValue);
- }
- else if (SQL_ISTOKEN(pODBCNodeChild, T))
- {
- rString.append(rParam.bPredicate ? convertTimeString(rParam, sTokenValue) : sTokenValue);
- }
- else
- {
- rString.append(rParam.bPredicate ? convertDateTimeString(rParam, sTokenValue) : sTokenValue);
- }
- rString.append(suQuote);
- return true;
- }
+ if (pODBCNodeChild->getNodeType() != SQLNodeType::Keyword || !(
+ SQL_ISTOKEN(pODBCNodeChild, D) ||
+ SQL_ISTOKEN(pODBCNodeChild, T) ||
+ SQL_ISTOKEN(pODBCNodeChild, TS) ))
+ return false;
+
+ OUString suQuote("'");
+ if (rParam.bPredicate)
+ {
+ if (rParam.aMetaData.shouldEscapeDateTime())
+ {
+ suQuote = "#";
+ }
}
- return false;
+ else
+ {
+ if (rParam.aMetaData.shouldEscapeDateTime())
+ {
+ // suQuote = "'";
+ return false;
+ }
+ }
+
+ if (!rString.isEmpty())
+ rString.append(" ");
+ rString.append(suQuote);
+ const OUString sTokenValue = pODBCNode->m_aChildren[1]->getTokenValue();
+ if (SQL_ISTOKEN(pODBCNodeChild, D))
+ {
+ rString.append(rParam.bPredicate ? convertDateString(rParam, sTokenValue) : sTokenValue);
+ }
+ else if (SQL_ISTOKEN(pODBCNodeChild, T))
+ {
+ rString.append(rParam.bPredicate ? convertTimeString(rParam, sTokenValue) : sTokenValue);
+ }
+ else
+ {
+ rString.append(rParam.bPredicate ? convertDateTimeString(rParam, sTokenValue) : sTokenValue);
+ }
+ rString.append(suQuote);
+ return true;
}
void OSQLParseNode::replaceNodeValue(const OUString& rTableAlias, const OUString& rColumnName)
@@ -1844,10 +1834,11 @@ void OSQLParseNode::disjunctiveNormalForm(OSQLParseNode*& pSearchCondition)
OSQLParseNode* pNewRight = nullptr;
// cut right from parent
- pSearchCondition->removeAt(2);
+ OSQLParseNode* pOldRight = pSearchCondition->removeAt(2);
+ assert(pOldRight == pRight);
- pNewRight = MakeANDNode(pOr->removeAt(2) ,pRight);
- pNewLeft = MakeANDNode(pOr->removeAt(sal_uInt32(0)) ,new OSQLParseNode(*pRight));
+ pNewRight = MakeANDNode(pOr->removeAt(2), pOldRight);
+ pNewLeft = MakeANDNode(pOr->removeAt(sal_uInt32(0)), new OSQLParseNode(*pOldRight));
pNewNode = MakeORNode(pNewLeft,pNewRight);
// and append new Node
replaceAndReset(pSearchCondition,pNewNode);
@@ -1863,10 +1854,11 @@ void OSQLParseNode::disjunctiveNormalForm(OSQLParseNode*& pSearchCondition)
OSQLParseNode* pNewRight = nullptr;
// cut left from parent
- pSearchCondition->removeAt(sal_uInt32(0));
+ OSQLParseNode* pOldLeft = pSearchCondition->removeAt(sal_uInt32(0));
+ assert(pOldLeft == pLeft);
- pNewRight = MakeANDNode(pLeft,pOr->removeAt(2));
- pNewLeft = MakeANDNode(new OSQLParseNode(*pLeft),pOr->removeAt(sal_uInt32(0)));
+ pNewRight = MakeANDNode(pOldLeft, pOr->removeAt(2));
+ pNewLeft = MakeANDNode(new OSQLParseNode(*pOldLeft), pOr->removeAt(sal_uInt32(0)));
pNewNode = MakeORNode(pNewLeft,pNewRight);
// and append new Node
@@ -1874,9 +1866,9 @@ void OSQLParseNode::disjunctiveNormalForm(OSQLParseNode*& pSearchCondition)
disjunctiveNormalForm(pSearchCondition);
}
else if(SQL_ISRULE(pLeft,boolean_primary) && (!SQL_ISRULE(pLeft->getChild(1),search_condition) || !SQL_ISRULE(pLeft->getChild(1),boolean_term)))
- pSearchCondition->replace(pLeft, pLeft->removeAt(1));
+ pSearchCondition->replaceAndDelete(pLeft, pLeft->removeAt(1));
else if(SQL_ISRULE(pRight,boolean_primary) && (!SQL_ISRULE(pRight->getChild(1),search_condition) || !SQL_ISRULE(pRight->getChild(1),boolean_term)))
- pSearchCondition->replace(pRight, pRight->removeAt(1));
+ pSearchCondition->replaceAndDelete(pRight, pRight->removeAt(1));
}
}
@@ -1963,8 +1955,7 @@ void OSQLParseNode::negateSearchCondition(OSQLParseNode*& pSearchCondition, bool
assert(SQL_ISTOKEN(pNot,NOT));
pNotNot = new OSQLParseNode(OUString(),SQLNodeType::Rule,OSQLParser::RuleID(OSQLParseNode::sql_not));
}
- pComparison->replace(pNot, pNotNot);
- delete pNot;
+ pComparison->replaceAndDelete(pNot, pNotNot);
}
else
{
@@ -1993,8 +1984,7 @@ void OSQLParseNode::negateSearchCondition(OSQLParseNode*& pSearchCondition, bool
pNewComparison = new OSQLParseNode("=",SQLNodeType::Equal,SQL_EQUAL);
break;
}
- pSearchCondition->replace(pComparison, pNewComparison);
- delete pComparison;
+ pSearchCondition->replaceAndDelete(pComparison, pNewComparison);
}
}
@@ -2016,8 +2006,7 @@ void OSQLParseNode::negateSearchCondition(OSQLParseNode*& pSearchCondition, bool
assert(SQL_ISTOKEN(pNot,NOT));
pNotNot = new OSQLParseNode(OUString(),SQLNodeType::Rule,OSQLParser::RuleID(OSQLParseNode::sql_not));
}
- pPart2->replace(pNot, pNotNot);
- delete pNot;
+ pPart2->replaceAndDelete(pNot, pNotNot);
}
else if(bNegate && SQL_ISRULE(pSearchCondition,like_predicate))
{
@@ -2027,8 +2016,7 @@ void OSQLParseNode::negateSearchCondition(OSQLParseNode*& pSearchCondition, bool
pNotNot = new OSQLParseNode("NOT",SQLNodeType::Keyword,SQL_TOKEN_NOT);
else
pNotNot = new OSQLParseNode(OUString(),SQLNodeType::Rule,OSQLParser::RuleID(OSQLParseNode::sql_not));
- pSearchCondition->getChild( 1 )->replace(pNot, pNotNot);
- delete pNot;
+ pSearchCondition->getChild( 1 )->replaceAndDelete(pNot, pNotNot);
}
}
@@ -2364,7 +2352,7 @@ void OSQLParseNode::showParseTree( OUStringBuffer& _inout_rBuffer, sal_uInt32 nL
void OSQLParseNode::insert(sal_uInt32 nPos, OSQLParseNode* pNewSubTree)
{
- OSL_ENSURE(pNewSubTree != nullptr, "OSQLParseNode: invalid NewSubTree");
+ assert(pNewSubTree != nullptr && "OSQLParseNode: invalid NewSubTree");
OSL_ENSURE(pNewSubTree->getParent() == nullptr, "OSQLParseNode: Node is not an orphan");
// Create connection to getParent
@@ -2376,7 +2364,7 @@ void OSQLParseNode::insert(sal_uInt32 nPos, OSQLParseNode* pNewSubTree)
OSQLParseNode* OSQLParseNode::removeAt(sal_uInt32 nPos)
{
- OSL_ENSURE(nPos < m_aChildren.size(),"Illegal position for removeAt");
+ assert(nPos < m_aChildren.size() && "Illegal position for removeAt");
auto aPos(m_aChildren.begin() + nPos);
auto pNode = std::move(*aPos);
@@ -2389,27 +2377,24 @@ OSQLParseNode* OSQLParseNode::removeAt(sal_uInt32 nPos)
// Replace methods
-OSQLParseNode* OSQLParseNode::replace(OSQLParseNode* pOldSubNode, OSQLParseNode* pNewSubNode )
+void OSQLParseNode::replaceAndDelete(OSQLParseNode* pOldSubNode, OSQLParseNode* pNewSubNode )
{
- OSL_ENSURE(pOldSubNode != nullptr && pNewSubNode != nullptr, "OSQLParseNode: invalid nodes");
- OSL_ENSURE(pNewSubNode->getParent() == nullptr, "OSQLParseNode: node already has getParent");
- OSL_ENSURE(std::any_of(m_aChildren.begin(), m_aChildren.end(),
- [&] (std::unique_ptr<OSQLParseNode> const & r) { return r.get() == pOldSubNode; }),
- "OSQLParseNode::Replace() Node not element of parent");
- OSL_ENSURE(std::none_of(m_aChildren.begin(), m_aChildren.end(),
- [&] (std::unique_ptr<OSQLParseNode> const & r) { return r.get() == pNewSubNode; }),
- "OSQLParseNode::Replace() Node already element of parent");
+ assert(pOldSubNode != nullptr && pNewSubNode != nullptr && "OSQLParseNode: invalid nodes");
+ assert(pOldSubNode != pNewSubNode && "OSQLParseNode: same node");
+ assert(pNewSubNode->getParent() == nullptr && "OSQLParseNode: node already has getParent");
+ assert(std::any_of(m_aChildren.begin(), m_aChildren.end(),
+ [&] (std::unique_ptr<OSQLParseNode> const & r) { return r.get() == pOldSubNode; })
+ && "OSQLParseNode::Replace() Node not element of parent");
+ assert(std::none_of(m_aChildren.begin(), m_aChildren.end(),
+ [&] (std::unique_ptr<OSQLParseNode> const & r) { return r.get() == pNewSubNode; })
+ && "OSQLParseNode::Replace() Node already element of parent");
pOldSubNode->setParent( nullptr );
pNewSubNode->setParent( this );
auto it = std::find_if(m_aChildren.begin(), m_aChildren.end(),
[&pOldSubNode](const std::unique_ptr<OSQLParseNode>& rxChild) { return rxChild.get() == pOldSubNode; });
- if (it != m_aChildren.end())
- {
- it->release();
- it->reset(pNewSubNode);
- }
- return pOldSubNode;
+ assert(it != m_aChildren.end());
+ it->reset(pNewSubNode);
}
void OSQLParseNode::parseLeaf(OUStringBuffer& rString, const SQLParseNodeParameter& rParam) const
@@ -2429,7 +2414,7 @@ void OSQLParseNode::parseLeaf(OUStringBuffer& rString, const SQLParseNodeParamet
case SQLNodeType::String:
if (!rString.isEmpty())
rString.append(" ");
- rString.append(SetQuotation(m_aNodeValue,"\'","\'\'"));
+ rString.append(SetQuotation(m_aNodeValue, u"\'", u"\'\'"));
break;
case SQLNodeType::Name:
if (!rString.isEmpty())
@@ -2473,7 +2458,7 @@ void OSQLParseNode::parseLeaf(OUStringBuffer& rString, const SQLParseNodeParamet
case SQLNodeType::ApproxNum:
{
OUString aTmp = m_aNodeValue;
- static OUString strPoint(".");
+ static constexpr OUString strPoint(u"."_ustr);
if (rParam.bInternational && rParam.bPredicate && rParam.sDecSep != strPoint)
aTmp = aTmp.replaceAll(strPoint, rParam.sDecSep);
@@ -2511,7 +2496,7 @@ void OSQLParseNode::parseLeaf(OUStringBuffer& rString, const SQLParseNodeParamet
sal_Int32 OSQLParser::getFunctionReturnType(std::u16string_view _sFunctionName, const IParseContext* pContext)
{
- sal_Int32 nType = DataType::VARCHAR;
+ sal_Int32 nType = DataType::SQLNULL;
OString sFunctionName(OUStringToOString(_sFunctionName,RTL_TEXTENCODING_UTF8));
if(sFunctionName.equalsIgnoreAsciiCase(TokenIDToStr(SQL_TOKEN_ASCII,pContext))) nType = DataType::INTEGER;
@@ -2748,13 +2733,13 @@ OSQLParseNodesContainer::~OSQLParseNodesContainer()
void OSQLParseNodesContainer::push_back(OSQLParseNode* _pNode)
{
- ::osl::MutexGuard aGuard(m_aMutex);
+ std::unique_lock aGuard(m_aMutex);
m_aNodes.push_back(_pNode);
}
void OSQLParseNodesContainer::erase(OSQLParseNode* _pNode)
{
- ::osl::MutexGuard aGuard(m_aMutex);
+ std::unique_lock aGuard(m_aMutex);
if ( !m_aNodes.empty() )
{
std::vector< OSQLParseNode* >::iterator aFind = std::find(m_aNodes.begin(), m_aNodes.end(),_pNode);
@@ -2765,13 +2750,13 @@ void OSQLParseNodesContainer::erase(OSQLParseNode* _pNode)
void OSQLParseNodesContainer::clear()
{
- ::osl::MutexGuard aGuard(m_aMutex);
+ std::unique_lock aGuard(m_aMutex);
m_aNodes.clear();
}
void OSQLParseNodesContainer::clearAndDelete()
{
- ::osl::MutexGuard aGuard(m_aMutex);
+ std::unique_lock aGuard(m_aMutex);
// clear the garbage collector
while ( !m_aNodes.empty() )
{
@@ -2780,7 +2765,9 @@ void OSQLParseNodesContainer::clearAndDelete()
{
pNode = pNode->getParent();
}
+ aGuard.unlock(); // can call back into this object during destruction
delete pNode;
+ aGuard.lock();
}
}
} // namespace connectivity
diff --git a/connectivity/source/resource/sharedresources.cxx b/connectivity/source/resource/sharedresources.cxx
index 3f7062f6be52..cc6f65e64541 100644
--- a/connectivity/source/resource/sharedresources.cxx
+++ b/connectivity/source/resource/sharedresources.cxx
@@ -44,7 +44,7 @@ namespace connectivity
static SharedResources_Impl&
getInstance();
- OUString getResourceString(const char* pId);
+ OUString getResourceString(TranslateId pId) const;
private:
SharedResources_Impl();
@@ -66,7 +66,7 @@ namespace connectivity
{
}
- OUString SharedResources_Impl::getResourceString(const char* pId)
+ OUString SharedResources_Impl::getResourceString(TranslateId pId) const
{
return Translate::get(pId, m_aLocale);
}
@@ -100,20 +100,13 @@ namespace connectivity
namespace
{
- size_t lcl_substitute( OUString& _inout_rString,
- const char* _pAsciiPattern, const OUString& _rReplace )
+ bool lcl_substitute( OUString& _inout_rString,
+ const char* _pAsciiPattern, std::u16string_view _rReplace )
{
- size_t nOccurrences = 0;
-
+ OUString oldString = _inout_rString;
OUString sPattern( OUString::createFromAscii( _pAsciiPattern ) );
- sal_Int32 nIndex = 0;
- while ( ( nIndex = _inout_rString.indexOf( sPattern ) ) > -1 )
- {
- ++nOccurrences;
- _inout_rString = _inout_rString.replaceAt( nIndex, sPattern.getLength(), _rReplace );
- }
-
- return nOccurrences;
+ _inout_rString = _inout_rString.replaceAll(sPattern, _rReplace);
+ return oldString != _inout_rString;
}
}
@@ -129,13 +122,13 @@ namespace connectivity
}
- OUString SharedResources::getResourceString(const char* pResId) const
+ OUString SharedResources::getResourceString(TranslateId pResId) const
{
return SharedResources_Impl::getInstance().getResourceString(pResId);
}
- OUString SharedResources::getResourceStringWithSubstitution(const char* pResId,
+ OUString SharedResources::getResourceStringWithSubstitution(TranslateId pResId,
const char* _pAsciiPatternToReplace, const OUString& _rStringToSubstitute ) const
{
OUString sString( SharedResources_Impl::getInstance().getResourceString(pResId) );
@@ -145,7 +138,7 @@ namespace connectivity
}
- OUString SharedResources::getResourceStringWithSubstitution(const char* pResId,
+ OUString SharedResources::getResourceStringWithSubstitution(TranslateId pResId,
const char* _pAsciiPatternToReplace1, const OUString& _rStringToSubstitute1,
const char* _pAsciiPatternToReplace2, const OUString& _rStringToSubstitute2 ) const
{
@@ -158,7 +151,7 @@ namespace connectivity
}
- OUString SharedResources::getResourceStringWithSubstitution(const char* pResId,
+ OUString SharedResources::getResourceStringWithSubstitution(TranslateId pResId,
const char* _pAsciiPatternToReplace1, const OUString& _rStringToSubstitute1,
const char* _pAsciiPatternToReplace2, const OUString& _rStringToSubstitute2,
const char* _pAsciiPatternToReplace3, const OUString& _rStringToSubstitute3 ) const
@@ -173,7 +166,7 @@ namespace connectivity
return sString;
}
- OUString SharedResources::getResourceStringWithSubstitution(const char* pResId,
+ OUString SharedResources::getResourceStringWithSubstitution(TranslateId pResId,
const std::vector< std::pair<const char* , OUString > >& _rStringToSubstitutes) const
{
OUString sString( SharedResources_Impl::getInstance().getResourceString(pResId) );
diff --git a/connectivity/source/sdbcx/VCollection.cxx b/connectivity/source/sdbcx/VCollection.cxx
index c7f8e0ba9ff0..0fa6cace50e0 100644
--- a/connectivity/source/sdbcx/VCollection.cxx
+++ b/connectivity/source/sdbcx/VCollection.cxx
@@ -302,7 +302,7 @@ Any SAL_CALL OCollection::getByIndex( sal_Int32 Index )
if (Index < 0 || Index >= m_pElements->size() )
throw IndexOutOfBoundsException(OUString::number(Index),static_cast<XTypeProvider*>(this));
- return makeAny(getObject(Index));
+ return Any(getObject(Index));
}
Any SAL_CALL OCollection::getByName( const OUString& aName )
@@ -319,7 +319,7 @@ Any SAL_CALL OCollection::getByName( const OUString& aName )
throw NoSuchElementException( sError, static_cast< XTypeProvider* >( this ) );
}
- return makeAny(getObject(m_pElements->findColumn(aName)));
+ return Any(getObject(m_pElements->findColumn(aName)));
}
Sequence< OUString > SAL_CALL OCollection::getElementNames( )
@@ -374,7 +374,7 @@ void SAL_CALL OCollection::appendByDescriptor( const Reference< XPropertySet >&
if ( !xNewlyCreated.is() )
throw RuntimeException();
- ODescriptor* pDescriptor = comphelper::getUnoTunnelImplementation<ODescriptor>( xNewlyCreated );
+ ODescriptor* pDescriptor = dynamic_cast<ODescriptor*>( xNewlyCreated.get() );
if ( pDescriptor )
pDescriptor->setNew( false );
@@ -383,7 +383,7 @@ void SAL_CALL OCollection::appendByDescriptor( const Reference< XPropertySet >&
m_pElements->insert( sName, xNewlyCreated );
// notify our container listeners
- ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(sName), makeAny(xNewlyCreated), Any());
+ ContainerEvent aEvent(static_cast<XContainer*>(this), Any(sName), Any(xNewlyCreated), Any());
aGuard.clear();
m_aContainerListeners.notifyEach( &XContainerListener::elementInserted, aEvent );
}
@@ -423,11 +423,11 @@ void OCollection::dropImpl(sal_Int32 _nIndex, bool _bReallyDrop)
void OCollection::notifyElementRemoved(const OUString& _sName)
{
- ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_sName), Any(), Any());
+ ContainerEvent aEvent(static_cast<XContainer*>(this), Any(_sName), Any(), Any());
// note that xExistent may be empty, in case somebody removed the data source while it is not alive at this moment
- OInterfaceIteratorHelper2 aListenerLoop(m_aContainerListeners);
+ OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners);
while (aListenerLoop.hasMoreElements())
- static_cast<XContainerListener*>(aListenerLoop.next())->elementRemoved(aEvent);
+ aListenerLoop.next()->elementRemoved(aEvent);
}
sal_Int32 SAL_CALL OCollection::findColumn( const OUString& columnName )
@@ -517,11 +517,11 @@ void OCollection::renameObject(const OUString& _sOldName, const OUString& _sNewN
if ( m_pElements->rename(_sOldName,_sNewName) )
{
- ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_sNewName), makeAny(m_pElements->getObject(_sNewName)),makeAny(_sOldName));
+ ContainerEvent aEvent(static_cast<XContainer*>(this), Any(_sNewName), Any(m_pElements->getObject(_sNewName)),Any(_sOldName));
// note that xExistent may be empty, in case somebody removed the data source while it is not alive at this moment
- OInterfaceIteratorHelper2 aListenerLoop(m_aContainerListeners);
+ OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners);
while (aListenerLoop.hasMoreElements())
- static_cast<XContainerListener*>(aListenerLoop.next())->elementReplaced(aEvent);
+ aListenerLoop.next()->elementReplaced(aEvent);
}
}
diff --git a/connectivity/source/sdbcx/VColumn.cxx b/connectivity/source/sdbcx/VColumn.cxx
index 398d64b49f57..ad9a52ed12ed 100644
--- a/connectivity/source/sdbcx/VColumn.cxx
+++ b/connectivity/source/sdbcx/VColumn.cxx
@@ -23,6 +23,7 @@
#include <cppuhelper/supportsservice.hxx>
#include <TConnection.hxx>
#include <com/sun/star/sdbc/ColumnValue.hpp>
+#include <utility>
using namespace connectivity;
using namespace connectivity::sdbcx;
@@ -65,9 +66,9 @@ OColumn::OColumn(bool _bCase)
}
OColumn::OColumn( const OUString& Name,
- const OUString& TypeName,
- const OUString& DefaultValue,
- const OUString& Description,
+ OUString TypeName,
+ OUString DefaultValue,
+ OUString Description,
sal_Int32 IsNullable,
sal_Int32 Precision,
sal_Int32 Scale,
@@ -76,14 +77,14 @@ OColumn::OColumn( const OUString& Name,
bool IsRowVersion,
bool IsCurrency,
bool _bCase,
- const OUString& CatalogName,
- const OUString& SchemaName,
- const OUString& TableName)
+ OUString CatalogName,
+ OUString SchemaName,
+ OUString TableName)
:OColumnDescriptor_BASE(m_aMutex)
,ODescriptor(OColumnDescriptor_BASE::rBHelper,_bCase)
- ,m_TypeName(TypeName)
- ,m_Description(Description)
- ,m_DefaultValue(DefaultValue)
+ ,m_TypeName(std::move(TypeName))
+ ,m_Description(std::move(Description))
+ ,m_DefaultValue(std::move(DefaultValue))
,m_IsNullable(IsNullable)
,m_Precision(Precision)
,m_Scale(Scale)
@@ -91,9 +92,9 @@ OColumn::OColumn( const OUString& Name,
,m_IsAutoIncrement(IsAutoIncrement)
,m_IsRowVersion(IsRowVersion)
,m_IsCurrency(IsCurrency)
- ,m_CatalogName(CatalogName)
- ,m_SchemaName(SchemaName)
- ,m_TableName(TableName)
+ ,m_CatalogName(std::move(CatalogName))
+ ,m_SchemaName(std::move(SchemaName))
+ ,m_TableName(std::move(TableName))
{
m_Name = Name;
@@ -169,10 +170,6 @@ void OColumn::construct()
void OColumn::disposing()
{
OPropertySetHelper::disposing();
-
- ::osl::MutexGuard aGuard(m_aMutex);
- checkDisposed(OColumnDescriptor_BASE::rBHelper.bDisposed);
-
}
Reference< XPropertySet > SAL_CALL OColumn::createDataDescriptor( )
diff --git a/connectivity/source/sdbcx/VDescriptor.cxx b/connectivity/source/sdbcx/VDescriptor.cxx
index 8a32a1b58b39..d6ceabc96837 100644
--- a/connectivity/source/sdbcx/VDescriptor.cxx
+++ b/connectivity/source/sdbcx/VDescriptor.cxx
@@ -28,7 +28,6 @@
namespace connectivity::sdbcx
{
using namespace ::com::sun::star::uno;
- using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::beans;
@@ -44,14 +43,6 @@ namespace connectivity::sdbcx
// css::lang::XUnoTunnel
- sal_Int64 SAL_CALL ODescriptor::getSomething( const Sequence< sal_Int8 >& rId )
- {
- return (isUnoTunnelId<ODescriptor>(rId))
- ? reinterpret_cast< sal_Int64 >( this )
- : 0;
- }
-
-
namespace
{
struct ResetROAttribute
@@ -76,10 +67,11 @@ namespace connectivity::sdbcx
Sequence< Property > aProperties;
describeProperties( aProperties );
+ auto [begin, end] = asNonConstRange(aProperties);
if ( isNew() )
- std::for_each( aProperties.begin(), aProperties.end(), ResetROAttribute() );
+ std::for_each( begin, end, ResetROAttribute() );
else
- std::for_each( aProperties.begin(), aProperties.end(), SetROAttribute() );
+ std::for_each( begin, end, SetROAttribute() );
return new ::cppu::OPropertyArrayHelper( aProperties );
}
@@ -87,26 +79,11 @@ namespace connectivity::sdbcx
bool ODescriptor::isNew( const Reference< XInterface >& _rxDescriptor )
{
- ODescriptor* pImplementation = comphelper::getUnoTunnelImplementation<ODescriptor>( _rxDescriptor );
+ ODescriptor* pImplementation = dynamic_cast<ODescriptor*>( _rxDescriptor.get() );
return pImplementation && pImplementation->isNew();
}
- Sequence< sal_Int8 > ODescriptor::getUnoTunnelId()
- {
- static ::cppu::OImplementationId implId;
-
- return implId.getImplementationId();
- }
-
-
- Any SAL_CALL ODescriptor::queryInterface( const Type & rType )
- {
- Any aRet = ::cppu::queryInterface(rType,static_cast< XUnoTunnel*> (this));
- return aRet.hasValue() ? aRet : ODescriptor_PBASE::queryInterface(rType);
- }
-
-
void ODescriptor::setNew(bool _bNew)
{
m_bNew = _bNew;
@@ -117,8 +94,7 @@ namespace connectivity::sdbcx
{
::cppu::OTypeCollection aTypes( cppu::UnoType<XMultiPropertySet>::get(),
cppu::UnoType<XFastPropertySet>::get(),
- cppu::UnoType<XPropertySet>::get(),
- cppu::UnoType<XUnoTunnel>::get());
+ cppu::UnoType<XPropertySet>::get());
return aTypes.getTypes();
}
diff --git a/connectivity/source/sdbcx/VGroup.cxx b/connectivity/source/sdbcx/VGroup.cxx
index 73f6aa79c5ab..7a37ea3e523d 100644
--- a/connectivity/source/sdbcx/VGroup.cxx
+++ b/connectivity/source/sdbcx/VGroup.cxx
@@ -26,7 +26,6 @@
using namespace ::connectivity::sdbcx;
using namespace ::connectivity;
using namespace ::dbtools;
-using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::container;
using namespace ::com::sun::star::lang;
diff --git a/connectivity/source/sdbcx/VIndex.cxx b/connectivity/source/sdbcx/VIndex.cxx
index e04cf2527791..48e26ae1140e 100644
--- a/connectivity/source/sdbcx/VIndex.cxx
+++ b/connectivity/source/sdbcx/VIndex.cxx
@@ -24,7 +24,8 @@
#include <connectivity/sdbcx/VCollection.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <TConnection.hxx>
-#include <tools/diagnose_ex.h>
+#include <utility>
+#include <comphelper/diagnose_ex.hxx>
using namespace ::connectivity;
using namespace ::dbtools;
@@ -32,7 +33,6 @@ using namespace ::connectivity::sdbcx;
using namespace ::cppu;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::container;
using namespace ::com::sun::star::lang;
@@ -64,13 +64,13 @@ OIndex::OIndex(bool _bCase) : ODescriptor_BASE(m_aMutex)
}
OIndex::OIndex( const OUString& Name,
- const OUString& Catalog,
+ OUString Catalog,
bool _isUnique,
bool _isPrimaryKeyIndex,
bool _isClustered,
bool _bCase) : ODescriptor_BASE(m_aMutex)
,ODescriptor(ODescriptor_BASE::rBHelper, _bCase)
- ,m_Catalog(Catalog)
+ ,m_Catalog(std::move(Catalog))
,m_IsUnique(_isUnique)
,m_IsPrimaryKeyIndex(_isPrimaryKeyIndex)
,m_IsClustered(_isClustered)
diff --git a/connectivity/source/sdbcx/VKey.cxx b/connectivity/source/sdbcx/VKey.cxx
index f267db161504..140bd6160709 100644
--- a/connectivity/source/sdbcx/VKey.cxx
+++ b/connectivity/source/sdbcx/VKey.cxx
@@ -24,12 +24,12 @@
#include <cppuhelper/supportsservice.hxx>
#include <connectivity/sdbcx/VCollection.hxx>
#include <TConnection.hxx>
+#include <utility>
using namespace connectivity;
using namespace connectivity::sdbcx;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::container;
using namespace ::com::sun::star::lang;
@@ -58,10 +58,10 @@ OKey::OKey(bool _bCase) : ODescriptor_BASE(m_aMutex)
{
}
-OKey::OKey(const OUString& Name,const std::shared_ptr<KeyProperties>& _rProps, bool _bCase)
+OKey::OKey(const OUString& Name,std::shared_ptr<KeyProperties> _xProps, bool _bCase)
: ODescriptor_BASE(m_aMutex)
,ODescriptor(ODescriptor_BASE::rBHelper, _bCase)
- ,m_aProps(_rProps)
+ ,m_aProps(std::move(_xProps))
{
m_Name = Name;
}
diff --git a/connectivity/source/sdbcx/VKeyColumn.cxx b/connectivity/source/sdbcx/VKeyColumn.cxx
index b6f69e65c9de..e22620fb599d 100644
--- a/connectivity/source/sdbcx/VKeyColumn.cxx
+++ b/connectivity/source/sdbcx/VKeyColumn.cxx
@@ -21,6 +21,7 @@
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <cppuhelper/supportsservice.hxx>
#include <TConnection.hxx>
+#include <utility>
using namespace connectivity;
using namespace connectivity::sdbcx;
@@ -50,7 +51,7 @@ OKeyColumn::OKeyColumn(bool _bCase) : OColumn(_bCase)
construct();
}
-OKeyColumn::OKeyColumn( const OUString& ReferencedColumn,
+OKeyColumn::OKeyColumn( OUString ReferencedColumn,
const OUString& Name,
const OUString& TypeName,
const OUString& DefaultValue,
@@ -77,7 +78,7 @@ OKeyColumn::OKeyColumn( const OUString& ReferencedColumn,
CatalogName,
SchemaName,
TableName)
- , m_ReferencedColumn(ReferencedColumn)
+ , m_ReferencedColumn(std::move(ReferencedColumn))
{
construct();
}
diff --git a/connectivity/source/sdbcx/VTable.cxx b/connectivity/source/sdbcx/VTable.cxx
index 98e2767259f7..f569d01baef3 100644
--- a/connectivity/source/sdbcx/VTable.cxx
+++ b/connectivity/source/sdbcx/VTable.cxx
@@ -25,6 +25,7 @@
#include <connectivity/dbtools.hxx>
#include <connectivity/dbexception.hxx>
#include <cppuhelper/supportsservice.hxx>
+#include <utility>
using namespace ::connectivity;
using namespace ::connectivity::sdbcx;
@@ -65,14 +66,14 @@ OTable::OTable(OCollection* _pTables,
OTable::OTable( OCollection* _pTables,
bool _bCase,
- const OUString& Name, const OUString& Type,
- const OUString& Description,const OUString& SchemaName,
- const OUString& CatalogName) : OTableDescriptor_BASE(m_aMutex)
+ const OUString& Name, OUString Type,
+ OUString Description, OUString SchemaName,
+ OUString CatalogName) : OTableDescriptor_BASE(m_aMutex)
,ODescriptor(OTableDescriptor_BASE::rBHelper,_bCase)
- ,m_CatalogName(CatalogName)
- ,m_SchemaName(SchemaName)
- ,m_Description(Description)
- ,m_Type(Type)
+ ,m_CatalogName(std::move(CatalogName))
+ ,m_SchemaName(std::move(SchemaName))
+ ,m_Description(std::move(Description))
+ ,m_Type(std::move(Type))
,m_pTables(_pTables)
{
m_Name = Name;
@@ -164,7 +165,7 @@ Reference< XNameAccess > SAL_CALL OTable::getColumns( )
// allowed
}
- return m_xColumns;
+ return m_xColumns.get();
}
@@ -236,7 +237,7 @@ Reference< XNameAccess > SAL_CALL OTable::getIndexes( )
// allowed
}
- return m_xIndexes;
+ return m_xIndexes.get();
}
// XRename
diff --git a/connectivity/source/sdbcx/VUser.cxx b/connectivity/source/sdbcx/VUser.cxx
index a09d82183682..85d09523c864 100644
--- a/connectivity/source/sdbcx/VUser.cxx
+++ b/connectivity/source/sdbcx/VUser.cxx
@@ -22,11 +22,11 @@
#include <connectivity/sdbcx/VCollection.hxx>
#include <connectivity/dbexception.hxx>
#include <comphelper/sequence.hxx>
+#include <o3tl/unreachable.hxx>
using namespace connectivity;
using namespace connectivity::sdbcx;
-using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::container;
@@ -113,15 +113,12 @@ Reference< XNameAccess > SAL_CALL OUser::getGroups( )
return m_pGroups.get();
}
-
-SAL_WNOUNREACHABLE_CODE_PUSH
-
sal_Int32 SAL_CALL OUser::getPrivileges( const OUString& /*objName*/, sal_Int32 /*objType*/ )
{
::osl::MutexGuard aGuard(m_aMutex);
checkDisposed(OUser_BASE::rBHelper.bDisposed);
::dbtools::throwFeatureNotImplementedSQLException( "XAuthorizable::changePassword", *this );
- return 0;
+ O3TL_UNREACHABLE;
}
sal_Int32 SAL_CALL OUser::getGrantablePrivileges( const OUString& /*objName*/, sal_Int32 /*objType*/ )
@@ -129,12 +126,9 @@ sal_Int32 SAL_CALL OUser::getGrantablePrivileges( const OUString& /*objName*/, s
::osl::MutexGuard aGuard(m_aMutex);
checkDisposed(OUser_BASE::rBHelper.bDisposed);
::dbtools::throwFeatureNotImplementedSQLException( "XAuthorizable::getGrantablePrivileges", *this );
- return 0;
+ O3TL_UNREACHABLE;
}
-SAL_WNOUNREACHABLE_CODE_POP
-
-
void SAL_CALL OUser::grantPrivileges( const OUString& /*objName*/, sal_Int32 /*objType*/, sal_Int32 /*objPrivileges*/ )
{
::osl::MutexGuard aGuard(m_aMutex);
diff --git a/connectivity/source/sdbcx/VView.cxx b/connectivity/source/sdbcx/VView.cxx
index b36817a40f3d..41828b5758cb 100644
--- a/connectivity/source/sdbcx/VView.cxx
+++ b/connectivity/source/sdbcx/VView.cxx
@@ -22,13 +22,13 @@
#include <comphelper/sequence.hxx>
#include <connectivity/dbtools.hxx>
#include <TConnection.hxx>
+#include <utility>
using namespace connectivity;
using namespace connectivity::sdbcx;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::sdbcx;
using namespace ::com::sun::star::container;
using namespace ::com::sun::star::lang;
@@ -36,24 +36,24 @@ IMPLEMENT_SERVICE_INFO(OView,"com.sun.star.sdbcx.VView","com.sun.star.sdbcx.View
OView::OView(bool _bCase,
const OUString& Name,
- const css::uno::Reference< css::sdbc::XDatabaseMetaData >& _xMetaData,
- const OUString& Command,
- const OUString& SchemaName,
- const OUString& CatalogName) : ODescriptor(::comphelper::OMutexAndBroadcastHelper::m_aBHelper,_bCase)
- ,m_CatalogName(CatalogName)
- ,m_SchemaName(SchemaName)
- ,m_Command(Command)
+ css::uno::Reference< css::sdbc::XDatabaseMetaData > _xMetaData,
+ OUString Command,
+ OUString SchemaName,
+ OUString CatalogName) : ODescriptor(::comphelper::OMutexAndBroadcastHelper::m_aBHelper,_bCase)
+ ,m_CatalogName(std::move(CatalogName))
+ ,m_SchemaName(std::move(SchemaName))
+ ,m_Command(std::move(Command))
,m_CheckOption(0)
- ,m_xMetaData(_xMetaData)
+ ,m_xMetaData(std::move(_xMetaData))
{
m_Name = Name;
construct();
}
-OView::OView(bool _bCase, const css::uno::Reference< css::sdbc::XDatabaseMetaData >& _xMetaData)
+OView::OView(bool _bCase, css::uno::Reference< css::sdbc::XDatabaseMetaData > _xMetaData)
: ODescriptor(::comphelper::OMutexAndBroadcastHelper::m_aBHelper, _bCase, true)
- ,m_xMetaData(_xMetaData)
+ ,m_xMetaData(std::move(_xMetaData))
{
construct();
}