1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 #ifndef _CONNECTIVITY_PCOLUMN_HXX_
24 #define _CONNECTIVITY_PCOLUMN_HXX_
25 
26 #include "connectivity/dbtoolsdllapi.hxx"
27 #include "connectivity/sdbcx/VColumn.hxx"
28 #include "connectivity/CommonTools.hxx"
29 #include <vos/ref.hxx>
30 #include <com/sun/star/sdbc/XResultSetMetaData.hpp>
31 #include <com/sun/star/sdbc/XDatabaseMetaData.hpp>
32 #include <com/sun/star/container/XNameAccess.hpp>
33 #include <comphelper/proparrhlp.hxx>
34 
35 namespace connectivity
36 {
37 	namespace parse
38 	{
39 		class OParseColumn;
40 
41 		typedef sdbcx::OColumn OParseColumn_BASE;
42         typedef ::comphelper::OPropertyArrayUsageHelper<OParseColumn> OParseColumn_PROP;
43 
44 		class OOO_DLLPUBLIC_DBTOOLS OParseColumn :
45             public OParseColumn_BASE, public OParseColumn_PROP
46 		{
47 			::rtl::OUString	m_aRealName;
48 			::rtl::OUString m_aTableName;
49             ::rtl::OUString m_sLabel;
50 			sal_Bool		m_bFunction;
51 			sal_Bool		m_bDbasePrecisionChanged;
52 			sal_Bool		m_bAggregateFunction;
53             sal_Bool        m_bIsSearchable;
54 
55 		protected:
56 			virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const;
57 			virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper();
58 
59 			virtual ~OParseColumn();
60 		public:
61             OParseColumn(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xColumn,sal_Bool _bCase);
62 			OParseColumn(const ::rtl::OUString& _Name,
63 					const ::rtl::OUString& _TypeName,
64 					const ::rtl::OUString& _DefaultValue,
65                     const ::rtl::OUString& _Description,
66 					sal_Int32		_IsNullable,
67 					sal_Int32		_Precision,
68 					sal_Int32		_Scale,
69 					sal_Int32		_Type,
70 					sal_Bool		_IsAutoIncrement,
71 					sal_Bool		_IsCurrency,
72 					sal_Bool		_bCase);
73 
74 			virtual void construct();
75 
setRealName(const::rtl::OUString & _rName)76 			void setRealName(const ::rtl::OUString& _rName)  { m_aRealName  = _rName; }
setLabel(const::rtl::OUString & i_sLabel)77             void setLabel(const ::rtl::OUString& i_sLabel)   { m_sLabel  = i_sLabel; }
setTableName(const::rtl::OUString & _rName)78 			void setTableName(const ::rtl::OUString& _rName) { m_aTableName = _rName; }
setFunction(sal_Bool _bFunction)79 			void setFunction(sal_Bool _bFunction)			 { m_bFunction	= _bFunction; }
setAggregateFunction(sal_Bool _bFunction)80 			void setAggregateFunction(sal_Bool _bFunction)	 { m_bAggregateFunction	= _bFunction; }
setIsSearchable(sal_Bool _bIsSearchable)81             void setIsSearchable( sal_Bool _bIsSearchable )  { m_bIsSearchable = _bIsSearchable; }
setDbasePrecisionChanged(sal_Bool _bDbasePrecisionChanged)82 			void setDbasePrecisionChanged(sal_Bool _bDbasePrecisionChanged)	{ m_bDbasePrecisionChanged = _bDbasePrecisionChanged; }
83 
getRealName() const84 			::rtl::OUString getRealName()   const { return  m_aRealName; }
getLabel() const85             ::rtl::OUString getLabel()      const { return  m_sLabel; }
getTableName() const86 			::rtl::OUString getTableName()  const { return  m_aTableName; }
getFunction() const87 			sal_Bool		getFunction()   const { return  m_bFunction; }
getDbasePrecisionChanged() const88 			sal_Bool		getDbasePrecisionChanged()	const { return  m_bDbasePrecisionChanged; }
89 
90         public:
91             /** creates a collection of OParseColumn, as described by a result set meta data instance.
92             */
93             static ::vos::ORef< OSQLColumns >
94                 createColumnsForResultSet(
95                     const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData >& _rxResMetaData,
96                     const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData >& _rxDBMetaData,
97                     const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess>& i_xQueryColumns
98                 );
99 
100             DECLARE_STL_USTRINGACCESS_MAP(int,StringMap);
101             /** creates a single OParseColumn, as described by a result set meta data instance.
102                 The column names are unique.
103             */
104             static OParseColumn*
105                 createColumnForResultSet(
106                     const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSetMetaData >& _rxResMetaData,
107                     const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XDatabaseMetaData >& _rxDBMetaData,
108                     sal_Int32 _nColumnPos,
109                     StringMap& _rColumns
110                 );
111 
112 		private:
113 			using OParseColumn_BASE::createArrayHelper;
114 		};
115 
116 		class OOrderColumn;
117 
118 		typedef sdbcx::OColumn OOrderColumn_BASE;
119 		typedef ::comphelper::OPropertyArrayUsageHelper<OOrderColumn> OOrderColumn_PROP;
120 
121 		class OOO_DLLPUBLIC_DBTOOLS OOrderColumn :
122             public OOrderColumn_BASE, public OOrderColumn_PROP
123 		{
124             const   sal_Bool        m_bAscending;
125             const   ::rtl::OUString m_sTableName;
126 
127 		protected:
128 			virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const;
129 			virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper();
130 
131 			virtual ~OOrderColumn();
132 		public:
133             OOrderColumn(
134                 const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xColumn,
135                 const ::rtl::OUString& i_rOriginatingTableName,
136                 sal_Bool _bCase,
137                 sal_Bool _bAscending
138             );
139 
140             OOrderColumn(
141                 const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>& _xColumn,
142                 sal_Bool _bCase,
143                 sal_Bool _bAscending
144             );
145 
146 			virtual void construct();
147 
148 			virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(  ) throw(::com::sun::star::uno::RuntimeException);
149 		private:
150 			using OOrderColumn_BASE::createArrayHelper;
151 		};
152 	}
153 }
154 
155 #endif //_CONNECTIVITY_PCOLUMN_HXX_
156 
157