1+ -- [create_table_players]
2+ CREATE TABLE IF NOT EXISTS players (
3+ id BIGINT PRIMARY KEY ,
4+ data JSONB NOT NULL ,
5+ position_x REAL DEFAULT 0 ,
6+ position_y REAL DEFAULT 0 ,
7+ position_z REAL DEFAULT 0 ,
8+ level INTEGER DEFAULT 1 ,
9+ experience REAL DEFAULT 0 ,
10+ health INTEGER DEFAULT 100 ,
11+ max_health INTEGER DEFAULT 100 ,
12+ mana INTEGER DEFAULT 50 ,
13+ max_mana INTEGER DEFAULT 50 ,
14+ currency_gold INTEGER DEFAULT 0 ,
15+ currency_gems INTEGER DEFAULT 0 ,
16+ total_playtime INTEGER DEFAULT 0 ,
17+ created_at TIMESTAMPTZ DEFAULT NOW(),
18+ updated_at TIMESTAMPTZ DEFAULT NOW()
19+ );
20+
21+ -- [create_table_game_state]
22+ CREATE TABLE IF NOT EXISTS game_state (
23+ key VARCHAR (64 ) PRIMARY KEY ,
24+ value JSONB NOT NULL ,
25+ updated_at TIMESTAMPTZ DEFAULT NOW()
26+ );
27+
28+ -- [create_table_world_chunks]
29+ CREATE TABLE IF NOT EXISTS world_chunks (
30+ chunk_x INTEGER NOT NULL ,
31+ chunk_z INTEGER NOT NULL ,
32+ biome INTEGER NOT NULL ,
33+ data JSONB NOT NULL ,
34+ last_updated TIMESTAMPTZ DEFAULT NOW(),
35+ PRIMARY KEY (chunk_x, chunk_z)
36+ );
37+
38+ -- [create_table_player_inventory]
39+ CREATE TABLE IF NOT EXISTS player_inventory (
40+ player_id BIGINT PRIMARY KEY REFERENCES players(id) ON DELETE CASCADE ,
41+ data JSONB NOT NULL ,
42+ last_updated TIMESTAMPTZ DEFAULT NOW()
43+ );
44+
45+ -- [create_table_player_quests]
46+ CREATE TABLE IF NOT EXISTS player_quests (
47+ player_id BIGINT REFERENCES players(id) ON DELETE CASCADE ,
48+ quest_id VARCHAR (64 ) NOT NULL ,
49+ progress JSONB NOT NULL ,
50+ last_updated TIMESTAMPTZ DEFAULT NOW(),
51+ PRIMARY KEY (player_id, quest_id)
52+ );
53+
54+ -- [create_table_npcs]
55+ CREATE TABLE IF NOT EXISTS npcs (
56+ id BIGINT PRIMARY KEY ,
57+ type INTEGER NOT NULL ,
58+ position JSONB NOT NULL ,
59+ level INTEGER NOT NULL DEFAULT 1 ,
60+ data JSONB NOT NULL ,
61+ created_at TIMESTAMPTZ DEFAULT NOW(),
62+ updated_at TIMESTAMPTZ DEFAULT NOW()
63+ );
64+
65+ -- [create_table_loot_tables]
66+ CREATE TABLE IF NOT EXISTS loot_tables (
67+ table_id VARCHAR (64 ) PRIMARY KEY ,
68+ name VARCHAR (128 ) NOT NULL ,
69+ data JSONB NOT NULL ,
70+ created_at TIMESTAMPTZ DEFAULT NOW()
71+ );
72+
73+ -- [create_table_schema_migrations]
74+ CREATE TABLE IF NOT EXISTS schema_migrations (
75+ version INTEGER PRIMARY KEY ,
76+ name VARCHAR (255 ) NOT NULL ,
77+ applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
78+ checksum VARCHAR (64 )
79+ );
80+
81+ -- [save_player_data]
82+ INSERT INTO players (id, data, updated_at) VALUES ($1 , $2 , NOW())
83+ ON CONFLICT (id) DO UPDATE SET data = EXCLUDED .data , updated_at = NOW();
84+
85+ -- [load_player_data]
86+ SELECT data FROM players WHERE id = $1 ;
87+
88+ -- [update_player_position]
89+ UPDATE players SET position_x = $1 , position_y = $2 , position_z = $3 , updated_at = NOW() WHERE id = $4 ;
90+
91+ -- [player_exists]
92+ SELECT EXISTS(SELECT 1 FROM players WHERE id = $1 );
93+
94+ -- [get_player_stats]
95+ SELECT level, experience, health, max_health, mana, max_mana, currency_gold, currency_gems, total_playtime FROM players WHERE id = $1 ;
96+
97+ -- [get_player]
98+ SELECT * FROM players WHERE id = $1 ;
99+
100+ -- [save_game_state]
101+ INSERT INTO game_state (key, value, updated_at) VALUES ($1 , $2 , NOW())
102+ ON CONFLICT (key) DO UPDATE SET value = EXCLUDED .value , updated_at = NOW();
103+
104+ -- [load_game_state]
105+ SELECT value FROM game_state WHERE key = $1 ;
106+
107+ -- [delete_game_state]
108+ DELETE FROM game_state WHERE key = $1 ;
109+
110+ -- [list_game_states]
111+ SELECT key FROM game_state ORDER BY key;
112+
113+ -- [save_chunk_data]
114+ INSERT INTO world_chunks (chunk_x, chunk_z, biome, data, last_updated) VALUES ($1 , $2 , $3 , $4 , NOW())
115+ ON CONFLICT (chunk_x, chunk_z) DO UPDATE SET biome = EXCLUDED .biome , data = EXCLUDED .data , last_updated = NOW();
116+
117+ -- [load_chunk_data]
118+ SELECT data FROM world_chunks WHERE chunk_x = $1 AND chunk_z = $2 ;
119+
120+ -- [delete_chunk_data]
121+ DELETE FROM world_chunks WHERE chunk_x = $1 AND chunk_z = $2 ;
122+
123+ -- [list_chunks_in_range]
124+ SELECT chunk_x, chunk_z FROM world_chunks WHERE chunk_x BETWEEN $1 AND $2 AND chunk_z BETWEEN $3 AND $4 ;
125+
126+ -- [save_inventory]
127+ INSERT INTO player_inventory (player_id, data, last_updated) VALUES ($1 , $2 , NOW())
128+ ON CONFLICT (player_id) DO UPDATE SET data = EXCLUDED .data , last_updated = NOW();
129+
130+ -- [load_inventory]
131+ SELECT data FROM player_inventory WHERE player_id = $1 ;
132+
133+ -- [save_quest_progress]
134+ INSERT INTO player_quests (player_id, quest_id, progress, last_updated) VALUES ($1 , $2 , $3 , NOW())
135+ ON CONFLICT (player_id, quest_id) DO UPDATE SET progress = EXCLUDED .progress , last_updated = NOW();
136+
137+ -- [load_quest_progress]
138+ SELECT progress FROM player_quests WHERE player_id = $1 AND quest_id = $2 ;
139+
140+ -- [list_active_quests]
141+ SELECT quest_id FROM player_quests WHERE player_id = $1 ORDER BY quest_id;
142+
143+ -- [begin_transaction]
144+ BEGIN ;
145+
146+ -- [commit_transaction]
147+ COMMIT ;
148+
149+ -- [rollback_transaction]
150+ ROLLBACK ;
151+
152+ -- [migration_current_version]
153+ SELECT MAX (version) as current_version FROM schema_migrations;
154+
155+ -- [delete_migration]
156+ DELETE FROM schema_migrations WHERE version = $1 ;
157+
158+ -- [enable_pg_stat_statements]
159+ CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
160+
161+ -- [disable_pg_stat_statements]
162+ DROP EXTENSION IF EXISTS pg_stat_statements;
0 commit comments