Files
src-1.2/game/server/database/updates/169.sql
T
2014-01-17 07:03:16 -07:00

178 lines
6.3 KiB
SQL

-- AUCTION_LOCATIONS
-- remove duplicate location
create table temp_locations(location_name varchar2(256), object_id number);
insert into temp_locations
select LOCATION_NAME, substr(LOCATION_NAME, instr(LOCATION_NAME, '.', -1) + 1,
instr(LOCATION_NAME, '#') - instr(LOCATION_NAME, '.', -1) - 1)
from auction_locations
where substr(LOCATION_NAME, instr(LOCATION_NAME, '.', -1) + 1,
instr(LOCATION_NAME, '#') - instr(LOCATION_NAME, '.', -1) - 1) in
(select substr(LOCATION_NAME, instr(LOCATION_NAME, '.', -1) + 1,
instr(LOCATION_NAME, '#') - instr(LOCATION_NAME, '.', -1) - 1)
from auction_locations
group by substr(LOCATION_NAME, instr(LOCATION_NAME, '.', -1) + 1,
instr(LOCATION_NAME, '#') - instr(LOCATION_NAME, '.', -1) - 1)
having count(*) > 1);
delete temp_locations where location_name in
(select location from market_auctions);
commit;
delete temp_locations where location_name in
(select max(location_name) from temp_locations
group by object_id
having count(*) > 1);
commit;
delete auction_locations where location_name in (
select location_name from temp_locations);
commit;
drop table temp_locations;
-- drop the primary key from auction_locations
alter table auction_locations drop primary key;
-- add a location_id column
alter table auction_locations add (location_id number(20) NULL);
-- populate the location_id values from location
update auction_locations
set location_id = nvl (to_number(substr(location_name, instr(location_name, '.', 1, 3)+1,
instr(location_name, '#', -1)-instr(location_name, '.', 1, 3)-1)), 0);
commit;
-- add the primary key
alter table auction_locations add constraint
pk_auction_locations primary key (location_id) using index tablespace indexes;
-- create the location_name index
create index auction_location_name_idx on auction_locations (location_name) tablespace indexes;
-- MARKET_AUCTIONS
-- rename old Market_Auctions
alter table market_auctions rename to market_auctions_old2;
-- create new Market_Auctions
create table market_auctions --NO_IMPORT
(
item_id number(20), -- BIND_AS(DB::BindableNetworkId)
location_id number(20), -- BIND_AS(DB::BindableNetworkId)
creator_id number(20), -- BIND_AS(DB::BindableNetworkId)
owner_id number(20), -- BIND_AS(DB::BindableNetworkId)
min_bid number(20), -- BIND_AS(DB::BindableNetworkId)
buy_now_price number(20), -- BIND_AS(DB::BindableNetworkId)
auction_timer number(20), -- BIND_AS(DB::BindableNetworkId)
user_description varchar2(4000),
item_name varchar2(4000),
oob varchar2(4000),
category number(20), -- BIND_AS(DB::BindableNetworkId)
item_timer number(20), -- BIND_AS(DB::BindableNetworkId)
active number(20) -- BIND_AS(DB::BindableNetworkId)
);
grant select on market_auctions to public;
-- populate Market_Acutions from old table
insert into market_auctions
(select item_id, nvl (to_number(substr(location, instr(location, '.', 1, 3)+1,
instr(location, '#', -1)-instr(location, '.', 1, 3)-1)), 0) as location_id,
creator_id, owner_id, min_bid, buy_now_price,
auction_timer, user_description, item_name, oob, category, item_timer, active
from market_auctions_old2 );
commit;
-- rename the primary key index on old Market Auctions
alter table market_auctions_old2 drop primary key;
alter table market_auctions_old2 add constraint
pk_market_auctions_old2 primary key (item_id) using index tablespace indexes;
-- add the primary key
alter table market_auctions add constraint
pk_market_auctions primary key (item_id) using index tablespace indexes;
-- create index on location_id
create index market_auction_location_idx on market_auctions (location_id) tablespace indexes;
-- create dummy Auction_Locations record for FK violations
insert into auction_locations
(select 0, mo.location, 0, 0, ma.location_id
from market_auctions ma, market_auctions_old2 mo
where ma.location_id not in (select location_id from auction_locations)
and ma.item_id = mo.item_id);
commit;
-- add foreign keys to market_auctions
alter table market_auctions add constraint market_auctions_location_id_fk
foreign key(location_id) references auction_locations(location_id) on delete cascade;
-- drop old Market_Auctions table
drop table market_auctions_old2;
-- MARKET_AUCTION_BIDS
-- update bid amount and delete duplicate item_id records
update market_auction_bids set max_proxy_bid = bid where max_proxy_bid < bid;
commit;
alter table market_auction_bids add (iswinning number DEFAULT 1);
update market_auction_bids set iswinning = 0 where bid_id in
(select distinct b1.bid_id from market_auction_bids b1, market_auction_bids b2
where b1.item_id = b2.item_id and (b1.max_proxy_bid < b2.max_proxy_bid
or (b1.max_proxy_bid = b2.max_proxy_bid and b1.bid_id > b2.bid_id)));
commit;
update market_auction_bids a
set a.bid = nvl((select max(b.max_proxy_bid) from market_auction_bids b
where b.item_id = a.item_id and b.bid_id > a.bid_id
and b.max_proxy_bid > a.bid), bid) where a.iswinning = 1;
commit;
update market_auction_bids a
set a.bid = nvl((select max(b.max_proxy_bid+1) from market_auction_bids b
where b.item_id = a.item_id and b.bid_id < a.bid_id
and b.max_proxy_bid > a.bid), bid) where a.iswinning = 1;
commit;
delete from market_auction_bids where iswinning=0;
commit;
-- drop primary key
alter table market_auction_bids drop primary key;
-- drop bid_id column
alter table market_auction_bids drop column iswinning;
alter table market_auction_bids drop column bid_id;
-- add primary key on item_id
declare
cnt integer;
begin
select count(*) into cnt from user_indexes where index_name = 'MARKET_ITEM_INDEX';
if (cnt > 0) then
execute immediate 'drop index market_item_index';
end if;
end;
/
alter table market_auction_bids add constraint
pk_market_auction_bids primary key (item_id) using index tablespace indexes;
-- drop record with FK violations
delete from market_auction_bids where item_id not in
(select item_id from market_auctions);
commit;
-- add foreign keys to market_auction_bids
alter table market_auction_bids add constraint market_auction_bids_item_id_fk
foreign key(item_id) references market_auctions on delete cascade;
-- drop auction_bids table and swg_commodities package
drop table auction_bids;
drop package swg_commodities;
-- update version number
update version_number set version_number=169, min_version_number=169;
commit;