8
8
9
9
use Magento \Framework \App \ResourceConnection ;
10
10
use Magento \Framework \ObjectManagerInterface ;
11
+ use Magento \Framework \DB \Adapter \SqlVersionProvider ;
11
12
12
13
/**
13
14
* Table DTO element factory.
@@ -21,29 +22,40 @@ class Table implements FactoryInterface
21
22
public const DEFAULT_ENGINE = 'innodb ' ;
22
23
23
24
/**
24
- * Default charset for SQL
25
+ * @var ObjectManagerInterface
25
26
*/
26
- public const DEFAULT_CHARSET = ' utf8 ' ;
27
+ private ObjectManagerInterface $ objectManager ;
27
28
28
29
/**
29
- * Default collation
30
+ * @var string
30
31
*/
31
- public const DEFAULT_COLLATION = ' utf8_general_ci ' ;
32
+ private string $ className ;
32
33
33
34
/**
34
- * @var ObjectManagerInterface
35
+ * @var ResourceConnection
35
36
*/
36
- private $ objectManager ;
37
+ private ResourceConnection $ resourceConnection ;
38
+
39
+ /** @var SqlVersionProvider|null */
40
+ private ?SqlVersionProvider $ sqlVersionProvider = null ;
37
41
38
42
/**
39
- * @var string
43
+ * @var array| string[]
40
44
*/
41
- private $ className ;
45
+ private static array $ defaultCharset = [
46
+ '10.4 ' => 'utf8 ' ,
47
+ '10.6 ' => 'utf8mb3 ' ,
48
+ 'default ' => 'utf8 ' ,
49
+ ];
42
50
43
51
/**
44
- * @var ResourceConnection
52
+ * @var array|string[]
45
53
*/
46
- private $ resourceConnection ;
54
+ private static array $ defaultCollation = [
55
+ '10.4 ' => 'utf8_general_ci ' ,
56
+ '10.6 ' => 'utf8mb3_general_ci ' ,
57
+ 'default ' => 'utf8_general_ci ' ,
58
+ ];
47
59
48
60
/**
49
61
* Constructor.
@@ -55,11 +67,13 @@ class Table implements FactoryInterface
55
67
public function __construct (
56
68
ObjectManagerInterface $ objectManager ,
57
69
ResourceConnection $ resourceConnection ,
58
- $ className = \Magento \Framework \Setup \Declaration \Schema \Dto \Table::class
70
+ $ className = \Magento \Framework \Setup \Declaration \Schema \Dto \Table::class,
71
+ $ sqlVersionProvider = null
59
72
) {
60
73
$ this ->objectManager = $ objectManager ;
61
74
$ this ->className = $ className ;
62
75
$ this ->resourceConnection = $ resourceConnection ;
76
+ $ this ->sqlVersionProvider = $ sqlVersionProvider ?? $ this ->objectManager ->get (SqlVersionProvider::class);
63
77
}
64
78
65
79
/**
@@ -72,11 +86,11 @@ public function create(array $data)
72
86
}
73
87
//Prepare charset
74
88
if (!isset ($ data ['charset ' ])) {
75
- $ data ['charset ' ] = self :: DEFAULT_CHARSET ;
89
+ $ data ['charset ' ] = $ this -> getDefaultCharset () ;
76
90
}
77
91
//Prepare collation
78
92
if (!isset ($ data ['collation ' ])) {
79
- $ data ['collation ' ] = self :: DEFAULT_COLLATION ;
93
+ $ data ['collation ' ] = $ this -> getDefaultCollation () ;
80
94
}
81
95
//Prepare triggers
82
96
if (!isset ($ data ['onCreate ' ])) {
@@ -94,4 +108,21 @@ public function create(array $data)
94
108
95
109
return $ this ->objectManager ->create ($ this ->className , $ data );
96
110
}
111
+
112
+ /**
113
+ * @return string
114
+ */
115
+ private function getDefaultCharset (): string
116
+ {
117
+ return self ::$ defaultCharset [$ this ->sqlVersionProvider ->getSqlVersion ()] ?? self ::$ defaultCharset ['default ' ];
118
+ }
119
+
120
+ /**
121
+ * @return string
122
+ */
123
+ private function getDefaultCollation (): string
124
+ {
125
+ return self ::$ defaultCollation [$ this ->sqlVersionProvider ->getSqlVersion ()] ??
126
+ self ::$ defaultCollation ['default ' ];
127
+ }
97
128
}
0 commit comments