एसक्यूएल WHERE क्लॉज शॉर्ट-सर्किट का मूल्यांकन किया गया है?


142

एसक्यूएल में बूलियन अभिव्यक्तियाँ क्या हैं जहां शॉर्ट-सर्किट का मूल्यांकन किया जाता है ?

उदाहरण के लिए:

SELECT * 
FROM Table t 
WHERE @key IS NULL OR (@key IS NOT NULL AND @key = t.Key) 

अगर @key IS NULL सही का मूल्यांकन करता है, तो क्या @key NULL नहीं है और @key = t.Key का मूल्यांकन किया गया है?

यदि नहीं, तो क्यों नहीं?

यदि हाँ, तो क्या इसकी गारंटी है? क्या यह एएनएसआई एसक्यूएल का हिस्सा है या यह डेटाबेस विशिष्ट है?

यदि डेटाबेस विशिष्ट, SqlServer? आकाशवाणी? माई एसक्यूएल?


क्या खंड @ नहीं पूर्ण निरर्थक नहीं है? LHS पर @ IS IS NULL क्लॉज इस बात का ध्यान रखता है कि नहीं?
खर्चा

10
@ शेपेंडर - सवाल के जवाब पर निर्भर करता है
ग्रेग डीन

@Greg: मैं स्पेंडर के साथ सहमत हूं। मुझे कोई अंतर नहीं करने के लिए शॉर्ट-सर्किटिंग की कमी या उपस्थिति दिखाई नहीं देती है। यदि @key IS NULL है, तो @key = t.Key हमेशा झूठी लौटेगी, जैसा कि NULL! = NULL (इसीलिए हम IS NULL का उपयोग करते हैं, आखिर)।
माइकल मैडसेन

14
@ मिचेल और @spender - सवाल का बिंदु है, दूसरी शर्त का मूल्यांकन करता है या नहीं। सवाल का मुद्दा यह नहीं है, क्या यह विशिष्ट एसक्यूएल विवरण संभव के रूप में कुछ वर्णों में लिखा गया है। अधिक जटिल उदाहरणों में यह निस्संदेह मायने रखता है, जैसे कि जहां क्लॉज शॉर्ट सर्किट होता है, आप ऐसे भाव लिख सकते हैं जो अन्यथा त्रुटिपूर्ण होंगे।
ग्रेग डीन

2
शॉर्ट सर्कुलेटिंग का तात्पर्य बाएं से दाएं की स्थितियों का मूल्यांकन करना है। ऐसी स्थिति को देखते हुए जैसे WHERE a = 1 AND b = 2डेटाबेस इंजन के लिए सभी पंक्तियों को खोजने में कुशल हो सकता है जहाँ b = 2 पहले, फिर फ़िल्टर करें जहाँ a = 1. यदि आप गारंटी मांगते हैं तो ऑप्टिमाइज़र बेकार हो जाता है।
सलमान एक

जवाबों:


72

ANSI SQL ड्राफ्ट 2003 5WD-01-फ्रेमवर्क-2003-09.pdf

6.3.3.3 नियम मूल्यांकन आदेश

[...]

जहां प्रारूप का निर्धारण प्रारूप या कोष्ठकों द्वारा नहीं किया जाता है, वहां अभिव्यक्ति का प्रभावी मूल्यांकन आमतौर पर बाएं से दाएं किया जाता है। हालांकि, यह कार्यान्वयन-निर्भर है कि क्या अभिव्यक्तियों का वास्तव में बाएं से दाएं मूल्यांकन किया जाता है, विशेष रूप से जब ऑपरेंड या ऑपरेटर शर्तों को बढ़ा सकते हैं या यदि अभिव्यक्ति के सभी भागों का पूरी तरह से मूल्यांकन किए बिना अभिव्यक्तियों के परिणाम निर्धारित किए जा सकते हैं।


4
कार्यान्वयन पर निर्भर? महान। जानकर भी अच्छा लगा। कम से कम CASEशॉर्ट-सर्किट है।
दकब

3
क्या इसका मतलब यह नहीं है कि अभिव्यक्ति का मूल्यांकन अ-परिभाषित है? "(0 = 0 या NULL)", हमेशा NULL होता है यदि सभी शब्दों का मूल्यांकन किया जाता है, लेकिन हमेशा सच है अगर मूल्यांकन बाएं-से-दाएं और छोटे परिचालित किया जाए।
user48956

