@@ -30,36 +30,51 @@ namespace oatpp { namespace postgresql { namespace mapping {
30
30
31
31
TypeMapper::TypeMapper () {
32
32
33
- m_oids.resize (data::mapping::type::ClassId::getClassCount (), 0 );
33
+ {
34
+ m_oids.resize (data::mapping::type::ClassId::getClassCount (), 0 );
34
35
35
- setTypeOid (data::mapping::type::__class::String::CLASS_ID, TEXTOID);
36
- setTypeOid (data::mapping::type::__class::Any::CLASS_ID, 0 );
36
+ setTypeOid (data::mapping::type::__class::String::CLASS_ID, TEXTOID);
37
+ setTypeOid (data::mapping::type::__class::Any::CLASS_ID, 0 );
37
38
38
- setTypeOid (data::mapping::type::__class::Int8::CLASS_ID, INT2OID);
39
- setTypeOid (data::mapping::type::__class::UInt8::CLASS_ID, INT2OID);
39
+ setTypeOid (data::mapping::type::__class::Int8::CLASS_ID, INT2OID);
40
+ setTypeOid (data::mapping::type::__class::UInt8::CLASS_ID, INT2OID);
40
41
41
- setTypeOid (data::mapping::type::__class::Int16::CLASS_ID, INT2OID);
42
- setTypeOid (data::mapping::type::__class::UInt16::CLASS_ID, INT4OID);
42
+ setTypeOid (data::mapping::type::__class::Int16::CLASS_ID, INT2OID);
43
+ setTypeOid (data::mapping::type::__class::UInt16::CLASS_ID, INT4OID);
43
44
44
- setTypeOid (data::mapping::type::__class::Int32::CLASS_ID, INT4OID);
45
- setTypeOid (data::mapping::type::__class::UInt32::CLASS_ID, INT8OID);
45
+ setTypeOid (data::mapping::type::__class::Int32::CLASS_ID, INT4OID);
46
+ setTypeOid (data::mapping::type::__class::UInt32::CLASS_ID, INT8OID);
46
47
47
- setTypeOid (data::mapping::type::__class::Int64::CLASS_ID, INT8OID);
48
- setTypeOid (data::mapping::type::__class::UInt64::CLASS_ID, 0 );
48
+ setTypeOid (data::mapping::type::__class::Int64::CLASS_ID, INT8OID);
49
+ setTypeOid (data::mapping::type::__class::UInt64::CLASS_ID, 0 );
49
50
50
- setTypeOid (data::mapping::type::__class::Float32::CLASS_ID, FLOAT4OID);
51
- setTypeOid (data::mapping::type::__class::Float64::CLASS_ID, FLOAT8OID);
52
- setTypeOid (data::mapping::type::__class::Boolean::CLASS_ID, BOOLOID);
51
+ setTypeOid (data::mapping::type::__class::Float32::CLASS_ID, FLOAT4OID);
52
+ setTypeOid (data::mapping::type::__class::Float64::CLASS_ID, FLOAT8OID);
53
+ setTypeOid (data::mapping::type::__class::Boolean::CLASS_ID, BOOLOID);
53
54
54
- setTypeOid (data::mapping::type::__class::AbstractObject::CLASS_ID, 0 );
55
- setTypeOid (data::mapping::type::__class::AbstractEnum::CLASS_ID, 0 );
55
+ setTypeOid (data::mapping::type::__class::AbstractObject::CLASS_ID, 0 );
56
+ setTypeOid (data::mapping::type::__class::AbstractEnum::CLASS_ID, 0 );
56
57
57
- setTypeOid (data::mapping::type::__class::AbstractVector::CLASS_ID, 0 );
58
- setTypeOid (data::mapping::type::__class::AbstractList::CLASS_ID, 0 );
59
- setTypeOid (data::mapping::type::__class::AbstractUnorderedSet::CLASS_ID, 0 );
58
+ setTypeOid (data::mapping::type::__class::AbstractVector::CLASS_ID, 0 );
59
+ setTypeOid (data::mapping::type::__class::AbstractList::CLASS_ID, 0 );
60
+ setTypeOid (data::mapping::type::__class::AbstractUnorderedSet::CLASS_ID, 0 );
60
61
61
- setTypeOid (data::mapping::type::__class::AbstractPairList::CLASS_ID, 0 );
62
- setTypeOid (data::mapping::type::__class::AbstractUnorderedMap::CLASS_ID, 0 );
62
+ setTypeOid (data::mapping::type::__class::AbstractPairList::CLASS_ID, 0 );
63
+ setTypeOid (data::mapping::type::__class::AbstractUnorderedMap::CLASS_ID, 0 );
64
+ }
65
+
66
+ {
67
+ setOidType (TEXTOID, oatpp::String::Class::getType ());
68
+
69
+ setOidType (INT2OID, oatpp::Int16::Class::getType ());
70
+ setOidType (INT4OID, oatpp::Int32::Class::getType ());
71
+ setOidType (INT8OID, oatpp::Int64::Class::getType ());
72
+
73
+ setOidType (FLOAT4OID, oatpp::Float32::Class::getType ());
74
+ setOidType (FLOAT8OID, oatpp::Float64::Class::getType ());
75
+
76
+ setOidType (BOOLOID, oatpp::Boolean::Class::getType ());
77
+ }
63
78
64
79
}
65
80
@@ -72,12 +87,24 @@ void TypeMapper::setTypeOid(const data::mapping::type::ClassId& classId, Oid oid
72
87
}
73
88
}
74
89
75
- Oid TypeMapper::getTypeOid (data::mapping::type::Type* type) const {
90
+ void TypeMapper::setOidType (Oid oid, const data::mapping::type::Type* type) {
91
+ m_types[oid] = type;
92
+ }
93
+
94
+ Oid TypeMapper::getTypeOid (const data::mapping::type::Type* type) const {
76
95
const v_uint32 id = type->classId .id ;
77
96
if (id < m_oids.size ()) {
78
97
return m_oids[id];
79
98
}
80
99
throw std::runtime_error (" [oatpp::postgresql::mapping::TypeMapper::getTypeOid()]: Error. Unknown classId" );
81
100
}
82
101
102
+ const data::mapping::type::Type* TypeMapper::getOidType (Oid oid) const {
103
+ auto it = m_types.find (oid);
104
+ if (it != m_types.end ()) {
105
+ return it->second ;
106
+ }
107
+ return nullptr ;
108
+ }
109
+
83
110
}}}
0 commit comments