Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

SQLDialectMySQL.java 3.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. * Copyright 2011 James Moger.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.iciql;
  17. import com.iciql.TableDefinition.FieldDefinition;
  18. import com.iciql.util.StatementBuilder;
  19. /**
  20. * MySQL database dialect.
  21. */
  22. public class SQLDialectMySQL extends SQLDialectDefault {
  23. @Override
  24. public String convertSqlType(String sqlType) {
  25. if (sqlType.equals("CLOB")) {
  26. return "TEXT";
  27. }
  28. return sqlType;
  29. }
  30. @Override
  31. protected <T> String prepareCreateTable(TableDefinition<T> def) {
  32. return "CREATE TABLE IF NOT EXISTS";
  33. }
  34. @Override
  35. public <T> void prepareDropView(SQLStatement stat, TableDefinition<T> def) {
  36. StatementBuilder buff = new StatementBuilder("DROP VIEW IF EXISTS "
  37. + prepareTableName(def.schemaName, def.tableName));
  38. stat.setSQL(buff.toString());
  39. return;
  40. }
  41. @Override
  42. public String prepareColumnName(String name) {
  43. return "`" + name + "`";
  44. }
  45. @Override
  46. protected boolean prepareColumnDefinition(StatementBuilder buff, String dataType, boolean isAutoIncrement,
  47. boolean isPrimaryKey) {
  48. String convertedType = convertSqlType(dataType);
  49. buff.append(convertedType);
  50. if (isIntegerType(dataType) && isAutoIncrement) {
  51. buff.append(" AUTO_INCREMENT");
  52. }
  53. return false;
  54. }
  55. @Override
  56. public <T> void prepareMerge(SQLStatement stat, String schemaName, String tableName,
  57. TableDefinition<T> def, Object obj) {
  58. StatementBuilder buff = new StatementBuilder("INSERT INTO ");
  59. buff.append(prepareTableName(schemaName, tableName)).append(" (");
  60. buff.resetCount();
  61. for (FieldDefinition field : def.fields) {
  62. buff.appendExceptFirst(", ");
  63. buff.append(field.columnName);
  64. }
  65. buff.resetCount();
  66. buff.append(") VALUES (");
  67. for (FieldDefinition field : def.fields) {
  68. buff.appendExceptFirst(", ");
  69. buff.append('?');
  70. Object value = def.getValue(obj, field);
  71. Object parameter = serialize(value, field.typeAdapter);
  72. stat.addParameter(parameter);
  73. }
  74. buff.append(") ON DUPLICATE KEY UPDATE ");
  75. buff.resetCount();
  76. for (FieldDefinition field : def.fields) {
  77. buff.appendExceptFirst(", ");
  78. buff.append(field.columnName);
  79. buff.append("=VALUES(");
  80. buff.append(field.columnName);
  81. buff.append(')');
  82. }
  83. stat.setSQL(buff.toString());
  84. }
  85. }