1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.db.protocol.mysql.packet.command.query;
19
20 import com.google.common.base.Preconditions;
21 import lombok.RequiredArgsConstructor;
22 import org.apache.shardingsphere.db.protocol.mysql.constant.MySQLBinaryColumnType;
23 import org.apache.shardingsphere.db.protocol.mysql.packet.MySQLPacket;
24 import org.apache.shardingsphere.db.protocol.mysql.payload.MySQLPacketPayload;
25
26
27
28
29
30
31
32 @RequiredArgsConstructor
33 public final class MySQLColumnDefinition41Packet extends MySQLPacket {
34
35 private static final String CATALOG = "def";
36
37 private static final int NEXT_LENGTH = 0x0c;
38
39 private final int characterSet;
40
41 private final int flags;
42
43 private final String schema;
44
45 private final String table;
46
47 private final String orgTable;
48
49 private final String name;
50
51 private final String orgName;
52
53 private final int columnLength;
54
55 private final MySQLBinaryColumnType columnType;
56
57 private final int decimals;
58
59 private final boolean containDefaultValues;
60
61
62
63
64
65
66 public MySQLColumnDefinition41Packet(final int characterSet, final String schema, final String table, final String orgTable,
67 final String name, final String orgName, final int columnLength, final MySQLBinaryColumnType columnType,
68 final int decimals, final boolean containDefaultValues) {
69 this(characterSet, 0, schema, table, orgTable, name, orgName, columnLength, columnType, decimals, containDefaultValues);
70 }
71
72 public MySQLColumnDefinition41Packet(final MySQLPacketPayload payload) {
73 Preconditions.checkArgument(CATALOG.equals(payload.readStringLenenc()));
74 schema = payload.readStringLenenc();
75 table = payload.readStringLenenc();
76 orgTable = payload.readStringLenenc();
77 name = payload.readStringLenenc();
78 orgName = payload.readStringLenenc();
79 Preconditions.checkArgument(NEXT_LENGTH == payload.readIntLenenc());
80 characterSet = payload.readInt2();
81 columnLength = payload.readInt4();
82 columnType = MySQLBinaryColumnType.valueOf(payload.readInt1());
83 flags = payload.readInt2();
84 decimals = payload.readInt1();
85 payload.skipReserved(2);
86 containDefaultValues = false;
87 }
88
89 @Override
90 protected void write(final MySQLPacketPayload payload) {
91 payload.writeStringLenenc(CATALOG);
92 payload.writeStringLenenc(schema);
93 payload.writeStringLenenc(table);
94 payload.writeStringLenenc(orgTable);
95 payload.writeStringLenenc(name);
96 payload.writeStringLenenc(orgName);
97 payload.writeIntLenenc(NEXT_LENGTH);
98 payload.writeInt2(characterSet);
99 payload.writeInt4(columnLength);
100 payload.writeInt1(columnType.getValue());
101 payload.writeInt2(flags);
102 payload.writeInt1(decimals);
103 payload.writeReserved(2);
104 if (containDefaultValues) {
105 payload.writeIntLenenc(0);
106 payload.writeStringLenenc("");
107 }
108 }
109 }