PageRenderTime 41ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/WebProjectHelper/lib/class/mysql/mysql.php

http://webprojecthelper.googlecode.com/
PHP | 211 lines | 106 code | 18 blank | 87 comment | 33 complexity | dbd7d95ebe3790996734b43ea72f42e5 MD5 | raw file
Possible License(s): CC-BY-3.0
  1. <?php
  2. /**
  3. * Tools to generate MySQL
  4. */
  5. class MySQL {
  6. /** @var string mysql tables prefix */
  7. private static $prefix = '';
  8. /**
  9. * Set mysql tables prefix
  10. * @param $prefix string mysql tables prefix
  11. */
  12. public static function set_prefix($prefix) {
  13. MySQL::$prefix = $prefix;
  14. }
  15. /**
  16. * Get mysql tables prefix
  17. * @return string mysql tables prefix
  18. */
  19. public static function get_prefix() {
  20. return MySQL::$prefix == '' ? '' : strtolower(MySQL::$prefix.'_');
  21. }
  22. /**
  23. * Get mysql element name
  24. * @param $name string default name
  25. * @param $element Element associated element
  26. * @return string mysql element name
  27. */
  28. public static function name($name,Element $element) {
  29. if ($element instanceof Scalar && $element->hasOption(Scalar::OPT_DATABASE)) { return $element->getName(); }
  30. elseif ($element instanceof Object && $element->hasOption(Object::OPT_DATABASE)) { return $element->getName(); }
  31. else { return $name; }
  32. }
  33. /**
  34. * Get mysql table name
  35. * @param $element Element mysql table element
  36. * @param $association Association association
  37. * @param $prefix boolean use mysql table prefix ?
  38. * @return string mysql table name
  39. */
  40. public static function name_table(Element $element,$association=null,$prefix=true) {
  41. return ($prefix?MySQL::get_prefix():'').($association != null ? strtolower($association->getName()).'_' : '').MySQL::name(strtolower($element->getName()),$element);
  42. }
  43. /**
  44. * Get mysql association table name
  45. * @param $object Object object owner
  46. * @param $obj_association Association object association from element
  47. * @param $element Element owned element
  48. * @param $elem_association Association element association from object
  49. * @return string mysql association table name
  50. */
  51. public static function name_assoc_table(Object $object, $obj_association, Element $element, $elem_association) {
  52. // Check if object equals element
  53. if (!$object->equals($element) || $obj_association == null) {
  54. // Build names
  55. $names = array(MySQL::name_table($object,$obj_association,false),MySQL::name_table($element,$elem_association,false));
  56. // Sort names
  57. sort($names);
  58. // Assemble names
  59. return MySQL::get_prefix().implode('_',$names);
  60. } else {
  61. // Build names
  62. $associations = array(strtolower($obj_association->getName()),strtolower($elem_association->getName()));
  63. // Sort names
  64. sort($associations);
  65. // Assemble names
  66. return MySQL::get_prefix().implode('_',$associations).'_'.MySQL::name_table($object,null,false);
  67. }
  68. }
  69. /**
  70. * Get field name
  71. * @param $scalar Scalar scalaer
  72. * @return string field name
  73. */
  74. public static function name_field(Scalar $scalar) {
  75. return MySQL::name(strtolower($scalar->getName()),$scalar);
  76. }
  77. /**
  78. * Get parent field name
  79. * @param $scalar Scalar scalar
  80. * @return string parent field name
  81. */
  82. public static function name_field_parent(Scalar $scalar) {
  83. return 'parent_'.MySQL::name(strtolower($scalar->getName()),$scalar);
  84. }
  85. /**
  86. * Get foreign field name
  87. * @param $scalar Scalar scalar
  88. * @param $association Association association
  89. * @return string foreign field name
  90. */
  91. public static function name_field_foreign(Scalar $scalar,$association=null) {
  92. if ($association != null) { return strtolower($association->getName()).'_'.MySQL::name(strtolower($scalar->getName()),$scalar); }
  93. return 'fk_'.MySQL::name(strtolower($scalar->getName()),$scalar);
  94. }
  95. /**
  96. * Get default value of a scalar
  97. * @param $scalar Scalar scalar
  98. * @return string default value
  99. */
  100. public static function default_value(Scalar $scalar) {
  101. switch ($scalar->getType()) {
  102. case Scalar::T_BOOL : return $scalar->getDefault()?'TRUE':'FALSE'; break;
  103. case Scalar::T_TIME : return ''.$scalar->getDefault(); break;
  104. case Scalar::T_DATE : return '\''.date('Y-m-d',$scalar->getDefault()).'\''; break;
  105. case Scalar::T_DATETIME : return '\''.date('Y-m-d H:i:s',$scalar->getDefault()).'\''; break;
  106. case Scalar::T_INT : return ''.$scalar->getDefault(); break;
  107. case Scalar::T_FLOAT : return ''.$scalar->getDefault(); break;
  108. default : return '\''.$scalar->getDefault().'\'';
  109. }
  110. }
  111. /**
  112. * Get scalar mysql type
  113. * @param $scalar Scalar scalar
  114. * @param $ai bool keep auto-increment type ?
  115. * @return string type
  116. */
  117. public static function type(Scalar $scalar,$ai=true) {
  118. // Don't keep auto-increment if necessary
  119. if (!$ai && $scalar->getType() == Scalar::T_INT_AI) {
  120. $scalar = clone $scalar;
  121. $scalar->setType(Scalar::T_INT);
  122. }
  123. // Switch on scalar type
  124. switch ($scalar->getType()) {
  125. // Boolean
  126. case Scalar::T_BOOL :
  127. return 'TINYINT(1)';
  128. break;
  129. // Integer
  130. case Scalar::T_INT :
  131. if ($scalar->getLength() == null) return 'INT';
  132. if ($scalar->getLength() <= 255) return 'TINYINT';
  133. if ($scalar->getLength() <= 65535) return 'SMALLINT';
  134. if ($scalar->getLength() <= 16777215) return 'MEDIUMINT';
  135. if ($scalar->getLength() <= 4294967295) return 'INT';
  136. return 'BIGINT';
  137. break;
  138. // Auto-increment
  139. case Scalar::T_INT_AI :
  140. return 'INT AUTO_INCREMENT';
  141. break;
  142. // Float
  143. case Scalar::T_FLOAT :
  144. return 'DECIMAL(12,8)';
  145. break;
  146. // Time
  147. case Scalar::T_TIME :
  148. return 'TIME';
  149. break;
  150. // Date
  151. case Scalar::T_DATE :
  152. return 'DATE';
  153. break;
  154. // Datetime
  155. case Scalar::T_DATETIME :
  156. return 'DATETIME';
  157. break;
  158. // Text
  159. case Scalar::T_TEXT :
  160. if ($scalar->getLength() == null) return 'VARCHAR(250)';
  161. if ($scalar->getLength() <= 255) return 'VARCHAR('.$scalar->getLength().')';
  162. if ($scalar->getLength() <= 65535) return 'TEXT';
  163. if ($scalar->getLength() <= 16777215) return 'MEDIUMTEXT';
  164. return 'LONGTEXT';
  165. break;
  166. }
  167. }
  168. /**
  169. * Get identifiers from an object
  170. * @param $object Object object
  171. * @return array object identifiers
  172. */
  173. public static function ids(Object $object) {
  174. // Parent ?
  175. if ($object->getParent() != null) {
  176. // Return parent's ids
  177. return MySQL::ids($object->getParent());
  178. } else {
  179. // Get object's ids
  180. $ids = array();
  181. foreach ($object->getAttrsIds() as $attr) {
  182. // Scalar/Object ?
  183. if ($attr->getElem() instanceof Scalar) {
  184. $ids[] = $attr->getElem();
  185. } else {
  186. $ids = array_merge($ids,MySQL::ids($attr->getElem()));
  187. }
  188. }
  189. // Return object's ids
  190. return $ids;
  191. }
  192. }
  193. }