Test Failed
Branch master (e9d41f)
by Jean-Christophe
15:30
created

MysqlDriverMetas::groupConcat()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
c 0
b 0
f 0
dl 0
loc 2
rs 10
cc 1
nc 1
nop 2
1
<?php
2
3
namespace Ubiquity\db\providers\pdo\drivers;
4
5
/**
6
 * Ubiquity\db\providers\pdo\drivers$MysqlDriverMetas
7
 * This class is part of Ubiquity
8
 *
9
 * @author jc
10
 * @version 1.0.0
11
 *
12
 */
13
class MysqlDriverMetas extends AbstractDriverMetaDatas {
14
15
	public function getTablesName(): array {
16
		$query = $this->dbInstance->query ( 'SHOW TABLES' );
17
		return $query->fetchAll ( \PDO::FETCH_COLUMN );
18
	}
19
20
	public function getPrimaryKeys(string $tableName): array {
21
		$fieldkeys = array ();
22
		$recordset = $this->dbInstance->query ( "SHOW KEYS FROM `{$tableName}` WHERE Key_name = 'PRIMARY'" );
23
		$keys = $recordset->fetchAll ( \PDO::FETCH_ASSOC );
24
		foreach ( $keys as $key ) {
25
			$fieldkeys [] = $key ['Column_name'];
26
		}
27
		return $fieldkeys;
28
	}
29
30
	public function getForeignKeys(string $tableName, string $pkName, ?string $dbName = null): array {
31
		$recordset = $this->dbInstance->query ( "SELECT *
32
												FROM
33
												 information_schema.KEY_COLUMN_USAGE
34
												WHERE
35
												 REFERENCED_TABLE_NAME = '" . $tableName . "'
36
												 AND REFERENCED_COLUMN_NAME = '" . $pkName . "'
37
												 AND TABLE_SCHEMA = '" . $dbName . "';" );
38
		return $recordset->fetchAll ( \PDO::FETCH_ASSOC );
39
	}
40
41
	public function getFieldsInfos(string $tableName): array {
42
		$fieldsInfos = array ();
43
		$recordset = $this->dbInstance->query ( "SHOW COLUMNS FROM `{$tableName}`" );
44
		$fields = $recordset->fetchAll ( \PDO::FETCH_ASSOC );
45
		foreach ( $fields as $field ) {
46
			$fieldsInfos [$field ['Field']] = [ "Type" => $field ['Type'],"Nullable" => $field ["Null"] ];
47
		}
48
		return $fieldsInfos;
49
	}
50
51
	public function getRowNum(string $tableName, string $pkName, string $condition): int {
52
		$query = $this->dbInstance->query ( "SELECT num FROM (SELECT *, @rownum:=@rownum + 1 AS num FROM `{$tableName}`, (SELECT @rownum:=0) r ORDER BY {$pkName}) d WHERE " . $condition );
53
		if ($query) {
54
			return $query->fetchColumn ( 0 );
55
		}
56
		return 0;
57
	}
58
59
	public function groupConcat(string $fields, string $separator): string {
60
		return "GROUP_CONCAT({$fields} SEPARATOR '{$separator}')";
61
	}
62
}
63