fix: support upsert_identity with base filters

This commit is contained in:
Zach Daniel 2022-07-01 19:12:01 -04:00
parent da07ed7b6c
commit 824748b0ab
2 changed files with 236 additions and 0 deletions

View file

@ -0,0 +1,204 @@
{
"attributes": [
{
"allow_nil?": false,
"default": "fragment(\"uuid_generate_v4()\")",
"generated?": false,
"primary_key?": true,
"references": null,
"size": null,
"source": "id",
"type": "uuid"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "title",
"type": "text"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "score",
"type": "bigint"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "public",
"type": "boolean"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "category",
"type": "citext"
},
{
"allow_nil?": true,
"default": "\"sponsored\"",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "type",
"type": "text"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "price",
"type": "bigint"
},
{
"allow_nil?": true,
"default": "\"0\"",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "decimal",
"type": "decimal"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "status",
"type": "text"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "status_enum",
"type": "status"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "point",
"type": [
"array",
"float"
]
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "uniq_one",
"type": "text"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "uniq_two",
"type": "text"
},
{
"allow_nil?": false,
"default": "fragment(\"now()\")",
"generated?": false,
"primary_key?": false,
"references": null,
"size": null,
"source": "created_at",
"type": "utc_datetime_usec"
},
{
"allow_nil?": true,
"default": "nil",
"generated?": false,
"primary_key?": false,
"references": {
"destination_field": "id",
"destination_field_default": null,
"destination_field_generated": null,
"multitenancy": {
"attribute": null,
"global": null,
"strategy": null
},
"name": "posts_author_id_fkey",
"on_delete": null,
"on_update": null,
"schema": "public",
"table": "authors"
},
"size": null,
"source": "author_id",
"type": "uuid"
}
],
"base_filter": "type = 'sponsored'",
"check_constraints": [
{
"attribute": [
"price"
],
"base_filter": "type = 'sponsored'",
"check": "price > 0",
"name": "price_must_be_positive"
}
],
"custom_indexes": [],
"has_create_action": true,
"hash": "12BA28461094078AE11EA939D309745FDCEB1963E9A923DFFD23E1C0CB617FCC",
"identities": [
{
"base_filter": "type = 'sponsored'",
"index_name": "posts_uniq_one_and_two_index",
"keys": [
"uniq_one",
"uniq_two"
],
"name": "uniq_one_and_two"
}
],
"multitenancy": {
"attribute": null,
"global": null,
"strategy": null
},
"repo": "Elixir.AshPostgres.TestRepo",
"schema": null,
"table": "posts"
}

View file

@ -0,0 +1,32 @@
defmodule AshPostgres.TestRepo.Migrations.MigrateResources7 do
@moduledoc """
Updates resources based on their most recent snapshots.
This file was autogenerated with `mix ash_postgres.generate_migrations`
"""
use Ecto.Migration
def up do
alter table(:posts) do
add :uniq_one, :text
add :uniq_two, :text
end
create unique_index(:posts, [:uniq_one, :uniq_two],
where: "type = 'sponsored'",
name: "posts_uniq_one_and_two_index"
)
end
def down do
drop_if_exists unique_index(:posts, [:uniq_one, :uniq_two],
name: "posts_uniq_one_and_two_index"
)
alter table(:posts) do
remove :uniq_two
remove :uniq_one
end
end
end