encoredev / encore

Development Platform for building robust type-safe distributed systems with declarative infrastructure

Home Page:https://encore.dev

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Compiler error is misleading when migrations folder is missing.

Willyham opened this issue · comments

I was refactoring to break out a service, and I moved my store logic into the new service. Encore then fails with this output:

  ❌ Building Encore application graph... Failed: Invalid use of sqldb package-level function
  ⠂ Analyzing service topology...

── Invalid use of sqldb package-level function ────────────────────────────[E1699]──

The package-level query function sqldb.QueryRow can only be used within Encore
services that don't use sqldb.NewDatabase.

    ╭─[ /Users/foo/backend/checks/store.go:33:9 ]
    │
 31 │         return nil, err
 32 │     }
 33 │     row := sqldb.QueryRow(ctx, query, args...)
    ⋮            ──────────────
 34 │     if row.Err() != nil {
 35 │         return nil, row.Err()
────╯

For more information about how to use databases in Encore, see
https://encore.dev/docs/primitives/databases

I spent a while trying to understand the issue around sqldb.NewDatabase. It turns out I didn't create my migrations folder in the new service yet, and then I'm guessing Encore assumes you must be using sqldb.NewDatabase (even though I don't use it anywhere).

So technically correct, but a bit misleading. It would be nice to capture the case where sqldb.QueryX functions are used, there's no sqldb.NewDatabase call and there's no migrations folder, and offer the choice to the user. E.g. "Either create a migrations folder or use a named database".