View Source Needle.Virtual (needle v0.8.0)

Sets up an Ecto Schema for a Virtual Pointable

Virtual Pointables (or just virtuals) are like pointables with no additional columns, except instead of being backed by a table they are backed by a view. This is more efficient of resources but only works when there are no additional columns to add.

If you need to add columns to the schema, you should use a pointable.

Sample Usage

use Needle.Virtual,
  otp_app: :my_app,   # your OTP application's name
  source: "my_table", # default name of view in database
  table_id: "01EBTVSZJ6X02J01R1XWWPWGZW" # valid ULID to identify virtual

virtual_schema do
  # ... `has_one`, `has_many`, or *virtual* fields ONLY go here.
end

Overriding with configuration

During use (i.e. compilation time), we will attempt to load configuration from the provided :otp_app under the key of the current module. Any values provided here will override the defaults provided to use. This allows you to configure them after the fact.

Additionally, pointables use Exto's flex_schema(), so you can provide additional configuration for those in the same place. Unlike a regular pointable, you should not add additional (non-virtual) fields, but it is permitted to add has_one / has_many associations.

I shall say it again because it's important: This happens at compile time. You must rebuild the app containing the pointable whenever the configuration changes.

Introspection

Defines a function __pointers__/1 to introspect data. Recognised parameters:

:role - :virtual. :table_id - retrieves the ULID id of the virtual. :otp_app - retrieves the OTP application to which this belongs.

Summary

Functions

Link to this macro

virtual_schema(body)

View Source (macro)