class_mappings.go (94 lines of code) (raw):

/* * 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 avatica import ( "fmt" "strings" avaticaMessage "github.com/apache/calcite-avatica-go/v5/message" "google.golang.org/protobuf/proto" ) const ( wireMessageRequestPrefix = "org.apache.calcite.avatica.proto.Requests$" wireMessageResponsePrefix = "org.apache.calcite.avatica.proto.Responses$" ) // ClassNameFromRequest takes a message and generates the // corresponding Java class name. func classNameFromRequest(message interface{}) string { var class string switch message.(type) { case *avaticaMessage.CatalogsRequest: class = "CatalogsRequest" case *avaticaMessage.CloseConnectionRequest: class = "CloseConnectionRequest" case *avaticaMessage.CloseStatementRequest: class = "CloseStatementRequest" case *avaticaMessage.ColumnsRequest: class = "ColumnsRequest" case *avaticaMessage.CommitRequest: class = "CommitRequest" case *avaticaMessage.ConnectionSyncRequest: class = "ConnectionSyncRequest" case *avaticaMessage.CreateStatementRequest: class = "CreateStatementRequest" case *avaticaMessage.DatabasePropertyRequest: class = "DatabasePropertyRequest" case *avaticaMessage.ExecuteRequest: class = "ExecuteRequest" case *avaticaMessage.ExecuteBatchRequest: class = "ExecuteBatchRequest" case *avaticaMessage.FetchRequest: class = "FetchRequest" case *avaticaMessage.OpenConnectionRequest: class = "OpenConnectionRequest" case *avaticaMessage.PrepareAndExecuteRequest: class = "PrepareAndExecuteRequest" case *avaticaMessage.PrepareRequest: class = "PrepareRequest" case *avaticaMessage.SyncResultsRequest: class = "SyncResultsRequest" case *avaticaMessage.RollbackRequest: class = "RollbackRequest" case *avaticaMessage.SchemasRequest: class = "SchemasRequest" case *avaticaMessage.TableTypesRequest: class = "TableTypesRequest" case *avaticaMessage.TablesRequest: class = "TablesRequest" case *avaticaMessage.TypeInfoRequest: class = "TypeInfoRequest" } return wireMessageRequestPrefix + class } // ResponseFromClassName takes a Java class name and instantiates // the corresponding message type. func responseFromClassName(className string) (proto.Message, error) { simplifiedClassName := strings.Replace(className, wireMessageResponsePrefix, "", 1) switch simplifiedClassName { case "CloseConnectionResponse": return &avaticaMessage.CloseConnectionResponse{}, nil case "CloseStatementResponse": return &avaticaMessage.CloseStatementResponse{}, nil case "CommitResponse": return &avaticaMessage.CommitResponse{}, nil case "ConnectionSyncResponse": return &avaticaMessage.ConnectionSyncResponse{}, nil case "CreateStatementResponse": return &avaticaMessage.CreateStatementResponse{}, nil case "DatabasePropertyResponse": return &avaticaMessage.DatabasePropertyResponse{}, nil case "ErrorResponse": return &avaticaMessage.ErrorResponse{}, nil case "ExecuteResponse": return &avaticaMessage.ExecuteResponse{}, nil case "ExecuteBatchResponse": return &avaticaMessage.ExecuteBatchResponse{}, nil case "FetchResponse": return &avaticaMessage.FetchResponse{}, nil case "OpenConnectionResponse": return &avaticaMessage.OpenConnectionResponse{}, nil case "PrepareResponse": return &avaticaMessage.PrepareResponse{}, nil case "ResultSetResponse": return &avaticaMessage.ResultSetResponse{}, nil case "RollbackResponse": return &avaticaMessage.RollbackResponse{}, nil case "SyncResultsResponse": return &avaticaMessage.SyncResultsResponse{}, nil default: return nil, fmt.Errorf("unable to create response from the string: %s", className) } }