summaryrefslogtreecommitdiffstats
path: root/connectivity/source/inc/odbc/OBoundParam.hxx
blob: 5eeeda4ae94770e61f8c12fab659813a133a6145 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* -*- 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 .
 */
#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OBOUNDPARAM_HXX
#define INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OBOUNDPARAM_HXX

#include <com/sun/star/io/XInputStream.hpp>
#include <com/sun/star/sdbc/DataType.hpp>
#include <odbc/odbcbasedllapi.hxx>

namespace connectivity
{
    namespace odbc
    {
        class OOO_DLLPUBLIC_ODBCBASE OBoundParam
        {

        public:
            OBoundParam()
                : binaryData(nullptr)
                , paramLength(0)
                , paramInputStreamLen(0)
            {
            }
            ~OBoundParam()
            {
                free(binaryData);
            }

            // allocBindDataBuffer
            // Allocates and returns a new bind data buffer of the specified
            // length

            void* allocBindDataBuffer (sal_Int32 bufLen)
            {
                // Reset the input stream and sequence, we are doing a new bind
                setInputStream (nullptr, 0);
                aSequence.realloc(0);

                free(binaryData);
                binaryData = (bufLen > 0) ? malloc(bufLen) : nullptr;

                return binaryData;
            }


            // getBindLengthBuffer
            // Returns the length buffer to be used when binding to a parameter

            SQLLEN& getBindLengthBuffer ()
            {
                return paramLength;
            }


            // setInputStream
            // Sets the input stream for the bound parameter

            void setInputStream(const css::uno::Reference< css::io::XInputStream>& inputStream,
                                sal_Int32 len)
            {
                paramInputStream = inputStream;
                paramInputStreamLen = len;
            }

            void setSequence(const css::uno::Sequence< sal_Int8 >& _aSequence)
            {
                aSequence = _aSequence;
            }


            // getInputStream
            // Gets the input stream for the bound parameter

            const css::uno::Reference< css::io::XInputStream>& getInputStream ()
            {
                return paramInputStream;
            }


            // getInputStreamLen
            // Gets the input stream length for the bound parameter

            sal_Int32 getInputStreamLen ()
            {
                return paramInputStreamLen;
            }


        protected:

            // Data attributes


            void  *binaryData;       // Storage area to be used
                                     // when binding the parameter

            SQLLEN paramLength;      // Storage area to be used
                                     // for the bound length of the
                                     // parameter.  Note that this
                                     // data is in native format.

            css::uno::Reference< css::io::XInputStream> paramInputStream;
            css::uno::Sequence< sal_Int8 > aSequence;
                                        // When an input stream is
                                        // bound to a parameter, a
                                        // reference to the input stream is saved
                                        // until not needed anymore.

            sal_Int32 paramInputStreamLen;                // Length of input stream
       };
    }
}
#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OBOUNDPARAM_HXX

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