TableValidation   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
wmc 8
eloc 20
c 3
b 0
f 0
dl 0
loc 55
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A validateTableName() 0 8 2
A validateTableSubQuery() 0 9 3
A validateTable() 0 16 3
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: Adrian Dumitru
5
 * Date: 8/20/2017
6
 * Time: 12:36 AM
7
 */
8
9
namespace Qpdb\QueryBuilder\Traits;
10
11
use Qpdb\QueryBuilder\Dependencies\QueryException;
12
use Qpdb\QueryBuilder\Dependencies\QueryHelper;
13
use Qpdb\QueryBuilder\Dependencies\QueryStructure;
14
use Qpdb\QueryBuilder\Statements\QuerySelect;
15
use Qpdb\QueryBuilder\Statements\QueryStatement;
16
17
trait TableValidation
18
{
19
20
	/**
21
	 * @param $table
22
	 * @return mixed|string
23
	 * @throws QueryException
24
	 */
25
	private function validateTable( $table )
26
	{
27
		switch ( gettype( $table ) ) {
28
29
			case QueryStructure::ELEMENT_TYPE_STRING:
30
				$table = $this->validateTableName( $table );
31
				break;
32
			case QueryStructure::ELEMENT_TYPE_OBJECT:
33
				$table = $this->validateTableSubQuery( $table );
34
				break;
35
			default:
36
				throw new QueryException( 'Invalid table type parameter: ' . gettype( $table ), QueryException::QUERY_ERROR_INVALID_TABLE_STATEMENT );
37
38
		}
39
40
		return $table;
41
	}
42
43
	/**
44
	 * @param $table
45
	 * @return mixed|string
46
	 * @throws QueryException
47
	 */
48
	private function validateTableName( $table )
49
	{
50
		$table = trim( $table );
51
52
		if ( '' === $table )
53
			throw new QueryException( 'Table name is empty string!', QueryException::QUERY_ERROR_INVALID_TABLE_STATEMENT );
54
55
		return QueryHelper::addBacktick($table);
56
	}
57
58
	/**
59
	 * @param $table
60
	 * @return mixed
61
	 * @throws QueryException
62
	 */
63
	private function validateTableSubQuery( $table )
64
	{
65
		if ( $this->statement !== QueryStatement::QUERY_STATEMENT_SELECT )
66
			throw new QueryException( 'Invalid subQuery statement!', QueryException::QUERY_ERROR_INVALID_TABLE_STATEMENT );
67
68
		if ( !is_a( $table, QuerySelect::class ) )
69
			throw new QueryException( 'Invalid subQuery statement!', QueryException::QUERY_ERROR_INVALID_TABLE_STATEMENT );
70
71
		return $table;
72
	}
73
74
75
}