MCPcopy
hub / github.com/sqlc-dev/sqlc / parseQueries

Method parseQueries

internal/compiler/compile.go:71–141  ·  view source on GitHub ↗
(o opts.Parser)

Source from the content-addressed store, hash-verified

69}
70
71func (c *Compiler) parseQueries(o opts.Parser) (*Result, error) {
72 ctx := context.Background()
73
74 // In database-only mode, initialize the database connection before parsing queries
75 if c.databaseOnlyMode && c.analyzer != nil {
76 if err := c.analyzer.EnsureConn(ctx, c.schema); err != nil {
77 return nil, fmt.Errorf("failed to initialize database connection: %w", err)
78 }
79 }
80
81 var q []*Query
82 merr := multierr.New()
83 set := map[string]struct{}{}
84 files, err := sqlpath.Glob(c.conf.Queries)
85 if err != nil {
86 return nil, err
87 }
88 for _, filename := range files {
89 blob, err := os.ReadFile(filename)
90 if err != nil {
91 merr.Add(filename, "", 0, err)
92 continue
93 }
94 src := string(blob)
95 stmts, err := c.parser.Parse(strings.NewReader(src))
96 if err != nil {
97 merr.Add(filename, src, 0, err)
98 continue
99 }
100 for _, stmt := range stmts {
101 query, err := c.parseQuery(stmt.Raw, src, o)
102 if err != nil {
103 var e *sqlerr.Error
104 loc := stmt.Raw.Pos()
105 if errors.As(err, &e) && e.Location != 0 {
106 loc = e.Location
107 }
108 merr.Add(filename, src, loc, err)
109 // If this rpc unauthenticated error bubbles up, then all future parsing/analysis will fail
110 if errors.Is(err, rpc.ErrUnauthenticated) {
111 return nil, merr
112 }
113 continue
114 }
115 if query == nil {
116 continue
117 }
118 query.Metadata.Filename = filepath.Base(filename)
119 queryName := query.Metadata.Name
120 if queryName != "" {
121 if _, exists := set[queryName]; exists {
122 merr.Add(filename, src, stmt.Raw.Pos(), fmt.Errorf("duplicate query name: %s", queryName))
123 continue
124 }
125 set[queryName] = struct{}{}
126 }
127 q = append(q, query)
128 }

Callers 1

ParseQueriesMethod · 0.95

Calls 9

parseQueryMethod · 0.95
NewFunction · 0.92
GlobFunction · 0.92
ErrsMethod · 0.80
EnsureConnMethod · 0.65
ParseMethod · 0.65
PosMethod · 0.65
AddMethod · 0.45
JoinMethod · 0.45

Tested by

no test coverage detected