1 /* 2 * Copyright (c) 2021 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef SCHEMA_UTILS_H 17 #define SCHEMA_UTILS_H 18 19 #include "db_types.h" 20 #include "schema_object.h" 21 22 // This header is supposed to be included only in source files. Do not include it in any header files. 23 namespace DistributedDB { 24 class SchemaUtils { 25 public: 26 // Check if any invalid exist, parse it into SchemaAttribute if totally valid and return E_OK 27 // Number don't support format of scientific notation. SchemaAttribute.isIndexable always set true. 28 // Prefix and postfix spaces or tabs is allowed. 29 // Customer FieldType will be accepted if useAffinity is true. 30 static int ParseAndCheckSchemaAttribute(const std::string &inAttrString, SchemaAttribute &outAttr, 31 bool useAffinity = false); 32 33 // Check if any invalid exist, parse it into FieldPath if totally valid and return E_OK 34 // Each fieldName of the fieldPath will be check valid as well. Path depth will be check. 35 // Prefix and postfix spaces or tabs is allowed. Prefix $. can be not exist. 36 // Parameter permitPrefix means whether $. prefix is permited. If not, return E_SCHEMA_PARSE_FAIL. 37 static int ParseAndCheckFieldPath(const std::string &inPathString, FieldPath &outPath, bool permitPrefix = true); 38 39 // Return E_OK if it is totally valid. Prefix and postfix spaces or tabs is not allowed. 40 static int CheckFieldName(const FieldName &inName); 41 42 // Remove prefix and postfix spaces or tabs 43 static std::string Strip(const std::string &inString); 44 45 // Strip the namespace from the full-name, this method mainly for flatbuffer-type schema 46 static std::string StripNameSpace(const std::string &inFullName); 47 48 static std::string FieldTypeString(FieldType inType); 49 static std::string SchemaTypeString(SchemaType inType); 50 51 // Restore to string representation of fieldPath with $. prefix 52 static std::string FieldPathString(const FieldPath &inPath); 53 54 static void TransTrackerSchemaToLower(const TrackerSchema &srcSchema, TrackerSchema &destSchema); 55 56 SchemaUtils() = delete; 57 ~SchemaUtils() = delete; 58 59 private: 60 61 static int SplitSchemaAttribute(const std::string &inAttrString, std::vector<std::string> &outAttrString); 62 static int MakeTrans(const std::string &oriContent, size_t &pos); 63 64 static int ParseSchemaAttribute(std::vector<std::string> &attrContext, SchemaAttribute &outAttr, bool useAffinity); 65 66 static int TransformDefaultValue(std::string &defaultContent, SchemaAttribute &outAttr); 67 68 static int TransToDouble(const std::string &defaultContent, SchemaAttribute &outAttr); 69 70 static int TransToInteger(const std::string &defaultContent, SchemaAttribute &outAttr); 71 72 static int TransToLong(const std::string &defaultContent, SchemaAttribute &outAttr); 73 74 static int TransToString(const std::string &defaultContent, SchemaAttribute &outAttr); 75 76 static int TransToBool(const std::string &defaultContent, SchemaAttribute &outAttr); 77 }; 78 } // namespace DistributedDB 79 #endif // SCHEMA_UTILS_H