/dsn/sqlite.php

https://github.com/leonardoweslei/CMDB · PHP · 158 lines · 155 code · 0 blank · 3 comment · 23 complexity · 937c0e50d2bdeec69a7171c1c8188179 MD5 · raw file

  1. <?php
  2. class database_sqlite extends PDO
  3. {
  4. function __construct($db)
  5. {
  6. parent::__construct('sqlite:'.$db);
  7. }
  8. function database_info()
  9. {
  10. $stmt = $this->prepare("SELECT name FROM sqlite_master WHERE type='table'");
  11. if($stmt && $stmt->execute())
  12. {
  13. $data = $stmt->fetchAll();
  14. $relations = array();
  15. if(!empty($data))
  16. {
  17. foreach($data as $table)
  18. {
  19. if($table[0]!="sqlite_sequence")
  20. {
  21. $relations[$table[0]] = $this->table_info($table[0]);
  22. }
  23. }
  24. }
  25. return $relations;
  26. }
  27. else
  28. {
  29. return array();
  30. }
  31. }
  32. function table_info($table)
  33. {
  34. $stmt = $this->prepare("PRAGMA table_info($table)");
  35. if($stmt && $stmt->execute())
  36. {
  37. $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
  38. $fields = array();
  39. if(!empty($data))
  40. {
  41. foreach($data as $data_f)
  42. {
  43. $fname = $data_f['name'];
  44. $fields[$fname]['ai'] = $this->field_ai($table, $fname)!==false && $data_f['pk']=="1"?true:false;
  45. $fields[$fname]['default'] = $data_f['dflt_value'];
  46. $fields[$fname]['key'] = $data_f['pk']=="1"?"PRI":"";
  47. $fields[$fname]['name'] = $data_f['name'];
  48. $fields[$fname]['null'] = $data_f['notnull']!=1 && $data_f['pk']!="1"?true:false;
  49. $data_type = preg_split("/[\(\) ]/", $data_f['type']);
  50. if(isset($data_type[1]) && preg_replace("/[0-9]/","",$data_type[1])!="")
  51. {
  52. $t=false;
  53. for($x=1; $x<count($data_type);$x+=2)
  54. {
  55. $t2=$data_type[$x];
  56. $data_type[$x]=$t;
  57. $t=$data_type[$x+1];
  58. $data_type[$x+1]=$t2;
  59. }
  60. }
  61. $fields[$fname]['option'] = false;
  62. $tam = isset($data_type[1])?$data_type[1]:false;
  63. $fields[$fname]['relation'] = $this->field_relation($table,$fname);
  64. $fields[$fname]['unique'] = $data_f['pk']=="1" || $this->field_unique($table, $fname);
  65. if(isset($data_type[1]))
  66. {
  67. $fields[$fname]['size'] = $data_type[1];
  68. }
  69. else
  70. {
  71. $fields[$fname]['size'] = false;
  72. }
  73. $fields[$fname]['type'] = strtolower(array_shift(explode(" ",$data_type[0])));
  74. $fields[$fname]['unsigned'] = substr_count(strtolower(implode("",$data_type)), "unsigned")>0?true:false;
  75. $fields[$fname]['zerofill'] = false;
  76. }
  77. }
  78. return $fields;
  79. }
  80. else
  81. {
  82. return array();
  83. }
  84. }
  85. function field_relation($table,$field)
  86. {
  87. $query = "PRAGMA foreign_key_list({$table})";
  88. $stmt = $this->prepare($query);
  89. if($stmt && $stmt->execute())
  90. {
  91. $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
  92. $relations = array();
  93. if(!empty($data))
  94. {
  95. foreach ($data as $r)
  96. {
  97. if($r['from']==$field)
  98. {
  99. return array('table_local'=>$table,'field_local'=>$field,'table_remote'=>$r['table'],'field_remote'=>$r['to']);
  100. }
  101. }
  102. }
  103. }
  104. return false;
  105. }
  106. function field_unique($table,$field)
  107. {
  108. $stmt = $this->prepare("PRAGMA index_list($table)");
  109. if($stmt && $stmt->execute())
  110. {
  111. $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
  112. foreach ($data as $index)
  113. {
  114. $stmt2 = $this->prepare("PRAGMA index_info({$index['name']})");
  115. $stmt2->execute();
  116. $data = $stmt2->fetchAll(PDO::FETCH_ASSOC);
  117. foreach($data as $fdata)
  118. {
  119. if($field==$fdata['name'])
  120. {
  121. return $index['unique'];
  122. }
  123. }
  124. }
  125. }
  126. return false;
  127. }
  128. function field_ai($table,$field)
  129. {
  130. $stmt = $this->prepare("select * from sqlite_sequence where name='$table';");
  131. if($stmt && $stmt->execute())
  132. {
  133. $data = $stmt->fetch(PDO::FETCH_ASSOC);
  134. return $data['seq'];
  135. }
  136. return false;
  137. }
  138. private function table_relations($table,$type=3)
  139. {
  140. /**
  141. * TODO implementar este metodo
  142. */
  143. return array();
  144. }
  145. function table_relations_all($table)
  146. {
  147. return $this->table_relations($table,3);
  148. }
  149. function table_relations_to($table)
  150. {
  151. return $this->table_relations($table,2);
  152. }
  153. function table_relations_from($table)
  154. {
  155. return $this->table_relations($table,1);
  156. }
  157. }
  158. ?>