/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
 *
 *  The Contents of this file are made available subject to the terms of
 *  the BSD license.
 *  
 *  Copyright 2000, 2010 Oracle and/or its affiliates.
 *  All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions
 *  are met:
 *  1. Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *  2. Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *  3. Neither the name of Sun Microsystems, Inc. nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
 *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *     
 *************************************************************************/

#ifndef _CONNECTIVITY_PROPERTYIDS_HXX_
#define _CONNECTIVITY_PROPERTYIDS_HXX_

// this define has to be set to split the names into different dll's or so's
// every dll has his own set of property names
#include <rtl/ustring.hxx>
#ifndef _MAP_
#include <map>
#endif

namespace connectivity
{
namespace skeleton
{
    class OPropertyMap
    {
        ::std::map<sal_Int32 , rtl_uString*> m_aPropertyMap; 

        ::rtl::OUString fillValue(sal_Int32 _nIndex);
    public:
        OPropertyMap()
        {
        }
        ~OPropertyMap();
        ::rtl::OUString getNameByIndex(sal_Int32 _nIndex) const;

        static OPropertyMap& getPropMap()
        {
            static OPropertyMap s_aPropMap;
            return s_aPropMap;
        }
    };


    
        typedef const sal_Char* (*PVFN)();

        struct UStringDescription
        {
            const sal_Char*	pZeroTerminatedName;
            sal_Int32 nLength;

            UStringDescription(PVFN _fCharFkt); 
            operator ::rtl::OUString() const { return ::rtl::OUString(pZeroTerminatedName,nLength,RTL_TEXTENCODING_ASCII_US); }
            ~UStringDescription();
        private:
            UStringDescription();
        };
    }
}


//------------------------------------------------------------------------------
#define DECL_PROP1IMPL(varname, type) \
pProperties[nPos++] = ::com::sun::star::beans::Property(OPropertyMap::getPropMap().getNameByIndex(PROPERTY_ID_##varname), PROPERTY_ID_##varname, ::cppu::UnoType< type >::get(),
//------------------------------------------------------------------------------
#define DECL_PROP0(varname, type)	\
    DECL_PROP1IMPL(varname, type) 0)
//------------------------------------------------------------------------------
#define DECL_BOOL_PROP1IMPL(varname) \
        pProperties[nPos++] = ::com::sun::star::beans::Property(OPropertyMap::getPropMap().getNameByIndex(PROPERTY_ID_##varname), PROPERTY_ID_##varname, ::getBooleanCppuType(),
//------------------------------------------------------------------------------
#define DECL_BOOL_PROP0(varname)	\
    DECL_BOOL_PROP1IMPL(varname) 0)


#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

#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

#define PROPERTY_ID_COMMAND							31
#define PROPERTY_ID_CHECKOPTION						32
#define PROPERTY_ID_PASSWORD						33
#define 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

#define PROPERTY_ID_INVALID_INDEX					41
#define PROPERTY_ID_ERRORMSG_SEQUENCE				42
#define PROPERTY_ID_HY010							43
#define PROPERTY_ID_HY0000							44
#define PROPERTY_ID_DELIMITER						45
#define PROPERTY_ID_FORMATKEY						46
#define PROPERTY_ID_LOCALE							47
#define PROPERTY_ID_IM001							48

#define PROPERTY_ID_AUTOINCREMENTCREATION			49

#define PROPERTY_ID_PRIVILEGES						50

#endif // _CONNECTIVITY_PROPERTYIDS_HXX_


/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
