1
0
Fork 0
libreoffice/dbaccess/source/ui/inc/DExport.hxx
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

162 lines
7 KiB
C++

/* -*- 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 <sal/config.h>
#include <com/sun/star/sdbc/SQLException.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/util/XNumberFormatter.hpp>
#include <com/sun/star/container/XNameAccess.hpp>
#include <com/sun/star/lang/Locale.hpp>
#include <com/sun/star/util/Date.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <map>
#include <vector>
#include <comphelper/stl_types.hxx>
#include "TypeInfo.hxx"
#include "WTypeSelect.hxx"
#include "commontypes.hxx"
#include "IUpdateHelper.hxx"
namespace com::sun::star {
namespace awt{
struct FontDescriptor;
}
namespace sdbc{
class XPreparedStatement;
class XDatabaseMetaData;
}
}
#define COLUMN_POSITION_NOT_FOUND (sal_Int32(-1))
class SvNumberFormatter;
namespace dbaui
{
class OFieldDescription;
class ODatabaseExport
{
public:
typedef std::map<OUString, OFieldDescription*, ::comphelper::UStringMixLess> TColumns;
typedef std::vector<TColumns::const_iterator> TColumnVector;
typedef std::vector< std::pair<sal_Int32,sal_Int32> > TPositions;
protected:
TPositions m_vColumnPositions; ///< columns to be used
std::vector<sal_Int32> m_vColumnTypes; ///< ColumnTypes for faster access
std::vector<sal_Int32> m_vColumnSize;
std::vector<sal_Int16> m_vNumberFormat;
css::lang::Locale m_aLocale;
TColumns m_aDestColumns; ///< container for new created columns
TColumnVector m_vDestVector;
css::uno::Reference< css::beans::XPropertySet > m_xTable; ///< dest table
css::uno::Reference< css::container::XNameAccess> m_xTables; ///< container
SharedConnection m_xConnection; ///< dest conn
std::shared_ptr<IUpdateHelper> m_pUpdateHelper;
css::uno::Reference< css::util::XNumberFormatter > m_xFormatter; ///< a number formatter working with the connection's NumberFormatsSupplier
css::uno::Reference< css::uno::XComponentContext> m_xContext;
css::util::Date m_aNullDate;
SvNumberFormatter* m_pFormatter;
SvStream& m_rInputStream;
/// for saving the selected tablename
OUString m_sDefaultTableName;
OUString m_sTextToken; ///< cell content
OUString m_sNumToken; ///< SDNUM value
TOTypeInfoSP m_pTypeInfo; ///< contains the default type
const TColumnVector* m_pColumnList;
const OTypeInfoMap* m_pInfoMap;
sal_Int32 m_nColumnPos; ///< current column position
sal_Int32 m_nRows; ///< number of rows to be searched
sal_Int32 m_nRowCount; ///< current count of rows
bool m_bError; ///< error and termination code
bool m_bInTbl; ///< true, if parser is in RTF table
bool m_bHead; ///< true, if the header hasn't been read yet
bool m_bDontAskAgain;///< if there is an error when pasting, don't show it again
bool m_bIsAutoIncrement; ///< if PKey is set by user
bool m_bFoundTable; ///< set to true when a table was found
bool m_bCheckOnly;
bool m_bAppendFirstLine;
virtual TypeSelectionPageFactory
getTypeSelectionPageFactory() = 0;
void CreateDefaultColumn(const OUString& _rColumnName);
sal_Int16 CheckString(const OUString& aToken, sal_Int16 _nOldNumberFormat);
void adjustFormat();
void eraseTokens();
void insertValueIntoColumn();
void createRowSet();
void showErrorDialog(const css::sdbc::SQLException& e);
void ensureFormatter();
/** executeWizard calls a wizard to create/append data
@param _sTableName the tablename
@param _aTextColor the text color of the new created table
@param _rFont the font of the new table
@return true when an error occurs
*/
bool executeWizard( const OUString& _sTableName,
const css::uno::Any& _aTextColor,
const css::awt::FontDescriptor& _rFont);
virtual ~ODatabaseExport();
public:
ODatabaseExport(
const SharedConnection& _rxConnection,
const css::uno::Reference< css::util::XNumberFormatter >& _rxNumberF,
const css::uno::Reference< css::uno::XComponentContext >& _rxContext,
SvStream& _rInputStream
);
// required for automatic type recognition
ODatabaseExport(
sal_Int32 nRows,
TPositions&& _rColumnPositions,
const css::uno::Reference< css::util::XNumberFormatter >& _rxNumberF,
const css::uno::Reference< css::uno::XComponentContext >& _rxContext,
const TColumnVector* rList,
const OTypeInfoMap* _pInfoMap,
bool _bAutoIncrementEnabled,
SvStream& _rInputStream
);
void SetColumnTypes(const TColumnVector* rList,const OTypeInfoMap* _pInfoMap);
void SetTableName(const OUString &_sTableName){ m_sDefaultTableName = _sTableName ; }
void enableCheckOnly() { m_bCheckOnly = true; }
bool isCheckEnabled() const { return m_bCheckOnly; }
static css::uno::Reference< css::sdbc::XPreparedStatement > createPreparedStatement( const css::uno::Reference< css::sdbc::XDatabaseMetaData>& _xMetaData
,const css::uno::Reference< css::beans::XPropertySet>& _xDestTable
,const TPositions& _rvColumnPositions);
};
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */