01: package simpleorm.core;
02:
03: /** This contains MySQL specific code. <p>
04: *
05: *
06: * CHAR/VARCHAR max size 255(!) Thence TEXT.
07: *
08: *
09: ### pierrea@email.com suggests:- (Needs testing)
10:
11: - SDriverMysql should have its own quoteIdentifier using ` instead
12: of " (the character next to the 1 button above the tab button on a
13: std US keyboard). The double quotation fails for the tablenames.<p>
14:
15: - SDriverMysql should be updated with a new driverName: MySQL-AB
16: JDBC Driver. This is the driver name for all mysql jdbc drivers as
17: posted on Mysql developer section. It might be worthwhile to change
18: the driverName function to return an array of possible names instead
19: of a single name, either that or subclass SDriverMysql to
20: SDriverMMMysql and then include both.
21:
22: **/
23:
24: public class SDriverMySQL extends SDriver {
25:
26: protected String driverName() {
27: return "MySQL-AB JDBC Driver";
28: }
29:
30: //"Mark Matthews' MySQL Driver";}
31:
32: public String quoteIdentifier(String ident) {
33: if (ident.length() > maxIdentNameLength())
34: throw new SException.Error("Identifier '" + ident
35: + "' is longer than " + maxIdentNameLength()
36: + " chars as permitted by " + driverName());
37: return "`" + ident + "`";
38: }
39:
40: /** Any other text to be added after the final ")"*/
41: protected String postTablePostParenSQL(SRecordMeta meta) {
42: return "\n TYPE = InnoDB;";
43: }
44:
45: /** ### This assuems their "innoDB" mode. Not true for traditional
46: MySQL. Needs work. */
47: public boolean supportsLocking() {
48: return true;
49: }
50:
51: // ### Need to add generateKey() like Postgres driver.
52:
53: /** Returns <code>INDEX (KCOL)
54: * Apparantly MySQL needs the index to be created as part of the Create Table statement or it generates
55: * errors. I don't think any other DBs support INDEX clauses.
56: @author Joseph Greenwood
57: */
58: protected String indexKeySQL(SRecordMeta meta) {
59: return mapForeignKeys(meta, false);
60: }
61:
62: protected void makeForeignKeyIndexSQL(SRecordMeta meta, int fx,
63: SFieldReference fldRef, StringBuffer sbFkey,
64: StringBuffer sbRefed, StringBuffer fkey) {
65: fkey.append(",\n INDEX ");
66: fkey.append(" (");
67: fkey.append(sbFkey.toString());
68: fkey.append(")");
69: }
70:
71: }
|