1 // Copyright (c) 1999-2018 David Muse
2 // See the file COPYING for more information
3
4 #include <sqlrelay/sqlrserver.h>
5 #include <rudiments/charstring.h>
6
7 class sqlrmoduledataprivate {
8 friend class sqlrmoduledata;
9 private:
10 domnode *_parameters;
11 const char *_moduletype;
12 const char *_id;
13 };
14
sqlrmoduledata(domnode * parameters)15 sqlrmoduledata::sqlrmoduledata(domnode *parameters) {
16 pvt=new sqlrmoduledataprivate;
17 pvt->_parameters=parameters;
18 pvt->_moduletype=parameters->getAttributeValue("module");
19 if (charstring::isNullOrEmpty(pvt->_moduletype)) {
20 pvt->_moduletype=parameters->getAttributeValue("file");
21 }
22 pvt->_id=parameters->getAttributeValue("id");
23 }
24
~sqlrmoduledata()25 sqlrmoduledata::~sqlrmoduledata() {
26 delete pvt;
27 }
28
getModuleType()29 const char *sqlrmoduledata::getModuleType() {
30 return pvt->_moduletype;
31 }
32
getId()33 const char *sqlrmoduledata::getId() {
34 return pvt->_id;
35 }
36
getParameters()37 domnode *sqlrmoduledata::getParameters() {
38 return pvt->_parameters;
39 }
40
closeResultSet(sqlrservercursor * sqlrcur)41 void sqlrmoduledata::closeResultSet(sqlrservercursor *sqlrcur) {
42 }
43
endTransaction(bool commit)44 void sqlrmoduledata::endTransaction(bool commit) {
45 }
46
endSession()47 void sqlrmoduledata::endSession() {
48 }
49
sqlrmoduledata_tag(domnode * parameters)50 sqlrmoduledata_tag::sqlrmoduledata_tag(domnode *parameters) :
51 sqlrmoduledata(parameters) {
52 }
53
~sqlrmoduledata_tag()54 sqlrmoduledata_tag::~sqlrmoduledata_tag() {
55 avltree<dictionarynode<uint16_t, avltree<char *> *> *>
56 *tree=tags.getTree();
57 for (avltreenode<dictionarynode<uint16_t, avltree<char *> *> *>
58 *node=tree->getFirst();
59 node; node=tree->getNext(node)) {
60 node->getValue()->getValue()->clearAndArrayDelete();
61 }
62 tags.clearAndDeleteValues();
63 }
64
addTag(uint16_t cursorid,const char * tag)65 void sqlrmoduledata_tag::addTag(uint16_t cursorid, const char *tag) {
66 avltree<char *> *tree=tags.getValue(cursorid);
67 if (tree && tree->find((char *)tag)) {
68 return;
69 }
70 if (!tree) {
71 tree=new avltree<char *>();
72 tags.setValue(cursorid,tree);
73 }
74 tree->insert(charstring::duplicate(tag));
75 }
76
addTag(uint16_t cursorid,const char * tag,size_t size)77 void sqlrmoduledata_tag::addTag(uint16_t cursorid,
78 const char *tag, size_t size) {
79 avltree<char *> *tree=tags.getValue(cursorid);
80 if (tree && tree->find((char *)tag)) {
81 return;
82 }
83 if (!tree) {
84 tree=new avltree<char *>();
85 tags.setValue(cursorid,tree);
86 }
87 tree->insert(charstring::duplicate(tag,size));
88 }
89
getTags(uint16_t cursorid)90 avltree<char *> *sqlrmoduledata_tag::getTags(uint16_t cursorid) {
91 return tags.getValue(cursorid);
92 }
93
tagExists(uint16_t cursorid,const char * tag)94 bool sqlrmoduledata_tag::tagExists(uint16_t cursorid, const char *tag) {
95 avltree<char *> *tree=tags.getValue(cursorid);
96 return (tree && tree->find((char *)tag));
97 }
98
closeResultSet(sqlrservercursor * sqlrcur)99 void sqlrmoduledata_tag::closeResultSet(sqlrservercursor *sqlrcur) {
100 avltree<char *> *tree=tags.getValue(sqlrcur->getId());
101 if (tree) {
102 tree->clearAndArrayDelete();
103 tags.removeAndDeleteValue(sqlrcur->getId());
104 }
105 }
106