Skip to content

Commit

Permalink
[ECO-1768] Update SQL queries for emojicoin-dot-fun (#24)
Browse files Browse the repository at this point in the history
* small tweaks to matt's pr

* show markets before first state event
  • Loading branch information
CRBl69 authored Jun 5, 2024
1 parent c615a67 commit 281d330
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 46 deletions.
1 change: 1 addition & 0 deletions cfg/cspell-dictionary.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ mdformat
mosquitto
mqtt
mqttoptions
noqa
notif
pgrep
plpgsql
Expand Down
74 changes: 28 additions & 46 deletions sql_extensions/migrations/special-queries.sql
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
-- LATEST EVENTS {{{
-- LATEST STATE {{{

-- Create a table containing the latest state for each market and auto update
-- using triggers.
Expand Down Expand Up @@ -52,48 +52,20 @@ ORDER BY
CREATE OR REPLACE FUNCTION UPDATE_LATEST_STATE()
RETURNS TRIGGER AS $$
BEGIN
IF EXISTS (
SELECT 1
FROM inbox_latest_state
WHERE (inbox_latest_state.data->'market_metadata'->>'market_id')::numeric = (NEW.data->'market_metadata'->>'market_id')::numeric
AND (inbox_latest_state.data->'state_metadata'->>'market_nonce')::numeric > (NEW.data->'state_metadata'->>'market_nonce')::numeric
) THEN
RETURN NEW;
END IF;

INSERT INTO inbox_latest_state (
sequence_number,
creation_number,
account_address,
transaction_version,
transaction_block_height,
type,
data,
inserted_at,
event_index,
indexed_type,
market_id
)
VALUES (
NEW.sequence_number,
NEW.creation_number,
NEW.account_address,
NEW.transaction_version,
NEW.transaction_block_height,
NEW.type,
NEW.data,
NEW.inserted_at,
NEW.event_index,
NEW.indexed_type,
(NEW.data -> 'market_metadata' ->> 'market_id')::numeric
)
INSERT INTO inbox_latest_state
SELECT
NEW.*,
(NEW.data -> 'market_metadata' ->> 'market_id')::NUMERIC
ON CONFLICT (market_id) DO UPDATE SET
transaction_version = EXCLUDED.transaction_version,
transaction_block_height = EXCLUDED.transaction_block_height,
data = EXCLUDED.data,
inserted_at = EXCLUDED.inserted_at,
event_index = EXCLUDED.event_index;

event_index = EXCLUDED.event_index
WHERE
(inbox_latest_state.data -> 'market_metadata' ->> 'market_id')::NUMERIC = (EXCLUDED.data -> 'market_metadata' ->> 'market_id')::NUMERIC
AND
(inbox_latest_state.data -> 'state_metadata' ->> 'market_nonce')::NUMERIC < (EXCLUDED.data -> 'state_metadata' ->> 'market_nonce')::NUMERIC;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
Expand Down Expand Up @@ -198,24 +170,34 @@ CREATE INDEX inbox_latest_state_by_daily_volume ON inbox_volume (

-- }}}

-- noqa: disable=ST06
CREATE VIEW market_data AS
SELECT
state.market_id,
-- General data
(registration.data -> 'market_metadata' ->> 'market_id')::NUMERIC AS market_id,
(registration.data -> 'market_metadata' ->> 'emoji_bytes') AS emoji_bytes,
(registration.data -> 'market_metadata' ->> 'market_address') AS market_address,
-- Latest state data
state.transaction_version,
(state.data -> 'instantaneous_stats' ->> 'market_cap')::NUMERIC AS market_cap,
(state.data -> 'state_metadata' ->> 'bump_time')::NUMERIC AS bump_time,
(state.data -> 'cumulative_stats' ->> 'n_swaps')::NUMERIC AS n_swaps,
(state.data -> 'cumulative_stats' ->> 'n_chat_messages')::NUMERIC AS n_chat_messages,
(state.data -> 'last_swap' ->> 'avg_execution_price_q64')::NUMERIC AS avg_execution_price_q64,
(state.data ->> 'lp_coin_supply')::NUMERIC AS lp_coin_supply,
volume.all_time_volume,
volume.daily_volume,
(state.data -> 'market_metadata' ->> 'emoji_bytes') AS emoji_bytes,
(state.data -> 'market_metadata' ->> 'market_address') AS market_address,
state.data -> 'clamm_virtual_reserves' AS clamm_virtual_reserves,
state.data -> 'cpamm_real_reserves' AS cpamm_real_reserves
FROM inbox_latest_state AS state, inbox_volume AS volume
WHERE state.market_id = volume.market_id;
state.data -> 'cpamm_real_reserves' AS cpamm_real_reserves,
-- Volume data
volume.all_time_volume,
volume.daily_volume
FROM (
SELECT data FROM inbox_events WHERE event_name = 'emojicoin_dot_fun::MarketRegistration'
) AS registration
LEFT JOIN inbox_latest_state AS state
ON (registration.data -> 'market_metadata' ->> 'market_id')::NUMERIC = state.market_id
LEFT JOIN inbox_volume AS volume
ON (registration.data -> 'market_metadata' ->> 'market_id')::NUMERIC = volume.market_id;
-- noqa: disable=ST06

CREATE INDEX inbox_periodic_state ON inbox_events (
((data -> 'market_metadata' ->> 'market_id')::NUMERIC),
Expand Down

0 comments on commit 281d330

Please sign in to comment.