การเปิดตัว SQLite 3.35

การเปิดตัว 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

เพิ่มความคิดเห็น