From b17c3bf6df4e58bbee59ce7063dcc58ff79edd55 Mon Sep 17 00:00:00 2001 From: Calle Wilund Date: Tue, 7 Jul 2015 16:07:56 +0200 Subject: [PATCH] TokenFct Java->C++ --- cql3/functions/TokenFct.java | 65 ------------------------------------ cql3/functions/token_fct.hh | 60 +++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 65 deletions(-) delete mode 100644 cql3/functions/TokenFct.java create mode 100644 cql3/functions/token_fct.hh diff --git a/cql3/functions/TokenFct.java b/cql3/functions/TokenFct.java deleted file mode 100644 index 9d50a972f6..0000000000 --- a/cql3/functions/TokenFct.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.cassandra.cql3.functions; - -import java.nio.ByteBuffer; -import java.util.List; - -import org.apache.cassandra.config.CFMetaData; -import org.apache.cassandra.config.ColumnDefinition; -import org.apache.cassandra.db.composites.CBuilder; -import org.apache.cassandra.db.marshal.AbstractType; -import org.apache.cassandra.dht.IPartitioner; -import org.apache.cassandra.exceptions.InvalidRequestException; -import org.apache.cassandra.service.StorageService; - -public class TokenFct extends NativeScalarFunction -{ - // The actual token function depends on the partitioner used - private static final IPartitioner partitioner = StorageService.getPartitioner(); - - private final CFMetaData cfm; - - public TokenFct(CFMetaData cfm) - { - super("token", partitioner.getTokenValidator(), getKeyTypes(cfm)); - this.cfm = cfm; - } - - private static AbstractType[] getKeyTypes(CFMetaData cfm) - { - AbstractType[] types = new AbstractType[cfm.partitionKeyColumns().size()]; - int i = 0; - for (ColumnDefinition def : cfm.partitionKeyColumns()) - types[i++] = def.type; - return types; - } - - public ByteBuffer execute(int protocolVersion, List parameters) throws InvalidRequestException - { - CBuilder builder = cfm.getKeyValidatorAsCType().builder(); - for (int i = 0; i < parameters.size(); i++) - { - ByteBuffer bb = parameters.get(i); - if (bb == null) - return null; - builder.add(bb); - } - return partitioner.getTokenFactory().toByteArray(partitioner.getToken(builder.build().toByteBuffer())); - } -} diff --git a/cql3/functions/token_fct.hh b/cql3/functions/token_fct.hh new file mode 100644 index 0000000000..3039d68552 --- /dev/null +++ b/cql3/functions/token_fct.hh @@ -0,0 +1,60 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Modified by Cloudius Systems + * + * Copyright 2015 Cloudius Systems + */ + +#pragma once + +#include "types.hh" +#include "native_scalar_function.hh" +#include "dht/i_partitioner.hh" +#include "utils/UUID.hh" + +namespace cql3 { +namespace functions { + +class token_fct: public native_scalar_function { +private: + schema_ptr _schema; + +public: + token_fct(schema_ptr s) + : native_scalar_function("token", + // TODO: /*dht::global_partitioner().get_token_validator()*/ + bytes_type, + s->partition_key_type()->types()) + , _schema(s) { + } + + bytes_opt execute(serialization_format sf, const std::vector& parameters) override { + auto buf = _schema->partition_key_type()->serialize_optionals(parameters); + auto view = partition_key_view::from_bytes(std::move(buf)); + auto tok = dht::global_partitioner().get_token(*_schema, view); + return { tok._data } + // TODO: + //{ dht::global_partitioner().get_token_validator()->decompose(tok) } + ; + } +}; + +} +}