7
एसक्यूएल एक घोषणात्मक भाषा है, यह मूल रूप से अपने नियंत्रण प्रवाह का वर्णन किए बिना गणना के तर्क को व्यक्त करता है; जो शॉर्ट-सर्किट मूल्यांकन और इसके परिणामों की अनिवार्य शैली का खंडन करता है।
जॉर्ज गार्सिया

मैंने इसके बारे में उस तरह से नहीं सोचा था जिस तरह से @ जॉर्ज गार्सिया। मुझे लगता है कि शॉर्ट-सर्किट मूल्यांकन का तात्पर्य परिचालन पर एक आदेश को लागू करना है। मैं कुछ कोड के साथ कुश्ती कर रहा हूं जहां यह संभवत: एक सूक्ष्म मुद्दे की जड़ में है। अंतर्दृष्टि के लिए धन्यवाद।
कार्नोट एंटोनियो रोमेरो

58

ऊपर से, वास्तव में शॉर्ट सर्किटिंग उपलब्ध नहीं है।

यदि आपको इसकी आवश्यकता है, तो मैं एक केस स्टेटमेंट सुझाता हूं:

Where Case when Expr1 then Expr2 else Expr3 end = desiredResult

Expr1हमेशा का मूल्यांकन किया है, लेकिन का केवल एक Expr2और Expr3पंक्ति प्रति मूल्यांकन किया जाएगा।


3
मैं RDBMS के कार्यान्वयन पर निर्भर करता हूं। SQL सर्वर के लिए, कम से कम एक अपवाद मौजूद है जिसे इस व्यवहार को न दिखाने के लिए प्रलेखित किया गया है (यानी लघु-परिच्छेद); cf CASE (Transact-SQL) - रिमार्क्स । मैंने इस मामले को उद्धृत किया इस उत्तर में मैंने प्रश्न पर दिया - एसक्यूएल का स्पष्ट आदेश?
टीटी।

1
केस की अभिव्यक्ति , कथन नहीं।
जारलह

19

मुझे लगता है कि यह उन मामलों में से एक है जहां मैं इसे लिखूंगा जैसे कि यह तीन कारणों से शॉर्ट-सर्किट नहीं था।

  1. क्योंकि MSSQL के लिए, यह BOL को स्पष्ट स्थान पर देखकर हल नहीं होता है, इसलिए मेरे लिए, जो इसे कैनोनिक रूप से अस्पष्ट बनाता है।

  2. क्योंकि कम से कम तब मुझे पता है कि मेरा कोड काम करेगा। और अधिक महत्वपूर्ण बात, इसलिए जो लोग मेरे पीछे आएंगे, इसलिए मैं उन्हें बार-बार एक ही सवाल के माध्यम से चिंता करने के लिए स्थापित नहीं कर रहा हूं।

  3. मैं कई DBMS उत्पादों के लिए अक्सर पर्याप्त लिखता हूं, और मैं उन अंतरों को याद रखना नहीं चाहता, अगर मैं उनके आसपास आसानी से काम कर सकता हूं।


4
शानदार सुझाव। यह सवाल का जवाब नहीं देता है, लेकिन यह एक शानदार दृष्टिकोण है। तो +1
ग्रेग डीन

12

मुझे विश्वास नहीं है कि SQL सर्वर (2005) में शॉर्ट सर्किटिंग की गारंटी है। SQL सर्वर आपके अनुकूलन एल्गोरिथ्म के माध्यम से आपकी क्वेरी चलाता है जो एक प्रभावी निष्पादन योजना के साथ आने के लिए बहुत सी चीजों (अनुक्रमित, आंकड़े, तालिका आकार, संसाधन आदि) को ध्यान में रखता है। इस मूल्यांकन के बाद, आप यह सुनिश्चित नहीं कर सकते कि आपके शॉर्ट सर्किट लॉजिक की गारंटी है।

मैं कुछ समय पहले खुद भी इसी सवाल पर गया था और मेरे शोध ने मुझे निश्चित जवाब नहीं दिया। आप एक छोटी सी क्वेरी लिख सकते हैं जिससे आपको यह पता चले कि यह काम करती है लेकिन क्या आप सुनिश्चित कर सकते हैं कि जैसे-जैसे आपके डेटाबेस पर भार बढ़ता है, टेबल बड़े होते जाते हैं, और चीजें अनुकूलित होती जाती हैं और डेटाबेस में बदलाव होता जाता है, यह निष्कर्ष निकलेगा पकड़ो। मैं नहीं कर सकता था और इसलिए सावधानी के साथ मिटा दिया और शॉर्ट सर्किट सुनिश्चित करने के लिए WHERE क्लॉज में CASE का उपयोग किया।


