MCPcopy Index your code
hub / github.com/RustPython/RustPython / bind_parameter

Method bind_parameter

crates/stdlib/src/_sqlite3.rs:3066–3119  ·  view source on GitHub ↗
(
            self,
            pos: c_int,
            parameter: &PyObject,
            vm: &VirtualMachine,
        )

Source from the content-addressed store, hash-verified

3064 }
3065
3066 fn bind_parameter(
3067 self,
3068 pos: c_int,
3069 parameter: &PyObject,
3070 vm: &VirtualMachine,
3071 ) -> PyResult<()> {
3072 let adapted;
3073 let obj = if need_adapt(parameter, vm) {
3074 adapted = _adapt(
3075 parameter,
3076 PrepareProtocol::class(&vm.ctx).to_owned(),
3077 |x| Ok(x.to_owned()),
3078 vm,
3079 )?;
3080 &adapted
3081 } else {
3082 parameter
3083 };
3084
3085 let ret = if vm.is_none(obj) {
3086 unsafe { sqlite3_bind_null(self.st, pos) }
3087 } else if let Some(val) = obj.downcast_ref::<PyInt>() {
3088 let val = val.try_to_primitive::<i64>(vm).map_err(|_| {
3089 vm.new_overflow_error("Python int too large to convert to SQLite INTEGER")
3090 })?;
3091 unsafe { sqlite3_bind_int64(self.st, pos, val) }
3092 } else if let Some(val) = obj.downcast_ref::<PyFloat>() {
3093 let val = val.to_f64();
3094 unsafe { sqlite3_bind_double(self.st, pos, val) }
3095 } else if let Some(val) = obj.downcast_ref::<PyStr>() {
3096 let val = val.try_as_utf8(vm)?;
3097 let (ptr, len) = str_to_ptr_len(val, vm)?;
3098 unsafe { sqlite3_bind_text(self.st, pos, ptr, len, SQLITE_TRANSIENT()) }
3099 } else if let Ok(buffer) = PyBuffer::try_from_borrowed_object(vm, obj) {
3100 let (ptr, len) = buffer_to_ptr_len(&buffer, vm)?;
3101 unsafe { sqlite3_bind_blob(self.st, pos, ptr, len, SQLITE_TRANSIENT()) }
3102 } else {
3103 return Err(new_programming_error(
3104 vm,
3105 format!(
3106 "Error binding parameter {}: type '{}' is not supported",
3107 pos,
3108 obj.class()
3109 ),
3110 ));
3111 };
3112
3113 if ret == SQLITE_OK {
3114 Ok(())
3115 } else {
3116 let db = SqliteRaw::from(self);
3117 db.check(ret, vm)
3118 }
3119 }
3120
3121 fn bind_parameters(self, parameters: &PyObject, vm: &VirtualMachine) -> PyResult<()> {
3122 if let Some(dict) = parameters.downcast_ref::<PyDict>() {

Callers 2

bind_parameters_nameMethod · 0.80

Calls 10

need_adaptFunction · 0.85
_adaptFunction · 0.85
str_to_ptr_lenFunction · 0.85
buffer_to_ptr_lenFunction · 0.85
to_f64Method · 0.80
try_as_utf8Method · 0.80
ErrClass · 0.50
to_ownedMethod · 0.45
is_noneMethod · 0.45
checkMethod · 0.45

Tested by

no test coverage detected