@node-c/persistance-rdb 1.0.0-alpha1 → 1.0.0-alpha3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +864 -0
- package/coverage/common/definitions/common.constants.ts.html +103 -0
- package/coverage/common/definitions/index.html +131 -0
- package/coverage/common/definitions/index.ts.html +88 -0
- package/coverage/coverage-final.json +12 -0
- package/coverage/entityService/index.html +131 -0
- package/coverage/entityService/index.ts.html +91 -0
- package/coverage/entityService/rdb.entity.service.ts.html +1126 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +176 -0
- package/coverage/module/index.html +131 -0
- package/coverage/module/index.ts.html +91 -0
- package/coverage/module/rdb.module.ts.html +241 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/repository/index.html +131 -0
- package/coverage/repository/index.ts.html +91 -0
- package/coverage/repository/rdb.repository.module.ts.html +172 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +196 -0
- package/coverage/sqlQueryBuilder/index.html +146 -0
- package/coverage/sqlQueryBuilder/index.ts.html +94 -0
- package/coverage/sqlQueryBuilder/sqlQueryBuilder.module.ts.html +163 -0
- package/coverage/sqlQueryBuilder/sqlQueryBuilder.service.ts.html +1534 -0
- package/dist/common/definitions/common.constants.js +1 -1
- package/dist/common/definitions/common.constants.js.map +1 -1
- package/dist/entityService/rdb.entity.service.d.ts +5 -5
- package/dist/entityService/rdb.entity.service.definitions.d.ts +6 -6
- package/dist/entityService/rdb.entity.service.definitions.js +1 -1
- package/dist/entityService/rdb.entity.service.definitions.js.map +1 -1
- package/dist/entityService/rdb.entity.service.js +1 -1
- package/dist/entityService/rdb.entity.service.js.map +1 -1
- package/dist/repository/rdb.repository.module.js +2 -2
- package/dist/repository/rdb.repository.module.js.map +1 -1
- package/dist/sqlQueryBuilder/sqlQueryBuilder.module.js +2 -2
- package/dist/sqlQueryBuilder/sqlQueryBuilder.module.js.map +1 -1
- package/dist/sqlQueryBuilder/sqlQueryBuilder.service.d.ts +4 -4
- package/dist/sqlQueryBuilder/sqlQueryBuilder.service.js +17 -16
- package/dist/sqlQueryBuilder/sqlQueryBuilder.service.js.map +1 -1
- package/package.json +2 -4
|
@@ -0,0 +1,1126 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for entityService/rdb.entity.service.ts</title>
|
|
7
|
+
<meta charset="utf-8" />
|
|
8
|
+
<link rel="stylesheet" href="../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
|
|
11
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
|
+
<style type='text/css'>
|
|
13
|
+
.coverage-summary .sorter {
|
|
14
|
+
background-image: url(../sort-arrow-sprite.png);
|
|
15
|
+
}
|
|
16
|
+
</style>
|
|
17
|
+
</head>
|
|
18
|
+
|
|
19
|
+
<body>
|
|
20
|
+
<div class='wrapper'>
|
|
21
|
+
<div class='pad1'>
|
|
22
|
+
<h1><a href="../index.html">All files</a> / <a href="index.html">entityService</a> rdb.entity.service.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">100% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>292/292</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">95.95% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>95/99</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>13/13</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">100% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>292/292</span>
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
</div>
|
|
54
|
+
<p class="quiet">
|
|
55
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
|
+
</p>
|
|
57
|
+
<template id="filterTemplate">
|
|
58
|
+
<div class="quiet">
|
|
59
|
+
Filter:
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
|
+
</div>
|
|
62
|
+
</template>
|
|
63
|
+
</div>
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
|
+
<pre><table class="coverage">
|
|
66
|
+
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
|
+
<a name='L2'></a><a href='#L2'>2</a>
|
|
68
|
+
<a name='L3'></a><a href='#L3'>3</a>
|
|
69
|
+
<a name='L4'></a><a href='#L4'>4</a>
|
|
70
|
+
<a name='L5'></a><a href='#L5'>5</a>
|
|
71
|
+
<a name='L6'></a><a href='#L6'>6</a>
|
|
72
|
+
<a name='L7'></a><a href='#L7'>7</a>
|
|
73
|
+
<a name='L8'></a><a href='#L8'>8</a>
|
|
74
|
+
<a name='L9'></a><a href='#L9'>9</a>
|
|
75
|
+
<a name='L10'></a><a href='#L10'>10</a>
|
|
76
|
+
<a name='L11'></a><a href='#L11'>11</a>
|
|
77
|
+
<a name='L12'></a><a href='#L12'>12</a>
|
|
78
|
+
<a name='L13'></a><a href='#L13'>13</a>
|
|
79
|
+
<a name='L14'></a><a href='#L14'>14</a>
|
|
80
|
+
<a name='L15'></a><a href='#L15'>15</a>
|
|
81
|
+
<a name='L16'></a><a href='#L16'>16</a>
|
|
82
|
+
<a name='L17'></a><a href='#L17'>17</a>
|
|
83
|
+
<a name='L18'></a><a href='#L18'>18</a>
|
|
84
|
+
<a name='L19'></a><a href='#L19'>19</a>
|
|
85
|
+
<a name='L20'></a><a href='#L20'>20</a>
|
|
86
|
+
<a name='L21'></a><a href='#L21'>21</a>
|
|
87
|
+
<a name='L22'></a><a href='#L22'>22</a>
|
|
88
|
+
<a name='L23'></a><a href='#L23'>23</a>
|
|
89
|
+
<a name='L24'></a><a href='#L24'>24</a>
|
|
90
|
+
<a name='L25'></a><a href='#L25'>25</a>
|
|
91
|
+
<a name='L26'></a><a href='#L26'>26</a>
|
|
92
|
+
<a name='L27'></a><a href='#L27'>27</a>
|
|
93
|
+
<a name='L28'></a><a href='#L28'>28</a>
|
|
94
|
+
<a name='L29'></a><a href='#L29'>29</a>
|
|
95
|
+
<a name='L30'></a><a href='#L30'>30</a>
|
|
96
|
+
<a name='L31'></a><a href='#L31'>31</a>
|
|
97
|
+
<a name='L32'></a><a href='#L32'>32</a>
|
|
98
|
+
<a name='L33'></a><a href='#L33'>33</a>
|
|
99
|
+
<a name='L34'></a><a href='#L34'>34</a>
|
|
100
|
+
<a name='L35'></a><a href='#L35'>35</a>
|
|
101
|
+
<a name='L36'></a><a href='#L36'>36</a>
|
|
102
|
+
<a name='L37'></a><a href='#L37'>37</a>
|
|
103
|
+
<a name='L38'></a><a href='#L38'>38</a>
|
|
104
|
+
<a name='L39'></a><a href='#L39'>39</a>
|
|
105
|
+
<a name='L40'></a><a href='#L40'>40</a>
|
|
106
|
+
<a name='L41'></a><a href='#L41'>41</a>
|
|
107
|
+
<a name='L42'></a><a href='#L42'>42</a>
|
|
108
|
+
<a name='L43'></a><a href='#L43'>43</a>
|
|
109
|
+
<a name='L44'></a><a href='#L44'>44</a>
|
|
110
|
+
<a name='L45'></a><a href='#L45'>45</a>
|
|
111
|
+
<a name='L46'></a><a href='#L46'>46</a>
|
|
112
|
+
<a name='L47'></a><a href='#L47'>47</a>
|
|
113
|
+
<a name='L48'></a><a href='#L48'>48</a>
|
|
114
|
+
<a name='L49'></a><a href='#L49'>49</a>
|
|
115
|
+
<a name='L50'></a><a href='#L50'>50</a>
|
|
116
|
+
<a name='L51'></a><a href='#L51'>51</a>
|
|
117
|
+
<a name='L52'></a><a href='#L52'>52</a>
|
|
118
|
+
<a name='L53'></a><a href='#L53'>53</a>
|
|
119
|
+
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
|
+
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
|
+
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a>
|
|
128
|
+
<a name='L63'></a><a href='#L63'>63</a>
|
|
129
|
+
<a name='L64'></a><a href='#L64'>64</a>
|
|
130
|
+
<a name='L65'></a><a href='#L65'>65</a>
|
|
131
|
+
<a name='L66'></a><a href='#L66'>66</a>
|
|
132
|
+
<a name='L67'></a><a href='#L67'>67</a>
|
|
133
|
+
<a name='L68'></a><a href='#L68'>68</a>
|
|
134
|
+
<a name='L69'></a><a href='#L69'>69</a>
|
|
135
|
+
<a name='L70'></a><a href='#L70'>70</a>
|
|
136
|
+
<a name='L71'></a><a href='#L71'>71</a>
|
|
137
|
+
<a name='L72'></a><a href='#L72'>72</a>
|
|
138
|
+
<a name='L73'></a><a href='#L73'>73</a>
|
|
139
|
+
<a name='L74'></a><a href='#L74'>74</a>
|
|
140
|
+
<a name='L75'></a><a href='#L75'>75</a>
|
|
141
|
+
<a name='L76'></a><a href='#L76'>76</a>
|
|
142
|
+
<a name='L77'></a><a href='#L77'>77</a>
|
|
143
|
+
<a name='L78'></a><a href='#L78'>78</a>
|
|
144
|
+
<a name='L79'></a><a href='#L79'>79</a>
|
|
145
|
+
<a name='L80'></a><a href='#L80'>80</a>
|
|
146
|
+
<a name='L81'></a><a href='#L81'>81</a>
|
|
147
|
+
<a name='L82'></a><a href='#L82'>82</a>
|
|
148
|
+
<a name='L83'></a><a href='#L83'>83</a>
|
|
149
|
+
<a name='L84'></a><a href='#L84'>84</a>
|
|
150
|
+
<a name='L85'></a><a href='#L85'>85</a>
|
|
151
|
+
<a name='L86'></a><a href='#L86'>86</a>
|
|
152
|
+
<a name='L87'></a><a href='#L87'>87</a>
|
|
153
|
+
<a name='L88'></a><a href='#L88'>88</a>
|
|
154
|
+
<a name='L89'></a><a href='#L89'>89</a>
|
|
155
|
+
<a name='L90'></a><a href='#L90'>90</a>
|
|
156
|
+
<a name='L91'></a><a href='#L91'>91</a>
|
|
157
|
+
<a name='L92'></a><a href='#L92'>92</a>
|
|
158
|
+
<a name='L93'></a><a href='#L93'>93</a>
|
|
159
|
+
<a name='L94'></a><a href='#L94'>94</a>
|
|
160
|
+
<a name='L95'></a><a href='#L95'>95</a>
|
|
161
|
+
<a name='L96'></a><a href='#L96'>96</a>
|
|
162
|
+
<a name='L97'></a><a href='#L97'>97</a>
|
|
163
|
+
<a name='L98'></a><a href='#L98'>98</a>
|
|
164
|
+
<a name='L99'></a><a href='#L99'>99</a>
|
|
165
|
+
<a name='L100'></a><a href='#L100'>100</a>
|
|
166
|
+
<a name='L101'></a><a href='#L101'>101</a>
|
|
167
|
+
<a name='L102'></a><a href='#L102'>102</a>
|
|
168
|
+
<a name='L103'></a><a href='#L103'>103</a>
|
|
169
|
+
<a name='L104'></a><a href='#L104'>104</a>
|
|
170
|
+
<a name='L105'></a><a href='#L105'>105</a>
|
|
171
|
+
<a name='L106'></a><a href='#L106'>106</a>
|
|
172
|
+
<a name='L107'></a><a href='#L107'>107</a>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
+
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
+
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
+
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
+
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
+
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
+
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
+
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
+
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
+
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
+
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
+
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
+
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
+
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
+
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
+
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
+
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
+
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
+
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
+
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
+
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
+
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
+
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
+
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
+
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
+
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
+
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
+
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
+
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
+
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
+
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
+
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
+
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
+
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
+
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
+
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
+
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
+
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
+
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
+
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
+
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
+
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
+
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
+
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
+
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
+
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
+
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
+
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
+
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
+
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
+
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
+
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
+
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
+
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
+
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
+
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
+
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
+
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
+
<a name='L322'></a><a href='#L322'>322</a>
|
|
388
|
+
<a name='L323'></a><a href='#L323'>323</a>
|
|
389
|
+
<a name='L324'></a><a href='#L324'>324</a>
|
|
390
|
+
<a name='L325'></a><a href='#L325'>325</a>
|
|
391
|
+
<a name='L326'></a><a href='#L326'>326</a>
|
|
392
|
+
<a name='L327'></a><a href='#L327'>327</a>
|
|
393
|
+
<a name='L328'></a><a href='#L328'>328</a>
|
|
394
|
+
<a name='L329'></a><a href='#L329'>329</a>
|
|
395
|
+
<a name='L330'></a><a href='#L330'>330</a>
|
|
396
|
+
<a name='L331'></a><a href='#L331'>331</a>
|
|
397
|
+
<a name='L332'></a><a href='#L332'>332</a>
|
|
398
|
+
<a name='L333'></a><a href='#L333'>333</a>
|
|
399
|
+
<a name='L334'></a><a href='#L334'>334</a>
|
|
400
|
+
<a name='L335'></a><a href='#L335'>335</a>
|
|
401
|
+
<a name='L336'></a><a href='#L336'>336</a>
|
|
402
|
+
<a name='L337'></a><a href='#L337'>337</a>
|
|
403
|
+
<a name='L338'></a><a href='#L338'>338</a>
|
|
404
|
+
<a name='L339'></a><a href='#L339'>339</a>
|
|
405
|
+
<a name='L340'></a><a href='#L340'>340</a>
|
|
406
|
+
<a name='L341'></a><a href='#L341'>341</a>
|
|
407
|
+
<a name='L342'></a><a href='#L342'>342</a>
|
|
408
|
+
<a name='L343'></a><a href='#L343'>343</a>
|
|
409
|
+
<a name='L344'></a><a href='#L344'>344</a>
|
|
410
|
+
<a name='L345'></a><a href='#L345'>345</a>
|
|
411
|
+
<a name='L346'></a><a href='#L346'>346</a>
|
|
412
|
+
<a name='L347'></a><a href='#L347'>347</a>
|
|
413
|
+
<a name='L348'></a><a href='#L348'>348</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
414
|
+
<span class="cline-any cline-neutral"> </span>
|
|
415
|
+
<span class="cline-any cline-neutral"> </span>
|
|
416
|
+
<span class="cline-any cline-neutral"> </span>
|
|
417
|
+
<span class="cline-any cline-neutral"> </span>
|
|
418
|
+
<span class="cline-any cline-neutral"> </span>
|
|
419
|
+
<span class="cline-any cline-neutral"> </span>
|
|
420
|
+
<span class="cline-any cline-neutral"> </span>
|
|
421
|
+
<span class="cline-any cline-neutral"> </span>
|
|
422
|
+
<span class="cline-any cline-neutral"> </span>
|
|
423
|
+
<span class="cline-any cline-neutral"> </span>
|
|
424
|
+
<span class="cline-any cline-neutral"> </span>
|
|
425
|
+
<span class="cline-any cline-neutral"> </span>
|
|
426
|
+
<span class="cline-any cline-neutral"> </span>
|
|
427
|
+
<span class="cline-any cline-yes">1x</span>
|
|
428
|
+
<span class="cline-any cline-neutral"> </span>
|
|
429
|
+
<span class="cline-any cline-neutral"> </span>
|
|
430
|
+
<span class="cline-any cline-neutral"> </span>
|
|
431
|
+
<span class="cline-any cline-neutral"> </span>
|
|
432
|
+
<span class="cline-any cline-neutral"> </span>
|
|
433
|
+
<span class="cline-any cline-neutral"> </span>
|
|
434
|
+
<span class="cline-any cline-neutral"> </span>
|
|
435
|
+
<span class="cline-any cline-neutral"> </span>
|
|
436
|
+
<span class="cline-any cline-neutral"> </span>
|
|
437
|
+
<span class="cline-any cline-neutral"> </span>
|
|
438
|
+
<span class="cline-any cline-neutral"> </span>
|
|
439
|
+
<span class="cline-any cline-neutral"> </span>
|
|
440
|
+
<span class="cline-any cline-neutral"> </span>
|
|
441
|
+
<span class="cline-any cline-neutral"> </span>
|
|
442
|
+
<span class="cline-any cline-neutral"> </span>
|
|
443
|
+
<span class="cline-any cline-neutral"> </span>
|
|
444
|
+
<span class="cline-any cline-neutral"> </span>
|
|
445
|
+
<span class="cline-any cline-yes">1x</span>
|
|
446
|
+
<span class="cline-any cline-neutral"> </span>
|
|
447
|
+
<span class="cline-any cline-neutral"> </span>
|
|
448
|
+
<span class="cline-any cline-yes">1x</span>
|
|
449
|
+
<span class="cline-any cline-neutral"> </span>
|
|
450
|
+
<span class="cline-any cline-yes">43x</span>
|
|
451
|
+
<span class="cline-any cline-neutral"> </span>
|
|
452
|
+
<span class="cline-any cline-yes">43x</span>
|
|
453
|
+
<span class="cline-any cline-yes">43x</span>
|
|
454
|
+
<span class="cline-any cline-yes">43x</span>
|
|
455
|
+
<span class="cline-any cline-yes">43x</span>
|
|
456
|
+
<span class="cline-any cline-yes">43x</span>
|
|
457
|
+
<span class="cline-any cline-yes">43x</span>
|
|
458
|
+
<span class="cline-any cline-yes">43x</span>
|
|
459
|
+
<span class="cline-any cline-yes">88x</span>
|
|
460
|
+
<span class="cline-any cline-yes">44x</span>
|
|
461
|
+
<span class="cline-any cline-yes">44x</span>
|
|
462
|
+
<span class="cline-any cline-yes">88x</span>
|
|
463
|
+
<span class="cline-any cline-yes">43x</span>
|
|
464
|
+
<span class="cline-any cline-yes">43x</span>
|
|
465
|
+
<span class="cline-any cline-neutral"> </span>
|
|
466
|
+
<span class="cline-any cline-yes">1x</span>
|
|
467
|
+
<span class="cline-any cline-yes">6x</span>
|
|
468
|
+
<span class="cline-any cline-yes">6x</span>
|
|
469
|
+
<span class="cline-any cline-yes">6x</span>
|
|
470
|
+
<span class="cline-any cline-yes">6x</span>
|
|
471
|
+
<span class="cline-any cline-yes">5x</span>
|
|
472
|
+
<span class="cline-any cline-yes">5x</span>
|
|
473
|
+
<span class="cline-any cline-yes">5x</span>
|
|
474
|
+
<span class="cline-any cline-yes">5x</span>
|
|
475
|
+
<span class="cline-any cline-yes">5x</span>
|
|
476
|
+
<span class="cline-any cline-yes">5x</span>
|
|
477
|
+
<span class="cline-any cline-yes">5x</span>
|
|
478
|
+
<span class="cline-any cline-yes">5x</span>
|
|
479
|
+
<span class="cline-any cline-yes">5x</span>
|
|
480
|
+
<span class="cline-any cline-yes">1x</span>
|
|
481
|
+
<span class="cline-any cline-yes">1x</span>
|
|
482
|
+
<span class="cline-any cline-yes">1x</span>
|
|
483
|
+
<span class="cline-any cline-yes">2x</span>
|
|
484
|
+
<span class="cline-any cline-yes">2x</span>
|
|
485
|
+
<span class="cline-any cline-yes">4x</span>
|
|
486
|
+
<span class="cline-any cline-yes">4x</span>
|
|
487
|
+
<span class="cline-any cline-yes">4x</span>
|
|
488
|
+
<span class="cline-any cline-yes">2x</span>
|
|
489
|
+
<span class="cline-any cline-yes">2x</span>
|
|
490
|
+
<span class="cline-any cline-yes">1x</span>
|
|
491
|
+
<span class="cline-any cline-yes">1x</span>
|
|
492
|
+
<span class="cline-any cline-yes">6x</span>
|
|
493
|
+
<span class="cline-any cline-neutral"> </span>
|
|
494
|
+
<span class="cline-any cline-yes">1x</span>
|
|
495
|
+
<span class="cline-any cline-yes">3x</span>
|
|
496
|
+
<span class="cline-any cline-yes">3x</span>
|
|
497
|
+
<span class="cline-any cline-yes">3x</span>
|
|
498
|
+
<span class="cline-any cline-yes">1x</span>
|
|
499
|
+
<span class="cline-any cline-yes">1x</span>
|
|
500
|
+
<span class="cline-any cline-yes">1x</span>
|
|
501
|
+
<span class="cline-any cline-yes">1x</span>
|
|
502
|
+
<span class="cline-any cline-yes">2x</span>
|
|
503
|
+
<span class="cline-any cline-yes">3x</span>
|
|
504
|
+
<span class="cline-any cline-neutral"> </span>
|
|
505
|
+
<span class="cline-any cline-yes">1x</span>
|
|
506
|
+
<span class="cline-any cline-yes">6x</span>
|
|
507
|
+
<span class="cline-any cline-yes">6x</span>
|
|
508
|
+
<span class="cline-any cline-yes">6x</span>
|
|
509
|
+
<span class="cline-any cline-yes">1x</span>
|
|
510
|
+
<span class="cline-any cline-yes">1x</span>
|
|
511
|
+
<span class="cline-any cline-yes">1x</span>
|
|
512
|
+
<span class="cline-any cline-yes">1x</span>
|
|
513
|
+
<span class="cline-any cline-yes">5x</span>
|
|
514
|
+
<span class="cline-any cline-yes">5x</span>
|
|
515
|
+
<span class="cline-any cline-yes">6x</span>
|
|
516
|
+
<span class="cline-any cline-yes">3x</span>
|
|
517
|
+
<span class="cline-any cline-yes">3x</span>
|
|
518
|
+
<span class="cline-any cline-yes">2x</span>
|
|
519
|
+
<span class="cline-any cline-yes">2x</span>
|
|
520
|
+
<span class="cline-any cline-yes">2x</span>
|
|
521
|
+
<span class="cline-any cline-yes">2x</span>
|
|
522
|
+
<span class="cline-any cline-yes">2x</span>
|
|
523
|
+
<span class="cline-any cline-yes">2x</span>
|
|
524
|
+
<span class="cline-any cline-yes">1x</span>
|
|
525
|
+
<span class="cline-any cline-yes">1x</span>
|
|
526
|
+
<span class="cline-any cline-yes">6x</span>
|
|
527
|
+
<span class="cline-any cline-neutral"> </span>
|
|
528
|
+
<span class="cline-any cline-yes">1x</span>
|
|
529
|
+
<span class="cline-any cline-yes">3x</span>
|
|
530
|
+
<span class="cline-any cline-yes">3x</span>
|
|
531
|
+
<span class="cline-any cline-yes">1x</span>
|
|
532
|
+
<span class="cline-any cline-yes">1x</span>
|
|
533
|
+
<span class="cline-any cline-yes">1x</span>
|
|
534
|
+
<span class="cline-any cline-yes">1x</span>
|
|
535
|
+
<span class="cline-any cline-yes">2x</span>
|
|
536
|
+
<span class="cline-any cline-yes">2x</span>
|
|
537
|
+
<span class="cline-any cline-yes">2x</span>
|
|
538
|
+
<span class="cline-any cline-yes">2x</span>
|
|
539
|
+
<span class="cline-any cline-yes">2x</span>
|
|
540
|
+
<span class="cline-any cline-yes">2x</span>
|
|
541
|
+
<span class="cline-any cline-yes">2x</span>
|
|
542
|
+
<span class="cline-any cline-yes">3x</span>
|
|
543
|
+
<span class="cline-any cline-neutral"> </span>
|
|
544
|
+
<span class="cline-any cline-yes">1x</span>
|
|
545
|
+
<span class="cline-any cline-yes">5x</span>
|
|
546
|
+
<span class="cline-any cline-yes">5x</span>
|
|
547
|
+
<span class="cline-any cline-yes">1x</span>
|
|
548
|
+
<span class="cline-any cline-yes">1x</span>
|
|
549
|
+
<span class="cline-any cline-yes">1x</span>
|
|
550
|
+
<span class="cline-any cline-yes">1x</span>
|
|
551
|
+
<span class="cline-any cline-yes">4x</span>
|
|
552
|
+
<span class="cline-any cline-yes">4x</span>
|
|
553
|
+
<span class="cline-any cline-yes">5x</span>
|
|
554
|
+
<span class="cline-any cline-yes">5x</span>
|
|
555
|
+
<span class="cline-any cline-yes">5x</span>
|
|
556
|
+
<span class="cline-any cline-yes">5x</span>
|
|
557
|
+
<span class="cline-any cline-yes">5x</span>
|
|
558
|
+
<span class="cline-any cline-yes">1x</span>
|
|
559
|
+
<span class="cline-any cline-yes">1x</span>
|
|
560
|
+
<span class="cline-any cline-yes">1x</span>
|
|
561
|
+
<span class="cline-any cline-yes">5x</span>
|
|
562
|
+
<span class="cline-any cline-yes">3x</span>
|
|
563
|
+
<span class="cline-any cline-yes">3x</span>
|
|
564
|
+
<span class="cline-any cline-yes">4x</span>
|
|
565
|
+
<span class="cline-any cline-yes">4x</span>
|
|
566
|
+
<span class="cline-any cline-yes">5x</span>
|
|
567
|
+
<span class="cline-any cline-yes">5x</span>
|
|
568
|
+
<span class="cline-any cline-neutral"> </span>
|
|
569
|
+
<span class="cline-any cline-yes">1x</span>
|
|
570
|
+
<span class="cline-any cline-yes">8x</span>
|
|
571
|
+
<span class="cline-any cline-yes">8x</span>
|
|
572
|
+
<span class="cline-any cline-yes">8x</span>
|
|
573
|
+
<span class="cline-any cline-yes">8x</span>
|
|
574
|
+
<span class="cline-any cline-yes">8x</span>
|
|
575
|
+
<span class="cline-any cline-yes">8x</span>
|
|
576
|
+
<span class="cline-any cline-yes">8x</span>
|
|
577
|
+
<span class="cline-any cline-yes">8x</span>
|
|
578
|
+
<span class="cline-any cline-yes">8x</span>
|
|
579
|
+
<span class="cline-any cline-yes">8x</span>
|
|
580
|
+
<span class="cline-any cline-yes">8x</span>
|
|
581
|
+
<span class="cline-any cline-yes">8x</span>
|
|
582
|
+
<span class="cline-any cline-yes">1x</span>
|
|
583
|
+
<span class="cline-any cline-yes">1x</span>
|
|
584
|
+
<span class="cline-any cline-yes">1x</span>
|
|
585
|
+
<span class="cline-any cline-yes">1x</span>
|
|
586
|
+
<span class="cline-any cline-yes">8x</span>
|
|
587
|
+
<span class="cline-any cline-yes">8x</span>
|
|
588
|
+
<span class="cline-any cline-yes">8x</span>
|
|
589
|
+
<span class="cline-any cline-yes">8x</span>
|
|
590
|
+
<span class="cline-any cline-yes">8x</span>
|
|
591
|
+
<span class="cline-any cline-yes">8x</span>
|
|
592
|
+
<span class="cline-any cline-yes">8x</span>
|
|
593
|
+
<span class="cline-any cline-yes">8x</span>
|
|
594
|
+
<span class="cline-any cline-yes">8x</span>
|
|
595
|
+
<span class="cline-any cline-yes">8x</span>
|
|
596
|
+
<span class="cline-any cline-yes">8x</span>
|
|
597
|
+
<span class="cline-any cline-yes">7x</span>
|
|
598
|
+
<span class="cline-any cline-yes">7x</span>
|
|
599
|
+
<span class="cline-any cline-yes">7x</span>
|
|
600
|
+
<span class="cline-any cline-yes">7x</span>
|
|
601
|
+
<span class="cline-any cline-yes">8x</span>
|
|
602
|
+
<span class="cline-any cline-yes">8x</span>
|
|
603
|
+
<span class="cline-any cline-yes">1x</span>
|
|
604
|
+
<span class="cline-any cline-yes">1x</span>
|
|
605
|
+
<span class="cline-any cline-yes">1x</span>
|
|
606
|
+
<span class="cline-any cline-yes">1x</span>
|
|
607
|
+
<span class="cline-any cline-yes">7x</span>
|
|
608
|
+
<span class="cline-any cline-yes">8x</span>
|
|
609
|
+
<span class="cline-any cline-yes">6x</span>
|
|
610
|
+
<span class="cline-any cline-yes">6x</span>
|
|
611
|
+
<span class="cline-any cline-yes">6x</span>
|
|
612
|
+
<span class="cline-any cline-yes">6x</span>
|
|
613
|
+
<span class="cline-any cline-yes">7x</span>
|
|
614
|
+
<span class="cline-any cline-yes">8x</span>
|
|
615
|
+
<span class="cline-any cline-yes">1x</span>
|
|
616
|
+
<span class="cline-any cline-yes">8x</span>
|
|
617
|
+
<span class="cline-any cline-yes">2x</span>
|
|
618
|
+
<span class="cline-any cline-yes">2x</span>
|
|
619
|
+
<span class="cline-any cline-yes">2x</span>
|
|
620
|
+
<span class="cline-any cline-yes">7x</span>
|
|
621
|
+
<span class="cline-any cline-yes">7x</span>
|
|
622
|
+
<span class="cline-any cline-yes">8x</span>
|
|
623
|
+
<span class="cline-any cline-neutral"> </span>
|
|
624
|
+
<span class="cline-any cline-yes">1x</span>
|
|
625
|
+
<span class="cline-any cline-yes">5x</span>
|
|
626
|
+
<span class="cline-any cline-yes">5x</span>
|
|
627
|
+
<span class="cline-any cline-yes">5x</span>
|
|
628
|
+
<span class="cline-any cline-yes">5x</span>
|
|
629
|
+
<span class="cline-any cline-yes">5x</span>
|
|
630
|
+
<span class="cline-any cline-yes">5x</span>
|
|
631
|
+
<span class="cline-any cline-yes">5x</span>
|
|
632
|
+
<span class="cline-any cline-yes">5x</span>
|
|
633
|
+
<span class="cline-any cline-yes">5x</span>
|
|
634
|
+
<span class="cline-any cline-yes">5x</span>
|
|
635
|
+
<span class="cline-any cline-yes">1x</span>
|
|
636
|
+
<span class="cline-any cline-yes">1x</span>
|
|
637
|
+
<span class="cline-any cline-yes">1x</span>
|
|
638
|
+
<span class="cline-any cline-yes">1x</span>
|
|
639
|
+
<span class="cline-any cline-yes">4x</span>
|
|
640
|
+
<span class="cline-any cline-yes">4x</span>
|
|
641
|
+
<span class="cline-any cline-yes">4x</span>
|
|
642
|
+
<span class="cline-any cline-yes">4x</span>
|
|
643
|
+
<span class="cline-any cline-yes">4x</span>
|
|
644
|
+
<span class="cline-any cline-yes">4x</span>
|
|
645
|
+
<span class="cline-any cline-yes">4x</span>
|
|
646
|
+
<span class="cline-any cline-yes">5x</span>
|
|
647
|
+
<span class="cline-any cline-yes">5x</span>
|
|
648
|
+
<span class="cline-any cline-yes">5x</span>
|
|
649
|
+
<span class="cline-any cline-yes">1x</span>
|
|
650
|
+
<span class="cline-any cline-yes">1x</span>
|
|
651
|
+
<span class="cline-any cline-yes">1x</span>
|
|
652
|
+
<span class="cline-any cline-yes">4x</span>
|
|
653
|
+
<span class="cline-any cline-yes">4x</span>
|
|
654
|
+
<span class="cline-any cline-yes">5x</span>
|
|
655
|
+
<span class="cline-any cline-neutral"> </span>
|
|
656
|
+
<span class="cline-any cline-yes">1x</span>
|
|
657
|
+
<span class="cline-any cline-yes">1x</span>
|
|
658
|
+
<span class="cline-any cline-yes">1x</span>
|
|
659
|
+
<span class="cline-any cline-neutral"> </span>
|
|
660
|
+
<span class="cline-any cline-yes">1x</span>
|
|
661
|
+
<span class="cline-any cline-yes">23x</span>
|
|
662
|
+
<span class="cline-any cline-yes">22x</span>
|
|
663
|
+
<span class="cline-any cline-yes">22x</span>
|
|
664
|
+
<span class="cline-any cline-yes">1x</span>
|
|
665
|
+
<span class="cline-any cline-yes">23x</span>
|
|
666
|
+
<span class="cline-any cline-neutral"> </span>
|
|
667
|
+
<span class="cline-any cline-neutral"> </span>
|
|
668
|
+
<span class="cline-any cline-neutral"> </span>
|
|
669
|
+
<span class="cline-any cline-yes">1x</span>
|
|
670
|
+
<span class="cline-any cline-yes">6x</span>
|
|
671
|
+
<span class="cline-any cline-neutral"> </span>
|
|
672
|
+
<span class="cline-any cline-neutral"> </span>
|
|
673
|
+
<span class="cline-any cline-neutral"> </span>
|
|
674
|
+
<span class="cline-any cline-neutral"> </span>
|
|
675
|
+
<span class="cline-any cline-neutral"> </span>
|
|
676
|
+
<span class="cline-any cline-neutral"> </span>
|
|
677
|
+
<span class="cline-any cline-yes">6x</span>
|
|
678
|
+
<span class="cline-any cline-yes">6x</span>
|
|
679
|
+
<span class="cline-any cline-yes">6x</span>
|
|
680
|
+
<span class="cline-any cline-yes">6x</span>
|
|
681
|
+
<span class="cline-any cline-yes">6x</span>
|
|
682
|
+
<span class="cline-any cline-neutral"> </span>
|
|
683
|
+
<span class="cline-any cline-yes">6x</span>
|
|
684
|
+
<span class="cline-any cline-yes">1x</span>
|
|
685
|
+
<span class="cline-any cline-yes">1x</span>
|
|
686
|
+
<span class="cline-any cline-yes">1x</span>
|
|
687
|
+
<span class="cline-any cline-yes">1x</span>
|
|
688
|
+
<span class="cline-any cline-yes">5x</span>
|
|
689
|
+
<span class="cline-any cline-yes">5x</span>
|
|
690
|
+
<span class="cline-any cline-yes">5x</span>
|
|
691
|
+
<span class="cline-any cline-yes">5x</span>
|
|
692
|
+
<span class="cline-any cline-yes">5x</span>
|
|
693
|
+
<span class="cline-any cline-yes">5x</span>
|
|
694
|
+
<span class="cline-any cline-yes">6x</span>
|
|
695
|
+
<span class="cline-any cline-yes">6x</span>
|
|
696
|
+
<span class="cline-any cline-yes">3x</span>
|
|
697
|
+
<span class="cline-any cline-yes">1x</span>
|
|
698
|
+
<span class="cline-any cline-yes">3x</span>
|
|
699
|
+
<span class="cline-any cline-yes">2x</span>
|
|
700
|
+
<span class="cline-any cline-yes">2x</span>
|
|
701
|
+
<span class="cline-any cline-yes">3x</span>
|
|
702
|
+
<span class="cline-any cline-yes">3x</span>
|
|
703
|
+
<span class="cline-any cline-yes">3x</span>
|
|
704
|
+
<span class="cline-any cline-yes">6x</span>
|
|
705
|
+
<span class="cline-any cline-yes">1x</span>
|
|
706
|
+
<span class="cline-any cline-yes">6x</span>
|
|
707
|
+
<span class="cline-any cline-yes">2x</span>
|
|
708
|
+
<span class="cline-any cline-yes">2x</span>
|
|
709
|
+
<span class="cline-any cline-yes">3x</span>
|
|
710
|
+
<span class="cline-any cline-yes">5x</span>
|
|
711
|
+
<span class="cline-any cline-yes">6x</span>
|
|
712
|
+
<span class="cline-any cline-yes">2x</span>
|
|
713
|
+
<span class="cline-any cline-yes">2x</span>
|
|
714
|
+
<span class="cline-any cline-yes">6x</span>
|
|
715
|
+
<span class="cline-any cline-yes">2x</span>
|
|
716
|
+
<span class="cline-any cline-yes">2x</span>
|
|
717
|
+
<span class="cline-any cline-yes">6x</span>
|
|
718
|
+
<span class="cline-any cline-neutral"> </span>
|
|
719
|
+
<span class="cline-any cline-yes">1x</span>
|
|
720
|
+
<span class="cline-any cline-yes">2x</span>
|
|
721
|
+
<span class="cline-any cline-yes">2x</span>
|
|
722
|
+
<span class="cline-any cline-yes">2x</span>
|
|
723
|
+
<span class="cline-any cline-yes">2x</span>
|
|
724
|
+
<span class="cline-any cline-yes">1x</span>
|
|
725
|
+
<span class="cline-any cline-yes">1x</span>
|
|
726
|
+
<span class="cline-any cline-yes">1x</span>
|
|
727
|
+
<span class="cline-any cline-yes">2x</span>
|
|
728
|
+
<span class="cline-any cline-neutral"> </span>
|
|
729
|
+
<span class="cline-any cline-yes">1x</span>
|
|
730
|
+
<span class="cline-any cline-yes">5x</span>
|
|
731
|
+
<span class="cline-any cline-yes">5x</span>
|
|
732
|
+
<span class="cline-any cline-yes">1x</span>
|
|
733
|
+
<span class="cline-any cline-yes">1x</span>
|
|
734
|
+
<span class="cline-any cline-yes">1x</span>
|
|
735
|
+
<span class="cline-any cline-yes">1x</span>
|
|
736
|
+
<span class="cline-any cline-yes">4x</span>
|
|
737
|
+
<span class="cline-any cline-yes">4x</span>
|
|
738
|
+
<span class="cline-any cline-yes">4x</span>
|
|
739
|
+
<span class="cline-any cline-yes">4x</span>
|
|
740
|
+
<span class="cline-any cline-yes">4x</span>
|
|
741
|
+
<span class="cline-any cline-yes">4x</span>
|
|
742
|
+
<span class="cline-any cline-yes">4x</span>
|
|
743
|
+
<span class="cline-any cline-yes">4x</span>
|
|
744
|
+
<span class="cline-any cline-yes">5x</span>
|
|
745
|
+
<span class="cline-any cline-yes">2x</span>
|
|
746
|
+
<span class="cline-any cline-yes">2x</span>
|
|
747
|
+
<span class="cline-any cline-yes">2x</span>
|
|
748
|
+
<span class="cline-any cline-yes">2x</span>
|
|
749
|
+
<span class="cline-any cline-yes">2x</span>
|
|
750
|
+
<span class="cline-any cline-yes">2x</span>
|
|
751
|
+
<span class="cline-any cline-yes">4x</span>
|
|
752
|
+
<span class="cline-any cline-yes">5x</span>
|
|
753
|
+
<span class="cline-any cline-yes">1x</span>
|
|
754
|
+
<span class="cline-any cline-yes">1x</span>
|
|
755
|
+
<span class="cline-any cline-yes">1x</span>
|
|
756
|
+
<span class="cline-any cline-yes">3x</span>
|
|
757
|
+
<span class="cline-any cline-yes">5x</span>
|
|
758
|
+
<span class="cline-any cline-yes">5x</span>
|
|
759
|
+
<span class="cline-any cline-yes">1x</span>
|
|
760
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import {
|
|
761
|
+
ApplicationError,
|
|
762
|
+
GenericObject,
|
|
763
|
+
PersistanceDeleteResult,
|
|
764
|
+
PersistanceEntityService,
|
|
765
|
+
PersistanceFindResults,
|
|
766
|
+
PersistanceNumberItem,
|
|
767
|
+
PersistanceSelectOperator,
|
|
768
|
+
PersistanceUpdateResult
|
|
769
|
+
} from '@node-c/core';
|
|
770
|
+
|
|
771
|
+
import { DeepPartial, EntityManager, EntitySchema, EntityTarget, ObjectLiteral, Repository } from 'typeorm';
|
|
772
|
+
import { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity';
|
|
773
|
+
|
|
774
|
+
import {
|
|
775
|
+
BulkCreateOptions,
|
|
776
|
+
CountOptions,
|
|
777
|
+
CreateOptions,
|
|
778
|
+
DeleteOptions,
|
|
779
|
+
FindOneOptions,
|
|
780
|
+
FindOptions,
|
|
781
|
+
PostgresErrorCode,
|
|
782
|
+
UpdateOptions
|
|
783
|
+
} from './rdb.entity.service.definitions';
|
|
784
|
+
|
|
785
|
+
import { IncludeItems, OrderBy, ParsedFilter, SQLQueryBuilderService } from '../sqlQueryBuilder';
|
|
786
|
+
|
|
787
|
+
// TODO: investigate whether it's worth it to make the create, bulkCreate and update methods more specific
|
|
788
|
+
// with generic data objects for the data passed to them
|
|
789
|
+
// TODO: support for the "select" options in find and findOne (a.k.a. which fields to return)
|
|
790
|
+
// TODO: enforce the above to be always set to the primary key for the count method
|
|
791
|
+
// TODO: support update of multiple items in the update method
|
|
792
|
+
export class RDBEntityService<Entity extends ObjectLiteral> extends PersistanceEntityService<Entity> {
|
|
793
|
+
protected primaryKeys: string[];
|
|
794
|
+
|
|
795
|
+
constructor(
|
|
796
|
+
// eslint-disable-next-line no-unused-vars
|
|
797
|
+
protected qb: SQLQueryBuilderService,
|
|
798
|
+
// eslint-disable-next-line no-unused-vars
|
|
799
|
+
protected repository: Repository<Entity>,
|
|
800
|
+
protected schema: EntitySchema
|
|
801
|
+
) {
|
|
802
|
+
super();
|
|
803
|
+
const { columns } = schema.options;
|
|
804
|
+
const primaryKeys: string[] = [];
|
|
805
|
+
for (const columnName in columns) {
|
|
806
|
+
if (columns[columnName]?.primary) {
|
|
807
|
+
primaryKeys.push(columnName);
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
this.primaryKeys = primaryKeys;
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
protected buildPrimaryKeyWhereClause(data: Entity[]): { field: string; value: ParsedFilter } {
|
|
814
|
+
const { primaryKeys, qb, repository } = this;
|
|
815
|
+
const { columnQuotesSymbol: cqs } = qb;
|
|
816
|
+
const tableName = repository.metadata.tableName;
|
|
817
|
+
if (primaryKeys.length === 1) {
|
|
818
|
+
const [primaryKey] = primaryKeys;
|
|
819
|
+
return {
|
|
820
|
+
field: primaryKey,
|
|
821
|
+
value: {
|
|
822
|
+
params: { [primaryKey]: data.map(item => item[primaryKey]) },
|
|
823
|
+
query: `${cqs}${tableName}${cqs}.${cqs}${primaryKey}${cqs} in :${primaryKey}`
|
|
824
|
+
}
|
|
825
|
+
};
|
|
826
|
+
}
|
|
827
|
+
const params: GenericObject<unknown> = {};
|
|
828
|
+
const query: string[] = [];
|
|
829
|
+
data.forEach((item, itemIndex) => {
|
|
830
|
+
const innerQuery: string[] = [];
|
|
831
|
+
primaryKeys.forEach(fieldName => {
|
|
832
|
+
const primaryKeyName = `${fieldName}${itemIndex}`;
|
|
833
|
+
params[primaryKeyName] = item[fieldName];
|
|
834
|
+
innerQuery.push(`${cqs}${tableName}${cqs}.${cqs}${fieldName}${cqs} = :${primaryKeyName}`);
|
|
835
|
+
});
|
|
836
|
+
query.push(`(${innerQuery.join(' and ')})`);
|
|
837
|
+
});
|
|
838
|
+
return { field: PersistanceSelectOperator.Or, value: { params, query: `(${query.join(' or ')})` } };
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
async bulkCreate(data: Entity[], options?: BulkCreateOptions): Promise<Entity[]> {
|
|
842
|
+
const actualOptions = Object.assign(<span class="branch-0 cbranch-no" title="branch not covered" >options || {})</span> as BulkCreateOptions;
|
|
843
|
+
const { forceTransaction, transactionManager } = actualOptions;
|
|
844
|
+
if (!transactionManager && forceTransaction) {
|
|
845
|
+
return this.repository.manager.transaction(tm => {
|
|
846
|
+
return this.bulkCreate(data, { ...actualOptions, transactionManager: tm });
|
|
847
|
+
});
|
|
848
|
+
}
|
|
849
|
+
return await this.save(data, transactionManager);
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
async create(data: Entity, options?: CreateOptions): Promise<Entity> {
|
|
853
|
+
const actualOptions = Object.assign(<span class="branch-0 cbranch-no" title="branch not covered" >options || {})</span> as CreateOptions;
|
|
854
|
+
const { forceTransaction, transactionManager } = actualOptions;
|
|
855
|
+
if (!transactionManager && forceTransaction) {
|
|
856
|
+
return this.repository.manager.transaction(tm => {
|
|
857
|
+
return this.create(data, { ...actualOptions, transactionManager: tm });
|
|
858
|
+
});
|
|
859
|
+
}
|
|
860
|
+
try {
|
|
861
|
+
return await this.save(data, transactionManager);
|
|
862
|
+
} catch (e) {
|
|
863
|
+
const error = e as Record<string, unknown>;
|
|
864
|
+
if (error.code === PostgresErrorCode.UniqueViolation) {
|
|
865
|
+
const extractVariableName = new RegExp(/^Key \((.*)\)\=(.*)$/g);
|
|
866
|
+
const result = extractVariableName.exec(error.detail as string);
|
|
867
|
+
throw new ApplicationError(
|
|
868
|
+
`${error.table}: ${result ? result[1] : 'a column value you have provided'} needs to be unique`
|
|
869
|
+
);
|
|
870
|
+
}
|
|
871
|
+
throw e;
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
async count(options: CountOptions): Promise<number | undefined> {
|
|
876
|
+
const { filters, forceTransaction, transactionManager, withDeleted = false } = options;
|
|
877
|
+
if (!transactionManager && forceTransaction) {
|
|
878
|
+
return this.repository.manager.transaction(tm => {
|
|
879
|
+
return this.count({ ...options, transactionManager: tm });
|
|
880
|
+
});
|
|
881
|
+
}
|
|
882
|
+
const entityName = this.repository.metadata.name;
|
|
883
|
+
const tableName = this.repository.metadata.name;
|
|
884
|
+
const queryBuilder = this.getRepository(transactionManager).createQueryBuilder(entityName);
|
|
885
|
+
const { where, include: includeFromFilters } = this.qb.parseFilters(tableName, filters!);
|
|
886
|
+
const include = this.qb.parseRelations(tableName, [], includeFromFilters);
|
|
887
|
+
this.qb.buildQuery<Entity>(queryBuilder, { where, include, withDeleted });
|
|
888
|
+
return await queryBuilder.getCount();
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
async delete(options: DeleteOptions): Promise<PersistanceDeleteResult> {
|
|
892
|
+
const { filters, forceTransaction, transactionManager, softDelete = true } = options;
|
|
893
|
+
if (!transactionManager && forceTransaction) {
|
|
894
|
+
return this.repository.manager.transaction(tm => {
|
|
895
|
+
return this.delete({ ...options, transactionManager: tm });
|
|
896
|
+
});
|
|
897
|
+
}
|
|
898
|
+
const entityName = this.repository.metadata.name;
|
|
899
|
+
const tableName = this.repository.metadata.tableName;
|
|
900
|
+
const deleteType = softDelete ? 'softDelete' : 'delete';
|
|
901
|
+
const queryBuilder = this.getRepository(transactionManager).createQueryBuilder(entityName)[deleteType]();
|
|
902
|
+
const { where: parsedWhere, include } = this.qb.parseFilters(tableName, filters);
|
|
903
|
+
let where: { [fieldName: string]: ParsedFilter } = {};
|
|
904
|
+
if (Object.keys(include).length) {
|
|
905
|
+
const findData = await this.find({ filters, transactionManager });
|
|
906
|
+
const { field, value } = this.buildPrimaryKeyWhereClause(findData.items);
|
|
907
|
+
where[field] = value;
|
|
908
|
+
} else {
|
|
909
|
+
where = parsedWhere;
|
|
910
|
+
}
|
|
911
|
+
this.qb.buildQuery<Entity>(queryBuilder, { where });
|
|
912
|
+
const result = await queryBuilder.execute();
|
|
913
|
+
return { count: typeof result.affected === 'number' ? result.<span class="branch-0 cbranch-no" title="branch not covered" >affected : undefined }</span>;
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
async find(options: FindOptions): Promise<PersistanceFindResults<Entity>> {
|
|
917
|
+
const {
|
|
918
|
+
filters,
|
|
919
|
+
forceTransaction,
|
|
920
|
+
page: optPage,
|
|
921
|
+
perPage: optPerPage,
|
|
922
|
+
findAll: optFindAll,
|
|
923
|
+
include: optRelations,
|
|
924
|
+
orderBy: optOrderBy,
|
|
925
|
+
transactionManager,
|
|
926
|
+
withDeleted = false
|
|
927
|
+
} = options;
|
|
928
|
+
if (!transactionManager && forceTransaction) {
|
|
929
|
+
return this.repository.manager.transaction(tm => {
|
|
930
|
+
return this.find({ ...options, transactionManager: tm });
|
|
931
|
+
});
|
|
932
|
+
}
|
|
933
|
+
const page = optPage ? parseInt(optPage as unknown as string, 10) : 1; // make sure it's truly a number - it could come as string from GET requests
|
|
934
|
+
const perPage = optPerPage ? parseInt(optPerPage as unknown as string, 10) : 10; // same as above - must be a number
|
|
935
|
+
const findAll = optFindAll === true || (optFindAll as unknown) === 'true';
|
|
936
|
+
const findResults: PersistanceFindResults<Entity> = { page: 1, perPage: 0, items: [], more: false };
|
|
937
|
+
const entityName = this.repository.metadata.name;
|
|
938
|
+
const tableName = this.repository.metadata.name;
|
|
939
|
+
const queryBuilder = this.getRepository(transactionManager).createQueryBuilder(entityName);
|
|
940
|
+
let where: { [fieldName: string]: ParsedFilter } = {};
|
|
941
|
+
let include: IncludeItems = {};
|
|
942
|
+
let orderBy: OrderBy[] = [];
|
|
943
|
+
if (filters) {
|
|
944
|
+
const parsedFiltersData = this.qb.parseFilters(tableName, filters);
|
|
945
|
+
where = { ...parsedFiltersData.where };
|
|
946
|
+
include = { ...parsedFiltersData.include };
|
|
947
|
+
}
|
|
948
|
+
include = this.qb.parseRelations(tableName, optRelations || [], include);
|
|
949
|
+
if (optOrderBy) {
|
|
950
|
+
const parsedOrderByData = this.qb.parseOrderBy(tableName, optOrderBy);
|
|
951
|
+
include = { ...parsedOrderByData.include, ...include };
|
|
952
|
+
orderBy = [...parsedOrderByData.orderBy];
|
|
953
|
+
}
|
|
954
|
+
this.qb.buildQuery<Entity>(queryBuilder, { where, include, orderBy, withDeleted });
|
|
955
|
+
if (!findAll) {
|
|
956
|
+
queryBuilder.skip((page - 1) * perPage).take(perPage + 1);
|
|
957
|
+
findResults.page = page;
|
|
958
|
+
findResults.perPage = perPage;
|
|
959
|
+
}
|
|
960
|
+
const items: Entity[] = await queryBuilder.getMany();
|
|
961
|
+
if (findAll) {
|
|
962
|
+
findResults.perPage = items.length;
|
|
963
|
+
} else if (items.length === perPage + 1) {
|
|
964
|
+
items.pop();
|
|
965
|
+
findResults.more = true;
|
|
966
|
+
}
|
|
967
|
+
findResults.items = items;
|
|
968
|
+
return findResults;
|
|
969
|
+
}
|
|
970
|
+
|
|
971
|
+
async findOne(options: FindOneOptions): Promise<Entity | null> {
|
|
972
|
+
const {
|
|
973
|
+
filters,
|
|
974
|
+
forceTransaction,
|
|
975
|
+
transactionManager,
|
|
976
|
+
selectOperator,
|
|
977
|
+
include: optRelations,
|
|
978
|
+
orderBy: optOrderBy,
|
|
979
|
+
withDeleted = false
|
|
980
|
+
} = options;
|
|
981
|
+
if (!transactionManager && forceTransaction) {
|
|
982
|
+
return this.repository.manager.transaction(tm => {
|
|
983
|
+
return this.findOne({ ...options, transactionManager: tm });
|
|
984
|
+
});
|
|
985
|
+
}
|
|
986
|
+
const entityName = this.repository.metadata.name;
|
|
987
|
+
const tableName = this.repository.metadata.name;
|
|
988
|
+
const queryBuilder = this.getRepository(transactionManager).createQueryBuilder(entityName);
|
|
989
|
+
const { where, include: includeFromFilters } = this.qb.parseFilters(tableName, filters, {
|
|
990
|
+
operator: selectOperator as PersistanceSelectOperator,
|
|
991
|
+
isTopLevel: true
|
|
992
|
+
});
|
|
993
|
+
const include = this.qb.parseRelations(tableName, optRelations || [], includeFromFilters);
|
|
994
|
+
let orderBy: OrderBy[] = [];
|
|
995
|
+
if (optOrderBy) {
|
|
996
|
+
const parsedOrderByData = this.qb.parseOrderBy(tableName, optOrderBy);
|
|
997
|
+
orderBy = [...parsedOrderByData.orderBy];
|
|
998
|
+
}
|
|
999
|
+
this.qb.buildQuery<Entity>(queryBuilder, { where, include, orderBy, withDeleted });
|
|
1000
|
+
return await queryBuilder.getOne();
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
getEntityTarget(): EntityTarget<Entity> {
|
|
1004
|
+
return this.repository.target;
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
protected getRepository(transactionManager?: EntityManager): Repository<Entity> {
|
|
1008
|
+
if (transactionManager) {
|
|
1009
|
+
return transactionManager.getRepository<Entity>(this.repository.target);
|
|
1010
|
+
}
|
|
1011
|
+
return this.repository;
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
// TODO: introduce this in the bulkCreate, create, update and delete methods
|
|
1015
|
+
// TODO: support a primary key that's not "id", as well as multiple primary keys
|
|
1016
|
+
protected async processManyToMany(
|
|
1017
|
+
data: {
|
|
1018
|
+
counterpartColumn: string;
|
|
1019
|
+
currentEntityColumn: string;
|
|
1020
|
+
id: number;
|
|
1021
|
+
items: PersistanceNumberItem[];
|
|
1022
|
+
tableName: string;
|
|
1023
|
+
},
|
|
1024
|
+
options?: { transactionManager?: EntityManager }
|
|
1025
|
+
): Promise<void> {
|
|
1026
|
+
const { currentEntityColumn, id, counterpartColumn, items, tableName } = data;
|
|
1027
|
+
const actualOptions = options || {};
|
|
1028
|
+
const { transactionManager } = actualOptions;
|
|
1029
|
+
// the transaction here is mandatory
|
|
1030
|
+
if (!transactionManager) {
|
|
1031
|
+
return this.repository.manager.transaction(tm => {
|
|
1032
|
+
return this.processManyToMany(data, { ...actualOptions, transactionManager: tm });
|
|
1033
|
+
});
|
|
1034
|
+
}
|
|
1035
|
+
const { columnQuotesSymbol: cqs } = this.qb;
|
|
1036
|
+
let deleteQuery = `delete from ${cqs}${tableName}${cqs} where `;
|
|
1037
|
+
let runDeleteQuery = false;
|
|
1038
|
+
let insertQuery = `insert into ${cqs}${tableName}${cqs} (${cqs}${currentEntityColumn}${cqs}, ${cqs}${counterpartColumn}${cqs}) values `;
|
|
1039
|
+
let runInsertQuery = false;
|
|
1040
|
+
items.forEach(item => {
|
|
1041
|
+
const { deleted, value } = item;
|
|
1042
|
+
if (deleted) {
|
|
1043
|
+
if (runDeleteQuery) {
|
|
1044
|
+
deleteQuery += ' or ';
|
|
1045
|
+
} else {
|
|
1046
|
+
runDeleteQuery = true;
|
|
1047
|
+
}
|
|
1048
|
+
deleteQuery += `(${cqs}${currentEntityColumn}${cqs} = ${id} and ${cqs}${counterpartColumn}${cqs} = ${value})`;
|
|
1049
|
+
return;
|
|
1050
|
+
}
|
|
1051
|
+
if (runInsertQuery) {
|
|
1052
|
+
insertQuery += ', ';
|
|
1053
|
+
} else {
|
|
1054
|
+
runInsertQuery = true;
|
|
1055
|
+
}
|
|
1056
|
+
insertQuery += `(${id}, ${value})`;
|
|
1057
|
+
});
|
|
1058
|
+
if (runDeleteQuery) {
|
|
1059
|
+
await transactionManager.query(deleteQuery);
|
|
1060
|
+
}
|
|
1061
|
+
if (runInsertQuery) {
|
|
1062
|
+
await transactionManager.query(`${insertQuery} on conflict do nothing`);
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
|
|
1066
|
+
protected async save<Data = unknown, ReturnData = unknown>(
|
|
1067
|
+
data: Data,
|
|
1068
|
+
transactionManager?: EntityManager
|
|
1069
|
+
): Promise<ReturnData> {
|
|
1070
|
+
if (transactionManager) {
|
|
1071
|
+
return (await transactionManager.save(this.repository.target, data as DeepPartial<Entity>)) as ReturnData;
|
|
1072
|
+
}
|
|
1073
|
+
return this.repository.save(data as DeepPartial<Entity>) as ReturnData;
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1076
|
+
async update(data: Entity, options: UpdateOptions): Promise<PersistanceUpdateResult<Entity>> {
|
|
1077
|
+
const { filters, forceTransaction, returnData, transactionManager } = options;
|
|
1078
|
+
if (!transactionManager && forceTransaction) {
|
|
1079
|
+
return this.repository.manager.transaction(tm => {
|
|
1080
|
+
return this.update(data, { ...options, transactionManager: tm });
|
|
1081
|
+
});
|
|
1082
|
+
}
|
|
1083
|
+
const entityName = this.repository.metadata.name;
|
|
1084
|
+
const tableName = this.repository.metadata.tableName;
|
|
1085
|
+
const queryBuilder = this.getRepository(transactionManager)
|
|
1086
|
+
.createQueryBuilder(entityName)
|
|
1087
|
+
.update()
|
|
1088
|
+
.set(data as unknown as QueryDeepPartialEntity<unknown>);
|
|
1089
|
+
const { where: parsedWhere, include } = this.qb.parseFilters(tableName, filters);
|
|
1090
|
+
let where: { [fieldName: string]: ParsedFilter } = {};
|
|
1091
|
+
if (Object.keys(include).length) {
|
|
1092
|
+
const findData = await this.find({ filters, transactionManager });
|
|
1093
|
+
const { field, value } = this.buildPrimaryKeyWhereClause(findData.items);
|
|
1094
|
+
where[field] = value;
|
|
1095
|
+
} else {
|
|
1096
|
+
where = parsedWhere;
|
|
1097
|
+
}
|
|
1098
|
+
this.qb.buildQuery<Entity>(queryBuilder, { where });
|
|
1099
|
+
if (returnData) {
|
|
1100
|
+
const result = await queryBuilder.returning('*').execute();
|
|
1101
|
+
return { items: result.raw };
|
|
1102
|
+
}
|
|
1103
|
+
const result = await queryBuilder.execute();
|
|
1104
|
+
return { count: typeof result.affected === 'number' ? result.<span class="branch-0 cbranch-no" title="branch not covered" >affected : undefined }</span>;
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1107
|
+
</pre></td></tr></table></pre>
|
|
1108
|
+
|
|
1109
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
1110
|
+
</div><!-- /wrapper -->
|
|
1111
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
1112
|
+
Code coverage generated by
|
|
1113
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1114
|
+
at 2025-03-20T21:05:41.984Z
|
|
1115
|
+
</div>
|
|
1116
|
+
<script src="../prettify.js"></script>
|
|
1117
|
+
<script>
|
|
1118
|
+
window.onload = function () {
|
|
1119
|
+
prettyPrint();
|
|
1120
|
+
};
|
|
1121
|
+
</script>
|
|
1122
|
+
<script src="../sorter.js"></script>
|
|
1123
|
+
<script src="../block-navigation.js"></script>
|
|
1124
|
+
</body>
|
|
1125
|
+
</html>
|
|
1126
|
+
|