-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathcommon.cpp
More file actions
139 lines (121 loc) · 3.69 KB
/
common.cpp
File metadata and controls
139 lines (121 loc) · 3.69 KB
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
/******************************************************************************
* src/common.cpp
*
* Common global variables across all programs.
*
******************************************************************************
* Copyright (C) 2013-2016 Timo Bingmann <[email protected]>
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*****************************************************************************/
#include "common.h"
#include "strtools.h"
//! verbosity, common global option.
int gopt_verbose = 0;
//! check processed output matches the output file
bool gopt_check_output = false;
//! global command line parameter: named RANGEs to process
std::vector<std::string> gopt_ranges;
//! global SQL datbase connection handle
SqlDatabase* g_db = NULL;
#include "pgsql.h"
#include "mysql.h"
#include "sqlite.h"
//! initialize global SQL database connection
bool g_db_connect(const std::string& db_conninfo)
{
g_db_free();
if (db_conninfo.size() == 0)
{
#if HAVE_POSTGRESQL
//! first try to connect to a PostgreSQL database
g_db = new PgSqlDatabase;
if (g_db->initialize(""))
return true;
delete g_db;
#endif
#if HAVE_MYSQL
//! then try to connect to a MySQL database called "test"
g_db = new MySqlDatabase();
if (g_db->initialize("test"))
return true;
delete g_db;
#endif
#if HAVE_SQLITE3
//! then try to connect to an in-memory SQLite database
g_db = new SQLiteDatabase();
if (g_db->initialize(":memory:"))
return true;
delete g_db;
#endif
}
else
{
std::string sqlname = db_conninfo;
std::string dbname;
std::string::size_type colonpos = sqlname.find(':');
if (colonpos != std::string::npos) {
dbname = sqlname.substr(colonpos+1);
sqlname = sqlname.substr(0, colonpos);
}
sqlname = str_tolower(sqlname);
if (0)
{
}
#if HAVE_POSTGRESQL
else if (sqlname == "postgresql" || sqlname == "postgres" ||
sqlname == "pgsql" || sqlname == "pg")
{
g_db = new PgSqlDatabase;
if (g_db->initialize(dbname))
return true;
delete g_db;
}
#endif
#if HAVE_MYSQL
else if (sqlname == "mysql" || sqlname == "my")
{
if (dbname.size() == 0) dbname = "test";
g_db = new MySqlDatabase;
if (g_db->initialize(dbname))
return true;
delete g_db;
}
#endif
#if HAVE_SQLITE3
else if (sqlname == "sqlite" || sqlname == "lite")
{
if (dbname.size() == 0) dbname = ":memory:";
g_db = new SQLiteDatabase;
if (g_db->initialize(dbname))
return true;
delete g_db;
}
#endif
else
{
OUT("ERROR: unknown (or not compiled) SQL database type \"" <<
sqlname << "\"!");
}
}
return false;
}
//! free global SQL database connection
void g_db_free()
{
if (g_db) {
delete g_db;
g_db = NULL;
}
}