[teiid-commits] teiid SVN: r4019 - in branches/7.7.x: connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle and 2 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Wed Apr 18 14:03:20 EDT 2012


Author: shawkins
Date: 2012-04-18 14:03:19 -0400 (Wed, 18 Apr 2012)
New Revision: 4019

Modified:
   branches/7.7.x/api/src/main/java/org/teiid/translator/ExecutionFactory.java
   branches/7.7.x/api/src/main/java/org/teiid/translator/SourceSystemFunctions.java
   branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java
   branches/7.7.x/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/oracle/TestOracleTranslator.java
   branches/7.7.x/documentation/reference/src/main/docbook/en-US/content/translators.xml
Log:
TEIID-2005 fixing oracle sequence and expanding javadocs

Modified: branches/7.7.x/api/src/main/java/org/teiid/translator/ExecutionFactory.java
===================================================================
--- branches/7.7.x/api/src/main/java/org/teiid/translator/ExecutionFactory.java	2012-04-18 15:28:57 UTC (rev 4018)
+++ branches/7.7.x/api/src/main/java/org/teiid/translator/ExecutionFactory.java	2012-04-18 18:03:19 UTC (rev 4019)
@@ -683,7 +683,11 @@
         
     /**
      * Get list of all supported function names.  Arithmetic functions have names like
-     * "+".  
+     * "+". 
+     * @see SourceSystemFunctions for a listing of system pushdown functions.  Note that
+     * not all system functions are listed as some functions will use a common name
+     * such as CONCAT vs. the || operator, and other functions will be rewritten and
+     * not pushed down, such as SPACE. 
      * @since 3.1 SP3    
      */        
     public List<String> getSupportedFunctions() {

Modified: branches/7.7.x/api/src/main/java/org/teiid/translator/SourceSystemFunctions.java
===================================================================
--- branches/7.7.x/api/src/main/java/org/teiid/translator/SourceSystemFunctions.java	2012-04-18 15:28:57 UTC (rev 4018)
+++ branches/7.7.x/api/src/main/java/org/teiid/translator/SourceSystemFunctions.java	2012-04-18 18:03:19 UTC (rev 4019)
@@ -27,6 +27,10 @@
  * The names and function forms follow the Open Group CLI functions, with a few exceptions
  * (such as lpad, rpad, bitand, bitor, etc. which are most notably supported by Oracle).
  * 
+ * Note that not all system functions are listed as some functions will use a common name
+ * such as CONCAT vs. the || operator, and other functions will be rewritten and
+ * not pushed down, such as SPACE.
+ * 
  */
 public class SourceSystemFunctions {
 	

Modified: branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java
===================================================================
--- branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java	2012-04-18 15:28:57 UTC (rev 4018)
+++ branches/7.7.x/connectors/translator-jdbc/src/main/java/org/teiid/translator/jdbc/oracle/OracleExecutionFactory.java	2012-04-18 18:03:19 UTC (rev 4019)
@@ -41,6 +41,7 @@
 import org.teiid.language.visitor.CollectorVisitor;
 import org.teiid.logging.LogConstants;
 import org.teiid.logging.LogManager;
+import org.teiid.metadata.AbstractMetadataRecord;
 import org.teiid.metadata.Column;
 import org.teiid.translator.ExecutionContext;
 import org.teiid.translator.SourceSystemFunctions;
@@ -493,6 +494,34 @@
     			super.visit(obj);
     		}
     		
+    		public void visit(NamedTable table) {
+    			stripDualAlias(table);
+    			super.visit(table);
+    		}
+
+			private void stripDualAlias(NamedTable table) {
+				if (table.getCorrelationName() != null) {
+    				String groupName = null;
+    				AbstractMetadataRecord groupID = table.getMetadataObject();
+                    if(groupID != null) {              
+                        groupName = getName(groupID);
+                    } else {
+                        groupName = table.getName();
+                    }
+                    if (DUAL.equalsIgnoreCase(groupName)) {
+                    	table.setCorrelationName(null);
+                    }
+    			}
+			}
+    		
+    		@Override
+    		public void visit(ColumnReference obj) {
+    			if (obj.getTable() != null) {
+    				stripDualAlias(obj.getTable());
+    			}
+    			super.visit(obj);
+    		}
+    		
     	};
     }
     

