(stmt *pgquery.Node)
| 894 | } |
| 895 | |
| 896 | func (p PostgresParser) parseIndexColumn(stmt *pgquery.Node) (parser.IndexColumn, error) { |
| 897 | switch node := stmt.Node.(type) { |
| 898 | case *pgquery.Node_IndexElem: |
| 899 | if node.IndexElem.Expr != nil { |
| 900 | expr, err := p.parseExpr(node.IndexElem.Expr) |
| 901 | if err != nil { |
| 902 | return parser.IndexColumn{}, err |
| 903 | } |
| 904 | |
| 905 | return parser.IndexColumn{ |
| 906 | Expression: expr, |
| 907 | }, nil |
| 908 | } else { |
| 909 | var direction string |
| 910 | switch node.IndexElem.Ordering { |
| 911 | case pgquery.SortByDir_SORTBY_ASC: |
| 912 | direction = parser.AscScr |
| 913 | case pgquery.SortByDir_SORTBY_DESC: |
| 914 | direction = parser.DescScr |
| 915 | case pgquery.SortByDir_SORTBY_DEFAULT: |
| 916 | direction = "" |
| 917 | default: |
| 918 | return parser.IndexColumn{}, fmt.Errorf("unexpected direction in parseIndexColumn: %d", node.IndexElem.Ordering) |
| 919 | } |
| 920 | return parser.IndexColumn{ |
| 921 | Column: parser.NewIdent(node.IndexElem.Name, false), |
| 922 | Direction: direction, |
| 923 | }, nil |
| 924 | } |
| 925 | default: |
| 926 | return parser.IndexColumn{}, fmt.Errorf("unexpected node type in parseIndexColumn: %#v", stmt) |
| 927 | } |
| 928 | } |
| 929 | |
| 930 | func (p PostgresParser) parseArrayElement(node parser.Expr) (parser.Expr, error) { |
| 931 | switch node := node.(type) { |
no test coverage detected