I don't have 2 hours, sorry, but maybe something wrong with Range indexing for decimal values (i.e. in your Where (x=> x.M ...) )? Cast or something? As far as I remember Db create 2 indexes, maybe it use wrong one and you get not correct result? ;-)
You set up your test using float and decimal. I remember from somewhere (maybe the first time I've actually put an MS certification into use) that float is stored as binary and should not be used in situations where you need to verify equality on large numbers.
Either decimal will accurately represent 1.33 and so your 1.331 comparison will fail, or you need to use a tolerance value for comparison, like absolute value of val - 1.33 > 0.01?
Hmm, there's nothing wrong with the comparison & data types, unless there's something odd with the unit test framework you're using. (I've verified the behaviour of the data type comparisons with NUnit.)
I don't know much about RavenDB but my guess would be that you haven't told it to retrieve the data, there is no Select or SelectFields, so would the Linq2Object .Where() condition have anything to search through?
@Alwin, @Thomas Freudenberg etc - I think its not necessary to call session.SaveChanges() due to usage of WaitForNonStaleResults, or?
My another attempt: maybe you forgot to do initialization (i.e. say documentStore.Initialize();) in NewDocumentStore() method that you forgot to show here as well :D
But still I feel that something wrong with Where(...) and decimal values like from my previous comment :)
Common, Ayende, let us know issue that you spend 2 hours :)
I assume that if you spend 2 hours debugging it, it's simply not so easy to found such bug in just few minutes that most of us have :D
ha ha ha :D Nice that such things happens not only with me :D
P.S. I was think that WaitForNonStaleResults should actually do promote changes in context into database for given index... i.e. it's little bit confusing to wait for index to updated in storage with fact that you still have some documents in memory that not yet added to index......
Comment preview
Comments have been closed on this topic.
Markdown formatting
ESC to close
Markdown turns plain text formatting into fancy HTML formatting.
Phrase Emphasis
*italic* **bold**
_italic_ __bold__
Links
Inline:
An [example](http://url.com/ "Title")
Reference-style labels (titles are optional):
An [example][id]. Then, anywhere
else in the doc, define the link:
[id]: http://example.com/ "Title"
> Email-style angle brackets
> are used for blockquotes.
> > And, they can be nested.
> #### Headers in blockquotes
>
> * You can quote a list.
> * Etc.
Horizontal Rules
Three or more dashes or asterisks:
---
* * *
- - - -
Manual Line Breaks
End a line with two or more spaces:
Roses are red,
Violets are blue.
Fenced Code Blocks
Code blocks delimited by 3 or more backticks or tildas:
```
This is a preformatted
code block
```
Header IDs
Set the id of headings with {#<id>} at end of heading line:
## My Heading {#myheading}
Tables
Fruit |Color
---------|----------
Apples |Red
Pears |Green
Bananas |Yellow
Definition Lists
Term 1
: Definition 1
Term 2
: Definition 2
Footnotes
Body text with a footnote [^1]
[^1]: Footnote text here
Abbreviations
MDD <- will have title
*[MDD]: MarkdownDeep
FUTURE POSTS
RavenDB 7.1: Next-Gen Pagers - 5 days from now
RavenDB 7.1: Write modes - 7 days from now
RavenDB 7.1: Reclaiming disk space - 9 days from now
RavenDB 7.1: Shared Journals - 12 days from now
There are posts all the way to Feb 17, 2025
RECENT SERIES
Challenge
(77): 03 Feb 2025 - Giving file system developer ulcer
Answer
(13): 22 Jan 2025 - What does this code do?
Comments
This is my suspicion: stackoverflow.com/.../nunit-assert-equals-what-...
Reflector tells me that you are not using nunit but xunit and that xunit does not do a reference comparison in Assert.Equals which I hat expected.
Second guess: you have to call SaveChanges.
< should be <= ?
Not calling session.SaveChanges() ?
My guess: You already have a value in the DB with a value about 1.331m?
@configurator: the first line in the tests creates a fresh db
I don't have 2 hours, sorry, but maybe something wrong with Range indexing for decimal values (i.e. in your Where (x=> x.M ...) )? Cast or something? As far as I remember Db create 2 indexes, maybe it use wrong one and you get not correct result? ;-)
You set up your test using float and decimal. I remember from somewhere (maybe the first time I've actually put an MS certification into use) that float is stored as binary and should not be used in situations where you need to verify equality on large numbers.
Needs more round trips to the server
Either decimal will accurately represent 1.33 and so your 1.331 comparison will fail, or you need to use a tolerance value for comparison, like absolute value of val - 1.33 > 0.01?
Hmm, there's nothing wrong with the comparison & data types, unless there's something odd with the unit test framework you're using. (I've verified the behaviour of the data type comparisons with NUnit.)
I don't know much about RavenDB but my guess would be that you haven't told it to retrieve the data, there is no Select or SelectFields, so would the Linq2Object .Where() condition have anything to search through?
The session.Store() does nothing until the session ends. So session.Query() will never find anything because it is not stored yet.
Wrapping session.Store() in its own session, and 2x session.Quer() in another will pass the test.
Or does calling session.Query() flush first?
@Alwin, @Thomas Freudenberg etc - I think its not necessary to call session.SaveChanges() due to usage of WaitForNonStaleResults, or?
My another attempt: maybe you forgot to do initialization (i.e. say documentStore.Initialize();) in NewDocumentStore() method that you forgot to show here as well :D
But still I feel that something wrong with Where(...) and decimal values like from my previous comment :)
Common, Ayende, let us know issue that you spend 2 hours :)
I assume that if you spend 2 hours debugging it, it's simply not so easy to found such bug in just few minutes that most of us have :D
evereq,
Actually, the bug is that there is no SaveChanges, so stuff doesn't get to the server, and doesn't get saved.
The reason it took me so long to figure it out was that I simply didn't notice that SaveChanges was missing
ha ha ha :D Nice that such things happens not only with me :D
P.S. I was think that WaitForNonStaleResults should actually do promote changes in context into database for given index... i.e. it's little bit confusing to wait for index to updated in storage with fact that you still have some documents in memory that not yet added to index......
Comment preview