New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix dumping expression indexes #27
Conversation
4 similar comments
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry, this is all new to me. Can you explain what your changes do? The large regexes don't make sense to me 😓
@@ -68,17 +68,36 @@ def table(table, _) | |||
env.table.trailer = m[:trailer].split("\n").map(&:strip).reject{|s| s.blank?} | |||
table_objects = m[:columns].strip.split("\n").map { |col| | |||
cs = col.strip | |||
result = nil |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
At this point I think it's worth splitting up to different functions for each arity. This seems rather convoluted...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it's all about priority of matching here.. as I have the expression index case, the generic case, and the column case.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
once thought I could do, is extract it out into a CONST array of regex/lambda and reduce this block to just iterating those.. Then it'll be a little cleaner? e.g.
COLUMN_MATCHERS = [
[%r{...}, ->(m) {}],
[%r{...}, ->(m) {}],
].freeze
COLUMN_MATCHERS.find do |r, l|
m = cs.match(r)
l.call(m) unless m.nil?
end
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah that would be awesome, thanks @urkle!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@lowjoel take a look now..
6819665
to
261efaf
Compare
SchemaDump::Table::Index.new name: m[:name], columns: index_cols, options: eval("{#{m[:options]}}") | ||
end | ||
result = nil | ||
TABLE_COLUMN_MATCHES.find do |(r, l)| |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think
result = nil
TABILE_COLUMN_MATCHES.find do |(r, l)|
m = cs.match(r)
result = ...
end
result
is equivalent to
TABLE_COLUMN_MATCHES.find do |(r, l)|
m = cs.match(r)
!m.nil? && l.call(m) # or l.call(m) unless m.nil?
end
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it's actually not.. as "find" returns the entry.. not the result of the block. (as I had that first and all tests failed)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oops. I'll accept this.
This seems non-obvious though 🤔
5ca686a
to
773c810
Compare
773c810
to
c1ec84d
Compare
Fixes scenario where the dumper fails with an expression index exists for multiple columns.