3
3
* Copyright © Magento, Inc. All rights reserved.
4
4
* See COPYING.txt for license details.
5
5
*/
6
+
6
7
namespace Magento \Analytics \ReportXml ;
7
8
8
9
use Magento \Analytics \ReportXml \DB \SelectBuilderFactory ;
9
10
use Magento \Framework \App \CacheInterface ;
11
+ use Magento \Framework \DB \Select ;
10
12
use Magento \Framework \ObjectManagerInterface ;
13
+ use Magento \Framework \Serialize \Serializer \Json ;
11
14
12
15
/**
13
16
* Creates Query object according to configuration
17
+ *
14
18
* Factory for @see \Magento\Analytics\ReportXml\Query
15
19
*/
16
20
class QueryFactory
@@ -45,6 +49,11 @@ class QueryFactory
45
49
*/
46
50
private $ selectHydrator ;
47
51
52
+ /**
53
+ * @var Json
54
+ */
55
+ private $ jsonSerializer ;
56
+
48
57
/**
49
58
* QueryFactory constructor.
50
59
*
@@ -54,21 +63,24 @@ class QueryFactory
54
63
* @param SelectBuilderFactory $selectBuilderFactory
55
64
* @param Config $config
56
65
* @param array $assemblers
66
+ * @param Json $jsonSerializer
57
67
*/
58
68
public function __construct (
59
69
CacheInterface $ queryCache ,
60
70
SelectHydrator $ selectHydrator ,
61
71
ObjectManagerInterface $ objectManager ,
62
72
SelectBuilderFactory $ selectBuilderFactory ,
63
73
Config $ config ,
64
- array $ assemblers
74
+ array $ assemblers ,
75
+ Json $ jsonSerializer
65
76
) {
66
77
$ this ->config = $ config ;
67
78
$ this ->selectBuilderFactory = $ selectBuilderFactory ;
68
79
$ this ->assemblers = $ assemblers ;
69
80
$ this ->queryCache = $ queryCache ;
70
81
$ this ->objectManager = $ objectManager ;
71
82
$ this ->selectHydrator = $ selectHydrator ;
83
+ $ this ->jsonSerializer = $ jsonSerializer ;
72
84
}
73
85
74
86
/**
@@ -101,14 +113,10 @@ private function constructQuery($queryName)
101
113
$ selectBuilder = $ assembler ->assemble ($ selectBuilder , $ queryConfig );
102
114
}
103
115
$ select = $ selectBuilder ->create ();
104
- return $ this ->objectManager ->create (
105
- Query::class,
106
- [
107
- 'select ' => $ select ,
108
- 'selectHydrator ' => $ this ->selectHydrator ,
109
- 'connectionName ' => $ selectBuilder ->getConnectionName (),
110
- 'config ' => $ queryConfig
111
- ]
116
+ return $ this ->createQueryObject (
117
+ $ select ,
118
+ $ selectBuilder ->getConnectionName (),
119
+ $ queryConfig
112
120
);
113
121
}
114
122
@@ -122,19 +130,42 @@ public function create($queryName)
122
130
{
123
131
$ cached = $ this ->queryCache ->load ($ queryName );
124
132
if ($ cached ) {
125
- $ queryData = json_decode ($ cached , true );
126
- return $ this ->objectManager ->create (
127
- Query::class,
128
- [
129
- 'select ' => $ this ->selectHydrator ->recreate ($ queryData ['select_parts ' ]),
130
- 'selectHydrator ' => $ this ->selectHydrator ,
131
- 'connectionName ' => $ queryData ['connectionName ' ],
132
- 'config ' => $ queryData ['config ' ]
133
- ]
133
+ $ queryData = $ this ->jsonSerializer ->unserialize ($ cached );
134
+ return $ this ->createQueryObject (
135
+ $ this ->selectHydrator ->recreate ($ queryData ['select_parts ' ]),
136
+ $ queryData ['connectionName ' ],
137
+ $ queryData ['config ' ]
134
138
);
135
139
}
136
140
$ query = $ this ->constructQuery ($ queryName );
137
- $ this ->queryCache ->save (json_encode ($ query ), $ queryName );
141
+ $ this ->queryCache ->save (
142
+ $ this ->jsonSerializer ->serialize ($ query ),
143
+ $ queryName
144
+ );
138
145
return $ query ;
139
146
}
147
+
148
+ /**
149
+ * Create query class using objectmanger
150
+ *
151
+ * @param Select $select
152
+ * @param string $connection
153
+ * @param array $queryConfig
154
+ * @return Query
155
+ */
156
+ private function createQueryObject (
157
+ Select $ select ,
158
+ string $ connection ,
159
+ array $ queryConfig
160
+ ) {
161
+ return $ this ->objectManager ->create (
162
+ Query::class,
163
+ [
164
+ 'select ' => $ select ,
165
+ 'selectHydrator ' => $ this ->selectHydrator ,
166
+ 'connectionName ' => $ connection ,
167
+ 'config ' => $ queryConfig
168
+ ]
169
+ );
170
+ }
140
171
}
0 commit comments