7

आपको यह ध्यान रखना होगा कि डेटाबेस कैसे काम करता है। एक पैरामीटर वाली क्वेरी को देखते हुए db मापदंडों के लिए मानों के बिना उस क्वेरी के आधार पर एक निष्पादन योजना बनाता है। इस क्वेरी का उपयोग हर बार किया जाता है, भले ही वास्तविक आपूर्ति मूल्यों की परवाह किए बिना क्वेरी को चलाया जाता हो। क्या कुछ शर्तों के साथ क्वेरी शॉर्ट-सर्किट निष्पादन योजना के लिए कोई मायने नहीं रखेगा।


6
यह निष्पादन की गति के लिए मायने रखता है!
13:49 पर user4951

सिर्फ इसलिए कि यह वर्तमान में काम करता है इसका मतलब यह नहीं है कि इसे बदला नहीं जा सकता है। हमें मॉडल / शब्दार्थ को कार्यान्वयन से अलग करना होगा। निष्पादन योजनाओं को आंतरिक रूप से प्रश्नों के निष्पादन को अनुकूलित करने के लिए कार्यान्वित किया जाता है ... और शॉर्ट सर्किट शब्दार्थ न केवल एसक्यूएल की घोषणात्मक प्रकृति के विपरीत होते हैं, लेकिन इस तरह के अनुकूलन को बाधित कर सकते हैं। हालाँकि, यदि शॉर्ट सर्किट मूल्यांकन शब्दार्थों को DBMS द्वारा समर्थित किया जाना था, तो क्रियान्वयन योजनाओं के कार्यान्वयन से ऐसे शब्दार्थों को समर्थन मिलेगा।
जॉर्ज गार्सिया

3

मैं आमतौर पर वैकल्पिक मापदंडों के लिए इसका उपयोग करता हूं। क्या यह शॉर्ट सर्किटिंग के समान है?

SELECT  [blah]
FROM    Emp
WHERE  ((@EmpID = -1) OR (@EmpID = EmpID))

यह मुझे एक विशेषता की वैकल्पिक जाँच के लिए -1 या जो कुछ भी खाता है, में उत्तीर्ण करने का विकल्प देता है। कभी-कभी इसमें कई तालिकाओं पर शामिल होना, या अधिमानतः एक दृश्य शामिल होता है।

बहुत काम, पूरी तरह से उस अतिरिक्त काम के बारे में सुनिश्चित नहीं है जो यह डीबी इंजन को देता है।


2

SQL सर्वर के लिए, मुझे लगता है कि यह संस्करण पर निर्भर करता है, लेकिन SQL Server 2000 के साथ मेरा अनुभव यह है कि यह अभी भी @key = t.Key का मूल्यांकन करता है, जब भी @key शून्य है। दूसरे शब्दों में, यह WHERE क्लॉज का मूल्यांकन करते समय कुशल शॉर्ट सर्किटिंग नहीं करता है।

मैंने लोगों को एक लचीली क्वेरी करने के तरीके के रूप में आपके उदाहरण की तरह एक संरचना की सिफारिश करते देखा है जहां उपयोगकर्ता विभिन्न मानदंडों को दर्ज कर सकता है या नहीं दर्ज कर सकता है। मेरा अवलोकन है कि कुंजी अभी भी क्वेरी योजना में शामिल है जब @ null शून्य है और यदि कुंजी अनुक्रमित है तो यह कुशलता से सूचकांक का उपयोग नहीं करता है।

अलग-अलग मानदंडों के साथ इस तरह की लचीली क्वेरी शायद एक मामला है जहां गतिशील रूप से बनाई गई एसक्यूएल वास्तव में जाने का सबसे अच्छा तरीका है। यदि @key शून्य है, तो आप इसे क्वेरी में बिल्कुल शामिल नहीं करते हैं।


2

बस इस सवाल पर ठोकर खाई, और पहले से ही इस ब्लॉग-प्रविष्टि को पाया था: http://rusanu.com/2009/09/13/on-sql-server-boolean-operator-short-circuit/

