1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.extended.parse;
19
20 import lombok.AccessLevel;
21 import lombok.Getter;
22 import org.apache.shardingsphere.db.protocol.packet.sql.SQLReceivedPacket;
23 import org.apache.shardingsphere.db.protocol.postgresql.packet.command.PostgreSQLCommandPacket;
24 import org.apache.shardingsphere.db.protocol.postgresql.packet.command.PostgreSQLCommandPacketType;
25 import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.extended.PostgreSQLColumnType;
26 import org.apache.shardingsphere.db.protocol.postgresql.packet.identifier.PostgreSQLIdentifierTag;
27 import org.apache.shardingsphere.db.protocol.postgresql.payload.PostgreSQLPacketPayload;
28 import org.apache.shardingsphere.infra.hint.HintValueContext;
29 import org.apache.shardingsphere.infra.hint.SQLHintUtils;
30
31 import java.util.ArrayList;
32 import java.util.List;
33
34
35
36
37 @Getter
38 public final class PostgreSQLComParsePacket extends PostgreSQLCommandPacket implements SQLReceivedPacket {
39
40 private final PostgreSQLPacketPayload payload;
41
42 private final String statementId;
43
44 @Getter(AccessLevel.NONE)
45 private final String sql;
46
47 private final HintValueContext hintValueContext;
48
49 public PostgreSQLComParsePacket(final PostgreSQLPacketPayload payload) {
50 this.payload = payload;
51 payload.readInt4();
52 statementId = payload.readStringNul();
53 String originSQL = payload.readStringNul();
54 hintValueContext = SQLHintUtils.extractHint(originSQL);
55 sql = SQLHintUtils.removeHint(originSQL);
56 }
57
58
59
60
61
62
63 public List<PostgreSQLColumnType> readParameterTypes() {
64 int parameterCount = payload.readInt2();
65 List<PostgreSQLColumnType> result = new ArrayList<>(parameterCount);
66 for (int i = 0; i < parameterCount; i++) {
67 result.add(PostgreSQLColumnType.valueOf(payload.readInt4()));
68 }
69 return result;
70 }
71
72 @Override
73 protected void write(final PostgreSQLPacketPayload payload) {
74 }
75
76 @Override
77 public String getSQL() {
78 return sql;
79 }
80
81 @Override
82 public PostgreSQLIdentifierTag getIdentifier() {
83 return PostgreSQLCommandPacketType.PARSE_COMMAND;
84 }
85 }