ฉันกำลังหาข้อสรุปเกี่ยวกับ API ของฐานข้อมูล WebSQL / Phonegap และฉันพบว่าตัวเองทั้งที่ถูกดึงดูดและสงสัยว่าจะกำหนด API ได้อย่างคล่องแคล่วซึ่งเลียนแบบการใช้ไวยากรณ์ภาษาอังกฤษตามธรรมชาติ
อาจอธิบายได้ง่ายที่สุดผ่านตัวอย่าง ต่อไปนี้เป็นข้อความค้นหาที่ถูกต้องทั้งหมดในไวยากรณ์ของฉันและความคิดเห็นจะอธิบายความหมายที่ต้องการ:
//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);
แก้ไขตามความคิดเห็นของ Quentin Pradet : นอกจากนี้ดูเหมือนว่า API จะต้องสนับสนุนรูปแบบพหูพจน์และคำกริยาเอกพจน์ดังนั้น:
//a equals b
find("post").where("foo").equals(1);
//a and b (both) equal c
find("post").where("foo").and("bar").equal(2);
เพื่อประโยชน์ของคำถามลองคิดว่าฉันไม่ได้สร้างสิ่งที่เป็นไปได้ทั้งหมดที่นี่ สมมติว่าฉันสามารถครอบคลุมประโยคภาษาอังกฤษที่ถูกต้องส่วนใหญ่ไวยากรณ์เองนั้น จำกัด อยู่ที่คำกริยาและการผันคำกริยาที่กำหนดโดย SQL
แก้ไขเกี่ยวกับการจัดกลุ่ม : หนึ่งประโยค "" คือหนึ่งกลุ่มและลำดับความสำคัญเป็นไปตามที่กำหนดไว้ใน SQL: จากซ้ายไปขวา การจัดกลุ่มหลายกลุ่มสามารถแสดงได้หลายwhere
คำสั่ง:
//the conjunctive "and()" between where statements is optional
find("post")
.where("foo").and("bar").equal(2).and()
.where("baz").isLessThan(5);
อย่างที่คุณเห็นความหมายของแต่ละวิธีขึ้นอยู่กับบริบททางไวยากรณ์ที่มันมีอยู่ตัวอย่างเช่นอาร์กิวเมนต์ของ "วิธีการรวม" or()
และand()
สามารถถูกปล่อยออกมาหรืออ้างถึงชื่อเขตข้อมูลหรือค่าที่คาดหวัง
สำหรับฉันแล้วมันรู้สึกว่าใช้งานง่ายมาก แต่ฉันต้องการให้คุณรับฟังความคิดเห็นของคุณ: นี่เป็น API ที่ดีและมีประโยชน์หรือไม่
สำหรับเร็กคอร์ด: ไลบรารีนี้จะจัดเตรียม API ทั่วไปที่ไม่ใช่ภาษาที่ใช้งานได้มากขึ้นตามวัตถุการกำหนดค่า
where("name").equals("foo").or("bar")
(name=="foo")or bar
จากนั้นจะไม่ชัดเจนเมื่อสตริงแสดงถึงตัวอักษรและเมื่อมันแสดงชื่อคอลัมน์ ...