@Override public Void visit(TypeDecl t, Integer step) throws CompilationException { out.println(skip(step) + "create type " + generateFullName(t.getDataverseName(), t.getIdent()) + generateIfNotExists(t.getIfNotExists()) + " as"); t.getTypeDef().accept(this, step + 1); out.println(); return null; }
@Override public Void visit(TypeDecl t, Integer step) throws CompilationException { out.println(skip(step) + "TypeDecl " + t.getIdent() + " ["); t.getTypeDef().accept(this, step + 1); out.println(skip(step) + "]"); return null; }
public void translate() throws AlgebricksException { String defaultDataverse = getDefaultDataverse(); types = new HashMap<>(); typeDataGenMap = new HashMap<>(); for (Statement stmt : statements) { if (stmt.getKind() == Statement.Kind.TYPE_DECL) { TypeDecl td = (TypeDecl) stmt; String typeDataverse = td.getDataverseName() == null ? defaultDataverse : td.getDataverseName().getValue(); Map<TypeSignature, IAType> typeInStmt = TypeTranslator.computeTypes(mdTxnCtx, td.getTypeDef(), td.getIdent().getValue(), typeDataverse, types); types.putAll(typeInStmt); TypeSignature signature = new TypeSignature(typeDataverse, td.getIdent().getValue()); TypeDataGen tdg = td.getDatagenAnnotation(); if (tdg != null) { typeDataGenMap.put(signature, tdg); } } } }
final public TypeDecl TypeSpecification(String hint, boolean dgen) throws ParseException, ParseException { Pair<Identifier,Identifier> nameComponents = null; boolean ifNotExists = false; TypeExpression typeExpr = null; jj_consume_token(TYPE); nameComponents = TypeName(); ifNotExists = IfNotExists(); jj_consume_token(AS); typeExpr = TypeExpr(); long numValues = -1; String filename = null; if (dgen) { String splits[] = hint.split(" +"); if (splits.length != 3) { {if (true) throw new ParseException("Expecting /*+ dgen <filename> <numberOfItems> */");} } filename = splits[1]; numValues = Long.parseLong(splits[2]); } TypeDataGen tddg = new TypeDataGen(dgen, filename, numValues); {if (true) return new TypeDecl(nameComponents.first, nameComponents.second, typeExpr, tddg, ifNotExists);} throw new Error("Missing return statement in function"); }
final public TypeDecl TypeSpecification(String hint, boolean dgen) throws ParseException, ParseException { Pair<Identifier,Identifier> nameComponents = null; boolean ifNotExists = false; TypeExpression typeExpr = null; jj_consume_token(TYPE); nameComponents = TypeName(); ifNotExists = IfNotExists(); jj_consume_token(AS); typeExpr = TypeExpr(); long numValues = -1; String filename = null; if (dgen) { String splits[] = hint.split(" +"); if (splits.length != 3) { {if (true) throw new ParseException("Expecting /*+ dgen <filename> <numberOfItems> */");} } filename = splits[1]; numValues = Long.parseLong(splits[2]); } TypeDataGen tddg = new TypeDataGen(dgen, filename, numValues); {if (true) return new TypeDecl(nameComponents.first, nameComponents.second, typeExpr, tddg, ifNotExists);} throw new Error("Missing return statement in function"); }
protected void handleCreateTypeStatement(MetadataProvider metadataProvider, Statement stmt) throws Exception { TypeDecl stmtCreateType = (TypeDecl) stmt; SourceLocation sourceLoc = stmtCreateType.getSourceLocation(); String dataverseName = getActiveDataverse(stmtCreateType.getDataverseName()); String typeName = stmtCreateType.getIdent().getValue(); MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction(); metadataProvider.setMetadataTxnContext(mdTxnCtx); if (!stmtCreateType.getIfNotExists()) { throw new CompilationException(ErrorCode.TYPE_EXISTS, sourceLoc, typeName); } else { Map<TypeSignature, IAType> typeMap = TypeTranslator.computeTypes(mdTxnCtx, stmtCreateType.getTypeDef(), stmtCreateType.getIdent().getValue(), dataverseName); TypeSignature typeSignature = new TypeSignature(dataverseName, typeName); IAType type = typeMap.get(typeSignature);
final public TypeDecl TypeSpecification(Token startStmtToken, String hint, boolean dgen, Token hintToken) throws ParseException, ParseException { Pair<Identifier,Identifier> nameComponents = null; boolean ifNotExists = false; TypeExpression typeExpr = null; jj_consume_token(TYPE); nameComponents = TypeName(); ifNotExists = IfNotExists(); jj_consume_token(AS); typeExpr = RecordTypeDef(); long numValues = -1; String filename = null; if (dgen) { String splits[] = hint.split(" +"); if (splits.length != 3) { {if (true) throw new SqlppParseException(getSourceLocation(hintToken), "Expecting /*+ dgen <filename> <numberOfItems> */");} } filename = splits[1]; numValues = Long.parseLong(splits[2]); } TypeDataGen tddg = new TypeDataGen(dgen, filename, numValues); TypeDecl stmt = new TypeDecl(nameComponents.first, nameComponents.second, typeExpr, tddg, ifNotExists); {if (true) return addSourceLocation(stmt, startStmtToken);} throw new Error("Missing return statement in function"); }