MCPcopy Create free account
hub / github.com/MariaDB/server / check_window_names

Method check_window_names

sql/sql_window.cc:27–80  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

25
26
27bool
28Window_spec::check_window_names(List_iterator_fast<Window_spec> &it)
29{
30 if (window_names_are_checked)
31 return false;
32 const Lex_ident_window name= this->name();
33 const Lex_ident_window ref_name= window_reference();
34 it.rewind();
35 Window_spec *win_spec;
36 while((win_spec= it++) && win_spec != this)
37 {
38 const Lex_ident_window win_spec_name= win_spec->name();
39 if (!win_spec_name.str)
40 break;
41 if (name.str && name.streq(win_spec_name))
42 {
43 my_error(ER_DUP_WINDOW_NAME, MYF(0), name.str);
44 return true;
45 }
46 if (ref_name.str && win_spec_name.streq(ref_name))
47 {
48 if (partition_list->elements)
49 {
50 my_error(ER_PARTITION_LIST_IN_REFERENCING_WINDOW_SPEC, MYF(0),
51 ref_name.str);
52 return true;
53 }
54 if (win_spec->order_list->elements && order_list->elements)
55 {
56 my_error(ER_ORDER_LIST_IN_REFERENCING_WINDOW_SPEC, MYF(0),
57 ref_name.str);
58 return true;
59 }
60 if (win_spec->window_frame)
61 {
62 my_error(ER_WINDOW_FRAME_IN_REFERENCED_WINDOW_SPEC, MYF(0),
63 ref_name.str);
64 return true;
65 }
66 referenced_win_spec= win_spec;
67 if (partition_list->elements == 0)
68 partition_list= win_spec->partition_list;
69 if (order_list->elements == 0)
70 order_list= win_spec->order_list;
71 }
72 }
73 if (ref_name.str && !referenced_win_spec)
74 {
75 my_error(ER_WRONG_WINDOW_SPEC_NAME, MYF(0), ref_name.str);
76 return true;
77 }
78 window_names_are_checked= true;
79 return false;
80}
81
82void
83Window_spec::print(String *str, enum_query_type query_type)

Callers 1

setup_windowsFunction · 0.80

Calls 5

nameMethod · 0.95
my_errorFunction · 0.85
rewindMethod · 0.45
nameMethod · 0.45
streqMethod · 0.45

Tested by

no test coverage detected