@SqlType(StandardTypes.BOOLEAN) @Nullable @SqlNullable public static Boolean bloomFilterPersist(@SqlNullable @SqlType(BloomFilterType.TYPE) Slice bloomFilterSlice, @SqlType(StandardTypes.VARCHAR) Slice urlSlice) throws Exception { // Nothing todo if (urlSlice == null) { return true; } BloomFilter bf = getOrLoadBloomFilter(bloomFilterSlice); // Persist // we do not try catch here to make sure that errors are communicated clearly to the client // and typical retry logic continues to work String url = new String(urlSlice.getBytes()); if (!HTTP_CLIENT.isStarted()) { log.warn("Http client was not started, trying to start"); HTTP_CLIENT.start(); } Request post = HTTP_CLIENT.POST(url); post.content(new StringContentProvider(new String(bf.toBase64()))); post.method("PUT"); post.send(); log.info("Persisted " + bf.toString() + " " + url); return true; }
@ScalarFunction("fromWei") @Description("fromWei") @SqlType(StandardTypes.DOUBLE) public static double fromWei(@SqlType(StandardTypes.DOUBLE) double num, @SqlType(StandardTypes.VARCHAR) Slice unit) { String unitStr = unit.toStringUtf8().toUpperCase(); EthereumUnit u = EthereumUnit.valueOf(unitStr); return u.fromWei(num); }
@ScalarFunction("toWei") @Description("toWei") @SqlType(StandardTypes.DOUBLE) public static double toWei(@SqlType(StandardTypes.DOUBLE) double num, @SqlType(StandardTypes.VARCHAR) Slice unit) { String unitStr = unit.toStringUtf8().toUpperCase(); EthereumUnit u = EthereumUnit.valueOf(unitStr); return u.toWei(num); }
@Description("Returns the approximate cardinality of a HLL") @ScalarFunction("cardinality") @SqlType(StandardTypes.BIGINT) public static long hllCardinality(@SqlType(HyperLogLogType.TYPE) Slice hll) { return (Long) HyperLogLog.fromBytes(hll.getBytes()).approximateSize().estimate(); }
@Description("Create a HLL from a string") @ScalarFunction("hll_create") @SqlType(HyperLogLogType.TYPE) public static Slice hllCreate(@SqlType(StandardTypes.VARCHAR) Slice string, @SqlType(StandardTypes.BIGINT) long bits) { HyperLogLogMonoid monoid = new HyperLogLogMonoid((int) bits); DenseHLL hll = monoid.create(string.getBytes()).toDenseHLL(); return Slices.wrappedBuffer(HyperLogLog.toBytes(hll)); }
@SqlType(StandardTypes.BIGINT) @Nullable @SqlNullable public static Long bloomFilterExpectedInsertions(@SqlNullable @SqlType(BloomFilterType.TYPE) Slice bloomFilterSlice) { BloomFilter bf = getOrLoadBloomFilter(bloomFilterSlice); return (long) bf.getExpectedInsertions(); }
@Description(value = "Display expected insertions from the bloom filter") @Nullable @SqlNullable @SqlType(StandardTypes.DOUBLE) public static Double bloomFilterFalsePositivePercentage(@SqlNullable @SqlType(BloomFilterType.TYPE) Slice bloomFilterSlice) { BloomFilter bf = getOrLoadBloomFilter(bloomFilterSlice); return bf.getFalsePositivePercentage(); }
@Nullable @SqlNullable @SqlType(StandardTypes.VARCHAR) public static Slice bloomFilterToString(@SqlNullable @SqlType(BloomFilterType.TYPE) Slice bloomFilterSlice) { BloomFilter bf = getOrLoadBloomFilter(bloomFilterSlice); return Slices.wrappedBuffer(bf.toBase64()); }
@InputFunction public static void input( BloomFilterState state, @SqlType(VARCHAR) Slice slice) { BloomFilter bf = getOrCreateBloomFilter(state, BloomFilter.DEFAULT_BLOOM_FILTER_EXPECTED_INSERTIONS, BloomFilter.DEFAULT_BLOOM_FILTER_FALSE_POSITIVE_PERCENTAGE); // Note: do not update the memory size as this is constant to our bloom filter implementation bf.put(slice); }
@InputFunction public static void input( BloomFilterState state, @SqlType(VARCHAR) Slice slice, @SqlType(StandardTypes.BIGINT) long expectedInsertions) { BloomFilter bf = getOrCreateBloomFilter(state, (int) expectedInsertions, BloomFilter.DEFAULT_BLOOM_FILTER_FALSE_POSITIVE_PERCENTAGE); // Note: do not update the memory size as this is constant to our bloom filter implementation bf.put(slice); }
@InputFunction public static void input( BloomFilterState state, @SqlType(VARCHAR) Slice slice, @SqlType(StandardTypes.BIGINT) long expectedInsertions, @SqlType(StandardTypes.DOUBLE) double falsePositivePercentage) { BloomFilter bf = getOrCreateBloomFilter(state, (int) expectedInsertions, falsePositivePercentage); // Note: do not update the memory size as this is constant to our bloom filter implementation bf.put(slice); }
@InputFunction public static void input( BloomFilterState state, @SqlType(VARCHAR) Slice slice) throws Exception { BloomFilter bf = getOrCreateBloomFilter(state, BloomFilter.DEFAULT_BLOOM_FILTER_EXPECTED_INSERTIONS, BloomFilter.DEFAULT_BLOOM_FILTER_FALSE_POSITIVE_PERCENTAGE); // Do not try catch because we want to have visibility for client errors bf.putAll(BloomFilter.fromUrl(new String(slice.getBytes()))); state.setBloomFilter(bf); }
@InputFunction public static void input( BloomFilterState state, @SqlType(VARCHAR) Slice slice) { BloomFilter bf = getOrCreateBloomFilter(state, BloomFilter.DEFAULT_BLOOM_FILTER_EXPECTED_INSERTIONS, BloomFilter.DEFAULT_BLOOM_FILTER_FALSE_POSITIVE_PERCENTAGE); bf.putAll(BloomFilter.newInstance(slice.getBytes())); state.setBloomFilter(bf); }
@SqlType(StandardTypes.BOOLEAN) @SqlNullable public static Boolean varcharBloomFilterContains(@SqlNullable @SqlType(BloomFilterType.TYPE) Slice bloomFilterSlice, @SqlNullable @SqlType(StandardTypes.VARCHAR) Slice slice) { BloomFilter bf = getOrLoadBloomFilter(bloomFilterSlice); if (slice == null) { return false; } return bf.mightContain(slice); }
@ScalarFunction("eth_gasPrice") @Description("Returns current gas price") @SqlType(StandardTypes.DOUBLE) public static double ethGasPrice() throws IOException { return web3j.ethGasPrice().send().getGasPrice().doubleValue(); }
@ScalarFunction("eth_blockNumber") @Description("Returns current block number") @SqlType(StandardTypes.BIGINT) public static long ethBlockNumber() throws IOException { return web3j.ethBlockNumber().send().getBlockNumber().longValue(); }
@ScalarFunction("eth_getBalance") @Description("Returns the balance of an address") @SqlType(StandardTypes.DOUBLE) public static double ethGetBalance(@SqlType(StandardTypes.VARCHAR) Slice address) throws IOException { return web3j.ethGetBalance(address.toStringUtf8(), DefaultBlockParameter.valueOf(LATEST)).send().getBalance().doubleValue(); }
@ScalarFunction("eth_getBalance") @Description("Returns the balance of an address") @SqlType(StandardTypes.DOUBLE) public static double ethGetBalance(@SqlType(StandardTypes.VARCHAR) Slice address, @SqlType(StandardTypes.BIGINT) long blockNumber) throws IOException { return web3j.ethGetBalance(address.toStringUtf8(), DefaultBlockParameter.valueOf(BigInteger.valueOf(blockNumber))).send().getBalance().doubleValue(); }
@ScalarFunction("eth_getBalance") @Description("Returns the balance of an address") @SqlType(StandardTypes.DOUBLE) public static double ethGetBalance(@SqlType(StandardTypes.VARCHAR) Slice address, @SqlType(StandardTypes.VARCHAR) Slice blockName) throws IOException { return web3j.ethGetBalance(address.toStringUtf8(), DefaultBlockParameter.valueOf(blockName.toStringUtf8())).send().getBalance().doubleValue(); }
@ScalarFunction("eth_getTransactionCount") @Description("Returns the number of transactions from this address") @SqlType(StandardTypes.BIGINT) public static long ethGetTransactionCount(@SqlType(StandardTypes.VARCHAR) Slice address) throws IOException { return web3j.ethGetTransactionCount(address.toStringUtf8(), DefaultBlockParameter.valueOf(LATEST)).send().getTransactionCount().longValue(); }
@ScalarFunction("eth_getTransactionCount") @Description("Returns the number of transactions from this address") @SqlType(StandardTypes.BIGINT) public static long ethGetTransactionCount(@SqlType(StandardTypes.VARCHAR) Slice address, @SqlType(StandardTypes.BIGINT) long blockNumber) throws IOException { return web3j.ethGetTransactionCount(address.toStringUtf8(), DefaultBlockParameter.valueOf(BigInteger.valueOf(blockNumber))).send().getTransactionCount().longValue(); }
@ScalarFunction("eth_getTransactionCount") @Description("Returns the number of transactions from this address") @SqlType(StandardTypes.BIGINT) public static long ethGetTransactionCount(@SqlType(StandardTypes.VARCHAR) Slice address, @SqlType(StandardTypes.VARCHAR) Slice blockName) throws IOException { return web3j.ethGetTransactionCount(address.toStringUtf8(), DefaultBlockParameter.valueOf(blockName.toStringUtf8())).send().getTransactionCount().longValue(); }
@ScalarOperator(CAST) @SqlType(HyperLogLogType.TYPE) public static Slice castFromVarbinary(@SqlType(StandardTypes.VARBINARY) Slice slice) { return slice; }
@ScalarOperator(CAST) @SqlType(StandardTypes.VARBINARY) public static Slice castToVarbinary(@SqlType(HyperLogLogType.TYPE) Slice slice) { return slice; }