| 207 | } |
| 208 | |
| 209 | func (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 | } |