আমি একটি জাভা সার্লেট অ্যাপ্লিকেশনটিতে কাজ করছি যা অ্যাডহক রিপোর্টিংয়ের উদ্দেশ্যে খুব গতিশীল এসকিউএল স্টেটমেন্ট তৈরি করতে হবে। অ্যাপ্লিকেশনটির মূল কাজটি হ'ল এইচটিটিপি অনুরোধ পরামিতিগুলির একগুচ্ছ একটি প্রাক কোডড ক্যোয়ারীতে ফিড করা এবং আউটপুটটির একটি সুন্দর বিন্যাসিত টেবিল তৈরি করা। আমি আমার সমস্ত এসকিউএল ক্যোয়ারিগুলি এক্সএমএল ফাইলগুলিতে সঞ্চয় করতে এবং টেবিল বিন্যাসের তথ্যের পাশাপাশি রিপোর্টিং অ্যাপ্লিকেশনে লোড করতে স্প্রিং এমভিসি এবং নির্ভরতা ইনজেকশন ফ্রেমওয়ার্ক ব্যবহার করেছি। অবশেষে, প্রতিবেদনের প্রয়োজনীয়তা বিদ্যমান প্যারামিটার ম্যাপিং ফ্রেমওয়ার্কগুলির সক্ষমতার চেয়ে জটিল হয়ে ওঠে এবং আমাকে নিজের লেখাতে হয়েছিল। এটি বিকাশের একটি আকর্ষণীয় অনুশীলন এবং প্যারামিটার ম্যাপিংয়ের জন্য একটি কাঠামো তৈরি করেছিল যা আমি খুঁজে পেতে পারি তার চেয়ে অনেক বেশি শক্তিশালী।
নতুন প্যারামিটার ম্যাপিংগুলি এমন দেখাচ্ছে:
select app.name as "App",
${optional(" app.owner as "Owner", "):showOwner}
sv.name as "Server", sum(act.trans_ct) as "Trans"
from activity_records act, servers sv, applications app
where act.server_id = sv.id
and act.app_id = app.id
and sv.id = ${integer(0,50):serverId}
and app.id in ${integerList(50):appId}
group by app.name, ${optional(" app.owner, "):showOwner} sv.name
order by app.name, sv.name
ফলস্বরূপ কাঠামোর সৌন্দর্য হ'ল এটি সঠিক টাইপ চেকিং এবং সীমাবদ্ধ পরীক্ষার সাহায্যে সরাসরি ক্যোয়ারিতে HTTP অনুরোধের পরামিতিগুলি প্রক্রিয়া করতে পারে। ইনপুট বৈধতার জন্য কোনও অতিরিক্ত ম্যাপিংয়ের প্রয়োজন নেই। উপরের উদাহরণের ক্যোয়ারিতে, সার্ভারআইড নামের প্যারামিটারটি
এটি একটি পূর্ণসংখ্যার সাথে কাস্ট করতে পারে এবং এটি 0-50 এর মধ্যে রয়েছে তা নিশ্চিত করে পরীক্ষা করা হবে। প্যারামিটার অ্যাপ্লিকেশনটি দৈর্ঘ্যের 50 সীমা সহ পূর্ণসংখ্যার অ্যারে হিসাবে প্রক্রিয়া করা হবে Ifউপস্থিত এবং "সত্য" এ সেট করা হয়েছে, উদ্ধৃতিগুলিতে এসকিউএল এর বিটগুলি fieldচ্ছিক ক্ষেত্র ম্যাপিংয়ের জন্য উত্পন্ন প্রশ্নের সাথে যুক্ত করা হবে। ক্ষেত্র আরও প্যারামিটার ম্যাপিং সহ এসকিউএল এর alচ্ছিক বিভাগগুলি সহ আরও বেশ কয়েকটি প্যারামিটার ধরণের ম্যাপিংগুলি উপলভ্য। এটি বিকাশকারীরা যেমন আসতে পারে ততই জটিল ক্যোরি ম্যাপিংয়ের সুযোগ দেয়। এমনকি কোনও প্রদত্ত ক্যোয়ারীর একটি প্রস্তুতিমূলক স্টেটমেন্টের মাধ্যমে চূড়ান্ত ম্যাপিং থাকবে বা কেবল প্রাক-বিল্ট ক্যোয়ারী হিসাবে চালানো হবে কিনা তা নির্ধারণের জন্য এটির প্রতিবেদন কনফিগারেশনে নিয়ন্ত্রণ রয়েছে।
এইচটিটিপি অনুরোধের মানগুলির নমুনার জন্য:
showOwner: true
serverId: 20
appId: 1,2,3,5,7,11,13
এটি নিম্নলিখিত এসকিউএল উত্পাদন করবে:
select app.name as "App",
app.owner as "Owner",
sv.name as "Server", sum(act.trans_ct) as "Trans"
from activity_records act, servers sv, applications app
where act.server_id = sv.id
and act.app_id = app.id
and sv.id = 20
and app.id in (1,2,3,5,7,11,13)
group by app.name, app.owner, sv.name
order by app.name, sv.name
আমি সত্যিই মনে করি যে স্প্রিং বা হাইবারনেট বা frame ফ্রেমওয়ার্কগুলির মধ্যে একটিতে আরও শক্তিশালী ম্যাপিং প্রক্রিয়া দেওয়া উচিত যা প্রকার যাচাই করে, অ্যারে এবং এই জাতীয় বৈশিষ্ট্যগুলির মতো জটিল ডেটা ধরণের জন্য মঞ্জুরি দেয়। আমি কেবল আমার উদ্দেশ্যে আমার ইঞ্জিনটি লিখেছি, এটি সাধারণ মুক্তির জন্য খুব বেশি পড়া হয়নি। এটি এই মুহুর্তে কেবল ওরাকল প্রশ্নের সাথে কাজ করে এবং কোডটির সবকটি একটি বড় কর্পোরেশনের অন্তর্ভুক্ত। কোনও দিন আমি আমার ধারণাগুলি গ্রহণ করতে এবং একটি নতুন ওপেন সোর্স কাঠামো তৈরি করতে পারি, তবে আমি আশা করছি বিদ্যমান বিদ্যমান খেলোয়াড়দের মধ্যে একটি চ্যালেঞ্জ গ্রহণ করবে।