SQL सर्वर एक क्वेरी को कहीं भी फिट करने के लिए अनुकूलित करने के लिए स्वतंत्र है, इसलिए ब्लॉग पोस्ट में दिए गए उदाहरण में, आप शॉर्ट-सर्कुलेटिंग पर भरोसा नहीं कर सकते।

हालाँकि, लिखित आदेश में मूल्यांकन करने के लिए एक CASE को स्पष्ट रूप से प्रलेखित किया गया है - उस ब्लॉग पोस्ट की टिप्पणियों की जाँच करें।


1

शॉर्ट सर्किट मूल्यांकन की मुख्य विशेषता यह है कि यह अभिव्यक्ति का मूल्यांकन करना बंद कर देता है जैसे ही परिणाम निर्धारित किया जा सकता है। इसका मतलब है कि बाकी अभिव्यक्ति को नजरअंदाज किया जा सकता है क्योंकि परिणाम का मूल्यांकन या नहीं होने के बावजूद समान होगा।

बाइनरी बूलियन ऑपरेटर्स कम्यूटेटिव हैं, जिसका अर्थ है:

a AND b == b AND a
a OR  b == b OR  a
a XOR b == b XOR a

इसलिए मूल्यांकन के आदेश की कोई गारंटी नहीं है। मूल्यांकन का क्रम क्वेरी ऑप्टिमाइज़र द्वारा निर्धारित किया जाएगा।

