osdir.com


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Creating a parametric SqlFunction


Hi!

My goal is to achieve something like this:

SELECT foo("some text", some_column) FROM some_table

by defining a new SQL operator foo that first argument should be a string
parameter and the second is a column from a given table.

For that, I have defined

public static class foo extends SqlFunction {
    foo() {
      super("FOO",
     SqlKind.OTHER_FUNCTION,
             null,
             null,
     OperandTypes.family(SqlTypeFamily.CHARACTER, SqlTypeFamily.NUMERIC),
             SqlFunctionCategory.SYSTEM);
   }
   @Override
   public RelDataType inferReturnType(SqlOperatorBinding opBinding) {
      assert opBinding.getOperandCount() == 2;
      final RelDataTypeFactory typeFactory
             = opBinding.getTypeFactory();
      return typeFactory.createSqlType(SqlTypeName.DOUBLE);
    }
  }

but when running the query I get an exception:

Column 'some text' not found in any table

What I am doing wrong?
How one can define a SQL operator so that not all of its arguments do not
have to be columns?
Are there alternative ways to approach the goal?

Best regards,
Pearu