88
99use Magento \Framework \App \ResourceConnection ;
1010use Magento \Framework \ObjectManagerInterface ;
11+ use Magento \Framework \DB \Adapter \SqlVersionProvider ;
1112
1213/**
1314 * Table DTO element factory.
@@ -21,29 +22,40 @@ class Table implements FactoryInterface
2122 public const DEFAULT_ENGINE = 'innodb ' ;
2223
2324 /**
24- * Default charset for SQL
25+ * @var ObjectManagerInterface
2526 */
26- public const DEFAULT_CHARSET = ' utf8 ' ;
27+ private ObjectManagerInterface $ objectManager ;
2728
2829 /**
29- * Default collation
30+ * @var string
3031 */
31- public const DEFAULT_COLLATION = ' utf8_general_ci ' ;
32+ private string $ className ;
3233
3334 /**
34- * @var ObjectManagerInterface
35+ * @var ResourceConnection
3536 */
36- private $ objectManager ;
37+ private ResourceConnection $ resourceConnection ;
38+
39+ /** @var SqlVersionProvider|null */
40+ private ?SqlVersionProvider $ sqlVersionProvider = null ;
3741
3842 /**
39- * @var string
43+ * @var array| string[]
4044 */
41- private $ className ;
45+ private static array $ defaultCharset = [
46+ '10.4 ' => 'utf8 ' ,
47+ '10.6 ' => 'utf8mb3 ' ,
48+ 'default ' => 'utf8 ' ,
49+ ];
4250
4351 /**
44- * @var ResourceConnection
52+ * @var array|string[]
4553 */
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+ ];
4759
4860 /**
4961 * Constructor.
@@ -55,11 +67,13 @@ class Table implements FactoryInterface
5567 public function __construct (
5668 ObjectManagerInterface $ objectManager ,
5769 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
5972 ) {
6073 $ this ->objectManager = $ objectManager ;
6174 $ this ->className = $ className ;
6275 $ this ->resourceConnection = $ resourceConnection ;
76+ $ this ->sqlVersionProvider = $ sqlVersionProvider ?? $ this ->objectManager ->get (SqlVersionProvider::class);
6377 }
6478
6579 /**
@@ -72,11 +86,11 @@ public function create(array $data)
7286 }
7387 //Prepare charset
7488 if (!isset ($ data ['charset ' ])) {
75- $ data ['charset ' ] = self :: DEFAULT_CHARSET ;
89+ $ data ['charset ' ] = $ this -> getDefaultCharset () ;
7690 }
7791 //Prepare collation
7892 if (!isset ($ data ['collation ' ])) {
79- $ data ['collation ' ] = self :: DEFAULT_COLLATION ;
93+ $ data ['collation ' ] = $ this -> getDefaultCollation () ;
8094 }
8195 //Prepare triggers
8296 if (!isset ($ data ['onCreate ' ])) {
@@ -94,4 +108,21 @@ public function create(array $data)
94108
95109 return $ this ->objectManager ->create ($ this ->className , $ data );
96110 }
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+ }
97128}
0 commit comments