13 #include <com/sun/star/sdb/DatabaseContext.hpp>
14 #include <com/sun/star/sdb/XCompletedConnection.hpp>
15 #include <com/sun/star/task/InteractionHandler.hpp>
16 #include <com/sun/star/sdbc/XRow.hpp>
17 #include <com/sun/star/sdbc/XResultSetMetaDataSupplier.hpp>
18 #include <com/sun/star/sdbc/XResultSetMetaData.hpp>
23 #include <osl/diagnose.h>
42 const std::vector<std::shared_ptr<sc::DataTransformation>>& rTransformations);
44 virtual void execute()
override;
47 SQLFetchThread::SQLFetchThread(
48 ScDocument& rDoc,
const OUString& rID, std::function<
void()> aImportFinishedHdl,
49 const std::vector<std::shared_ptr<sc::DataTransformation>>& rTransformations)
53 , maDataTransformations(rTransformations)
54 , maImportFinishedHdl(aImportFinishedHdl)
60 sal_Int32
nIndex = maID.indexOf(
"@");
64 OUString aTable = maID.copy(0, nIndex);
65 OUString aDatabase = maID.copy(nIndex + 1);
69 uno::Reference<sdb::XDatabaseContext> xContext
71 uno::Any aSourceAny = xContext->getByName(aDatabase);
73 uno::Reference<sdb::XCompletedConnection> xSource(aSourceAny, uno::UNO_QUERY);
77 uno::Reference<task::XInteractionHandler> xHandler(
80 uno::UNO_QUERY_THROW);
82 uno::Reference<sdbc::XConnection> xConnection = xSource->connectWithCompletion(xHandler);
84 uno::Reference<sdbc::XStatement> xStatement = xConnection->createStatement();
86 uno::Reference<sdbc::XResultSet> xResult
87 = xStatement->executeQuery(
"SELECT * FROM " + aTable);
91 Reference<sdbc::XResultSetMetaDataSupplier> xMetaDataSupplier(xResult, UNO_QUERY);
95 Reference<XRow>
xRow(xResult, UNO_QUERY);
97 SCCOL nColCount =
static_cast<SCCOL>(xMetaData->getColumnCount());
99 while (xResult->next())
101 SCROW nRow =
static_cast<SCROW>(xResult->getRow());
103 for (
SCCOL nCol = 0; nCol < nColCount; nCol++)
106 xMetaData->getColumnType(nCol + 1),
false);
111 catch (uno::Exception&)
116 for (
auto& itr : maDataTransformations)
118 itr->Transform(mrDocument);
const std::vector< std::shared_ptr< sc::DataTransformation > > maDataTransformations
sc::ExternalDataSource & mrDataSource
virtual void execute() override
rtl::Reference< SQLFetchThread > mxSQLFetchThread
Abstract class for all data provider.
virtual ~SQLDataProvider() override
bool mbDeterministic
If true make the threaded import deterministic for the tests.
virtual void Import() override
uno::Reference< sdbc::XRow > xRow
void WriteToDoc(ScDocument &rDoc)
ScDocumentUniquePtr mpDoc
#define TOOLS_WARN_EXCEPTION(area, stream)
std::function< void()> maImportFinishedHdl
const OUString & getURL() const
ScDBDataManager * getDBManager()
virtual const OUString & GetURL() const override
Reference< XComponentContext > getProcessComponentContext()
SQLDataProvider(ScDocument *pDoc, sc::ExternalDataSource &rDataSource)
const std::vector< std::shared_ptr< sc::DataTransformation > > & getDataTransformation() const
const OUString & getID() const
static void PutData(ScDocument &rDoc, SCCOL nCol, SCROW nRow, SCTAB nTab, const css::uno::Reference< css::sdbc::XRow > &xRow, sal_Int32 nRowPos, tools::Long nType, bool bCurrency, StrData *pStrData=nullptr)