Drupal 7 में डेटाबेस के साथ काम — पाठ 3 — स्टैटिक क्वेरीज़ (SELECT)
Drupal में सबसे सामान्य क्वेरी प्रकार है स्टैटिक क्वेरी। ऐसी क्वेरी डेटाबेस को बिल्कुल उसी रूप में भेजी जाती है जैसे लिखी गई हो। केवल SELECT क्वेरीज़ ही स्टैटिक हो सकती हैं।
स्टैटिक क्वेरीज़ का उपयोग केवल बहुत सरल मामलों में करना चाहिए। यदि आपको जटिल, डायनेमिक रूप से निर्मित, या रनटाइम पर संशोधित की जाने वाली क्वेरीज़ चाहिए, तो आपको डायनेमिक क्वेरीज़ का उपयोग करना चाहिए।
स्टैटिक क्वेरी चलाने का सरल तरीका है:
Drupal 7 में डेटाबेस के साथ काम — पाठ 4 — डायनेमिक क्वेरीज़ (SELECT)
अब हम Drupal Database API के सबसे दिलचस्प भाग — डायनेमिक क्वेरीज़ — तक पहुँच गए हैं। इन्हें “डायनेमिक” इसलिए कहा जाता है क्योंकि Drupal क्वेरी स्ट्रिंग को स्वतः तैयार करता है। सभी INSERT, UPDATE, DELETE और MERGE क्वेरीज़ डायनेमिक हो सकती हैं। SELECT क्वेरीज़ भी या तो स्टैटिक या डायनेमिक हो सकती हैं, लेकिन Drupal में SELECT के लिए भी डायनेमिक क्वेरीज़ का उपयोग करना बेहतर होता है।
Drupal 7 में डेटाबेस के साथ काम — पाठ 5 — एक्सटेंडर्स (Extenders)
Drupal 7 में SELECT क्वेरीज़ “एक्सटेंडर्स (Extenders)” का समर्थन करती हैं। एक्सटेंडर का उपयोग किसी क्वेरी में अतिरिक्त कार्यक्षमता जोड़ने के लिए किया जाता है — यह रनटाइम पर क्वेरी की क्षमताओं को बढ़ाता है। एक्सटेंडर किसी क्वेरी ऑब्जेक्ट में नए मेथड्स जोड़ सकते हैं या मौजूदा मेथड्स के व्यवहार को संशोधित कर सकते हैं।
यह अवधारणा ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (OOP) के Decorator Pattern पर आधारित है। एक्सटेंडर किसी क्वेरी ऑब्जेक्ट में अतिरिक्त “ज़िम्मेदारियाँ” जोड़ते हैं, जिससे उस ऑब्जेक्ट की क्षमताएँ बिना उसका मूल क्लास बदले विस्तारित हो जाती हैं।
Drupal 7 में डेटाबेस के साथ काम — पाठ 6 — रनटाइम पर क्वेरी संशोधन (hook_query_alter)
ड्रुपल 7 में डायनेमिक SELECT क्वेरी की एक महत्वपूर्ण विशेषता यह है कि अन्य मॉड्यूल्स रनटाइम पर (यानी “ऑन द फ्लाई”) क्वेरी को संशोधित कर सकते हैं। इससे दूसरे मॉड्यूल्स अपने निर्देश क्वेरी में जोड़ सकते हैं, ताकि वे इसके व्यवहार को बदल सकें — उदाहरण के लिए, नोड एक्सेस नियंत्रण लागू करना या डेटा फ़िल्टरिंग बदलना। रनटाइम क्वेरी परिवर्तन की प्रक्रिया तीन घटकों पर आधारित होती है: tagging, meta data, और hook_query_alter()।
Drupal 7 में डेटाबेस के साथ काम — पाठ 7 — क्वेरी परिणामों की प्रोसेसिंग (fetch)
SELECT क्वेरी हमेशा 0 या उससे अधिक रिकॉर्ड्स लौटाती है। Drupal 7 में इन परिणामों को प्रोसेस (fetch) करने के कई तरीके होते हैं — आप अपनी आवश्यकता के अनुसार कोई भी तरीका चुन सकते हैं।
सबसे सामान्य तरीका है परिणामों को foreach() लूप के माध्यम से संसाधित करना:
Drupal 7 में डेटाबेस के साथ काम — पाठ 8 — डेटा जोड़ने की क्वेरीज़ (INSERT INTO)
डेटा जोड़ने (INSERT) की क्वेरीज़ हमेशा Drupal के क्वेरी बिल्डर (Query Builder) के माध्यम से बनाई जानी चाहिए। कुछ डेटाबेस सिस्टम्स में बड़े ऑब्जेक्ट्स (LOB — Large OBject, जैसे MySQL में TEXT) और बाइनरी बड़े ऑब्जेक्ट्स (BLOB — Binary Large OBject) के लिए विशेष हैंडलर की आवश्यकता होती है, इसलिए डेटाबेस ड्राइवर स्तर पर इन हैंडलरों को संभालने के लिए एक अमूर्त परत (abstraction layer) आवश्यक होती है।
INSERT क्वेरीज़ db_insert() फ़ंक्शन से शुरू होती हैं:
Drupal 7 में डेटाबेस के साथ काम — पाठ 9 — रिकॉर्ड अपडेट क्वेरीज़ (UPDATE)
रिकॉर्ड अपडेट (UPDATE) क्वेरीज़ को हमेशा Drupal के क्वेरी बिल्डर (Query Builder) के माध्यम से बनाना चाहिए। विभिन्न डेटाबेस सिस्टम्स में बड़े ऑब्जेक्ट्स (LOB — Large OBjects, जैसे MySQL में TEXT) और बाइनरी बड़े ऑब्जेक्ट्स (BLOB — Binary Large OBjects) के लिए अलग-अलग हैंडलर होते हैं। इसलिए, इन मामलों को संभालने के लिए क्वेरी एब्स्ट्रैक्शन लेयर आवश्यक होती है, जिससे हर डेटाबेस ड्राइवर अपनी विशिष्ट प्रक्रिया लागू कर सके।
अपडेट क्वेरी db_update() फ़ंक्शन से शुरू होती है:
Drupal 7 में डेटाबेस के साथ काम — पाठ 10 — रिकॉर्ड हटाने की क्वेरीज़ (DELETE)
रिकॉर्ड हटाने (DELETE) के लिए क्वेरीज़ को Drupal में क्वेरी बिल्डर (Query Builder) के माध्यम से ही बनाया जाना चाहिए। इन्हें db_delete() फ़ंक्शन से शुरू किया जाता है:
<?php $query = db_delete('node', $options); ?>
यह क्वेरी “node” टेबल से रिकॉर्ड्स को हटाएगी। ध्यान दें कि टेबल के नाम को आकृति कोष्ठकों {}
में लिखने की आवश्यकता नहीं है — क्वेरी बिल्डर यह स्वचालित रूप से कर देता है।
Drupal 7 में डेटाबेस के साथ काम — पाठ 11 — मर्ज क्वेरीज़ (MERGE)
मर्ज क्वेरीज़ (Merge Queries) एक विशेष हाइब्रिड प्रकार की क्वेरी होती हैं। यद्यपि इन क्वेरीज़ का सिंटैक्स SQL 2003 मानक में परिभाषित किया गया था, वास्तव में बहुत कम डेटाबेस हैं जो इस सिंटैक्स का प्रत्यक्ष समर्थन करते हैं। हालांकि, अधिकांश डेटाबेस इस कार्यक्षमता को अलग-अलग तरीकों से लागू करते हैं, अपने स्वयं के सिंटैक्स के माध्यम से। Drupal में मर्ज क्वेरी कंस्ट्रक्टर इस पूरी अवधारणा को अमूर्त (abstract) रूप में प्रस्तुत करता है, ताकि यह हर डेटाबेस के लिए अलग-अलग तरीके से संकलित (compiled) हो सके।
Drupal 7 में डेटाबेस के साथ काम — पाठ 12 — क्वेरी की शर्तें (WHERE, HAVING, LIKE)
क्वेरी में शर्तें (conditions) जोड़ने से हम केवल उन्हीं रिकॉर्ड्स का चयन कर सकते हैं, जो कुछ विशेष मानदंडों को पूरा करते हैं — जैसे कि केवल पिछले दो सप्ताह में बनाई गई नोड्स, या वे टर्म जिनमें "Drupal" शब्द शामिल है। SQL में हम SELECT, UPDATE, DELETE क्वेरीज़ में शर्तें निर्दिष्ट करने के लिए WHERE और HAVING का उपयोग करते हैं। Drupal के डायनेमिक क्वेरी सिस्टम में भी शर्तों के साथ काम करने के लिए एक समान तंत्र लागू किया गया है। यह तंत्र सभी तीन प्रकार की क्वेरीज़ — चयन (SELECT), अद्यतन (UPDATE), और हटाने (DELETE) — के लिए समान रूप से कार्य करता है।