📺 Develpreneur YouTube Episode

Video + transcript

SQL Sync Part 14

2022-09-29 •Youtube

Detailed Notes

Focus for this episode: This episode starts to look at stored procedures and adding those.

This tutorial walks through the creation of a database synchronization tool in Python. It continues our Python and SQL Tutorials with a useful application that provides a deeper look at SQL structures and commands.

Repository For Code: git clone [email protected]:rbroadhead/dbsync.git

Transcript Text
thank you
[Music]
well hello and welcome back we are
continuing where we're looking at our
uh SQL and basically sort of our SQL
tutorials and our PA or I'm sorry our
python tutorials and we're building our
database synchronization python script
to focus on
Pardon Me Oh kick out of that
to focus on MySQL this episode I was
going to continue looking at indexes
indices depending on how you want to
call it but I want to start into
stored procedures
and it's going to be there's a little
bit of some there's a few challenges
there as well but I want to get some of
the basics
so we're going to start with missing
procs
and
[Music]
we'll do and we'll do missing procs.pin
we'll do it there we should probably
we'll do that
um that's a good question do I want to
do this as
fixing it or not
um
I think what I want to do oh because
that was missing part uh Missing table
because that's not what I want I don't
want missing tables I want to do more
like missing columns okay
so let's take that because what we're
going to end up doing is
same sort of thing we did with columns
is we're going to pardon me while I play
around with this for a second and catch
up
so we're going to call this missing
procs and whoops
and what we're going to do here is we're
going to go through each of these oh and
this is tables list so oops it's not
going to be like missing procedures it's
going to be like missing
indexes
I should probably know what I'm doing
first okay so let's do it like missing
indexes
there we go
because what we're going to do is we're
going to generate a list of one from one
and we're going to generate a list from
the others so if this could be missing
procedures
uh let's go ahead and call it we'll do
the whole word
uh we don't need a tables list
so we don't need that
um
so what we're going to do whoops
well
I'm just going to start coding because I
need to start coding
instead I'm going to keep I'm going to
spend all day on this so my procedure
query prox query now this one
uh as a reminder if you do show
procedure status
then that's going to get you all of your
store procedures
now what we can do is we can actually
string this we can simplify this down
and we're going to do a we're going to
start playing around in the information
schema and it's a little better than
just seeing what procedures are out
there because we're going to actually
grab some detailed information so for
these we're going to come into our
missing procedures
and our
query
it's going to look something like this
and equals and we're going to do our two
uh C
I'm going to do this
and so we're going to do is we're going
to get for our table
oop it's not our table this is for our
database
and so in this case what we're going to
have to do is we're going to have to
actually send it a database name so it's
going to be a little bit different
from what we've done in the past we
could do it based off the database
that's there and
it's just going to be better how do we
want to do it yeah we probably want to
do
let's see this will be Source name
let's do Source name
and uh destination name
it'll probably be the same but that's
okay so let's actually
go do our missing procedures back down
here we'll load this thing up
and missing indexes there we go
um
yeah we probably want to wait till the
uh we'll probably do that beforehand so
let's do
miss seeing procedures
and we definitely don't want to sync
rows on that so let's not worry about it
so we're gonna do missing procedures and
this one's going to be
our source Center database and in both
of these we're going to call it tutorial
is the database
because we're getting up with if we
don't do that
we're going to have every store
procedure in the not like that database
but the entire Surfer base of the
database server so it's going to cross
databases it's going to get into the the
MySQL system type stuff and things that
we don't really want
so we're gonna we're gonna have to trim
this one down
and so it's going to be we're going to
actually have two of these so I guess
we'll call it
because it could be different databases
they usually aren't but that's okay
um
and we're going to do the destination
prox query
and this is going to be the source name
and this is going to be
the destination name
and then we're going to execute those
two
uh let's see so we're gonna do
uh it's gonna be Source Products query
and this is going to be destination
procs query
and then we want to
let's do this we're going to call this
Source procedures
destination procedures
and we are going to have to now from
here we're actually pulling the name so
we just all we have to do is worry about
names in this case we already have the
name so we can actually do
uh let's see
and let's start with this let's just
start with let's see what exists in one
and does not exist in the other because
that's going to be
probably the better way to go so first
let's see so let's go
uh for
proc let's do proc name
and source procs
so we're gonna go through each of those
and then we're gonna see
if the name is not in
um
then we want to see if the name is not
in the destination procs
oh so what we want to do yeah this is
what we want to do is so we're going to
say Source names
and for proc Damon there because we want
to do this quickly so we're going to do
Source names dot append
and then this is just going to be the
proc name
and then we're going to do uh
uh oh okay so that's already good so
then we're going to walk through the
destinations
and this will be we'll call it
destination name
and destination procs
and
oops we actually want to go the other
way
so we're going to find everything in
destination
oops
so it's gonna be destination names
destination names
and then here we go so for Source name
and source
it's got our source procs okay Source
name in there if
the if Source name
is not in
destination names
then we're just going to do it right now
we're just going to say print
whoops boy that is totally I don't know
why that type of helped did not help
very much so I need to create procedure
and then it's gonna be Source name
I was just going to do each of those
walk through that
and we don't need missing procedures
because we're not going to use that
right now
we don't need that table at the end and
let's do that let's go ahead and run
through this
um oops don't do that and I'm going to
quit afterwards
so let's work on that let's see where
we're at so if we do Python 3 what does
this mean
oh we've got an endowed oh because we
forgot to do a plus so let's go all the
way back here
I'm going to do plus
wow okay oops that's oh here we go so
here's what we want start missing
procedures and I've got another typo
whoops right there it had a little red
that even told me that let's see what
else we got
uh that's destination names
uh let's see
is there another little running oh here
we go return missing indexes uh he
doesn't need to return anything
and oh I still get a red up there oh
that's because it doesn't recognize this
but that should be okay and it is not
okay so it's a tuple
so it's uh
missing procedures
power went past it didn't I
yes I did
and uh
so Source name
um
so let's do this let's print proc name
let's see what that looks like
and we're gonna see here
um
oh interesting
uh destination procs
that one destination procs query
let's do
let's print that because maybe we're not
building that right
okay so now we're going to take that
and let's just go jump whoops
and my SQL use tutorial
let's see
does it give us what we need it does
okay so it's giving us our names
so
what is it not let me get back in over
here let me run that again
and we start that so we get our query we
get our SQL which is here
we do a fetch all
oh it's not destined oh yeah that's
right
destination names is that destination
procs is that
but it's not
so let's print destination products
I don't think it's coming through right
print destrox
uh curse your destination he's gonna ask
to he is going to do that
uh it's right so let's see
it's empty so
oh that's destination okay which is
right so yeah so destination should be
empty
so now let's do here I'm sorry
of course because I haven't pulled any
over yet
so now if I do it all right so it's
count rows which is going to be a
procedure so for some reason
um
it is a tuple in each of those
let's do it like this let's see if
that's right
yep so what we want to do I don't know
why it's always giving us a tuple but
we're going to do Source name
zero that should be proc name zero
and uh
there we go and Source name zero
all right let's do that
there we go
so we've gotten that far
so now what we do is we have a list of
procedures we need to create
so what we're going to need is we need
the source for each procedure
and then we're going to need the
signature because if you remember you
have to do something like create
procedure proc name
as and then there's some sort of like
you know there's probably some begin and
an end and then you have to execute all
of that
so we need to get our source
now let's take a look at that and with
that we can get it from routine
definition
so if we go look for each of those
and that'll probably get us through this
one let's see so instead of this
what we're going to need to do oh shoot
it pretty printed it on me
uh let's do it this way
um there
let's move that comment up here
and what we're going to need to do for
each of those is we're going to do uh
let's do Source query
equals
and then for each of these we're going
to do it where
and this is going to be from the source
so we're going to need
this is again going to be a source name
and whoops in our table
is going to be
this guy here which is going to be our
source name
actually it's Source name zero
and then
we need to do
thank you uh
we can't let's create a new cursor
and it's going to be when you pull it
from the source
so we're going to do
um
Pro let's do this the proc cursor
equals source and then we're going to do
procursor
dot execute
and that's going to be based off of the
source query we could have just
simplified that a little bit we're going
to go with that
and then we're going to do a fetchall
oh that's probably what it is it's a
fetchup we could probably do fetch one
but we'll do fetchall
um so let's do Source results
equals that and then we're going to just
print
Source results zero
and let's see how that looks
uh scanning uh we missed one oh
we didn't close that out
there we go let's try that again
only concatenate a string
oh it's not Source name this oh that is
Source name oops
um
oh we change that so let's call it
Source product name
and then that's going to be Source proc
name
that Source name that Source proc name
see that's why we have to watch out
sometimes you get name collisions you
don't even notice it until it's too late
uh let's see that should be everybody's
now let's try it
and so now okay so now we're seeing
stuff so we're going to see like create
procedure while loop and then it has
this string and so that is
um
I wonder if that's oh because that's row
zero zero
so let's try that
and there we go
so if we look at uh
let's see here we go like procedure
while loop this is a source for it
if we look to procedure
temp table
then we get this thing
now the thing we're going to run into
is let's take a look if we look at these
uh let's see simple execution
simple continue let me see if I can get
because I think what we're going to run
into is we're going to have some that
don't have uh variables that we're going
to have to look at see if it's going to
show me uh it's not going to show me the
let's see can I reconnect
and let's see
um
let's look at uh
multiplier I think multiplier will give
us one so if we go look at multiplier
here
what we're going to see is multiplier
and this is one where we gave it
parameters because there's an X of Y and
a z parameter but
if you look at the source we don't have
that and so when we come back next time
that is where we're going to start
because we're going to go figure out
what are our parameters because right
now with multiplier and actually with
like while loop this is what it would
look like is that we could do
uh if we come down here it would be
something like create procedure
procedure
uh while loop
and I think it's as actually
I think I just do it this way
let's see if that works
I don't think that's quite it let's see
let's go create a procedure real quick
and see what it looks like so if I do
create procedure
um
actually let's do it on a local
and if I come into here
store procedures I want to create a
procedure called delete me
execute
very simple procedure
ah it's not going to show it to me darn
it so we're gonna have to go we'll go
take a look at this stuff later let me
delete delete me
and we'll start taking a look at that
next time around because we're going to
have we're going to go in and create it
and it actually is something along these
lines but we're going to have a little
bit of work we're going to do and like I
said that'll be next time so
I think I've given you enough to think
about right now go ahead and go out
there and have yourself a great day a
great week and we will talk to you
next time
[Music]
foreign
Transcript Segments
10.7

