diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 5bbf20e..2b39d07 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -36,6 +36,17 @@ jobs: - name: Run unit tests run: tox run -- --cov-report=term + test-db: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Install Lets + uses: lets-cli/lets-action@v1.1 + with: + version: latest + - name: Test database integration + run: timeout 600 lets test-pg + federation-test: runs-on: ubuntu-latest steps: diff --git a/hiku/sources/aiopg.py b/hiku/sources/aiopg.py index b5cd606..e354f21 100644 --- a/hiku/sources/aiopg.py +++ b/hiku/sources/aiopg.py @@ -37,16 +37,14 @@ def in_impl( def select_expr( self, fields_: List[Field], ids: Iterable ) -> Tuple[Select, Callable]: - visited = set() - columns = [] - query_columns = [] - for f in fields_: - column = self.from_clause.c[f.name] - columns.append(column) - - if f.name not in visited and column != self.primary_key: - visited.add(f.name) - query_columns.append(column) + result_columns = [self.from_clause.c[f.name] for f in fields_] + # aiopg requires unique columns to be passed to select, + # otherwise it will raise an error + query_columns = [ + column + for f in _uniq_fields(fields_) + if (column := self.from_clause.c[f.name]) != self.primary_key + ] expr = ( sqlalchemy.select( @@ -58,7 +56,7 @@ def select_expr( def result_proc(rows: List[_sa.Row]) -> List: rows_map = { - row[self.primary_key]: [row[c] for c in columns] + row[self.primary_key]: [row[c] for c in result_columns] for row in map(_sa._process_result_row, rows) } diff --git a/lets.yaml b/lets.yaml index cfdff27..78acd61 100644 --- a/lets.yaml +++ b/lets.yaml @@ -57,7 +57,7 @@ commands: test-pg: description: Run tests with pg depends: [_build-tests] - cmd: [docker-compose, run, --rm, test-pg] + cmd: [docker compose, run, --rm, test-pg] test-tox: description: Run tests using tox