blob: 29f288fda80b72724575481355358ffe5631e91c [file] [log] [blame]
/*
* 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.ignite.internal.schema.configuration;
import org.apache.ignite.internal.schema.Column;
import org.apache.ignite.internal.schema.InvalidTypeException;
import org.apache.ignite.internal.schema.NativeType;
import org.apache.ignite.internal.schema.NativeTypes;
import org.apache.ignite.internal.schema.SchemaDescriptor;
import org.apache.ignite.schema.ColumnType;
import org.apache.ignite.schema.SchemaTable;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import static org.apache.ignite.internal.schema.NativeTypes.BYTE;
import static org.apache.ignite.internal.schema.NativeTypes.DOUBLE;
import static org.apache.ignite.internal.schema.NativeTypes.FLOAT;
import static org.apache.ignite.internal.schema.NativeTypes.INTEGER;
import static org.apache.ignite.internal.schema.NativeTypes.LONG;
import static org.apache.ignite.internal.schema.NativeTypes.SHORT;
import static org.apache.ignite.internal.schema.NativeTypes.UUID;
/**
* Build SchemaDescriptor from SchemaTable internal configuration.
*/
public class SchemaDescriptorConverter {
/**
* Convert ColumnType to NativeType.
*
* @param colType ColumnType.
* @return NativeType.
*/
private static NativeType convert(ColumnType colType) {
assert colType != null;
ColumnType.ColumnTypeSpec type = colType.typeSpec();
switch (type) {
case INT8:
return BYTE;
case INT16:
return SHORT;
case INT32:
return INTEGER;
case INT64:
return LONG;
case UINT8:
case UINT16:
case UINT32:
case UINT64:
throw new UnsupportedOperationException("Unsigned types are not supported yet.");
case FLOAT:
return FLOAT;
case DOUBLE:
return DOUBLE;
case DECIMAL:
ColumnType.NumericColumnType numType = (ColumnType.NumericColumnType)colType;
return NativeTypes.decimalOf(numType.precision(), numType.scale());
case UUID:
return UUID;
case BITMASK:
return NativeTypes.bitmaskOf(((ColumnType.VarLenColumnType) colType).length());
case STRING:
int strLen = ((ColumnType.VarLenColumnType)colType).length();
if (strLen == 0)
strLen = Integer.MAX_VALUE;
return NativeTypes.stringOf(strLen);
case BLOB:
int blobLen = ((ColumnType.VarLenColumnType)colType).length();
if (blobLen == 0)
blobLen = Integer.MAX_VALUE;
return NativeTypes.blobOf(blobLen);
default:
throw new InvalidTypeException("Unexpected type " + type);
}
}
/**
* Convert column from public configuration to internal.
*
* @param colCfg Column to confvert.
* @return Internal Column.
*/
private static Column convert(org.apache.ignite.schema.Column colCfg) {
return new Column(colCfg.name(), convert(colCfg.type()), colCfg.nullable());
}
/**
* Build schema descriptor by SchemaTable.
*
* @param tblId Table id.
* @param schemaVer Schema version.
* @param tblCfg SchemaTable.
* @return SchemaDescriptor.
*/
public static SchemaDescriptor convert(UUID tblId, int schemaVer, SchemaTable tblCfg) {
List<org.apache.ignite.schema.Column> keyColsCfg = new ArrayList<>(tblCfg.keyColumns());
Column[] keyCols = new Column[keyColsCfg.size()];
for (int i = 0;i < keyCols.length;i++)
keyCols[i] = convert(keyColsCfg.get(i));
String[] affCols = tblCfg.affinityColumns().stream().map(org.apache.ignite.schema.Column::name)
.toArray(String[]::new);
List<org.apache.ignite.schema.Column> valColsCfg = new ArrayList<>(tblCfg.valueColumns());
Column[] valCols = new Column[valColsCfg.size()];
for (int i = 0;i < valCols.length;i++)
valCols[i] = convert(valColsCfg.get(i));
return new SchemaDescriptor(tblId, schemaVer, keyCols, affCols, valCols);
}
}