MCPcopy Create free account
hub / github.com/datastax/cql-proxy / InterceptQuery

Method InterceptQuery

proxycore/mockcluster.go:209–275  ·  view source on GitHub ↗
(hdr *frame.Header, msg *message.Query)

Source from the content-addressed store, hash-verified

207}
208
209func (c *MockClient) InterceptQuery(hdr *frame.Header, msg *message.Query) message.Message {
210 handled, stmt, err := parser.IsQueryHandled(parser.IdentifierFromString(c.keyspace), msg.Query)
211
212 if handled {
213 if err != nil {
214 return &message.Invalid{ErrorMessage: err.Error()}
215 }
216
217 switch s := stmt.(type) {
218 case *parser.SelectStatement:
219 if s.Table == "local" {
220 vals := c.makeSystemLocalValues(hdr.Version, mockSchemaVersion)
221 localColumns := parser.SystemLocalColumns
222 if len(c.server.DseVersion) > 0 {
223 localColumns = parser.DseSystemLocalColumns
224 }
225 if columns, err := parser.FilterColumns(s, localColumns); err != nil {
226 return &message.Invalid{ErrorMessage: err.Error()}
227 } else if row, err := c.filterValues(hdr.Version, s, localColumns, vals, 1); err != nil {
228 return &message.Invalid{ErrorMessage: err.Error()}
229 } else {
230 return &message.RowsResult{
231 Metadata: &message.RowsMetadata{
232 ColumnCount: int32(len(columns)),
233 Columns: columns,
234 },
235 Data: []message.Row{row},
236 }
237 }
238 } else if s.Table == "peers" {
239 peersColumns := parser.SystemPeersColumns
240 if len(c.server.DseVersion) > 0 {
241 peersColumns = parser.DseSystemPeersColumns
242 }
243 if columns, err := parser.FilterColumns(s, peersColumns); err != nil {
244 return &message.Invalid{ErrorMessage: err.Error()}
245 } else {
246 var data []message.Row
247 peers := c.server.copyPeers()
248 for _, peer := range peers {
249 vals := c.makeSystemPeerValues(hdr.Version, peer.IP, peer.HostID, mockSchemaVersion)
250 if row, err := c.filterValues(hdr.Version, s, peersColumns, vals, len(peers)); err != nil {
251 return &message.Invalid{ErrorMessage: err.Error()}
252 } else {
253 data = append(data, row)
254 }
255 }
256 return &message.RowsResult{
257 Metadata: &message.RowsMetadata{
258 ColumnCount: int32(len(columns)),
259 Columns: columns,
260 },
261 Data: data,
262 }
263 }
264 } else {
265 return &message.Invalid{ErrorMessage: "Doesn't exist"}
266 }

Calls 8

makeSystemLocalValuesMethod · 0.95
filterValuesMethod · 0.95
makeSystemPeerValuesMethod · 0.95
IsQueryHandledFunction · 0.92
IdentifierFromStringFunction · 0.92
FilterColumnsFunction · 0.92
copyPeersMethod · 0.80
ErrorMethod · 0.45

Tested by 6

testProxyRetryWithConfigFunction · 0.64
TestProxy_ListenAndServeFunction · 0.64
TestClientConn_InflightFunction · 0.64