Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Projets publics
Ravada-Mirror
Commits
90592e58
Commit
90592e58
authored
Apr 19, 2021
by
frankiejol
Browse files
refactor(install): create and remove indexes
parent
b29552d8
Changes
1
Hide whitespace changes
Inline
Side-by-side
lib/Ravada.pm
View file @
90592e58
...
@@ -1074,6 +1074,10 @@ sub _add_indexes_generic($self) {
...
@@ -1074,6 +1074,10 @@ sub _add_indexes_generic($self) {
domains
=>
[
domains
=>
[
"
index(date_changed)
"
"
index(date_changed)
"
,"
index(id_base):id_base_index
"
,"
index(id_base):id_base_index
"
,"
unique(id_base,name):id_base
"
,"
unique(name)
"
,"
key(is_base)
"
,"
key(is_volatile)
"
]
]
,
domain_displays
=>
[
,
domain_displays
=>
[
"
unique(id_domain,n_order)
"
"
unique(id_domain,n_order)
"
...
@@ -1088,6 +1092,7 @@ sub _add_indexes_generic($self) {
...
@@ -1088,6 +1092,7 @@ sub _add_indexes_generic($self) {
]
]
,
grants_user
=>
[
,
grants_user
=>
[
"
index(id_user,id_grant)
"
"
index(id_user,id_grant)
"
,'
unique(id_grant,id_user)
'
,"
index(id_user)
"
,"
index(id_user)
"
]
]
,
iptables
=>
[
,
iptables
=>
[
...
@@ -1095,7 +1100,10 @@ sub _add_indexes_generic($self) {
...
@@ -1095,7 +1100,10 @@ sub _add_indexes_generic($self) {
]
]
,
messages
=>
[
,
messages
=>
[
"
index(id_request,date_send)
"
"
index(id_request,date_send)
"
,"
index(id_user)
"
,"
index(date_changed)
"
,"
index(date_changed)
"
,"
KEY(id_request,date_send)
"
]
]
,
settings
=>
[
,
settings
=>
[
"
index(id_parent,name)
"
"
index(id_parent,name)
"
...
@@ -1115,34 +1123,68 @@ sub _add_indexes_generic($self) {
...
@@ -1115,34 +1123,68 @@ sub _add_indexes_generic($self) {
,
vms
=>
[
,
vms
=>
[
"
unique(hostname, vm_type)
"
"
unique(hostname, vm_type)
"
,"
UNIQUE (name)
"
]
]
);
);
my
$if_not_exists
=
'';
my
$if_not_exists
=
'';
$if_not_exists
=
'
IF NOT EXISTS
'
if
$CONNECTOR
->
dbh
->
{
Driver
}{
Name
}
=~
/sqlite|mariadb/i
;
$if_not_exists
=
'
IF NOT EXISTS
'
if
$CONNECTOR
->
dbh
->
{
Driver
}{
Name
}
=~
/sqlite|mariadb/i
;
for
my
$table
(
keys
%index
)
{
for
my
$table
(
sort
keys
%index
)
{
my
$known
;
my
$known
;
$known
=
$self
->
_get_indexes
(
$table
)
if
!
defined
$known
;
my
$checked_index
=
{};
for
my
$change
(
@
{
$index
{
$table
}}
)
{
for
my
$change
(
@
{
$index
{
$table
}}
)
{
my
(
$type
,
$fields
)
=
$change
=~
/(\w+)\((.*)\)/
;
my
(
$type
,
$fields
)
=
$change
=~
/(\w+)\
s*\
((.*)\)/
;
my
(
$name
)
=
$change
=~
/:(.*)/
;
my
(
$name
)
=
$change
=~
/:(.*)/
;
$name
=
$fields
if
!
$name
;
$name
=
$fields
if
!
$name
;
$name
=~
s/,/_/g
;
$name
=~
s/,/_/g
;
$name
=~
s/ //g
;
$name
=~
s/ //g
;
$checked_index
->
{
$name
}
++
;
$known
=
$self
->
_get_indexes
(
$table
)
if
!
defined
$known
;
$known
=
$self
->
_get_indexes
(
$table
)
if
!
defined
$known
;
next
if
$known
->
{
$name
};
next
if
$self
->
_index_already_created
(
$fields
,
$known
->
{
$name
}
)
;
$type
.=
"
INDEX
"
if
$type
=~
/^unique/i
;
$type
.=
"
INDEX
"
if
$type
=~
/^unique/i
;
$type
=
"
INDEX
"
if
$type
=~
/^KEY$/i
;
my
$sql
=
"
CREATE
$type
$if_not_exists
$name
on
$table
(
$fields
)
";
my
$sql
=
"
CREATE
$type
$if_not_exists
$name
on
$table
(
$fields
)
";
warn
"
INFO: Adding index to
$table
:
$name
"
warn
"
INFO: Adding index to
$table
:
$name
"
if
!
$FIRST_TIME_RUN
&&
$
0
!~
/\.t$/
;
if
!
$FIRST_TIME_RUN
&&
$
0
!~
/\.t$/
;
$self
->
_clean_index_conflicts
(
$table
,
$name
);
print
"
+
"
if
$FIRST_TIME_RUN
;
print
"
+
"
if
$FIRST_TIME_RUN
;
my
$sth
=
$CONNECTOR
->
dbh
->
prepare
(
$sql
);
my
$sth
=
$CONNECTOR
->
dbh
->
prepare
(
$sql
);
$sth
->
execute
();
$sth
->
execute
();
}
}
for
my
$name
(
sort
keys
%$known
)
{
next
if
$name
eq
'
PRIMARY
'
||
$checked_index
->
{
$name
};
warn
"
INFO: Removing index from
$table
$name
\n
";
my
$sql
=
"
alter table
$table
drop index
$name
";
$CONNECTOR
->
dbh
->
do
(
$sql
);
}
}
}
sub
_index_already_created
($self, $fields, $new) {
return
if
!
$new
;
$fields
=~
s/ //g
;
my
$fields_new
=
join
("
,
",
@$new
);
return
1
if
$fields
eq
$fields_new
;
return
0
;
}
sub
_clean_index_conflicts
($self, $table, $name) {
my
$sth_clean
;
if
(
$table
eq
'
domain_displays
'
&&
$name
eq
'
port
')
{
$sth_clean
=
$CONNECTOR
->
dbh
->
prepare
(
"
UPDATE domain_displays set port=NULL
"
);
}
}
$sth_clean
->
execute
if
$sth_clean
;
}
}
sub
_get_indexes
($self,$table) {
sub
_get_indexes
($self,$table) {
return
{}
if
$CONNECTOR
->
dbh
->
{
Driver
}{
Name
}
!~
/mysql/
;
return
{}
if
$CONNECTOR
->
dbh
->
{
Driver
}{
Name
}
!~
/mysql/
;
...
@@ -1150,8 +1192,11 @@ sub _get_indexes($self,$table) {
...
@@ -1150,8 +1192,11 @@ sub _get_indexes($self,$table) {
my
$sth
=
$CONNECTOR
->
dbh
->
prepare
("
show index from
$table
");
my
$sth
=
$CONNECTOR
->
dbh
->
prepare
("
show index from
$table
");
$sth
->
execute
;
$sth
->
execute
;
my
%index
;
my
%index
;
while
(
my
$row
=
$sth
->
fetchrow_hashref
)
{
while
(
my
@row
=
$sth
->
fetchrow
)
{
$index
{
$row
->
{
Key_name
}}
->
{
$row
->
{
Column_name
}}
++
;
my
$name
=
$row
[
2
];
my
$seq
=
$row
[
3
];
my
$column
=
$row
[
4
];
$index
{
$name
}
->
[
$seq
-
1
]
=
$column
;
}
}
return
\
%index
;
return
\
%index
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment