Packages
ash_postgres
2.4.3
2.10.0
2.9.1
2.9.0
2.8.0
2.7.0
2.6.32
2.6.31
2.6.30
2.6.29
2.6.28
2.6.27
2.6.26
2.6.25
2.6.24
2.6.23
2.6.22
2.6.21
2.6.20
2.6.19
2.6.18
2.6.17
2.6.16
2.6.15
2.6.14
2.6.13
2.6.12
2.6.11
2.6.10
2.6.9
2.6.8
2.6.7
2.6.6
2.6.5
2.6.4
2.6.3
2.6.2
2.6.1
2.6.0
2.5.22
2.5.21
2.5.20
2.5.19
2.5.18
2.5.17
2.5.16
2.5.15
2.5.14
2.5.13
2.5.12
2.5.11
2.5.10
2.5.9
2.5.8
2.5.7
2.5.6
2.5.5
2.5.4
2.5.3
2.5.2
2.5.1
2.5.0
2.4.21
2.4.20
2.4.19
2.4.18
2.4.17
2.4.16
2.4.15
2.4.14
2.4.13
2.4.12
2.4.11
2.4.10
2.4.9
2.4.8
2.4.7
2.4.6
2.4.5
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.1
2.3.0
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.1.19
2.1.18
2.1.17
2.1.15
2.1.14
2.1.13
2.1.12
2.1.11
2.1.10
2.1.9
2.1.8
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.12
2.0.11
2.0.10
2.0.9
2.0.8
2.0.7
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
2.0.0-rc.15
2.0.0-rc.14
2.0.0-rc.13
2.0.0-rc.12
2.0.0-rc.11
2.0.0-rc.10
2.0.0-rc.9
2.0.0-rc.8
2.0.0-rc.7
2.0.0-rc.6
2.0.0-rc.5
2.0.0-rc.4
2.0.0-rc.3
2.0.0-rc.2
2.0.0-rc.1
2.0.0-rc.0
1.5.30
1.5.29
1.5.28
1.5.27
1.5.26
1.5.25
1.5.24
1.5.23
1.5.22
1.5.21
1.5.20
1.5.19
1.5.18
1.5.17
1.5.16
1.5.15
1.5.14
1.5.13
1.5.12
1.5.11
1.5.10
1.5.9
1.5.8
1.5.7
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.0
1.3.68
1.3.67
1.3.66
1.3.65
1.3.64
1.3.63
1.3.62
1.3.61
1.3.60
1.3.59
1.3.58
1.3.56
1.3.55
1.3.54
1.3.53
1.3.52
1.3.51
1.3.50
1.3.49
1.3.48
1.3.47
1.3.46
1.3.45
1.3.44
1.3.43
1.3.42
1.3.41
1.3.40
1.3.39
1.3.38
1.3.37
1.3.36
1.3.35
1.3.34
1.3.33
1.3.32
1.3.31
1.3.30
1.3.29
1.3.28
1.3.26
1.3.25
1.3.24
1.3.23
1.3.22
1.3.21
1.3.20
1.3.19
1.3.18
1.3.17
1.3.16
1.3.15
1.3.14
1.3.12
1.3.11
1.3.10
1.3.9
1.3.8
1.3.6
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.3.0-rc.4
1.3.0-rc.3
1.3.0-rc.2
1.3.0-rc.0
1.2.6
1.2.5
1.2.4
1.2.3
1.2.2
1.2.1
1.2.0
1.2.0-rc.1
1.2.0-rc.0
1.1.3
1.1.2
1.1.1
1.1.0
1.0.0
1.0.0-rc.9
1.0.0-rc.8
1.0.0-rc.7
1.0.0-rc.6
1.0.0-rc.5
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
1.0.0-rc.0
1.0.0-pre.3
1.0.0-pre.2
1.0.0-pre.1
1.0.0-pre.0
0.43.0
0.42.0-rc.7
0.42.0-rc.6
0.42.0-rc.5
0.42.0-rc.4
0.42.0-rc.3
0.42.0-rc.1
0.42.0-rc.0
0.41.7
0.41.6
0.41.5
0.41.4
0.41.3
0.41.2
0.41.1
0.41.0-rc0
retired
0.41.0-rc.9
0.41.0-rc.8
0.41.0-rc.7
0.41.0-rc.6
0.41.0-rc.5
0.41.0-rc.4
0.41.0-rc.3
0.41.0-rc.2
0.41.0-rc.1
0.41.0-rc.0
0.40.11
0.40.10
0.40.9
0.40.8
0.40.7
0.40.6
0.40.5
0.40.4
0.40.3
0.40.2
0.40.1
0.40.0-rc5
0.40.0-rc4
0.40.0-rc3
0.40.0-rc2
0.40.0-rc1
0.39.0-rc0
0.38.11
0.38.10
0.38.9
0.38.8
0.38.7
0.38.6
0.38.5
0.38.4
0.38.3
0.38.2
0.38.1
0.38.0
0.37.8
0.37.7
0.37.6
0.37.5
0.37.4
0.37.3
0.37.2
0.37.1
0.37.0
0.36.5
0.36.4
0.36.3
0.36.2
0.36.1
0.36.0
0.35.5
0.35.4
0.35.3
0.35.1
0.34.5
0.34.4
0.34.3
0.34.2
0.34.1
0.34.0
0.33.1
0.33.0
0.32.2
0.32.1
0.32.0
0.31.1
0.30.1
0.29.6
0.29.5
0.29.4
0.29.3
0.29.2
0.29.1
0.28.1
0.28.0
0.27.0
0.26.2
0.26.1
0.26.0
0.25.5
0.25.4
0.25.3
0.25.2
0.25.1
0.25.0
0.24.0
0.23.2
0.23.1
0.23.0
0.22.1
0.22.0
0.21.0
0.20.1
0.20.0
0.19.0
0.18.0
0.17.0
0.16.1
0.15.0
0.14.0
0.13.0
0.12.1
0.12.0
0.11.2
0.10.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.1
0.2.0
0.1.4
0.1.3
0.1.2
0.1.1
0.1.1-rc.2
0.1.1-rc.1
0.1.1-rc.0
0.1.0
The PostgreSQL data layer for Ash Framework
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
409 Versions
Jump to
Current section
409 Versions
Compare versions
6
files changed
+103
additions
-39
deletions
| @@ -5,6 +5,15 @@ See [Conventional Commits](Https://conventionalcommits.org) for commit guideline | |
| 5 5 | |
| 6 6 | <!-- changelog --> |
| 7 7 | |
| 8 | + ## [v2.4.3](https://github.com/ash-project/ash_postgres/compare/v2.4.2...v2.4.3) (2024-09-27) |
| 9 | + |
| 10 | + |
| 11 | + |
| 12 | + |
| 13 | + ### Bug Fixes: |
| 14 | + |
| 15 | + * support pg <= 14 in resource generator, and update tests |
| 16 | + |
| 8 17 | ## [v2.4.2](https://github.com/ash-project/ash_postgres/compare/v2.4.1...v2.4.2) (2024-09-24) |
| @@ -148,9 +148,24 @@ And finally, add the repo to your application | |
| 148 148 | ... |
| 149 149 | ``` |
| 150 150 | |
| 151 | - #### Add AshPostgres to our resources |
| 151 | + <!-- tabs-close --> |
| 152 152 | |
| 153 | - Now we can add the data layer to our resources. The basic configuration for a resource requires the `d:AshPostgres.postgres|table` and the `d:AshPostgres.postgres|repo`. |
| 153 | + ## Adding AshPostgres to your resources |
| 154 | + |
| 155 | + <!-- tabs-open --> |
| 156 | + |
| 157 | + ### With Igniter |
| 158 | + |
| 159 | + You can add `AshPostgres` to a resource with `mix ash.patch.extend Your.Resource.Name postgres`. For example: |
| 160 | + |
| 161 | + ```sh |
| 162 | + mix ash.patch.extend Helpdesk.Support.Ticket postgres |
| 163 | + mix ash.patch.extend Helpdesk.Support.Representative postgres |
| 164 | + ``` |
| 165 | + |
| 166 | + ### Manually |
| 167 | + |
| 168 | + The basic configuration for a resource requires the `d:AshPostgres.postgres|table` and the `d:AshPostgres.postgres|repo`. |
| 154 169 | |
| 155 170 | ```elixir |
| 156 171 | # in lib/helpdesk/support/ticket.ex |
| @@ -178,12 +193,16 @@ Now we can add the data layer to our resources. The basic configuration for a re | |
| 178 193 | end |
| 179 194 | ``` |
| 180 195 | |
| 196 | + <!-- tabs-close --> |
| 197 | + |
| 181 198 | #### Create the database and tables |
| 182 199 | |
| 183 200 | First, we'll create the database with `mix ash.setup`. |
| 184 201 | |
| 185 202 | Then we will generate database migrations. This is one of the many ways that AshPostgres can save time and reduce complexity. |
| 186 203 | |
| 204 | + For example: |
| 205 | + |
| 187 206 | ```bash |
| 188 207 | mix ash.codegen add_tickets_and_representatives |
| 189 208 | ``` |
| @@ -200,8 +219,6 @@ Finally, we will create the local database and apply the generated migrations: | |
| 200 219 | mix ash.setup |
| 201 220 | ``` |
| 202 221 | |
| 203 | - <!-- tabs-close --> |
| 204 | - |
| 205 222 | ### Try it out |
| 206 223 | |
| 207 224 | This is based on the [Getting Started](https://hexdocs.pm/ash/getting_started.html) guide. |
| @@ -1,7 +1,7 @@ | |
| 1 1 | {<<"links">>, |
| 2 2 | [{<<"GitHub">>,<<"https://github.com/ash-project/ash_postgres">>}]}. |
| 3 3 | {<<"name">>,<<"ash_postgres">>}. |
| 4 | - {<<"version">>,<<"2.4.2">>}. |
| 4 | + {<<"version">>,<<"2.4.3">>}. |
| 5 5 | {<<"description">>,<<"The PostgreSQL data layer for Ash Framework">>}. |
| 6 6 | {<<"elixir">>,<<"~> 1.13">>}. |
| 7 7 | {<<"app">>,<<"ash_postgres">>}. |
| @@ -609,6 +609,8 @@ defmodule AshPostgres.DataLayer do | |
| 609 609 | def can?(_, :async_engine), do: true |
| 610 610 | def can?(_, :bulk_create), do: true |
| 611 611 | |
| 612 | + def can?(_, :action_select), do: true |
| 613 | + |
| 612 614 | def can?(resource, :update_query) do |
| 613 615 | # We can't currently support updating a record from a query |
| 614 616 | # if that record manages a tenant on update |
| @@ -232,39 +232,75 @@ defmodule AshPostgres.ResourceGenerator.Spec do | |
| 232 232 | |
| 233 233 | defp add_indexes(spec) do |
| 234 234 | %Postgrex.Result{rows: index_rows} = |
| 235 | - spec.repo.query!( |
| 236 | - """ |
| 237 | - SELECT |
| 238 | - i.relname AS index_name, |
| 239 | - ix.indisunique AS is_unique, |
| 240 | - NOT(ix.indnullsnotdistinct) AS nulls_distinct, |
| 241 | - pg_get_expr(ix.indpred, ix.indrelid) AS where_clause, |
| 242 | - am.amname AS using_method, |
| 243 | - idx.indexdef |
| 244 | - FROM |
| 245 | - pg_index ix |
| 246 | - JOIN |
| 247 | - pg_class i ON ix.indexrelid = i.oid |
| 248 | - JOIN |
| 249 | - pg_class t ON ix.indrelid = t.oid |
| 250 | - JOIN |
| 251 | - pg_am am ON i.relam = am.oid |
| 252 | - LEFT JOIN |
| 253 | - pg_constraint c ON c.conindid = ix.indexrelid AND c.contype = 'p' |
| 254 | - JOIN |
| 255 | - pg_indexes idx ON idx.indexname = i.relname AND idx.schemaname = 'public' -- Adjust schema name if necessary |
| 256 | - JOIN information_schema.tables ta |
| 257 | - ON ta.table_name = t.relname |
| 258 | - WHERE |
| 259 | - t.relname = $1 |
| 260 | - AND ta.table_schema = $2 |
| 261 | - AND c.conindid IS NULL |
| 262 | - GROUP BY |
| 263 | - i.relname, ix.indisunique, ix.indnullsnotdistinct, pg_get_expr(ix.indpred, ix.indrelid), am.amname, idx.indexdef; |
| 264 | - """, |
| 265 | - [spec.table_name, spec.schema], |
| 266 | - log: false |
| 267 | - ) |
| 235 | + if Version.match?(spec.repo.min_pg_version(), ">= 15.0.0") do |
| 236 | + spec.repo.query!( |
| 237 | + """ |
| 238 | + SELECT |
| 239 | + i.relname AS index_name, |
| 240 | + ix.indisunique AS is_unique, |
| 241 | + NOT(ix.indnullsnotdistinct) AS nulls_distinct, |
| 242 | + pg_get_expr(ix.indpred, ix.indrelid) AS where_clause, |
| 243 | + am.amname AS using_method, |
| 244 | + idx.indexdef |
| 245 | + FROM |
| 246 | + pg_index ix |
| 247 | + JOIN |
| 248 | + pg_class i ON ix.indexrelid = i.oid |
| 249 | + JOIN |
| 250 | + pg_class t ON ix.indrelid = t.oid |
| 251 | + JOIN |
| 252 | + pg_am am ON i.relam = am.oid |
| 253 | + LEFT JOIN |
| 254 | + pg_constraint c ON c.conindid = ix.indexrelid AND c.contype = 'p' |
| 255 | + JOIN |
| 256 | + pg_indexes idx ON idx.indexname = i.relname AND idx.schemaname = 'public' -- Adjust schema name if necessary |
| 257 | + JOIN information_schema.tables ta |
| 258 | + ON ta.table_name = t.relname |
| 259 | + WHERE |
| 260 | + t.relname = $1 |
| 261 | + AND ta.table_schema = $2 |
| 262 | + AND c.conindid IS NULL |
| 263 | + GROUP BY |
| 264 | + i.relname, ix.indisunique, ix.indnullsnotdistinct, pg_get_expr(ix.indpred, ix.indrelid), am.amname, idx.indexdef; |
| 265 | + """, |
| 266 | + [spec.table_name, spec.schema], |
| 267 | + log: false |
| 268 | + ) |
| 269 | + else |
| 270 | + spec.repo.query!( |
| 271 | + """ |
| 272 | + SELECT |
| 273 | + i.relname AS index_name, |
| 274 | + ix.indisunique AS is_unique, |
| 275 | + TRUE AS nulls_distinct, |
| 276 | + pg_get_expr(ix.indpred, ix.indrelid) AS where_clause, |
| 277 | + am.amname AS using_method, |
| 278 | + idx.indexdef |
| 279 | + FROM |
| 280 | + pg_index ix |
| 281 | + JOIN |
| 282 | + pg_class i ON ix.indexrelid = i.oid |
| 283 | + JOIN |
| 284 | + pg_class t ON ix.indrelid = t.oid |
| 285 | + JOIN |
| 286 | + pg_am am ON i.relam = am.oid |
| 287 | + LEFT JOIN |
| 288 | + pg_constraint c ON c.conindid = ix.indexrelid AND c.contype = 'p' |
| 289 | + JOIN |
| 290 | + pg_indexes idx ON idx.indexname = i.relname AND idx.schemaname = 'public' -- Adjust schema name if necessary |
| 291 | + JOIN information_schema.tables ta |
| 292 | + ON ta.table_name = t.relname |
| 293 | + WHERE |
| 294 | + t.relname = $1 |
| 295 | + AND ta.table_schema = $2 |
| 296 | + AND c.conindid IS NULL |
| 297 | + GROUP BY |
| 298 | + i.relname, ix.indisunique, pg_get_expr(ix.indpred, ix.indrelid), am.amname, idx.indexdef; |
| 299 | + """, |
| 300 | + [spec.table_name, spec.schema], |
| 301 | + log: false |
| 302 | + ) |
| 303 | + end |
| 268 304 | |
| 269 305 | %{ |
| 270 306 | spec |
Loading more files…