আমার কাছে পার্লে একটি নন-ফোর্কিং গেম ডেমন লেখা আছে , যা পোস্টগ্র্রেএসকিউএল 9.3 ডাটাবেসে প্লেয়ারের পরিসংখ্যান লিখতে অ্যাকাইঙ্ক অনুসন্ধানগুলি ব্যবহার করে। তবে যখন আমাকে ডাটাবেস থেকে কিছু পড়তে হবে (যেমন কোনও প্লেয়ার নিষিদ্ধ করা হয় বা যদি খেলোয়াড়ের ভিআইপি স্থিতি থাকে), তখন আমি সিঙ্ক্রোনাস কোয়েরি ব্যবহার করি।
এটি ডাটাবেস থেকে মানটি না পড়া পর্যন্ত গেমটি অল্প মুহূর্তের জন্য থামিয়ে দেয়।
মূল্য পড়ার জন্য অ্যাসিঙ্ক প্রশ্নগুলি ব্যবহার করার জন্য আমি আমার গেম ডেমনটি পুনরায় লিখতে পারি না (আমি চেষ্টা করেছি, তবে এটির জন্য অনেকগুলি পরিবর্তন দরকার হয়েছিল), তাই আমার প্রশ্নটি হল : বেশিরভাগ সম্পর্কিত নয় এমন প্রশ্নগুলি একত্রিত করার অর্থ কি হবে (যখন আমি নতুন খেলোয়াড়কে তৈরি করতে চাই সংযোগ) 1 পদ্ধতিতে এবং আমি কীভাবে আমার পার্ল প্রোগ্রামে একই সাথে বেশ কয়েকটি মান ফিরিয়ে দিতে পারি?
আমার বর্তমান অনুসন্ধানগুলি সমস্তই প্লেয়ার আইডিটিকে প্যারামিটার হিসাবে নেয় এবং 1 টি মান দেয়:
-- Has the player been banned?
select true from pref_ban where id=?
-- What is the reputation of this player?
select
count(nullif(nice, false)) -
count(nullif(nice, true)) as rep
from pref_rep where id=?
-- Is he or she a special VIP player?
select vip > now() as vip from pref_users where id=?
-- How many games has the player played to the end?
select completed from pref_match where id=?
উপরের প্রশ্নগুলি একত্রিত করার জন্য আমার সম্ভবত এই জাতীয় পদ্ধতি দরকার:
create or replace function get_user_info(_id varchar) returns XXX as $BODY$
declare
is_banned boolean;
reputation integer;
is_vip boolean;
completed_games integer;
begin
select 1 into is_banned from pref_ban where id=_id;
select
count(nullif(nice, false)) -
count(nullif(nice, true))
into reputation
from pref_rep where id=_id;
select vip > now() into is_vip from pref_users where id=_id;
select completed into completed_games from pref_match where id=_id;
return XXX; /* How to return 4 values here? */
end;
$BODY$ language plpgsql;
উপরের পদ্ধতিটি সঠিকভাবে ঘোষণা করতে দয়া করে আমাকে সহায়তা করুন।
NULL
বাTRUE
আমার মধ্যেis_banned
এই বক্তব্যের সঙ্গে পরিবর্তনশীল:select true into is_banned from pref_ban where id=_id
। এটিকে পরিবর্তন করার কোনও উপায় আছেFALSE
নাকিTRUE
?