use of org.apache.cassandra.cql3.functions.Function in project cassandra by apache.
the class UFScriptTest method testJavascriptUserType.
@Test
public void testJavascriptUserType() throws Throwable {
String type = createType("CREATE TYPE %s (txt text, i int)");
createTable("CREATE TABLE %s (key int primary key, udt frozen<" + type + ">)");
String fUdt1 = createFunction(KEYSPACE, type, "CREATE FUNCTION %s( udt " + type + " ) " + "RETURNS NULL ON NULL INPUT " + "RETURNS " + type + ' ' + "LANGUAGE javascript\n" + "AS $$" + " udt;$$;");
String fUdt2 = createFunction(KEYSPACE, type, "CREATE FUNCTION %s( udt " + type + " ) " + "RETURNS NULL ON NULL INPUT " + "RETURNS text " + "LANGUAGE javascript\n" + "AS $$" + " udt.getString(\"txt\");$$;");
String fUdt3 = createFunction(KEYSPACE, type, "CREATE FUNCTION %s( udt " + type + " ) " + "RETURNS NULL ON NULL INPUT " + "RETURNS int " + "LANGUAGE javascript\n" + "AS $$" + " udt.getInt(\"i\");$$;");
execute("INSERT INTO %s (key, udt) VALUES (1, {txt: 'one', i:1})");
UntypedResultSet rows = execute("SELECT " + fUdt1 + "(udt) FROM %s WHERE key = 1");
Assert.assertEquals(1, rows.size());
assertRows(execute("SELECT " + fUdt2 + "(udt) FROM %s WHERE key = 1"), row("one"));
assertRows(execute("SELECT " + fUdt3 + "(udt) FROM %s WHERE key = 1"), row(1));
}
use of org.apache.cassandra.cql3.functions.Function in project cassandra by apache.
the class UFTest method testFunctionWithReservedName.
@Test
public void testFunctionWithReservedName() throws Throwable {
execute("CREATE TABLE " + KEYSPACE_PER_TEST + ".second_tab (key int primary key, val double)");
String fName = createFunction(KEYSPACE_PER_TEST, "", "CREATE OR REPLACE FUNCTION %s() " + "RETURNS NULL ON NULL INPUT " + "RETURNS timestamp " + "LANGUAGE JAVA " + "AS 'return null;';");
execute("INSERT INTO " + KEYSPACE_PER_TEST + ".second_tab (key, val) VALUES (?, ?)", 1, 1d);
execute("INSERT INTO " + KEYSPACE_PER_TEST + ".second_tab (key, val) VALUES (?, ?)", 2, 2d);
execute("INSERT INTO " + KEYSPACE_PER_TEST + ".second_tab (key, val) VALUES (?, ?)", 3, 3d);
// ensure that system now() is executed
UntypedResultSet rows = execute("SELECT key, val, now() FROM " + KEYSPACE_PER_TEST + ".second_tab");
Assert.assertEquals(3, rows.size());
UntypedResultSet.Row row = rows.iterator().next();
Date ts = row.getTimestamp(row.getColumns().get(2).name.toString());
Assert.assertNotNull(ts);
// ensure that KEYSPACE_PER_TEST's now() is executed
rows = execute("SELECT key, val, " + fName + "() FROM " + KEYSPACE_PER_TEST + ".second_tab");
Assert.assertEquals(3, rows.size());
row = rows.iterator().next();
Assert.assertFalse(row.has(row.getColumns().get(2).name.toString()));
}
use of org.apache.cassandra.cql3.functions.Function in project cassandra by apache.
the class UFTest method testUserTypeDrop.
@Test
public void testUserTypeDrop() throws Throwable {
String type = KEYSPACE + '.' + createType("CREATE TYPE %s (txt text, i int)");
createTable("CREATE TABLE %s (key int primary key, udt frozen<" + type + ">)");
String fName = createFunction(KEYSPACE, type, "CREATE FUNCTION %s( udt " + type + " ) " + "CALLED ON NULL INPUT " + "RETURNS int " + "LANGUAGE java " + "AS $$return " + " Integer.valueOf(udt.getInt(\"i\"));$$;");
FunctionName fNameName = parseFunctionName(fName);
Assert.assertEquals(1, Schema.instance.getFunctions(fNameName).size());
ResultMessage.Prepared prepared = QueryProcessor.instance.prepare(String.format("SELECT key, %s(udt) FROM %s.%s", fName, KEYSPACE, currentTable()), ClientState.forInternalCalls());
Assert.assertNotNull(QueryProcessor.instance.getPrepared(prepared.statementId));
// UT still referenced by table
assertInvalidMessage("Cannot drop user type", "DROP TYPE " + type);
execute("DROP TABLE %s");
// UT still referenced by UDF
assertInvalidMessage("as it is still used by function", "DROP TYPE " + type);
Assert.assertNull(QueryProcessor.instance.getPrepared(prepared.statementId));
// function stays
Assert.assertEquals(1, Schema.instance.getFunctions(fNameName).size());
}
use of org.apache.cassandra.cql3.functions.Function in project cassandra by apache.
the class UFTest method testFunctionDropOnKeyspaceDrop.
@Test
public void testFunctionDropOnKeyspaceDrop() throws Throwable {
String fSin = createFunction(KEYSPACE_PER_TEST, "double", "CREATE FUNCTION %s ( input double ) " + "CALLED ON NULL INPUT " + "RETURNS double " + "LANGUAGE java " + "AS 'return Double.valueOf(Math.sin(input.doubleValue()));'");
FunctionName fSinName = parseFunctionName(fSin);
Assert.assertEquals(1, Schema.instance.getFunctions(parseFunctionName(fSin)).size());
assertRows(execute("SELECT function_name, language FROM system_schema.functions WHERE keyspace_name=?", KEYSPACE_PER_TEST), row(fSinName.name, "java"));
dropPerTestKeyspace();
assertRows(execute("SELECT function_name, language FROM system_schema.functions WHERE keyspace_name=?", KEYSPACE_PER_TEST));
Assert.assertEquals(0, Schema.instance.getFunctions(fSinName).size());
}
use of org.apache.cassandra.cql3.functions.Function in project cassandra by apache.
the class UFTypesTest method testComplexNullValues.
@Test
public void testComplexNullValues() throws Throwable {
String type = KEYSPACE + '.' + createType("CREATE TYPE %s (txt text, i int)");
createTable("CREATE TABLE %s (key int primary key, lst list<double>, st set<text>, mp map<int, boolean>," + "tup frozen<tuple<double, text, int, boolean>>, udt frozen<" + type + ">)");
String fList = createFunction(KEYSPACE, "list<double>", "CREATE FUNCTION %s( coll list<double> ) " + "CALLED ON NULL INPUT " + "RETURNS list<double> " + "LANGUAGE java\n" + "AS $$return coll;$$;");
String fSet = createFunction(KEYSPACE, "set<text>", "CREATE FUNCTION %s( coll set<text> ) " + "CALLED ON NULL INPUT " + "RETURNS set<text> " + "LANGUAGE java\n" + "AS $$return coll;$$;");
String fMap = createFunction(KEYSPACE, "map<int, boolean>", "CREATE FUNCTION %s( coll map<int, boolean> ) " + "CALLED ON NULL INPUT " + "RETURNS map<int, boolean> " + "LANGUAGE java\n" + "AS $$return coll;$$;");
String fTup = createFunction(KEYSPACE, "tuple<double, text, int, boolean>", "CREATE FUNCTION %s( val tuple<double, text, int, boolean> ) " + "CALLED ON NULL INPUT " + "RETURNS tuple<double, text, int, boolean> " + "LANGUAGE java\n" + "AS $$return val;$$;");
String fUdt = createFunction(KEYSPACE, type, "CREATE FUNCTION %s( val " + type + " ) " + "CALLED ON NULL INPUT " + "RETURNS " + type + " " + "LANGUAGE java\n" + "AS $$return val;$$;");
List<Double> list = Arrays.asList(1d, 2d, 3d);
Set<String> set = new TreeSet<>(Arrays.asList("one", "three", "two"));
Map<Integer, Boolean> map = new TreeMap<>();
map.put(1, true);
map.put(2, false);
map.put(3, true);
Object t = tuple(1d, "one", 42, false);
execute("INSERT INTO %s (key, lst, st, mp, tup, udt) VALUES (1, ?, ?, ?, ?, {txt: 'one', i:1})", list, set, map, t);
execute("INSERT INTO %s (key, lst, st, mp, tup, udt) VALUES (2, ?, ?, ?, ?, null)", null, null, null, null);
execute("SELECT " + fList + "(lst), " + fSet + "(st), " + fMap + "(mp), " + fTup + "(tup), " + fUdt + "(udt) FROM %s WHERE key = 1");
UntypedResultSet.Row row = execute("SELECT " + fList + "(lst) as l, " + fSet + "(st) as s, " + fMap + "(mp) as m, " + fTup + "(tup) as t, " + fUdt + "(udt) as u " + "FROM %s WHERE key = 1").one();
Assert.assertNotNull(row.getBytes("l"));
Assert.assertNotNull(row.getBytes("s"));
Assert.assertNotNull(row.getBytes("m"));
Assert.assertNotNull(row.getBytes("t"));
Assert.assertNotNull(row.getBytes("u"));
row = execute("SELECT " + fList + "(lst) as l, " + fSet + "(st) as s, " + fMap + "(mp) as m, " + fTup + "(tup) as t, " + fUdt + "(udt) as u " + "FROM %s WHERE key = 2").one();
Assert.assertNull(row.getBytes("l"));
Assert.assertNull(row.getBytes("s"));
Assert.assertNull(row.getBytes("m"));
Assert.assertNull(row.getBytes("t"));
Assert.assertNull(row.getBytes("u"));
for (ProtocolVersion version : PROTOCOL_VERSIONS) {
Row r = executeNet(version, "SELECT " + fList + "(lst) as l, " + fSet + "(st) as s, " + fMap + "(mp) as m, " + fTup + "(tup) as t, " + fUdt + "(udt) as u " + "FROM %s WHERE key = 1").one();
Assert.assertNotNull(r.getBytesUnsafe("l"));
Assert.assertNotNull(r.getBytesUnsafe("s"));
Assert.assertNotNull(r.getBytesUnsafe("m"));
Assert.assertNotNull(r.getBytesUnsafe("t"));
Assert.assertNotNull(r.getBytesUnsafe("u"));
r = executeNet(version, "SELECT " + fList + "(lst) as l, " + fSet + "(st) as s, " + fMap + "(mp) as m, " + fTup + "(tup) as t, " + fUdt + "(udt) as u " + "FROM %s WHERE key = 2").one();
Assert.assertNull(r.getBytesUnsafe("l"));
Assert.assertNull(r.getBytesUnsafe("s"));
Assert.assertNull(r.getBytesUnsafe("m"));
Assert.assertNull(r.getBytesUnsafe("t"));
Assert.assertNull(r.getBytesUnsafe("u"));
}
}
Aggregations