]> git.mxchange.org Git - friendica.git/blob - library/dddbl2/inc/exceptions/QueryException.class.php
New database system that uses PDO if present/Test script for doing database upgrades.
[friendica.git] / library / dddbl2 / inc / exceptions / QueryException.class.php
1 <?php\r
2 \r
3 namespace DDDBL;\r
4 \r
5 /**\r
6   *\r
7   * create an exception with relevant information, if a query fails\r
8   *\r
9   **/\r
10 \r
11 class QueryException extends \Exception {\r
12 \r
13   /**\r
14     *\r
15     * @param $objPDO             - the PDO object which caused the error when executed\r
16     * @param $arrQueryDefinition - the complete query definition\r
17     * \r
18     * create an error message which contains all relevant informations\r
19     * and print them as exception\r
20     *\r
21     **/\r
22     public function __construct(\PDOStatement $objPDO, $arrQueryDefinition) {\r
23         \r
24         $strMessage = self::createErrorMessage($objPDO, $arrQueryDefinition);\r
25         \r
26         parent::__construct($strMessage);\r
27         \r
28     }\r
29 \r
30   /**\r
31     *\r
32     * @param $objPDO             - the PDO object related with the error\r
33     * @param $arrQueryDefinition - the complete query definition\r
34     * \r
35     * @return (string) the complete exception message\r
36     * \r
37     * build and return the exception message out of the given error info\r
38     * and query definition\r
39     *\r
40     **/\r
41     private function createErrorMessage($objPDO, $arrQueryDefinition) {\r
42       \r
43       $strMessage  = self::flattenQueryErrorInfo($objPDO);\r
44       $strMessage .= self::flattenQueryDefiniton($arrQueryDefinition);\r
45       \r
46       return $strMessage;\r
47       \r
48     }\r
49 \r
50   /**\r
51     *\r
52     * @param $objPDO - PDO object to get error information from\r
53     * \r
54     * @return (string) a flatten error info from the query object\r
55     * \r
56     * build and return a flatten error-info \r
57     * from the driver specific error message\r
58     *\r
59     **/\r
60     private function flattenQueryErrorInfo($objPDO) {\r
61     \r
62       $arrErrorInfo = $objPDO->errorInfo();\r
63       \r
64       $strMessage = '';\r
65       \r
66       if(!empty($arrErrorInfo) && !empty($arrErrorInfo[0]) && '00000' !== $arrErrorInfo[0])\r
67         $strMessage = "\nError-Code: {$arrErrorInfo[0]}\nError-Message: {$arrErrorInfo[2]}\n";\r
68       \r
69       return $strMessage;\r
70     \r
71     }\r
72 \r
73   /**\r
74     *\r
75     * @param $arrQueryDefinition - the complete query definition\r
76     * \r
77     * @return (string) a text version of the query definition\r
78     * \r
79     * create an text, which contains all information \r
80     * of the query definition\r
81     *\r
82     **/\r
83     private function flattenQueryDefiniton($arrQueryDefinition) {\r
84       \r
85       $strMessage = "\nQuery-Definiton:\n";\r
86       \r
87       foreach($arrQueryDefinition AS $strKeyword => $strContent)\r
88         $strMessage .= "$strKeyword: $strContent\n";\r
89       \r
90       return $strMessage . "\n";\r
91       \r
92     }\r
93 \r
94 }