kodi
sqlitedataset.h
1 /*
2  * Copyright (C) 2004, Leo Seib, Hannover
3  *
4  * Project:SQLiteDataset C++ Dynamic Library
5  * Module: SQLiteDataset class header file
6  * Author: Leo Seib E-Mail: leoseib@web.de
7  * Begin: 5/04/2002
8  *
9  * SPDX-License-Identifier: MIT
10  * See LICENSES/README.md for more information.
11  */
12 
13 #pragma once
14 
15 #include "dataset.h"
16 
17 #include <stdio.h>
18 
19 #include <sqlite3.h>
20 
21 namespace dbiplus
22 {
23 /***************** Class SqliteDatabase definition ******************
24 
25  class 'SqliteDatabase' connects with Sqlite-server
26 
27 ******************************************************************/
28 class SqliteDatabase : public Database
29 {
30 protected:
31  /* connect descriptor */
32  sqlite3* conn;
33  bool _in_transaction;
34  int last_err;
35 
36 public:
37  /* default constructor */
39  /* destructor */
40  ~SqliteDatabase() override;
41 
42  Dataset* CreateDataset() const override;
43 
44  /* func. returns connection handle with SQLite-server */
45  sqlite3* getHandle() { return conn; }
46  /* func. returns current status about SQLite-server connection */
47  int status() override;
48  int setErr(int err_code, const char* qry) override;
49  /* func. returns error message if error occurs */
50  const char* getErrorMsg() override;
51  /* sets a new host name */
52  void setHostName(const char* newHost) override;
53  /* sets a database name */
54  void setDatabase(const char* newDb) override;
55 
56  /* func. connects to database-server */
57 
58  int connect(bool create) override;
59  /* func. disconnects from database-server */
60  void disconnect() override;
61  /* func. creates new database */
62  int create() override;
63  /* func. deletes database */
64  int drop() override;
65  /* check if database exists (ie has tables/views defined) */
66  bool exists() override;
67 
68  /* \brief copy database */
69  int copy(const char* backup_name) override;
70 
71  /* \brief drop all extra analytics from database */
72  int drop_analytics(void) override;
73 
74  long nextid(const char* seq_name) override;
75 
76  /* virtual methods for transaction */
77 
78  void start_transaction() override;
79  void commit_transaction() override;
80  void rollback_transaction() override;
81 
82  /* virtual methods for formatting */
83  std::string vprepare(const char* format, va_list args) override;
84 
85  bool in_transaction() override { return _in_transaction; }
86 };
87 
88 /***************** Class SqliteDataset definition *******************
89 
90  class 'SqliteDataset' does a query to SQLite-server
91 
92 ******************************************************************/
93 
94 class SqliteDataset : public Dataset
95 {
96 protected:
97  sqlite3* handle();
98 
99  /* Makes direct queries to database */
100  virtual void make_query(StringList& _sql);
101  /* Makes direct inserts into database */
102  void make_insert() override;
103  /* Edit SQL */
104  void make_edit() override;
105  /* Delete SQL */
106  void make_deletion() override;
107 
108  //static int sqlite_callback(void* res_ptr,int ncol, char** result, char** cols);
109 
110  /* This function works only with MySQL database
111  Filling the fields information from select statement */
112  void fill_fields() override;
113  /* Changing field values during dataset navigation */
114  virtual void free_row(); // free the memory allocated for the current row
115 
116 public:
117  /* constructor */
118  SqliteDataset();
119  explicit SqliteDataset(SqliteDatabase* newDb);
120 
121  /* destructor */
122  ~SqliteDataset() override;
123 
124  /* set autorefresh boolean value (if true - refresh the data after edit()
125 or insert() operations default = false) */
126  void set_autorefresh(bool val);
127 
128  /* opens a query & then sets a query results */
129  void open() override;
130  void open(const std::string& sql) override;
131  /* func. executes a query without results to return */
132  int exec() override;
133  int exec(const std::string& sql) override;
134  const void* getExecRes() override;
135  /* as open, but with our query exec Sql */
136  bool query(const std::string& query) override;
137  /* func. closes a query */
138  void close(void) override;
139  /* Cancel changes, made in insert or edit states of dataset */
140  void cancel() override;
141  /* last inserted id */
142  int64_t lastinsertid() override;
143  /* sequence numbers */
144  long nextid(const char* seq_name) override;
145  /* sequence numbers */
146  int num_rows() override;
147  /* interrupt any pending database operation */
148  void interrupt() override;
149 
150  bool bof() override;
151  bool eof() override;
152  void first() override;
153  void last() override;
154  void prev() override;
155  void next() override;
156  /* Go to record No (starting with 0) */
157  bool seek(int pos = 0) override;
158 
159  bool dropIndex(const char* table, const char* index) override;
160 };
161 } // namespace dbiplus
Definition: Database.h:11
std::string vprepare(const char *format, va_list args) override
Prepare a SQL statement for execution or querying using C printf nomenclature.
Definition: sqlitedataset.cpp:576
Definition: LibInputPointer.h:13
Definition: sqlitedataset.h:28
Definition: dataset.h:196
Definition: dataset.h:49
Definition: sqlitedataset.h:94