वस्तुओं के साथ भाषाओं में ऐसी परिस्थितियाँ हो सकती हैं जहाँ आप बूलियन अभिव्यक्तियों को लिख सकते हैं जिनका मूल्यांकन केवल शॉर्ट सर्किट मूल्यांकन के साथ किया जा सकता है। आपका नमूना कोड निर्माण अक्सर ऐसी भाषाओं (C #, डेल्फी, VB) में उपयोग किया जाता है। उदाहरण के लिए:

if(someString == null | someString.Length == 0 )
  printf("no text in someString");

यह C # उदाहरण अपवाद का कारण होगा यदि someString == nullयह पूरी तरह से मूल्यांकन किया जाएगा। शॉर्ट सर्किट मूल्यांकन में, यह हर बार काम करेगा।

SQL केवल स्केलर वैरिएबल्स (कोई ऑब्जेक्ट नहीं) पर संचालित होता है, जिसे असिंचित नहीं किया जा सकता है, इसलिए बूलियन अभिव्यक्ति लिखने का कोई तरीका नहीं है जिसका मूल्यांकन नहीं किया जा सकता है। यदि आपके पास कुछ NULL मान है, तो कोई भी तुलना गलत होगी।

इसका मतलब है कि SQL में आप शॉर्ट सर्किट या पूर्ण मूल्यांकन का उपयोग करने के आधार पर अलग-अलग मूल्यांकन किए गए अभिव्यक्ति को नहीं लिख सकते हैं।

यदि SQL कार्यान्वयन शॉर्ट सर्किट मूल्यांकन का उपयोग करता है, तो यह केवल क्वेरी निष्पादन की उम्मीद कर सकता है।


1
हां, बूलियन ऑपरेटर्स कम्यूटेटिव हैं। मुझे नहीं लगता कि वस्तुओं (या नहीं) का इससे कोई लेना-देना नहीं है।
ग्रेग डीन

1

मैं लघु परिचलन के बारे में नहीं जानता, लेकिन मैं इसे एक और-कथन के रूप में लिखूंगा

if (@key is null)
begin

     SELECT * 
     FROM Table t 

end
else
begin

     SELECT * 
     FROM Table t 
     WHERE t.Key=@key

end

इसके अलावा, चर हमेशा समीकरण के दाईं ओर होना चाहिए। यह इसे व्यर्थ बनाता है।

http://en.wikipedia.org/wiki/Sargable


1
क्या कोई इसे सही पर चर के बारे में पुष्टि कर सकता है? किसी कारण से मुझे इस पर विश्वास करने में मुश्किल होती है।
ग्रेग डीन

searchoracle.techtarget.com/expert/KnowledgebaseAnswer/… अभी बहुत कुछ नहीं मिल सकता है
DForck42

जैसा कि मैं लेख को समझता हूं। यह स्तंभ के नामों पर होने वाले कार्यों के बारे में बात कर रहा है जो सारगर्भित नहीं है। जिसे मैं समझता हूं। हालांकि, मुझे नहीं लगता कि (ए = @ ए) या (@ ए = ए) मायने रखता है।
ग्रेग डीन

मैं गलत हो सकता हूं। यह पहले से मौजूद नहीं है, तो एक अच्छा सवाल हो सकता है।
DForck42

1

SQL Server 2008 R2 पर एक त्वरित और गंदे परीक्षण के नीचे:

SELECT *
FROM table
WHERE 1=0
AND (function call to complex operation)

यह बिना किसी रिकॉर्ड के तुरंत लौटता है। शॉर्ट सर्किट व्यवहार की तरह मौजूद था।

फिर यह कोशिश की:

SELECT *
FROM table
WHERE (a field from table) < 0
AND (function call to complex operation)

कोई भी रिकॉर्ड जानने से इस शर्त पर संतोष नहीं होगा:

(a field from table) < 0

इसमें कई सेकंड लगे, यह दर्शाता है कि शॉर्ट सर्किट व्यवहार नहीं था और कोई भी जटिल ऑपरेशन हर रिकॉर्ड के लिए मूल्यांकन किया जा रहा था।

आशा है कि यह लोगों की मदद करता है।


1
मेरा अनुमान है कि योजना के क्रियान्वयन से पहले, वास्तव में शुरू होने से पहले, संकलन समय में पहली क्वेरी "शॉर्ट सर्कुलेटेड" थी।
लुईस सोमरस

1

यहाँ यह साबित करने के लिए एक डेमो है कि MySQL WH-clause शॉर्ट-सर्कुलेटिंग करता है :

http://rextester.com/GVE4880

यह निम्नलिखित प्रश्न चलाता है:

SELECT myint FROM mytable WHERE myint >= 3 OR myslowfunction('query #1', myint) = 1;
SELECT myint FROM mytable WHERE myslowfunction('query #2', myint) = 1 OR myint >= 3;

इनमें से एकमात्र अंतर OR स्थिति में ऑपरेंड का क्रम है।

myslowfunctionजानबूझकर एक दूसरे के लिए सोता है और हर बार इसे चलाने के लिए एक लॉग टेबल में एक प्रविष्टि जोड़ने का दुष्प्रभाव होता है। उपरोक्त दो प्रश्नों को चलाने के दौरान लॉग इन करने के परिणाम इस प्रकार हैं:

myslowfunction called for query #1 with value 1
myslowfunction called for query #1 with value 2
myslowfunction called for query #2 with value 1
myslowfunction called for query #2 with value 2
myslowfunction called for query #2 with value 3
myslowfunction called for query #2 with value 4

ऊपर दिखाया गया है कि एक धीमी गति से कार्य को अधिक बार निष्पादित किया जाता है जब यह एक ओर की स्थिति के बाईं ओर दिखाई देता है जब अन्य ऑपरेंड हमेशा सही नहीं होता है (शॉर्ट-सर्कुलेटिंग के कारण)।


4
हम्म जो आपको शायद कहने का मतलब था "यहां यह साबित करने के लिए एक डेमो है कि MySQL इस विशेष उदाहरण में शॉर्ट-सर्कुलेटिंग कहां करता है :"
टीटी।

1
ज़रूर - यह सिर्फ एक सबूत है कि ऐसा हो सकता है।
स्टीव चेम्बर्स

0

यह क्वेरी एनालाइज़र में एक अतिरिक्त 4 सेकंड लेता है, इसलिए मैं जो देख सकता हूं कि क्या IF भी छोटा नहीं है ...

SET @ADate = NULL

IF (@ADate IS NOT NULL)
BEGIN
    INSERT INTO #ABla VALUES (1)
        (SELECT bla from a huge view)
END

यह एक अच्छा तरीका होगा गारंटी!


-2

लेकिन यह स्पष्ट है कि MS Sql सर्वर शॉर्ट सर्किट थ्योरी का समर्थन करता है, ताकि अनावश्यक जाँच से बचकर प्रदर्शन को बेहतर बनाया जा सके,

सहायक उदाहरण:

SELECT 'TEST'
WHERE 1 = 'A'

SELECT 'TEST'
WHERE 1 = 1 OR 1 = 'A'

यहाँ, पहला उदाहरण त्रुटि प्रकार में परिणत होगा जब डेटा प्रकार int के लिए varchar value 'A' को परिवर्तित करने में विफल रहा। '

जबकि दूसरी आसानी से हालत 1 = 1 के रूप में चलाता है TRUE का मूल्यांकन किया गया और इस प्रकार दूसरी स्थिति बिल्कुल नहीं चली।

आगे और भी

SELECT 'TEST'
WHERE 1 = 0 OR 1 = 'A'

यहाँ पहली शर्त झूठी का मूल्यांकन करेगी और इसलिए DBMS दूसरी स्थिति के लिए जाएगी और फिर आपको उपरोक्त उदाहरण में रूपांतरण की त्रुटि मिलेगी।

ध्यान दें: मैं गलत निष्कर्ष निकालता हूं, जो इस निष्कर्ष पर भरोसा करता है कि निष्कर्ष निकाला गया है या छोटा-सा हो सकता है, यदि गलत तरीके से गलत तरीके से निष्कर्ष निकाले गए हैं, तो छोटे-सिर वाले अन्य दस्तावेज भी हैं।

सरल विस्तार

विचार करें,

WHERE 1 = 1 OR 2 = 2

पहली शर्त के रूप में TRUE का मूल्यांकन किया जा रहा है, दूसरी स्थिति का मूल्यांकन करने के लिए इसका अर्थहीन है क्योंकि जो कुछ भी मूल्य में इसका मूल्यांकन परिणाम को प्रभावित नहीं करेगा, इसलिए एसक्यूएल सर्वर के लिए इसका अच्छा अवसर अनावश्यक स्थिति या मूल्यांकन को छोड़ कर क्वेरी निष्पादन समय बचाने के लिए है। ।

"या" के मामले में यदि पहली शर्त का मूल्यांकन TRUE से किया जाता है तो "OR" से जुड़ी पूरी श्रृंखला को दूसरों का मूल्यांकन किए बिना सच मान लिया जाएगा।

condition1 OR condition2 OR ..... OR conditionN

यदि कंडिशन 1 का सही मूल्यांकन किया जाता है, तो सभी शर्तों को तब तक आराम करें जब तक कि कंडीशन को छोड़ नहीं दिया जाएगा। पहले TRUE के निर्धारण में सामान्यीकृत शब्दों में , OR द्वारा लिंक की गई अन्य सभी शर्तों को छोड़ दिया जाएगा।

दूसरी शर्त पर विचार करें

WHERE 1 = 0 AND 1 = 1

पहली शर्त के रूप में दूसरी शर्त का मूल्यांकन करने के लिए FALSE अपने अर्थहीन हो रहा है क्योंकि जो कुछ भी मूल्य में इसका मूल्यांकन परिणाम को प्रभावित नहीं करेगा, इसलिए फिर Sql सर्वर के लिए यह अच्छा मौका है कि वह अनावश्यक स्थिति की जाँच या मूल्यांकन करके क्वेरी निष्पादन समय को बचा सके। ।

"और" के मामले में अगर पहली शर्त का मूल्यांकन FALSE के लिए किया जाता है तो "और" से जुड़ी पूरी श्रृंखला को दूसरों का मूल्यांकन किए बिना FALSE के मूल्यांकन के रूप में माना जाएगा।

condition1 AND condition2 AND ..... conditionN

यदि F1SE के लिए कंडिशन 1 का मूल्यांकन किया जाता है , तो सभी शर्तों को तब तक आराम करें जब तक कि कंडीशन को छोड़ नहीं दिया जाएगा। पहले FALSE के निर्धारण में सामान्यीकृत शब्दों में , AND द्वारा लिंक की गई अन्य सभी शर्तों को छोड़ दिया जाएगा।

चोर, एक वाइस प्रोगामर, जो पहले भी एक दिन, जैसे कम से कम या सबसे लंबे समय तक रहने वाले कॉस्टिट्यूशन गेट, या एफआईआर में कॉर्डिनेशन में काम कर रहा है, का पता लगाने के बाद भी आपको पता नहीं चलेगा।


डाउनवोट कारण: हमेशा यथार्थवादी डेटा के साथ एक वास्तविक सर्वर पर चीजों का परीक्षण करें। लगता है मेरी पिछली टिप्पणी खा गई।
जैस्मिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.