mirror of
				https://github.com/meilisearch/meilisearch.git
				synced 2025-10-31 07:56:28 +00:00 
			
		
		
		
	Merge #4725
4725: Store primary key as String when Number exceeds i64 range r=irevoire a=JWSong # Pull Request ## Related issue Fixes #4696 ## What does this PR do? - When a Number value exceeding the range of i64 is received as a primary key, it will be stored as a String. ## PR checklist Please check if your PR fulfills the following requirements: - [x] Does this PR fix an existing issue, or have you listed the changes applied in the PR description (and why they are needed)? - [x] Have you read the contributing guidelines? - [x] Have you made sure that the title is accurate and descriptive of the changes? Thank you so much for contributing to Meilisearch! Co-authored-by: JWSong <thdwjddn123@gmail.com>
This commit is contained in:
		| @@ -1040,6 +1040,52 @@ async fn document_addition_with_primary_key() { | ||||
|     "###); | ||||
| } | ||||
|  | ||||
| #[actix_rt::test] | ||||
| async fn document_addition_with_huge_int_primary_key() { | ||||
|     let server = Server::new().await; | ||||
|     let index = server.index("test"); | ||||
|  | ||||
|     let documents = json!([ | ||||
|         { | ||||
|             "primary": 14630868576586246730u64, | ||||
|             "content": "foo", | ||||
|         } | ||||
|     ]); | ||||
|     let (response, code) = index.add_documents(documents, Some("primary")).await; | ||||
|     snapshot!(code, @"202 Accepted"); | ||||
|  | ||||
|     let response = index.wait_task(response.uid()).await; | ||||
|     snapshot!(response, | ||||
|         @r###" | ||||
|     { | ||||
|       "uid": 0, | ||||
|       "indexUid": "test", | ||||
|       "status": "succeeded", | ||||
|       "type": "documentAdditionOrUpdate", | ||||
|       "canceledBy": null, | ||||
|       "details": { | ||||
|         "receivedDocuments": 1, | ||||
|         "indexedDocuments": 1 | ||||
|       }, | ||||
|       "error": null, | ||||
|       "duration": "[duration]", | ||||
|       "enqueuedAt": "[date]", | ||||
|       "startedAt": "[date]", | ||||
|       "finishedAt": "[date]" | ||||
|     } | ||||
|     "###); | ||||
|  | ||||
|     let (response, code) = index.get_document(14630868576586246730u64, None).await; | ||||
|     snapshot!(code, @"200 OK"); | ||||
|     snapshot!(json_string!(response), | ||||
|         @r###" | ||||
|     { | ||||
|       "primary": 14630868576586246730, | ||||
|       "content": "foo" | ||||
|     } | ||||
|     "###); | ||||
| } | ||||
|  | ||||
| #[actix_rt::test] | ||||
| async fn replace_document() { | ||||
|     let server = Server::new().await; | ||||
|   | ||||
| @@ -166,7 +166,7 @@ pub fn validate_document_id_value(document_id: Value) -> StdResult<String, UserE | ||||
|             Some(s) => Ok(s.to_string()), | ||||
|             None => Err(UserError::InvalidDocumentId { document_id: Value::String(string) }), | ||||
|         }, | ||||
|         Value::Number(number) if number.is_i64() => Ok(number.to_string()), | ||||
|         Value::Number(number) if !number.is_f64() => Ok(number.to_string()), | ||||
|         content => Err(UserError::InvalidDocumentId { document_id: content }), | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user