aboutsummaryrefslogtreecommitdiff
path: root/odb/mssql/exceptions.hxx
blob: 9c5e5934dac359fba1ccb7b5e2f298a3b4fccf03 (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
132
133
134
135
136
137
138
139
// file      : odb/mssql/exceptions.hxx
// copyright : Copyright (c) 2005-2018 Code Synthesis Tools CC
// license   : ODB NCUEL; see accompanying LICENSE file

#ifndef ODB_MSSQL_EXCEPTIONS_HXX
#define ODB_MSSQL_EXCEPTIONS_HXX

#include <odb/pre.hxx>

#include <string>
#include <vector>

#include <odb/exceptions.hxx>
#include <odb/details/config.hxx> // ODB_NOTHROW_NOEXCEPT

#include <odb/mssql/version.hxx>
#include <odb/mssql/forward.hxx>
#include <odb/mssql/mssql-fwd.hxx>
#include <odb/mssql/details/export.hxx>

namespace odb
{
  namespace mssql
  {
    struct LIBODB_MSSQL_EXPORT database_exception: odb::database_exception
    {
      struct record
      {
        record (SQLINTEGER error,
                const std::string& sqlstate,
                const std::string& message);

        SQLINTEGER
        error () const
        {
          return error_;
        }

        const std::string&
        sqlstate () const
        {
          return sqlstate_;
        }

        const std::string&
        message () const
        {
          return message_;
        }

      private:
        SQLINTEGER error_;
        std::string sqlstate_;
        std::string message_;
      };

      typedef std::vector<record> records;

      typedef records::size_type size_type;
      typedef records::const_iterator iterator;

      iterator
      begin () const
      {
        return records_.begin ();
      }

      iterator
      end () const
      {
        return records_.end ();
      }

      size_type
      size () const
      {
        return records_.size ();
      }

      virtual const char*
      what () const ODB_NOTHROW_NOEXCEPT;

      virtual database_exception*
      clone () const;

    public:
      ~database_exception () ODB_NOTHROW_NOEXCEPT;

      database_exception ();
      database_exception (SQLINTEGER error,
                          const std::string& sqlstate,
                          const std::string& message);

      void
      append (SQLINTEGER error,
              const std::string& sqlstate,
              const std::string& message);

    private:
      records records_;
      std::string what_;
    };

    struct LIBODB_MSSQL_EXPORT cli_exception: odb::exception
    {
      cli_exception (const std::string& what);
      ~cli_exception () ODB_NOTHROW_NOEXCEPT;

      virtual const char*
      what () const ODB_NOTHROW_NOEXCEPT;

      virtual cli_exception*
      clone () const;

    private:
      std::string what_;
    };

    struct LIBODB_MSSQL_EXPORT long_data_reload: odb::exception
    {
      virtual const char*
      what () const ODB_NOTHROW_NOEXCEPT;

      virtual long_data_reload*
      clone () const;
    };

    namespace core
    {
      using mssql::database_exception;
      using mssql::cli_exception;
      using mssql::long_data_reload;
    }
  }
}

#include <odb/post.hxx>

#endif // ODB_MSSQL_EXCEPTIONS_HXX