การเปิดตัว SQLite 3.35 ซึ่งเป็น DBMS ที่มีน้ำหนักเบาซึ่งออกแบบเป็นไลบรารีปลั๊กอินได้รับการเผยแพร่แล้ว รหัส SQLite เผยแพร่ในโดเมนสาธารณะ เช่น สามารถใช้ได้โดยไม่มีข้อจำกัดและไม่มีค่าใช้จ่ายสำหรับวัตถุประสงค์ใดๆ การสนับสนุนทางการเงินสำหรับนักพัฒนา SQLite มีให้โดยสมาคมที่สร้างขึ้นเป็นพิเศษ ซึ่งรวมถึงบริษัทต่างๆ เช่น Adobe, Oracle, Mozilla, Bentley และ Bloomberg
การเปลี่ยนแปลงที่สำคัญ:
- เพิ่มฟังก์ชันทางคณิตศาสตร์ในตัว (log2(), cos(), tg(), exp(), ln(), pow() ฯลฯ ที่สามารถใช้ใน SQL การเปิดใช้งานฟังก์ชันในตัวจำเป็นต้องสร้างด้วยตัวเลือก "-DSQLITE_ENABLE_MATH_FUNCTIONS"
- ใช้การสนับสนุนสำหรับนิพจน์ "ALTER TABLE DROP COLUMN" เพื่อลบคอลัมน์ออกจากตารางและล้างข้อมูลที่เก็บไว้ก่อนหน้านี้ในคอลัมน์ที่กำหนด
- การใช้งานการดำเนินการ UPSERT (เพิ่มหรือแก้ไข) ได้รับการขยายออกไป โดยอนุญาตให้ใช้นิพจน์เช่น “INSERT ... ON CONFLICT DO Nothing/UPDATE” เพื่อเพิกเฉยต่อข้อผิดพลาดหรือดำเนินการอัปเดตแทนการแทรกหากไม่สามารถเพิ่มได้ ข้อมูลผ่าน “INSERT” (เช่น หากมีบันทึกอยู่แล้ว คุณสามารถดำเนินการ UPDATE แทน INSERT ได้) เวอร์ชันใหม่ช่วยให้คุณสามารถระบุบล็อก ON CONFLICT ได้หลายบล็อก ซึ่งจะได้รับการประมวลผลตามลำดับ บล็อก "ON CONFLICT" สุดท้ายอนุญาตให้ละเว้นพารามิเตอร์คำจำกัดความข้อขัดแย้งเพื่อใช้ "DO UPDATE"
- การดำเนินการ DELETE, INSERT และ UPDATE รองรับนิพจน์ RETURNING ซึ่งสามารถใช้เพื่อแสดงเนื้อหาของบันทึกที่ถูกลบ แทรก หรือแก้ไข ตัวอย่างเช่น นิพจน์ “insert into ... returning id” จะส่งกลับตัวระบุของบรรทัดที่เพิ่ม และ “update ... set price = price * 1.10 return price” จะส่งกลับค่าราคาที่เปลี่ยนแปลง
- สำหรับ Common Table Expressions (CTE) ซึ่งอนุญาตให้ใช้ชุดผลลัพธ์ที่มีชื่อชั่วคราวที่ระบุโดยใช้คำสั่ง WITH จะอนุญาตให้เลือกโหมด "MATERIALIZED" และ "NOT MATERIALIZED" ได้ “MATERIALIZED” หมายถึงการแคชแบบสอบถามที่ระบุในมุมมองในตารางฟิสิคัลที่แยกจากกัน จากนั้นจึงดึงข้อมูลจากตารางนี้ และหากใช้แบบสอบถาม “NOT MATERIALIZED” ซ้ำๆ จะดำเนินการทุกครั้งที่มีการเข้าถึงมุมมอง เดิมที SQLite มีโหมดเริ่มต้น "NOT MATERIALIZED" แต่ตอนนี้ได้เปลี่ยนเป็น "MATERIALIZED" สำหรับ CTE ที่ใช้มากกว่าหนึ่งครั้ง
- ลดการใช้หน่วยความจำเมื่อดำเนินการ VACUUM บนฐานข้อมูลที่มีค่า TEXT หรือ BLOB ที่มีขนาดใหญ่มาก
- มีการทำงานเพื่อเพิ่มประสิทธิภาพของเครื่องมือเพิ่มประสิทธิภาพและเครื่องมือวางแผนแบบสอบถาม:
- เพิ่มการเพิ่มประสิทธิภาพเมื่อใช้ฟังก์ชัน min และ max ด้วยนิพจน์ "IN"
- การดำเนินการของคำสั่ง EXISTS ได้รับการเร่งให้เร็วขึ้น
- ดำเนินการขยายแบบสอบถามย่อยจากนิพจน์ UNION ALL ที่ใช้เป็นส่วนหนึ่งของ JOIN
- ดัชนีใช้สำหรับนิพจน์ IS NOT NULL
- ตรวจสอบให้แน่ใจว่า "x IS NULL" และ "x IS NOT NULL" ถูกแปลงเป็น FALSE หรือ TRUE สำหรับคอลัมน์ที่มีแอตทริบิวต์ "NOT NULL"
- ข้ามการตรวจสอบคีย์ต่างประเทศใน UPDATE หากการดำเนินการไม่เปลี่ยนคอลัมน์ที่เกี่ยวข้องกับคีย์ต่างประเทศ
- ได้รับอนุญาตให้ย้ายบางส่วนของบล็อก WHERE ไปยังแบบสอบถามย่อยที่มีฟังก์ชันหน้าต่าง ตราบใดที่ส่วนเหล่านั้นถูกจำกัดให้ทำงานกับค่าคงที่และสำเนาของนิพจน์จากบล็อก PARTITION BY ที่ใช้ในฟังก์ชันหน้าต่าง
- การเปลี่ยนแปลงในอินเทอร์เฟซบรรทัดคำสั่ง:
- เพิ่มคำสั่ง ".filetrl data_version"
- คำสั่ง ".once" และ ".output" รองรับการส่งผ่านเอาต์พุตไปยังตัวจัดการที่เรียกว่าการใช้ไปป์ที่ไม่มีชื่อ ("|")
- อาร์กิวเมนต์ "stmt" และ "vmstep" ได้รับการเพิ่มลงในคำสั่ง ".stats" เพื่อแสดงสถิติเกี่ยวกับนิพจน์และตัวนับเครื่องเสมือน
ที่มา: opennet.ru