Modified: branches/7.7.x/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/oracle/TestOracleTranslator.java
===================================================================
--- branches/7.7.x/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/oracle/TestOracleTranslator.java	2012-04-18 15:28:57 UTC (rev 4018)
+++ branches/7.7.x/connectors/translator-jdbc/src/test/java/org/teiid/translator/jdbc/oracle/TestOracleTranslator.java	2012-04-18 18:03:19 UTC (rev 4019)
@@ -655,8 +655,8 @@
      * @since 4.3
      */
     @Test public void testDUAL() throws Exception {
-        String input = "SELECT something FROM DUAL"; //$NON-NLS-1$
-        String output = "SELECT something FROM DUAL"; //$NON-NLS-1$
+        String input = "SELECT something FROM DUAL as g0"; //$NON-NLS-1$
+        String output = "SELECT seq.nextval FROM DUAL"; //$NON-NLS-1$
                
         helpTestVisitor(getOracleSpecificMetadata(),
             input, 
@@ -776,14 +776,15 @@
         cols.get(1).setNameInSource("ID:SEQUENCE=MYSEQUENCE.nextVal"); //$NON-NLS-1$
         cols.get(2).setNativeType("date"); //$NON-NLS-1$
         cols.get(3).setNativeType("CHAR");
-        RealMetadataFactory.createElements(dual, new String[] {"something"}, new String[] {DataTypeManager.DefaultDataTypes.STRING}); //$NON-NLS-1$
+        List<Column> dualCols = RealMetadataFactory.createElements(dual, new String[] {"something"}, new String[] {DataTypeManager.DefaultDataTypes.STRING}); //$NON-NLS-1$
+        dualCols.get(0).setNameInSource("seq.nextval");
         
         ProcedureParameter in1 = RealMetadataFactory.createParameter("in1", SPParameter.IN, DataTypeManager.DefaultDataTypes.INTEGER); //$NON-NLS-1$
 		ColumnSet<Procedure> rs3 = RealMetadataFactory.createResultSet("proc.rs1", new String[] { "e1" }, new String[] { DataTypeManager.DefaultDataTypes.INTEGER }); //$NON-NLS-1$ //$NON-NLS-2$ 
         Procedure p = RealMetadataFactory.createStoredProcedure("proc", foo, Arrays.asList(in1));
         p.setResultSet(rs3);
         p.setProperty(SQLConversionVisitor.TEIID_NATIVE_QUERY, "select x from y where z = $1");
-        
+
         CompositeMetadataStore store = new CompositeMetadataStore(metadataStore);
         return new TransformationMetadata(null, store, null, RealMetadataFactory.SFM.getSystemFunctions(), null);
     }

Modified: branches/7.7.x/documentation/reference/src/main/docbook/en-US/content/translators.xml
===================================================================
--- branches/7.7.x/documentation/reference/src/main/docbook/en-US/content/translators.xml	2012-04-18 15:28:57 UTC (rev 4018)
+++ branches/7.7.x/documentation/reference/src/main/docbook/en-US/content/translators.xml	2012-04-18 18:03:19 UTC (rev 4019)
@@ -353,7 +353,7 @@
                     <emphasis>oracle</emphasis> - for use with Oracle 9i or later.  
                     Sequences may be used with the Oracle translator. A sequence may be 
                     modeled as a table with a name in source of DUAL and columns with the 
-                    name in source set to <code>&lt;sequencesequence name&gt;.[nextval|currentval].</code>  
+                    name in source set to <code>&lt;sequence name&gt;.[nextval|currentval].</code>  
                     You can use a sequence as the default value for insert columns by 
                     setting the column to autoincrement and the name in source to 
                     <code>&lt;element name&gt;:SEQUENCE=&lt;sequence name&gt;.&lt;sequence value&gt;</code>.



More information about the teiid-commits mailing list