@@ -39,26 +39,33 @@ def get_userfacing_options(self) -> dict[str, str]:
3939
4040 def validate_user_options (self , options : dict [str , str ]) -> None :
4141 allowed = set (self .get_userfacing_options ())
42- illegal = set (options ) - allowed
42+ # Create lowercase version of allowed options for case-insensitive comparison
43+ allowed_lower = {key .lower () for key in allowed }
44+
45+ # Check for illegal options (case-insensitive)
46+ illegal = [key for key in options if key .lower () not in allowed_lower ]
47+
4348 if illegal :
4449 raise ValueError (
4550 f"Unsupported or protected options: { sorted (illegal )} . "
4651 f"Allowed user options: { sorted (allowed )} "
4752 )
4853
49- def get_modified_options (self , options : dict [str , str ]) -> dict [str , str ]:
50- self .validate_user_options (options )
51- defaults = self .get_userfacing_options ()
52- return {k : v for k , v in options .items () if k in defaults and v != defaults [k ]}
53-
5454 def get_merged_options (
5555 self , options : dict [str , str ], table_name : str , is_placeholder : bool = False
5656 ) -> dict [str , str ]:
5757 self .validate_user_options (options )
5858 defaults = {opt .key : opt .value for opt in self .options }
59+ # Create case-insensitive mapping
60+ defaults_lower = {key .lower (): key for key in defaults }
5961
6062 merged = defaults .copy ()
61- merged .update ({k : v for k , v in options .items () if k in defaults })
63+ # Merge user options using case-insensitive matching
64+ for user_key , user_value in options .items ():
65+ lower_key = user_key .lower ()
66+ if lower_key in defaults_lower :
67+ canonical_key = defaults_lower [lower_key ]
68+ merged [canonical_key ] = user_value
6269
6370 # Do not specify schema evolution mode in placeholder
6471 if is_placeholder :
0 commit comments