Есть ли у Кассандры запрос сна cql? - PullRequest
1 голос
/ 03 апреля 2019

Я ищу эквивалент SELECT pg_sleep(t) в PostgreSQL или waitfor в t-SQL. Это существует в Cassandra cql?

1 Ответ

1 голос
/ 03 апреля 2019

Не с какой-либо встроенной функцией. Это довольно сложно сделать с UDF, а также с белыми и черными списками:

whitelistedPatterns

"com/datastax/driver/core/",
"com/google/common/reflect/TypeToken",
"java/io/IOException.class",
"java/io/Serializable.class",
"java/lang/",
"java/math/",
"java/net/InetAddress.class",
"java/net/Inet4Address.class",
"java/net/Inet6Address.class",
"java/net/UnknownHostException.class", // req'd by InetAddress
"java/net/NetworkInterface.class", // req'd by InetAddress
"java/net/SocketException.class", // req'd by InetAddress
"java/nio/Buffer.class",
"java/nio/ByteBuffer.class",
"java/text/",
"java/time/",
"java/util/",
"org/apache/cassandra/cql3/functions/JavaUDF.class",
"org/apache/cassandra/cql3/functions/UDFContext.class",
"org/apache/cassandra/exceptions/",
"org/apache/cassandra/transport/ProtocolVersion.class"

blacklistedPatterns

"com/datastax/driver/core/Cluster.class",
"com/datastax/driver/core/Metrics.class",
"com/datastax/driver/core/NettyOptions.class",
"com/datastax/driver/core/Session.class",
"com/datastax/driver/core/Statement.class",
"com/datastax/driver/core/TimestampGenerator.class", // indirectly covers ServerSideTimestampGenerator + ThreadLocalMonotonicTimestampGenerator
"java/lang/Compiler.class",
"java/lang/InheritableThreadLocal.class",
"java/lang/Package.class",
"java/lang/Process.class",
"java/lang/ProcessBuilder.class",
"java/lang/ProcessEnvironment.class",
"java/lang/ProcessImpl.class",
"java/lang/Runnable.class",
"java/lang/Runtime.class",
"java/lang/Shutdown.class",
"java/lang/Thread.class",
"java/lang/ThreadGroup.class",
"java/lang/ThreadLocal.class",
"java/lang/instrument/",
"java/lang/invoke/",
"java/lang/management/",
"java/lang/ref/",
"java/lang/reflect/",
"java/util/ServiceLoader.class",
"java/util/Timer.class",
"java/util/concurrent/",
"java/util/function/",
"java/util/jar/",
"java/util/logging/",
"java/util/prefs/",
"java/util/spi/",
"java/util/stream/",
"java/util/zip/"

Если вы ДЕЙСТВИТЕЛЬНО нуждаетесь в этом и готовы совершать ужасные вещи, например:

CREATE OR REPLACE FUNCTION sleep (time int)
  CALLED ON NULL INPUT RETURNS int LANGUAGE java AS 
  '
  long start = System.currentTimeMillis();
  while (System.currentTimeMillis() < start + time);
  return time;
  ';

но это довольно ужасная идея, так как это жесткая петля. Может быть что-то, что вы можете сделать, чтобы ввести паузу в цикл, но черные списки довольно ограничительны из моего беглого просмотра.

...