📄 insert_into.cpp
字号:
#include "min.h"
void sql::insert_into( )
{
int length;
int i, j, k;
char ft = '*';
string s_into;
try
{
cin >> s_into;
if ( s_into != "into" )
throw 1;
//**********************************
cin >> filename;
//表是否存在
Table* t;
t = tabexist();
if ( !t )
{
throw 2;
}
page = readtable();
length=strlen(buf[page]);
cin >> command;
if( strcmp( command, "values" ) )
throw 1;
char a;
cin >> a;
if( a!='(' )
throw 1;
//按列检查
ostrstream out( &buf[page][strlen(buf[page])], sbf-strlen(buf[page]) );
for( i = 0; i < 32; i++ )
{
istrstream iin( buf[page], sbf );
for( j=i; j; j-- )
iin.ignore(10000,'\t');
string key;//属性名+类型+特性
char type;//属性类型
char att;//属性特性
iin >> key;
if( key=="&")
break;
type = key.at ( key.size()-2 );
att = key.at ( key.size()-1 );
int per; //属性的长度+1;
iin >> per;
if( type == '$' ) //char
{
char value[257];
//检查类型
char value0;
cin >>value0;
if( value0 != '\'' )
throw 5;
int m=0;
cin >> value[m];
while (value[m]!=','&&value[m]!=')')
{
m++;
cin >>value[m];
}
if( value[m-1]!='\'')
throw 11;
value[m-1]='\0';
//检查长度
if( strlen(value) >= per )
throw 5;
//检查特性
if(att!='n')
for(k=0;k<t->next->num;k++)//******************
{
iin.ignore(1000, '\n');
for( j=i; j; j-- )
iin.ignore(10000,'\t');
string sfile;
iin >> sfile;
if(!sfile.compare(value))
{
if(att=='p')
throw 6;
if(att=='u')
throw 7;
}
}
out << value <<'\t';
}
else if( type == '#' ) //int
{
int value = -99999;
cin >> value;
//检查类型
char rubbish;
if ( value==-99999 )
{
throw 5;
}
cin >> rubbish;//','
if ( rubbish!=','&&rubbish!=')')
throw 5;
//检查特性
if(att!='n')
for(k=0;k<t->next->num;k++) //*******************
{
iin.ignore(1000, '\n');
for( j=i; j; j-- )
iin.ignore(10000,'\t');
int ifile;
iin >> ifile;
if(value==ifile)
{
if(att=='p')
throw 6;
if(att=='u')
throw 7;
}
}
out << value << '\t';
}
}
out << '\0';
buf[page][strlen(buf[page])-1] = '\n';
cin>>ft;
if( ft!=';' )
throw 4;
t->next->num++;
modify_index( t->next);
modify [page] = 1; //********************8
//***********************
cout << "对表<" + filename + ">插入记录成功!" << endl;
Log("对表<" + filename + ">插入记录成功!");//pp
}
catch( int i )
{
switch ( i )
{
case 1: cout << "语法错误!" << endl;
break;
case 2: cout <<filename<<"表不存在!" << endl;
break;
case 3: cout << "无法打开表文件!" << endl;
break;
case 4: cout << "参数个数不匹配!"<< endl;
break;
case 5: cout << "类型不匹配(包括字符串过长)!" << endl;
break;
case 6: cout << "违反主键的唯一性!" << endl;
break;
case 7: cout << "违反unique属性的唯一性!" << endl;
break;
case 10:cout << "无法打开数据字典!" << endl;
break;
case 11:cout << "类型不匹配(包括字符串过长)!" << endl;
break;
}
if ( i!=1&&i!=2&&i!=3 )
{
int current_length = strlen(buf[page]);
for( int l=length; l<=current_length; l++ )
buf[page][l] = '\0';//回滚。。
}
Log("对表<" + filename + ">插入记录失败!");//pp
char a[50];
cin.getline(a,50);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -