private void addDateFunction(String name, String methodName, String dateDesc, String timestampDesc, String returnType) { functions.add( new FunctionMethod(name, dateDesc, DATETIME, FUNCTION_CLASS, methodName, new FunctionParameter[] { new FunctionParameter("date", DataTypeManager.DefaultDataTypes.DATE, dateDesc) }, //$NON-NLS-1$ new FunctionParameter("result", returnType, dateDesc) ) ); //$NON-NLS-1$ functions.add( new FunctionMethod(name, timestampDesc, DATETIME, FUNCTION_CLASS, methodName, new FunctionParameter[] { new FunctionParameter("timestamp", DataTypeManager.DefaultDataTypes.TIMESTAMP, timestampDesc) }, //$NON-NLS-1$ new FunctionParameter("result", returnType, timestampDesc) ) ); //$NON-NLS-1$ }
@Override public void fillRow(List<Object> row, FunctionParameter param, VDBMetaData vdb, TransformationMetadata metadata, CommandContext cc, SimpleIterator<FunctionParameter> iter) { row.add(vdb.getName()); FunctionMethod parent = ((ExpandingSimpleIterator<FunctionMethod, FunctionParameter>)iter).getCurrentParent(); if (parent.getParent() == null) { row.add(CoreConstants.SYSTEM_MODEL); } else { row.add(parent.getParent().getName()); } row.add(parent.getName()); row.add(parent.getUUID()); row.add(param.getName()); row.add(param.getRuntimeType()); row.add(param.getPosition()); row.add(param.getPosition()==0?"ReturnValue":"In"); //$NON-NLS-1$ //$NON-NLS-2$ row.add(param.getPrecision()); row.add(param.getLength()); row.add(param.getScale()); row.add(param.getRadix()); row.add(param.getNullType().toString()); row.add(param.getUUID()); row.add(param.getAnnotation()); addTypeInfo(row, param, param.getDatatype()); }
public boolean isVarArgs() { if (this.inParameters != null && this.inParameters.size() > 0) { return inParameters.get(inParameters.size() - 1).isVarArg(); } return false; }
public FunctionParameter(String name, String type, String description, boolean vararg) { setName(name); setType(type); setDescription(description); this.isVarArg = vararg; }
private void setFunctionMethodTypes(FunctionMethod function) { FunctionParameter outputParameter = function.getOutputParameter(); if (outputParameter != null) { setDataType(outputParameter.getRuntimeType(), outputParameter, dataTypes, outputParameter.getNullType() == NullType.Nullable); } for (FunctionParameter param : function.getInputParameters()) { setDataType(param.getRuntimeType(), param, dataTypes, param.getNullType() == NullType.Nullable); } }
FunctionParameter fp = new FunctionParameter(pp.getName(), pp.getRuntimeType(), pp.getAnnotation()); fp.setDatatype(pp.getDatatype(), true, pp.getArrayDimensions()); fp.setLength(pp.getLength()); fp.setNameInSource(pp.getNameInSource()); fp.setNativeType(pp.getNativeType()); fp.setNullType(pp.getNullType()); fp.setProperties(pp.getProperties()); fp.setRadix(pp.getRadix()); fp.setScale(pp.getScale()); fp.setUUID(pp.getUUID()); if (pp.getType() == ProcedureParameter.Type.In) { fp.setVarArg(pp.isVarArg()); ins.add(fp); fp.setPosition(ins.size()); } else { method.setOutputParameter(fp); fp.setPosition(0);
boolean valid = true; for (ProcedureParameter param : procedureRecord.getParameters()) { FunctionParameter fp = new FunctionParameter(); fp.setName(param.getName()); fp.setDescription(param.getAnnotation()); fp.setRuntimeType(param.getRuntimeType()); fp.setDatatype(param.getDatatype(), true, param.getArrayDimensions()); fp.setUUID(param.getUUID()); switch (param.getType()) { case ReturnValue:
/** * Get type of parameter * @return Type name * @see org.teiid.core.types.DataTypeManager.DefaultDataTypes * @deprecated use {@link #getRuntimeType()} */ public String getType() { return getRuntimeType(); }
private static FunctionParameter parseParameter(XMLStreamReader reader) throws XMLStreamException { FunctionParameter fp = new FunctionParameter(); if (reader.getAttributeCount() > 0) { for(int i=0; i<reader.getAttributeCount(); i++) { String attrName = reader.getAttributeLocalName(i); String attrValue = reader.getAttributeValue(i); if (Element.NAME.getLocalName().equals(attrName)) { fp.setName(attrValue); } else if (Element.DESCRIPTION.getLocalName().equals(attrName)) { fp.setDescription(attrValue); } else if (Element.TYPE.getLocalName().equals(attrName)) { fp.setType(attrValue); } } } while(reader.nextTag() != XMLStreamConstants.END_ELEMENT); return fp; }
FunctionParameter param = params.get(i); validateFunctionParameter(param); param.setPosition(i+1); MetadataFactory.setDataType(param.getRuntimeType(), param, runtimeTypeMap, true); param.getUUID(); method.getOutputParameter().setPosition(0); MetadataFactory.setDataType(method.getOutputParameter().getRuntimeType(), method.getOutputParameter(), runtimeTypeMap, true); } catch(FunctionMetadataException e) { updateReport(report, method, e.getMessage());
private FunctionMethod addAgg(Schema s, String name, Class<?> clazz, String returns) { FunctionMethod fm = new FunctionMethod(); fm.setName(name); fm.setInvocationClass(clazz.getName()); fm.setInvocationMethod("addInput"); FunctionParameter fp = new FunctionParameter(); fp.setType(DataTypeManager.DefaultDataTypes.INTEGER); fp.setName("arg"); fp.setVarArg(true); fm.getInputParameters().add(fp); FunctionParameter fpout = new FunctionParameter(); fpout.setType(returns); fpout.setName("outp"); fm.setOutputParameter(fpout); AggregateAttributes aa = new AggregateAttributes(); fm.setAggregateAttributes(aa); s.getFunctions().put(fm.getName(), fm); return fm; }
@Test public void testUDF() throws Exception { String ddl = "CREATE VIRTUAL FUNCTION SourceFunc(flag boolean, msg varchar) RETURNS varchar " + "OPTIONS(CATEGORY 'misc', DETERMINISM 'DETERMINISTIC', " + "\"NULL-ON-NULL\" 'true', JAVA_CLASS 'foo', JAVA_METHOD 'bar', RANDOM 'any', UUID 'x')"; Schema s = helpParse(ddl, "model").getSchema(); FunctionMethod fm = s.getFunction("x"); assertNotNull(fm); assertEquals("string", fm.getOutputParameter().getRuntimeType()); assertEquals(FunctionMethod.PushDown.CAN_PUSHDOWN, fm.getPushdown()); assertEquals(2, fm.getInputParameterCount()); assertEquals("flag", fm.getInputParameters().get(0).getName()); assertEquals("boolean", fm.getInputParameters().get(0).getRuntimeType()); assertEquals("msg", fm.getInputParameters().get(1).getName()); assertEquals("string", fm.getInputParameters().get(1).getRuntimeType()); assertFalse( fm.getInputParameters().get(1).isVarArg()); assertEquals(FunctionMethod.Determinism.DETERMINISTIC, fm.getDeterminism()); assertEquals("misc", fm.getCategory()); assertEquals(true, fm.isNullOnNull()); assertEquals("foo", fm.getInvocationClass()); assertEquals("bar", fm.getInvocationMethod()); assertEquals("any", fm.getProperties().get("RANDOM")); }
/** * Determine whether a FunctionParameter is valid. The following items are validated: * <UL> * <LI>Validate parameter name</LI> * <LI>Validate description</LI> * <LI>Validate type</LI> * </UL> * @param param The parameter to validate * @throws FunctionMetadataException Thrown if function parameter is not valid in some way */ public static final void validateFunctionParameter(FunctionParameter param) throws FunctionMetadataException { if(param == null) { throw new FunctionMetadataException(QueryPlugin.Event.TEIID30427, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30427)); } // Validate attributes validateName(param.getName()); validateDescription(param.getDescription()); }
private FunctionMethod addFunction(Method method, TeiidFunction f, String name) { FunctionMethod func = MetadataFactory.createFunctionFromMethod(name, method); func.setDescription(QueryPlugin.Util.getString(QueryPlugin.Util.getString("SystemSource." + name.toLowerCase() + "_description"))); //$NON-NLS-1$ //$NON-NLS-2$ func.setCategory(f.category()); for (int i = 0; i < func.getInputParameterCount(); i++) { func.getInputParameters().get(i).setDescription(QueryPlugin.Util.getString("SystemSource." + name.toLowerCase() + "_param" + (i+1))); //$NON-NLS-1$ //$NON-NLS-2$ } func.getOutputParameter().setDescription(QueryPlugin.Util.getString("SystemSource." + name.toLowerCase() + "_result")); //$NON-NLS-1$ //$NON-NLS-2$ if (f.nullOnNull()) { func.setNullOnNull(true); } func.setDeterminism(f.determinism()); func.setPushdown(f.pushdown()); functions.add(func); return func; }
/** * Compare with other object for equality. Equality is based on whether * the type is the same as the other parameter. * @return True if equal to obj */ public boolean equals(Object obj) { if(obj == this) { return true; } if(!(obj instanceof FunctionParameter)) { return false; } FunctionParameter other = (FunctionParameter) obj; if(other.getType() == null) { return (this.getType() == null); } return other.getType().equals(this.getType()) && this.isVarArg == other.isVarArg; }
/** * * @param varargs * @return true if the value was successfully set. */ public boolean setVarArgs(boolean varargs) { if (this.inParameters != null && this.inParameters.size() > 0) { inParameters.get(inParameters.size() - 1).setVarArg(varargs); return true; } return false; }
FunctionParameter getParameter(String paramName, FunctionMethod func) throws MetadataException { List<FunctionParameter> params = func.getInputParameters(); for (FunctionParameter param:params) { if (param.getName().equalsIgnoreCase(paramName)) { return param; } } throw new MetadataException(QueryPlugin.Util.getString("SQLParser.alter_function_param_doesnot_exist", paramName, func.getName())); //$NON-NLS-1$ }
/** * Get description of parameter * @return Description */ public String getDescription() { return getAnnotation(); }
FunctionParameter fp = new FunctionParameter(pp.getName(), pp.getRuntimeType(), pp.getAnnotation()); fp.setDatatype(pp.getDatatype(), true, pp.getArrayDimensions()); fp.setLength(pp.getLength()); fp.setNameInSource(pp.getNameInSource()); fp.setNativeType(pp.getNativeType()); fp.setNullType(pp.getNullType()); fp.setProperties(pp.getProperties()); fp.setRadix(pp.getRadix()); fp.setScale(pp.getScale()); fp.setUUID(pp.getUUID()); if (pp.getType() == ProcedureParameter.Type.In) { fp.setVarArg(pp.isVarArg()); ins.add(fp); fp.setPosition(ins.size()); } else { method.setOutputParameter(fp); fp.setPosition(0);