[prev in list] [next in list] [prev in thread] [next in thread] 

List:       turbine-torque-dev
Subject:    cvs commit: db-torque/xdocs changes.xml schema-howto.xml
From:       tfischer () apache ! org
Date:       2005-02-23 17:32:09
Message-ID: 20050223173209.32681.qmail () minotaur ! apache ! org
[Download RAW message or body]

tfischer    2005/02/23 09:32:09

  Modified:    src/generator/src/dtd database.dtd
               src/generator/src/test/org/apache/torque/engine/database/model
                        NameFactoryTest.java
               src/generator/src/java/org/apache/torque/engine/database/model
                        NameGenerator.java JavaNameGenerator.java
               xdocs    changes.xml schema-howto.xml
  Log:
  Added support for specifying database schema names at generate time, i.e. \
tablenames like "my_schema.my_table" can now be used in schema.xml  
  To do this, the java naming methods "underscore" and "javaname" in the generator \
were changed such that, in addition to removing underscores, they remove dots as \
well.  Also, a new java naming method called underscoreOmitSchema was introduced, \
which works like the underscore method but omits everything before the last dot.  As \
an example, the tablename "my_schema.my_TABLE" would produce the java name \
"MySchemaMyTable" with the method "underscore", "MySchemaMyTABLE" with the method \
"javaName", and "MyTable" with the method UnderscoreOmitSchema.  
  I did not know how to proceed with the "nochange" method, it will produce unvalid \
java names if schemata are used (java name "my_schema.my_TABLE").  
  Also some docs were added in the schema-howto.
  
  The changes were tested for oracle, I will do tests for mysql and postgresql as \
well.  
  Revision  Changes    Path
  1.5       +11 -6     db-torque/src/generator/src/dtd/database.dtd
  
  Index: database.dtd
  ===================================================================
  RCS file: /home/cvs/db-torque/src/generator/src/dtd/database.dtd,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- database.dtd	25 Nov 2003 16:57:44 -0000	1.4
  +++ database.dtd	23 Feb 2005 17:32:09 -0000	1.5
  @@ -23,10 +23,15 @@
   Java class or method name.
   
        nochange   - indicates not change is performed.
  -     underscore - Underscores are removed, First letter is
  +     underscore - Underscores and dots are removed, first letter is
                 capitalized, first letter after an underscore
  -              is capitalized, the rest of the letters are
  -              converted to lowercase.
  +              is capitalized, first letter after a dot is capitalized,
  +              the rest of the letters are converted to lowercase.
  +     underscoreOmitSchema - The section of the name before and including
  +              the last dot in the name is removed. For the remaining part,
  +              underscores are removed, first letter is capitalized, 
  +              first letter after an underscore is capitalized, 
  +              the rest of the letters are converted to lowercase.
        javaname   - same as underscore, but no letters are converted
                 to lowercase.
   -->
  @@ -39,7 +44,7 @@
     package CDATA #IMPLIED
     baseClass CDATA #IMPLIED
     basePeer CDATA #IMPLIED
  -  defaultJavaNamingMethod (nochange|underscore|javaname) "underscore"
  +  defaultJavaNamingMethod (nochange|underscore|underscoreOmitSchema|javaname) \
"underscore"  heavyIndexing (true|false) "false"
   >
   
  @@ -82,7 +87,7 @@
     basePeer CDATA #IMPLIED
     alias CDATA #IMPLIED
     interface CDATA #IMPLIED
  -  javaNamingMethod (nochange|underscore|javaname) #IMPLIED
  +  javaNamingMethod (nochange|underscore|underscoreOmitSchema|javaname) #IMPLIED
     heavyIndexing (true|false) #IMPLIED
     description CDATA #IMPLIED
   >
  
  
  
  1.6       +26 -5     \
