diff --git a/sqlx-core/src/mariadb/executor.rs b/sqlx-core/src/mariadb/executor.rs index 266adb57..cb6a6718 100644 --- a/sqlx-core/src/mariadb/executor.rs +++ b/sqlx-core/src/mariadb/executor.rs @@ -115,10 +115,11 @@ impl Executor for MariaDb { let columns = self.result_column_defs().await?; let capabilities = self.capabilities; - let mut row: Option<_> = None; + let mut row = None; loop { let packet = self.receive().await?; + if packet[0] == 0xFE && packet.len() < 0xFF_FF_FF { // NOTE: It's possible for a ResultRow to start with 0xFE (which would normally signify end-of-rows) // but it's not possible for an Ok/Eof to be larger than 0xFF_FF_FF. diff --git a/sqlx-core/src/mariadb/protocol/response/row.rs b/sqlx-core/src/mariadb/protocol/response/row.rs index 6c795e34..f0a4512f 100644 --- a/sqlx-core/src/mariadb/protocol/response/row.rs +++ b/sqlx-core/src/mariadb/protocol/response/row.rs @@ -41,7 +41,7 @@ impl ResultRow { let mut values = Vec::with_capacity(columns.len()); for column_idx in 0..columns.len() { - if null[column_idx / 8] & (1 << (column_idx % 8)) != 0 { + if null[column_idx / 8] & (1 << (column_idx % 8) as u8) != 0 { values.push(None); } else { match columns[column_idx].field_type { diff --git a/sqlx-core/src/mariadb/query.rs b/sqlx-core/src/mariadb/query.rs index 109f717f..31e83b67 100644 --- a/sqlx-core/src/mariadb/query.rs +++ b/sqlx-core/src/mariadb/query.rs @@ -37,10 +37,10 @@ impl QueryParameters for MariaDbQueryParameters { let index = self.param_types.len(); self.param_types.push(metadata); - self.null_bitmap.resize(index / 8, 0); + self.null_bitmap.resize((index / 8) + 1, 0); if let IsNull::Yes = value.encode(&mut self.params) { - self.null_bitmap[index / 8] &= 1 << index % 8; + self.null_bitmap[index / 8] &= (1 << index % 8) as u8; } } }