thank you

18.89

[Music]

27.18

well hello and welcome back we are

29.4

continuing where we're looking at our

32.16

uh SQL and basically sort of our SQL

35.82

tutorials and our PA or I'm sorry our

38.64

python tutorials and we're building our

41.34

database synchronization python script

43.98

to focus on

46.26

Pardon Me Oh kick out of that

49.079

to focus on MySQL this episode I was

52.32

going to continue looking at indexes

54.059

indices depending on how you want to

55.8

call it but I want to start into

59.48

stored procedures

62.46

and it's going to be there's a little

65.04

bit of some there's a few challenges

66.42

there as well but I want to get some of

68.46

the basics

69.6

so we're going to start with missing

72.6

procs

76.32

and

77.34

[Music]

82.439

we'll do and we'll do missing procs.pin

88.32

we'll do it there we should probably

89.759

we'll do that

91.5

um that's a good question do I want to

93.479

do this as

96.6

fixing it or not

99.96

um

102

I think what I want to do oh because

103.86

that was missing part uh Missing table

106.259

because that's not what I want I don't

107.34

want missing tables I want to do more

111.06

like missing columns okay

114.659

so let's take that because what we're

117.06

going to end up doing is

119.34

same sort of thing we did with columns

121.32

is we're going to pardon me while I play

124.2

around with this for a second and catch

126.18

up

127.56

so we're going to call this missing

128.7

procs and whoops

132.72

and what we're going to do here is we're

135.66

going to go through each of these oh and

137.64

this is tables list so oops it's not

140.16

going to be like missing procedures it's

141.78

going to be like missing

144.48

indexes

147.18

I should probably know what I'm doing

148.56

first okay so let's do it like missing

150.9

indexes

153.3

there we go

156

because what we're going to do is we're

157.319

going to generate a list of one from one

159.9

and we're going to generate a list from

161.28

the others so if this could be missing

162.959

procedures

165.66

uh let's go ahead and call it we'll do

168.36

the whole word

171.78

uh we don't need a tables list

177.2

so we don't need that

180.3

um

181.019

so what we're going to do whoops

184.86

well

186

I'm just going to start coding because I

188.159

need to start coding

189.84

instead I'm going to keep I'm going to

191.76

spend all day on this so my procedure

194.7

query prox query now this one

198.98

uh as a reminder if you do show

201.78

procedure status

203.819

then that's going to get you all of your

207.299

store procedures

208.68

now what we can do is we can actually

210.959

string this we can simplify this down

213.36

and we're going to do a we're going to

215.28

start playing around in the information

216.299

schema and it's a little better than

219.42

just seeing what procedures are out

220.68

there because we're going to actually

221.78

grab some detailed information so for

225

these we're going to come into our

226.86

missing procedures

228.86

and our

230.76

query

232.92

it's going to look something like this

239.18

and equals and we're going to do our two

243.12

uh C

248.099

I'm going to do this

251.459

and so we're going to do is we're going

252.84

to get for our table

257.94

oop it's not our table this is for our

259.979

database

263.04

and so in this case what we're going to

264.479

have to do is we're going to have to

265.38

actually send it a database name so it's

268.259

going to be a little bit different

270.24

from what we've done in the past we

273.06

could do it based off the database

274.979

that's there and

279.72

it's just going to be better how do we

281.1

want to do it yeah we probably want to

282.24

do

283.38

let's see this will be Source name

286.139

let's do Source name

288.56

and uh destination name

293.58

it'll probably be the same but that's

295.32

okay so let's actually

296.94

go do our missing procedures back down

299.28

here we'll load this thing up

302.46

and missing indexes there we go

306.18

um

307.68

yeah we probably want to wait till the

309.12

uh we'll probably do that beforehand so

311.1

let's do

315.12

miss seeing procedures

319.44

and we definitely don't want to sync

321.3

rows on that so let's not worry about it

323.46

so we're gonna do missing procedures and

326.039

this one's going to be

330.96

our source Center database and in both

334.02

of these we're going to call it tutorial

338.28

is the database

341.88

because we're getting up with if we

343.62

don't do that

345.06

we're going to have every store

346.86

procedure in the not like that database

349.38

but the entire Surfer base of the

351.78

database server so it's going to cross

353.82

databases it's going to get into the the

357.36

MySQL system type stuff and things that

361.56

we don't really want

363

so we're gonna we're gonna have to trim

365.639

this one down

368.639

and so it's going to be we're going to

371.039

actually have two of these so I guess

372.36

we'll call it

373.38

because it could be different databases

375.3

they usually aren't but that's okay

378

um

379.02

and we're going to do the destination

380.34

prox query

382.259

and this is going to be the source name

385.979

and this is going to be

388.199

the destination name

392.1

and then we're going to execute those

394.319

two

396.12

uh let's see so we're gonna do

401.58

uh it's gonna be Source Products query

406.259

and this is going to be destination

409.02

procs query

412.5

and then we want to

416.22

let's do this we're going to call this

417.9

Source procedures

419.759

destination procedures

429.259

and we are going to have to now from

432.72

here we're actually pulling the name so

435.36

we just all we have to do is worry about

436.979

names in this case we already have the

438.599

name so we can actually do

441.18

uh let's see

444.36

and let's start with this let's just

446.28

start with let's see what exists in one

448.259

and does not exist in the other because

450.06

that's going to be

453.479

probably the better way to go so first

455.4

let's see so let's go

457.919

uh for

460.8

proc let's do proc name

464.039

and source procs

466.379

so we're gonna go through each of those

467.84

and then we're gonna see

471.66

if the name is not in

475.08

um

478.819

then we want to see if the name is not

480.96

in the destination procs

487.199

oh so what we want to do yeah this is

489.419

what we want to do is so we're going to

491.099

say Source names

495.66

and for proc Damon there because we want

498

to do this quickly so we're going to do

499.379

Source names dot append

502.08

and then this is just going to be the

503.819

proc name

507.12

and then we're going to do uh

510.96

uh oh okay so that's already good so

513.36

then we're going to walk through the

514.68

destinations

516.8

and this will be we'll call it

518.88

destination name

521.76

and destination procs

525.72

and

527.64

oops we actually want to go the other

529.26

way

530.22

so we're going to find everything in

532.38

destination

534.66

oops

537.899

so it's gonna be destination names

539.7

destination names

543.72

and then here we go so for Source name

547.08

and source

551.58

it's got our source procs okay Source

553.44

name in there if

557.76

the if Source name

560.76

is not in

563.04

destination names

566.88

then we're just going to do it right now

568.2

we're just going to say print

570.959

whoops boy that is totally I don't know

573.959

why that type of helped did not help

576.72

very much so I need to create procedure

584.04

and then it's gonna be Source name

587.22

I was just going to do each of those

589.019

walk through that

590.7

and we don't need missing procedures

593.04

because we're not going to use that

594.54

right now

596.399

we don't need that table at the end and

602.82

let's do that let's go ahead and run

604.68

through this

606.12

um oops don't do that and I'm going to

608.7

quit afterwards

612.899

so let's work on that let's see where

614.94

we're at so if we do Python 3 what does

617.88

this mean

619.5

oh we've got an endowed oh because we

621.54

forgot to do a plus so let's go all the

623.579

way back here

627.72

I'm going to do plus

631.5

wow okay oops that's oh here we go so

634.8

here's what we want start missing

635.88

procedures and I've got another typo

638.519

whoops right there it had a little red

641.16

that even told me that let's see what

642.66

else we got

644.279

uh that's destination names

648.2

uh let's see

651.06

is there another little running oh here

652.86

we go return missing indexes uh he

655.44

doesn't need to return anything

658.98

and oh I still get a red up there oh

662.1

that's because it doesn't recognize this

663.36

but that should be okay and it is not

666.6

okay so it's a tuple

669

so it's uh

671.7

missing procedures

675.36

power went past it didn't I

677.64

yes I did

679.16

and uh

683.7

so Source name

686.399

um

687.24

so let's do this let's print proc name

692.94

let's see what that looks like

697.14

and we're gonna see here

707.82

um

709.079

oh interesting

710.94

uh destination procs

717.36

that one destination procs query

720.899

let's do

726.12

let's print that because maybe we're not

728.399

building that right

737.04

okay so now we're going to take that

745.38

and let's just go jump whoops

751.5

and my SQL use tutorial

756

let's see

757.68

does it give us what we need it does

759.3

okay so it's giving us our names

762.42

so

764.94

what is it not let me get back in over

768.3

here let me run that again

773.94

and we start that so we get our query we

776.639

get our SQL which is here

781.86

we do a fetch all

784.62

oh it's not destined oh yeah that's

786.54

right

787.38

destination names is that destination

790.26

procs is that

794.04

but it's not

799.68

so let's print destination products

803.94

I don't think it's coming through right

805.56

print destrox

811.32

uh curse your destination he's gonna ask

813.779

to he is going to do that

816.42

uh it's right so let's see

821.459

it's empty so

827.399

oh that's destination okay which is

829.56

right so yeah so destination should be

831.66

empty

833.82

so now let's do here I'm sorry

836.339

of course because I haven't pulled any

838.26

over yet

840.6

so now if I do it all right so it's

843.12

count rows which is going to be a

845.579

procedure so for some reason

849.36

um

850.92

it is a tuple in each of those

857.399

let's do it like this let's see if

859.199

that's right

861

yep so what we want to do I don't know

863.519

why it's always giving us a tuple but

864.899

we're going to do Source name

866.76

zero that should be proc name zero

872.36

and uh

875.1

there we go and Source name zero

879.48

all right let's do that

881.639

there we go

882.959

so we've gotten that far

885.24

so now what we do is we have a list of

887.16

procedures we need to create

889.44

so what we're going to need is we need

891.779

the source for each procedure

894.48

and then we're going to need the

896.459

signature because if you remember you

898.32

have to do something like create

900.019

procedure proc name

903.06

as and then there's some sort of like

905.76

you know there's probably some begin and

908.459

an end and then you have to execute all

910.32

of that

911.88

so we need to get our source

913.98

now let's take a look at that and with

916.92

that we can get it from routine

919.019

definition

920.339

so if we go look for each of those

925.139

and that'll probably get us through this

926.88

one let's see so instead of this

930.24

what we're going to need to do oh shoot

932.22

it pretty printed it on me

936.6

uh let's do it this way

940.86

um there

942.36

let's move that comment up here

947.88

and what we're going to need to do for

949.74

each of those is we're going to do uh

952.68

let's do Source query

955.56

equals

958.74

and then for each of these we're going

961.139

to do it where

963.6

and this is going to be from the source

966.18

so we're going to need

970.259

this is again going to be a source name

975.68

and whoops in our table

980.519

is going to be

984.48

this guy here which is going to be our

987.06

source name

989.88

actually it's Source name zero

994.8

and then

997.199

we need to do

1001.339

thank you uh

1004.94

we can't let's create a new cursor

1007.82

and it's going to be when you pull it

1009.98

from the source

1012.38

so we're going to do

1014.72

um

1016.579

Pro let's do this the proc cursor

1020.54

equals source and then we're going to do

1023.48

procursor

1027.199

dot execute

1030.62

and that's going to be based off of the

1032.539

source query we could have just

1034.459

simplified that a little bit we're going

1035.839

to go with that

1036.98

and then we're going to do a fetchall

1039.919

oh that's probably what it is it's a

1041.839

fetchup we could probably do fetch one

1046.52

but we'll do fetchall

1048.74

um so let's do Source results

1052.28

equals that and then we're going to just

1054.799

print

1056.14

Source results zero

1059.84

and let's see how that looks

1069.02

uh scanning uh we missed one oh

1072.02

we didn't close that out

1075.2

there we go let's try that again

1080.539

only concatenate a string

1083.84

oh it's not Source name this oh that is

1086.84

Source name oops

1090.62

um

1095.96

oh we change that so let's call it

1098.179

Source product name

1102.74

and then that's going to be Source proc

1104.78

name

1107.24

that Source name that Source proc name

1110.539

see that's why we have to watch out

1112.039

sometimes you get name collisions you

1113.6

don't even notice it until it's too late

1116.539

uh let's see that should be everybody's

1118.94

now let's try it

1120.38

and so now okay so now we're seeing

1122.299

stuff so we're going to see like create

1124.22

procedure while loop and then it has

1127.419

this string and so that is

1131.84

um

1133.64

I wonder if that's oh because that's row

1135.679

zero zero

1139.34

so let's try that

1141.26

and there we go

1143.299

so if we look at uh

1146.48

let's see here we go like procedure

1149.96

while loop this is a source for it

1152.6

if we look to procedure

1157.4

temp table

1160.4

then we get this thing

1163.64

now the thing we're going to run into

1165.98

is let's take a look if we look at these

1169.88

uh let's see simple execution

1175.039

simple continue let me see if I can get

1176.78

because I think what we're going to run

1177.799

into is we're going to have some that

1179.78

don't have uh variables that we're going

1183.14

to have to look at see if it's going to

1184.64

show me uh it's not going to show me the

1186.32

let's see can I reconnect

1190.039

and let's see

1194

um

1200.299

let's look at uh

1203.72

multiplier I think multiplier will give

1205.76

us one so if we go look at multiplier

1207.74

here

1209

what we're going to see is multiplier

1213.86

and this is one where we gave it

1216.76

parameters because there's an X of Y and

1219.44

a z parameter but

1221.72

if you look at the source we don't have

1224.299

that and so when we come back next time

1227.659

that is where we're going to start

1229.94

because we're going to go figure out

1230.96

what are our parameters because right

1233

now with multiplier and actually with

1235.46

like while loop this is what it would

1237.26

look like is that we could do

1240.26

uh if we come down here it would be

1243.08

something like create procedure

1246.08

procedure

1249.679

uh while loop

1254.539

and I think it's as actually

1257.48

I think I just do it this way

1260.059

let's see if that works

1262.52

I don't think that's quite it let's see

1263.9

let's go create a procedure real quick

1265.28

and see what it looks like so if I do

1266.84

create procedure

1270.26

um

1272.36

actually let's do it on a local

1277.88

and if I come into here

1280.82

store procedures I want to create a

1283.22

procedure called delete me

1288.2

execute

1290.299

very simple procedure

1293.299

ah it's not going to show it to me darn

1295.46

it so we're gonna have to go we'll go

1297.44

take a look at this stuff later let me

1299.84

delete delete me

1303.5

and we'll start taking a look at that

1305

next time around because we're going to

1306.38

have we're going to go in and create it

1307.94

and it actually is something along these

1309.62

lines but we're going to have a little

1311

bit of work we're going to do and like I

1313.88

said that'll be next time so

1316.52

I think I've given you enough to think

1317.84

about right now go ahead and go out

1319.76

there and have yourself a great day a

1321.74

great week and we will talk to you

1324.32

next time

1327.37

[Music]

1334.039

foreign