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

Method interceptSystemQuery

proxy/proxy.go:786–870  ·  view source on GitHub ↗
(hdr *frame.Header, stmt interface{})

Source from the content-addressed store, hash-verified

784}
785
786func (c *client) interceptSystemQuery(hdr *frame.Header, stmt interface{}) {
787 switch s := stmt.(type) {
788 case *parser.SelectStatement:
789 if s.Table == "local" {
790 localColumns := parser.SystemLocalColumns
791 if len(c.proxy.cluster.Info.DSEVersion) > 0 {
792 localColumns = parser.DseSystemLocalColumns
793 }
794 if columns, err := parser.FilterColumns(s, localColumns); err != nil {
795 c.send(hdr, &message.Invalid{ErrorMessage: err.Error()})
796 } else if row, err := c.filterSystemLocalValues(s, columns); err != nil {
797 c.send(hdr, &message.Invalid{ErrorMessage: err.Error()})
798 } else {
799 c.send(hdr, &message.RowsResult{
800 Metadata: &message.RowsMetadata{
801 ColumnCount: int32(len(columns)),
802 Columns: columns,
803 },
804 Data: []message.Row{row},
805 })
806 }
807 } else if s.Table == "peers" {
808 peersColumns := parser.SystemPeersColumns
809 if len(c.proxy.cluster.Info.DSEVersion) > 0 {
810 peersColumns = parser.DseSystemPeersColumns
811 }
812 if columns, err := parser.FilterColumns(s, peersColumns); err != nil {
813 c.send(hdr, &message.Invalid{ErrorMessage: err.Error()})
814 } else {
815 var data []message.Row
816 for _, n := range c.proxy.nodes {
817 if n != c.proxy.localNode {
818 var row message.Row
819 row, err = c.filterSystemPeerValues(s, columns, n, len(c.proxy.nodes)-1)
820 if err != nil {
821 break
822 }
823 data = append(data, row)
824 }
825 }
826 if err != nil {
827 c.send(hdr, &message.Invalid{ErrorMessage: err.Error()})
828 } else {
829 c.send(hdr, &message.RowsResult{
830 Metadata: &message.RowsMetadata{
831 ColumnCount: int32(len(columns)),
832 Columns: columns,
833 },
834 Data: data,
835 })
836 }
837 }
838 } else if columns, ok := parser.SystemColumnsByName[s.Table]; ok {
839 c.send(hdr, &message.RowsResult{
840 Metadata: &message.RowsMetadata{
841 ColumnCount: int32(len(columns)),
842 Columns: columns,
843 },

Callers 2

handleExecuteMethod · 0.95
handleQueryMethod · 0.95

Calls 8

sendMethod · 0.95
FilterColumnsFunction · 0.92
IdentifierFromStringFunction · 0.92
maybeCreateSessionMethod · 0.80
IDMethod · 0.80
ErrorMethod · 0.45

Tested by

no test coverage detected