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