আমি ওয়েবএসকিউএল / ফোনগ্যাপ ডেটাবেস এপিআই-তে একটি প্রশ্নের উত্থাপনের সাথে ঝাঁকুনি দিচ্ছি এবং আমি নিজেকে উভয়ই আঁতকে উঠতে এবং সন্দেহজনক বলে মনে করি যে একটি প্রাকৃতিক ইংরেজি ভাষার ব্যাকরণের ব্যবহারকে অনুকরণ করে এমন একটি সাবলীল এপিআই সংজ্ঞায়িত করে।
উদাহরণগুলির মাধ্যমে এটি ব্যাখ্যা করা সবচেয়ে সহজ হতে পারে। নীচে আমার ব্যাকরণে সমস্ত বৈধ প্রশ্ন রয়েছে, এবং মন্তব্যগুলি উদ্দেশ্যকৃত অর্থ ব্যাখ্যা করেছে:
//find user where name equals "foo" or email starts with "foo@"
find("user").where("name").equals("foo").and("email").startsWith("foo@")
//find user where name equals "foo" or "bar"
find("user").where("name").equals("foo").or("bar");
//find user where name equals "foo" or ends with "bar"
find("user").where("name").equals("foo").or().endsWith("bar");
//find user where name equals or ends with "foo"
find("user").where("name").equals().or().endsWith("foo");
//find user where name equals "foo" and email is not like "%contoso.com"
find("user").where("name").equals("foo").and("email").is().not().like("%contoso.com");
//where name is not null
find("user").where("name").is().not().null();
//find post where author is "foo" and id is in (1,2,3)
find("post").where("author").is("foo").and("id").is().in(1, 2, 3);
//find post where id is between 1 and 100
find("post").where("id").is().between(1).and(100);
কোয়ান্টিন প্রদেটের প্রতিক্রিয়ার ভিত্তিতে সম্পাদনা করুন : এগুলি ছাড়াও মনে হয়, এপিআই'র বহুবচন এবং একক উভয় ক্রিয়া ফর্মকে সমর্থন করতে হবে, সুতরাং:
//a equals b
find("post").where("foo").equals(1);
//a and b (both) equal c
find("post").where("foo").and("bar").equal(2);
প্রশ্নের খাতিরে, ধরে নেওয়া যাক যে আমি এখানে সমস্ত সম্ভাব্য নির্মাণগুলি শেষ করেছি না। আসুন আমরা ধরেও নিই যে আমি বেশিরভাগ সঠিক ইংরেজি বাক্যগুলি আবরণ করতে পারি - সর্বোপরি, ব্যাকরণটি এসকিউএল দ্বারা সংজ্ঞায়িত ক্রিয়া এবং কনজিকশনগুলির মধ্যে সীমাবদ্ধ।
দলবদ্ধকরণ সম্পর্কিত সম্পাদনা করুন : একটি "বাক্য" একটি গ্রুপ, এবং অগ্রাধিকার এসকিউএল: বাম থেকে ডানদিকে সংজ্ঞায়িত করা হয়েছে। একাধিক where
বক্তব্য সহ একাধিক গ্রুপিং প্রকাশ করা যেতে পারে :
//the conjunctive "and()" between where statements is optional
find("post")
.where("foo").and("bar").equal(2).and()
.where("baz").isLessThan(5);
যেহেতু আপনি দেখতে পারেন, প্রতিটি পদ্ধতির সংজ্ঞা "একত্রে পদ্ধতি" আর্গুমেন্ট প্রাপ্ত করতে ব্যাকরণগত প্রসঙ্গ এটা হয় উপর নির্ভরশীল। উদাহরণস্বরূপ or()
এবং and()
পারেন বাদ করা যেতে পারে, বা একটি ক্ষেত্র নাম পড়ুন বা প্রত্যাশিত মান।
আমার কাছে এটি খুব স্বজ্ঞাগত বোধ করে তবে আমি আপনার মতামত শুনতে চাই: এটি কি একটি ভাল, দরকারী এপিআই, না আমার আরও সোজা বাস্তবায়নের ব্যাকডিয়াল করা উচিত?
রেকর্ডের জন্য: এই লাইব্রেরিটি কনফিগারেশন আইটেমগুলির উপর ভিত্তি করে আরও প্রচলিত, অ-সাবলীল এপিআই সরবরাহ করবে।
where("name").equals("foo").or("bar")
যেমন (name=="foo")or bar
। তারপরে এটি স্পষ্ট হয় না যে কোনও স্ট্রিং কখন আক্ষরিক প্রতিনিধিত্ব করে এবং কবে এটি একটি কলামের নাম উপস্থাপন করে ...