github.com/mithrandie/csvq@v1.18.1/lib/action/fields.go (about) 1 package action 2 3 import ( 4 "context" 5 "os" 6 7 "github.com/mithrandie/csvq/lib/parser" 8 "github.com/mithrandie/csvq/lib/query" 9 ) 10 11 func ShowFields(ctx context.Context, proc *query.Processor, filename string) error { 12 if len(filename) < 1 { 13 e := parser.NewSyntaxError("file name is empty", parser.Token{}) 14 return query.NewSyntaxError(e.(*parser.SyntaxError)) 15 } 16 17 var filePath parser.QueryExpression = parser.Identifier{Literal: filename} 18 path, err := query.CreateFilePath(filePath.(parser.Identifier), proc.Tx.Flags.Repository) 19 if err != nil { 20 return query.NewIOError(filePath, err.Error()) 21 } 22 23 if _, err = os.Stat(path); err != nil { 24 statements, _, err := parser.Parse("SELECT 1 FROM "+filename, "", false, proc.Tx.Flags.AnsiQuotes) 25 if err != nil { 26 return query.NewFileNotExistError(filePath) 27 } 28 29 q := statements[0].(parser.SelectQuery) 30 filePath = q.SelectEntity.(parser.SelectEntity).FromClause.(parser.FromClause).Tables[0].(parser.Table).Object 31 filePath.ClearBaseExpr() 32 } 33 34 statements := []parser.Statement{ 35 parser.ShowFields{ 36 Type: parser.Identifier{Literal: "FIELDS"}, 37 Table: filePath, 38 }, 39 } 40 41 execCtx := context.WithValue(ctx, "CallFromSubcommand", true) 42 _, err = proc.Execute(execCtx, statements) 43 return err 44 }