db-torque/src/generator/src/test/org/apache/torque/engine/database/model/NameFactoryTest.java
  
  Index: NameFactoryTest.java
  ===================================================================
  RCS file: /home/cvs/db-torque/src/generator/src/test/org/apache/torque/engine/database/model/NameFactoryTest.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- NameFactoryTest.java	22 Feb 2004 06:29:38 -0000	1.5
  +++ NameFactoryTest.java	23 Feb 2005 17:32:09 -0000	1.6
  @@ -68,9 +68,22 @@
                   }
           }, {
               {
  -                "MY_USER", NameGenerator.CONV_METHOD_UNDERSCORE }, {
  -                "MY_USER", NameGenerator.CONV_METHOD_JAVANAME }, {
  -                "MY_USER", NameGenerator.CONV_METHOD_NOCHANGE }
  +                "MY_USER", 
  +                        NameGenerator.CONV_METHOD_UNDERSCORE }, {
  +                "MY_USER", 
  +                        NameGenerator.CONV_METHOD_UNDERSCORE_OMIT_SCHEMA }, {
  +                "MY_USER", 
  +                        NameGenerator.CONV_METHOD_JAVANAME }, {
  +                "MY_USER", 
  +                        NameGenerator.CONV_METHOD_NOCHANGE }, {
  +                "MY_SCHEMA.MY_USER", 
  +                        NameGenerator.CONV_METHOD_UNDERSCORE }, {
  +                "MY_SCHEMA.MY_USER",
  +                        NameGenerator.CONV_METHOD_UNDERSCORE_OMIT_SCHEMA }, {
  +                "MY_SCHEMA.MY_USER",
  +                        NameGenerator.CONV_METHOD_JAVANAME } , {
  +                "MY_SCHEMA.MY_USER",
  +                        NameGenerator.CONV_METHOD_NOCHANGE }
           }
       };
   
  @@ -86,7 +99,15 @@
                   makeString(4) + "_FK_1",
                   makeString(5) + "_FK_2" },
               {
  -            "MyUser", "MYUSER", "MY_USER" }
  +                "MyUser", 
  +                "MyUser", 
  +                "MYUSER", 
  +                "MY_USER", 
  +                "MySchemaMyUser", 
  +                "MyUser",
  +                "MYSCHEMAMYUSER",
  +                "MY_SCHEMA.MY_USER"
  +            }
       };
   
       /**
  
  
  
  1.3       +14 -1     \
db-torque/src/generator/src/java/org/apache/torque/engine/database/model/NameGenerator.java
  
  Index: NameGenerator.java
  ===================================================================
  RCS file: /home/cvs/db-torque/src/generator/src/java/org/apache/torque/engine/database/model/NameGenerator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- NameGenerator.java	22 Feb 2004 06:27:19 -0000	1.2
  +++ NameGenerator.java	23 Feb 2005 17:32:09 -0000	1.3
  @@ -36,6 +36,11 @@
       char STD_SEPARATOR_CHAR = '_';
   
       /**
  +     * The character which separates the schema name from the table name
  +     */
  +    char SCHEMA_SEPARATOR_CHAR = '.';
  +
  +    /**
        * Traditional method for converting schema table and column names
        * to java names.  The <code>CONV_METHOD_XXX</code> constants
        * define how names for columns and tables in the database schema
  @@ -46,6 +51,14 @@
       String CONV_METHOD_UNDERSCORE = "underscore";
   
       /**
  +     * Similar to {@link #CONV_METHOD_UNDERSCORE} except a possible
  +     * schema name (preceding a dot (.) )is omitted
  +     *
  +     * @see JavaNameGenerator#underscoreOmitSchemaMethod(String)
  +     */
  +    String CONV_METHOD_UNDERSCORE_OMIT_SCHEMA = "underscoreOmitSchema";
  +
  +    /**
        * Similar to {@link #CONV_METHOD_UNDERSCORE} except nothing is
        * converted to lowercase.
        *
  
  
  
  1.4       +67 -3     \
db-torque/src/generator/src/java/org/apache/torque/engine/database/model/JavaNameGenerator.java
  
  Index: JavaNameGenerator.java
  ===================================================================
  RCS file: /home/cvs/db-torque/src/generator/src/java/org/apache/torque/engine/database/model/JavaNameGenerator.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JavaNameGenerator.java	22 Feb 2004 06:27:19 -0000	1.3
  +++ JavaNameGenerator.java	23 Feb 2005 17:32:09 -0000	1.4
  @@ -57,6 +57,10 @@
           {
               javaName = underscoreMethod(schemaName);
           }
  +        else if (CONV_METHOD_UNDERSCORE_OMIT_SCHEMA.equals(method))
  +        {
  +            javaName = underscoreOmitSchemaMethod(schemaName);
  +        }
           else if (CONV_METHOD_JAVANAME.equals(method))
           {
               javaName = javanameMethod(schemaName);
  @@ -77,8 +81,9 @@
   
       /**
        * Converts a database schema name to java object name.  Removes
  -     * <code>STD_SEPARATOR_CHAR</code>, capitilizes first letter of
  -     * name and each letter after the <code>STD_SEPERATOR</code>,
  +     * <code>STD_SEPARATOR_CHAR</code> and <code>SCHEMA_SEPARATOR_CHAR</code>,
  +     * capitilizes first letter of name and each letter after the 
  +     * <code>STD_SEPERATOR</code> and <code>SCHEMA_SEPARATOR_CHAR</code>,
        * converts the rest of the letters to lowercase.
        *
        * @param schemaName name to be converted.
  @@ -89,6 +94,52 @@
       protected String underscoreMethod(String schemaName)
       {
           StringBuffer name = new StringBuffer();
  +        
  +        // remove the STD_SEPARATOR_CHARs and capitalize 
  +        // the tokens
  +        StringTokenizer tok = new StringTokenizer
  +            (schemaName, String.valueOf(STD_SEPARATOR_CHAR));
  +        while (tok.hasMoreTokens())
  +        {
  +            String namePart = ((String) tok.nextElement()).toLowerCase();
  +            name.append(StringUtils.capitalize(namePart));
  +        }
  +        
  +        // remove the SCHEMA_SEPARATOR_CHARs and capitalize 
  +        // the tokens
  +        schemaName = name.toString();
  +        name = new StringBuffer();
  +        tok = new StringTokenizer
  +            (schemaName, String.valueOf(SCHEMA_SEPARATOR_CHAR));
  +        while (tok.hasMoreTokens())
  +        {
  +            String namePart = (String) tok.nextElement();
  +            name.append(StringUtils.capitalize(namePart));
  +        }
  +        return name.toString();
  +    }
  +
  +    /**
  +     * Converts a database schema name to java object name. 
  +     * First, it removes all characters before the last occurence of 
  +     * .<code>SCHEMA_SEPARATOR_CHAR</code>. Then, in a second step, removes
  +     * <code>STD_SEPARATOR_CHAR</code>, capitilizes first letter of
  +     * name and each letter after the <code>STD_SEPERATOR</code>,
  +     * and converts the rest of the letters to lowercase.
  +     *
  +     * @param schemaName name to be converted.
  +     * @return converted name.
  +     * @see org.apache.torque.engine.database.model.NameGenerator
  +     * @see #underscoreOmitSchemaMethod(String)
  +     */
  +    protected String underscoreOmitSchemaMethod(String schemaName)
  +    {
  +        // take only part after last dot
  +        int lastDotPos = schemaName.lastIndexOf(SCHEMA_SEPARATOR_CHAR);
  +        if (lastDotPos != -1) {
  +            schemaName = schemaName.substring(lastDotPos + 1);
  +        }
  +        StringBuffer name = new StringBuffer();
           StringTokenizer tok = new StringTokenizer
               (schemaName, String.valueOf(STD_SEPARATOR_CHAR));
           while (tok.hasMoreTokens())
  @@ -119,6 +170,19 @@
               String namePart = (String) tok.nextElement();
               name.append(StringUtils.capitalize(namePart));
           }
  +
  +        // remove the SCHEMA_SEPARATOR_CHARs and capitalize 
  +        // the tokens
  +        schemaName = name.toString();
  +        name = new StringBuffer();
  +        
  +        tok = new StringTokenizer
  +            (schemaName, String.valueOf(SCHEMA_SEPARATOR_CHAR));
  +        while (tok.hasMoreTokens())
  +        {
  +            String namePart = (String) tok.nextElement();
  +            name.append(StringUtils.capitalize(namePart));
  +        }
           return name.toString();
       }
   
  
  
  
  1.145     +4 -0      db-torque/xdocs/changes.xml
  
  Index: changes.xml
  ===================================================================
  RCS file: /home/cvs/db-torque/xdocs/changes.xml,v
  retrieving revision 1.144
  retrieving revision 1.145
  diff -u -r1.144 -r1.145
  --- changes.xml	18 Feb 2005 10:06:22 -0000	1.144
  +++ changes.xml	23 Feb 2005 17:32:09 -0000	1.145
  @@ -28,6 +28,10 @@
     <body>
   
     <release version="3.2-dev" date="in CVS">
  +    <action type="add" dev="tfischer">
  +      Added support for schema support at generate time. 
  +      See <a href="schema-howto.html">Schema Support Howto</a>.
  +    </action>
       <action type="remove" dev="tfischer" issue="TRQS222">
         Removed Oracle Update patch again. 
         Creates invalid scripts and causes ant to fail. 
  
  
  
  1.3       +63 -4     db-torque/xdocs/schema-howto.xml
  
  Index: schema-howto.xml
  ===================================================================
  RCS file: /home/cvs/db-torque/xdocs/schema-howto.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- schema-howto.xml	31 Jan 2005 19:43:56 -0000	1.2
  +++ schema-howto.xml	23 Feb 2005 17:32:09 -0000	1.3
  @@ -20,14 +20,15 @@
   
   <p>
   Torque has some rudimentary support for Database schemas when
  -accessing a database. The current generator can not create schema
  -specific SQL files for you, all the table names will be unqualified
  -(i.e. end up in the 'public' schema).
  +accessing a database. Schema names can either be specified when
  +generating classes via the generator, or they can be specified
  +in the runtime. Note that specifying explicit schema names both at 
  +generate time and at runtime is not tested and most likely causes problems.
   </p>
   
   </section>
   
  -<section name="Configuring Schema Names">
  +<section name="Configuring Schema Names at Runtime">
   
   <p>
   Schema support happens &quot;per-DataSourceFactory&quot;. This might
  @@ -87,5 +88,63 @@
   
   </section>
   
  +  <section name="Using Schema Names at generate time">
  +
  +    <p>
  +      To define the schema of a table in the schema.xml, use the 
  +      fully qualified table name as name attribute in the &lt;table&gt; 
  +      element of your schema.xml.
  +      For example, to use the schema "bookstore" for the table "book", 
  +      use the following table definition:
  +    </p>
  +
  +    <source><![CDATA[
  +...
  +<table name="bookstore.book" description="Book table">
  +...
  +]]>
  +    </source>
  +
  +    <p>
  +      If the standard naming method is used, the resulting 
  +      java class will be named BookstoreBook. If you want to omit 
  +      the schema name in the java name 
  +      (i.e. the resulting java class should be named "Book"),
  +      you can either use the javaName attribute of the table definition:
  +    </p>
  +
  +    <source><![CDATA[
  +...
  +<table name="bookstore.book" javaName="Book" description="Book table">
  +...
  +]]>
  +    </source>
  +
  +    <p>
  +      or you can use the attribute 
  +      defaultJavaNamingMethod="underscoreOmitSchema"
  +      in the database definition:
  +    </p>
  +
  +    <source><![CDATA[
  +...
  +<database name="bookstore" defaultJavaNamingMethod="underscoreOmitSchema">
  +...
  +]]>
  +      </source>
  +
  +    <p>
  +      Note that the defaultJavaNamingMethod attribute of a table 
  +      will only affect the column names in the table and cannot 
  +      be used to change the name of the table itself.
  +    </p>
  +
  +    <p>
  +      If you use a sequence to autogenerate ids, the sequence will be generated in \
the same schema   +      as the table.
  +    </p>
  +
  +  </section>
  +
    </body>
   </document>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: torque-dev-unsubscribe@db.apache.org
For additional commands, e-mail: torque-dev-help@db.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic