1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extended.bind;
19
20 import lombok.RequiredArgsConstructor;
21 import org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
22 import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.extended.bind.PostgreSQLBindCompletePacket;
23 import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.extended.bind.PostgreSQLComBindPacket;
24 import org.apache.shardingsphere.proxy.backend.connector.ProxyDatabaseConnectionManager;
25 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
26 import org.apache.shardingsphere.proxy.frontend.command.executor.CommandExecutor;
27 import org.apache.shardingsphere.proxy.frontend.postgresql.command.PortalContext;
28 import org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extended.Portal;
29 import org.apache.shardingsphere.proxy.frontend.postgresql.command.query.extended.PostgreSQLServerPreparedStatement;
30
31 import java.sql.SQLException;
32 import java.util.Collection;
33 import java.util.Collections;
34 import java.util.List;
35
36
37
38
39 @RequiredArgsConstructor
40 public final class PostgreSQLComBindExecutor implements CommandExecutor {
41
42 private final PortalContext portalContext;
43
44 private final PostgreSQLComBindPacket packet;
45
46 private final ConnectionSession connectionSession;
47
48 @Override
49 public Collection<DatabasePacket> execute() throws SQLException {
50 PostgreSQLServerPreparedStatement preparedStatement = connectionSession.getServerPreparedStatementRegistry().getPreparedStatement(packet.getStatementId());
51 ProxyDatabaseConnectionManager databaseConnectionManager = connectionSession.getDatabaseConnectionManager();
52 List<Object> parameters = preparedStatement.adjustParametersOrder(packet.readParameters(preparedStatement.getParameterTypes()));
53 Portal portal = new Portal(packet.getPortal(), preparedStatement, parameters, packet.readResultFormats(), databaseConnectionManager);
54 portalContext.add(portal);
55 portal.bind();
56 return Collections.singleton(PostgreSQLBindCompletePacket.getInstance());
57 }
58 }