.
This commit is contained in:
parent
8f1ba8130c
commit
1fe7d3c56d
8 changed files with 410 additions and 4 deletions
6
pglab/PgIndex.cpp
Normal file
6
pglab/PgIndex.cpp
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
#include "PgIndex.h"
|
||||
|
||||
PgIndex::PgIndex()
|
||||
{
|
||||
|
||||
}
|
||||
34
pglab/PgIndex.h
Normal file
34
pglab/PgIndex.h
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
#ifndef PGINDEX_H
|
||||
#define PGINDEX_H
|
||||
|
||||
#include "Pgsql_declare.h"
|
||||
#include <QString>
|
||||
#include <vector>
|
||||
|
||||
class PgIndex {
|
||||
public:
|
||||
|
||||
Oid indexrelid;
|
||||
Oid indrelid;
|
||||
int16_t indnatts;
|
||||
bool indisunique;
|
||||
bool indisprimary;
|
||||
bool indisexclusion;
|
||||
bool indimmediate;
|
||||
bool indisclustered;
|
||||
bool indisvalid;
|
||||
bool indcheckxmin;
|
||||
bool indisready;
|
||||
bool indislive;
|
||||
bool indisreplident;
|
||||
std::vector<int16_t> indkey;
|
||||
std::vector<Oid> indcollation;
|
||||
std::vector<Oid> indclass;
|
||||
std::vector<int16_t> indoption;
|
||||
QString indexprs;
|
||||
QString indpred;
|
||||
|
||||
PgIndex();
|
||||
};
|
||||
|
||||
#endif // PGINDEX_H
|
||||
|
|
@ -9,6 +9,8 @@ QT += core gui
|
|||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets sql
|
||||
|
||||
QMAKE_CXXFLAGS += /std:c++17
|
||||
|
||||
TARGET = pglab
|
||||
TEMPLATE = app
|
||||
|
||||
|
|
@ -76,7 +78,8 @@ SOURCES += main.cpp\
|
|||
ColumnTableModel.cpp \
|
||||
PgAttribute.cpp \
|
||||
PgContainer.cpp \
|
||||
PgAttributeContainer.cpp
|
||||
PgAttributeContainer.cpp \
|
||||
PgIndex.cpp
|
||||
|
||||
HEADERS += \
|
||||
QueryResultModel.h \
|
||||
|
|
@ -126,7 +129,8 @@ HEADERS += \
|
|||
PgNamespaceContainer.h \
|
||||
ColumnTableModel.h \
|
||||
PgAttribute.h \
|
||||
PgAttributeContainer.h
|
||||
PgAttributeContainer.h \
|
||||
PgIndex.h
|
||||
|
||||
FORMS += mainwindow.ui \
|
||||
DatabaseWindow.ui \
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ TARGET = pglablib
|
|||
TEMPLATE = lib
|
||||
CONFIG += staticlib
|
||||
|
||||
QMAKE_CXXFLAGS += /std:c++17
|
||||
|
||||
# The following define makes your compiler emit warnings if you use
|
||||
# any feature of Qt which has been marked as deprecated (the exact warnings
|
||||
# depend on your compiler). Please consult the documentation of the
|
||||
|
|
|
|||
192
pgsql/Pgsql_oids.cpp
Normal file
192
pgsql/Pgsql_oids.cpp
Normal file
|
|
@ -0,0 +1,192 @@
|
|||
#include "Pgsql_oids.h"
|
||||
#include <stdexcept>
|
||||
#include <algorithm>
|
||||
#include <vector>
|
||||
|
||||
namespace {
|
||||
|
||||
/*
|
||||
SELECT
|
||||
'constexpr Oid ' || t1.typname || '_oid = ' || t1.oid::varchar || ';',
|
||||
'constexpr Oid ' || t1.typname || '_array_oid = ' || t2.oid::text || ';',
|
||||
' { ' || t1.oid::text || ', ' || t2.oid::text || ' },'
|
||||
FROM pg_type t1
|
||||
JOIN pg_type t2 ON (t1.typarray=t2.oid)
|
||||
WHERE t1.typtype IN ('b', 'e', 'r') AND t1.typcategory <> 'A'
|
||||
ORDER BY t1.oid
|
||||
*/
|
||||
|
||||
struct ElemArray {
|
||||
Oid elem;
|
||||
Oid array;
|
||||
};
|
||||
|
||||
std::vector<ElemArray> g_ElemToArray = {
|
||||
{ 16, 1000 },
|
||||
{ 17, 1001 },
|
||||
{ 18, 1002 },
|
||||
{ 19, 1003 },
|
||||
{ 20, 1016 },
|
||||
{ 21, 1005 },
|
||||
{ 23, 1007 },
|
||||
{ 24, 1008 },
|
||||
{ 25, 1009 },
|
||||
{ 26, 1028 },
|
||||
{ 27, 1010 },
|
||||
{ 28, 1011 },
|
||||
{ 29, 1012 },
|
||||
{ 114, 199 },
|
||||
{ 142, 143 },
|
||||
{ 600, 1017 },
|
||||
{ 601, 1018 },
|
||||
{ 602, 1019 },
|
||||
{ 603, 1020 },
|
||||
{ 604, 1027 },
|
||||
{ 628, 629 },
|
||||
{ 650, 651 },
|
||||
{ 700, 1021 },
|
||||
{ 701, 1022 },
|
||||
{ 702, 1023 },
|
||||
{ 703, 1024 },
|
||||
{ 704, 1025 },
|
||||
{ 718, 719 },
|
||||
{ 790, 791 },
|
||||
{ 829, 1040 },
|
||||
{ 869, 1041 },
|
||||
{ 1033, 1034 },
|
||||
{ 1042, 1014 },
|
||||
{ 1043, 1015 },
|
||||
{ 1082, 1182 },
|
||||
{ 1083, 1183 },
|
||||
{ 1114, 1115 },
|
||||
{ 1184, 1185 },
|
||||
{ 1186, 1187 },
|
||||
{ 1266, 1270 },
|
||||
{ 1560, 1561 },
|
||||
{ 1562, 1563 },
|
||||
{ 1700, 1231 },
|
||||
{ 1790, 2201 },
|
||||
{ 2202, 2207 },
|
||||
{ 2203, 2208 },
|
||||
{ 2204, 2209 },
|
||||
{ 2205, 2210 },
|
||||
{ 2206, 2211 },
|
||||
{ 2950, 2951 },
|
||||
{ 2970, 2949 },
|
||||
{ 3220, 3221 },
|
||||
{ 3614, 3643 },
|
||||
{ 3615, 3645 },
|
||||
{ 3642, 3644 },
|
||||
{ 3734, 3735 },
|
||||
{ 3769, 3770 },
|
||||
{ 3802, 3807 },
|
||||
{ 3904, 3905 },
|
||||
{ 3906, 3907 },
|
||||
{ 3908, 3909 },
|
||||
{ 3910, 3911 },
|
||||
{ 3912, 3913 },
|
||||
{ 3926, 3927 },
|
||||
{ 4089, 4090 },
|
||||
{ 4096, 4097 }
|
||||
};
|
||||
|
||||
|
||||
std::vector<ElemArray> g_ArrayToElem = {
|
||||
{ 142, 143 },
|
||||
{ 114, 199 },
|
||||
{ 628, 629 },
|
||||
{ 650, 651 },
|
||||
{ 718, 719 },
|
||||
{ 790, 791 },
|
||||
{ 16, 1000 },
|
||||
{ 17, 1001 },
|
||||
{ 18, 1002 },
|
||||
{ 19, 1003 },
|
||||
{ 21, 1005 },
|
||||
{ 23, 1007 },
|
||||
{ 24, 1008 },
|
||||
{ 25, 1009 },
|
||||
{ 27, 1010 },
|
||||
{ 28, 1011 },
|
||||
{ 29, 1012 },
|
||||
{ 1042, 1014 },
|
||||
{ 1043, 1015 },
|
||||
{ 20, 1016 },
|
||||
{ 600, 1017 },
|
||||
{ 601, 1018 },
|
||||
{ 602, 1019 },
|
||||
{ 603, 1020 },
|
||||
{ 700, 1021 },
|
||||
{ 701, 1022 },
|
||||
{ 702, 1023 },
|
||||
{ 703, 1024 },
|
||||
{ 704, 1025 },
|
||||
{ 604, 1027 },
|
||||
{ 26, 1028 },
|
||||
{ 1033, 1034 },
|
||||
{ 829, 1040 },
|
||||
{ 869, 1041 },
|
||||
{ 1114, 1115 },
|
||||
{ 1082, 1182 },
|
||||
{ 1083, 1183 },
|
||||
{ 1184, 1185 },
|
||||
{ 1186, 1187 },
|
||||
{ 1700, 1231 },
|
||||
{ 1266, 1270 },
|
||||
{ 1560, 1561 },
|
||||
{ 1562, 1563 },
|
||||
{ 1790, 2201 },
|
||||
{ 2202, 2207 },
|
||||
{ 2203, 2208 },
|
||||
{ 2204, 2209 },
|
||||
{ 2205, 2210 },
|
||||
{ 2206, 2211 },
|
||||
{ 2970, 2949 },
|
||||
{ 2950, 2951 },
|
||||
{ 3220, 3221 },
|
||||
{ 3614, 3643 },
|
||||
{ 3642, 3644 },
|
||||
{ 3615, 3645 },
|
||||
{ 3734, 3735 },
|
||||
{ 3769, 3770 },
|
||||
{ 3802, 3807 },
|
||||
{ 3904, 3905 },
|
||||
{ 3906, 3907 },
|
||||
{ 3908, 3909 },
|
||||
{ 3910, 3911 },
|
||||
{ 3912, 3913 },
|
||||
{ 3926, 3927 },
|
||||
{ 4089, 4090 },
|
||||
{ 4096, 4097 }
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
Oid Pgsql::ElemOidFromArrayOid(Oid oid)
|
||||
{
|
||||
|
||||
auto iter = std::lower_bound(g_ArrayToElem.begin(), g_ArrayToElem.end(),
|
||||
ElemArray{oid, oid},
|
||||
[] (auto l, auto r) -> bool
|
||||
{
|
||||
return l.array < r.array;
|
||||
});
|
||||
if (iter == g_ArrayToElem.end())
|
||||
throw std::runtime_error("ElemOidFromArrayOid Oid not found");
|
||||
return iter->elem;
|
||||
}
|
||||
|
||||
Oid Pgsql::ArrayOidFromElemOid(Oid oid)
|
||||
{
|
||||
auto iter = std::lower_bound(g_ElemToArray.begin(), g_ElemToArray.end(),
|
||||
ElemArray{oid, oid},
|
||||
[] (auto l, auto r) -> bool
|
||||
{
|
||||
return l.elem < r.elem;
|
||||
});
|
||||
if (iter == g_ElemToArray.end())
|
||||
throw std::runtime_error("ElemOidFromArrayOid Oid not found");
|
||||
return iter->array;
|
||||
|
||||
}
|
||||
146
pgsql/Pgsql_oids.h
Normal file
146
pgsql/Pgsql_oids.h
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
#ifndef PGSQL_OIDS_H
|
||||
#define PGSQL_OIDS_H
|
||||
|
||||
#include <libpq-fe.h>
|
||||
|
||||
namespace Pgsql {
|
||||
constexpr Oid bool_oid = 16;
|
||||
constexpr Oid bytea_oid = 17;
|
||||
constexpr Oid char_oid = 18;
|
||||
constexpr Oid name_oid = 19;
|
||||
constexpr Oid int8_oid = 20;
|
||||
constexpr Oid int2_oid = 21;
|
||||
constexpr Oid int4_oid = 23;
|
||||
constexpr Oid regproc_oid = 24;
|
||||
constexpr Oid text_oid = 25;
|
||||
constexpr Oid oid_oid = 26;
|
||||
constexpr Oid tid_oid = 27;
|
||||
constexpr Oid xid_oid = 28;
|
||||
constexpr Oid cid_oid = 29;
|
||||
constexpr Oid json_oid = 114;
|
||||
constexpr Oid xml_oid = 142;
|
||||
constexpr Oid point_oid = 600;
|
||||
constexpr Oid lseg_oid = 601;
|
||||
constexpr Oid path_oid = 602;
|
||||
constexpr Oid box_oid = 603;
|
||||
constexpr Oid polygon_oid = 604;
|
||||
constexpr Oid line_oid = 628;
|
||||
constexpr Oid cidr_oid = 650;
|
||||
constexpr Oid float4_oid = 700;
|
||||
constexpr Oid float8_oid = 701;
|
||||
constexpr Oid abstime_oid = 702;
|
||||
constexpr Oid reltime_oid = 703;
|
||||
constexpr Oid tinterval_oid = 704;
|
||||
constexpr Oid circle_oid = 718;
|
||||
constexpr Oid money_oid = 790;
|
||||
constexpr Oid macaddr_oid = 829;
|
||||
constexpr Oid inet_oid = 869;
|
||||
constexpr Oid aclitem_oid = 1033;
|
||||
constexpr Oid bpchar_oid = 1042;
|
||||
constexpr Oid varchar_oid = 1043;
|
||||
constexpr Oid date_oid = 1082;
|
||||
constexpr Oid time_oid = 1083;
|
||||
constexpr Oid timestamp_oid = 1114;
|
||||
constexpr Oid timestamptz_oid = 1184;
|
||||
constexpr Oid interval_oid = 1186;
|
||||
constexpr Oid timetz_oid = 1266;
|
||||
constexpr Oid bit_oid = 1560;
|
||||
constexpr Oid varbit_oid = 1562;
|
||||
constexpr Oid numeric_oid = 1700;
|
||||
constexpr Oid refcursor_oid = 1790;
|
||||
constexpr Oid regprocedure_oid = 2202;
|
||||
constexpr Oid regoper_oid = 2203;
|
||||
constexpr Oid regoperator_oid = 2204;
|
||||
constexpr Oid regclass_oid = 2205;
|
||||
constexpr Oid regtype_oid = 2206;
|
||||
constexpr Oid uuid_oid = 2950;
|
||||
constexpr Oid txid_snapshot_oid = 2970;
|
||||
constexpr Oid pg_lsn_oid = 3220;
|
||||
constexpr Oid tsvector_oid = 3614;
|
||||
constexpr Oid tsquery_oid = 3615;
|
||||
constexpr Oid gtsvector_oid = 3642;
|
||||
constexpr Oid regconfig_oid = 3734;
|
||||
constexpr Oid regdictionary_oid = 3769;
|
||||
constexpr Oid jsonb_oid = 3802;
|
||||
constexpr Oid int4range_oid = 3904;
|
||||
constexpr Oid numrange_oid = 3906;
|
||||
constexpr Oid tsrange_oid = 3908;
|
||||
constexpr Oid tstzrange_oid = 3910;
|
||||
constexpr Oid daterange_oid = 3912;
|
||||
constexpr Oid int8range_oid = 3926;
|
||||
constexpr Oid regnamespace_oid = 4089;
|
||||
constexpr Oid regrole_oid = 4096;
|
||||
|
||||
constexpr Oid bool_array_oid = 1000;
|
||||
constexpr Oid bytea_array_oid = 1001;
|
||||
constexpr Oid char_array_oid = 1002;
|
||||
constexpr Oid name_array_oid = 1003;
|
||||
constexpr Oid int8_array_oid = 1016;
|
||||
constexpr Oid int2_array_oid = 1005;
|
||||
constexpr Oid int4_array_oid = 1007;
|
||||
constexpr Oid regproc_array_oid = 1008;
|
||||
constexpr Oid text_array_oid = 1009;
|
||||
constexpr Oid oid_array_oid = 1028;
|
||||
constexpr Oid tid_array_oid = 1010;
|
||||
constexpr Oid xid_array_oid = 1011;
|
||||
constexpr Oid cid_array_oid = 1012;
|
||||
constexpr Oid json_array_oid = 199;
|
||||
constexpr Oid xml_array_oid = 143;
|
||||
constexpr Oid point_array_oid = 1017;
|
||||
constexpr Oid lseg_array_oid = 1018;
|
||||
constexpr Oid path_array_oid = 1019;
|
||||
constexpr Oid box_array_oid = 1020;
|
||||
constexpr Oid polygon_array_oid = 1027;
|
||||
constexpr Oid line_array_oid = 629;
|
||||
constexpr Oid cidr_array_oid = 651;
|
||||
constexpr Oid float4_array_oid = 1021;
|
||||
constexpr Oid float8_array_oid = 1022;
|
||||
constexpr Oid abstime_array_oid = 1023;
|
||||
constexpr Oid reltime_array_oid = 1024;
|
||||
constexpr Oid tinterval_array_oid = 1025;
|
||||
constexpr Oid circle_array_oid = 719;
|
||||
constexpr Oid money_array_oid = 791;
|
||||
constexpr Oid macaddr_array_oid = 1040;
|
||||
constexpr Oid inet_array_oid = 1041;
|
||||
constexpr Oid aclitem_array_oid = 1034;
|
||||
constexpr Oid bpchar_array_oid = 1014;
|
||||
constexpr Oid varchar_array_oid = 1015;
|
||||
constexpr Oid date_array_oid = 1182;
|
||||
constexpr Oid time_array_oid = 1183;
|
||||
constexpr Oid timestamp_array_oid = 1115;
|
||||
constexpr Oid timestamptz_array_oid = 1185;
|
||||
constexpr Oid interval_array_oid = 1187;
|
||||
constexpr Oid timetz_array_oid = 1270;
|
||||
constexpr Oid bit_array_oid = 1561;
|
||||
constexpr Oid varbit_array_oid = 1563;
|
||||
constexpr Oid numeric_array_oid = 1231;
|
||||
constexpr Oid refcursor_array_oid = 2201;
|
||||
constexpr Oid regprocedure_array_oid = 2207;
|
||||
constexpr Oid regoper_array_oid = 2208;
|
||||
constexpr Oid regoperator_array_oid = 2209;
|
||||
constexpr Oid regclass_array_oid = 2210;
|
||||
constexpr Oid regtype_array_oid = 2211;
|
||||
constexpr Oid uuid_array_oid = 2951;
|
||||
constexpr Oid txid_snapshot_array_oid = 2949;
|
||||
constexpr Oid pg_lsn_array_oid = 3221;
|
||||
constexpr Oid tsvector_array_oid = 3643;
|
||||
constexpr Oid tsquery_array_oid = 3645;
|
||||
constexpr Oid gtsvector_array_oid = 3644;
|
||||
constexpr Oid regconfig_array_oid = 3735;
|
||||
constexpr Oid regdictionary_array_oid = 3770;
|
||||
constexpr Oid jsonb_array_oid = 3807;
|
||||
constexpr Oid int4range_array_oid = 3905;
|
||||
constexpr Oid numrange_array_oid = 3907;
|
||||
constexpr Oid tsrange_array_oid = 3909;
|
||||
constexpr Oid tstzrange_array_oid = 3911;
|
||||
constexpr Oid daterange_array_oid = 3913;
|
||||
constexpr Oid int8range_array_oid = 3927;
|
||||
constexpr Oid regnamespace_array_oid = 4090;
|
||||
constexpr Oid regrole_array_oid = 4097;
|
||||
|
||||
Oid ElemOidFromArrayOid(Oid oid);
|
||||
Oid ArrayOidFromElemOid(Oid oid);
|
||||
|
||||
} // end of namespace Pgsql
|
||||
|
||||
#endif // PGSQL_OIDS_H
|
||||
|
|
@ -38,7 +38,8 @@ SOURCES += Pgsql_Connection.cpp \
|
|||
Pgsql_Row.cpp \
|
||||
Pgsql_Value.cpp \
|
||||
Pgsql_Col.cpp \
|
||||
ArrayParser.cpp
|
||||
ArrayParser.cpp \
|
||||
Pgsql_oids.cpp
|
||||
|
||||
HEADERS += Pgsql_Connection.h \
|
||||
Pgsql_Params.h \
|
||||
|
|
@ -47,7 +48,8 @@ HEADERS += Pgsql_Connection.h \
|
|||
Pgsql_Value.h \
|
||||
Pgsql_declare.h \
|
||||
Pgsql_Col.h \
|
||||
ArrayParser.h
|
||||
ArrayParser.h \
|
||||
Pgsql_oids.h
|
||||
|
||||
#FORMS +=
|
||||
|
||||
|
|
|
|||
20
tests/PgsqlTests/tst_Pgsql_oids.cpp
Normal file
20
tests/PgsqlTests/tst_Pgsql_oids.cpp
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
#include <gtest/gtest.h>
|
||||
#include <gmock/gmock-matchers.h>
|
||||
#include "Pgsql_oids.h"
|
||||
#include "PrintTo_Qt.h"
|
||||
|
||||
using namespace testing;
|
||||
using namespace Pgsql;
|
||||
|
||||
TEST(Pgsql_Oids, ElemOidFromArrayOid)
|
||||
{
|
||||
Oid elem = ElemOidFromArrayOid(varchar_array_oid);
|
||||
ASSERT_EQ(elem, varchar_oid);
|
||||
}
|
||||
|
||||
TEST(Pgsql_Oids, ArrayOidFromElemOid)
|
||||
{
|
||||
Oid elem = ArrayOidFromElemOid(timestamptz_oid);
|
||||
ASSERT_EQ(elem, timestamptz_array_oid);
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue