Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitfef790c

Browse files
committed
Back out python patch:
Elliot Lee wrote:> This patch to the python bindings adds C versions of the often-usedquery> args quoting routines, as well as support for quoting lists e.g.> dbc.execute("SELECT * FROM foo WHERE blah IN %s", ([1,2,3],))
1 parent14b0524 commitfef790c

File tree

2 files changed

+26
-174
lines changed

2 files changed

+26
-174
lines changed

‎src/interfaces/python/pgdb.py

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -260,38 +260,32 @@ def setoutputsize(self, size, col = 0):
260260
pass
261261

262262

263-
try:
264-
_quote=_pg.quote_fast
265-
_quoteparams=_pg.quoteparams_fast
266-
exceptNameError:
267-
def_quote(x):
268-
iftype(x)==types.StringType:
269-
x="'"+string.replace(
270-
string.replace(str(x),'\\','\\\\'),"'","''")+"'"
271-
272-
eliftype(x)in (types.IntType,types.LongType,types.FloatType):
273-
pass
274-
elifxisNone:
275-
x='NULL'
276-
eliftype(x)in (types.ListType,types.TupleType):
277-
return'(%s)'%','.join(map(lambdax:str(_quote(x)),x))
278-
elifhasattr(x,'__pg_repr__'):
279-
x=x.__pg_repr__()
280-
else:
281-
raiseInterfaceError,'do not know how to handle type %s'%type(x)
282-
283-
returnx
284-
285-
def_quoteparams(s,params):
286-
ifhasattr(params,'has_key'):
287-
x= {}
288-
fork,vinparams.items():
289-
x[k]=_quote(v)
290-
params=x
291-
else:
292-
params=tuple(map(_quote,params))
293-
294-
returns%params
263+
def_quote(x):
264+
iftype(x)==types.StringType:
265+
x="'"+string.replace(
266+
string.replace(str(x),'\\','\\\\'),"'","''")+"'"
267+
268+
eliftype(x)in (types.IntType,types.LongType,types.FloatType):
269+
pass
270+
elifxisNone:
271+
x='NULL'
272+
elifhasattr(x,'__pg_repr__'):
273+
x=x.__pg_repr__()
274+
else:
275+
raiseInterfaceError,'do not know how to handle type %s'%type(x)
276+
277+
returnx
278+
279+
def_quoteparams(s,params):
280+
ifhasattr(params,'has_key'):
281+
x= {}
282+
fork,vinparams.items():
283+
x[k]=_quote(v)
284+
params=x
285+
else:
286+
params=tuple(map(_quote,params))
287+
288+
returns%params
295289

296290
### connection object
297291

‎src/interfaces/python/pgmodule.c

Lines changed: 0 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -3121,150 +3121,10 @@ pgsetdefport(PyObject * self, PyObject * args)
31213121
}
31223122
#endif/* DEFAULT_VARS */
31233123

3124-
staticPyObject*comma_string=NULL;
3125-
3126-
staticPyObject*
3127-
pgpy_quote_fast(PyObject*self,PyObject*args)
3128-
{
3129-
PyObject*x,*retval=NULL;
3130-
3131-
if(!PyArg_ParseTuple(args,"O:pgpy_quote_fast",&x))
3132-
returnNULL;
3133-
3134-
if(x->ob_type==&PyInt_Type||x->ob_type==&PyLong_Type||x->ob_type==&PyFloat_Type)
3135-
{
3136-
Py_INCREF(retval=x);
3137-
}
3138-
elseif(x==Py_None)
3139-
retval=PyString_FromString("NULL");
3140-
elseif(x->ob_type==&PyString_Type)
3141-
{
3142-
char*in,*out,*ctmp;
3143-
inti,n,ct;
3144-
in=PyString_AS_STRING(x);
3145-
n=PyString_GET_SIZE(x);
3146-
3147-
for(i=ct=0;i<n;i++)
3148-
if(in[i]=='\\'||in[i]=='\'')
3149-
ct++;
3150-
ctmp=out=alloca(n+ct+10);
3151-
*(ctmp++)='\'';
3152-
for(i=0;i<n;i++)
3153-
{
3154-
if(in[i]=='\\')
3155-
*(ctmp++)='\\';
3156-
if(in[i]=='\'')
3157-
*(ctmp++)='\'';
3158-
*(ctmp++)=in[i];
3159-
}
3160-
*(ctmp++)='\'';
3161-
*(ctmp++)='\0';
3162-
retval=PyString_FromString(out);
3163-
}
3164-
elseif(PySequence_Check(x))
3165-
{
3166-
inti,n=PySequence_Size(x);
3167-
PyObject*subout,*subargs,*subjoin=NULL;
3168-
3169-
subargs=PyTuple_New(1);
3170-
subout=PyTuple_New(n);
3171-
3172-
for(i=0;i<n;i++)
3173-
{
3174-
PyObject*sub=PySequence_GetItem(x,i),*subres;
3175-
3176-
PyTuple_SetItem(subargs,0,sub);
3177-
subres=pgpy_quote_fast(NULL,subargs);
3178-
if(!subres)
3179-
gotoout;
3180-
3181-
if(!PyString_Check(subres))
3182-
{
3183-
PyObject*subres2=PyObject_Str(subres);
3184-
3185-
if(!subres2)
3186-
gotoout;
3187-
Py_DECREF(subres);
3188-
subres=subres2;
3189-
}
3190-
3191-
PyTuple_SetItem(subout,subres);
3192-
}
3193-
3194-
subjoin=_PyString_Join(comma_string,subout);
3195-
if(!subjoin)
3196-
gotoout;
3197-
retval=PyString_FromFormat("(%s)",PyString_AS_STRING(subjoin));
3198-
3199-
out:
3200-
Py_INCREF(Py_None);
3201-
PyTuple_SetItem(subargs,0,Py_None);
3202-
Py_DECREF(subargs);
3203-
Py_DECREF(subout);
3204-
Py_XDECREF(subjoin);
3205-
}
3206-
else
3207-
{
3208-
retval=PyEval_CallMethod(x,"__pg_repr__","()");
3209-
if(!retval)
3210-
{
3211-
PyErr_Format(PyExc_TypeError,"Don't know how to quote type %s", ((PyTypeObject*)x->ob_type)->tp_name);
3212-
returnNULL;
3213-
}
3214-
}
3215-
3216-
returnretval;
3217-
}
3218-
3219-
staticPyObject*
3220-
pgpy_quoteparams_fast(PyObject*self,PyObject*args)
3221-
{
3222-
PyObject*s,*params,*x=NULL,*retval;
3223-
3224-
if(!PyArg_ParseTuple("O!O:pgpy_quoteparams_fast",&PyString_Type,&s,&params))
3225-
returnNULL;
3226-
3227-
if(PyDict_Check(params))
3228-
{
3229-
inti=0;
3230-
PyObject*k,*v,*subargs;
3231-
3232-
x=PyDict_New();
3233-
subargs=PyTuple_New(1);
3234-
while(PyDict_Next(params,&i,&k,&v))
3235-
{
3236-
PyObject*qres;
3237-
3238-
PyTuple_SetItem(subargs,0,v);
3239-
qres=pgpy_quote_fast(NULL,subargs);
3240-
if(!qres)
3241-
{
3242-
Py_DECREF(x);
3243-
Py_INCREF(Py_None);
3244-
PyTuple_SetItem(subargs,0,Py_None);
3245-
Py_DECREF(subargs);
3246-
3247-
returnNULL;
3248-
}
3249-
3250-
PyDict_SetItem(x,k,qres);
3251-
Py_DECREF(qres);
3252-
}
3253-
3254-
params=x;
3255-
}
3256-
3257-
retval=PyString_Format(s,params);
3258-
Py_XDECREF(x);
3259-
returnretval;
3260-
}
3261-
32623124
/* List of functions defined in the module */
32633125

32643126
staticstructPyMethodDefpg_methods[]= {
32653127
{"connect", (PyCFunction)pgconnect,3,connect__doc__},
3266-
{"quote_fast", (PyCFunction)pgpy_quote_fast,METH_VARARGS},
3267-
{"quoteparams_fast", (PyCFunction)pgpy_quoteparams_fast,METH_VARARGS},
32683128

32693129
#ifdefDEFAULT_VARS
32703130
{"get_defhost",pggetdefhost,1,getdefhost__doc__},
@@ -3318,8 +3178,6 @@ init_pg(void)
33183178
PyDict_SetItemString(dict,"RESULT_DDL",PyInt_FromLong(RESULT_DDL));
33193179
PyDict_SetItemString(dict,"RESULT_DQL",PyInt_FromLong(RESULT_DQL));
33203180

3321-
comma_string=PyString_InternFromString(",");
3322-
33233181
#ifdefLARGE_OBJECTS
33243182
/* create mode for large objects */
33253183
PyDict_SetItemString(dict,"INV_READ",PyInt_FromLong(INV_READ));

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp