国产人妻人伦精品_欧美一区二区三区图_亚洲欧洲久久_日韩美女av在线免费观看

合肥生活安徽新聞合肥交通合肥房產(chǎn)生活服務(wù)合肥教育合肥招聘合肥旅游文化藝術(shù)合肥美食合肥地圖合肥社保合肥醫(yī)院企業(yè)服務(wù)合肥法律

COMP9315 代做、SQL 語(yǔ)言編程代寫

時(shí)間:2024-03-18  來(lái)源:合肥網(wǎng)hfw.cc  作者:hfw.cc 我要糾錯(cuò)



COMP9315 24T1    Assignment 1
Adding a PersonName Data Type to PostgreSQL    DBMS Implementation
Last updated: Saturday 9th March 10:19am
Most recent changes are shown in red ... older changes are shown in brown.
Aims
This assignment aims to give you

an understanding of how data is treated inside a DBMS
practice in adding a new base type to PostgreSQL
The goal is to implement a new data type for PostgreSQL, complete with input/output functions, comparison operators, formatting functions, and the ability to build indexes on values of the type.

Summary
Deadline
Friday 15 March, 11:59pm

Pre-requisites:
before starting this assignment, it would be useful to complete Prac Work P04

Late Penalty:
0.03 marks off the final mark for each hour late
for the first 5 days late; total mark of zero thereafter

Marks:
This assignment contributes 15 marks toward your total mark for this course.

Submission:
Webcms3 > Assignments > Ass1 Submission > Make Submission
or, on CSE machines, give cs9315 ass1 pname.c pname.source
Make sure that you read this assignment specification carefully and completely before starting work on the assignment.
Questions which indicate that you haven't done this will simply get the response "Please read the spec".

We use the following names in the discussion below

fl_CODE ... the directory where your PostgreSQL source code is located   (on vxdb, /localstorage/$USER/postgresql-15.6/)
fl_HOME ... the directory where you have installed the PostgreSQL binaries   (on vxdb, /localstorage/$USER/pgsql/bin/)
fl_DATA ... the directory where you have placed PostgreSQL's data   (on vxdb, /localstorage/$USER/pgsql/data/)
fl_LOG ... the file where you send PostgreSQL's log output   (on vxdb, /localstorage/$USER/pgsql/data/log)
Introduction
PostgreSQL has an extensibility model which, among other things, provides a well-defined process for adding new data types into a PostgreSQL server. This capability has led to the development by PostgreSQL users of a number of types (such as polygons) which have become part of the standard distribution. It also means that PostgreSQL is the database of choice in research projects which aim to push the boundaries of what kind of data a DBMS can manage.

In this assignment, we will be adding a new data type for dealing with people's names. "Hmmm", you say, "but aren't they just text strings, typically implemented as two attributes, one for family name and one for given names?". That may be true, but making names into a separate base data type allows us to explore how we store and manipulate them.

One common way of writing names (e.g. used in UNSW student systems) is

Shepherd,John Andrew
Swift, Taylor
Martin, Eric Andre
Lakshminarasimhan,Venkateswaran Chandrasekara
Marshall-Martin, Sally Angela
Featherstone,Albert Basil Ernest George Harold Randolph William
i.e.
FamilyName,GivenNames
Note: some of the examples above have a space after the comma; some don't. We give a more precise description of what text strings are valid PersonNames below.

Adding Data Types in PostgreSQL
The process for adding new base data types in PostgreSQL is described in the following sections of the PostgreSQL documentation:

38.13 User-defined Types
38.10 C-Language Functions
38.14 User-defined Operators
SQL: CREATE TYPE
SQL: CREATE OPERATOR
SQL: CREATE OPERATOR CLASS
Section 38.13 uses an example of a complex number type, which you can use as a starting point for defining your PersonName data type (see below). There are other examples of new data types under the directories:

fl_CODE/contrib/chkpass/ ... an auto-encrypted password datatype
fl_CODE/contrib/citext/ ... a case-insensitive character string datatype
fl_CODE/contrib/seg/ ... a confidence-interval datatype
These may or may not give you some useful ideas on how to implement the PersonName data type. For example, many of these data types are fixed-size, while PersonNames are variable-sized. A potentially useful example of implementing variable-sized types can be found in:

fl_CODE/src/tutorial/funcs.c ... implementation of several data types
Setting Up
You ought to start this assignment with a fresh copy of PostgreSQL, without any changes that you might have made for the Prac exercises (unless these changes are trivial). Note that you only need to configure, compile and install your PostgreSQL server once for this assignment. All subsequent compilation takes place in the src/tutorial directory, and only requires modification of the files there.

Once you have re-installed your PostgreSQL server, you should run the following commands:

$ cd fl_CODE/src/tutorial
$ cp complex.c pname.c
$ cp complex.source pname.source
Note the pname.* files will contain many references to complex; I do not want to see any remaining occurences of the word complex in the files that you eventually submit. These files simply provide a template in which you create your PersonName type.

Once you've made the pname.* files, you should also edit the Makefile in this directory and add the green text to the following lines:

MODULES = complex funcs pname
DATA_built = advanced.sql basics.sql complex.sql funcs.sql syscat.sql pname.sql
The rest of the work for this assignment involves editing only the pname.c and pname.source files. In order for the Makefile to work properly, you must use the identifier _OBJWD_ in the pname.source file to refer to the directory holding the compiled library. You should never modify directly the pname.sql file produced by the Makefile. Place all of your C code in the pname.c file; do not create any other *.c files.

Note that your submitted versions of pname.c and pname.source should not contain any references to the complex type. Make sure that the documentation (comments in program) describes the code that you wrote. Leaving the word complex anywhere in either pname.* file will result in a 1 mark penalty.

The Person Name Data Type
We wish to define a new base type PersonName to represent people's names, in the format FamilyName,GivenNames. We also aim to define a useful set of operations on values of type PersonName and wish to be able to create indexes on attributes of type PersonName. How you represent PersonName values internally, and how you implement the functions to manipulate them internally, is up to you. However, they must satisfy the requirements below.

Once implemented correctly, you should be able to use your PostgreSQL server to build the following kind of SQL applications:

create table Students (
   zid       integer primary key,
   name      PersonName not null,
   degree    text,
   -- etc. etc.
);

insert into Students(zid,name,degree) values
(9300035,'Shepherd, John Andrew', 'BSc(Computer Science)'),
(5012345,'Smith, Stephen', 'BE(Hons)(Software Engineering)');

create index on Students using hash (name);

select a.zid, a.name, b.zid
from   Students a join Students b on (a.name = b.name);

select family(name), given(name), show(name)
from   Students;

select name,count(*)
from   Students
group  by name;
Having defined a hash-based file structure, we would expect that the queries would make use of it. You can check this by adding the keyword EXPLAIN before the query, e.g.

db=# explain analyze select * from Students where name='Smith,John';
which should, once you have correctly implemented the data type and loaded sufficient data, show that an index-based scan of the data is being used. Note that this will only be evident if you use a large amount of data (e.g. one of the larger test data samples to be provided).

Person Name values
Valid PersonNames will have the above format with the following qualifications:

there may be a single space after the comma
there will be no people with just one name (e.g. no Prince, Jesus, Aristotle, etc.)
there will be no numbers (e.g. noGates, William 3rd)
there will be no titles (e.g. no Dr, Prof, Mr, Ms)
there will be no initials (e.g. no Shepherd,John A)
In other words, you can ignore the possibility of certain types of names while implementing your input and output functions.

If titles occur, you can assume that they will occur after a comma after the given names, e.g. "Smith, John, Dr". If a string that looks like a title occurs (accidentally) where a name might occur, treat it as a name.

A more precise definition can be given using a BNF grammar:

PersonName ::= Family','Given | Family', 'Given

Family     ::= NameList
Given      ::= NameList

NameList   ::= Name | Name' 'NameList

Name       ::= Upper Letters

Letter     ::= Upper | Lower | Punc

Letters    ::= Letter | Letter Letters

Upper      ::= 'A' | 'B' | ... | 'Z'
Lower      ::= 'a' | 'b' | ... | 'z'
Punc       ::= '-' | "'"
You should not make any assumptions about the maximum length of a PersonName.

Under this syntax, the following are valid names:

Smith,John
Smith, John
O'Brien, Patrick Sean
Mahagedara Patabendige,Minosha Mitsuaki Senakasiri
I-Sun, Chen Wang
Clifton-Everest,Charles Edward
The following names are not valid in our system:

Jesus                     # no single-word names
Smith  ,  Harold          # space before the ","
Gates, William H., III    # no initials, too many commas
A,B C                     # names must contain at least 2 letters
Smith, john               # names begin with an upper-case letter
Think about why each of the above is invalid in terms of the syntax definition.

Important: for this assignment, we define an ordering on names as follows:

the ordering is determined initially by the ordering on the Family Name
if the Family Names are equal, then the ordering is determined by the Given Names
ordering of parts is determined lexically
There are examples of how this works in the section on Operations on PersonNames below.

Representing Person Names
The first thing you need to do is to decide on an internal representation for your PersonName data type. You should do this, however, after you have looked at the description of the operators below, since what they require may affect how you decide to structure your internal PersonName values.

When you read strings representing PersonName values, they are converted into your internal form, stored in the database in this form, and operations on PersonName values are carried out using this data structure. It is useful to define a canonical form for names, which may be slightly different to the form in which they are read (e.g. "Smith, John" might be rendered as "Smith,John"). When you display PersonName values, you should show them in canonical form, regardless of how they were entered or how they are stored.

The first functions you need to write are ones to read and display values of type PersonName. You should write analogues of the functions complex_in(), complex_out that are defined in the file complex.c. Call them, e.g., pname_in() and pname_out(). Make sure that you use the V1 style function interface (as is done in complex.c).

Note that the two input/output functions should be complementary, meaning that any string displayed by the output function must be able to be read using the input function. There is no requirement for you to retain the precise string that was used for input (e.g. you could store the PersonName value internally in a different form such as splitting it into two strings: one for the family name(s), and one for the given name(s)).

One thing that pname_in() must do is determine whether the name has the correct structure (according to the grammar above). Your pname_out() should display each name in a format that can be read by pname_in().

Note that you are not required to define binary input/output functions, called receive_function and send_function in the PostgreSQL documentation, and called complex_send and complex_recv in the complex.cfile.

As noted above, you cannot assume anything about the maximum length of names. If your solution uses two fixed-size buffers (one for family, one for given) then your mark is limited to a maximum of 8/15, even if you pass all of the tests.

Operations on person names
You must implement all of the following operations for the PersonName type:

PersonName1 = PersonName2 ... two names are equal

Two PersonNames are equivalent if, they have the same family name(s) and the same given name(s).

PersonName1: Smith,John
PersonName2: Smith, John
PersonName3: Smith, John David
PersonName4: Smith, James

(PersonName1 = PersonName1) is true
(PersonName1 = PersonName2) is true
(PersonName2 = PersonName1) is true        (commutative)
(PersonName2 = PersonName3) is false
(PersonName2 = PersonName4) is false
PersonName1 > PersonName2 ... the first PersonName is greater than the second

PersonName1 is greater than PersonName2 if the Family part of PersonName1 is lexically greater than the Family part of PersonName2. If the Family parts are equal, then PersonName1 is greater than PersonName2 if the Given part of PersonName1 is lexically greater than the Given part of PersonName2.

PersonName1: Smith,James
PersonName2: Smith,John
PersonName3: Smith,John David
PersonName4: Zimmerman, Trent

(PersonName1 > PersonName2) is false
(PersonName1 > PersonName3) is false
(PersonName3 > PersonName2) is true
(PersonName1 > PersonName1) is false
(PersonName4 > PersonName3) is true
Other operations:   <>,   >=,   <,   <=

You should also implement the above operations, whose semantics is hopefully obvious from the descriptions above. The operators can typically be implemented quite simply in terms of the first two operators.

family(PersonName) returns just the Family part of a name

PersonName1: Smith,James
PersonName2: O'Brien,Patrick Sean
PersonName3: Mahagedara Patabendige,Minosha Mitsuaki Senakasir
PersonName4: Clifton-Everest,David Ewan

family(PersonName1) returns "Smith"
family(PersonName2) returns "O'Brien"
family(PersonName3) returns "Mahagedara Patabendige"
family(PersonName4) returns "Clifton-Everest"
given(PersonName) returns just the Given part of a name

PersonName1: Smith,James
PersonName2: O'Brien,Patrick Sean
PersonName3: Mahagedara Patabendige,Minosha Mitsuaki Senakasir
PersonName4: Clifton-Everest,David Ewan

given(PersonName1) returns "James"
given(PersonName2) returns "Patrick Sean"
given(PersonName3) returns "Minosha Mitsuaki Senakasir"
given(PersonName4) returns "David Ewan"
show(PersonName) returns a displayable version of the name

It appends the entire Family name to the first Given name (everything before the first space, if any), separated by a single space.

PersonName1: Smith,James
PersonName2: O'Brien,Patrick Sean
PersonName3: Mahagedara Patabendige,Minosha Mitsuaki Senakasir
PersonName4: Clifton-Everest,David Ewan
PersonName5: Bronte,Greta-Anna Maryanne

show(PersonName1) returns "James Smith"
show(PersonName2) returns "Patrick O'Brien"
show(PersonName3) returns "Minosha Mahagedara Patabendige"
show(PersonName4) returns "David Clifton-Everest"
show(PersonName5) returns "Greta-Anna Bronte"
Hint: test out as many of your C functions as you can outside PostgreSQL (e.g. write a simple test driver) before you try to install them in PostgreSQL. This will make debugging much easier.

You should ensure that your definitions capture the full semantics of the operators (e.g. specify commutativity if the operator is commutative). You should also ensure that you provide sufficient definitions so that users of the PersonName type can create hash-based indexes on an attribute of type PersonName.

Submission
You need to submit two files: pname.c containing the C functions that implement the internals of the PersonName data type, and pname.source containing the template SQL commands to install the PersonName data type into a PostgreSQL server. Do not submit the pname.sql file, since it contains absolute file names which are not helpful in our test environment.
請(qǐng)加QQ:99515681  郵箱:99515681@qq.com   WX:codehelp 

掃一掃在手機(jī)打開當(dāng)前頁(yè)
  • 上一篇:菲律賓黑名單洗白要多久 &#160;黑名單洗白費(fèi)用
  • 下一篇:代做COMP2013、代寫 c++/java,Python 編程
  • 無(wú)相關(guān)信息
    合肥生活資訊

    合肥圖文信息
    流體仿真外包多少錢_專業(yè)CFD分析代做_友商科技CAE仿真
    流體仿真外包多少錢_專業(yè)CFD分析代做_友商科
    CAE仿真分析代做公司 CFD流體仿真服務(wù) 管路流場(chǎng)仿真外包
    CAE仿真分析代做公司 CFD流體仿真服務(wù) 管路
    流體CFD仿真分析_代做咨詢服務(wù)_Fluent 仿真技術(shù)服務(wù)
    流體CFD仿真分析_代做咨詢服務(wù)_Fluent 仿真
    結(jié)構(gòu)仿真分析服務(wù)_CAE代做咨詢外包_剛強(qiáng)度疲勞振動(dòng)
    結(jié)構(gòu)仿真分析服務(wù)_CAE代做咨詢外包_剛強(qiáng)度疲
    流體cfd仿真分析服務(wù) 7類仿真分析代做服務(wù)40個(gè)行業(yè)
    流體cfd仿真分析服務(wù) 7類仿真分析代做服務(wù)4
    超全面的拼多多電商運(yùn)營(yíng)技巧,多多開團(tuán)助手,多多出評(píng)軟件徽y1698861
    超全面的拼多多電商運(yùn)營(yíng)技巧,多多開團(tuán)助手
    CAE有限元仿真分析團(tuán)隊(duì),2026仿真代做咨詢服務(wù)平臺(tái)
    CAE有限元仿真分析團(tuán)隊(duì),2026仿真代做咨詢服
    釘釘簽到打卡位置修改神器,2026怎么修改定位在范圍內(nèi)
    釘釘簽到打卡位置修改神器,2026怎么修改定
  • 短信驗(yàn)證碼 豆包網(wǎng)頁(yè)版入口 破天一劍 目錄網(wǎng) 排行網(wǎng)

    關(guān)于我們 | 打賞支持 | 廣告服務(wù) | 聯(lián)系我們 | 網(wǎng)站地圖 | 免責(zé)聲明 | 幫助中心 | 友情鏈接 |

    Copyright © 2025 hfw.cc Inc. All Rights Reserved. 合肥網(wǎng) 版權(quán)所有
    ICP備06013414號(hào)-3 公安備 42010502001045

    国产人妻人伦精品_欧美一区二区三区图_亚洲欧洲久久_日韩美女av在线免费观看
    国产精品精品一区二区三区午夜版| 97精品伊人久久久大香线蕉| 欧美日韩精品免费观看| 国产男女猛烈无遮挡91| 日韩在线中文字幕| 精品久久久久久久久久中文字幕| 欧美一区二区三区四区在线| 国产欧美日韩中文| 国产富婆一区二区三区| 亚洲一区 在线播放| 人妻精品无码一区二区三区| 97久久精品视频| 久久久国产视频91| 亚洲v欧美v另类v综合v日韩v| 国产日韩成人内射视频| 久久久精品一区二区三区| 色中色综合成人| 91美女福利视频高清| 精品自在线视频| 毛片一区二区三区四区| 久久人人爽人人爽爽久久| 日本不卡在线观看视频| 久久免费视频网站| 中文字幕黄色大片| 国产日韩欧美亚洲一区| 精品国产一区二区在线 | 日韩在线精品视频| 午夜精品久久久久久久久久久久久 | 欧美激情国产日韩精品一区18| 欧美精品久久久久久久久久久 | 日韩在线电影一区| 国产精品一区二区久久| 国产999视频| 国产欧美精品一区二区| 国产成人精品一区| 欧美日韩日本网| 久久久极品av| 欧美亚洲国产免费| 久久久亚洲欧洲日产国码aⅴ| 亚洲人成人77777线观看| 91久久久在线| 亚洲成人第一| 国产女同一区二区| 美女av一区二区三区| 国产一区二区丝袜| 国产免费一区二区三区在线能观看 | 一区二区成人国产精品| 国产精品亚洲综合天堂夜夜| 一区二区在线中文字幕电影视频| 成人av资源在线播放| 亚洲精品国产精品国自产| 久久久久久av无码免费网站下载| 日日碰狠狠躁久久躁婷婷| 99视频日韩| 丁香六月激情婷婷| 久久精品magnetxturnbtih| 日韩视频在线免费播放| 久久久久久久av| 欧美深夜福利视频| 久久伊人精品视频| 国产伦精品一区二区三毛| 亚洲一区二区三区视频播放| 久久久综合免费视频| 青青在线视频一区二区三区| 国产精品日韩精品| 福利视频一二区| 午夜精品在线观看| www.亚洲一区| 国内精品一区二区三区| 在线视频精品一区| 99国产盗摄| 五月天综合婷婷| 久热精品视频在线| 国产狼人综合免费视频| 欧美一级黄色影院| 国产精品麻豆va在线播放| 国产精品午夜国产小视频| 日韩中文字幕在线不卡| 国产精品日韩高清| 91免费在线视频| 欧美与黑人午夜性猛交久久久| 久久综合88中文色鬼| 久久九九视频| 欧美日韩黄色一级片| 欧美激情网站在线观看| 国产xxxx振车| 国产美女精品久久久| 日韩视频在线观看视频| 国产aⅴ夜夜欢一区二区三区| 国产超碰91| 国产女主播一区二区三区| 日本久久久网站| 久久伊人91精品综合网站| 超碰国产精品久久国产精品99| 日韩欧美视频网站| 亚洲最大成人在线| 国产精品视频色| 久久久免费在线观看| 欧美少妇一区| 性欧美在线看片a免费观看| 国产精品久久久久久久午夜| 久久久亚洲国产| 国产欧美一区二区白浆黑人| 日韩精品一区二区三区四区五区 | 久久久久亚洲精品| 高清在线观看免费| 欧美国产二区| 日本一区免费在线观看| 欧美激情亚洲另类| 久久精品91久久香蕉加勒比| 国产伦精品一区二区三区四区视频_| 日本精品免费在线观看| 一区二区冒白浆视频| 国产精品二区三区四区| 日韩在线免费av| 国产高清精品一区二区| 国产女主播自拍| 青春草国产视频| 亚洲欧美日韩不卡| 亚洲视频欧美在线| 久久99热精品这里久久精品| 国产精品三级久久久久久电影| 国产成人一区二区| 国产精品ⅴa在线观看h| 国产精品一区二区免费在线观看| 日韩高清国产一区在线观看| 一本色道久久综合亚洲二区三区 | 91国产精品电影| 成人在线观看毛片| 国产免费一区视频观看免费| 国内精品久久久久久久| 欧洲精品在线一区| 日本欧美在线视频| 亚洲一区二区三区色| 国产aaa一级片| 欧美精品手机在线| 久久手机免费视频| 日韩中文有码在线视频| 久久亚洲免费| 成人久久18免费网站图片| 国产精品亚洲美女av网站| 国产欧美亚洲精品| 国产人妻777人伦精品hd| 国产一区二区色| 国产在线视频欧美| 国产这里只有精品| 国产日韩欧美一二三区| 国产一区二区视频免费在线观看 | 日韩中文字幕免费看| 久久久久亚洲精品| 色偷偷9999www| 久久久精品欧美| 久久精品久久精品亚洲人| 日日骚久久av| 国产精品美女网站| 精品久久久久久久久久中文字幕| 国产精品极品在线| 久久国产精品久久久久久久久久 | 国产精品久久9| 久久夜色撩人精品| 欧美激情一二区| 欧美日韩国产91| 亚洲成熟丰满熟妇高潮xxxxx| 少妇久久久久久被弄到高潮| 日本久久久久久久| 欧美性受xxx| 国产中文字幕亚洲| 高清不卡日本v二区在线| 97成人在线观看视频| 国产第一区电影| 久久久噜噜噜www成人网| www.亚洲免费视频| 国产精品久久久久久久久 | 国产天堂视频在线观看| 国产精品一区二区三区不卡| 97久久天天综合色天天综合色hd| 国产精品99久久久久久久久久久久| 国产不卡av在线免费观看| 久久精品小视频| 久久99亚洲精品| 日日碰狠狠躁久久躁婷婷| 日本欧美中文字幕| 精品一区二区久久久久久久网站| 蜜桃成人免费视频| av久久久久久| 日韩在线观看免费高清| 九九热这里只有精品6| 亚洲va久久久噜噜噜久久狠狠 | 国产主播喷水一区二区| 97国产精品视频| 久久精品国产综合| 一级特黄妇女高潮| 欧美夜福利tv在线| 成人av中文| 久久久精品视频在线观看| 欧美激情在线一区| 奇米精品一区二区三区| 韩国精品久久久999| 久久久水蜜桃| 久色乳综合思思在线视频|